diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 000000000..2163e8e9f --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,21 @@ +module.exports = { + env: { + browser: true, + es2021: true + }, + extends: ['plugin:react/recommended', 'standard', 'prettier'], + parserOptions: { + ecmaFeatures: { + jsx: true + }, + ecmaVersion: 12, + sourceType: 'module' + }, + plugins: ['react', 'prettier'], + rules: { + 'prettier/prettier': ['error', { singleQuote: true, semi: false, printWidth: 120, trailingComma: 'none' }], + 'react/prop-types': 0, + 'react/no-children-prop': 0, + 'react/display-name': 0 + } +} diff --git a/CHANGELOG.md b/CHANGELOG.md index 7668e20d4..cdb350621 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,615 +1,90 @@ # 更新日志 -## 2.15.0 - -- 优化 `` onBeforeSave 、 onDragStart 支持返回 Promise [#1179](https://github.com/XiaoMi/hiui/issues/1179) -- 优化 `` 新增属性 inputReadOnly 设置输入框为只读形态 [#1203](https://github.com/XiaoMi/hiui/issues/1203) -- 优化 `` 新增属性 inputReadOnly 设置输入框为只读形态 [#1203](https://github.com/XiaoMi/hiui/issues/1203) -- 优化 `` 新增 hourStep、minuteStep、secondStep 等时分秒间隔选项 [#1194](https://github.com/XiaoMi/hiui/issues/1195) -- 优化 `
` 当只有一个输入框时,阻止在该输入框中按下回车提交该表单行为 [#1205](https://github.com/XiaoMi/hiui/issues/1205) -- 优化 `` uploadAction 支持返回 Promise [#1198](https://github.com/XiaoMi/hiui/issues/1198) -- 修复 `` Children 节点添加点击事件后,点击回调 index 异常问题 [#1201](https://github.com/XiaoMi/hiui/issues/1201) -- 修复 `` value 为 null 时导致功能使用异常问题 [#1218](https://github.com/XiaoMi/hiui/issues/1218) -- 修复 `` ref 属性无效问题 [#1192](https://github.com/XiaoMi/hiui/issues/1192) -- 修复 `` type 为 timerange 时,时间范围选择问题 [#1188](https://github.com/XiaoMi/hiui/issues/1188) -- 修复 `` 切换按键无效问题 [#1210](https://github.com/XiaoMi/hiui/issues/1210) -- 修复 `` type 为 photo 时,上传时样式问题 [#1186](https://github.com/XiaoMi/hiui/issues/1186) -- 修复 `` 设置 clearable 属性控制台警告问题 [#1143](https://github.com/XiaoMi/hiui/issues/1143) -- 修复 `` type 为 amount 类型时的问题 [#1150](https://github.com/XiaoMi/hiui/issues/1150) -- 修复 `` placement 为 inside 内容显示折断问题 [#1146](https://github.com/XiaoMi/hiui/issues/1146) -- 修复 `` 部分图标字号问题 [#1145](https://github.com/XiaoMi/hiui/issues/1145) -- 修复 `` type 非 editable 时,title 属性控制台警告问题 [#1144](https://github.com/XiaoMi/hiui/issues/1144) -- 修复 `` useEmoji 为 true 时,设置 value > 5 报错问题 [#1137](https://github.com/XiaoMi/hiui/issues/1137) -- 修复 `` title 为 nubmer 类型时的问题 [#1077](https://github.com/XiaoMi/hiui/issues/1077) -- 修复 `` 优化弹窗位置计算触发机制 [#1072](https://github.com/XiaoMi/hiui/issues/1072) -- 修复 `` 异步多选受控时,选中项会重复添加的问题 [#1044](https://github.com/XiaoMi/hiui/issues/1044) -- 修复 `` 嵌套使用 type 不生效的问题 [#1046](https://github.com/XiaoMi/hiui/issues/1046) -- 修复 `` activeId 发生改变时展开选中项 [#1029](https://github.com/XiaoMi/hiui/issues/1029) -- 修复 `` 异步获取数据时,activeId 失效的问题 [#1027](https://github.com/XiaoMi/hiui/issues/1027) -- 修复 `` editable 和 searchable 不同同时使用的问题 [#1023](https://github.com/XiaoMi/hiui/issues/1023) -- 优化 `` 展示效果 [#1024](https://github.com/XiaoMi/hiui/issues/1024) -- 优化 `` 展示效果 [#1086](https://github.com/XiaoMi/hiui/issues/1086)[#1048](https://github.com/XiaoMi/hiui/issues/1048) -- 优化 `` 拖拽性能 [#1087](https://github.com/XiaoMi/hiui/issues/1087) -- 新增 `` onBeforeSave onBeforeDelete 函数 [#1093](https://github.com/XiaoMi/hiui/issues/1093) -- 新增 `` 普通模式配色 [#1060](https://github.com/XiaoMi/hiui/issues/1060) -- 新增 `` 线性模式 [#1088](https://github.com/XiaoMi/hiui/issues/1088) -- 新增 `` 支持单独选中父级菜单 [#1038](https://github.com/XiaoMi/hiui/issues/1038) -- 新增 `` confirm 调用方式 [#1090](https://github.com/XiaoMi/hiui/issues/1090) -- 新增 `` 支持宽度调整 [#1033](https://github.com/XiaoMi/hiui/issues/1033) -- 新增 `` 增加月范围选择和年范围选择面板 [#1074](https://github.com/XiaoMi/hiui/issues/1074) -- 新增 `` 快捷方式「近半年」 [#1063](https://github.com/XiaoMi/hiui/issues/1063) -- 新增 `` trigger 属性配置选项展开的触发方式 [#1092](https://github.com/XiaoMi/hiui/issues/1092) -- 新增 `` onPageSizeChange 可通过返回 false 来防止触发 onChange [#1091](https://github.com/XiaoMi/hiui/issues/1091) -- 新增 `` 支持通过 icon 配置 HiUI icon [#1064](https://github.com/XiaoMi/hiui/issues/1064) -- 新增 `` contextMenu 增加层级回调参数 [#1021](https://github.com/XiaoMi/hiui/issues/1021) -- 新增多语言繁体支持 [#1062](https://github.com/XiaoMi/hiui/issues/1062) - -## 2.12.0 - -- 新增 `` 水印组件 [#121](https://github.com/XiaoMi/hiui/issues/121) -- 修复 `` 多选模式下在禁用状态复选框样式异常的问题 [#1014](https://github.com/XiaoMi/hiui/issues/1014) -- 修复 `` 可搜索模式下自动获取输入框焦点 [#925](https://github.com/XiaoMi/hiui/issues/925) -- 优化 `` 轮播定位交互,并新增 showPages 是否显示页码指示器 [#925](https://github.com/XiaoMi/hiui/issues/925) -- 修复 `` 多选出现双滚动条的样式问题 [#920](https://github.com/XiaoMi/hiui/issues/920) -- 修复 ` {isGroup && ( )} diff --git a/components/dropdown/DropdownMenu.jsx b/components/dropdown/DropdownMenu.jsx index c8b14947f..68b81ca43 100644 --- a/components/dropdown/DropdownMenu.jsx +++ b/components/dropdown/DropdownMenu.jsx @@ -6,7 +6,7 @@ import { prefixCls } from '.' import DropdownMenuItem from './DropdownMenuItem' class DropdownMenu extends React.Component { - render () { + render() { const { data, attachEle, @@ -17,8 +17,10 @@ class DropdownMenu extends React.Component { onChildMenuMouseEnter, onChildMenuMouseLeave, onMenuItemClick, + handleDocumentClick, width, - theme + theme, + overlayClassName } = this.props const menuCls = classNames(`${prefixCls}__menu`, `theme__${theme}`) return ( @@ -26,12 +28,17 @@ class DropdownMenu extends React.Component { className={`${prefixCls}__popper`} show={visible} attachEle={attachEle} + // container={document.body} zIndex={1060} placement={placement} width={width} onMouseEnter={onMouseEnter} leftGap={0} + overlayClassName={overlayClassName} onMouseLeave={onMouseLeave} + onClickOutside={() => { + handleDocumentClick && handleDocumentClick() + }} >
    {data.map((item, index) => ( diff --git a/components/dropdown/DropdownMenuItem.jsx b/components/dropdown/DropdownMenuItem.jsx index 4a8853e3a..909e74fc0 100644 --- a/components/dropdown/DropdownMenuItem.jsx +++ b/components/dropdown/DropdownMenuItem.jsx @@ -4,19 +4,27 @@ import Icon from '../icon' import DropdownMenu from './DropdownMenu' import { prefixCls } from '.' -const MenuItemWrapper = forwardRef(({ href, children, disabled, ...props }, ref) => { - const shouldUseLink = href && !disabled - if (disabled) { - Reflect.deleteProperty(props, 'onMouseEnter') - Reflect.deleteProperty(props, 'onMouseLeave') - Reflect.deleteProperty(props, 'onClick') +const MenuItemWrapper = forwardRef( + ({ href, target, children, disabled, ...props }, ref) => { + const shouldUseLink = href && !disabled + if (disabled) { + Reflect.deleteProperty(props, 'onMouseEnter') + Reflect.deleteProperty(props, 'onMouseLeave') + Reflect.deleteProperty(props, 'onClick') + } + return ( +
  • + {shouldUseLink ? ( + + {children} + + ) : ( + children + )} +
  • + ) } - return ( -
  • - {shouldUseLink ? {children} : children} -
  • - ) -}) +) export default class DropdownMenuItem extends React.Component { refItem = React.createRef() @@ -51,18 +59,14 @@ export default class DropdownMenuItem extends React.Component { this.setMenuHide() } - handleMenuItemClick = (event) => { + handleMenuItemClick = event => { if (event) { event.stopPropagation() - event.preventDefault() - if (event.nativeEvent && event.nativeEvent.stopImmediatePropagation) { - event.nativeEvent.stopImmediatePropagation() - } } const { onMenuItemClick, id, children, href } = this.props - onMenuItemClick(id, (href || !children)) + onMenuItemClick(id, href || !children) } - render () { + render() { const { title, children, diff --git a/components/dropdown/index.d.ts b/components/dropdown/index.d.ts new file mode 100644 index 000000000..fc5e7b56c --- /dev/null +++ b/components/dropdown/index.d.ts @@ -0,0 +1,27 @@ +import { CSSProperties } from "react" + +type DataItem = { + title: string | JSX.Element + id: string | number + disabled?: boolean + href?: string +} +interface TriggersArray { + [index: number]: 'click' | 'contextmenu' | 'hover' +} +interface Props { + trigger?: TriggersArray[number] | TriggersArray + data: DataItem[] + title: string | JSX.Element + type?: 'text' | 'button' | 'group' + placement?: 'bottom-start' | 'top-start' | 'bottom' | 'top' + disabled?: boolean + width?: number + className?: string + style?: CSSProperties + onClick?: (id: string | number) => void + onButtonClick?: (event: MouseEvent) => void + overlayClassName?: string +} +declare const Dropdown: React.ComponentType +export default Dropdown diff --git a/components/dropdown/index.js b/components/dropdown/index.js index ae7e4dae2..f0058c567 100644 --- a/components/dropdown/index.js +++ b/components/dropdown/index.js @@ -6,29 +6,45 @@ export const prefixCls = 'hi-dropdown' const CompatedDropdown = forwardRef(({ prefix, suffix, data, list, ...props }, ref) => { let originData = [] - originData = (list && !data) ? [...list] : [...data] + originData = list && !data ? [...list] : [...data] originData = convertData(originData, prefix, suffix) return }) export default CompatedDropdown -function convertData (data, prefix = '', suffix = '') { - const recur = data => { - return data.map(item => { +function convertData(data, prefix = '', suffix = '') { + const recur = (data) => { + return data.map((item) => { if (item.children) { item.children = recur(item.children) } if (item.title !== '-') { if (item.prefix) { - item.title = {item.prefix} {item.title} + item.title = ( + + {item.prefix} {item.title} + + ) } else { - item.title = {prefix} {item.title} + item.title = ( + + {prefix} {item.title} + + ) } if (item.suffix && !item.children) { - item.title = {item.title} {item.suffix} + item.title = ( + + {item.title} {item.suffix} + + ) } else { - item.title = {item.title} {suffix} + item.title = ( + + {item.title} {suffix} + + ) } } if (item.url && !item.href) { diff --git a/components/dropdown/style/index.scss b/components/dropdown/style/index.scss index d775eeb0c..f9a4a6432 100644 --- a/components/dropdown/style/index.scss +++ b/components/dropdown/style/index.scss @@ -1,4 +1,4 @@ -@import '@hi-ui/core-css/index.scss'; +@import '../../core-css/index.scss'; $prefixCls: 'hi-dropdown' !default; @@ -15,14 +15,12 @@ $prefixCls: 'hi-dropdown' !default; } .#{$prefixCls} { - @include component-reset(); - user-select: none; display: inline-block; &--disabled { .#{$prefixCls}__button { - color: #ccc; + color: use-color('gray-50'); cursor: not-allowed; } } @@ -70,13 +68,13 @@ $prefixCls: 'hi-dropdown' !default; } &__popper { - background: rgba(255, 255, 255, 1); + background: use-color('white'); box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.15); border-radius: 2px; } &__divider { - background-color: #e8e8e8; + background-color: use-color('gray-20'); width: 100%; height: 1px; margin: 4px 0; @@ -100,26 +98,18 @@ $prefixCls: 'hi-dropdown' !default; transition: 0.3s ease; &--disabled { - color: #ccc; + color: use-color('gray-50'); cursor: not-allowed; } a { - color: #333; + color: use-color('black'); width: 100%; } &:not(.hi-dropdown__menu-item--disabled):hover { - background-color: #ecf2fe; + background-color: use-color('primary-20'); } } } } - -@each $key, $value in $palette-primary { - .theme__#{$key}.#{$prefixCls}__menu { - .#{$prefixCls}__menu-item:not(.hi-dropdown__menu-item--disabled):hover { - background-color: rgba($value, 0.15); - } - } -} diff --git a/components/filter/index.d.ts b/components/filter/index.d.ts new file mode 100644 index 000000000..042916248 --- /dev/null +++ b/components/filter/index.d.ts @@ -0,0 +1,16 @@ +type DataItem = { + id?: string | number + content?: string | JSX.Element + disabled?: boolean +} +export interface Props { + label?: string[] + labelWidth?: number + showUnderline?: boolean + data?: DataItem[] + defaultValue?: string[] | number[] + value?: string[] | number[] + onChange?: (value: number | string) => void +} +declare const Filter: React.ComponentType +export default Filter diff --git a/components/filter/index.js b/components/filter/index.js new file mode 100644 index 000000000..60389e005 --- /dev/null +++ b/components/filter/index.js @@ -0,0 +1,86 @@ +import React, { useState, useEffect } from 'react' +import classNames from 'classnames' +import _ from 'lodash' +import Provider from '../context' + +import './style' + +const prefixCls = 'hi-filter' + +const Filter = (props) => { + const { data = [], onChange, onClick, value, defaultValue = [], label = [], labelWith, showUnderline, theme } = props + const [options, setOptions] = useState(data || []) + const [selectId, setSelectId] = useState(value || defaultValue || []) + useEffect(() => { + setOptions(data) + }, [data]) + useEffect(() => { + value && setSelectId(value) + }, [value]) + const renderRadioItem = (item, levelActiveId, level) => { + const { id, content, disabled } = item + const active = item.id === levelActiveId + const cls = classNames(`${prefixCls}-content-item`, { + [`${prefixCls}-content-item__active`]: active, + [`${prefixCls}-content-item__disabled`]: disabled + }) + return ( +
  • { + if (disabled) { + return + } + const _activeId = selectId || [] + _activeId.splice(level - 1) + _activeId[level - 1] = id + if (!value) { + setSelectId(_.cloneDeep(_activeId)) + } + onClick && onClick(item) + onChange && !active && onChange(_activeId) + }} + > + {content} + {active && showUnderline && } +
  • + ) + } + const renderCascadeContent = () => { + const content = [] + let currentOptions = _.cloneDeep(options) + let level = 0 + let levelLabel + while (currentOptions || levelLabel) { + const _currentOptions = _.cloneDeep(currentOptions) + currentOptions = false + const levelActiveId = selectId && selectId.length ? selectId[level] : null + const _label = label.length ? label[level] : undefined + level++ + levelLabel = label.length ? label[level] : undefined + content.push( +
    +
    + + {_label} + +
    +
      + {_currentOptions && + _currentOptions.map((item) => { + if (item.children && item.id === levelActiveId) { + currentOptions = item.children + } + return renderRadioItem(item, levelActiveId, level) + })} +
    +
    + ) + } + return content + } + + return
    {renderCascadeContent()}
    +} +export default Provider(Filter) diff --git a/components/table/checkbox/style/index.js b/components/filter/style/index.js similarity index 100% rename from components/table/checkbox/style/index.js rename to components/filter/style/index.js diff --git a/components/filter/style/index.scss b/components/filter/style/index.scss new file mode 100644 index 000000000..b34140856 --- /dev/null +++ b/components/filter/style/index.scss @@ -0,0 +1,74 @@ +@import '../../core-css/index.scss'; +$filter: 'hi-filter' !default; + +.#{$filter} { + &-content { + display: flex; + + &-items { + display: flex; + flex-wrap: wrap; + margin: 0; + padding: 0; + padding-left: 16px; + } + + &-item { + position: relative; + height: 40px; + font-size: $font-size-normal; + color: use-color('black'); + line-height: 40px; + margin-right: 40px; + cursor: pointer; + transition: all 0.3s; + list-style: none; + } + + &-item__active { + color: use-color('primary'); + } + + &-item__disabled { + cursor: not-allowed; + opacity: 0.4; + } + + &-item__active--underline { + position: absolute; + width: 24px; + height: 2px; + display: inline-block; + background-color: use-color('primary'); + bottom: 0; + left: 50%; + right: 50%; + transform: translate(-50%, -50%); + } + + &-label { + display: flex; + justify-content: space-between; + align-items: center; + height: 40px; + + &__title { + display: inline-block; + width: 76px; + font-size: $font-size-normal; + color: use-color('gray-70'); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + } + + &-label::after { + display: inline-block; + content: ''; + width: 1px; + height: 14px; + background-color: #d8d8d8; + } + } +} diff --git a/components/form/Form.js b/components/form/Form.js index a96056b0f..d7789aa63 100644 --- a/components/form/Form.js +++ b/components/form/Form.js @@ -1,110 +1,236 @@ -import React, { Component } from 'react' +import React, { useEffect, useCallback, useReducer, forwardRef } from 'react' +import _ from 'lodash' import classNames from 'classnames' import PropTypes from 'prop-types' +import FormReducer, { FILEDS_UPDATE, FILEDS_UPDATE_LIST } from './FormReducer' +import FormContext from './FormContext' +import { transformValues } from './utils' -class Form extends Component { - constructor (props) { - super(props) +const getClassNames = (props) => { + const { labelPlacement, labelPosition, placement, inline, readOnly } = props + const _className = {} - this.state = { - fields: [] - } + if (labelPlacement || labelPosition) { + _className[`hi-form--label--${labelPlacement || labelPosition}`] = true } - - getChildContext () { - return { - component: this - } - } - - getClassNames () { - const { labelPlacement, labelPosition, placement, inline } = this.props - - const obj = {} - - if (labelPlacement || labelPosition) { - obj[`hi-form--label--${labelPlacement || labelPosition}`] = true - } - if (placement === 'horizontal' || inline) { - obj[`hi-form--inline`] = true - } - - return obj + if (placement === 'horizontal' || inline) { + _className[`hi-form--inline`] = true } + _className[`hi-form--readOnly`] = readOnly + return _className +} - addField (field) { - this.setState((prevState) => ({ - fields: prevState.fields.concat(field) - })) - } +const InternalForm = (props) => { + const { + children, + className, + style, + innerRef: formRef, + initialValues, + onValuesChange, + _type // SchemaForm 内部配置变量 + } = props + const [state, dispatch] = useReducer(FormReducer, { + fields: [], + listNames: [], + listValues: {}, + ...props + }) + const { fields, listNames, listValues } = state + // 用户手动设置表单数据 + const setFieldsValue = useCallback( + (values) => { + const _fields = _.cloneDeep(fields) + _fields.forEach((item) => { + const { field } = item + if (values.hasOwnProperty(field)) { + const value = values[field] + item.value = value + item.setValue(value) + } + }) + dispatch({ type: FILEDS_UPDATE, payload: _fields }) + // 处理 list value + Object.keys(values).forEach((key) => { + listNames.includes(key) && + dispatch({ + type: FILEDS_UPDATE_LIST, + payload: Object.assign({}, { ...listValues }, { [key]: values[key] }) + }) + }) + }, + [fields, listValues] + ) + // 设置初始化的值 + useEffect(() => { + // 处理 list value + initialValues && + Object.keys(initialValues).forEach((key) => { + listNames.includes(key) && + dispatch({ + type: FILEDS_UPDATE_LIST, + payload: Object.assign({}, { ...listValues }, { [key]: initialValues[key] }) + }) + }) + }, []) + // 转换值的输出 + const internalValuesChange = useCallback( + (changeValues, allValues) => { + const _transformValues = transformValues(allValues, fields) + const _changeValues = _.cloneDeep(changeValues) + + Object.keys(changeValues).forEach((changeValuesKey) => { + fields.forEach((filedItem) => { + const { field, _type, listname } = filedItem + if (field === changeValuesKey && _type === 'list') { + _changeValues[listname] = _transformValues[listname] + delete _changeValues[changeValuesKey] + } + }) + }) - removeField (prop) { - this.setState((prevState) => ({ - fields: prevState.fields.filter((field) => field.props.field !== prop) - })) - } + onValuesChange && onValuesChange(_changeValues, _transformValues) + }, + [onValuesChange, fields] + ) + // 重置校验 + const resetValidates = useCallback( + (cb, resetNames, toDefault) => { + const changeValues = {} + const cacheallValues = {} + let _fields = _.cloneDeep(fields) + fields.forEach((item) => { + const { field, value } = item + cacheallValues[field] = value + }) - validate (cb) { - let valid = true - let count = 0 - const fields = this.state.fields - if (fields.length === 0 && cb) { - cb(valid) - } + _fields = _fields.filter((childrenField) => { + return Array.isArray(resetNames) ? resetNames.includes(childrenField.field) : true + }) - fields.forEach((field) => { - field.validate('', (errors) => { - if (errors) { - valid = false - } - if (typeof cb === 'function' && ++count === fields.length) { - cb(valid) + _fields.forEach((childrenField) => { + const value = + toDefault && initialValues && initialValues[childrenField.field] ? initialValues[childrenField.field] : '' + if (!_.isEqual(childrenField.value, value)) { + changeValues[childrenField.field] = value } + + childrenField.value = value + childrenField.resetValidate(value) }) - }) - } - validateField (key, cb) { - const field = this.state.fields.filter((field) => field.props.field === key)[0] + dispatch({ type: FILEDS_UPDATE, payload: _fields }) + cb instanceof Function && cb() + // 比较耗性能 + internalValuesChange(changeValues, Object.assign({}, { ...cacheallValues }, { ...changeValues })) + }, + [fields, initialValues, onValuesChange] + ) + // 对整个表单进行校验 + const validate = useCallback( + (cb, validateNames) => { + const values = {} + let errors = {} + + if (fields.length === 0 && cb) { + cb(values, errors) + return + } + + const _fields = fields.filter((fieldChild) => { + const { field, value } = fieldChild + values[field] = value + return Array.isArray(validateNames) ? validateNames.includes(field) : true + }) - if (!field) { - throw new Error('must call validate Field with valid key string!') + _fields.forEach((fieldChild) => { + const { field, value } = fieldChild + // 对指定的字段进行校验 其他字段过滤不校验 + fieldChild.validate( + '', + (error) => { + if (error) { + const errorsMsg = error.map((err) => { + return err.message + }) + errors[field] = { errors: errorsMsg } + } + }, + value + ) + }) + errors = Object.keys(errors).length === 0 ? null : errors + + cb && cb(transformValues(values, _fields), errors) + }, + [fields] + ) + + const validateField = useCallback( + (key, cb) => { + let value + const field = fields.filter((fieldChild) => { + if (fieldChild.field === key) { + value = fieldChild.value + return true + } + })[0] + + if (!field) { + throw new Error('must call validate Field with valid key string!') + } + + field.validate( + '', + (error) => { + cb && cb(error) + }, + value + ) + }, + [fields] + ) + + useEffect(() => { + if (!formRef) { + return } - - field.validate('', cb) - } - - resetValidates () { - this.state.fields.forEach((field) => { - field.resetValidate() - }) - } - - render () { - const { children, className, style } = this.props - - return ( - { - // 阻止只有一个表单时候;回车会触发form的提交操作 - e.preventDefault() - return false + formRef.current = { + resetValidates, + validateField, + validate, + setFieldsValue + } + }, [fields]) + + return ( + { + // 阻止只有一个表单时候;回车会触发form的提交操作 + e.preventDefault() + return false + }} + > + + > {children} - - ) - } + + + ) } - -Form.childContextTypes = { - component: PropTypes.any -} - -Form.propTypes = { - model: PropTypes.object, +InternalForm.propTypes = { rules: PropTypes.object, labelPlacement: PropTypes.oneOf(['right', 'left', 'top']), labelPosition: PropTypes.oneOf(['right', 'left', 'top']), @@ -116,10 +242,12 @@ Form.propTypes = { className: PropTypes.string, style: PropTypes.object } - -Form.defaultProps = { +InternalForm.defaultProps = { size: 'small', showColon: true } +const Form = forwardRef((props, ref) => { + return +}) export default Form diff --git a/components/form/FormContext.js b/components/form/FormContext.js new file mode 100644 index 000000000..5daac1068 --- /dev/null +++ b/components/form/FormContext.js @@ -0,0 +1,3 @@ +import React from 'react' +const FormContext = React.createContext({}) +export default FormContext diff --git a/components/form/FormReducer.js b/components/form/FormReducer.js new file mode 100644 index 000000000..6544df5eb --- /dev/null +++ b/components/form/FormReducer.js @@ -0,0 +1,34 @@ +export const FILEDS_INIT = 'FILEDS_INIT' +export const FILEDS_UPDATE = 'FILEDS_UPDATE' +export const FILEDS_UPDATE_VALUE = 'FILEDS_UPDATE_VALUE' +export const FILEDS_REMOVE = 'FILEDS_REMOVE' +export const FILEDS_INIT_LIST = 'FILEDS_INIT_LIST' +export const FILEDS_UPDATE_LIST = 'FILEDS_UPDATE_LIST' +const FormReducer = (state, action) => { + switch (action.type) { + case FILEDS_INIT: + const { fields } = state + const initfields = fields.filter((item) => { + return action.payload.field !== item.field + }) + return Object.assign({}, { ...state }, { fields: initfields.concat(action.payload) }) + case FILEDS_UPDATE: + return Object.assign({}, { ...state }, { fields: action.payload }) + case FILEDS_REMOVE: + const _fields = state.fields.filter((item) => { + return action.payload !== item.field && action.payload !== item.propsField + }) + return Object.assign({}, { ...state }, { fields: _fields }) + + case FILEDS_INIT_LIST: + const { listNames } = state + !listNames.includes(action.payload) && listNames.push(action.payload) + + return Object.assign({}, { ...state }, { listNames: listNames }) + case FILEDS_UPDATE_LIST: + return Object.assign({}, { ...state }, { listValues: action.payload }) + default: + return state + } +} +export default FormReducer diff --git a/components/form/Item.js b/components/form/Item.js index a6eaf2c70..e8882de98 100644 --- a/components/form/Item.js +++ b/components/form/Item.js @@ -1,124 +1,204 @@ -import React, { Component } from 'react' +import React, { useContext, useState, useEffect, useCallback, useRef } from 'react' import classNames from 'classnames' import AsyncValidator from 'async-validator' import PropTypes from 'prop-types' +import _ from 'lodash' + import { depreactedPropsCompat } from '../_util' +import FormContext from './FormContext' +import { FILEDS_INIT, FILEDS_UPDATE, FILEDS_REMOVE } from './FormReducer' +import * as HIUI from '../' -class FormItem extends Component { - constructor (props, context) { - super(props) +// 指定子元素位置 +const getItemPosition = (itemPosition) => { + let _itemPosition = 'flex-end' + switch (itemPosition) { + case 'top': + _itemPosition = 'flex-start' + break + case 'center': + _itemPosition = 'center' + break + case 'bottom': + _itemPosition = 'flex-end' + break + default: + _itemPosition = 'center' + } + return _itemPosition +} - this.state = { - error: '', - valid: false, - validating: false - } +const FormItem = (props) => { + const { formProps, formState, dispatch, internalValuesChange, listname, _type } = useContext(FormContext) + const { + children, + label, + required, + className, + showColon: shouldItemShowColon, + style, + field: propsField, + valuePropName = 'value', + contentPosition = 'center', + name, + listItemValue, + sort + } = props - this.initValue = '' + const FormItemContent = useRef() - this.parent = context.component - } + const { + showColon: shouldFormShowColon, + initialValues = {}, + localeDatas: { + form: { colon } + } + } = formProps || {} + // 初始化FormItem的内容 + const { fields } = formState + const [value, setValue] = useState('') + const [error, setError] = useState('') - componentDidMount () { - const { field } = this.props - if (field) { - this.parent.addField(this) - this.valueInit() + const getItemfield = useCallback(() => { + let _propsField = propsField + if (_type === 'list' && name) { + _propsField = _propsField + '#' + name } - } + return Array.isArray(propsField) ? propsField[propsField.length - 1] : _propsField + }, [propsField, name]) - componentWillUnmount () { - this.parent.removeField(this.props.field) - } + const [field, setField] = useState(getItemfield()) + const [validating, setValidating] = useState(false) + useEffect(() => { + setField(getItemfield()) + }, [propsField]) + // 更新 + const updateField = useCallback( + (_value, triggerType) => { + const childrenFiled = { + value: _value, + ...updateFieldInfoToReducer() + } + if (childrenFiled.field) { + const _fields = _.cloneDeep(fields) - valueInit () { - const value = this.parent.props.model[this.props.field] - if (value === undefined) { - this.initValue = value - } else { - this.initValue = JSON.parse(JSON.stringify(value)) - } - } + _fields.forEach((item) => { + if (item.field === childrenFiled.field) { + Object.assign(item, childrenFiled) + } + }) + const allValues = {} + _fields.forEach((item) => { + const { field, value } = item + allValues[field] = value + }) + dispatch({ type: FILEDS_UPDATE, payload: _fields }) + triggerType === 'onChange' && internalValuesChange({ [field]: _value }, allValues) + } + }, + [fields] + ) - getRules () { - let formRules = this.parent.props.rules - let selfRules = this.props.rules + let rectCont = FormItemContent.current && FormItemContent.current.getBoundingClientRect() - formRules = formRules ? formRules[this.props.field] : [] + useEffect(() => { + rectCont = FormItemContent.current && FormItemContent.current.getBoundingClientRect() + }, []) + const resetValidate = useCallback((value = '') => { + // 清空数据 + setValue(value) + setError('') + setValidating(false) + }) - return [].concat(selfRules || formRules || []) - } + // 获取该单元的规则 + const getRules = useCallback(() => { + const selfRules = required ? Object.assign({}, props.rules, { required }) : props.rules + let formRules = formProps.rules - getFilteredRule (trigger) { - const rules = this.getRules() - return rules.filter(rule => { + formRules = formRules ? formRules[field] : [] + return [].concat(selfRules || formRules || []) + }, [props, formProps, required]) + // 过滤含有该trigger触发方式的rules + const getFilteredRule = useCallback((trigger) => { + const rules = getRules() + return rules.filter((rule) => { return !rule.trigger || rule.trigger.indexOf(trigger) !== -1 }) - } - - getfieldValue () { - const model = this.parent.props.model - if (!model || !this.props.field) { - return - } - - const keyList = this.props.field.split(':') - return keyList.length > 1 ? model[keyList[0]][keyList[1]] : model[this.props.field] - } - - validate (trigger, cb) { - const rules = this.getFilteredRule(trigger) - if (!rules || rules.length === 0) { + }) + // 父级调用 + const validate = useCallback((trigger, cb, currentValue) => { + const triggerRules = getFilteredRule(trigger) + if (!triggerRules || triggerRules.length === 0) { if (cb instanceof Function) { cb() } - return true } - - this.setState({ - validating: true - }) - + const rules = getRules() const validator = new AsyncValidator({ - [this.props.field]: rules + [field]: rules }) - const model = { [this.props.field]: this.getfieldValue() } + const model = { [field]: currentValue } validator.validate( model, { firstFields: true }, - errors => { - this.setState( - { - error: errors ? errors[0].message : '', - validating: false, - valid: !errors - }, - () => { - if (cb instanceof Function) { - cb(errors) - } - } - ) + (errors) => { + setError(errors ? errors[0].message : '') + setValidating(false) + if (cb instanceof Function) { + cb(errors) + } } ) - } + }) - resetValidate () { - this.setState({ - error: '', - valid: true - }) + const updateFieldInfoToReducer = () => { + return { + field, + rules: getRules(), + resetValidate, + setValue, + validate, + propsField, + listname, + sort, + _type + } } + // initValue + useEffect(() => { + const isExist = fields.some((item) => { + return item.field === field + }) + if (field && !isExist) { + let value = initialValues && initialValues[field] ? initialValues[field] : '' + if (_type === 'list' && listItemValue) { + value = listItemValue[name] ? listItemValue[name] : listItemValue + } + dispatch({ + type: FILEDS_INIT, + payload: { + value: value, + ...updateFieldInfoToReducer() + } + }) + setValue(value) + } + return () => { + _type !== 'list' && dispatch({ type: FILEDS_REMOVE, payload: field }) + } + }, [field]) - isRequired () { - let rules = this.getRules() + // 判断是否含有Rules + const isRequired = useCallback(() => { + const rules = getRules() let isRequired = false if (rules && rules.length) { - rules.every(rule => { + rules.every((rule) => { if (rule.required) { isRequired = true return false @@ -127,83 +207,139 @@ class FormItem extends Component { }) } return isRequired - } + }) - handleFieldBlur () { - const hasOnBlur = this.getRules().some(rule => (rule.trigger || '').includes('onBlur')) - if (hasOnBlur) { - this.validate('onBlur') - } - } + // 对字段的操作 + const handleField = useCallback( + (triggerType, currentValue) => { + // 同步数据 reducer + updateField(currentValue, triggerType) + const rules = getRules() + const hasTriggerType = rules.some((rule) => { + const { trigger = '' } = rule + return trigger.includes(triggerType) + }) + hasTriggerType && validate(triggerType, '', currentValue) + }, + [fields] + ) + + const labelWidth = useCallback(() => { + const labelWidth = props.labelWidth || formProps.labelWidth + return formProps.labelPosition === 'top' + ? '100%' + : !Number.isNaN(Number(labelWidth)) + ? Number(labelWidth) + : labelWidth + }, [props.labelWidth, formProps.labelWidth]) - handleFieldChange () { - const hasOnChange = this.getRules().some(rule => (rule.trigger || '').includes('onChange')) - if (hasOnChange) { - this.validate('onChange') + const setEvent = (eventName, component, componentProps, e, ...args) => { + e.persist && e.persist() + const displayName = component && component.type && component.type.displayName + + const _props = componentProps || children.props + eventName === 'onChange' && _props.onChange && _props.onChange(e, ...args) + eventName === 'onBlur' && _props.onBlur && _props.onBlur(e, ...args) + let value = e.target && e.target.hasOwnProperty(valuePropName) ? e.target[valuePropName] : e + if (displayName === 'Counter') { + value = args[0] } + setValue(value) + handleField(eventName, value) } - get labelWidth () { - const labelWidth = this.props.labelWidth || this.parent.props.labelWidth + // jsx渲染方式 + const renderChildren = () => { + const { component, componentProps } = props + + let _value = value + if (_type === 'list') { + const _fields = _.cloneDeep(fields) + _fields.forEach((item) => { + if (item.field === field) { + _value = item.value + } + }) + } + // 对ScheamaForm表单Item进行特殊处理 + if (_type === 'SchemaForm' && component) { + if (HIUI[component]) { + const HIUIComponent = HIUI[component] + return React.createElement(HIUIComponent, { + ...componentProps, + [valuePropName]: _value, + onChange: (e, ...args) => { + setEvent('onChange', HIUIComponent, componentProps, e, ...args) + }, + onBlur: (e, ...args) => { + setEvent('onBlur', HIUIComponent, componentProps, e, ...args) + } + }) + } else { + throw new Error('not found ' + component) + } + } + if (!children) { + return null + } - return this.parent.props.labelPosition === 'top' ? false : labelWidth && parseInt(labelWidth) + return Array.isArray(children) || !React.isValidElement(children) + ? children + : React.cloneElement(children, { + [valuePropName]: _value, + onChange: (e, ...args) => { + setEvent('onChange', children, '', e, ...args) + }, + onBlur: (e, ...args) => { + setEvent('onBlur', children, '', e, ...args) + } + }) } - render () { - const { children, label, required, className, showColon: shouldItemShowColon, style } = this.props - const { showColon: shouldFormShowColon, localeDatas: { - form: { colon } - } } = this.parent.props - const { error, validating } = this.state - const shouldShowColon = shouldItemShowColon === undefined - ? (shouldFormShowColon && typeof label === 'string' && label.trim()) + const shouldShowColon = + shouldItemShowColon === undefined + ? shouldFormShowColon && typeof label === 'string' && label.trim() : shouldItemShowColon - const obj = {} - obj['hi-form-item__error'] = error !== '' - obj['hi-form-item--validating'] = validating - obj['hi-form-item--required'] = this.isRequired() || required - - return ( -
    - { - (label || label === '') ? ( - - ) : ( - - ) - } -
    - {Array.isArray(children) || !children - ? children - : React.cloneElement(children, { - onChange: (...args) => { - children.props.onChange && children.props.onChange(...args) - setTimeout(() => { - this.handleFieldChange() - }) - }, - onBlur: (...args) => { - children.props.onBlur && children.props.onBlur(...args) - setTimeout(() => { - this.handleFieldBlur() - }) - } - })} -
    {error}
    + const obj = {} + obj['hi-form-item__error'] = error !== '' + obj['hi-form-item--validating'] = validating + obj['hi-form-item--required'] = isRequired() || required + const _labelWidth = labelWidth() + const contentWidth = + formProps.labelPosition !== 'top' && rectCont && rectCont.width ? rectCont.width - _labelWidth : '100%' + return ( +
    + {label || label === '' ? ( + + ) : ( + + )} +
    +
    + {renderChildren()} +
    +
    + {error}
    - ) - } -} - -FormItem.contextTypes = { - component: PropTypes.any +
    + ) } FormItem.propTypes = { - field: PropTypes.string, + field: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.number]), rules: PropTypes.oneOfType([PropTypes.object, PropTypes.array]), required: PropTypes.bool, label: PropTypes.string, @@ -216,5 +352,4 @@ FormItem.propTypes = { FormItem.defaultProps = { size: 'small' } - export default depreactedPropsCompat([['field', 'prop']])(FormItem) diff --git a/components/form/List.js b/components/form/List.js new file mode 100644 index 000000000..fd402102f --- /dev/null +++ b/components/form/List.js @@ -0,0 +1,68 @@ +import React, { useContext, useState, useEffect } from 'react' + +import FormContext from './FormContext' +import { FILEDS_REMOVE, FILEDS_INIT_LIST, FILEDS_UPDATE } from './FormReducer' +const List = (props) => { + const { dispatch, formState } = useContext(FormContext) + const { children, name } = props + const [listCount, setListCount] = useState([]) + const { listValues } = formState + + useEffect(() => { + // init listName + dispatch({ type: FILEDS_INIT_LIST, payload: name }) + }, []) + + // manage default value + useEffect(() => { + const cachelistCount = [] + const { fields } = formState + + const _fields = fields.filter((item) => { + return item.listname !== name + }) + const values = listValues[name] ? listValues[name] : [] + values.forEach((value, index) => { + const uuid = parseInt((Math.random() * 9 + 1) * 100000) + cachelistCount.push({ + field: name + '-' + uuid, + listItemValue: value, + sort: index + }) + }) + dispatch({ type: FILEDS_UPDATE, payload: _fields }) + setListCount(cachelistCount) + }, [listValues]) + + if (typeof children !== 'function') { + console.warning('Form.List only accepts function as children.') + return null + } + + const add = () => { + const uuid = parseInt((Math.random() * 9 + 1) * 100000) + setListCount( + listCount.concat({ + field: name + '-' + uuid, + sort: listCount.length + }) + ) + } + + const remove = (fieldItem) => { + const _listCount = listCount.filter((item) => { + return item.field !== fieldItem.field + }) + setListCount(_listCount) + dispatch({ type: FILEDS_REMOVE, payload: fieldItem.field }) + } + return ( +
    + + {children(listCount, { add, remove })} + +
    + ) +} + +export default List diff --git a/components/form/Reset.js b/components/form/Reset.js new file mode 100644 index 000000000..a7dba08dd --- /dev/null +++ b/components/form/Reset.js @@ -0,0 +1,19 @@ +import React, { useContext } from 'react' + +import FormContext from './FormContext' + +import Button from '../button' + +const Reset = (props) => { + const { children = 'reset', onClick, fields: resetNames, toDefault = true } = props + const { resetValidates } = useContext(FormContext) + const reset = () => { + resetValidates(onClick, resetNames, toDefault) + } + return ( + + ) +} +export default Reset diff --git a/components/form/SchemaForm.js b/components/form/SchemaForm.js new file mode 100644 index 000000000..7ec77b2f5 --- /dev/null +++ b/components/form/SchemaForm.js @@ -0,0 +1,63 @@ +import React, { useState, useEffect, useCallback, forwardRef } from 'react' +import _ from 'lodash' +import * as HIUI from '../' +import Provider from '../context' +import Form from './Form' +import FormItem from './Item' +import FormReset from './Reset' +import FormSubmit from './Submit' + +const Group = { + 'Radio.Group': HIUI.Radio.Group, + 'Checkbox.Group': HIUI.Checkbox.Group +} +const prefixCls = 'hi-form-schema' + +const FormComponent = Provider(Form) + +const InternalSchemaForm = (props) => { + const { schema: schemaProps, children: childrenProps, submit, reset, innerRef } = props + const [schema, setSchema] = useState(schemaProps) + useEffect(() => { + setSchema(schemaProps) + }, [schemaProps]) + + const renderSchemaFormItem = useCallback(() => { + if (Array.isArray(schema)) { + return schema.map((schemaItem, index) => { + const { component, componentProps } = schemaItem + let child = null + if (HIUI[component] || Group[component]) { + const ChildComponent = HIUI[component] || Group[component] + child = + } else { + child =

    {'not found ' + component}

    + } + return React.createElement(FormItem, { + ..._.omit(schemaItem, 'component', 'componentProps'), + key: component + index, + children: child + }) + }) + } + }, [schema]) + return ( +
    + + {renderSchemaFormItem()} + {childrenProps} + {(submit || reset) && ( + + {submit && } + {reset && } + + )} + +
    + ) +} + +const SchemaForm = forwardRef((props, ref) => { + return +}) +export default SchemaForm diff --git a/components/form/Submit.js b/components/form/Submit.js new file mode 100644 index 000000000..895e8e65e --- /dev/null +++ b/components/form/Submit.js @@ -0,0 +1,18 @@ +import React, { useContext } from 'react' + +import FormContext from './FormContext' +import Button from '../button' + +const Submit = (props) => { + const { children = 'submit', onClick, validate } = props + const { validate: formValidate } = useContext(FormContext) + const submit = () => { + onClick && formValidate(onClick, validate) + } + return ( + + ) +} +export default Submit diff --git a/components/form/__tests__/index.test.js b/components/form/__tests__/index.test.js index 99fec346e..4d3821420 100644 --- a/components/form/__tests__/index.test.js +++ b/components/form/__tests__/index.test.js @@ -24,7 +24,7 @@ class Demo extends React.Component { name: [ { required: true, - message: 请输入名称, + message: 请输入名称, trigger: 'onBlur,onChange' } ], @@ -44,9 +44,9 @@ class Demo extends React.Component { { validator: (rule, value, cb) => { const count = parseInt(value) - if(isNaN(count)) { + if (isNaN(count)) { cb('请输入数字') - } else if(count <= 0) { + } else if (count <= 0) { cb('必须是正数') } else { cb() @@ -61,7 +61,7 @@ class Demo extends React.Component { handleSubmit() { this.form.current.validate(valid => { - if(valid) { + if (valid) { console.log(this.state.form) alert('submit') } else { @@ -84,35 +84,44 @@ class Demo extends React.Component { handleChange(key, e, value, index) { this.setState({ - form: Object.assign({}, this.state.form, {[key]: value}) + form: Object.assign({}, this.state.form, { [key]: value }) }) - if(index !== undefined) { + if (index !== undefined) { this.setState({ checkedIndex: index }) } } - render(){ + render() { const Row = Grid.Row const Col = Grid.Col - const {form, checkedIndex} = this.state + const { form, checkedIndex } = this.state return (
    -
    + - - + - + -
    @@ -137,7 +146,7 @@ class Demo2 extends React.Component { name: [ { required: true, - message: 请输入名称, + message: 请输入名称, trigger: 'onBlur,onChange' } ], @@ -157,9 +166,9 @@ class Demo2 extends React.Component { { validator: (rule, value, cb) => { const count = parseInt(value) - if(isNaN(count)) { + if (isNaN(count)) { cb('请输入数字') - } else if(count <= 0) { + } else if (count <= 0) { cb('必须是正数') } else { cb() @@ -174,7 +183,7 @@ class Demo2 extends React.Component { handleSubmit() { this.form.current.validate(valid => { - if(valid) { + if (valid) { console.log(this.state.form) alert('submit') } else { @@ -184,21 +193,26 @@ class Demo2 extends React.Component { }) } - - render(){ + render() { const Row = Grid.Row const Col = Grid.Col - const {form} = this.state + const { form } = this.state return (
    -
    + - + -
    @@ -218,13 +232,13 @@ class Demo3 extends React.Component { region: '', count: '' }, - checkedIndex: -1, + checkedIndex: -1 } } handleSubmit() { this.form.current.validate(valid => { - if(valid) { + if (valid) { console.log(this.state.form) alert('submit') } else { @@ -234,22 +248,23 @@ class Demo3 extends React.Component { }) } - render(){ + render() { const Row = Grid.Row const Col = Grid.Col - const {form} = this.state + const { form } = this.state return (
    -
    + - + - + -
    @@ -261,11 +276,11 @@ describe('Form', () => { it('should have the correct placement', () => { const wrapper = mount(
    - + - - + + ) @@ -281,22 +296,22 @@ describe('Form', () => { ;['left', 'right', 'top'].forEach(labelPlacement => { const wrapper = mount(
    - + - - + + ) expect(wrapper.find(`.hi-form--label--${labelPlacement}`)).toHaveLength(1) const wrapperLegacy = mount(
    - + - - + + ) @@ -309,16 +324,18 @@ describe('Form', () => { it('should have the label width', () => { const wrapper = mount(
    - + - - + + ) expect( - wrapper.find('label.hi-form-item__label').map(label => label.prop('style').width) + wrapper + .find('label.hi-form-item__label') + .map(label => label.prop('style').width) ).toEqual([50, 50]) wrapper.unmount() }) @@ -326,41 +343,38 @@ describe('Form', () => { it('should show colon', () => { const wrapper = mount(
    - + - - + + ) - expect(wrapper.find('label.hi-form-item__label').map(label => label.text())).toEqual([ - '账号:', - '密码:' - ]) + expect( + wrapper.find('label.hi-form-item__label').map(label => label.text()) + ).toEqual(['账号:', '密码:']) wrapper.setProps({ showColon: false }) - expect(wrapper.find('label.hi-form-item__label').map(label => label.text())).toEqual([ - '账号', - '密码' - ]) + expect( + wrapper.find('label.hi-form-item__label').map(label => label.text()) + ).toEqual(['账号', '密码']) wrapper.unmount() }) it('should field has colon when field showColon is true and form showColon is false', () => { const wrapper = mount(
    - + - - + + ) - expect(wrapper.find('label.hi-form-item__label').map(label => label.text())).toEqual([ - '账号:', - '密码' - ]) + expect( + wrapper.find('label.hi-form-item__label').map(label => label.text()) + ).toEqual(['账号:', '密码']) wrapper.unmount() }) @@ -386,9 +400,9 @@ describe('Form', () => { name: '' }} > - + { wrapper.setProps({ model: { name: e.target.value } }) }} @@ -399,7 +413,9 @@ describe('Form', () => { ) const cb = jest.fn() wrapper.instance().validate(cb) - expect(wrapper.find('.hi-form-item--msg__error').text()).toEqual('请输入名称') + expect(wrapper.find('.hi-form-item--msg__error').text()).toEqual( + '请输入名称' + ) wrapper.find('input').simulate('change', { target: { value: 'hiui' } }) jest.runAllTimers() wrapper.instance().validate(cb) @@ -409,7 +425,9 @@ describe('Form', () => { wrapper.find('input').simulate('blur') jest.runAllTimers() expect(blurCb).toHaveBeenCalled() - expect(wrapper.find('.hi-form-item--msg__error').text()).toEqual('请输入名称') + expect(wrapper.find('.hi-form-item--msg__error').text()).toEqual( + '请输入名称' + ) wrapper.unmount() jest.useRealTimers() @@ -436,9 +454,9 @@ describe('Form', () => { name: '' }} > - + { wrapper.setProps({ model: { name: e.target.value } }) }} @@ -449,7 +467,9 @@ describe('Form', () => { ) const cb = jest.fn() wrapper.instance().validateField('name', cb) - expect(wrapper.find('.hi-form-item--msg__error').text()).toEqual('请输入名称') + expect(wrapper.find('.hi-form-item--msg__error').text()).toEqual( + '请输入名称' + ) wrapper.find('input').simulate('change', { target: { value: 'hiui' } }) jest.runAllTimers() wrapper.instance().validate(cb) @@ -459,33 +479,47 @@ describe('Form', () => { jest.useRealTimers() }) - it('cancelSubmit resetValidates',()=>{ - const wrapper = mount ( - - ) - expect(wrapper.find('.hi-form')).toHaveLength(1) - wrapper.find('button').at(0).simulate('click') - expect(wrapper.find('.hi-form-item--msg__error').find('span')).toHaveLength(1) - wrapper.find('button').at(1).simulate('click') - expect(wrapper.find('.hi-form-item--msg__error').find('span')).toHaveLength(0) - wrapper.unmount() + it('cancelSubmit resetValidates', () => { + const wrapper = mount() + expect(wrapper.find('.hi-form')).toHaveLength(1) + wrapper + .find('button') + .at(0) + .simulate('click') + expect(wrapper.find('.hi-form-item--msg__error').find('span')).toHaveLength( + 1 + ) + wrapper + .find('button') + .at(1) + .simulate('click') + expect(wrapper.find('.hi-form-item--msg__error').find('span')).toHaveLength( + 0 + ) + wrapper.unmount() }) - it('validate When No item',()=>{ - const wrapper = mount ( - - ) - expect(wrapper.find('.hi-form')).toHaveLength(1) - wrapper.find('button').at(0).simulate('click') - expect(wrapper.find('.hi-form-item--msg__error').find('span')).toHaveLength(0) - wrapper.unmount() + it('validate When No item', () => { + const wrapper = mount() + expect(wrapper.find('.hi-form')).toHaveLength(1) + wrapper + .find('button') + .at(0) + .simulate('click') + expect(wrapper.find('.hi-form-item--msg__error').find('span')).toHaveLength( + 0 + ) + wrapper.unmount() }) - it('validate When No rules',()=>{ - const wrapper = mount ( - - ) - expect(wrapper.find('.hi-form')).toHaveLength(1) - wrapper.find('button').at(0).simulate('click') - expect(wrapper.find('.hi-form-item--msg__error').find('span')).toHaveLength(0) - wrapper.unmount() + it('validate When No rules', () => { + const wrapper = mount() + expect(wrapper.find('.hi-form')).toHaveLength(1) + wrapper + .find('button') + .at(0) + .simulate('click') + expect(wrapper.find('.hi-form-item--msg__error').find('span')).toHaveLength( + 0 + ) + wrapper.unmount() }) }) diff --git a/components/form/form-legacy/form-v2/Form.js b/components/form/form-legacy/form-v2/Form.js new file mode 100644 index 000000000..f994fea68 --- /dev/null +++ b/components/form/form-legacy/form-v2/Form.js @@ -0,0 +1,117 @@ +import React, { Component } from 'react' +import classNames from 'classnames' +import PropTypes from 'prop-types' + +class Form extends Component { + constructor (props) { + super(props) + + this.state = { + fields: [] + } + } + + getChildContext () { + return { + component: this + } + } + + getClassNames () { + const { labelPlacement, labelPosition, placement, inline } = this.props + + const obj = {} + + if (labelPlacement || labelPosition) { + obj[`hi-form--legacy--label--${labelPlacement || labelPosition}`] = true + } + if (placement === 'horizontal' || inline) { + obj[`hi-form--legacy--inline`] = true + } + + return obj + } + + addField (field) { + this.setState((prevState) => ({ + fields: prevState.fields.concat(field) + })) + } + + removeField (prop) { + this.setState((prevState) => ({ + fields: prevState.fields.filter((field) => field.props.field !== prop) + })) + } + + validate (cb) { + let valid = true + let count = 0 + const fields = this.state.fields + if (fields.length === 0 && cb) { + cb(valid) + } + + fields.forEach((field) => { + field.validate('', (errors) => { + if (errors) { + valid = false + } + if (typeof cb === 'function' && ++count === fields.length) { + cb(valid) + } + }) + }) + } + + validateField (key, cb) { + const field = this.state.fields.filter((field) => field.props.field === key)[0] + + if (!field) { + throw new Error('must call validate Field with valid key string!') + } + + field.validate('', cb) + } + + resetValidates () { + this.state.fields.forEach((field) => { + field.resetValidate() + }) + } + + render () { + const { children, className, style } = this.props + + return ( +
    + {children} +
    + ) + } +} + +Form.childContextTypes = { + component: PropTypes.any +} + +Form.propTypes = { + model: PropTypes.object, + rules: PropTypes.object, + labelPlacement: PropTypes.oneOf(['right', 'left', 'top']), + labelPosition: PropTypes.oneOf(['right', 'left', 'top']), + labWidth: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), + placement: PropTypes.oneOf(['horizontal', 'vertical']), + inline: PropTypes.bool, + onSubmit: PropTypes.func, + showColon: PropTypes.bool, + className: PropTypes.string, + style: PropTypes.object +} + +Form.defaultProps = { + size: 'small', + showColon: true +} + +export default Form diff --git a/components/form/form-legacy/form-v2/Item.js b/components/form/form-legacy/form-v2/Item.js new file mode 100644 index 000000000..bf842fb66 --- /dev/null +++ b/components/form/form-legacy/form-v2/Item.js @@ -0,0 +1,244 @@ +import React, { Component } from 'react' +import classNames from 'classnames' +import AsyncValidator from 'async-validator' +import PropTypes from 'prop-types' +import { depreactedPropsCompat } from '../../../_util' + +class FormItem extends Component { + constructor (props, context) { + super(props) + + this.state = { + error: '', + valid: false, + validating: false + } + + this.initValue = '' + + this.parent = context.component + } + + componentDidMount () { + const { field } = this.props + if (field) { + this.parent.addField(this) + this.valueInit() + } + } + + componentWillUnmount () { + this.parent.removeField(this.props.field) + } + + valueInit () { + const value = this.parent.props.model[this.props.field] + if (value === undefined) { + this.initValue = value + } else { + this.initValue = JSON.parse(JSON.stringify(value)) + } + } + + getRules () { + let formRules = this.parent.props.rules + let selfRules = this.props.rules + + formRules = formRules ? formRules[this.props.field] : [] + + return [].concat(selfRules || formRules || []) + } + + getFilteredRule (trigger) { + const rules = this.getRules() + return rules.filter(rule => { + return !rule.trigger || rule.trigger.indexOf(trigger) !== -1 + }) + } + + getfieldValue () { + const model = this.parent.props.model + if (!model || !this.props.field) { + return + } + + const keyList = this.props.field.split(':') + return keyList.length > 1 + ? model[keyList[0]][keyList[1]] + : model[this.props.field] + } + + validate (trigger, cb) { + const rules = this.getFilteredRule(trigger) + if (!rules || rules.length === 0) { + if (cb instanceof Function) { + cb() + } + + return true + } + + this.setState({ + validating: true + }) + + const validator = new AsyncValidator({ + [this.props.field]: rules + }) + const model = { [this.props.field]: this.getfieldValue() } + validator.validate( + model, + { + firstFields: true + }, + errors => { + this.setState( + { + error: errors ? errors[0].message : '', + validating: false, + valid: !errors + }, + () => { + if (cb instanceof Function) { + cb(errors) + } + } + ) + } + ) + } + + resetValidate () { + this.setState({ + error: '', + valid: true + }) + } + + isRequired () { + let rules = this.getRules() + let isRequired = false + + if (rules && rules.length) { + rules.every(rule => { + if (rule.required) { + isRequired = true + return false + } + return true + }) + } + return isRequired + } + + handleFieldBlur () { + const hasOnBlur = this.getRules().some(rule => + (rule.trigger || '').includes('onBlur') + ) + if (hasOnBlur) { + this.validate('onBlur') + } + } + + handleFieldChange () { + const hasOnChange = this.getRules().some(rule => + (rule.trigger || '').includes('onChange') + ) + if (hasOnChange) { + this.validate('onChange') + } + } + + get labelWidth () { + const labelWidth = this.props.labelWidth || this.parent.props.labelWidth + + return this.parent.props.labelPosition === 'top' + ? false + : labelWidth && parseInt(labelWidth) + } + + render () { + const { + children, + label, + required, + className, + showColon: shouldItemShowColon, + style + } = this.props + const { + showColon: shouldFormShowColon, + localeDatas: { + form: { colon } + } + } = this.parent.props + const { error, validating } = this.state + const shouldShowColon = + shouldItemShowColon === undefined + ? shouldFormShowColon && typeof label === 'string' && label.trim() + : shouldItemShowColon + const obj = {} + obj['hi-form-item--legacy__error'] = error !== '' + obj['hi-form-item--legacy--validating'] = validating + obj['hi-form-item--legacy--required'] = this.isRequired() || required + + return ( +
    + {label || label === '' ? ( + + ) : ( + + )} +
    + {Array.isArray(children) || !children + ? children + : React.cloneElement(children, { + onChange: (...args) => { + children.props.onChange && children.props.onChange(...args) + setTimeout(() => { + this.handleFieldChange() + }) + }, + onBlur: (...args) => { + children.props.onBlur && children.props.onBlur(...args) + setTimeout(() => { + this.handleFieldBlur() + }) + } + })} +
    {error}
    +
    +
    + ) + } +} + +FormItem.contextTypes = { + component: PropTypes.any +} + +FormItem.propTypes = { + field: PropTypes.string, + rules: PropTypes.oneOfType([PropTypes.object, PropTypes.array]), + required: PropTypes.bool, + label: PropTypes.string, + labelWidth: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), + showColon: PropTypes.bool, + className: PropTypes.string, + style: PropTypes.object +} + +FormItem.defaultProps = { + size: 'small' +} + +export default depreactedPropsCompat([['field', 'prop']])(FormItem) diff --git a/components/form/form-legacy/form-v2/__tests__/index.test.js b/components/form/form-legacy/form-v2/__tests__/index.test.js new file mode 100644 index 000000000..99fec346e --- /dev/null +++ b/components/form/form-legacy/form-v2/__tests__/index.test.js @@ -0,0 +1,491 @@ +import React from 'react' +import { mount } from 'enzyme' +import Form from '../index' +import Input from '../../input' +import _Form from '../Form' +import FormItem from '../Item' +import Grid from '../../grid' +import Button from '../../button' +import Radio from '../../radio' +class Demo extends React.Component { + constructor(props) { + super(props) + + this.form = React.createRef() + + this.state = { + form: { + name: '', + region: '', + count: '' + }, + checkedIndex: -1, + rules: { + name: [ + { + required: true, + message: 请输入名称, + trigger: 'onBlur,onChange' + } + ], + region: [ + { + required: true, + message: '请选择区域', + trigger: 'onChange' + } + ], + count: [ + { + required: true, + message: '请输入数量', + trigger: 'onChange' + }, + { + validator: (rule, value, cb) => { + const count = parseInt(value) + if(isNaN(count)) { + cb('请输入数字') + } else if(count <= 0) { + cb('必须是正数') + } else { + cb() + } + }, + trigger: 'onChange' + } + ] + } + } + } + + handleSubmit() { + this.form.current.validate(valid => { + if(valid) { + console.log(this.state.form) + alert('submit') + } else { + console.log('error') + return false + } + }) + } + + cancelSubmit() { + this.setState({ + form: { + name: '', + region: '', + count: '' + } + }) + this.form.current.resetValidates() + } + + handleChange(key, e, value, index) { + this.setState({ + form: Object.assign({}, this.state.form, {[key]: value}) + }) + + if(index !== undefined) { + this.setState({ + checkedIndex: index + }) + } + } + + render(){ + const Row = Grid.Row + const Col = Grid.Col + const {form, checkedIndex} = this.state + + return ( +
    +
    + + + + + + + + + + + + + +
    +
    + ) + } +} +class Demo2 extends React.Component { + constructor(props) { + super(props) + + this.form = React.createRef() + + this.state = { + form: { + name: '', + region: '', + count: '' + }, + checkedIndex: -1, + rules: { + name: [ + { + required: true, + message: 请输入名称, + trigger: 'onBlur,onChange' + } + ], + region: [ + { + required: true, + message: '请选择区域', + trigger: 'onChange' + } + ], + count: [ + { + required: true, + message: '请输入数量', + trigger: 'onChange' + }, + { + validator: (rule, value, cb) => { + const count = parseInt(value) + if(isNaN(count)) { + cb('请输入数字') + } else if(count <= 0) { + cb('必须是正数') + } else { + cb() + } + }, + trigger: 'onChange' + } + ] + } + } + } + + handleSubmit() { + this.form.current.validate(valid => { + if(valid) { + console.log(this.state.form) + alert('submit') + } else { + console.log('error') + return false + } + }) + } + + + render(){ + const Row = Grid.Row + const Col = Grid.Col + const {form} = this.state + + return ( +
    +
    + + + + + + + + +
    +
    + ) + } +} +class Demo3 extends React.Component { + constructor(props) { + super(props) + + this.form = React.createRef() + + this.state = { + form: { + name: '', + region: '', + count: '' + }, + checkedIndex: -1, + } + } + + handleSubmit() { + this.form.current.validate(valid => { + if(valid) { + console.log(this.state.form) + alert('submit') + } else { + console.log('error') + return false + } + }) + } + + render(){ + const Row = Grid.Row + const Col = Grid.Col + const {form} = this.state + return ( +
    +
    + + + + + + + + + + + +
    +
    + ) + } +} +describe('Form', () => { + it('should have the correct placement', () => { + const wrapper = mount( +
    + + + + + + +
    + ) + expect(wrapper.find('.hi-form--line')).toHaveLength(0) + wrapper.setProps({ placement: 'vertical' }) + expect(wrapper.find('.hi-form--line')).toHaveLength(0) + wrapper.setProps({ placement: 'horizontal' }) + expect(wrapper.find('.hi-form--inline')).toHaveLength(1) + wrapper.unmount() + }) + + it('should align the label by labelPlacement', () => { + ;['left', 'right', 'top'].forEach(labelPlacement => { + const wrapper = mount( +
    + + + + + + +
    + ) + expect(wrapper.find(`.hi-form--label--${labelPlacement}`)).toHaveLength(1) + const wrapperLegacy = mount( +
    + + + + + + +
    + ) + // expect(wrapperLegacy.find(`.hi-form--label--${labelPlacement}`)).toHaveLength(1) + wrapper.unmount() + wrapperLegacy.unmount() + }) + }) + + it('should have the label width', () => { + const wrapper = mount( +
    + + + + + + +
    + ) + expect( + wrapper.find('label.hi-form-item__label').map(label => label.prop('style').width) + ).toEqual([50, 50]) + wrapper.unmount() + }) + + it('should show colon', () => { + const wrapper = mount( +
    + + + + + + +
    + ) + expect(wrapper.find('label.hi-form-item__label').map(label => label.text())).toEqual([ + '账号:', + '密码:' + ]) + wrapper.setProps({ showColon: false }) + expect(wrapper.find('label.hi-form-item__label').map(label => label.text())).toEqual([ + '账号', + '密码' + ]) + wrapper.unmount() + }) + + it('should field has colon when field showColon is true and form showColon is false', () => { + const wrapper = mount( +
    + + + + + + +
    + ) + expect(wrapper.find('label.hi-form-item__label').map(label => label.text())).toEqual([ + '账号:', + '密码' + ]) + wrapper.unmount() + }) + + it('should validate require field', () => { + jest.useFakeTimers() + const localeDatas = { + form: { + colon: ':' + } + } + const blurCb = jest.fn() + const wrapper = mount( + <_Form + rules={{ + name: { + required: true, + message: '请输入名称', + trigger: 'onChange' + } + }} + localeDatas={localeDatas} + model={{ + name: '' + }} + > + + { + wrapper.setProps({ model: { name: e.target.value } }) + }} + onBlur={blurCb} + /> + + + ) + const cb = jest.fn() + wrapper.instance().validate(cb) + expect(wrapper.find('.hi-form-item--msg__error').text()).toEqual('请输入名称') + wrapper.find('input').simulate('change', { target: { value: 'hiui' } }) + jest.runAllTimers() + wrapper.instance().validate(cb) + expect(wrapper.find('.hi-form-item--msg__error').text()).toEqual('') + wrapper.find('input').simulate('change', { target: { value: '' } }) + jest.runAllTimers() + wrapper.find('input').simulate('blur') + jest.runAllTimers() + expect(blurCb).toHaveBeenCalled() + expect(wrapper.find('.hi-form-item--msg__error').text()).toEqual('请输入名称') + wrapper.unmount() + + jest.useRealTimers() + }) + + it('should validate single field', () => { + jest.useFakeTimers() + const localeDatas = { + form: { + colon: ':' + } + } + const wrapper = mount( + <_Form + rules={{ + name: { + required: true, + message: '请输入名称', + trigger: 'onChange' + } + }} + localeDatas={localeDatas} + model={{ + name: '' + }} + > + + { + wrapper.setProps({ model: { name: e.target.value } }) + }} + onBlur={jest.fn()} + /> + + + ) + const cb = jest.fn() + wrapper.instance().validateField('name', cb) + expect(wrapper.find('.hi-form-item--msg__error').text()).toEqual('请输入名称') + wrapper.find('input').simulate('change', { target: { value: 'hiui' } }) + jest.runAllTimers() + wrapper.instance().validate(cb) + expect(wrapper.find('.hi-form-item--msg__error').text()).toEqual('') + expect(() => wrapper.instance().validateField('errorField', cb)).toThrow() + wrapper.unmount() + + jest.useRealTimers() + }) + it('cancelSubmit resetValidates',()=>{ + const wrapper = mount ( + + ) + expect(wrapper.find('.hi-form')).toHaveLength(1) + wrapper.find('button').at(0).simulate('click') + expect(wrapper.find('.hi-form-item--msg__error').find('span')).toHaveLength(1) + wrapper.find('button').at(1).simulate('click') + expect(wrapper.find('.hi-form-item--msg__error').find('span')).toHaveLength(0) + wrapper.unmount() + }) + it('validate When No item',()=>{ + const wrapper = mount ( + + ) + expect(wrapper.find('.hi-form')).toHaveLength(1) + wrapper.find('button').at(0).simulate('click') + expect(wrapper.find('.hi-form-item--msg__error').find('span')).toHaveLength(0) + wrapper.unmount() + }) + it('validate When No rules',()=>{ + const wrapper = mount ( + + ) + expect(wrapper.find('.hi-form')).toHaveLength(1) + wrapper.find('button').at(0).simulate('click') + expect(wrapper.find('.hi-form-item--msg__error').find('span')).toHaveLength(0) + wrapper.unmount() + }) +}) diff --git a/components/form/form-legacy/form-v2/index.js b/components/form/form-legacy/form-v2/index.js new file mode 100644 index 000000000..2b39a8b97 --- /dev/null +++ b/components/form/form-legacy/form-v2/index.js @@ -0,0 +1,9 @@ +import Form from './Form' +import Item from './Item' +import Provider from '../../../context' +import './style/index' +const FormWrapper = Provider(Form) +FormWrapper.Item = Item + +export { Item } +export default FormWrapper diff --git a/components/tree/tree-legacy/style/index.js b/components/form/form-legacy/form-v2/style/index.js similarity index 100% rename from components/tree/tree-legacy/style/index.js rename to components/form/form-legacy/form-v2/style/index.js diff --git a/components/form/form-legacy/form-v2/style/index.scss b/components/form/form-legacy/form-v2/style/index.scss new file mode 100644 index 000000000..70cc3a8f1 --- /dev/null +++ b/components/form/form-legacy/form-v2/style/index.scss @@ -0,0 +1,138 @@ +@import '@hi-ui/core-css/index.scss'; + +.hi-form--legacy { + max-width: 100%; + position: relative; + + fieldset { + margin: 0; + padding: 0; + border: 0; + + & + fieldset { + margin-top: 16px; + } + } + + legend { + margin: 0 0 16px; + color: $gray-darker; + } + + &--inline { + display: flex; + flex-wrap: wrap; + } + + &__title { + box-sizing: border-box; + margin-top: 0; + margin-bottom: 24px; + font-size: 16px; + font-weight: 400; + } + + &--label--left { + .hi-form-item--legacy__label { + text-align: left; + } + } + + &--label--right { + .hi-form-item--legacy__label { + text-align: right; + } + } + + &--label--top { + padding-right: 0; + text-align: left; + + &.hi-form--inline { + // 上下布局只在水平表单中自动填充高度 + .hi-form-item--legacy__span { + min-height: 32px; + } + } + + .hi-form-item--legacy { + flex-direction: column; + + .hi-form-item--legacy__label { + height: 22px; + padding-right: 8px; + margin-bottom: 8px; + } + } + } + + .hi-form-item--legacy { + display: flex; + font-size: $font-size-normal; + margin-right: $spacer-2; + + &__label, + &__span { + flex-shrink: 0; + box-sizing: border-box; + vertical-align: top; + color: $gray-darker; + overflow-wrap: break-word; + } + + &__label { + min-height: 32px; + padding-right: $spacer-2; + line-height: 32px; + } + + &__content { + flex: 1; + position: relative; + vertical-align: top; + min-height: 32px; + } + + &__error { + .hi-form-item--legacy__content { + .hi-input__inner, + .hi-select__input, + .hi-cascader__input-container, + .hi-datepicker__input, + .tree-select__tag-wrapper, + .hi-input { + border-color: get-color($palette-secondary, 'danger'); + } + } + } + + &--msg__error { + font-size: $font-size-small; + min-height: 24px; + padding: 2px 0; + box-sizing: border-box; + line-height: 20px; + color: get-color($palette-secondary, 'danger'); + + .hi-form--inline & { + top: 36px; + left: 0; + line-height: 18px; + } + } + + &--required { + .hi-form-item--legacy__label::before { + margin-right: $spacer-1; + content: '*'; + color: get-color($palette-secondary, 'danger'); + } + } + + &--fixed { + position: absolute; + top: 0; + right: 0; + } + } +} diff --git a/components/form/hooks/useForm.js b/components/form/hooks/useForm.js new file mode 100644 index 000000000..c3e47437f --- /dev/null +++ b/components/form/hooks/useForm.js @@ -0,0 +1,40 @@ +import { useCallback } from 'react' +import useFormInstance from './useFormInstance' + +const useForm = () => { + const { FormWrapper, FormInstance: formRef, FormItem } = useFormInstance() + const { current } = formRef + const validate = useCallback( + (cb, validate) => { + const { validate: formValidate } = formRef.current + formValidate(cb, validate) + }, + [current] + ) + const resetValidates = useCallback( + (cb, resetNames, toDefault) => { + const { resetValidates } = formRef.current + + resetValidates(cb, resetNames, toDefault) + }, + [current] + ) + const setFieldsValue = useCallback( + values => { + formRef.current.setFieldsValue(values) + }, + [current] + ) + const validateField = useCallback( + (field, cb) => { + formRef.current.validateField(field, cb) + }, + [current] + ) + return { + FormWrapper, + FormItem, + FormInstance: { validate, setFieldsValue, resetValidates, validateField } + } +} +export default useForm diff --git a/components/form/hooks/useFormInstance.js b/components/form/hooks/useFormInstance.js new file mode 100644 index 000000000..783061630 --- /dev/null +++ b/components/form/hooks/useFormInstance.js @@ -0,0 +1,17 @@ +import React, { useRef, forwardRef } from 'react' +import Provider from '../../context' +import Form from '../Form' +import FormItem from '../Item' +import FormReset from '../Reset' +import FormSubmit from '../Submit' +const FormComponent = Provider(Form) + +const useFormInstance = () => { + const formRef = useRef() + let FormInstance = formRef + const FormWrapper = forwardRef((props, ref) => { + return + }) + return { FormWrapper, FormInstance, FormItem, FormReset, FormSubmit } +} +export default useFormInstance diff --git a/components/form/index.d.ts b/components/form/index.d.ts new file mode 100644 index 000000000..ae1041e96 --- /dev/null +++ b/components/form/index.d.ts @@ -0,0 +1,54 @@ +import { CSSProperties } from "react" + +type formData = { + [prop: string]: any +} +interface FormProps { + initialValues?: formData + rules?: object + labelWidth?: string | number + labelPlacement?: 'right' | 'left' | 'top' + placement?: 'horizontal' | 'vertical' + showColon?: boolean + children: Form.Item +} + +interface ItemProps { + field?: string + label?: string + labelWidth?: string + required?: boolean + showColon?: boolean +} +interface SchemaItem extends ItemProps { + component?: string + componentProps?: string +} +interface SchemaProps { + schema?: SchemaItem + submit?: FormSubmit +} + +interface FormSubmit extends ButtonProps{ + onClick?: (value: object, errors: object) => void + validate?: any[] +} +interface FormReset extends ButtonProps{ + onClick?: () => void + fields?: any[] + toDefault?: boolean +} +interface FormList { + name?: string +} +declare class Item extends React.Component { +} +declare class SchemaForm extends React.Component { +} +declare class Form extends React.Component { + static Item = Item + static SchemaForm = SchemaForm + static FormReset = FormReset +} + +export default Form diff --git a/components/form/index.js b/components/form/index.js index ccdc24296..6ec479600 100644 --- a/components/form/index.js +++ b/components/form/index.js @@ -1,8 +1,25 @@ -import Form from './Form' +import LegacyForm, { Item as ItemV2 } from './form-legacy/form-v2' +import FormV3 from './Form' import Item from './Item' +import Submit from './Submit' +import Reset from './Reset' +import List from './List' +import SchemaForm from './SchemaForm' +import useForm from './hooks/useForm' + import Provider from '../context' import './style/index' -const FormWrapper = Provider(Form) -FormWrapper.Item = Item -export default FormWrapper +LegacyForm.Item = ItemV2 + +const Form = Provider(FormV3) + +Form.Item = Item +Form.Submit = Submit +Form.Reset = Reset +Form.List = List +Form.SchemaForm = SchemaForm +Form.useForm = useForm + +export default Form +export { LegacyForm } diff --git a/components/form/style/index.scss b/components/form/style/index.scss index ded932442..4a277389b 100644 --- a/components/form/style/index.scss +++ b/components/form/style/index.scss @@ -1,4 +1,4 @@ -@import '@hi-ui/core-css/index.scss'; +@import '../../core-css/index.scss'; .hi-form { max-width: 100%; @@ -16,7 +16,7 @@ legend { margin: 0 0 16px; - color: $gray-darker; + color: use-color('gray-80'); } &--inline { @@ -24,12 +24,16 @@ flex-wrap: wrap; } + &--readOnly { + pointer-events: none; + } + &__title { box-sizing: border-box; margin-top: 0; margin-bottom: 24px; - font-size: 16px; - font-weight: 400; + font-size: $font-size-large; + font-weight: $font-weight-normal; } &--label--left { @@ -77,7 +81,7 @@ flex-shrink: 0; box-sizing: border-box; vertical-align: top; - color: $gray-darker; + color: use-color('gray-80'); overflow-wrap: break-word; } @@ -92,6 +96,17 @@ position: relative; vertical-align: top; min-height: 32px; + flex-shrink: 0; + + p { + margin: 0; + padding: 0; + } + } + + &__children { + display: flex; + min-height: 30px; } &__error { @@ -113,8 +128,16 @@ padding: 2px 0; box-sizing: border-box; line-height: 20px; + transition: all 0.3s; + transform: translateY(-10%); + opacity: 0; color: get-color($palette-secondary, 'danger'); + &__show { + opacity: 1; + transform: translateY(0); + } + .hi-form--inline & { top: 36px; left: 0; @@ -135,4 +158,8 @@ top: 0; right: 0; } + + .hi-checkbox-group { + line-height: 32px; + } } diff --git a/components/form/utils.js b/components/form/utils.js new file mode 100644 index 000000000..9cfefa0ad --- /dev/null +++ b/components/form/utils.js @@ -0,0 +1,53 @@ +import _ from 'lodash' + +// 需要做一个filed的规则解析 +const tranformListValues = (field, listNestValues, value, listname) => { + const key = field.split('#')[1] + const keyName = field.split('#')[0] + if (listNestValues[listname][keyName]) { + listNestValues[listname][keyName] = _.merge(listNestValues[listname][keyName], { + [key]: value + }) + } else { + listNestValues[listname][keyName] = { [key]: value } + } +} +// 转换输出的值 +export const transformValues = (allvalue, fields) => { + let tranformValues = {} + const listNestValues = {} + // 根据sort进行数据排列 + const sortfields = _.sortBy(fields, ['sort']) + sortfields.forEach((filedItem) => { + const { field, propsField, _type, listname } = filedItem + if (_type === 'list') { + if (propsField !== field) { + listNestValues[listname] = listNestValues[listname] || {} + tranformListValues(field, listNestValues, allvalue[field], listname) + Object.keys(listNestValues).forEach((key) => { + const arr = [] + Object.keys(listNestValues[key]).forEach((item) => { + arr.push(listNestValues[key][item]) + }) + tranformValues[key] = arr + }) + return + } + if (tranformValues[listname]) { + tranformValues[listname].push(allvalue[field]) + } else { + tranformValues[listname] = [allvalue[field]] + } + } else { + if (Array.isArray(propsField)) { + const chainKeys = propsField.reduceRight((pre, next) => { + return { [next]: pre } + }, allvalue[field]) + tranformValues = _.merge(tranformValues, chainKeys) + } else { + tranformValues = _.merge(tranformValues, { [field]: allvalue[field] }) + } + } + }) + return tranformValues +} diff --git a/components/grid/index.d.ts b/components/grid/index.d.ts new file mode 100644 index 000000000..20a75d297 --- /dev/null +++ b/components/grid/index.d.ts @@ -0,0 +1,22 @@ +import { CSSProperties } from "react" + +interface GridProps { +} +interface RowProps { + justify?: 'flex-start' | 'flex-end' | 'center' | 'space-around' | 'space-between ' + gutter?: boolean +} +interface ColProps { + justify?: 'flex-start' | 'flex-end' | 'center' | 'space-around' | 'space-between ' + span?: number + offset?: number +} +declare class Row extends React.Component { +} +declare class Col extends React.Component { +} +declare class Grid extends React.Component { + static Row = Row + static Col = Col +} +export default Grid diff --git a/components/grid/style/index.scss b/components/grid/style/index.scss index 8e6f03293..46ecbadaa 100644 --- a/components/grid/style/index.scss +++ b/components/grid/style/index.scss @@ -1,4 +1,4 @@ -@import '@hi-ui/core-css/index.scss'; +@import '../../core-css/index.scss'; // Rows .hi-grid__row { diff --git a/components/icon/iconfont.js b/components/icon/iconfont.js new file mode 100644 index 000000000..4fb4b4ead --- /dev/null +++ b/components/icon/iconfont.js @@ -0,0 +1,59 @@ +!(function (a) { + var l + var h + var o + var v + var i + var t + var d = + '' + var m = (m = document.getElementsByTagName('script'))[m.length - 1].getAttribute('data-injectcss') + if (m && !a.__iconfont__svg__cssinject__) { + a.__iconfont__svg__cssinject__ = !0 + try { + document.write( + '' + ) + } catch (a) { + console && console.log(a) + } + } + function c() { + i || ((i = !0), o()) + } + ;(l = function () { + var a, l, h, o + ;((o = document.createElement('div')).innerHTML = d), + (d = null), + (h = o.getElementsByTagName('svg')[0]) && + (h.setAttribute('aria-hidden', 'true'), + (h.style.position = 'absolute'), + (h.style.width = 0), + (h.style.height = 0), + (h.style.overflow = 'hidden'), + (a = h), + (l = document.body).firstChild ? ((o = a), (h = l.firstChild).parentNode.insertBefore(o, h)) : l.appendChild(a)) + }), + document.addEventListener + ? ~['complete', 'loaded', 'interactive'].indexOf(document.readyState) + ? setTimeout(l, 0) + : ((h = function () { + document.removeEventListener('DOMContentLoaded', h, !1), l() + }), + document.addEventListener('DOMContentLoaded', h, !1)) + : document.attachEvent && + ((o = l), + (v = a.document), + (i = !1), + (t = function () { + try { + v.documentElement.doScroll('left') + } catch (a) { + return void setTimeout(t, 50) + } + c() + })(), + (v.onreadystatechange = function () { + v.readyState == 'complete' && ((v.onreadystatechange = null), c()) + })) +})(window) diff --git a/components/icon/index.js b/components/icon/index.js index 1c0d96cf5..4dc158c78 100644 --- a/components/icon/index.js +++ b/components/icon/index.js @@ -1,15 +1,73 @@ import React from 'react' import classNames from 'classnames' -import './style/index' - -class Icon extends React.Component { - render () { - const {className, name, style, ...rest} = this.props - const iconCls = classNames(`hi-icon`, `icon-${name}`, className) +import './style/index' +import './iconfont.js' - return - } +// 旧版本 icon name 兼容映射 +const legacyMap = { + top: 'to-top', + bottom: 'to-bottom', + 'check-circle-o': 'check-circle', + 'close-circle-o': 'close-circle', + ratio: 'equal-proportion', + stattistics: 'pie-chart', + freezing: 'freeze-column', + caveat: 'warning', + noapi: 'show-code', + api: 'close-code', + web: 'webpage', + voice: 'audio', + usergroup: 'users', + 'upload-cloud': 'cloud-upload', + telephone: 'phone', + store: 'shop', + set: 'setting', + repeat: 'time-rewind', + qr: 'qr-code', + plugin: 'duplicate', + prompt: 'bell', + process: 'diagram', + 'problem-circle-o': 'question-circle', + position: 'location', + pic: 'picture', + pc: 'monitor', + move: 'drag', + 'move-to': 'folder-move', + more: 'ellipsis', + 'more-circle-o': 'ellipsis-circle', + mark: 'pin', + 'mail-delivery': 'mail-send', + linechart: 'bar-chart', + label: 'tag', + internet: 'global', + info: 'document-exclamation', + 'info-circle-o': 'info-circle', + hide: 'eye-invisible', + component: 'relation', + data: 'data-monitor', + 'money-circle-o': 'rmb', + refer: 'document-search' } +const Icon = ({ name, filled = false, className, style = {}, onClick }) => { + return ( + + ) +} export default Icon diff --git a/components/icon/style/index.js b/components/icon/style/index.js index 522460139..63810a681 100644 --- a/components/icon/style/index.js +++ b/components/icon/style/index.js @@ -1 +1 @@ -import '../../style/icon/index.scss' +import './index.scss' diff --git a/components/icon/style/index.scss b/components/icon/style/index.scss new file mode 100644 index 000000000..d985b903c --- /dev/null +++ b/components/icon/style/index.scss @@ -0,0 +1,7 @@ +svg.hi-icon { + width: 1em; + height: 1em; + vertical-align: -0.15em !important; + fill: currentColor; + overflow: hidden; +} diff --git a/components/index.d.ts b/components/index.d.ts new file mode 100644 index 000000000..0a6e5c841 --- /dev/null +++ b/components/index.d.ts @@ -0,0 +1,41 @@ +export { default as Button } from './button' +export { default as Card } from './card/index' +export { default as Checkbox } from './checkbox' +export { default as Carousel } from './carousel' +export { default as Cascader } from './cascader' +export { default as Collapse } from './collapse' +export { default as Counter } from './counter' +export { default as Datepicker } from './date-picker' +export { default as TimePicker } from './date-picker/TimePicker' +export { default as Dropdown } from './dropdown' +export { default as Form } from './form' +export { default as Grid } from './grid' +export { default as Input } from './input' +export { default as Loading } from './loading' +export { default as Menu } from './menu' +export { default as Message } from './message' +export { default as Modal } from './modal' +export { default as Notification } from './notification' +export { default as Pagination } from './pagination' +export { default as Popover } from './popover' +export { default as Progress } from './progress' +export { default as Radio } from './radio' +export { default as Rate } from './rate' +export { default as Select } from './select' +export { default as Stepper } from './stepper' +export { default as Switch } from './switch' +export { default as Table } from './table' +export { default as Tabs } from './tabs' +export { default as Tag } from './tag' +export { default as Timeline } from './timeline' +export { default as Tooltip } from './tooltip' +export { default as Transfer } from './transfer' +export { default as Tree } from './tree' +export { default as Upload } from './upload' +export { default as Watermark } from './watermark' +export { default as List } from './list' +export { default as SelectTree } from './select-tree' +export { default as Filter } from './filter' +export { default as Drawer } from './drawer' +export { default as Search } from './search' +export { default as Slider } from './slider' diff --git a/components/index.js b/components/index.js index c870cc54e..dc8657442 100755 --- a/components/index.js +++ b/components/index.js @@ -3,13 +3,15 @@ export { default as Dropdown } from './dropdown' export { default as Pagination } from './pagination' export { default as Tabs } from './tabs' export { default as Table } from './table' +export { LegacyTable } from './table' export { default as Notification } from './notification' export { default as handleNotificate } from './notification/HandleNotification' export { default as Modal } from './modal' +export { default as Drawer } from './drawer' export { default as Alert } from './alert' -export { default as Panel } from './panel' export { default as Collapse } from './collapse' export { default as Select } from './select' +export { default as SelectTree } from './select-tree' export { default as Cascader } from './cascader' export { default as Tooltip } from './tooltip' export { default as Popover } from './popover' @@ -19,17 +21,18 @@ export { default as Upload } from './upload' export { default as Tree } from './tree' export { default as Input } from './input' export { default as DatePicker } from './date-picker' -export { default as TimePicker } from './date-picker/TimePicker' +export { TimePicker } from './date-picker' export { default as Counter } from './counter' -export { default as NavMenu } from './nav-menu' export { default as Badge } from './badge' export { default as Radio } from './radio' export { default as Checkbox } from './checkbox' export { default as Grid } from './grid' export { default as Layout } from './grid' export { default as Stepper } from './stepper' -export { default as confirm } from './confirm' + export { default as Form } from './form' +export { LegacyForm } from './form' + export { default as Menu } from './menu' export { default as FormItem } from './form/Item' export { default as Ficon } from './ficon' @@ -45,4 +48,7 @@ export { default as Tag } from './tag' export { default as Breadcrumb } from './breadcrumb' export { default as Carousel } from './carousel' export { default as Watermark } from './watermark' +export { default as Slider } from './slider' +export { default as Search } from './search' export { ThemeContext, LocaleContext } from './context' +export { default as HiRequest } from './_util/hi-request' diff --git a/components/input/Input.js b/components/input/Input.js index 5685c625b..61b524654 100644 --- a/components/input/Input.js +++ b/components/input/Input.js @@ -7,8 +7,7 @@ import { format, formatValue, getAttrs, formatAmount, filterObjProps } from './u * @prop type 输入框类型 */ class Input extends Component { - - constructor (props) { + constructor(props) { super(props) this._Input = React.createRef() @@ -44,7 +43,7 @@ class Input extends Component { } } - componentWillReceiveProps (nextProps) { + componentWillReceiveProps(nextProps) { if (nextProps.value !== undefined) { if (nextProps.value !== this.state.value) { this.setState({ @@ -67,9 +66,11 @@ class Input extends Component { }) } } + focus = () => { this._Input.current.focus() } + blur = () => { this._Input.current.blur() } @@ -77,10 +78,10 @@ class Input extends Component { /** * 渲染 text 输入框 */ - renderText () { + renderText() { let { hover, active, value } = this.state // clearableTrigger 为内部预留,主要表示清除按钮的触发形态,类型分为 'hover' 和 ‘always’ - let { disabled, type, id, placeholder, clearable, clearableTrigger = 'hover' } = this.props + let { disabled, type, id, placeholder, clearable, clearableTrigger = 'hover',localeDatas } = this.props let { prefix, suffix, prepend, append } = this.state const noClear = ['textarea'] let prefixId = id ? id + '_prefix' : '' @@ -234,7 +235,7 @@ class Input extends Component { /** * 渲染 textarea */ - renderTextarea () { + renderTextarea() { let { active } = this.state let { disabled, theme } = this.props const { defaultValue, ...attrs } = this.attrs @@ -316,7 +317,7 @@ class Input extends Component { ) } - render () { + render() { const { type } = this.attrs const { size, id, className, required, theme } = this.props diff --git a/components/input/index.d.ts b/components/input/index.d.ts new file mode 100644 index 000000000..53b639d9b --- /dev/null +++ b/components/input/index.d.ts @@ -0,0 +1,19 @@ +interface Props { + type?: 'text' | 'textarea' | 'id' | 'tel' | 'card' | 'amount' | 'email' + value?: string | number + defaultValue?: string | number + prepend?: string | JSX.Element + append?: string | JSX.Element + disabled?: boolean + clearable?: boolean + placeholder?: string + onFocus?: (e: React.FocusEvent) => void + onBlur?: (e: React.FocusEvent) => void + onKeyDown?: (e: React.KeyboardEvent) => void + onKeyPress?: (e: React.KeyboardEvent) => void + onKeyUp?: (e: React.KeyboardEvent) => void + onInput?: (e: React.FormEvent) => void + onChange?: (e: React.ChangeEvent) => void +} +declare const Input: React.ComponentType +export default Input diff --git a/components/input/index.js b/components/input/index.js index 3a3275926..23c1c1e7a 100644 --- a/components/input/index.js +++ b/components/input/index.js @@ -5,7 +5,8 @@ import './style/index' import InputLegacy from './input-legacy' import Provider from '../context' -function SwitchVersion (component = {}, componentLegacy = {}) { +function SwitchVersion(component = {}, componentLegacy = {}) { + // eslint-disable-next-line react/display-name return forwardRef((props, ref) => { const InnerComponent = props.legacy === true ? componentLegacy : component return @@ -14,4 +15,4 @@ function SwitchVersion (component = {}, componentLegacy = {}) { export default SwitchVersion(Provider(Input), InputLegacy) -export {Input} +export { Input } diff --git a/components/input/style/index.scss b/components/input/style/index.scss index 85a504eea..496e27762 100644 --- a/components/input/style/index.scss +++ b/components/input/style/index.scss @@ -1,5 +1,4 @@ -@import './variables.scss'; -@import '@hi-ui/core-css/index.scss'; +@import '../../core-css/index.scss'; $input: 'hi-input' !default; @@ -7,47 +6,47 @@ textarea.#{$input} { display: block; box-shadow: none; outline: none; - color: $normal-color; - font-size: $font-size; + color: use-color('black'); + font-size: $font-size-normal; min-height: 32px; height: auto; - line-height: $line-height; + line-height: $line-height-size-normal; resize: vertical; overflow: auto; padding: 4px 12px; - border: 1px solid $border-color-normal; + border: 1px solid use-color('gray-30'); box-sizing: border-box; - border-radius: $border-radius; - background-color: #fff; + border-radius: 2px; + background-color: use-color('white'); transition: border-color 0.3s; &:not(.disabled):hover { - border-color: $border-color-active; + border-color: use-color('primary'); } &.active { - border-color: $border-color-active; + border-color: use-color('primary'); } &.disabled { - color: $disabled-color; - background-color: $disabled-bg-color; + color: use-color('gray-50'); + background-color: use-color('gray-10'); } &::-webkit-input-placeholder { - color: $placeholder-color; + color: use-color('gray-50'); } &:-moz-placeholder { - color: $placeholder-color; + color: use-color('gray-50'); } &::-moz-placeholder { - color: $placeholder-color; + color: use-color('gray-50'); } &:-ms-input-placeholder { - color: $placeholder-color; + color: use-color('gray-50'); } } @@ -60,19 +59,19 @@ textarea.#{$input} { box-sizing: border-box; ::-webkit-input-placeholder { - color: $placeholder-color; + color: use-color('gray-50'); } :-moz-placeholder { - color: $placeholder-color; + color: use-color('gray-50'); } ::-moz-placeholder { - color: $placeholder-color; + color: use-color('gray-50'); } :-ms-input-placeholder { - color: $placeholder-color; + color: use-color('gray-50'); } input { @@ -81,14 +80,14 @@ textarea.#{$input} { outline: none; min-height: 30px; box-sizing: border-box; - color: $normal-color; - font-size: $font-size; - line-height: $line-height; + color: use-color('black'); + font-size: $font-size-normal; + line-height: $line-height-size-normal; box-shadow: none; &.disabled { - color: $disabled-color; - background-color: $disabled-bg-color; + color: use-color('gray-50'); + background-color: use-color('gray-10'); } } @@ -112,23 +111,23 @@ textarea.#{$input} { position: relative; display: flex; width: 100%; - border: 1px solid $border-color-normal; + border: 1px solid use-color('gray-30'); box-sizing: border-box; - border-radius: $border-radius; - background-color: #fff; + border-radius: 2px; + background-color: use-color('white'); transition: border-color 0.3s; &:not(.disabled):hover { - border-color: $border-color-active; + border-color: use-color('primary'); } &.active { - border-color: $border-color-active; + border-color: use-color('primary'); } &.disabled { - color: $disabled-color; - background-color: $disabled-bg-color; + color: use-color('gray-50'); + background-color: use-color('gray-10'); } } @@ -150,9 +149,13 @@ textarea.#{$input} { .hi-input__clear { display: block; border-radius: 50%; - color: #666; - font-size: 14px; + color: use-color('gray-50'); + font-size: 22px; text-align: center; + + &:hover { + color: use-color('black'); + } } .hi-input__suffix__icon { @@ -177,8 +180,8 @@ textarea.#{$input} { flex-direction: column; justify-content: space-around; flex: 1 0 auto; - color: $normal-color; - font-size: $font-size; + color: use-color('black'); + font-size: $font-size-normal; line-height: 30px; } @@ -216,7 +219,7 @@ textarea.#{$input} { } &__append { - color: $border-color-active; + color: use-color('primary'); .hi-btn, .hi-select__input { @@ -239,35 +242,7 @@ textarea.#{$input} { display: flex; justify-content: space-around; align-items: center; - color: #f00; - } - } -} - -@each $key, $value in $palette-primary { - .theme__#{$key}.#{$input} { - .hi-input__inner:not(.disabled):hover { - border-color: $value; - } - - .hi-input__inner.active { - border-color: $value; - } - - .hi-input--append { - .hi-input__append { - color: $value; - } - } - } - - textarea.#{$input}.theme__#{$key} { - &:not(.disabled):hover { - border-color: $value; - } - - &.active { - border-color: $value; + color: get-color($palette-secondary, 'danger'); } } } diff --git a/components/input/style/variables.scss b/components/input/style/variables.scss deleted file mode 100644 index d681a0377..000000000 --- a/components/input/style/variables.scss +++ /dev/null @@ -1,39 +0,0 @@ -/* stylelint-disable */ -// color -$normal-color: #333; - -$border-color-normal: #d8d8d8; -$border-color-active: #4284f5; -$border-radius: 2px; - -$disabled-bg-color: #f2f2f2; -$disabled-color: #ccc; - -$placeholder-color: $disabled-color; - -$label-bg-color: #eee; - - -// size m -$font-size: 14px; -$line-height: 22px; -$placeholder-size: $font-size; - -$m-font-size: 14px; -$m-placeholder-size: $font-size; - -$m-width: 240px; - - -// size s -$s-font-size: 12px; -$s-placeholder-size: 12px; - -$s-width: 200px; - - -// size l -$l-font-size: 16px; -$l-placeholder-size: 16px; - -$l-width: 280px; diff --git a/components/input/util.js b/components/input/util.js index f31bd23cb..59f4af0d8 100644 --- a/components/input/util.js +++ b/components/input/util.js @@ -1,13 +1,13 @@ /** - * 提取非函数属性 - * @param {object} oldProps 原始props - */ + * 提取非函数属性 + * @param {object} oldProps 原始props + */ export const getAttrs = (oldProps) => { const noNeed = ['value', 'className', 'class', 'id', 'style', 'size', 'disabled'] const attrs = {} const events = {} - for (let i in oldProps) { + for (const i in oldProps) { if (!(oldProps[i] instanceof Function)) { if (noNeed.indexOf(i) === -1) { attrs[i] = oldProps[i] @@ -76,7 +76,17 @@ export const formatCard = (val) => { } else if (len < 17) { return val.slice(0, 4) + ' ' + val.slice(4, 8) + ' ' + val.slice(8, 12) + ' ' + val.slice(12, 16) } else { - return val.slice(0, 4) + ' ' + val.slice(4, 8) + ' ' + val.slice(8, 12) + ' ' + val.slice(12, 16) + ' ' + val.slice(16, 19) + return ( + val.slice(0, 4) + + ' ' + + val.slice(4, 8) + + ' ' + + val.slice(8, 12) + + ' ' + + val.slice(12, 16) + + ' ' + + val.slice(16, 19) + ) } } @@ -120,12 +130,16 @@ export const formatValue = (val, type) => { const numberType = ['id', 'tel', 'amount', 'card'] if (numberType.indexOf(type) > -1) { - let tmp = val.replace(/[^\d|.]/g, '') + const tmp = val.replace(/[^\d|.]/g, '') switch (type) { - case 'id': return tmp.slice(0, 18) - case 'tel': return tmp.slice(0, 11) - case 'card': return tmp.slice(0, 19) - default: return tmp + case 'id': + return tmp.slice(0, 18) + case 'tel': + return tmp.slice(0, 11) + case 'card': + return tmp.slice(0, 19) + default: + return tmp } } else { return val @@ -136,8 +150,10 @@ export const formatValue = (val, type) => { * 过滤属性 */ export const filterObjProps = (obj, propsNeedFilter) => { - return Object.keys(obj).filter(key => !propsNeedFilter.includes(key)).reduce((filteredObj, key) => { - filteredObj[key] = obj[key] - return filteredObj - }, {}) + return Object.keys(obj) + .filter((key) => !propsNeedFilter.includes(key)) + .reduce((filteredObj, key) => { + filteredObj[key] = obj[key] + return filteredObj + }, {}) } diff --git a/components/list/IconText.js b/components/list/IconText.js new file mode 100644 index 000000000..e1cdd28f2 --- /dev/null +++ b/components/list/IconText.js @@ -0,0 +1,20 @@ +import React from 'react' +import Icon from '../Icon' + +import classNames from 'classnames' + +import './style' +const prefixCls = 'hi-icontext' +const IconText = ({ name, style = {}, iconStyle, className, text }) => { + return ( + + + {text} + + ) +} +export default IconText diff --git a/components/list/Item.js b/components/list/Item.js new file mode 100644 index 000000000..f2d564465 --- /dev/null +++ b/components/list/Item.js @@ -0,0 +1,56 @@ +import React from 'react' +import classNames from 'classnames' + +const prefixCls = 'hi-list' +const isArray = arg => { + return arg instanceof Array +} +const ExtraArray = ({ extra }) => { + return ( +
      + {extra.map((item, index) => { + return ( +
    • + {item} +
    • + ) + })} +
    + ) +} +const Item = ({ title, titleTag, titleTagType, description, extra }) => { + return ( +
    + {(title || titleTag) && ( +
    + {title && ( +

    + {title} +

    + )} + {titleTag && ( + + {titleTag} + + )} +
    + )} + {description && ( +
    + {description} +
    + )} + {extra && ( +
    + {isArray(extra) ? : extra} +
    + )} +
    + ) +} +export default Item diff --git a/components/list/index.d.ts b/components/list/index.d.ts new file mode 100644 index 000000000..a0091d43d --- /dev/null +++ b/components/list/index.d.ts @@ -0,0 +1,23 @@ +type DataItem = { + title: string | JSX.Element + titleTag?: string | JSX.Element + titleTagType?: 'primary' | 'success' |'warning' | 'danger' + description?: string | JSX.Element + extra?: string | string[] + avatar?: string +} +interface Props { + type?: 'default' | 'card' + data: DataItem[] + renderItem?: (item: DataItem) => JSX.Element + action?: (item: DataItem) => JSX.Element + actionPosition?: 'top' | 'center' |'bottom' + split?: boolean + pagination?: boolean | PaginationProps + bordered?: boolean + hoverable?: boolean + layout?: 'vertical' | 'horizontal' + emptyText?: string | JSX.Element +} +declare const List: React.ComponentType +export default List diff --git a/components/list/index.js b/components/list/index.js new file mode 100644 index 000000000..fe2c94647 --- /dev/null +++ b/components/list/index.js @@ -0,0 +1,130 @@ +import React, { useState, useEffect } from 'react' +import classNames from 'classnames' + +import Pagination from '../pagination' +import Item from './Item' +import IconText from './IconText' +import './style' + +const prefixCls = 'hi-list' + +const getPagePosition = pagination => { + let pagePosition = 'flex-end' + switch (pagination.position) { + case 'left': + pagePosition = 'start' + break + case 'middle': + pagePosition = 'center' + break + + case 'right': + pagePosition = 'flex-end' + break + default: + pagePosition = 'flex-end' + } + return pagePosition +} +const getActionPosition = actionPosition => { + let _actionPosition = 'flex-end' + switch (actionPosition) { + case 'top': + _actionPosition = 'flex-start' + break + case 'center': + _actionPosition = 'center' + break + case 'bottom': + _actionPosition = 'flex-end' + break + default: + _actionPosition = 'flex-end' + } + return _actionPosition +} +const List = ({ + data, + bordered, + type, + layout, + hoverable, + emptyText = '暂无数据', + pagination = {}, + action, + actionPosition = '', + renderItem, + split = true, + ...others +}) => { + const [datas, setData] = useState(data) + const paginationProps = pagination + useEffect(() => { + setData(data) + }, [data]) + const renderListItem = (item, index) => { + const { avatar } = item || {} + + return ( +
  • +
    + {avatar && ( +
    + +
    + )} + {renderItem && renderItem(item)} +
    + + {action && ( +
    + {action(item)} +
    + )} +
  • + ) + } + return ( +
    +
      + {datas && datas.length ? ( + datas.map((item, index) => { + return renderListItem(item, index) + }) + ) : ( +
    • {emptyText}
    • + )} +
    + {paginationProps && ( +
    + +
    + )} +
    + ) +} +List.Item = Item +export { IconText } +export default List diff --git a/components/list/style/index.js b/components/list/style/index.js new file mode 100644 index 000000000..63810a681 --- /dev/null +++ b/components/list/style/index.js @@ -0,0 +1 @@ +import './index.scss' diff --git a/components/list/style/index.scss b/components/list/style/index.scss new file mode 100644 index 000000000..f1dce4383 --- /dev/null +++ b/components/list/style/index.scss @@ -0,0 +1,159 @@ +@import '../../core-css/index.scss'; + +$list: 'hi-list' !default; + +$color-map: ( + 'primary': use-color('primary'), + 'warning': get-color($palette-secondary, 'warning'), + 'success': get-color($palette-secondary, 'success'), + 'danger': get-color($palette-secondary, 'danger') +) !default; + +.#{$list} { + &-items { + margin: 0; + padding: 0; + + &__border { + border: 1px solid use-color('gray-30'); + border-bottom: none; + + .hi-list-item { + padding-left: 12px; + } + } + } + + &-item { + display: flex; + justify-content: space-between; + align-items: center; + padding: 20px 24px 16px 0; + + &__row { + display: flex; + align-items: flex-start; + } + + &-title__content { + display: flex; + align-items: center; + } + + &__title { + padding: 0; + margin: 0; + color: use-color('black'); + font-size: $font-size-large; + line-height: 24px; + font-weight: $font-weight-normal; + } + + &__titleTag { + height: 18px; + font-size: $font-size-small; + font-weight: $font-weight-normal; + line-height: 18px; + margin-left: 8px; + padding: 0 6px; + border-radius: 9px; + color: use-color('primary'); + border: 1px solid use-color('primary'); + } + + &__desc { + color: use-color('black'); + font-size: $font-size-small; + line-height: 20px; + } + + &__extra { + color: use-color('gray-70'); + font-size: $font-size-small; + line-height: 20px; + } + + &__avatar { + margin-right: 14px; + + img { + width: 72px; + height: 72px; + display: inline-block; + } + } + + &__action { + color: use-color('black'); + font-size: $font-size-small; + line-height: 20px; + text-align: center; + cursor: pointer; + } + + &__split { + border-bottom: 1px solid use-color('gray-30'); + } + } + + &-item__card { + border: 1px solid use-color('gray-30'); + margin-top: 12px; + padding: 8px 16px 8px 12px; + } + + &-item__colume { + flex-direction: column; + align-items: flex-start; + } + + &-item--empty { + color: use-color('gray-70'); + text-align: center; + line-height: 88px; + list-style: none; + } + + &-item__hoverable:hover { + box-shadow: 2px 2px 5px 2px rgba(0, 0, 0, 0.08); + } + + &-extra-items { + display: flex; + align-items: center; + margin: 0; + padding: 0; + + li { + list-style: none; + } + } + + &-extra-item { + line-height: 20px; + + &::after { + display: inline-block; + content: ''; + width: 1px; + height: 10px; + margin: 0 12px; + background-color: use-color('gray-30'); + } + + &:last-child { + &::after { + display: inline-block; + content: ''; + width: 0; + } + } + } + + @each $key, $value in $color-map { + &-titleTag__#{$key} { + color: $value; + border: 1px solid $value; + } + } +} diff --git a/components/loading/index.d.ts b/components/loading/index.d.ts new file mode 100644 index 000000000..c6a993c3e --- /dev/null +++ b/components/loading/index.d.ts @@ -0,0 +1,21 @@ +interface Props { + size?: 'large' | 'default' | 'small' + content?: string | JSX.Element + visible?: boolean + full?: boolean +} + +type Options = { + content?: string | JSX.Element + key: string | number + duration?: number + size?: 'large' | 'default' | 'small' +} +const OpenFun: (target: HTMLElement, options: Options) => void +const CloseFun: (key: string | number) => void + +declare class Loading extends React.Component { + static open = OpenFun + static close = CloseFun +} +export default Loading diff --git a/components/loading/style/index.scss b/components/loading/style/index.scss index 1c287b0bb..a767deeea 100755 --- a/components/loading/style/index.scss +++ b/components/loading/style/index.scss @@ -126,7 +126,6 @@ background: #4284f5; transform: translateX(100%); animation: animDotL 1.5s linear infinite; - // display: none; } } } diff --git a/components/locales/en-US.js b/components/locales/en-US.js index ca765265b..8a17a0f28 100644 --- a/components/locales/en-US.js +++ b/components/locales/en-US.js @@ -5,54 +5,25 @@ export default { datePicker: { ok: 'OK', to: 'to', - placeholder: 'Select Date', - placeholderTimeperiod: 'Select Date Time', + placeholder: ['Select Date'], + placeholderTimeperiod: ['Select Time'], dateChoose: 'Select Date', timeChoose: 'Select Time', undefinedType: 'undefined type', lastWeek: 'Nearly week', lastMonth: 'Nearly month', lastThreeMonth: 'Nearly three months', - lastSixMonth: 'Nearly six months', lastYear: 'Nearly year', - month: [ - 'January', - 'February', - 'March', - 'April', - 'May', - 'June', - 'July', - 'August', - 'September', - 'October', - 'November', - 'December' - ], - monthShort: [ - 'Jan', - 'Feb', - 'Mar', - 'Apr', - 'May', - 'Jun', - 'Jul', - 'Aug', - 'Sep', - 'Oct', - 'Nov', - 'Dec' - ], + month: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], + monthShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], week: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], placeholders: { - date: 'Select Date', - month: 'Select Month', - year: 'Select Year', - time: 'Select Time', + date: ['Select Date'], + month: ['Select Month'], + year: ['Select Year'], + time: ['Select Time'], daterange: ['Select Start Date', 'Select End Date'], - yearrange: ['Select Start Year', 'Select End Year'], - monthrange: ['Select Start Month', 'Select End Month'], - week: 'Select Week', + week: ['Select Week'], weekrange: ['Select Start Week', 'Select End Week'], timeperiod: ['Select Start Date Time', 'Select Start End Time'] }, @@ -80,7 +51,17 @@ export default { placeholder: 'Please select', emptyContent: 'Not found', searchPlaceholder: 'Please search', - checkAll: 'Check all' + checkAll: 'Check all', + justSelected: 'Just Selected' + }, + selectTree: { + back: 'Back', + search: 'search' + }, + search: { + searchEmptyResult: 'No serach results', + searchEmptyRecord: 'No serach record', + searchRecord: 'Serach record' }, transfer: { checkAll: 'Check all', @@ -130,5 +111,8 @@ export default { searchEmptyResult: 'No serach results', modalTitle: 'Warning', delTips: 'Deleting a node will delete all child nodes, are you sure to delete this node?' + }, + watermark: { + content: 'Please do not gaiden' } } diff --git a/components/locales/zh-CN.js b/components/locales/zh-CN.js index f3120c148..a3e7c2fad 100644 --- a/components/locales/zh-CN.js +++ b/components/locales/zh-CN.js @@ -5,30 +5,28 @@ export default { datePicker: { ok: '确认', to: '至', - placeholder: '请选择日期', - placeholderTimeperiod: '请选择日期时间', + placeholder: ['请选择日期'], + placeholderTimeperiod: ['请选择时间'], dateChoose: '日期选择', timeChoose: '时间选择', undefinedType: '类型未定义', lastWeek: '近一周', lastMonth: '近一月', lastThreeMonth: '近三月', - lastSixMonth: '近半年', lastYear: '近一年', month: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'], monthShort: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'], week: ['日', '一', '二', '三', '四', '五', '六'], placeholders: { - date: '请选择日期', - month: '请选择月', - year: '请选择年', - time: '请选择时间', + date: ['请选择日期'], + month: ['请选择月'], + year: ['请选择年'], + time: ['请选择时间'], daterange: ['开始日期', '结束日期'], - yearrange: ['开始年', '结束年'], - monthrange: ['开始月', '结束月'], - week: '请选择周', + week: ['请选择周'], weekrange: ['开始周', '结束周'], - timeperiod: ['开始日期时间', '结束日期时间'] + timeperiod: ['开始时间', '结束时间'], + timerange: ['请选择开始时间', '请选择结束时间'] }, year: '年', timePeriod: '时间段', @@ -49,13 +47,24 @@ export default { }, cascader: { placeholder: '请选择', - noFoundTip: '无匹配数据' + noFoundTip: '无匹配数据', + emptyContent: '暂无数据' }, select: { placeholder: '请选择', emptyContent: '无匹配数据', searchPlaceholder: '搜索', - checkAll: '全选' + checkAll: '全选', + justSelected: '仅看已选' + }, + selectTree: { + back: '返回', + search: '搜索' + }, + search: { + searchEmptyResult: '未找到搜索结果', + searchEmptyRecord: '无搜索记录', + searchRecord: '搜索历史' }, transfer: { checkAll: '全选', @@ -105,5 +114,8 @@ export default { searchEmptyResult: '未找到搜索结果', modalTitle: '提示', delTips: '删除节点将删除所有子节点,确定删除吗?' + }, + watermark: { + content: '请勿外传' } } diff --git a/components/menu/Item.js b/components/menu/Item.js index 9bd3db840..795598819 100644 --- a/components/menu/Item.js +++ b/components/menu/Item.js @@ -4,7 +4,7 @@ import classNames from 'classnames' import Title from './Title' class Item extends Component { - render () { + render() { const { children, disabled, onClick, level, placement, activeIndex, id, icon, index, data, mini } = this.props const isActive = activeIndex === index const cls = classNames('hi-menu-item', 'hi-menu-item__title', 'hi-menu__title', `hi-menu--${level}`, { diff --git a/components/menu/Menu.js b/components/menu/Menu.js index 24e6ea824..517051381 100644 --- a/components/menu/Menu.js +++ b/components/menu/Menu.js @@ -7,7 +7,7 @@ import Item from './Item' import SubMenu from './SubMenu' import './style/index' class Menu extends Component { - constructor (props) { + constructor(props) { super(props) const { activeId, collapsed } = this.props const activeIndex = this.getActiveIndex(activeId) @@ -26,7 +26,7 @@ class Menu extends Component { this.clickInsideFlag = false // click在menu标识 } - componentWillReceiveProps (nextProps) { + componentWillReceiveProps(nextProps) { const { activeId, data, collapsed } = nextProps if (activeId !== this.props.activeId || !_.isEqual(data, this.props.data)) { const activeIndex = this.getActiveIndex(activeId, data) @@ -48,15 +48,15 @@ class Menu extends Component { } } - componentDidMount () { + componentDidMount() { window.addEventListener('click', this.clickOutsideHandel) } - componentWillUnmount () { + componentWillUnmount() { window.removeEventListener('click', this.clickOutsideHandel) } - clickOutside () { + clickOutside() { if (!this.clickInsideFlag && !this.isNoMiniVertaicalMenu()) { this.setState({ expandIndex: [] @@ -66,11 +66,11 @@ class Menu extends Component { this.clickInsideFlag = false } - clickInside () { + clickInside() { this.clickInsideFlag = true } - getExpandIndex (clickedIndex) { + getExpandIndex(clickedIndex) { if (!clickedIndex) { return [] } @@ -79,7 +79,7 @@ class Menu extends Component { let _clickedIndex = clickedIndex let subInExpandIndex = false - let _expandIndex = expandIndex.filter((item) => { + const _expandIndex = expandIndex.filter((item) => { // 点击父菜单时,需要把已展开的子菜单过滤掉,因为父菜单关闭时所有子菜单也要关闭 const flag = item.startsWith(_clickedIndex) if (flag) { @@ -106,15 +106,15 @@ class Menu extends Component { } } - isNoMiniVertaicalMenu (collapsed = this.state.collapsed) { + isNoMiniVertaicalMenu(collapsed = this.state.collapsed) { // 垂直非mini菜单 return this.props.placement === 'vertical' && !collapsed } - getActiveMenus (menus, activeId, activeMenus = []) { + getActiveMenus(menus, activeId, activeMenus = []) { let result - for (let index in menus) { - let _activeMenus = [...activeMenus] + for (const index in menus) { + const _activeMenus = [...activeMenus] if (menus[index].id === activeId) { _activeMenus.push(index) result = _activeMenus @@ -131,7 +131,7 @@ class Menu extends Component { } } - getActiveIndex (activeId, menu) { + getActiveIndex(activeId, menu) { // 获取激活item对应的索引,以'-'拼接成字符串 const { data } = this.props @@ -142,7 +142,7 @@ class Menu extends Component { return (activeMenus && activeMenus.join('-')) || '' } - toggleMini () { + toggleMini() { const collapsed = !this.state.collapsed const expandIndex = collapsed ? [] : this.state.expandIndex @@ -159,7 +159,7 @@ class Menu extends Component { }, 0) } - onClick (indexs, id, data) { + onClick(indexs, id, data) { const expandIndex = this.isNoMiniVertaicalMenu() ? this.state.expandIndex : this.getExpandIndex('') // 非mini垂直菜单选中时不需要收起子菜单 const oldId = this.state.activeId @@ -175,7 +175,7 @@ class Menu extends Component { ) } - onClickSubMenu (index) { + onClickSubMenu(index) { const expandIndex = this.getExpandIndex(index) this.clickInside() @@ -189,7 +189,7 @@ class Menu extends Component { ) } - renderItem (data, index, props = {}) { + renderItem(data, index, props = {}) { // render menu item const { activeIndex } = this.state const mergeProps = Object.assign( @@ -209,18 +209,18 @@ class Menu extends Component { return {data.content} } - renderFatSubMenu (data, parentIndex) { + renderFatSubMenu(data, parentIndex) { // render胖菜单 - let groups = [] + const groups = [] data.forEach((dataItem, groupIndex) => { groups.push( -
  • -
    +
  • +
    </div> {dataItem.children && ( - <ul className='hi-menu-fat__content'> + <ul className="hi-menu-fat__content"> {dataItem.children.map((child, index) => { return this.renderItem(child, parentIndex + '-' + groupIndex + '-' + index, { level: 2 }) })} @@ -232,10 +232,10 @@ class Menu extends Component { return groups } - renderMenu (data, parentIndex = '') { - const { showAllSubMenus, placement, theme } = this.props + renderMenu(data, parentIndex = '') { + const { showAllSubMenus, placement, theme, overlayClassName } = this.props const { activeIndex, expandIndex, collapsed } = this.state - let items = [] + const items = [] const renderMenu = showAllSubMenus ? this.renderFatSubMenu.bind(this) : this.renderMenu.bind(this) data.forEach((item, index) => { const indexStr = parentIndex !== '' ? parentIndex + '-' + index : '' + index @@ -246,6 +246,7 @@ class Menu extends Component { <SubMenu key={index} theme={theme} + overlayClassName={overlayClassName} onClick={this.onClickSubMenu.bind(this)} clickInside={this.clickInside.bind(this)} index={indexStr} @@ -270,7 +271,7 @@ class Menu extends Component { return items } - render () { + render() { const { data, placement, showCollapse, theme } = this.props const { collapsed } = this.state const cls = classNames('hi-menu', `theme__${theme}`, `hi-menu--${placement}`, { @@ -280,9 +281,9 @@ class Menu extends Component { return ( <div className={cls}> - <ul className='hi-menu-items'>{this.renderMenu(data)}</ul> + <ul className="hi-menu-items">{this.renderMenu(data)}</ul> {placement === 'vertical' && showCollapse && ( - <div className='hi-menu--mini__toggle' onClick={this.toggleMini.bind(this)}> + <div className="hi-menu--mini__toggle" onClick={this.toggleMini.bind(this)}> {miniIcon} </div> )} diff --git a/components/menu/SubMenu.js b/components/menu/SubMenu.js index e1a8d8837..45173e2ab 100644 --- a/components/menu/SubMenu.js +++ b/components/menu/SubMenu.js @@ -5,17 +5,17 @@ import Popper from '../popper' import Icon from '../icon' import Title from './Title' class SubMenu extends Component { - onClick (index) { + onClick(index) { this.props.onClick(index) } - checkActive (activeIndex, index) { + checkActive(activeIndex, index) { const indexArr = index.split('-') const activeIndexArr = activeIndex.split('-') return activeIndexArr.slice(0, indexArr.length).join('-') === index } - checkExpand (activeIndex, expandIndex, index) { + checkExpand(activeIndex, expandIndex, index) { return expandIndex.some((item) => { const indexArr = index.split('-') const expandIndexArr = item.split('-') @@ -23,8 +23,8 @@ class SubMenu extends Component { }) } - renderPopperMenu (deepSubmenu, isExpand) { - const { mini, datas, index, renderMenu, fatMenu, clickInside, theme } = this.props + renderPopperMenu(deepSubmenu, isExpand) { + const { mini, datas, index, renderMenu, fatMenu, clickInside, theme, overlayClassName } = this.props let leftGap let topGap let placement @@ -46,6 +46,7 @@ class SubMenu extends Component { zIndex={1050} topGap={topGap} leftGap={leftGap} + overlayClassName={overlayClassName} className={classNames('hi-submenu__popper', `theme__${theme}`, { 'hi-submenu__popper--fat': fatMenu })} @@ -62,7 +63,7 @@ class SubMenu extends Component { ) } - renderVerticalMenu (isActive, isExpand) { + renderVerticalMenu(isActive, isExpand) { const { datas, index, renderMenu, clickInside, theme } = this.props return ( <ul @@ -77,7 +78,7 @@ class SubMenu extends Component { ) } - render () { + render() { const { content, icon, mode, mini, level, index, activeIndex, expandIndex, disabled, fatMenu, theme } = this.props const isExpand = this.checkExpand(activeIndex, expandIndex, index) const isActive = this.checkActive(activeIndex, index) @@ -111,7 +112,7 @@ class SubMenu extends Component { }} > <Title icon={icon} content={content} mini={mini} level={level} placement={mode} /> - <div className='hi-menu__title-toggle-icon'> + <div className="hi-menu__title-toggle-icon"> <Icon name={toggleIcon} /> </div> </div> diff --git a/components/menu/index.d.ts b/components/menu/index.d.ts new file mode 100644 index 000000000..d1da36b67 --- /dev/null +++ b/components/menu/index.d.ts @@ -0,0 +1,22 @@ +type DataItem = { + content: string | JSX.Element + icon?: string | JSX.Element + id: string | number + disabled?: boolean + children?: DataItem[] +} +interface Props { + data: DataItem[] + activeId?: string | number + placement?: 'horizontal' | 'vertical' + collapsed?: boolean + showCollapse?: boolean + showAllSubMenus?: boolean + accordion?: boolean + onClick?: (activeId: string | number, prevActiveId: string | number) => void + onClickSubMenu?: (subMenuIndexs: number) => void + onCollapse?: (collapsed: boolean) => void + overlayClassName?: string +} +declare const Menu: React.ComponentType<Props> +export default Menu diff --git a/components/menu/style/index.scss b/components/menu/style/index.scss index 7e05d0a20..e890535d3 100644 --- a/components/menu/style/index.scss +++ b/components/menu/style/index.scss @@ -1,4 +1,4 @@ -@import '@hi-ui/core-css/index.scss'; +@import '../../core-css/index.scss'; @mixin ellipsis($max-width: initial, $width: auto) { width: $width; @@ -26,8 +26,6 @@ .hi-menu, .hi-submenu__popper { - @include component-reset(); - ul { margin-top: 0; margin-bottom: 0; @@ -48,17 +46,17 @@ &--active { > .hi-menu__title .hi-menu__title-content, > .hi-menu__title-content { - color: #4284f5; + color: use-color('primary'); } > .hi-menu__title .hi-menu__title-icon, > .hi-menu__title-icon { - color: #4284f5; + color: use-color('primary'); } > .hi-submenu__title { & > .hi-menu__title-toggle-icon { - color: #4284f5; + color: use-color('primary'); } } } @@ -66,7 +64,7 @@ &--disabled { .hi-menu__title { cursor: not-allowed; - color: #d8d8d8; + color: use-color('gray-30'); } } } @@ -75,7 +73,7 @@ display: flex; line-height: 22px; font-size: 14px; - color: #333; + color: use-color('black'); cursor: pointer; align-items: center; @@ -103,7 +101,7 @@ .hi-menu { &--horizontal { - border-bottom: 1px solid #e6e7e8; + border-bottom: 1px solid use-color('gray-20'); .hi-menu-item { position: relative; @@ -117,7 +115,7 @@ transform: translateX(-50%); width: 32px; height: 2px; - background-color: #4284f5; + background-color: use-color('primary'); } &:last-child { @@ -138,7 +136,7 @@ display: inline-block; width: 216px; padding: 12px 0; - background: #fff; + background: use-color('white'); box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.15); box-sizing: border-box; @@ -151,14 +149,14 @@ position: relative; &--active:not(.hi-submenu) { - background-color: rgba(66, 133, 244, 0.08); + background-color: use-color('primary-20'); &::after { content: ''; position: absolute; width: 2px; height: 100%; - background-color: #4284f5; + background-color: use-color('primary'); left: 0; } } @@ -169,7 +167,7 @@ height: 48px; &:hover { - background-color: rgba(66, 133, 244, 0.08); + background-color: use-color('primary-20'); } } @@ -188,7 +186,7 @@ overflow: hidden; .hi-menu--1.hi-menu-item--active { - background-color: rgba(66, 133, 244, 0.08); + background-color: use-color('primary-20'); } .hi-menu__title { @@ -199,14 +197,14 @@ position: relative; &--active { - background-color: rgba(66, 133, 244, 0.08); + background-color: use-color('primary-20'); &::after { content: ''; position: absolute; width: 2px; height: 100%; - background-color: #4284f5; + background-color: use-color('primary'); left: 0; } } @@ -239,9 +237,9 @@ &__popper { width: 200px; padding: 8px 0; - background-color: #fff; + background-color: use-color('white'); box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.15); - border: 1px solid rgba(230, 231, 232, 1); + border: 1px solid use-color('gray-20'); box-sizing: border-box; .hi-submenu__items { @@ -250,7 +248,7 @@ .hi-menu-item--disabled { cursor: not-allowed; - color: #d8d8d8; + color: use-color('gray-30'); } } @@ -271,12 +269,12 @@ width: 120px; &__title { - color: #999; + color: use-color('gray-70'); } &__content { font-size: 14px; - color: #999; + color: use-color('gray-70'); box-sizing: border-box; @include ellipsis(); @@ -284,138 +282,3 @@ } } } - -@each $key, $value in $palette-primary { - .theme__#{$key}.hi-menu { - .hi-menu-item { - &--active { - > .hi-menu__title .hi-menu__title-content, - > .hi-menu__title-content { - color: $value; - } - - > .hi-menu__title .hi-menu__title-icon, - > .hi-menu__title-icon { - color: $value; - } - - > .hi-submenu__title { - & > .hi-menu__title-toggle-icon { - color: $value; - } - } - } - - &--disabled { - .hi-menu__title { - cursor: not-allowed; - color: #d8d8d8; - } - } - - &--active::after { - background-color: $value; - } - } - - &.active { - border-color: $value; - } - - &--mini { - .hi-menu-item { - &--active { - background-color: rgba($value, 0.1); - - &::after { - background-color: $value; - } - } - } - } - - &--vertical { - box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.15); - - .hi-menu-item { - &--active:not(.hi-submenu) { - background-color: rgba($value, 0.1); - - &::after { - background-color: $value; - } - } - } - - .hi-menu__title { - &:hover { - background-color: rgba($value, 0.1); - } - } - } - } - - .theme__#{$key}.hi-menu-item { - &--active { - > .hi-menu__title .hi-menu__title-content, - > .hi-menu__title-content { - color: $value; - } - - > .hi-menu__title .hi-menu__title-icon, - > .hi-menu__title-icon { - color: $value; - } - - > .hi-submenu__title { - & > .hi-menu__title-toggle-icon { - color: $value; - } - } - } - - &--disabled { - .hi-menu__title { - cursor: not-allowed; - color: #d8d8d8; - } - } - - &--active::after { - background-color: $value; - } - } - - .theme__#{$key}.hi-submenu__popper { - .hi-menu-item { - &--active { - > .hi-menu__title .hi-menu__title-content, - > .hi-menu__title-content { - color: $value; - } - - > .hi-menu__title .hi-menu__title-icon, - > .hi-menu__title-icon { - color: $value; - } - - > .hi-submenu__title { - & > .hi-menu__title-toggle-icon { - color: $value; - } - } - } - - &--disabled { - .hi-menu__title { - cursor: not-allowed; - color: #d8d8d8; - } - } - - &--active::after { - background-color: $value; - } - } - } -} diff --git a/components/message/index.d.ts b/components/message/index.d.ts new file mode 100644 index 000000000..6893812e8 --- /dev/null +++ b/components/message/index.d.ts @@ -0,0 +1,13 @@ +interface Props { + +} +type Options = { + type?: 'info' | 'success' | 'error' | 'warning' + title: string + duration?: number +} +const OpenFun: (options: Options) => void +declare class Message extends React.Component<Props, any> { + static open = OpenFun +} +export default Message diff --git a/components/message/index.js b/components/message/index.js index 4be471ba1..6c9ee18be 100755 --- a/components/message/index.js +++ b/components/message/index.js @@ -1,30 +1,23 @@ import notice from '../notice' import './style/index' import React from 'react' -import classNames from 'classnames' +import Icon from '../icon' const iconMap = { - success: 'chenggong', - error: 'shibai', - warning: 'jinggao', - info: 'tishi' + success: 'check-circle', + danger: 'close-circle', + warning: 'exclamation-circle', + primary: 'info-circle' } const message = { - open: ({ - title, - prefix = 'message', - key = Math.random(), - duration, - closeable = false, - type = 'info' - }) => { + open: ({ title, prefix = 'message', key = Math.random(), duration, closeable = false, type = 'info' }) => { + let _type = type === 'info' ? 'primary' : type + _type = type === 'error' ? 'danger' : _type const NoticeContent = ( <React.Fragment> - <div className={`hi-${prefix}__title--wrapper`} > - <span className={`hi-${prefix}__icon`}> - <i className={classNames('hi-icon', `icon-${iconMap[type]}`)} /> - </span> + <div className={`hi-${prefix}__header`}> + <Icon name={iconMap[_type]} filled className={`hi-${prefix}__icon`} /> {title && <div className={`hi-${prefix}__title`}>{title}</div>} </div> </React.Fragment> @@ -35,7 +28,7 @@ const message = { key, closeable, duration, - type + type: _type }) } } diff --git a/components/message/style/index.scss b/components/message/style/index.scss index 5dd578915..3aa840abd 100755 --- a/components/message/style/index.scss +++ b/components/message/style/index.scss @@ -1,13 +1,10 @@ -@import '@hi-ui/core-css/index.scss'; -@import '../../style/icon/index.scss'; +@import '../../core-css/index.scss'; -$theme-colors-notice: ( - 'orange': #ffefea, - 'cyan': #ecf8f4 , - 'magenta': #ffeef1, - 'lavender': #f7edfb, - 'blue': #ebf6fe, - 'purple': #8a8acb +$color-map: ( + 'primary': use-color('primary'), + 'warning': get-color($palette-secondary, 'warning'), + 'success': get-color($palette-secondary, 'success'), + 'danger': get-color($palette-secondary, 'danger') ) !default; .hi-message__container { @@ -19,7 +16,7 @@ $theme-colors-notice: ( .hi-message { position: relative; - padding: 7px 12px; + padding: 9px 12px; margin-bottom: 10px; border-radius: 2px; transition: 0.3s ease; @@ -27,77 +24,35 @@ $theme-colors-notice: ( align-items: flex-start; width: 260px; box-sizing: border-box; - } - - .hi-message__title--wrapper { - display: flex; - align-items: center; - - .hi-message__title { - color: #333 !important; - font-size: 14px; - } - } - - .hi-message__icon { - font-size: 16px; - margin-right: 12px; - } - .hi-message--info { - background: #edf2fc; - border: 1px solid #d8e5ff; + @each $key, $value in $color-map { + &--#{$key} { + background-color: use-color(#{$key}-20); + border: 1px solid use-color(#{$key}-40); - .hi-message__title, - .hi-message__icon { - color: #4284f5; - } - - .hi-message__button { - background-color: #4284f5; + .hi-message__icon { + fill: $value; + } + } } } - .hi-message--error { - background: #feeff0; - border: 1px solid #ffe0e3; - - .hi-message__title, - .hi-message__icon { - color: #eb5252; - } - - .hi-message__button { - background-color: #eb5252; - } + .hi-message__header { + line-height: $line-height-size-normal; + display: flex; + align-items: center; } - .hi-message--success { - background: #e8f6ee; - border: 1px solid #cae9d7; - - .hi-message__title, - .hi-message__icon { - color: #1da653; - } - - .hi-message__button { - background-color: #1da653; - } + .hi-message__title { + color: use-color('black') !important; + font-size: $font-size-normal; } - .hi-message--warning { - background: #fbf5e6; - border: 1px solid #fcf0d4; - - .hi-message__title, - .hi-message__icon { - color: #e19d0c; - } - - .hi-message__button { - background-color: #e19d0c; - } + .hi-message__icon { + width: 16px; + height: 16px; + margin-right: 8px; + flex-shrink: 0; } .hi-message-enter { @@ -116,31 +71,3 @@ $theme-colors-notice: ( transform: translateY(-100%); } } - -@each $key, $value in $theme-colors { - .hi-message__container { - .theme__#{$key}.hi-message.hi-message--info { - border: - 1px - solid - map-get(get-palette(get-color($palette-primary, $key)), '20'); - - .hi-icon { - color: $value; - } - - .hi-message__button { - background-color: $value; - border: 1px solid $value; - } - } - } -} - -@each $key, $value in $theme-colors-notice { - .hi-message__container { - .theme__#{$key}.hi-message.hi-message--info { - background-color: $value; - } - } -} diff --git a/components/modal/index.d.ts b/components/modal/index.d.ts new file mode 100644 index 000000000..346619b59 --- /dev/null +++ b/components/modal/index.d.ts @@ -0,0 +1,16 @@ +import { CSSProperties } from "react" +interface Props { + title?: string | JSX.Element + visible?: boolean + closeable?: boolean + maskCloseable?: boolean + cancelText?: string + confirmText?: string + size?: 'default' | 'large' + style?: CSSProperties + footer?: JSX.Element | null + onCancel?: (e: MouseEvent) => void + onConfirm?: (e: MouseEvent) => void +} +declare const Modal: React.ComponentType<Props> +export default Modal diff --git a/components/modal/index.js b/components/modal/index.js deleted file mode 100755 index 694fbbcdc..000000000 --- a/components/modal/index.js +++ /dev/null @@ -1,158 +0,0 @@ -import React, { Component } from 'react' -import { createPortal } from 'react-dom' -import PropTypes from 'prop-types' -import classNames from 'classnames' -import Button from '../button' -import Icon from '../icon' -import './style/index' -import Provider from '../context' -import confirm from '../confirm' - -class Modal extends Component { - static propTypes = { - title: PropTypes.oneOfType([PropTypes.string, PropTypes.node]), - size: PropTypes.oneOf(['large', 'default', 'small']), - show: PropTypes.bool, // TODO: 废弃,使用 visible - visible: PropTypes.bool, - onConfirm: PropTypes.func, - onCancel: PropTypes.func, - confirmText: PropTypes.string, - cancelText: PropTypes.string, - backDrop: PropTypes.bool, // TODO: 废弃,使用 maskCloseable - maskCloseable: PropTypes.bool, - confirmType: PropTypes.string, - cancelType: PropTypes.string, - closeBtn: PropTypes.bool, // TODO: 废弃,使用 maskCloseable - closabble: PropTypes.bool - } - - static defaultProps = { - title: '', - adaptive: false, - backDrop: true, - maskCloseable: true, - show: false, - visible: false, - closeBtn: true, - closeable: true, - destory: false, - size: 'default' - } - constructor (props) { - super(props) - this.state = {} - this.node = document.createElement('div') - document.body.appendChild(this.node) - } - static getDerivedStateFromProps (props, state) { - // 屏蔽滚动条 - if (props.show || props.visible) { - document.body.style.setProperty('overflow', 'hidden') - } else { - document.body.style.removeProperty('overflow') - } - return null - } - componentWillUnmount () { - this._unblock() - } - _unblock () { - this.props.destory && document.body.removeChild(this.node) - document.body.style.removeProperty('overflow') - } - handleConfirm () { - if (this.props.onConfirm) { - this.props.onConfirm() - } - this._unblock() - } - handleClose () { - if (this.props.onCancel) { - this.props.onCancel() - } - this._unblock() - } - localeDatasProps (key) { - const { localeDatas } = this.props - if (this.props[key]) { - return this.props[key] - } else { - return localeDatas.modal[key] - } - } - renderFooter () { - const { footers, footer } = this.props - const cancelText = this.localeDatasProps('cancelText') - const confirmText = this.localeDatasProps('confirmText') - if (footers || footer) { - return footers || footer - } else { - return [ - <Button type='line' key={0} onClick={this.handleClose.bind(this)}> - {cancelText} - </Button>, - <Button type='primary' key={1} onClick={this.handleConfirm.bind(this)}> - {confirmText} - </Button> - ] - } - } - render () { - const { - width, - style = {}, - title, - children, - backDrop, - maskCloseable, - closeBtn, - closeable, - footers, // TODO: 废弃,使用 footer 代替 - footer, - show, - visible, - size, - className - } = this.props - let _style = width ? Object.assign({}, { width }, { ...style }) : style - let classnames = classNames('hi-modal', show || visible ? '' : 'hi-modal--hide', className) - return createPortal( - <div className={classnames}> - <div - className='hi-modal__mask' - onClick={() => { - ((backDrop && maskCloseable !== false) || (maskCloseable && backDrop !== false)) && - this.handleClose.apply(this) - }} - /> - <div - className={classNames( - 'hi-modal__dialog', - size ? `hi-modal__dialog--${size === 'default' ? 'normal' : size}` : '' - )} - style={_style} - > - {(title || (closeBtn && closeable !== false) || (closeable && closeBtn !== false)) && ( - <div className='hi-modal__header'> - <h3 className='hi-modal__title'>{title}</h3> - {((closeBtn && closeable !== false) || (closeable && closeBtn !== false)) && ( - <div className='hi-modal__close' onClick={this.handleClose.bind(this)}> - <Icon name='close' /> - </div> - )} - </div> - )} - <div className='hi-modal__content'>{children}</div> - {(((!footers || footers.length > 0) && footer !== null) || footer) && ( - <div className='hi-modal__footer'>{this.renderFooter()}</div> - )} - </div> - </div>, - this.node - ) - } -} - -const ModalWrapper = Provider(Modal) -ModalWrapper.confirm = confirm -export default ModalWrapper diff --git a/components/modal/index.jsx b/components/modal/index.jsx new file mode 100644 index 000000000..9af9aabe0 --- /dev/null +++ b/components/modal/index.jsx @@ -0,0 +1,209 @@ +import React, { useEffect, useRef, useState, useCallback } from 'react' +import { render, unmountComponentAtNode, createPortal } from 'react-dom' +import { CSSTransition } from 'react-transition-group' +import Classnames from 'classnames' +import Provider from '../context/index' +import Button from '../button' +import Icon from '../icon' +import './style/index' + +const PREFIX = 'hi-modal' + +const getDefaultContainer = () => { + const defaultContainer = document.createElement('div') + document.body.appendChild(defaultContainer) + return defaultContainer +} + +const InternalModalComp = ({ + children, + container, + visible, + title, + onConfirm, + onCancel, + maskClosable = true, + width, + height, + size = 'default', + showHeaderDivider = true, + showFooterDivider = true, + footer, + confirmText, + cancelText, + style, + className, + destroyOnClose, + localeDatas +}) => { + // TODO: 整体可以抽成一个 hooks 供 modal 和 drawer 复用 + const defaultContainer = useRef(false) + if (defaultContainer.current === false && !container) { + defaultContainer.current = getDefaultContainer() + } + + const [vi, setVi] = useState(false) + useEffect(() => { + visible && setVi(true) + }, [visible]) + + const destroy = useCallback(() => { + const _container = container || defaultContainer.current + unmountComponentAtNode(_container) + _container.parentNode.removeChild(_container) + }, []) + + useEffect(() => { + const parent = (container || defaultContainer.current).parentNode + // 屏蔽滚动条 + if (vi) { + parent.style.setProperty('overflow', 'hidden') + } else { + parent.style.removeProperty('overflow') + if (destroyOnClose) { + destroy() + } + } + }, [vi]) + + return createPortal( + <div + className={Classnames(PREFIX, { + [className]: className + })} + > + <div + className={Classnames(`${PREFIX}__mask`, { + [`${PREFIX}__mask--visible`]: visible + })} + onClick={() => { + if (maskClosable && onCancel) { + onCancel() + } + }} + /> + <div className={`${PREFIX}__container`} style={{ display: vi === false && 'none' }}> + <CSSTransition + in={visible} + timeout={0} + classNames={'modal-transition'} + onExited={() => { + setTimeout(() => setVi(false), 300) + }} + > + <div + className={Classnames(`${PREFIX}__wrapper`, `${PREFIX}__wrapper--${size}`)} + style={{ width, height, ...style }} + > + <div + className={Classnames(`${PREFIX}__header`, { + [`${PREFIX}__header--divided`]: showHeaderDivider + })} + > + {title} + <Icon + name={'close'} + style={{ cursor: 'pointer' }} + onClick={() => { + if (onCancel) { + onCancel() + } + }} + /> + </div> + <div className={`${PREFIX}__content`}>{children}</div> + {footer !== null && ( + <div + className={Classnames(`${PREFIX}__footer`, { + [`${PREFIX}__footer--divided`]: showFooterDivider + })} + > + {footer === undefined && cancelText !== null && ( + <Button + type={'line'} + onClick={() => { + if (onCancel) { + onCancel() + } + }} + > + {cancelText || localeDatas.modal.cancelText} + </Button> + )} + {footer === undefined && confirmText !== null && ( + <Button + type={'primary'} + onClick={() => { + if (onConfirm) { + onConfirm() + } + }} + > + {confirmText || localeDatas.modal.confirmText} + </Button> + )} + {footer} + </div> + )} + </div> + </CSSTransition> + </div> + </div>, + container || defaultContainer.current + ) +} + +const confirmIconMap = { + success: { name: 'check-circle', color: '#1DA653' }, + error: { name: 'close-circle', color: '#EB5252' }, + warning: { name: 'exclamation-circle', color: '#e19d0b' }, + info: { name: 'info-circle', color: '#4284F5' } +} + +const confirm = ({ onConfirm, onCancel, title = '提示', content, type = 'default', confirmText, cancelText }) => { + const confirmContainer = document.createElement('div') + + document.body.appendChild(confirmContainer) + const modal = React.createElement(ModalComp, { + container: confirmContainer, + title, + width: 480, + height: 240, + visible: true, + confirmText, + cancelText, + onConfirm: () => { + onConfirm && onConfirm() + confirmContainer.parentNode.style.removeProperty('overflow') + unmountComponentAtNode(confirmContainer) + confirmContainer.parentNode.removeChild(confirmContainer) + }, + showFooterDivider: false, + children: ( + <div style={{ display: 'flex', flex: 1 }}> + {type !== 'default' && ( + <Icon + name={confirmIconMap[type] && confirmIconMap[type].name} + style={{ + color: confirmIconMap[type] && confirmIconMap[type].color, + fontSize: '48px', + marginRight: 12 + }} + /> + )} + {content} + </div> + ), + onCancel: () => { + onCancel && onCancel() + confirmContainer.parentNode.style.removeProperty('overflow') + unmountComponentAtNode(confirmContainer) + confirmContainer.parentNode.removeChild(confirmContainer) + } + }) + render(modal, confirmContainer) +} + +const ModalComp = Provider(InternalModalComp) +ModalComp.confirm = confirm +export default ModalComp diff --git a/components/modal/style/index.js b/components/modal/style/index.js index 14dd01250..63810a681 100644 --- a/components/modal/style/index.js +++ b/components/modal/style/index.js @@ -1,2 +1 @@ import './index.scss' -import '../../style/icon/index.scss' diff --git a/components/modal/style/index.scss b/components/modal/style/index.scss old mode 100755 new mode 100644 index a6c112489..be21726e4 --- a/components/modal/style/index.scss +++ b/components/modal/style/index.scss @@ -1,103 +1,122 @@ -@import '@hi-ui/core-css/index.scss'; - -.hi-modal { - position: fixed; - top: 0; - left: 0; - right: 0; - bottom: 0; - z-index: 1000; - - &--hide { - display: none !important; - } +@import '../../core-css/index.scss'; +$modal: 'hi-modal' !default; + +.#{$modal} { + color: use-color('black'); + font-size: $font-size-normal; &__mask { - position: absolute; + position: fixed; top: 0; left: 0; right: 0; bottom: 0; - z-index: 1000; // @Todo: should be larger - width: 100%; - height: 100%; - background-color: rgba(0, 0, 0, 0.54); - transition: all $speed-fast $easing; + height: 0; + z-index: 1000; + background: rgba(0, 0, 0, 0.45); + opacity: 0; + transition: opacity 0.3s, height 0s 0.3s; + + &--visible { + opacity: 1; + height: 100%; + transition: opacity 0.3s; + } } - &__dialog { - position: relative; - top: 10%; - z-index: 1001; - box-sizing: border-box; - width: 600px; - max-height: 80%; - margin: 0 auto; - border-radius: 2px; + &__container { + z-index: 1000; + top: 100px; + left: 50%; + transform: translateX(-50%); + position: fixed; + } + + &__wrapper { display: flex; flex-direction: column; - font-size: $font-size-normal; - background-color: $white; - box-shadow: 0 4px 16px 0 rgba(0, 0, 0, 0.1); - transition: all $speed-fast $easing; + background: use-color('white'); + border-radius: 2px; + box-shadow: 0 5px 15px 0 rgba(0, 0, 0, 0.1); + + &--default { + width: 600px; + max-height: 600px; + min-height: 240px; + } &--large { width: 800px; + max-height: 600px; + min-height: 240px; } &--small { width: 360px; + max-height: 600px; + min-height: 240px; } } &__header { - flex: none; + font-size: $font-size-large; + color: use-color('black'); + font-weight: $font-weight-bold; + height: 54px; + box-sizing: border-box; + padding: 0 24px; display: flex; align-items: center; - height: 56px; - border-bottom: 1px solid $gray-light; - } + justify-content: space-between; + flex-shrink: 0; - &__title { - flex: 1; - margin: 0; - padding: 0 $spacer-4; - font-size: $font-size-large; - font-weight: $font-weight-semibold; - text-align: left; - color: $black; - } - - &__close { - width: 56px; - height: 56px; - font-size: $font-size-large; - line-height: 56px; - text-align: center; - color: $gray-darker; - cursor: pointer; - transition: color $speed-fast $easing; - - &:hover, - &:active { - color: $black; + &--divided { + border-bottom: 1px solid use-color('gray-20'); } } &__content { - flex: auto; + flex: 1; box-sizing: border-box; - min-height: 54px; - padding: $spacer-4; - overflow-x: hidden; - overflow-y: auto; + overflow: auto; + padding: 24px; } &__footer { - flex: none; + height: 54px; + box-sizing: border-box; + padding: 0 24px; display: flex; - border-top: 1px solid $gray-light; - padding: $spacer-3 $spacer-4; + align-items: center; justify-content: flex-end; + flex-shrink: 0; + + &--divided { + border-top: 1px solid use-color('gray-20'); + } + } + + .modal-transition { + &-enter { + opacity: 0; + transform: scale(0.4); + } + + &-enter-done { + opacity: 1; + transform: scale(1); + transition: opacity 0.3s, transform 0.3s; + } + + &-exit { + opacity: 1; + transform: scale(1); + } + + &-exit-done { + opacity: 0; + transform: scale(0.4); + transition: opacity 0.3s, transform 0.3s; + } } } diff --git a/components/nav-menu/NavMenu.js b/components/nav-menu/NavMenu.js deleted file mode 100644 index 818932500..000000000 --- a/components/nav-menu/NavMenu.js +++ /dev/null @@ -1,211 +0,0 @@ -/** - * @Author lishuaishuai <lishuaishuai@xiaomi.com> - * @Date 2018-04-02 16:56:13 - * @Description NavMenu 导航菜单 - */ -import React, { Component, cloneElement } from 'react' -import PropTypes from 'prop-types' -import classNames from 'classnames' - -class NavMenu extends Component { - static propTypes = { - data: PropTypes.arrayOf(PropTypes.object).isRequired, - selectedKey: PropTypes.number, - onClick: PropTypes.func, - render: PropTypes.func - } - static defaultProps = { - prefixCls: 'hi-navmenu', - selectedKey: 0, - selectedSubKey: -1, - vertical: false, - width: '100%' - } - constructor (props) { - super(props) - - this.getH = null - - this.state = { - selectedKey: props.selectedKey, - selectedSubKey: props.selectedSubKey, - toggleShow: false, - toggleOn: false, - subMenuShow: false, - subMenuChildred: [] - } - this.setToggle = this.setToggle().bind(this) - } - - componentWillReceiveProps (props) { - if (this.props.selectedKey !== props.selectedKey) { - this.setState({ - selectedKey: props.selectedKey - }) - } - } - - componentDidMount () { - const { - selectedKey, - data - } = this.props - if (selectedKey < data.length) { - this.handleClick(data[selectedKey], selectedKey, 1) - } - this.getH && this.setToggleEvent(this.getH) - window.addEventListener('resize', this.setToggle) - } - - componentWillUnmount () { - window.removeEventListener('resize', this.setToggle) - } - - setToggleEvent (el) { - const ulH = el.scrollHeight - const {vertical} = this.props - let toggleShow = false - if (ulH > 50 && !vertical) { - toggleShow = true - } - - this.setState({ toggleShow }) - } - - setToggle () { - let start = Date.now() - const setToggleEvent = this.setToggleEvent.bind(this) - - return () => { - const now = Date.now() - if (now - start > 200 && this.getH) { - setToggleEvent(this.getH) - start = now - } - } - } - - handleToggle = () => { - this.setState({ - toggleOn: !this.state.toggleOn - }) - } - handleClick = (item, index, level, e) => { - const { onClick } = this.props - const { selectedKey, subMenuShow } = this.state - const { disabled, children = [] } = item - - if (disabled) return - - if (level !== 2) { - if (selectedKey === index) { - this.setState({ - subMenuShow: !subMenuShow - }) - } else { - this.setState({ - subMenuShow: true - }) - } - this.setState({ - subMenuChildred: children, - selectedKey: index, - selectedSubKey: -1 - }) - onClick && e && onClick(e, String(index)) - } else { - this.setState({ - selectedSubKey: index - }) - onClick && e && onClick(e, `${selectedKey}-${index}`) - } - } - renderMenuItem = () => { - const { data, prefixCls, render } = this.props - const { selectedKey } = this.state - - return data.map((item, index) => { - const classes = classNames(`${prefixCls}__item`, { - 'on': selectedKey === index, - 'hi-navmenu__item--disabled': item.disabled - }) - - return ( - <li - className={classes} - key={index} - onClick={this.handleClick.bind(this, item, index, 1)} - > - {render ? render(item) : item.title} - </li> - ) - }) - } - renderSubMenuItem = () => { - const { prefixCls, render } = this.props - const { selectedSubKey, subMenuChildred } = this.state - - return subMenuChildred.map((item, index) => { - const classes = classNames(`${prefixCls}__sub`, { - 'on': selectedSubKey === index, - 'hi-navmenu__item--disabled': item.disabled - }) - - return ( - <li - className={classes} - key={index} - onClick={this.handleClick.bind(this, item, index, 2)} - > - {render ? render(item.title) : item.title} - </li> - ) - }) - } - rednerTabContent = () => { - const { prefixCls, children } = this.props - const { selectedKey } = this.state - return React.Children.map(children, (item, index) => { - const tabCtxCls = classNames(`${prefixCls}__content-item`, item.props.className, { - 'hi-navmenu__content-item--show': selectedKey === index - }) - return cloneElement(item, { - className: tabCtxCls - }) - }) - } - render () { - const {prefixCls, children, vertical, width} = this.props - const {toggleOn, subMenuShow, toggleShow, subMenuChildred} = this.state - const togClasses = classNames(`${prefixCls}__toggle`, { - 'hi-navmenu__toggle--show': toggleShow, - 'hi-navmenu__toggle--on': toggleOn - }) - const ulClasses = classNames(`${prefixCls}__list`, { - 'hi-navmenu__list--vertical': vertical, - 'hi-navmenu__list--on': toggleOn - }) - const subMenCls = classNames(`${prefixCls}__sublist`, { - 'hi-navmenu__sublist--on': subMenuShow - }) - const _verticalStyle = vertical ? {width: typeof width === 'number' ? `${width}px` : width} : {} - return ( - <div className={`${prefixCls}`}> - <span - className={togClasses} - onClick={this.handleToggle} - /> - <ul - ref={arg => { this.getH = arg }} - className={ulClasses} - style={_verticalStyle} - > - {this.renderMenuItem()} - </ul> - {subMenuChildred.length > 0 && <div className={subMenCls}><ul>{this.renderSubMenuItem()}</ul></div>} - {children && <div className={`${prefixCls}__content`}>{this.rednerTabContent()}</div>} - </div> - ) - } -} -export default NavMenu diff --git a/components/nav-menu/__test__/index.test.js b/components/nav-menu/__test__/index.test.js deleted file mode 100644 index b2aeefec3..000000000 --- a/components/nav-menu/__test__/index.test.js +++ /dev/null @@ -1,129 +0,0 @@ -import React from 'react' -import { mount } from 'enzyme' -import NavMenu from '../' - -let wrapper -const clickCallback = jest.fn(items => items) -const options = [ - {title: 'Option 0'}, - {title: 'Option 1', disabled: true}, - {title: 'Option 2'}, - {title: 'Option 3'}, - {title: 'Option 4'} -] - -describe('NavMenu', () => { - afterEach(() => { - wrapper && wrapper.unmount() - clickCallback.mockClear() - }) - - it('基础用法', () => { - wrapper = mount( - <NavMenu - onClick={clickCallback} - data={options} - selectedKey={2} - > - <div>0</div> - <div>1</div> - <div>2</div> - <div>3</div> - <div>4</div> - </NavMenu> - ) - // 默认激活项 - expect(wrapper.find('.hi-navmenu__item').at(2).hasClass('on')).toBeTruthy() - expect(wrapper.find('.hi-navmenu__content-item--show').text()).toEqual('2') - - // 禁止项不可点 - wrapper.find('.hi-navmenu__content-item').at(1).simulate('click') - expect(clickCallback).toHaveBeenCalledTimes(0) - - // 选中第一项 - wrapper.find('.hi-navmenu__item').at(0).simulate('click') - expect(clickCallback).toHaveBeenCalledTimes(1) - expect(wrapper.find('.hi-navmenu__item').at(0).hasClass('on')).toBeTruthy() - expect(wrapper.find('.hi-navmenu__content-item--show').text()).toEqual('0') - }) - - it('自定义渲染', () => { - const datas = [ - {title: 'Option 0'}, - {title: '点我跳转', url: 'https://www.mi.com/'}, - {title: 'Option 2', icon: 'https://www.mi.com/favicon.ico'}, - {title: 'Option 3'}, - {title: 'Option 4'} - ] - wrapper = mount( - <NavMenu - onClick={clickCallback} - selectedKey={2} - data={datas} - render={data => { - return data.icon ? <span><img src={data.icon}/>{data.title}</span> : data.url ? <a href={data.url}>{data.title}</a> : data.title - }} - ></NavMenu> - ) - - expect(wrapper.find('.hi-navmenu__item').find('img').props().src).toEqual('https://www.mi.com/favicon.ico') - expect(wrapper.find('.hi-navmenu__item').find('a').props().href).toEqual('https://www.mi.com/') - - // 选中第3项 - wrapper.find('.hi-navmenu__item').at(2).simulate('click') - expect(clickCallback).toHaveBeenCalledTimes(1) - expect(wrapper.find('.hi-navmenu__item').at(2).hasClass('on')).toBeTruthy() - }) - - it('二级菜单', () => { - const datas = [ - { - title: 'Option 0', - children: [ - {title: 'Option 6'}, - {title: 'Option 6'} - ] - }, - { - title: 'Option 1', - disabled: true, - children: [ - {title: 'Option 6'}, - {title: 'Option 6'} - ] - }, - { - title: 'Option 2', - children: [ - {title: 'Option 7'}, - {title: 'Option 7'} - ] - }, - { - title: 'Option 3', - children: [ - {title: 'Option 8'}, - {title: 'Option 8'} - ] - }, - { - title: 'Option 4', - children: [ - {title: 'Option 9'}, - {title: 'Option 9'} - ] - } - ] - wrapper = mount( - <NavMenu - onClick={clickCallback} - data={datas} - ></NavMenu> - ) - - expect(wrapper.find('.hi-navmenu__sublist').find('.hi-navmenu__sub')).toHaveLength(2) - expect(wrapper.find('.hi-navmenu__sublist').find('.hi-navmenu__sub .on')).toHaveLength(0) - wrapper.find('.hi-navmenu__sublist').find('.hi-navmenu__sub').at(1).simulate('click') - expect(wrapper.find('.hi-navmenu__sublist').find('.hi-navmenu__sub').at(1).hasClass('on')).toBeTruthy() - }) -}) diff --git a/components/nav-menu/__tests__/index.test.js b/components/nav-menu/__tests__/index.test.js deleted file mode 100644 index fd89f3f4b..000000000 --- a/components/nav-menu/__tests__/index.test.js +++ /dev/null @@ -1,16 +0,0 @@ -import React, { Fragment } from 'react' -import { mount } from 'enzyme' -import sinon, { fake, spy } from 'sinon' -import simulant from 'simulant' -import Message from '../index' - -/* eslint-env jest */ - -describe('Message', () => { - describe('Methods', () => { - it('open&close', () => { - }) - it('deprecatedOpen', () => { - }) - }) -}) diff --git a/components/nav-menu/index.js b/components/nav-menu/index.js deleted file mode 100644 index b5206f7d3..000000000 --- a/components/nav-menu/index.js +++ /dev/null @@ -1,4 +0,0 @@ -import NavMenu from './NavMenu' -import './style/index' - -export default NavMenu diff --git a/components/nav-menu/style/index.js b/components/nav-menu/style/index.js deleted file mode 100644 index 14dd01250..000000000 --- a/components/nav-menu/style/index.js +++ /dev/null @@ -1,2 +0,0 @@ -import './index.scss' -import '../../style/icon/index.scss' diff --git a/components/nav-menu/style/index.scss b/components/nav-menu/style/index.scss deleted file mode 100644 index 82ec563c7..000000000 --- a/components/nav-menu/style/index.scss +++ /dev/null @@ -1,178 +0,0 @@ -@import '@hi-ui/core-css/index.scss'; - -.hi-navmenu { - position: relative; - - &__list { - border-bottom: 1px solid #e6e7e8; - height: 48px; - overflow: hidden; - padding: 0 !important; - margin: 0 !important; - - &--on { - height: auto; - } - - li { - @extend .common-li; - } - - &--vertical { - height: auto; - border-bottom: none; - - .hi-navmenu__item { - margin-right: 0 !important; - display: block !important; - padding-left: 16px !important; - padding-right: 16px !important; - - &.on { - color: #4284f5; - background: #ecf2fe; - - &::after { - display: none; - } - } - } - } - } - - &__toggle { - display: none; - box-sizing: border-box; - background-color: #fff; - position: absolute; - right: 0; - top: 12px; - width: 24px; - height: 24px; - border-radius: 2px; - border: 1px solid #d8d8d8; - cursor: pointer; - - &--show { - display: inline-block; - } - - &::before { - content: ' '; - position: absolute; - left: 50%; - top: 50%; - transform: translate3d(-50%, -50%, 0); - border: 4px solid transparent; - border-top: 4.4px solid #999; - border-bottom: none; - transition: transform 0.3s; - transform-origin: 25% 12.5%; - } - - &--on { - &::before { - transform: rotate(-180deg); - } - } - } - - &__sublist { - display: none; - - &--on { - display: block; - } - - li { - @extend .common-li; - - &--on { - &::after { - display: none; - } - } - - &:not(:last-child) { - &::before { - position: absolute; - right: -20px; - top: 50%; - transform: translate3d(0, -50%, 0); - content: ' '; - height: 10px; - width: 1px; - background-color: #d8d8d8; - } - } - } - } - - &__content { - padding: 10px; - } - - &__content-item { - display: none; - - &--show { - display: block; - } - } - - .common-li { - font-size: 14px; - color: #333; - display: inline-block; - line-height: 20px; - padding: 14px 4px; - margin-right: 40px; - position: relative; - cursor: pointer; - margin-top: 0; - - img { - vertical-align: middle; - margin-right: 5px; - } - - a { - color: #333; - } - - &:hover { - color: #4284f5; - - a { - color: #4284f5; - } - } - - &.on { - color: #4284f5; - - &::after { - position: absolute; - left: 50%; - bottom: 0; - transform: translate3d(-50%, 0, 0); - content: ' '; - height: 2px; - width: 32px; - background-color: #4284f5; - } - } - } - - &__item, - &__sub { - &--disabled { - cursor: not-allowed; - opacity: 0.5; - - &:hover { - color: #333; - } - } - } -} diff --git a/components/notice/style/index.scss b/components/notice/style/index.scss index 7b479e781..964a30703 100755 --- a/components/notice/style/index.scss +++ b/components/notice/style/index.scss @@ -1,18 +1,18 @@ -@import '@hi-ui/core-css/index.scss'; @import '../../style/icon/index.scss'; +@import '../../core-css/index.scss'; .hi-notice__container { position: absolute; top: 20px; right: 20px; z-index: 1020; - background-color: #fff; + background-color: use-color('white'); .hi-notice { padding: 10px 12px; margin-bottom: 10px; - border: 1px solid #e7e7e7; - background: #fff; + border: 1px solid use-color('gray-30'); + background: use-color('white'); transition: 0.3s ease; display: flex; align-items: flex-start; @@ -35,7 +35,7 @@ .hi-notice__content { font-size: 12px; - color: #666; + color: use-color('gray-80'); } .hi-notice-enter { diff --git a/components/notification/index.d.ts b/components/notification/index.d.ts new file mode 100644 index 000000000..840330d6e --- /dev/null +++ b/components/notification/index.d.ts @@ -0,0 +1,18 @@ +interface Options { + key: string + type?: 'info' | 'success' | 'error' | 'warning' + title?: string + content: string | JSX.Element + closeable?: boolean + duration?: number + confirmText?: string + onClose?: (e: MouseEvent) => void + onConfirm?: () => void +} +const OpenFun: (options: Options) => void +const CloseFun: (key: string) => void +declare class Notification extends React.Component<Props, any> { + static open = OpenFun + static close = CloseFun +} +export default Notification diff --git a/components/notification/index.js b/components/notification/index.js index fb15814ee..ed7785f25 100755 --- a/components/notification/index.js +++ b/components/notification/index.js @@ -1,20 +1,20 @@ import notice from '../notice' import './style/index' import React from 'react' -import Button from '../button' -import classNames from 'classnames' +import { Button } from '../button/Button' +import Icon from '../icon' import _handleNotificate from './HandleNotification' const iconMap = { - success: 'chenggong', - error: 'shibai', - warning: 'jinggao', - info: 'tishi' + success: 'check-circle', + danger: 'close-circle', + warning: 'exclamation-circle', + primary: 'info-circle' } export const handleNotificate = _handleNotificate const notification = { - close: key => { + close: (key) => { notice.close('notification', key) }, handleNotificate, @@ -25,26 +25,26 @@ const notification = { key = Math.random(), duration, closeable = true, - type = 'info', + type = 'primary', confirmText, onConfirm, onClose }) => { + let _type = type === 'info' ? 'primary' : type + _type = type === 'error' ? 'danger' : _type const NoticeContent = ( <React.Fragment> - <div className={`hi-${prefix}__title--wrapper`}> - <span className={`hi-${prefix}__icon`}> - <i className={classNames('hi-icon', `icon-${iconMap[type]}`)} /> - </span> + <div className={`hi-${prefix}__header`}> + <Icon name={iconMap[_type]} className={`hi-${prefix}__icon`} filled /> {title && <div className={`hi-${prefix}__title`}>{title}</div>} </div> {content && <div className={`hi-${prefix}__content`}>{content}</div>} {onConfirm && ( - <div className={`hi-${prefix}__button--wrapper`}> + <div className={`hi-${prefix}__footer`}> <Button - size='small' - className={`hi-${prefix}__button`} + size="small" + type="primary" onClick={() => { onConfirm() }} @@ -61,7 +61,7 @@ const notification = { key, closeable, duration, - type, + type: _type, onClose }) } diff --git a/components/notification/style/index.scss b/components/notification/style/index.scss index b1cdd899a..369763b1a 100755 --- a/components/notification/style/index.scss +++ b/components/notification/style/index.scss @@ -1,13 +1,10 @@ -@import '@hi-ui/core-css/index.scss'; -@import '../../style/icon/index.scss'; - -$theme-colors-notice: ( - 'orange': #ffefea, - 'cyan': #ecf8f4 , - 'magenta': #ffeef1, - 'lavender': #f7edfb, - 'blue': #ebf6fe, - 'purple': #8a8acb +@import '../../core-css/index.scss'; + +$color-map: ( + 'primary': use-color('primary'), + 'warning': get-color($palette-secondary, 'warning'), + 'success': get-color($palette-secondary, 'success'), + 'danger': get-color($palette-secondary, 'danger') ) !default; .hi-notification__container { @@ -27,104 +24,62 @@ $theme-colors-notice: ( width: 340px; box-sizing: border-box; + @each $key, $value in $color-map { + &--#{$key} { + background-color: use-color(#{$key}-20); + border: 1px solid use-color(#{$key}-40); + + .hi-notification__title { + color: $value; + } + + .hi-notification__icon { + fill: $value; + } + } + } + &__closer { position: absolute; - top: 10px; + height: 16px; + width: 16px; + top: 12px; right: 12px; } } - .hi-notification__title--wrapper { + .hi-notification__header { + height: $line-height-size-normal; + line-height: $line-height-size-normal; display: flex; - line-height: 22px; + align-items: center; .hi-notification__title { - font-size: 14px; + font-size: $font-size-normal; } } .hi-notification__icon { - font-size: 16px; - margin-right: 12px; + height: 16px; + width: 16px; + margin-right: 8px; } .hi-notification__content { - padding-left: 28px; - font-size: 12px; + padding: 0 24px; + margin-top: 4px; + font-size: $font-size-small; line-height: 20px; - color: #666; + color: use-color('gray-80'); } .hi-notification__content--wrapper { width: 100%; - padding-right: 14px; } - .hi-notification__button--wrapper { + .hi-notification__footer { text-align: right; margin-top: 9px; - - .hi-notification__button { - margin-right: -14px; - color: #fff; - } - } - - .hi-notification--info { - background: #edf2fc; - border: 1px solid #d8e5ff; - - .hi-notification__title, - .hi-notification__icon { - color: #4284f5; - } - - .hi-notification__button { - background-color: #4284f5; - border: 1px solid #4284f5; - } - } - - .hi-notification--error { - background: #feeff0; - border: 1px solid #ffe0e3; - - .hi-notification__title, - .hi-notification__icon { - color: #eb5252; - } - - .hi-notification__button { - background-color: #eb5252; - } - } - - .hi-notification--success { - background: #e8f6ee; - border: 1px solid #cae9d7; - - .hi-notification__title, - .hi-notification__icon { - color: #1da653; - } - - .hi-notification__button { - background-color: #1da653; - } - } - - .hi-notification--warning { - background: #fbf5e6; - border: 1px solid #fcf0d4; - - .hi-notification__title, - .hi-notification__icon { - color: #e19d0c; - } - - .hi-notification__button { - background-color: #e19d0c; - } } .hi-notification-enter { @@ -143,35 +98,3 @@ $theme-colors-notice: ( transform: translateX(100%); } } - -@each $key, $value in $theme-colors { - .hi-notification__container { - .theme__#{$key}.hi-notification.hi-notification--info { - border: - 1px - solid - map-get(get-palette(get-color($palette-primary, $key)), '20'); - - .hi-icon { - color: $value; - } - - .hi-notification__title { - color: $value; - } - - .hi-notification__button { - background-color: $value; - border: 1px solid $value; - } - } - } -} - -@each $key, $value in $theme-colors-notice { - .hi-notification__container { - .theme__#{$key}.hi-notification.hi-notification--info { - background-color: $value; - } - } -} diff --git a/components/pagination/Pager.js b/components/pagination/Pager.js index 38f6932a0..0147e446f 100755 --- a/components/pagination/Pager.js +++ b/components/pagination/Pager.js @@ -4,9 +4,7 @@ import classNames from 'classnames' import Provider from '../context' function defaultItemRender (page, element) { - return ( - <span>{element}</span> - ) + return <span>{element}</span> } const Pager = props => { @@ -23,10 +21,7 @@ const Pager = props => { return ( <div className={cls} onClick={handClick}> - {props.itemRender( - props.page, - props.children || props.page - )} + {props.itemRender(props.page, props.children || props.page)} </div> ) } diff --git a/components/pagination/Pagination.js b/components/pagination/Pagination.js index d5e530d21..60d19e792 100644 --- a/components/pagination/Pagination.js +++ b/components/pagination/Pagination.js @@ -4,6 +4,7 @@ import Pager from './Pager' import Select from '../select' import Input from '../input' import Provider from '../context' +import Icon from '../icon' function isInteger (value) { return ( @@ -21,13 +22,11 @@ class Pagination extends Component { constructor (props) { super(props) - const { - defaultCurrent, - current: propsCurrent, - pageSize, - total - } = props - const current = this.getCurrent(propsCurrent !== undefined ? propsCurrent : defaultCurrent, this.calculatePage(total, pageSize)) + const { defaultCurrent, current: propsCurrent, pageSize, total } = props + const current = this.getCurrent( + propsCurrent !== undefined ? propsCurrent : defaultCurrent, + this.calculatePage(total, pageSize) + ) this.jumper = React.createRef() this.tempRef = React.createRef() this.state = { @@ -48,14 +47,17 @@ class Pagination extends Component { } let current if (props.current !== undefined && this.state.current !== props.current) { - current = this.getCurrent(props.current, this.calculatePage(props.total, props.pageSize)) + current = this.getCurrent( + props.current, + this.calculatePage(props.total, props.pageSize) + ) } if (current) { states.current = current states.jumpTo = current } - this.setState({...states}) + this.setState({ ...states }) } getCurrent (current, maxPage) { @@ -82,10 +84,11 @@ class Pagination extends Component { if (isInteger(page) && page !== prevPage && page >= 1 && page <= maxPage) { const pageSize = this.state.pageSize this.props.onChange(page, prevPage, pageSize) - this.props.current !== undefined || this.setState({ - current: page, - jumpTo: page - }) + this.props.current !== undefined || + this.setState({ + current: page, + jumpTo: page + }) } } @@ -104,26 +107,32 @@ class Pagination extends Component { } onPageSizeChange (pageSize) { - const { - total, - onPageSizeChange - } = this.props - const current = this.getCurrent(this.state.current, this.calculatePage(total, pageSize)) // pageSize改动需要重新计算当前页,避免超过最大页情况 - - this.setState({ - pageSize - }, () => { - const triggerOnchange = onPageSizeChange && onPageSizeChange(pageSize, current) - if (triggerOnchange !== false) { + const { total, onPageSizeChange } = this.props + const current = this.getCurrent( + this.state.current, + this.calculatePage(total, pageSize) + ) // pageSize改动需要重新计算当前页,避免超过最大页情况 + + this.setState( + { + pageSize + }, + () => { + onPageSizeChange && onPageSizeChange(pageSize, current) this.handleChange(current) } - }) + ) } renderPageSizes () { - const { pageSize, pageSizeOptions, prefixCls, localeDatas: { - pagination: { itemPerPage: i18nItemPerPage, item: i18nItem } - } } = this.props + const { + pageSize, + pageSizeOptions, + prefixCls, + localeDatas: { + pagination: { itemPerPage: i18nItemPerPage, item: i18nItem } + } + } = this.props if (pageSizeOptions.length === 0) { return null @@ -144,7 +153,8 @@ class Pagination extends Component { value={pageSize} onChange={ids => { this.onPageSizeChange(ids[0]) - }} /> + }} + /> </div> </div> ) @@ -171,34 +181,40 @@ class Pagination extends Component { return ( <div className={`${prefixCls}__jumper-input`}> - <Input innerRef={this.jumper} onKeyPress={this.gotoPage.bind(this)} onBlur={this.gotoPage.bind(this)} value={this.state.jumpTo} onChange={(e, tVal) => { - const val = e.target.value - if (!val) { - this.setState({ - jumpTo: val - }) - return - } - if (/^\d+$/.test(val)) { - const maxPage = this.calculatePage(total) - const jumpTo = val < 1 ? 1 : (val > maxPage ? maxPage : val) - - this.setState({ - jumpTo - }) - } else { - this.setState({ - jumpTo: this.state.jumpTo - }) - } - }} /> + <Input + innerRef={this.jumper} + onKeyPress={this.gotoPage.bind(this)} + onBlur={this.gotoPage.bind(this)} + value={this.state.jumpTo} + onChange={(e, tVal) => { + const val = e.target.value + if (!val) { + this.setState({ + jumpTo: val + }) + return + } + if (/^\d+$/.test(val)) { + const maxPage = this.calculatePage(total) + const jumpTo = val < 1 ? 1 : val > maxPage ? maxPage : val + + this.setState({ + jumpTo + }) + } else { + this.setState({ + jumpTo: this.state.jumpTo + }) + } + }} + /> </div> ) } gotoPage = e => { const pageNum = parseInt(e.target.value) - const setPageNum = (page) => { + const setPageNum = page => { this.handleChange(page) this.props.onJump && this.props.onJump(Number(page)) } @@ -215,9 +231,7 @@ class Pagination extends Component { renderPagers () { const { max, total, prefixCls } = this.props - const { - current - } = this.state + const { current } = this.state const maxPage = this.calculatePage(total) const prevPager = this.renderPrevPager() // 上一页 const nextPager = this.renderNextPager() // 下一页 @@ -226,11 +240,11 @@ class Pagination extends Component { if (max * 2 + 1 + 2 >= maxPage) { leftBuffer = 1 rightBuffer = maxPage - } else if ((maxPage - current) <= max) { + } else if (maxPage - current <= max) { rightBuffer = maxPage leftBuffer = maxPage - 2 * max - 1 leftBuffer = leftBuffer <= 1 ? 1 : leftBuffer - } else if ((current - max) <= 1) { + } else if (current - max <= 1) { leftBuffer = 1 rightBuffer = 2 * max + leftBuffer + 1 rightBuffer = rightBuffer >= maxPage ? maxPage : rightBuffer @@ -240,19 +254,29 @@ class Pagination extends Component { } if (leftBuffer !== 1) { - pagers.push(this.renderPager(1, {active: current === 1})) + pagers.push(this.renderPager(1, { active: current === 1 })) } if (leftBuffer > 2) { - pagers.push(this.renderPager('...', {className: `${prefixCls}__item-break`, itemRender: breakItemRender})) + pagers.push( + this.renderPager('...', { + className: `${prefixCls}__item-break`, + itemRender: breakItemRender + }) + ) } for (let index = leftBuffer; index <= rightBuffer; index++) { - pagers.push(this.renderPager(index, {active: current === index})) + pagers.push(this.renderPager(index, { active: current === index })) } if (rightBuffer < maxPage - 1) { - pagers.push(this.renderPager('...', {className: `${prefixCls}__item-break`, itemRender: breakItemRender})) + pagers.push( + this.renderPager('...', { + className: `${prefixCls}__item-break`, + itemRender: breakItemRender + }) + ) } if (rightBuffer !== maxPage) { - pagers.push(this.renderPager(maxPage, {active: current === maxPage})) + pagers.push(this.renderPager(maxPage, { active: current === maxPage })) } pagers.push(nextPager) @@ -262,13 +286,21 @@ class Pagination extends Component { renderPrevPager () { const { prefixCls } = this.props const prevPage = this.prev() - return this.renderPager(prevPage, {className: `${prefixCls}__item-prev`, disabled: prevPage < 1}, <i className='hi-icon icon-left' />) + return this.renderPager( + prevPage, + { className: `${prefixCls}__item-prev`, disabled: prevPage < 1 }, + <Icon name='left' /> + ) } renderNextPager () { const { prefixCls } = this.props const nextPage = this.next() - return this.renderPager(nextPage, {className: `${prefixCls}__item-next`, disabled: nextPage < 1}, <i className='hi-icon icon-right' />) + return this.renderPager( + nextPage, + { className: `${prefixCls}__item-next`, disabled: nextPage < 1 }, + <Icon name='right' /> + ) } pagerIndex = 0 @@ -291,17 +323,26 @@ class Pagination extends Component { ) } - renderNormal () { // 标准分页 - const { prefixCls, showTotal, total, localeDatas: { pagination: { total: i18nTotal } } } = this.props + renderNormal () { + // 标准分页 + const { + prefixCls, + showTotal, + total, + localeDatas: { + pagination: { total: i18nTotal } + } + } = this.props return ( <React.Fragment> - { - showTotal && + {showTotal && ( <div className={`${prefixCls}__total ${prefixCls}__text`}> - {i18nTotal[0]}<span className={`${prefixCls}__span`}>{total}</span>{i18nTotal[1]} + {i18nTotal[0]} + <span className={`${prefixCls}__span`}>{total}</span> + {i18nTotal[1]} </div> - } + )} {this.renderPageSizes()} {this.renderPagers()} {this.renderJumper()} @@ -309,7 +350,8 @@ class Pagination extends Component { ) } - renderSimple () { // 简单分页 + renderSimple () { + // 简单分页 const { total, prefixCls, @@ -324,18 +366,19 @@ class Pagination extends Component { {this.renderJumperInput()} <span>{i18nSimple[1]}</span> <span className={`${prefixCls}__span`}>/</span> - {i18nSimple[2]}<span className={`${prefixCls}__span`}>{maxPage}</span>{i18nSimple[3]}, - <span className={`${prefixCls}__span`}>{total} {i18nSimple[4]}</span> + {i18nSimple[2]} + <span className={`${prefixCls}__span`}>{maxPage}</span> + {i18nSimple[3]}, + <span className={`${prefixCls}__span`}> + {total} {i18nSimple[4]} + </span> </div> ) } - renderPn () { // 上一页下一页 - const { - prefixCls, - total, - showJumper - } = this.props + renderPn () { + // 上一页下一页 + const { prefixCls, total, showJumper } = this.props const maxPage = this.calculatePage(total) const prevPager = this.renderPrevPager() const nextPager = this.renderNextPager() @@ -343,30 +386,21 @@ class Pagination extends Component { return ( <React.Fragment> {prevPager} - { - showJumper && + {showJumper && ( <div className={`${prefixCls}__text`}> - {this.renderJumperInput()} - / - <span style={{margin: '0 20px 0px 8px'}}>{maxPage}</span> + {this.renderJumperInput()}/ + <span style={{ margin: '0 20px 0px 8px' }}>{maxPage}</span> </div> - } + )} {nextPager} </React.Fragment> ) } render () { - const { - autoHide, - total, - type, - prefixCls, - className, - theme - } = this.props + const { autoHide, total, type, prefixCls, className, theme } = this.props const maxPage = this.calculatePage(total) - if (maxPage === 0 || (autoHide && (maxPage === 1))) { + if (maxPage === 0 || (autoHide && maxPage === 1)) { return null } let children @@ -385,7 +419,10 @@ class Pagination extends Component { } return ( - <div ref={this.tempRef} className={`${prefixCls} ${prefixCls}--${type} ${className} theme__${theme}`}> + <div + ref={this.tempRef} + className={`${prefixCls} ${prefixCls}--${type} ${className} theme__${theme}`} + > {children} </div> ) @@ -422,4 +459,4 @@ Pagination.defaultProps = { } export default Provider(Pagination) -export {Pagination} +export { Pagination } diff --git a/components/pagination/index.d.ts b/components/pagination/index.d.ts new file mode 100644 index 000000000..a6bac4d13 --- /dev/null +++ b/components/pagination/index.d.ts @@ -0,0 +1,16 @@ +export interface PaginationProps { + type?: 'default' | 'simple' | 'shrink' + defaultCurrent?: number + current?: number + max?: number + pageSize?: number + total: number + pageSizeOptions?: number[] + autoHide?: boolean + showJumper?: boolean + onJump?: (current: number) => void + onChange?: (currentPage: number, prevPage: number, pageSize: number) => void + onPageSizeChange?: (changeSize: number, currentPage: number) => void +} +declare const Pagination: React.ComponentType<PaginationProps> +export default Pagination diff --git a/components/pagination/style/index.scss b/components/pagination/style/index.scss index 705dfa8bb..22f651314 100644 --- a/components/pagination/style/index.scss +++ b/components/pagination/style/index.scss @@ -1,7 +1,7 @@ -@import '@hi-ui/core-css/index.scss'; +@import '../../core-css/index.scss'; // Define component colors -@mixin hi-pagination-style($color: get-color($palette-primary, 'hiui-blue')) { +@mixin hi-pagination-style($color: use-color('primary')) { .hi-pagination { &__item { &:not(.hi-pagination__item--disabled) { @@ -35,11 +35,9 @@ align-items: center; user-select: none; - @include component-reset(); - &__text { line-height: 32px; - color: $gray-darker; + color: use-color('gray-80'); } &__total { @@ -59,20 +57,20 @@ margin: 0 $spacer-1; .hi-select__input { - border: 1px solid $gray-light; + border: 1px solid use-color('gray-20'); } } &__jumper-input { display: inline-block; margin: 0 $spacer-5 0 $spacer-2; - color: $gray-darker; + color: use-color('gray-80'); .hi-input { width: 64px; &__inner { - border: 1px solid $gray-light; + border: 1px solid use-color('gray-20'); } &__text { @@ -103,13 +101,13 @@ min-width: 32px; padding: 0 4px; height: 32px; - border: 1px solid $gray-light; + border: 1px solid use-color('gray-20'); border-radius: 2px; font-size: $font-size-normal; line-height: 30px; text-decoration: none; text-align: center; - color: $gray-darker; + color: use-color('gray-80'); cursor: pointer; &:hover { @@ -126,12 +124,12 @@ &--disabled { > span { - border: 1px solid $gray-light; - color: $gray-light; + border: 1px solid use-color('gray-20'); + color: use-color('gray-20'); cursor: default; &:hover { - border: 1px solid $gray-light; + border: 1px solid use-color('gray-20'); } } } @@ -145,9 +143,3 @@ // Component colors @include hi-pagination-style(); - -@each $key, $value in $theme-colors { - .theme__#{$key} { - @include hi-pagination-style($value); - } -} diff --git a/components/panel/index.js b/components/panel/index.js deleted file mode 100755 index f3f1a8df7..000000000 --- a/components/panel/index.js +++ /dev/null @@ -1,40 +0,0 @@ -import React, { Component } from 'react' -import PropTypes from 'prop-types' -import classNames from 'classnames' -import './style/index' - -class Panel extends Component { - static propTypes = { - title: PropTypes.oneOfType([PropTypes.string, PropTypes.node]), - footer: PropTypes.oneOfType([PropTypes.string, PropTypes.node]), - icon: PropTypes.string, - type: PropTypes.string - } - static defaultProps = { - prefixCls: 'hi-panel', - type: 'info' - } - render () { - let classnames = classNames(this.props.prefixCls, this.props.type) - const { title, footer, children, icon } = this.props - - return ( - <div className={classnames}> - <div className='panel-title'> - { - icon && <i className={classNames('hi-icon', icon)} /> - } - {title} - </div> - <div className='panel-content'>{children}</div> - { - typeof footer !== 'undefined' && ( - <div className='panel-footer'>{footer}</div> - ) - } - </div> - ) - } -} - -export default Panel diff --git a/components/panel/style/index.js b/components/panel/style/index.js deleted file mode 100644 index 14dd01250..000000000 --- a/components/panel/style/index.js +++ /dev/null @@ -1,2 +0,0 @@ -import './index.scss' -import '../../style/icon/index.scss' diff --git a/components/panel/style/index.scss b/components/panel/style/index.scss deleted file mode 100755 index ea71b4d3a..000000000 --- a/components/panel/style/index.scss +++ /dev/null @@ -1,31 +0,0 @@ -.hi-panel { - padding: 10px; - font-size: 0; - box-shadow: 0 5px 15px 0 rgba(0, 0, 0, 0.1); - - .panel-title { - display: block; - height: 40px; - line-height: 40px; - padding: 0 16px; - font-size: 16px; - - .hi-icon { - margin-right: 5px; - } - } - - .panel-content { - display: block; - font-size: 14px; - padding: 16px; - border-top: 1px solid #e6e7e8; - } - - .panel-footer { - display: block; - font-size: 14px; - padding: 10px 16px; - border-top: 1px solid #e6e7e8; - } -} diff --git a/components/popover/__test__/index.test.js b/components/popover/__test__/index.test.js deleted file mode 100644 index f07883251..000000000 --- a/components/popover/__test__/index.test.js +++ /dev/null @@ -1,53 +0,0 @@ -import React from 'react' -import { mount } from 'enzyme' -import Popover from '../' -import Button from '../../button' - -const topClickTarget = mount( - <div> - <Popover title='popover title' content='popover content' style={{margin: '10px 10px'}} placement="top" trigger="click"> - <Button type="line">Top & click触发</Button> - </Popover> - </div> -) -const focusRightTarget = mount( - <div> - <Popover title='popover title' content='popover content' style={{margin: '10px 10px'}} placement="right" trigger="focus"> - <Button type="success">Right & focus触发</Button> - </Popover> - </div> -) -const leftTarget = mount( - <Popover title='popover title' content='popover content' placement="left" trigger="click"> - <Button type="line">left</Button> - </Popover> -) -const bottomTarget = mount( - <Popover title='popover title' content='popover content' placement="bottom" trigger="click"> - <Button type="line">bottom</Button> - </Popover> -) - -describe('Tooltip', () => { - it('触发方式测试通过', () => { - expect(document.querySelectorAll('.hi-popover__popper')).toHaveLength(0) - - topClickTarget.find('.hi-btn').getDOMNode().click() - expect(document.querySelectorAll('.hi-popover__popper')).toHaveLength(1) - - focusRightTarget.find('.hi-btn').getDOMNode().focus() - expect(document.querySelectorAll('.hi-popover__popper')).toHaveLength(2) - // focusRightTarget.find('.hi-btn').simulate('mouseenter') - }) - - it('显示的位置测试通过', () => { - topClickTarget.find('.hi-btn').getDOMNode().click() - leftTarget.find('.hi-btn').getDOMNode().click() - bottomTarget.find('.hi-btn').getDOMNode().click() - - expect(document.querySelectorAll('.hi-popper__content--top')).toHaveLength(1) - expect(document.querySelectorAll('.hi-popper__content--right')).toHaveLength(1) - expect(document.querySelectorAll('.hi-popper__content--left')).toHaveLength(1) - expect(document.querySelectorAll('.hi-popper__content--bottom')).toHaveLength(1) - }) -}) diff --git a/components/popover/index.d.ts b/components/popover/index.d.ts new file mode 100644 index 000000000..124a86acd --- /dev/null +++ b/components/popover/index.d.ts @@ -0,0 +1,9 @@ +interface Props { + title?: string | JSX.Element + content: string | JSX.Element + placement?: 'top' | 'right' | 'bottom' | 'left' + trigger?: 'click' | 'focus' | 'hover' + visible?: boolean +} +declare const Popover: React.ComponentType<Props> +export default Popover diff --git a/components/popover/index.js b/components/popover/index.js index a41c61a02..a22227dab 100644 --- a/components/popover/index.js +++ b/components/popover/index.js @@ -5,7 +5,6 @@ import classNames from 'classnames' import Popper from '../popper' import './style/index' export default class Popover extends Component { - unbindHover = true static defaultProps = { trigger: 'click', placement: 'top', @@ -18,7 +17,7 @@ export default class Popover extends Component { content: PropTypes.oneOfType([PropTypes.node, PropTypes.string]), width: PropTypes.string } - constructor (props) { + constructor(props) { super(props) this.state = { showPopper: false @@ -29,35 +28,39 @@ export default class Popover extends Component { this.delayHidePopperTimer = null } - showPopper () { + showPopper() { this.setState({ showPopper: true }) } - hidePopper () { + hidePopper() { this.setState({ showPopper: false }) } - delayHidePopper (e) { + delayHidePopper(e) { this.delayHidePopperTimer = setTimeout(() => { if (this.eventTarget !== e.target && this.isInPopover()) return this.hidePopper() }, 200) } - delayShowPopper (e) { + delayShowPopper(e) { this.delayShowPopperTimer = setTimeout(() => { this.showPopper() }, 200) } - isInPopover () { + isInPopover() { const popper = this.popperRef.current const referenceRef = ReactDOM.findDOMNode(this.referenceRef) - const bool = !this.element || this.element.contains(this.eventTarget) || - !referenceRef || referenceRef.contains(this.eventTarget) || - !popper || popper.contains(this.eventTarget) + const bool = + !this.element || + this.element.contains(this.eventTarget) || + !referenceRef || + referenceRef.contains(this.eventTarget) || + !popper || + popper.contains(this.eventTarget) this.eventTarget = null return bool } @@ -70,14 +73,14 @@ export default class Popover extends Component { } } - handlePopperMouseOut = () => { + handlePopperMouseLeave = () => { const { trigger } = this.props if (trigger === 'hover') { this.hidePopper() } } - componentDidMount () { + componentDidMount() { const { trigger } = this.props this.element = ReactDOM.findDOMNode(this) @@ -101,11 +104,11 @@ export default class Popover extends Component { this.hidePopper() }) } else if (trigger === 'hover') { - referenceRef.addEventListener('mouseenter', e => { + referenceRef.addEventListener('mouseenter', (e) => { this.eventTarget = e.target this.delayShowPopper(e) }) - referenceRef.addEventListener('mouseleave', e => { + referenceRef.addEventListener('mouseleave', (e) => { this.delayHidePopper(e) clearTimeout(this.delayShowPopperTimer) }) @@ -115,14 +118,23 @@ export default class Popover extends Component { } } - render () { - const { style, className, title, content, placement, width, visible } = this.props - const { - showPopper - } = this.state + render() { + const { style, className, title, content, placement, width, visible, overlayClassName } = this.props + const { showPopper } = this.state return ( - <div className={classNames(className, 'hi-popover')} style={style} ref={node => { this.popoverContainer = node }}> - { React.cloneElement(React.Children.only(this.props.children), { ref: (el) => { this.referenceRef = el }, tabIndex: '0' }) } + <div + className={classNames(className, 'hi-popover')} + style={style} + ref={(node) => { + this.popoverContainer = node + }} + > + {React.cloneElement(React.Children.only(this.props.children), { + ref: (el) => { + this.referenceRef = el + }, + tabIndex: '0' + })} <Popper className='hi-popover__popper' @@ -131,14 +143,13 @@ export default class Popover extends Component { placement={placement} zIndex={1040} width={width} + overlayClassName={overlayClassName} onMouseOver={this.handlePopperMouseOver} - onMouseOut={this.handlePopperMouseOut} + onMouseLeave={this.handlePopperMouseLeave} > <div ref={this.popperRef} className={classNames('hi-popover-base', `hi-popover-${placement}`)}> - { title && <div className='hi-popover__title'>{title}</div> } - <div className='hi-popover__content'> - { content } - </div> + {title && <div className='hi-popover__title'>{title}</div>} + <div className='hi-popover__content'>{content}</div> </div> </Popper> </div> diff --git a/components/popover/style/index.scss b/components/popover/style/index.scss index e90053669..05f15b8df 100644 --- a/components/popover/style/index.scss +++ b/components/popover/style/index.scss @@ -1,3 +1,4 @@ +@import '../../core-css/index.scss'; $popper-gap: 10px !default; $popper-arrow-gap: -5px !default; @@ -7,7 +8,7 @@ $popper-arrow-gap: -5px !default; } .hi-popover-base { - background: #fff; + background: use-color('white'); padding: 0 5px; white-space: nowrap; transition: all 0.5s; @@ -19,8 +20,8 @@ $popper-arrow-gap: -5px !default; position: absolute; width: 10px; height: 10px; - border: 1px solid #e8e8e8; - background: #fff; + border: 1px solid use-color('gray-20'); + background: use-color('white'); box-sizing: border-box; } @@ -31,7 +32,7 @@ $popper-arrow-gap: -5px !default; .hi-popover__title { padding: 5px 15px; color: #000; - border-bottom: 1px solid #e8e8e8; + border-bottom: 1px solid use-color('gray-20'); } .hi-popover__content { diff --git a/components/popper/Overlay.js b/components/popper/Overlay.js new file mode 100644 index 000000000..f05eb680b --- /dev/null +++ b/components/popper/Overlay.js @@ -0,0 +1,219 @@ +import React, { useState, useRef, useEffect, useCallback } from 'react' +import PropTypes from 'prop-types' +import classNames from 'classnames' +import _ from 'lodash' +import PopperJS from './utils/popper' +import { getOffset } from './utils/positionUtils' +import useClickOutside from './utils/useClickOutside' +import './style/index' + +const { + isFixed, + setupEventListeners, + removeEventListeners, + setStyle, + getStyleComputedProperty, + isBody +} = new PopperJS() + +const Overlay = (props) => { + const { + show, + attachEle, + children, + className, + height, + zIndex, + onMouseOver, + onMouseOut, + onMouseEnter, + onMouseLeave, + onClickOutside, + overlayClassName + } = props + const [isAddevent, setIsAddevent] = useState(false) + const [state, setState] = useState({ + offset: undefined, + popperHeight: undefined, + popperWidth: undefined, + cacheContainerPosition: 'static', + popperRef: undefined + }) + + let popperHeight + let popperWidth + const staticPopperRef = useRef() + const offsetData = useRef() + let popperContainerRef + + if (onClickOutside) { + popperContainerRef = useClickOutside( + (e) => { + onClickOutside && onClickOutside(e) + }, + undefined, + 'click', + attachEle + ) + } + + const scrollCallBack = useCallback(() => { + const offset = getOffset(props, state) + offsetData.current = offset + if (staticPopperRef) { + setState( + Object.assign({}, state, { + popperRef: staticPopperRef.current + }) + ) + } + }, [props, state]) + + useEffect(() => { + const { attachEle, container, show } = props + const { cacheContainerPosition } = state + const offset = getOffset(props, state) + offsetData.current = offset + if (staticPopperRef) { + setState( + Object.assign({}, state, { + popperRef: staticPopperRef.current + }) + ) + } + if (!show) { + // 删除滚动 + attachEle && isAddevent && removeEventListeners(attachEle) + // 判断该元素中是否含有popper如果有popper在显示 就不要删除定位 + setTimeout(() => { + if (container.querySelectorAll('.hi-popper__container').length === 0) { + container && !isBody(container) && isAddevent && setStyle(container, { position: cacheContainerPosition }) + } + }, 0) + setIsAddevent(false) + setState(Object.assign({}, state, { offset: undefined })) + } + }, [props.show]) + + // update + useEffect(() => { + const { attachEle, children, container, show } = props + if (!(attachEle && show && children)) return + + const { cacheContainerPosition, popperRef } = state + if (show && !isAddevent) { + !isAddevent && setupEventListeners(attachEle, scrollCallBack) + setIsAddevent(true) + } + // 如果在一个固定定位的元素里面的话;更改计算方式 + if (isFixed(attachEle) && !isBody(container)) { + cacheContainerPosition === 'static' && setStyle(container, { position: 'relative' }) + } + if (!popperRef) { + setState( + Object.assign({}, state, { + popperRef: staticPopperRef.current, + popperHeight: staticPopperRef.current.clientHeight, + popperWidth: staticPopperRef.current.clientWidth + }) + ) + } + }) + + useEffect(() => { + const offset = getOffset(props, state) + offsetData.current = offset + + state.popperRef && + setState( + Object.assign({}, state, { + offset: offset + }) + ) + }, [state.popperRef]) + // DidMount + useEffect(() => { + const { container } = props + setState( + Object.assign({}, state, { + cacheContainerPosition: container ? getStyleComputedProperty(container, 'position') : 'static' + }) + ) + }, []) + + if (!(attachEle && show && children)) return null + + const { offset = getOffset(props, state) } = state + const width = offset.width + const left = offset.left + 'px' + const top = offset.top + 'px' + + return ( + <div + ref={popperContainerRef} + className={classNames(overlayClassName, 'hi-popper__container', { + 'hi-popper__container--hide': !show + })} + style={{ left, top, zIndex }} + > + <div + ref={(node) => { + staticPopperRef.current = node + }} + className={classNames(className, 'hi-popper__content', `hi-popper__content--${offset.placement}`, { + 'hi-popper__content--hide': popperHeight === 0 || popperWidth === 0 + })} + style={{ width, height }} + onMouseOut={onMouseOut} + onMouseOver={onMouseOver} + onMouseLeave={onMouseLeave} + onMouseEnter={onMouseEnter} + > + {children} + </div> + </div> + ) +} +Overlay.defaultProps = { + show: false, + topGap: 0, + leftGap: 0, + zIndex: 1060, + placement: 'bottom-start' +} + +Overlay.propTypes = { + width: PropTypes.oneOfType([PropTypes.string, PropTypes.bool, PropTypes.number]), // 为false时不设置 + height: PropTypes.number, + className: PropTypes.string, + show: PropTypes.bool, + topGap: PropTypes.number, + leftGap: PropTypes.number, + zIndex: PropTypes.number, + placement: PropTypes.oneOf([ + 'auto', // 会计算最合适的位置 + 'bottom', + 'bottom-start', + 'bottom-end', + 'top', + 'top-start', + 'top-end', + 'left', + 'left-start', + 'left-end', + 'right', + 'right-start', + 'right-end', + 'top-bottom-start', + 'top-bottom', + 'left-right', + 'left-right-start' + ]), + onMouseOver: PropTypes.func, + onMouseOut: PropTypes.func, + onMouseEnter: PropTypes.func, + onMouseLeave: PropTypes.func, + container: PropTypes.any, + preventOverflow: PropTypes.bool // 防止溢出 top bottom +} +export default Overlay diff --git a/components/popper/Portal.js b/components/popper/Portal.js new file mode 100644 index 000000000..48e9be28b --- /dev/null +++ b/components/popper/Portal.js @@ -0,0 +1,27 @@ +/** + * 指定挂载点 + */ +/* eslint-disable-next-line */ +import React from 'react' +import PropTypes from 'prop-types' +import ReactDOM from 'react-dom' +import useWaitForDOMRef from './utils/useWaitForDOMRef' +const getNodeName = (element) => { + return element ? (element.nodeName || '').toLowerCase() : null +} +const Portal = ({ container, children, onRendered }) => { + let resolvedContainer = useWaitForDOMRef(container, onRendered) + resolvedContainer = ['html', 'body', '#document'].includes(getNodeName(resolvedContainer)) + ? document.body + : resolvedContainer + + return children && resolvedContainer ? <>{ReactDOM.createPortal(children, resolvedContainer)}</> : null +} + +Portal.displayName = 'Portal' +Portal.propTypes = { + container: PropTypes.any, + onRendered: PropTypes.func +} + +export default Portal diff --git a/components/popper/index.js b/components/popper/index.js index 572f49800..8ce94d15c 100644 --- a/components/popper/index.js +++ b/components/popper/index.js @@ -1,210 +1,48 @@ -import React, { Component } from 'react' -import { render } from 'react-dom' -import PropTypes from 'prop-types' -import classNames from 'classnames' -import _ from 'lodash' -import './style/index' - -export default class Popper extends Component { - container = undefined - popperHeight = undefined - - static propTypes = { - width: PropTypes.oneOfType([PropTypes.string, PropTypes.bool, PropTypes.number]), // 为false时不设置 - height: PropTypes.number, - className: PropTypes.string, - show: PropTypes.bool, - topGap: PropTypes.number, - leftGap: PropTypes.number, - zIndex: PropTypes.number, - placement: PropTypes.oneOf(['bottom', 'bottom-start', 'top', 'top-start', 'top-end', 'left', 'right', 'right-start', 'top-bottom-start', 'top-bottom', 'bottom-end']), - onMouseOver: PropTypes.func, - onMouseOut: PropTypes.func, - onMouseEnter: PropTypes.func, - onMouseLeave: PropTypes.func - } - - static defaultProps = { - show: false, - topGap: 2, - leftGap: 2, - zIndex: 1060, - placement: 'bottom-start' - } - - componentDidUpdate (prevProps) { - if (!_.isEqual(prevProps.children.props, this.props.children.props)) { - this.forceUpdate() - } - if (prevProps.show !== this.props.show || this.props.show) { - render(this.renderChildren(), this.container) - } - } - - componentDidMount () { - this.getContainer() - if (this.props.show) { - render(this.renderChildren(), this.container) - } - } - - componentWillUnmount () { - document.body.removeChild(this.container) - } - - getOffset () { - let { - attachEle, - topGap, - leftGap, - width - } = this.props - if (!attachEle) return - const rect = attachEle.getBoundingClientRect() - let top = rect.top + (document.documentElement.scrollTop || document.body.scrollTop) - let left = rect.left + (document.documentElement.scrollLeft || document.body.scrollLeft) - width = width === false ? undefined : (width === undefined ? rect.width : width) - let placement = this.getPlacement(rect) - switch (placement) { - case 'bottom': - top = top + topGap + rect.height - left = left + leftGap + rect.width / 2 - break - case 'bottom-start': - top = top + topGap + rect.height - left = left + leftGap - break - case 'bottom-end': - top = top + topGap + rect.height - left = left + leftGap - width + rect.width - break - case 'top': - top = top - topGap - left = left + leftGap + rect.width / 2 - break - case 'top-start': - top = top - topGap - left = left + leftGap - break - - case 'top-end': - top = top - topGap - left = left + leftGap - width + rect.width - break - - case 'left': - top = top + rect.height / 2 - left = left - leftGap - break +import React, { useState, useEffect } from 'react' +import { CSSTransition } from 'react-transition-group' +import Portal from './Portal' +import Overlay from './Overlay' +import useClickOutside from './utils/useClickOutside' - case 'right': - top = top + rect.height / 2 - left = left + rect.width + leftGap - break - case 'right-start': - top = top + topGap - left = left + rect.width + leftGap - break - } - - return { - width, - top, - left, - placement - } - } - - getPlacement (attachEleRect) { - let { - attachEle, - placement, - height - } = this.props - if (!attachEle) return - const bodyHeight = document.documentElement.clientHeight || document.body.clientHeight - let poperTop = attachEleRect.top + attachEleRect.height - const caclPlacement = (bottomPlacement, topPlacement) => { // 计算popper在元素上面或下面 - placement = bottomPlacement - this.popperHeight === undefined && (this.popperHeight = 0) // 自动探测边界,第一次时需设置为不可见,否则会闪跳,用来设置class hi-popper__content--hide - if (this.popperRef || height) { // 元素已挂载到dom且当前popper处于显示状态 - if (height) { - this.popperHeight = height - } else if (this.popperRef.clientHeight && this.popperHeight !== this.popperRef.clientHeight) { - this.popperHeight = this.popperRef.clientHeight - } - poperTop += this.popperHeight - if (poperTop >= bodyHeight) { - placement = topPlacement - } - } else { // popper尚未挂载到dom,拿不到高度 - setTimeout(() => render(this.renderChildren(), this.container), 0) - } - } - - if (placement === 'top-bottom-start') { - caclPlacement('bottom-start', 'top-start') - } else if (placement === 'top-bottom') { - caclPlacement('bottom', 'top') - } - - return placement - } - - renderChildren () { - let { - attachEle, - children, - className, - show, - height, - zIndex, - onMouseOver, - onMouseOut, - onMouseEnter, - onMouseLeave - } = this.props - if (!attachEle) return - const offset = this.getOffset() - let width = offset.width - let left = offset.left + 'px' - let top = offset.top + 'px' +import './style/index' - return ( - <div - className={classNames('hi-popper__container', {'hi-popper__container--hide': !show})} - style={{left, top, zIndex}} +// const { getScrollParent } = new PopperJS() +const AnimationClassName = 'hi-popper_transition' +/** + * @param {Function} onClickOutside 点击该元素外的回调方法 + * @param {Function} setOverlayContainer 获取overLay的挂载父级元素 允许用户指定;如果不指定 popper自己处理 + * @param {Boolean} preventOverflow 防止溢出 + */ +const Popper = (props) => { + const { show, attachEle, setOverlayContainer } = props + const [staticShow, setStaticShow] = useState(show) + const [transitionShow, setTransitionShow] = useState(show) + const [container, setContainer] = useState( + setOverlayContainer ? setOverlayContainer(attachEle) : props.container || document.body + ) + + useEffect(() => { + // const _container = attachEle ? getScrollParent(attachEle) : document.body + setContainer(setOverlayContainer ? setOverlayContainer(attachEle) : props.container || document.body) + setTransitionShow(show) + show && setStaticShow(true) + }, [show, attachEle]) + return ( + <div> + <CSSTransition + in={transitionShow} + timeout={300} + classNames={AnimationClassName} + onExited={() => { + setStaticShow(false) + }} > - <div - ref={node => { - this.popperRef = node - }} - className={classNames(className, 'hi-popper__content', `hi-popper__content--${offset.placement}`, {'hi-popper__content--hide': this.popperHeight === 0})} - style={{width, height}} - onMouseOut={onMouseOut} - onMouseOver={onMouseOver} - onMouseLeave={onMouseLeave} - onMouseEnter={onMouseEnter} - > - { children } - </div> - </div> - ) - } - - getContainer () { - const container = document.createElement('div') - container.style.position = 'absolute' - container.style.top = '0' - container.style.left = '0' - container.style.width = '100%' - - document.body.appendChild(container) - - this.container = container - } - - render () { - return null - } + <Portal container={container}> + <Overlay {...Object.assign({}, props, { show: staticShow })} container={container} /> + </Portal> + </CSSTransition> + </div> + ) } +export { Portal, useClickOutside } +export default Popper diff --git a/components/popper/style/index.scss b/components/popper/style/index.scss index ee888811d..f45f8f7e3 100644 --- a/components/popper/style/index.scss +++ b/components/popper/style/index.scss @@ -1,3 +1,4 @@ +$AnimationClassName :'hi-popper_transition' !default; .hi-popper__container { position: absolute; @@ -47,3 +48,33 @@ } } } + +.#{$AnimationClassName} { + &-enter { + opacity: 0; + transform: scale(0.9); + } + + &-enter-active { + opacity: 1; + transform: translateX(0); + transition: opacity 300ms, transform 300ms; + } + + &-exit { + opacity: 0; + transform: translateX(100%); + transition: opacity 300ms, transform 300ms; + } + + &-exit-done { + opacity: 0; + transform: translateX(100%); + } + + &-exit-active { + opacity: 0; + transform: scale(0.9); + transition: opacity 300ms, transform 300ms; + } +} diff --git a/components/popper/utils/popper.js b/components/popper/utils/popper.js new file mode 100644 index 000000000..b3b9f8273 --- /dev/null +++ b/components/popper/utils/popper.js @@ -0,0 +1,372 @@ +const root = window +const boundariesElement = 'viewport' +export default class Popper { + /** + * 获得给定元素的外围尺寸(offset大小 + 外边距) + * @function + * @ignore + * @argument {Element} element 要检测的元素 + * @returns {Object} 包含宽高信息的对象 + */ + getOuterSizes = element => { + // 注:这里会访问 DOM + let _display = element.style.display + let _visibility = element.style.visibility + element.style.display = 'block' + element.style.visibility = 'hidden' + + // original method + // 原始方法 + var styles = root.getComputedStyle(element) // 获取计算后的样式 + var x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom) // 上下边距 + var y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight) // 左右边距 + var result = { + width: element.offsetWidth + y, + height: element.offsetHeight + x + } + + // 重置元素样式 + element.style.display = _display + element.style.visibility = _visibility + return result + } + /** + * 获得 popper 的偏移量 + * @method + * @memberof Popper + * @access private + * @param {Element} popper - popper 元素 + * @param {Element} reference - 相关元素(popper 将根据它定位) + * @returns {Object} 包含将应用于 popper 的位移信息的对象 + */ + getOffsets = (popper, reference, position, placement) => { + const { + getOffsetRectRelativeToCustomParent, + getOuterSizes, + getOffsetParent + } = this + // 获取前缀 + placement = placement.split('-')[0] + var popperOffsets = {} + + // 设置 position + popperOffsets.position = position + // 判断父元素是否固定定位 + var isParentFixed = popperOffsets.position === 'fixed' + + // + // 获取相关元素的位置 + // + var referenceOffsets = getOffsetRectRelativeToCustomParent( + reference, + getOffsetParent(popper), + isParentFixed + ) + + // + // 获取 popper 的大小 + // + var popperRect = getOuterSizes(popper) + // + // 计算 popper 的偏移 + // + // 根据 popper 放置位置的不同,我们用不同的方法计算 + if (['right', 'left'].indexOf(placement) !== -1) { + // 如果在水平方向,应当和相关元素垂直居中对齐 + // top 应当为相关元素的 top 加上二者的高度差的一半,这样才能保证垂直居中对齐 + popperOffsets.top = + referenceOffsets.top + + referenceOffsets.height / 2 - + popperRect.height / 2 + if (placement === 'left') { + // 如果在左边,则 left 应为相关元素的 left 减去 popper 的宽度 + popperOffsets.left = referenceOffsets.left - popperRect.width + } else { + // 如果在右边,则 left 应为相关元素的 right + popperOffsets.left = referenceOffsets.right + } + } else { + // 如果在垂直方向,应当和相关元素水平居中对齐 + // left 应当为相关元素的 left 加上二者的宽度差的一半 + popperOffsets.left = + referenceOffsets.left + + referenceOffsets.width / 2 - + popperRect.width / 2 + if (placement === 'top') { + // 如果在上边,则 top 应当为相关元素的 top 减去 popper 的高度 + popperOffsets.top = referenceOffsets.top - popperRect.height + } else { + // 如果在下边,则 top 应当为 相关元素的 bottom + popperOffsets.top = referenceOffsets.bottom + } + } + + // 给 popperOffsets 对象增加宽度和高度值 + popperOffsets.width = popperRect.width + popperOffsets.height = popperRect.height + + return { + popper: popperOffsets, // popper 的相关信息 + reference: referenceOffsets // 相关元素的相关信息 + } + } + + /** + * 为给定的 popper 设定样式 + * @function + * @ignore + * @argument {Element} element - 要设定样式的元素 + * @argument {Object} styles - 包含样式信息的对象 + */ + setStyle = (element, styles) => { + function isNumeric (n) { + // 是否是数字 + return n !== '' && !isNaN(parseFloat(n)) && isFinite(n) + } + Object.keys(styles).forEach(function (prop) { + var unit = '' + // 为如下的属性增加单位 + if ( + ['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== + -1 && + isNumeric(styles[prop]) + ) { + unit = 'px' + } + element.style[prop] = styles[prop] + unit + }) + } + /** + * 初始化更新 popper 位置时用到的事件监听器 + * @method + * @memberof Popper + * @access private + */ + setupEventListeners = (element, callback) => { + // 1 DOM access here + // 注:这里会访问 DOM,原作者回复我说,这是他用来记录哪里访问到了 DOM + // this.state.updateBound = this.update.bind(this) + // 浏览器窗口改变的时候更新边界 + this.scrollCallback = () => { + callback(target) + } + root.addEventListener('resize', this.scrollCallback) + // 如果边界元素是窗口,就不需要监听滚动事件 + if (boundariesElement !== 'window') { + var target = this.getScrollParent(element) // 获取相关元素可滚动的父级 + // 这里可能是 `body` 或 `documentElement`(Firefox上),等价于要监听根元素 + if ( + target === root.document.body || + target === root.document.documentElement + ) { + target = root + } + // 监听滚动事件 + target.addEventListener('scroll', this.scrollCallback) + } + } + getNodeName (element) { + return element ? (element.nodeName || '').toLowerCase() : null + } + isBody = element => { + const { getNodeName } = this + return element + ? ['html', 'body', '#document'].includes(getNodeName(element)) + : true + } + /** + * 返回给定元素用来计算滚动的父元素 + * @function + * @ignore + * @argument {Element} element + * @returns {Element} scroll parent + */ + getScrollParent = element => { + // return document.body + + const { getStyleComputedProperty, getScrollParent, getNodeName } = this + var parent = element.parentNode + if (['html', 'body', '#document'].includes(getNodeName(element))) { + // $FlowFixMe: assume body is always available + return document.documentElement || document.body + } + if (!parent) { + // 没有父级 + return element + } + + if (parent === root.document) { + // Firefox 会将 scrollTop的判断放置的 `documentElement` 而非 `body` 上 + // 我们将判断二者谁大于0来返回正确的元素 + if (root.document.body.scrollTop) { + return root.document.body + } else { + return root.document.documentElement + } + } + + // Firefox 要求我们也要检查 `-x` 以及 `-y` + if ( + ['scroll', 'auto'].indexOf( + getStyleComputedProperty(parent, 'overflow') + ) !== -1 || + ['scroll', 'auto'].indexOf( + getStyleComputedProperty(parent, 'overflow-x') + ) !== -1 || + ['scroll', 'auto'].indexOf( + getStyleComputedProperty(parent, 'overflow-y') + ) !== -1 + ) { + // 如果检测到的 scrollParent 是 body,我们将对其父元素做一次额外的检测 + // 这样在 Chrome 系的浏览器中会得到 body,其他情况下会得到 documentElement + // 修复 issue #65 + return parent + } + return getScrollParent(element.parentNode) + } + + /** + * 判断给定元素是否固定或者在一个固定元素中 + * @function + * @ignore + * @argument {Element} element 给定的元素 + * @argument {Element} customContainer 自定义的容器 + * @returns {Boolean} + */ + isFixed = element => { + const { getStyleComputedProperty, isFixed, getNodeName } = this + + if (['html', 'body', '#document'].includes(getNodeName(element))) { + // $FlowFixMe: assume body is always available + return false + } + if (getStyleComputedProperty(element, 'position') === 'fixed') { + // position 为 fixed + return true + } + // 判断父元素是否固定 + return element.parentNode ? isFixed(element.parentNode) : element + } + /** + * 获取给定元素的 CSS 计算属性 + * @function + * @ignore + * @argument {Eement} element 给定的元素 + * @argument {String} property 属性 + */ + getStyleComputedProperty = (element, property) => { + // 注:这里会访问 DOM + const css = window.getComputedStyle(element, null) + return css[property] + } + + _getPosition = (popper, reference) => { + const { getOffsetParent, isFixed } = this + var container = getOffsetParent(reference) // 获取父元素的偏移 + + if (this._options.forceAbsolute) { + // 强制使用绝对定位 + return 'absolute' + } + + // 判断 popper 是否使用固定定位 + // 如果相关元素位于固定定位的元素中,popper 也应当使用固定固定定位来使它们可以同步滚动 + var isParentFixed = isFixed(reference, container) + return isParentFixed ? 'fixed' : 'absolute' + } + + getOffsetParent = element => { + // 注:这里会访问 DOM + var offsetParent = element.offsetParent + return offsetParent === root.document.body || !offsetParent + ? root.document.documentElement + : offsetParent + } + getOffsetRectRelativeToCustomParent = (element, parent, fixed) => { + const { getScrollParent, getBoundingClientRect } = this + var elementRect = getBoundingClientRect(element) + var parentRect = getBoundingClientRect(parent) + + if (fixed) { + // 固定定位 + var scrollParent = getScrollParent(parent) + parentRect.top += scrollParent.scrollTop + parentRect.bottom += scrollParent.scrollTop + parentRect.left += scrollParent.scrollLeft + parentRect.right += scrollParent.scrollLeft + } + + var rect = { + top: elementRect.top - parentRect.top, + left: elementRect.left - parentRect.left, + bottom: elementRect.top - parentRect.top + elementRect.height, + right: elementRect.left - parentRect.left + elementRect.width, + width: elementRect.width, + height: elementRect.height + } + return rect + } + /** + * Get bounding client rect of given element + * 获取给定元素的边界 + * @function + * @ignore + * @param {HTMLElement} element + * @return {Object} client rect + */ + getBoundingClientRect = element => { + var rect = element.getBoundingClientRect() + + // IE11以下 + var isIE = navigator.userAgent.indexOf('MSIE') !== -1 + + // 修复 IE 的文档的边界 top 值总是 0 的bug + var rectTop = + isIE && element.tagName === 'HTML' ? -element.scrollTop : rect.top + + return { + left: rect.left, + top: rectTop, + right: rect.right, + bottom: rect.bottom, + width: rect.right - rect.left, + height: rect.bottom - rectTop + } + } + + /** + * 移除更新 popper 位置时用到的事件监听器 + * @method + * @memberof Popper + * @access private + */ + removeEventListeners = element => { + const { getScrollParent } = this + + // 注:这里会访问 DOM + // 移除 resize 事件监听 + root.removeEventListener('resize', this.scrollCallback) + if (boundariesElement !== 'window') { + // 如果边界元素不是窗口,说明还监听了滚动事件 + var target = getScrollParent(element) + if ( + target === root.document.body || + target === root.document.documentElement + ) { + target = root + } + // 移除滚动事件监听 + target.removeEventListener('scroll', this.scrollCallback) + } + // 更新回调摄者为空 + this.scrollCallback = null + } + /** + * 防止overlay的合适的位置位置 在auto时候有效 + * @method + * @memberof Popper + * @ignore + * @argument {Eement} element 给定的元素 + * @argument {String} property 属性 + */ +} diff --git a/components/popper/utils/positionUtils.js b/components/popper/utils/positionUtils.js new file mode 100644 index 000000000..551cb8bbc --- /dev/null +++ b/components/popper/utils/positionUtils.js @@ -0,0 +1,207 @@ +import PopperJS from './popper' + +const { isBody, isFixed, getOffsetRectRelativeToCustomParent } = new PopperJS() +// 上下防止溢出 就会定位到划出的边缘位置 +const overflowOffset = (placement, scrollTop, rect, top, left, width, props) => { + const { topGap, container } = props + let _top = top + switch (placement) { + case 'bottom-start': + _top = rect.top + rect.height + topGap <= 0 ? scrollTop + topGap : top + break + case 'top-start': + if (container.clientHeight + rect.height - rect.bottom <= 0) { + _top = top - (rect.top - container.clientHeight) + } + break + } + return { + top: _top, + width, + left, + placement + } +} +// 对于auto的计算方式 +const positionAuto = (attachEleRect, popperHeight, popperRef, height, containerHeight) => { + // auto时候 定位比较合适的位置 + let placement = 'bottom-start' + popperHeight === undefined && (popperHeight = 0) + const width = popperRef ? popperRef.clientWidth : 0 + + if (popperRef || height) { + height && (popperHeight = height) + } else if (popperRef && popperRef.clientHeight && popperHeight !== popperRef.clientHeight) { + popperHeight = popperRef.clientHeight + } + // 上下都放不下的时候 放左右 + if (attachEleRect.top + popperHeight + attachEleRect.height > containerHeight) { + if (attachEleRect.right > width) { + placement = 'right' + } + if (attachEleRect.left > width) { + placement = 'left' + } + } else if (attachEleRect.top < popperHeight) { + if (attachEleRect.right > width) { + placement = 'right' + } + if (attachEleRect.left > width) { + placement = 'left' + } + } + // 上下能放下的时候以上下优先放置 + + if (attachEleRect.top > popperHeight) { + placement = 'top-start' + } + if (attachEleRect.top + popperHeight + attachEleRect.height < containerHeight) { + placement = 'bottom-start' + } + return placement +} +const getPlacement = (attachEleRect, container, props, state) => { + let { popperHeight, popperRef } = state + let { attachEle, placement, height, width = 0, leftGap = 0 } = props + + if (!attachEle) return + let containerHeight = document.documentElement.clientHeight || document.body.clientHeight + + if (isFixed(attachEle)) { + containerHeight = container.clientHeight + } + if (isBody(container)) { + containerHeight = document.documentElement.clientHeight || document.body.clientHeight + } + + let poperTop = attachEleRect.top + attachEleRect.height + const caclBottomOrTopPlacement = (bottomPlacement, topPlacement) => { + // 计算popper在元素上面或下面 + placement = bottomPlacement + popperHeight === undefined && (popperHeight = 0) // 自动探测边界,第一次时需设置为不可见,否则会闪跳,用来设置class hi-popper__content--hide + if (popperRef || height) { + // 元素已挂载到dom且当前popper处于显示状态 + if (height) { + popperHeight = height + } else if (popperRef.clientHeight && popperHeight !== popperRef.clientHeight) { + popperHeight = popperRef.clientHeight + } + poperTop += popperHeight + if (poperTop >= containerHeight) { + placement = topPlacement + } + } + } + const caclLeftOrRightPlacement = (leftPlacement, RightPlacement) => { + // 计算popper在元素上面或下面 + placement = leftPlacement + const _width = popperRef ? popperRef.clientWidth : width + if (attachEleRect.right > _width + leftGap) { + placement = RightPlacement + } + if (attachEleRect.left > _width + leftGap) { + placement = leftPlacement + } + } + if (placement === 'top-bottom-start') { + caclBottomOrTopPlacement('bottom-start', 'top-start') + } else if (placement === 'top-bottom') { + caclBottomOrTopPlacement('bottom', 'top') + } else if (placement === 'left-right-start') { + caclLeftOrRightPlacement('left-start', 'right-start') + } else if (placement === 'left-right') { + caclLeftOrRightPlacement('left', 'right') + } else if (placement === 'auto') { + positionAuto(attachEleRect, popperHeight, popperRef, height, containerHeight) + } + return placement || 'bottom-start' +} +export const getOffset = (props, state, status) => { + let { attachEle, topGap, leftGap, width, container, preventOverflow } = props + if (!attachEle) return + + const { popperHeight, popperWidth } = state + let rect = attachEle.getBoundingClientRect() + + if (isFixed(attachEle) && !isBody(container)) { + rect = getOffsetRectRelativeToCustomParent(attachEle, container, isFixed(attachEle)) + } + + let _scrollTop = container.scrollTop + let _scrollLeft = container.scrollLeft + // 兼容处理 + if (isBody(container)) { + _scrollTop = document.documentElement.scrollTop || document.body.scrollTop + _scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft + } + + let top = rect.top + _scrollTop + let left = rect.left + _scrollLeft + + width = width === false ? popperWidth : width === undefined ? rect.width : width + + let placement = getPlacement(rect, container, props, state) || 'bottom-start' + const rectHeight = rect.height + switch (placement) { + case 'bottom': + top = top + topGap + rectHeight + left = left + leftGap + rect.width / 2 + break + case 'bottom-start': + top = top + topGap + rectHeight + left = left + leftGap + break + case 'bottom-end': + top = top + topGap + rectHeight + left = left + leftGap - width + rect.width + break + case 'top': + top = top - topGap + left = left + leftGap + rect.width / 2 + break + case 'top-start': + top = top - topGap + left = left + leftGap + break + case 'top-end': + top = top - topGap + left = left + leftGap - width + rect.width + break + case 'left': + top = top + rect.height / 2 + left = left - leftGap + break + case 'left-start': + top = top + topGap + left = left - rect.width + break + case 'left-end': + top = top + rect.height - topGap - popperHeight + left = left - rect.width + break + + case 'right': + top = top + rect.height / 2 + left = left + rect.width + leftGap + break + case 'right-start': + top = top + topGap + left = left + rect.width + leftGap + break + case 'right-end': + top = top + rect.height - topGap - popperHeight + left = left + rect.width + leftGap + break + } + + if (preventOverflow) { + return overflowOffset((placement = 'bottom-start'), _scrollTop, rect, top, left, width, props) + } + + return { + width, + top, + left, + placement: placement + } +} diff --git a/components/popper/utils/useClickOutside.js b/components/popper/utils/useClickOutside.js new file mode 100644 index 000000000..dcffbed28 --- /dev/null +++ b/components/popper/utils/useClickOutside.js @@ -0,0 +1,28 @@ +import { useEffect, useCallback, useRef } from 'react' + +const useClickOutside = (onClickOutside, dom, eventName = 'click', attachEle) => { + const element = useRef('') + const handleOutside = useCallback( + (e) => { + const targetElement = typeof dom === 'function' ? dom() : dom + const el = targetElement || element.current + if (el) { + if (attachEle) { + !(attachEle.contains(e.target) || el.contains(e.target)) && onClickOutside(e) + } else { + !el.contains(e.target) && onClickOutside(e) + } + } + }, + [onClickOutside, dom, element] + ) + useEffect(() => { + // 使用事件捕获 + document.addEventListener(eventName, handleOutside, true) + return () => { + document.removeEventListener(eventName, handleOutside, true) + } + }, [eventName, onClickOutside, element]) + return element +} +export default useClickOutside diff --git a/components/popper/utils/useWaitForDOMRef.js b/components/popper/utils/useWaitForDOMRef.js new file mode 100644 index 000000000..0bdecc6a1 --- /dev/null +++ b/components/popper/utils/useWaitForDOMRef.js @@ -0,0 +1,39 @@ +import { useState, useEffect } from 'react' + +const ownerDocument = node => { + return (node && node.ownerDocument) || document +} +export const resolveContainerRef = ref => { + if (typeof document === 'undefined') return null + if (ref == null) return ownerDocument().body + if (typeof ref === 'function') ref = ref() + + if (ref && 'current' in ref) ref = ref.current + if (ref && ref.nodeType) return ref || null + + return null +} + +export default function useWaitForDOMRef (ref, onResolved) { + const [resolvedRef, setRef] = useState(() => resolveContainerRef(ref)) + + if (!resolvedRef) { + const earlyRef = resolveContainerRef(ref) + if (earlyRef) setRef(earlyRef) + } + + useEffect(() => { + if (onResolved && resolvedRef) { + onResolved(resolvedRef) + } + }, [onResolved, resolvedRef]) + + useEffect(() => { + const nextRef = resolveContainerRef(ref) + if (nextRef !== resolvedRef) { + setRef(nextRef) + } + }, [ref, resolvedRef]) + + return resolvedRef +} diff --git a/components/progress/BarProgress.js b/components/progress/BarProgress.js index 20b9f8100..57aa261cc 100644 --- a/components/progress/BarProgress.js +++ b/components/progress/BarProgress.js @@ -1,62 +1,47 @@ import React from 'react' import Classnames from 'classnames' -export default class BarProgress extends React.Component { - textRef = React.createRef() - state = { insidePlacement: 'right' } - - componentDidMount () { - if (this.props.placement === 'inside') { - if ( - this.textRef.current && - this.textRef.current.clientWidth >= this.getWidth() - ((this.getWidth() * this.props.percent) / 100 + 5) - ) { - this.setState({ insidePlacement: 'left' }) - } else { - this.setState({ insidePlacement: 'right' }) - } - } - } - getWidth = () => { - const { width, size } = this.props - if (!width || width <= 0) { - return size === 'large' ? 480 : 160 +export const BarProgress = (props) => { + function getWidth() { + if (!props.width || props.width <= 0) { + return props.size === 'large' ? 480 : 160 } - return width + return props.width } - getHeight = () => { - const { size, height } = this.props + + function getHeight() { + const { size, height } = props if (!height || height <= 0) { return size === 'large' ? 8 : size === 'default' ? 6 : 2 } return height } - render () { - let prefix = 'hi-progress' - const { percent: percentNum, content, type, showInfo, placement, tooltip = null, active } = this.props - const percent = percentNum > 0 ? percentNum : 0 - return ( - <div> - <div className={`${prefix}__inner`} style={{ width: this.getWidth() + 'px', height: this.getHeight() + 'px' }}> - <div - className={Classnames(`${prefix}__bar ${prefix}__bar--${type}`, { - [`${prefix}__bar--active`]: active - })} - style={{ width: `${percent}%` }} - > - {showInfo && placement === 'inside' && this.getHeight() >= 14 && ( - <div ref={this.textRef} className={`${prefix}__text--inside inside--${this.state.insidePlacement}`}> - {content || `${percent}%`} - </div> - )} - {tooltip} - </div> + const prefix = 'hi-progress' + const { percent: percentNum, placement, tooltip = null, active } = props + const content = typeof props.content !== 'undefined' ? props.content : props.text // // api 兼容 1.x 为 text 2.x 改为 content + const showInfo = typeof props.showInfo !== 'undefined' ? props.showInfo : props.withOutText // // api 兼容 1.x 为 withOutText 2.x 改为 showInfo + const type = props.type || props.status + + const percent = percentNum > 0 ? percentNum : 0 + return ( + <div> + <div className={`${prefix}__inner`} style={{ width: getWidth() + 'px', height: getHeight() + 'px' }}> + <div + className={Classnames(`${prefix}__bar ${prefix}__bar--${type}`, { + [`${prefix}__bar--active`]: active + })} + style={{ width: `${percent}%` }} + > + {showInfo && placement === 'inside' && getHeight() >= 14 && ( + <div className={`${prefix}__text--inside`}>{content || `${percent}%`}</div> + )} + {tooltip} </div> - {showInfo && placement === 'outside' && ( - <div className={`${prefix}__text ${prefix}__text--${type}`}>{content || `${percent}%`}</div> - )} </div> - ) - } + {showInfo && placement === 'outside' && ( + <div className={`${prefix}__text ${prefix}__text--${type}`}>{content || `${percent}%`}</div> + )} + </div> + ) } diff --git a/components/progress/Progress.js b/components/progress/Progress.js index 9615456a8..c4a933f15 100644 --- a/components/progress/Progress.js +++ b/components/progress/Progress.js @@ -1,7 +1,7 @@ import React, { Component } from 'react' import PropTypes from 'prop-types' import './style' -import BarProgress from './BarProgress.js' +import { BarProgress } from './BarProgress.js' import { CircleProgress } from './CircleProgress.js' import { DashboardProgress } from './DashboardProgress' import Provider from '../context' @@ -40,9 +40,13 @@ class Progress extends Component { render () { let prefix = 'hi-progress' - const { className = '', apperance, theme } = this.props - - return <div className={`${prefix}__container ${className} theme__${theme}`}>{this.getRenderType(apperance)}</div> + const { className = '', theme } = this.props + const apperance = this.props.apperance || this.props.type // api 兼容 1.x 为 type 2.x 改为 apperance + return ( + <div className={`${prefix}__container ${className} theme__${theme}`}> + {this.getRenderType(apperance)} + </div> + ) } } export default Provider(Progress) diff --git a/components/progress/index.d.ts b/components/progress/index.d.ts new file mode 100644 index 000000000..cd03301da --- /dev/null +++ b/components/progress/index.d.ts @@ -0,0 +1,14 @@ +interface Props { + apperance?: 'bar' | 'circle' | 'dashboard' + size?: 'large' | 'default' | 'small' + active?: boolean + content?: string | JSX.Element + showInfo?: boolean + type?: 'primary' | 'success' | 'warning' | 'error' + radius?: number + placement?: 'inside' | 'outside' + width?: number + height?: number +} +declare const Progress: React.ComponentType<Props> +export default Progress diff --git a/components/progress/index.js b/components/progress/index.js index c91ed2711..5cc755de0 100644 --- a/components/progress/index.js +++ b/components/progress/index.js @@ -1,11 +1,4 @@ import Progress from './Progress' -import { depreactedPropsCompat } from '../_util' import './style/index' -export default depreactedPropsCompat([ - ['apperance', 'type'], - ['content', 'text'], - ['showInfo', 'withOutText'], - ['type', 'status'], - ['placement', 'inside', (data) => (data ? 'inside' : 'outside')] -])(Progress) +export default Progress diff --git a/components/progress/style/index.scss b/components/progress/style/index.scss index ab7d4f898..b664f4caa 100644 --- a/components/progress/style/index.scss +++ b/components/progress/style/index.scss @@ -1,15 +1,14 @@ -@import '@hi-ui/core-css/index.scss'; +@import '../../core-css/index.scss'; -$progress-bg: #f2f2f2 !default; -$progress-primary: #3b76dc !default; -$progress-success: #1da653 !default; -$progress-warn: #e19d0c !default; -$progress-error: #eb5252 !default; -$progress-text: #666 !default; +$color-map: ( + 'warn': get-color($palette-secondary, 'warning'), + 'success': get-color($palette-secondary, 'success'), + 'error': get-color($palette-secondary, 'danger') +) !default; .hi-progress { &__inner { - background-color: $progress-bg; + background-color: use-color('gray-10'); border-radius: 10px; position: relative; overflow: hidden; @@ -24,7 +23,7 @@ $progress-text: #666 !default; right: 0; bottom: 0; left: 0; - background: #fff; + background: use-color('white'); opacity: 0; content: ''; animation: hi-progress-active 2.4s cubic-bezier(0.23, 1, 0.32, 1) infinite; @@ -35,55 +34,46 @@ $progress-text: #666 !default; height: 100%; display: block; position: relative; - background-color: $progress-primary; + background-color: use-color('primary'); transition: width 0.4s cubic-bezier(0.3, 0, 0.7, 1); - } - - &__bar--success { - background-color: $progress-success; - } - &__bar--warn { - background-color: $progress-warn; - } + &--primary { + background-color: use-color('primary'); + } - &__bar--error { - background-color: $progress-error; + @each $key, $value in $color-map { + &--#{$key} { + background-color: $value; + } + } } &__text { padding-left: 25px; font-size: 14px; - color: $progress-text; + color: use-color('gray-80'); display: inline-block; vertical-align: middle; + + &--primary { + color: use-color('primary'); + } + + @each $key, $value in $color-map { + &--#{$key} { + color: $value; + } + } } &__text--inside { font-size: 14px; + color: use-color('white'); position: absolute; - right: -5px; + right: 5px; top: 50%; - transform: translate(100%, -50%); + transform: translateY(-50%); line-height: 14px; - - &.inside--left { - color: #fff; - right: 5px; - transform: translate(0, -50%); - } - } - - &__text--success { - color: $progress-success; - } - - &__text--warn { - color: $progress-warn; - } - - &__text--error { - color: $progress-error; } &__svg { @@ -113,85 +103,29 @@ $progress-text: #666 !default; &__circle { fill: none; - stroke: $progress-primary; + stroke: use-color('primary'); stroke-width: 6; transform: rotate(-90deg); transform-origin: 50% 50%; transition: stroke-dashoffset 0.4s cubic-bezier(0.3, 0, 0.7, 1); - } - - &__circle--success { - stroke: $progress-success; - } - &__circle--warn { - stroke: $progress-warn; - } - - &__circle--error { - stroke: $progress-error; + @each $key, $value in $color-map { + &--#{$key} { + stroke: $value; + } + } } &__dashboard { fill: none; - stroke: $progress-primary; + stroke: use-color('primary'); stroke-width: 6; transition: stroke-dasharray 0.4s cubic-bezier(0.3, 0, 0.7, 1); - } - - &__dashboard--success { - stroke: $progress-success; - } - - &__dashboard--warn { - stroke: $progress-warn; - } - - &__dashboard--error { - stroke: $progress-error; - } -} - -@each $key, $value in $theme-colors { - .theme__#{$key} { - .hi-progress__bar--primary { - background-color: $value; - } - - .hi-progress__text--primary { - color: $value; - } - .hi-progress__circle { - stroke: $value; - - &--success { - stroke: $progress-success; - } - - &--warn { - stroke: $progress-warn; + @each $key, $value in $color-map { + &--#{$key} { + stroke: $value; } - - &--error { - stroke: $progress-error; - } - } - - .hi-progress__dashboard { - stroke: $value; - } - - .hi-progress__dashboard--success { - stroke: $progress-success; - } - - .hi-progress__dashboard--warn { - stroke: $progress-warn; - } - - .hi-progress__dashboard--error { - stroke: $progress-error; } } } diff --git a/components/radio/index.d.ts b/components/radio/index.d.ts new file mode 100644 index 000000000..02a966638 --- /dev/null +++ b/components/radio/index.d.ts @@ -0,0 +1,28 @@ +type DataItem = { + content: string + id: string | number + disabled?: boolean +} +interface Props { + value?: string | number + autoFocus?: boolean + checked?: boolean + disabled?: boolean + onChange?: (event: ChangeEvent<HTMLInputElement>) => void +} +interface GroupProps { + placement?: 'vertical' | 'horizontal' + data: DataItem[] + value?: string | number + defaultValue?: string | number + disabled?: boolean + type?: 'default' | 'button' + onChange?: (value: string) => void +} +declare class Group extends React.Component<GroupProps, any> { +} +declare class Radio extends React.Component<Props, any> { + static Group = Group +} +export default Radio + diff --git a/components/radio/index.js b/components/radio/index.js index db757ab1e..e12a45663 100644 --- a/components/radio/index.js +++ b/components/radio/index.js @@ -1,12 +1,14 @@ +import React from 'react' import Radio from './Radio' import RadioLegacy from './radio-legacy/index' import Group from './Group' -import SwitchVersion from '../_util/SwitchVersion' import './style/index' -const VRadio = SwitchVersion(Radio, RadioLegacy) -const VGroup = SwitchVersion(Group, undefined) +const VRadio = ({ legacy, ...props }) => { + const WrapperComponent = legacy ? RadioLegacy : Radio + return <WrapperComponent {...props} /> +} -VRadio.Group = VGroup +VRadio.Group = Group export default VRadio diff --git a/components/radio/style/index.scss b/components/radio/style/index.scss index c50162a9e..fd8ea5b1f 100644 --- a/components/radio/style/index.scss +++ b/components/radio/style/index.scss @@ -1,8 +1,8 @@ -@import '@hi-ui/core-css/index.scss'; +@import '../../core-css/index.scss'; $prefixCls: '.hi-radio' !default; -@mixin hi-radio-style($active-color: get-color($palette-primary, 'hiui-blue')) { +@mixin hi-radio-style($active-color: use-color('primary')) { &:not(#{$prefixCls}--disabled):hover { #{$prefixCls}__input { border-color: $active-color; @@ -53,8 +53,6 @@ $prefixCls: '.hi-radio' !default; height: 32px; vertical-align: middle; - @include component-reset(); - input { cursor: pointer; position: absolute; @@ -93,7 +91,7 @@ $prefixCls: '.hi-radio' !default; vertical-align: middle; width: 16px; height: 16px; - border: 1px solid #d8d8d8; + border: 1px solid use-color('gray-30'); transition: 0.3s ease-out; line-height: 1; border-radius: 50%; @@ -127,16 +125,16 @@ $prefixCls: '.hi-radio' !default; cursor: not-allowed; #{$prefixCls}__input { - border-color: #d8d8d8; - background: #f2f2f2; + border-color: use-color('gray-30'); + background: use-color('gray-10'); &::after { - background: #d8d8d8; + background: use-color('gray-30'); } } #{$prefixCls}__text { - color: rgba(#000, 0.65); + color: use-color('gray-80'); } } @@ -172,39 +170,3 @@ $prefixCls: '.hi-radio' !default; @include hi-radio-style(); } - -@each $key, $value in $theme-colors { - .theme__#{$key$prefixCls} { - @include hi-radio-style($value); - } - - .theme__#{$key}#{$prefixCls}:not(#{$prefixCls}--disabled):hover { - #{$prefixCls}__input { - border-color: $value; - } - } - - .theme__#{$key}#{$prefixCls} { - input { - &:focus + #{$prefixCls}__input { - border-color: $value; - } - } - - &__button.hi-btn { - &#{$prefixCls}__button--checked { - border-color: $value; - color: $value; - background-color: rgba($value, 0.1); - - #{$prefixCls} { - color: $value; - } - } - - &:not(.hi-btn--disabled):hover { - border-color: $value; - } - } - } -} diff --git a/components/rate/Rate.js b/components/rate/Rate.js index b96e86239..8e013a3f8 100644 --- a/components/rate/Rate.js +++ b/components/rate/Rate.js @@ -1,133 +1,147 @@ -import React, { Component } from 'react' -import PropTypes from 'prop-types' +import React, { useState, useEffect } from 'react' import classnames from 'classnames' import * as Icons from './Icons' import ToolTip from '../tooltip' -class Rate extends Component { - constructor (props) { - super(props) - const { value, defaultValue } = props - this.state = { - value: value === undefined ? defaultValue : value +const Rate = (props) => { + const { + value: trueVal, + disabled, + useEmoji, + allowHalf, + character, + renderCharacter, + defaultValue, + className, + style, + count, + prefixCls, + tooltips, + color, + vertical, + onChange, + descRender, + readOnly + } = props + const clearable = props.clearable || props.allowClear // 兼容API 2.x 改为clearable + const [value, setValue] = useState(trueVal === undefined ? defaultValue : trueVal) + + const [hoverValue, setHoverValue] = useState(0) + + useEffect(() => { + if (trueVal !== undefined) { + setValue(trueVal) } - } - static getDerivedStateFromProps ({ value }) { - if (value !== undefined) { - return { - value - } + }, [trueVal]) + + const handleIconLeave = () => { + if (disabled) { + return } - return null - } - state = { - value: 0, - hoverValue: 0 + setHoverValue(0) } - renderIcon = (idx) => { - const { useEmoji, allowHalf, disabled } = this.props - const { value, hoverValue } = this.state - let currentValue = hoverValue || value - if (!allowHalf || useEmoji) { - currentValue = Math.ceil(currentValue) + + const handleIconEnter = (hoverValue) => { + if (disabled || readOnly) { + return } - return ( - <Icon {...{ value: idx, currentValue, disabled, useEmoji, allowHalf }} /> - ) + + setHoverValue(hoverValue) } - handleIconClick = (value) => { - const { allowHalf, clearable, onChange, disabled } = this.props - if (disabled) { + + const handleIconClick = (valueIndex) => { + if (disabled || readOnly) { return } if (!allowHalf) { - value = Math.ceil(value) + valueIndex = Math.ceil(valueIndex) } - if (value === this.state.value && clearable) { - onChange && onChange({ value: 0 }) - this.setState({ - value: 0 - }) + if (valueIndex === value && clearable) { + onChange && onChange(0) + if (trueVal === undefined) { + setValue(0) + } return } - onChange && onChange(value) - this.setState({ value }) - } - handleIconEnter = (hoverValue) => { - if (this.props.disabled) { - return + + if (trueVal === undefined) { + setValue(valueIndex) } - this.setState({ hoverValue }) + onChange && onChange(valueIndex) } - handleIconLeave = () => { - if (this.props.disabled) { - return + + const renderIcon = (idx) => { + let currentValue = hoverValue || value + if (!allowHalf) { + currentValue = Math.ceil(currentValue) } - this.setState({ hoverValue: 0 }) - } - render () { - const { - className, - style, - count, - useEmoji, - prefixCls, - tooltips, - disabled - } = this.props - const iconCount = Math.ceil(useEmoji ? 5 : count) - const iconHalfCls = `${prefixCls}__star__half` - const starCls = classnames(`${prefixCls}__star`, { - [`${prefixCls}__star--disabled`]: disabled - }) return ( - <ul - className={classnames(prefixCls, className)} - style={style} - onMouseLeave={this.handleIconLeave} - > + <Icon + {...{ + value: idx, + currentValue, + disabled, + useEmoji, + allowHalf, + character, + style, + renderCharacter, + readOnly + }} + /> + ) + } + + const currentValue = hoverValue || value + const iconCount = Math.ceil(useEmoji ? 5 : count) + const iconHalfCls = `${prefixCls}__star__half` + const starCls = classnames(`${prefixCls}__star`, { + [`${prefixCls}__star--disabled`]: disabled, + [`${prefixCls}__star--readOnly`]: readOnly + }) + + const descCls = classnames(`${prefixCls}__desc`) + + return ( + <div className="hi-rate__outter"> + <ul className={classnames(prefixCls, className)} style={{ ...style, color }} onMouseLeave={handleIconLeave}> {Array(iconCount) .fill() .map((_, idx) => { - const value = idx + 1 - const halfValue = idx + 0.5 + const indexValue = idx + 1 + const halfValue = allowHalf ? idx + 0.5 : indexValue return ( <ToolTipWrapper title={tooltips[idx]} key={idx}> <li className={starCls}> <div - className={classnames(iconHalfCls, `${iconHalfCls}--left`)} - onMouseEnter={() => this.handleIconEnter(halfValue)} - onMouseMove={() => this.handleIconEnter(halfValue)} - onClick={() => this.handleIconClick(halfValue)} - /> + className={classnames(iconHalfCls, `${iconHalfCls}--${vertical ? 'top' : 'left'}`, { + grayscale: vertical ? indexValue > currentValue : currentValue < halfValue + })} + onMouseEnter={() => handleIconEnter(vertical ? indexValue : halfValue)} + onMouseMove={() => handleIconEnter(vertical ? indexValue : halfValue)} + onClick={() => handleIconClick(vertical ? indexValue : halfValue)} + > + {renderIcon(indexValue)} + </div> + <div - className={classnames(iconHalfCls, `${iconHalfCls}--right`)} - onMouseEnter={() => this.handleIconEnter(value)} - onMouseMove={() => this.handleIconEnter(value)} - onClick={() => this.handleIconClick(value)} - /> - {this.renderIcon(value)} + className={classnames(iconHalfCls, `${iconHalfCls}--${vertical ? 'bottom' : 'right'}`, { + grayscale: vertical ? currentValue < halfValue : indexValue > currentValue + })} + onMouseEnter={() => handleIconEnter(vertical ? halfValue : indexValue)} + onMouseMove={() => handleIconEnter(vertical ? halfValue : indexValue)} + onClick={() => handleIconClick(vertical ? halfValue : indexValue)} + > + {renderIcon(indexValue)} + </div> </li> </ToolTipWrapper> ) })} </ul> - ) - } -} - -Rate.propTypes = { - useEmoji: PropTypes.bool, - clearable: PropTypes.bool, - allowHalf: PropTypes.bool, - className: PropTypes.string, - defaultValue: PropTypes.number, - disabled: PropTypes.bool, - style: PropTypes.object, - tooltips: PropTypes.arrayOf(PropTypes.string), - value: PropTypes.number, - count: PropTypes.number, - onChange: PropTypes.func + {descRender && <span className={descCls}>{descRender(hoverValue || value)}</span>} + </div> + ) } Rate.defaultProps = { @@ -136,36 +150,42 @@ Rate.defaultProps = { count: 5, prefixCls: 'hi-rate', tooltips: [], - onChange: () => { } + desc: [], + onChange: () => {}, + style: { + fontSize: 24 + }, + color: '#FFCA28', + vertical: false } -function ToolTipWrapper ({ children, title }) { +function ToolTipWrapper({ children, title }) { return title ? <ToolTip title={title}>{children}</ToolTip> : children } -function Icon ({ value, currentValue, disabled, useEmoji, allowHalf }) { +function Icon({ value, currentValue, disabled, useEmoji, allowHalf, character, renderCharacter, readOnly }) { + if (renderCharacter) { + return renderCharacter(currentValue, value) + } + if (character) { + return character + } if (useEmoji) { const emojiValue = currentValue > 5 ? 5 : currentValue - const Emojis = [ - Icons.EmojiOne, - Icons.EmojiTwo, - Icons.EmojiThree, - Icons.EmojiFour, - Icons.EmojiFive - ] + const Emojis = [Icons.EmojiOne, Icons.EmojiTwo, Icons.EmojiThree, Icons.EmojiFour, Icons.EmojiFive] if (value <= emojiValue) { return React.createElement(Emojis[emojiValue - 1]) } else { return <Icons.EmojiDefault /> } } + if (value <= currentValue) { return <Icons.StarActive /> } else if (value === currentValue + 0.5 && allowHalf) { - return disabled ? <Icons.StarHalfReadonly /> : <Icons.StarHalfActive /> + return disabled || readOnly ? <Icons.StarHalfReadonly /> : <Icons.StarHalfActive /> } else { - return disabled ? <Icons.StarDisable /> : <Icons.StarDefault /> + return disabled || readOnly ? <Icons.StarDisable /> : <Icons.StarDefault /> } } - export default Rate diff --git a/components/rate/index.d.ts b/components/rate/index.d.ts new file mode 100644 index 000000000..c4465fdeb --- /dev/null +++ b/components/rate/index.d.ts @@ -0,0 +1,18 @@ +interface Props { + clearable?: boolean + allowHalf?: boolean + useEmoji?: boolean + disabled?: boolean + count?: number + readOnly?: boolean + defaultValue?: number + value?: number + tooltips?: string[] + descRender?: (value: number, index: number) => JSX.Element + character?: string | JSX.Element + color?: string + characterRender?: (value: number, index: number) => JSX.Element + onChange?: (value: number) => void +} +declare const Rate: React.ComponentType<Props> +export default Rate diff --git a/components/rate/index.js b/components/rate/index.js index af3fdbcdf..a837784b6 100644 --- a/components/rate/index.js +++ b/components/rate/index.js @@ -1,5 +1,4 @@ import './style/index' import Rate from './Rate' -import { depreactedPropsCompat } from '../_util' -export default depreactedPropsCompat([['clearable', 'allowClear']])(Rate) +export default Rate diff --git a/components/rate/style/index.scss b/components/rate/style/index.scss index cd1bada15..b66a461b7 100644 --- a/components/rate/style/index.scss +++ b/components/rate/style/index.scss @@ -14,8 +14,6 @@ display: inline-block; transition: 0.3s ease; margin: 0 6px !important; - width: $w; - height: $h; &:active, &:hover { @@ -30,35 +28,76 @@ } } + &--readOnly { + cursor: auto; + + &:hover { + transform: none; + } + } + &__half { - height: 100%; width: 50%; display: inline-block; - position: absolute; z-index: 1; + &.grayscale { + filter: grayscale(100%); + } + &--wrapper { position: absolute; top: 0; left: 0; - height: $h; - width: $w; + } + + &--left { + width: 50%; + position: absolute; + z-index: 10; + overflow: hidden; } &--right { right: 0; + width: 100%; + } + + &--top { + height: 50%; + position: absolute; + z-index: 10; + width: 100%; + overflow: hidden; + } + + &--bottom { + top: 0; + width: 100%; + height: 100%; } } } + &__desc { + margin-left: 14px; + display: flex; + padding-top: 4px; + } + &__icon { display: inline-block; - width: 100%; - height: 100%; + width: $w; + height: $h; svg { - width: 100%; - height: 100%; + width: $w; + height: $h; } } + + &__outter { + display: flex; + flex-direction: row; + } } diff --git a/components/rich-text-editor/index.js b/components/rich-text-editor/index.js new file mode 100644 index 000000000..44caca3dd --- /dev/null +++ b/components/rich-text-editor/index.js @@ -0,0 +1,46 @@ +import React, { forwardRef } from 'react' +import classNames from 'classnames' + +import ReactQuill from 'react-quill' + +import Tooltip from '../tooltip' +import './style/index' + +const QuillBarTooltip = (props) => { + const { toolbarsName, tooltipTitle, children, showTooltip = true } = props + return ( + <span className="hi-quill-toolbar-tooltip"> + {showTooltip ? ( + <Tooltip className="hi-quill-toolbar" title={tooltipTitle || toolbarsName}> + {children || <button className={`ql-${toolbarsName}`} />} + </Tooltip> + ) : ( + <div className="hi-quill-toolbar hi-quill-custom"> + {children || <button className={`ql-${toolbarsName}`} />} + </div> + )} + </span> + ) +} +const InternalQuill = (props) => { + const { className, innerRef, theme } = props + + return ( + <ReactQuill + {...props} + ref={(el) => { + innerRef && (innerRef.current = el) + }} + className={classNames({ + 'hi-quill-content': !theme, + className + })} + /> + ) +} + +const RichTextEditor = forwardRef((props, ref) => { + return <InternalQuill {...props} innerRef={ref} /> +}) +export default RichTextEditor +export { QuillBarTooltip } diff --git a/components/rich-text-editor/style/index.js b/components/rich-text-editor/style/index.js new file mode 100644 index 000000000..67206756d --- /dev/null +++ b/components/rich-text-editor/style/index.js @@ -0,0 +1,4 @@ +import 'react-quill/dist/quill.snow.css' +import 'react-quill/dist/quill.bubble.css' +import 'react-quill/dist/quill.core.css' +import './index.scss' diff --git a/components/rich-text-editor/style/index.scss b/components/rich-text-editor/style/index.scss new file mode 100644 index 000000000..1bff4c17d --- /dev/null +++ b/components/rich-text-editor/style/index.scss @@ -0,0 +1,116 @@ +@import '../../core-css/index.scss'; + +.hi-quill-content, +.hi-quill-toolbar-tooltip { + .hi-quill-custom { + display: inline-block; + } + + .ql-toolbar, + .hi-quill-toolbar { + button, + .ql-color-picker { + width: 32px; + height: 32px; + border-radius: 2px; + text-align: center; + transition: all 0.3s; + line-height: 32px; + + &:hover { + background-color: use-color('primary-20'); + } + + svg { + float: none; + height: 16px; + } + } + + .ql-picker { + height: 32px; + line-height: 30px; + border-radius: 2px; + border: 1px solid transparent; + + &:focus { + outline: none; + } + + &-label:focus { + border-color: transparent; + outline: none; + } + + &.ql-expanded .ql-picker-label { + border-color: transparent; + } + + &:hover { + border: 1px solid use-color('primary'); + } + + &-options { + padding: 4px 0; + + .ql-picker-item { + &:hover { + background-color: use-color('primary-20'); + } + + &:focus { + outline: none; + } + } + } + } + + .ql-font, + .ql-size, + .ql-header { + .ql-picker-options { + .ql-picker-item { + padding-left: 8px; + padding-right: 8px; + } + } + } + + .ql-formats { + &::after { + content: '|'; + float: right; + margin-left: 15px; + color: use-color('gray-50'); + clear: none; + line-height: 32px; + } + } + } + + .hi-upload { + display: inline-block; + + button { + width: auto; + background-color: use-color('primary'); + color: use-color('white'); + padding: 4px 15px; + line-height: 22px; + + &:hover { + background-color: use-color('primary-60'); + color: use-color('white'); + } + } + } +} + +.hi-quill-toolbar-tooltip { + display: inline-block; + height: 32px; +} + +.ql-container { + min-height: 120px; +} diff --git a/components/search/index.d.ts b/components/search/index.d.ts new file mode 100644 index 000000000..4303b0823 --- /dev/null +++ b/components/search/index.d.ts @@ -0,0 +1,20 @@ +type Item = { + id: string | number + title: string | JSX.Element +} +interface DataItem extends Item{ + children?: Item[] +} +interface Props { + prepend?: string | JSX.Element + append?: JSX.Element + disabled?: boolean + loading?: boolean + placeholder?: string + data?: DataItem + onSearch?: (inputVal: string, item?: DataItem) => void + onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void + overlayClassName?: string +} +declare const Search: React.ComponentType<Props> +export default Search diff --git a/components/search/index.js b/components/search/index.js new file mode 100644 index 000000000..85000662c --- /dev/null +++ b/components/search/index.js @@ -0,0 +1,124 @@ +import React, { useState, useRef, useEffect, useCallback } from 'react' +import Input from '../input' +import Button from '../button' +import SearchDropdown from './searchDropdown' +import Provider from '../context' + +import './style' + +const prefixCls = 'hi-search' + +const Search = ({ + onChange, + onSearch, + style, + placeholder, + prepend, + disabled, + data, + value, + loading, + localeDatas, + overlayClassName, + append, + theme +}) => { + const [dropdownShow, setDropdownShow] = useState(false) + const searchInputContainer = useRef(null) + const [inputVal, setInputVal] = useState(value || '') + + useEffect(() => { + setInputVal(value) + }, [value]) + + const closeDropdown = () => { + setDropdownShow(false) + } + + const optionsClick = useCallback( + (value, item) => { + setInputVal(value) + setDropdownShow(false) + onSearch && onSearch(value, item) + }, + [onSearch] + ) + + return ( + <div className={prefixCls} style={style}> + <div className={`${prefixCls}_input`} ref={searchInputContainer}> + <Input + type="text" + value={inputVal} + style={style} + disabled={disabled} + placeholder={placeholder} + clearable="true" + prepend={prepend} + onKeyUp={(e) => { + const evt = window.event || e + if (evt.keyCode === 13) { + onSearch && onSearch(inputVal) + } + }} + onFocus={() => { + data && data.length > 0 && setDropdownShow(true) + }} + onChange={(e) => { + const { value } = e.target + setInputVal(value) + data && value.length > 0 && setDropdownShow(true) + onChange && onChange(value) + }} + /> + {append ? ( + <span + className={disabled ? 'disabled' : ''} + onClick={(e) => { + e.preventDefault() + setDropdownShow(true) + onSearch && onSearch(inputVal) + }} + > + {append} + </span> + ) : ( + <Button + type="default" + icon="search" + className={disabled ? 'disabled' : ''} + disabled={disabled} + onClick={(e) => { + e.preventDefault() + setDropdownShow(true) + onSearch && onSearch(inputVal) + }} + /> + )} + </div> + {data && ( + <SearchDropdown + prefixCls={prefixCls} + inputVal={inputVal} + overlayClassName={overlayClassName} + optionsClick={optionsClick} + onClickOutside={() => { + closeDropdown() + }} + data={data} + loading={loading} + dropdownShow={dropdownShow} + localeDatas={localeDatas} + theme={theme} + searchInputContainer={searchInputContainer} + /> + )} + </div> + ) +} + +Search.defaultProps = { + style: { width: 200 }, + loading: false +} +export default Provider(Search) diff --git a/components/search/searchDropdown.js b/components/search/searchDropdown.js new file mode 100644 index 000000000..8fe803490 --- /dev/null +++ b/components/search/searchDropdown.js @@ -0,0 +1,130 @@ +import React, { useRef, useEffect, useState, useCallback } from 'react' +import classNames from 'classnames' +import Popper from '../popper' +import Loading from '../loading' + +const SearchDropdown = ({ + data, + prefixCls, + optionsClick, + inputVal = '', + dropdownShow, + searchInputContainer, + localeDatas, + theme, + onClickOutside, + loading, + overlayClassName +}) => { + const popperDropdown = useRef(null) + const [dropdownData, setDropdownData] = useState(data) + + useEffect(() => { + setDropdownData(data) + }, [data]) + + const highlightKeyword = useCallback( + (title, uniqueKey) => { + const searchbarValue = String(inputVal) + let keyword = inputVal + keyword = searchbarValue.includes('[') ? keyword.replace(/\[/gi, '\\[') : keyword + keyword = searchbarValue.includes('(') ? keyword.replace(/\(/gi, '\\(') : keyword + keyword = searchbarValue.includes(')') ? keyword.replace(/\)/gi, '\\)') : keyword + + const parts = title.split(new RegExp(`(${keyword})`, 'gi')) + return inputVal && inputVal.length > 0 ? ( + <p key={uniqueKey} className="hi-search_dropdown--item__highlight"> + {parts.map((part) => + part === searchbarValue ? ( + <span key={uniqueKey} className="hi-search_dropdown--item__name-hightlight"> + {part} + </span> + ) : ( + part + ) + )} + </p> + ) : ( + title + ) + }, + [inputVal] + ) + const ItemChildren = useCallback( + (item) => { + return ( + <ul> + {item.children && + item.children.map((ele) => { + return ( + <li className={`${prefixCls}_dropdown--item`} style={{ padding: 0 }} key={ele.id}> + <span + className={`${prefixCls}_dropdown--item_normal`} + onClick={() => { + optionsClick(typeof ele.title === 'string' ? ele.title : ele.id, ele) + }} + > + {typeof ele.title === 'string' ? highlightKeyword(ele.title, ele.id) : ele.title} + </span> + </li> + ) + })} + </ul> + ) + }, + [highlightKeyword] + ) + + const DataSourceRender = useCallback( + (item) => { + const className = classNames(`${prefixCls}_dropdown--item_normal`, { + [`${prefixCls}_dropdown--item-title`]: item.children + }) + return ( + <li className={`${prefixCls}_dropdown--item`} key={item.id}> + <span + className={className} + onClick={() => { + optionsClick(typeof item.title === 'string' ? item.title : item.id, item) + }} + > + {typeof item.title === 'string' ? highlightKeyword(item.title, item.id) : item.title} + </span> + {item.children && ItemChildren(item)} + </li> + ) + }, + [highlightKeyword, ItemChildren] + ) + + const { searchEmptyResult } = localeDatas.search + return ( + <Popper + show={dropdownShow} + attachEle={searchInputContainer.current} + onClickOutside={onClickOutside} + overlayClassName={overlayClassName} + zIndex={1050} + topGap={5} + leftGap={0} + className={`${prefixCls}__popper`} + placement="top-bottom-start" + > + <Loading visible={loading}> + <div className={`${prefixCls}_dropdown theme__${theme}`} ref={popperDropdown}> + <ul className={`${prefixCls}_dropdown--items`}> + {dropdownData && dropdownData.length > 0 ? ( + dropdownData.map((item) => { + return DataSourceRender(item) + }) + ) : ( + <li className={`${prefixCls}_dropdown--item-nodata`}>{searchEmptyResult}</li> + )} + </ul> + </div> + </Loading> + </Popper> + ) +} + +export default SearchDropdown diff --git a/components/search/style/index.js b/components/search/style/index.js new file mode 100644 index 000000000..63810a681 --- /dev/null +++ b/components/search/style/index.js @@ -0,0 +1 @@ +import './index.scss' diff --git a/components/search/style/index.scss b/components/search/style/index.scss new file mode 100644 index 000000000..a31b74f85 --- /dev/null +++ b/components/search/style/index.scss @@ -0,0 +1,127 @@ +@import '../../core-css/index.scss'; +$search: 'hi-search' !default; + +.#{$search} { + display: inline-block; + + &_input { + display: flex; + + .hi-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + + &:hover { + .hi-btn { + border-left-color: transparent; + } + } + } + + .hi-btn { + border-left-color: transparent; + border-top-left-radius: 0; + border-bottom-left-radius: 0; + + &:hover:not(.disabled) { + border-color: use-color('primary'); + } + + &:focus { + box-shadow: none; + } + } + } + + .hi-icon.icon-search { + color: use-color('primary'); + } + + &_dropdown { + ul { + margin: 0; + padding: 0; + } + + li { + margin: 0; + list-style: none; + } + + p { + margin: 0; + padding: 0; + } + + width: 100%; + height: 252px; + font-size: 12px; + color: use-color('black'); + overflow-x: hidden; + overflow-y: auto; + background-color: use-color('white'); + box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); + border-radius: 2px; + box-sizing: border-box; + text-align: left; + margin-top: -4px; + + &--item { + flex: none; + display: block; + line-height: 36px; + margin: 0; + font-weight: 400; + cursor: pointer; + list-style: none; + transition: all 0.3s ease; + text-overflow: ellipsis; + white-space: nowrap; + + &_normal { + display: block; + line-height: 36px; + padding: 0 12px; + + &:hover:not(.hi-search_dropdown--item-title) { + background-color: use-color('primary-20'); + } + } + + &-title { + color: use-color('gray-50'); + font-size: 14px; + } + + &-history { + display: flex; + justify-content: space-between; + align-items: center; + padding: 0 12px; + color: use-color('gray-50'); + font-size: 14px; + } + + &-nodata { + height: 260px; + line-height: 260px; + text-align: center; + color: use-color('gray-50'); + font-size: 14px; + } + + &__name-hightlight { + color: use-color('primary'); + } + } + + &--more { + line-height: 36px; + margin: 0; + font-weight: 400; + cursor: pointer; + font-size: 12px; + text-align: center; + } + } +} diff --git a/components/select-tree/SelectTreeHook.js b/components/select-tree/SelectTreeHook.js new file mode 100644 index 000000000..806ca4c4a --- /dev/null +++ b/components/select-tree/SelectTreeHook.js @@ -0,0 +1,441 @@ +import React, { useState, useRef, useCallback, useEffect } from 'react' +import Tree from './components/tree' +import _ from 'lodash' +import Popper from '../popper' +import HiRequest from '../_util/hi-request' +import Icon from '../icon' + +import { + flattenNodesData, + getNode, + updateCheckData, + updateUnCheckData, + hasChildren, + parseDefaultSelectedItems, + parseCheckStatusData, + parseSelectedItems, + treeFilterByOriginalData, + parseExpandIds, + fillNodeEntries, + clearReturnData, + processSelectedIds +} from './components/tree/util' +import NavTree from './components/tree/NavTree' +import Trigger from './components/Trigger' +import Provider from '../context' + +const SelectTree = ({ + data, + dataSource, + type, + defaultExpandIds, + expandIds: expandIdsProps, + defaultExpandAll, + showCheckedMode, + defaultValue, + value, + onChange, + onExpand, + defaultLoadData, + clearable, + searchMode, + mode, + autoExpand, + overlayClassName, + theme, + localeDatas +}) => { + const selectedItemsRef = useRef() + const inputRef = useRef() + // select 中显示的数量 + const [showCount, setShowCount] = useState(1) + // panel show + const [show, setShow] = useState(false) + // panel status : empty normal loading + const [nodeDataState, setNodeDataState] = useState('normal') + // selected items + const [selectedItems, setSelectedItems] = useState([]) + // expand ids + const [expandIds, setExpandIds] = useState([]) + // 改造过后的数据 + const [nodeEntries, setNodeEntries] = useState({}) + // 选中的节点数据(checkable) + const [checkedNodes, setCheckedNodes] = useState({ + checked: [], + semiChecked: [] + }) + // 拉平的数据 + const [flattenData, setFlattenData] = useState([]) + // 关键字搜索值 + const [searchValue, setSearchValue] = useState('') + // 清空搜索值事件 + const clearSearchEvent = useCallback(() => { + setSearchValue('') + searchTreeNode('') + }, [flattenData]) + + // 搜索框的值改变时的事件 + const changeEvents = useCallback( + (e) => { + const val = e.target.value + setSearchValue(val) + searchTreeNode(val) + }, + [flattenData] + ) + // 根据传入的原始数据解析为拉平数据及改装数据 + useEffect(() => { + setStatus() + if (data) { + const result = flattenNodesData( + data, + defaultExpandIds, + defaultExpandAll, + type === 'multiple' && showCheckedMode !== 'ALL' + ) + setFlattenData(result.flattenData) + setNodeEntries(result.nodeEntries) + } + }, [data]) + // 依赖 flattenData & value 解析生成 checkedNodes 或 selectedItems + useEffect(() => { + if (flattenData.length > 0) { + if (type === 'multiple') { + const cstatus = parseCheckStatusData(defaultValue.length > 0 ? defaultValue : value, checkedNodes, flattenData) + if (cstatus) { + setCheckedNodes(cstatus) + } + } else { + const _selectedItems = parseDefaultSelectedItems(defaultValue.length > 0 ? defaultValue : value, flattenData) + setSelectedItems(_selectedItems) + } + } + }, [value, flattenData]) + // 当选中项发生改变时(以及首次解析完成默认值后),更改选中项 + useEffect(() => { + const _selectedItems = parseSelectedItems(checkedNodes, nodeEntries, showCheckedMode, flattenData) + setSelectedItems(_selectedItems) + }, [checkedNodes]) + + // 依赖展开项生成展开节点数据 + useEffect(() => { + if (flattenData.length > 0) { + const _expandIds = parseExpandIds(expandIdsProps, defaultExpandIds, flattenData) + setExpandIds((preExpandIds) => { + return (_expandIds || []).concat(preExpandIds || []) + }) + } + }, [expandIdsProps, flattenData]) + + useEffect(() => { + if (selectedItemsRef.current) { + const sref = selectedItemsRef.current + // 多选超过一行时以数字显示 + const referenceEls = sref.querySelectorAll('.hi-selecttree__selected--hidden span') + const wrapperWidth = sref.getBoundingClientRect() + let _width = 0 + let num = 0 + for (const el of referenceEls) { + const elRect = el.getBoundingClientRect() + _width += elRect.width + // 16 -- '+1' width + if (_width + 16 > wrapperWidth.width) { + break + } + num++ + } + setShowCount(num) + } + }, [selectedItems]) + + // 过滤方法 + const searchTreeNode = (val) => { + const matchNodes = [] + const _data = _.cloneDeep(flattenData) + if (searchMode === 'highlight') { + const filterArr = _data.map((node) => { + let _keyword = val + _keyword = val.includes('[') ? _keyword.replace(/\[/gi, '\\[') : _keyword + _keyword = val.includes('(') ? _keyword.replace(/\(/gi, '\\(') : _keyword + _keyword = val.includes(')') ? _keyword.replace(/\)/gi, '\\)') : _keyword + const reg = new RegExp(_keyword, 'gi') + const str = `<span style="color: var(--color-primary)">${val}</span>` + if (reg.test(node.title)) { + node._title = node.title.replace(reg, str) + matchNodes.push(node) + } + return node + }) + setFlattenData(filterArr) + let matchNodesSet = [] + matchNodes.forEach((mn) => { + matchNodesSet.push(mn.id) + matchNodesSet = matchNodesSet.concat(mn.ancestors || []) + }) + matchNodesSet = _.uniq(matchNodesSet) + setExpandIds(matchNodesSet) + } else if (searchMode === 'filter') { + const filterArr = treeFilterByOriginalData(data, val) + const filterData = flattenNodesData(filterArr).flattenData + let matchNodesSet = [] + filterData.forEach((mn) => { + matchNodesSet.push(mn.id) + matchNodesSet = matchNodesSet.concat(mn.ancestors || []) + }) + matchNodesSet = _.uniq(matchNodesSet) + setExpandIds(matchNodesSet) + setFlattenData(filterData) + } + } + + /** + * Clear button Event + */ + const handleClear = useCallback(() => { + setSelectedItems([]) + setExpandIds([]) + setCheckedNodes({ + checked: [], + semiChecked: [] + }) + }, []) + + /** + * set Pull Data status + */ + const setStatus = useCallback(() => { + if (data.length === 0) { + setNodeDataState(dataSource ? 'loading' : 'empty') + } else { + setNodeDataState('normal') + } + }, [data]) + /** + * Remote load Data + * @param {*} id click node's id + */ + const loadNodes = useCallback((id) => { + const _dataSource = typeof dataSource === 'function' ? dataSource(id || '') : dataSource + return HiRequest({ + ..._dataSource + }).then((res) => { + const nArr = res.data.map((n) => { + return { + ...n, + pId: id + } + }) + return nArr + }) + }, []) + /** + * 多选模式下复选框事件 + * @param {*} checked 是否被选中 + * @param {*} node 当前节点 + */ + const checkedEvents = (checked, node) => { + let result = {} + const semiCheckedIds = new Set(checkedNodes.semiChecked) + const checkedIds = new Set(checkedNodes.checked) + if (checked) { + result = updateCheckData(node, flattenData, checkedIds, semiCheckedIds) + } else { + result = updateUnCheckData(node, flattenData, checkedIds, semiCheckedIds) + } + setCheckedNodes({ + checked: result.checked, + semiChecked: result.semiChecked + }) + let checkedArr = [] + if (result.checked.length > 0) { + checkedArr = result.checked.map((id) => { + return getNode(id, flattenData) + }) + } + onChange( + processSelectedIds(result.checked, nodeEntries, showCheckedMode, flattenData), + clearReturnData(checkedArr), + clearReturnData(node) + ) + } + + /** + * 节点展开关闭事件 + * @param {*} bol 是否展开 + * @param {*} node 当前点击节点 + */ + const expandEvents = (node, state, callback = () => {}) => { + const _expandIds = [...expandIds] + const hasIndex = _expandIds.findIndex((id) => id === node.id) + if (hasIndex !== -1) { + _expandIds.splice(hasIndex, 1) + } else { + _expandIds.push(node.id) + } + setExpandIds(_expandIds) + if (hasChildren(node, flattenData)) { + // 如果包含节点,则不再拉取数据 + callback() + onExpand() + return + } + if (state) { + loadNodes(node.id).then((res) => { + if (res.length > 0) { + setFlattenData(flattenData.concat(flattenNodesData(res).flattenData)) + fillNodeEntries(node, nodeEntries, res) + } + // callback(res) + }) + onExpand() + } + } + + /** + * Node selected Event + */ + const selectedEvents = useCallback((node) => { + setSelectedItems([node]) + const n = clearReturnData(node) + onChange(node.id, n, n) + setShow(false) + }, []) + + /** + * Input 点击事件 + */ + const onTrigger = () => { + if (flattenData.length === 0 && defaultLoadData && (!data || data.length === 0 || dataSource) && !show) { + // data 为空 且 存在 dataSource 时,默认进行首次数据加载.defaultLoadData不暴露 + setNodeDataState('loading') + loadNodes() + .then((res) => { + if (res.length === 0) { + setNodeDataState('empty') + return + } + setNodeDataState('normal') + setFlattenData(flattenNodesData(res).flattenData) + fillNodeEntries(null, nodeEntries, res) + }) + .catch(() => { + setNodeDataState('empty') + }) + } + setShow(!show) + } + const searchable = searchMode === 'filter' || searchMode === 'highlight' + return ( + <div className={`theme__${theme}`}> + <Trigger + inputRef={inputRef} + selectedItemsRef={selectedItemsRef} + type={type} + showCount={showCount} + selectedItems={selectedItems} + clearable={clearable} + show={show} + checkedEvents={checkedEvents} + onTrigger={onTrigger} + onClear={handleClear} + /> + { + <Popper + show={show} + attachEle={inputRef.current} + width={false} + topGap={5} + overlayClassName={overlayClassName} + className={`hi-selecttree__popper ${data.length === 0 && dataSource ? 'hi-selecttree__popper--loading' : ''}`} + onClickOutside={() => setShow(false)} + > + <div className={`hi-selecttree__root theme__${theme} ${searchable ? 'hi-selecttree--hassearch' : ''}`}> + {searchable && mode !== 'breadcrumb' && ( + <div className="hi-selecttree__searchbar-wrapper"> + <div className="hi-selecttree__searchbar-inner"> + <Icon name="search" /> + <input + className="hi-selecttree__searchinput" + placeholder={localeDatas.selectTree.search} + clearable="true" + value={searchValue} + clearabletrigger="always" + onKeyDown={(e) => { + if (e.keyCode === '13') { + searchTreeNode(e.target.value) + } + }} + onChange={changeEvents} + /> + {searchValue.length > 0 ? ( + <i + className={`hi-icon icon-close-circle hi-selecttree_searchbar__icon-close`} + onClick={clearSearchEvent} + /> + ) : null} + </div> + </div> + )} + {mode === 'breadcrumb' ? ( + <NavTree + data={flattenData} + originData={data} + checkedNodes={checkedNodes} + selectedItems={selectedItems} + checkable={type === 'multiple'} + onCheck={checkedEvents} + autoExpand={autoExpand} + nodeDataState={nodeDataState} + onSelected={selectedEvents} + isRemoteLoadData={!!dataSource} + onExpand={expandEvents} + localeDatas={localeDatas} + /> + ) : ( + <Tree + data={flattenData} + originData={data} + expandIds={expandIds} + dataSource={dataSource} + loadDataOnExpand={false} + checkable={type === 'multiple'} + checkedNodes={checkedNodes} + selectedItems={selectedItems} + nodeDataState={nodeDataState} + onSearch={searchTreeNode} + // searchMode='highlight' + // defaultExpandIds={[]} + // defaultExpandAll + onExpand={expandEvents} + onClick={selectedEvents} + isRemoteLoadData={!!dataSource} + onCheck={checkedEvents} + /> + )} + </div> + </Popper> + } + {/* <NavTree data={data} /> */} + </div> + ) +} + +SelectTree.defaultProps = { + type: 'single', + defaultCheckedIds: [], + defaultValue: [], + value: [], + data: [], + clearable: true, + onChange: () => {}, + onExpand: () => {}, + checkable: false, + defaultLoadData: true, + showCheckedMode: 'PARENT', + defaultExpandAll: false, + defaultExpandIds: [], + expandIds: [], + mode: 'tree', + searchMode: null +} +export default Provider(SelectTree) diff --git a/components/select-tree/components/Trigger.jsx b/components/select-tree/components/Trigger.jsx new file mode 100644 index 000000000..50a9f5615 --- /dev/null +++ b/components/select-tree/components/Trigger.jsx @@ -0,0 +1,72 @@ +import React from 'react' +import classNames from 'classnames' + +const Trigger = ({ + inputRef, + type, + selectedItems, + onTrigger, + checkedEvents, + onClear, + showCount, + clearable, + show, + selectedItemsRef +}) => { + return ( + <div + ref={inputRef} + className={classNames( + 'hi-selecttree__input', + type !== 'multiple' && 'hi-selecttree__input--single', + selectedItems.length === 0 && 'hi-selecttree__input--placeholder' + )} + onClick={onTrigger} + > + <div className="hi-selecttree__selected-wrapper" ref={selectedItemsRef}> + <div className="hi-selecttree__selected--hidden"> + {selectedItems.map((node, index) => ( + <span key={index}>{node.title || ''}</span> + ))} + </div> + {selectedItems.length > 0 && + selectedItems.slice(0, showCount || 1).map((node, index) => { + return ( + <div key={index} className="hi-selecttree__selecteditem"> + <div className="hi-selecttree__selecteditem-name">{node ? node.title : ''}</div> + {type === 'multiple' && ( + <span + className="hi-selecttree__selecteditem-remove" + onClick={(e) => { + e.stopPropagation() + checkedEvents(false, node) + }} + > + <i className="hi-icon icon-close" /> + </span> + )} + </div> + ) + })} + {!!showCount && showCount < selectedItems.length && ( + <div> + +<span>{selectedItems.length - showCount}</span> + </div> + )} + </div> + + <span className="hi-selecttree__input-icon"> + <i + className={classNames(`hi-icon icon-${show ? 'up' : 'down'} hi-selecttree__input--expand`, { + clearable: clearable && selectedItems.length > 0 + })} + /> + {clearable && selectedItems.length > 0 && ( + <i className={`hi-icon icon-close-circle hi-selecttree__icon-close`} onClick={onClear} /> + )} + </span> + </div> + ) +} + +export default Trigger diff --git a/components/select-tree/components/tree/LoadingIcon.jsx b/components/select-tree/components/tree/LoadingIcon.jsx new file mode 100644 index 000000000..84346c230 --- /dev/null +++ b/components/select-tree/components/tree/LoadingIcon.jsx @@ -0,0 +1,32 @@ +import React from 'react' + +const IconLoading = (props) => { + const size = '0.8em' + const themeColor = { + orange: '#f63', + cyan: '#46bc99', + magenta: '#ff5975', + lavender: '#b450de', + blue: '#3da8f5', + purple: '#8a8acb' + } + return ( + <i className="hi-icon hi-btn--loading--icon"> + <svg + viewBox="0 0 18 18" + width={size} + height={size} + fill={themeColor[props.theme] ? themeColor[props.theme] : '#4284F5'} + > + <g> + <path + d="m9 18c-4.9706 0-9-4.0294-9-9 0-4.9706 4.0294-9 9-9 4.9706 0 9 4.0294 9 9 0 4.9706-4.0294 9-9 9zm0-2c3.866 0 7-3.134 7-7 0-3.866-3.134-7-7-7-3.866 0-7 3.134-7 7 0 3.866 3.134 7 7 7z" + opacity=".15" + /> + <path d="m15.547 2.8242c0.37904 0.40168 0.36068 1.0346-0.040996 1.4136-0.40168 0.37904-1.0346 0.36068-1.4136-0.040996-1.315-1.3935-3.1381-2.1969-5.0922-2.1969-3.866 0-7 3.134-7 7 0 0.55228-0.44772 1-1 1s-1-0.44772-1-1c0-4.9706 4.0294-9 9-9 2.5103 0 4.8578 1.0343 6.5468 2.8242z" /> + </g> + </svg> + </i> + ) +} +export default IconLoading diff --git a/components/select-tree/components/tree/NavTree.js b/components/select-tree/components/tree/NavTree.js new file mode 100644 index 000000000..9a17d7051 --- /dev/null +++ b/components/select-tree/components/tree/NavTree.js @@ -0,0 +1,155 @@ +import React, { useState, useRef, useEffect, useCallback } from 'react' +import Icon from '../../../icon' +import { getRootNodes, getChildrenNodes } from './util' +import classNames from 'classnames' +import Loading from '../../../loading' +import Checkbox from '../../../checkbox' + +const Bread = ({ datas, onClick, onReturnClick, localeDatas }) => { + const datasArr = Object.keys(datas) + datasArr.unshift(localeDatas.selectTree.back) + if (datasArr.length > 3) { + datasArr.splice(1, datasArr.length - 3, '...') + } + return ( + <div className="hi-breadtree__bread"> + {datasArr.map((item, index) => { + const cls = classNames( + 'hi-breadtree__bread-content', + datasArr.length > 3 && index === 1 && 'hi-breadtree__bread-content--normal' + ) + return ( + <React.Fragment key={index}> + <span + className={cls} + onClick={() => { + index === 0 + ? onReturnClick() + : ((datasArr.length === 4 && index !== 1) || datasArr.length < 4) && onClick(item) + }} + > + {item} + </span> + {index < datasArr.length - 1 && <Icon name="right" className="hi-breadtree__separator" />} + </React.Fragment> + ) + })} + </div> + ) +} +const NavTree = ({ + data, + checkable, + checkedNodes, + onCheck, + onSelected, + selectedItems, + autoExpand = true, + nodeDataState, + onExpand: expandProps, + localeDatas +}) => { + const expandData = useRef() + const [renderData, setRenderData] = useState([]) + const [fullBreadData, setFullBreadData] = useState({}) + const [loadingState, setLoadingState] = useState('normal') + const [currentNode, setCurrentNode] = useState(null) + + useEffect(() => { + setLoadingState(nodeDataState) + }, [nodeDataState]) + + useEffect(() => { + const roots = currentNode ? getChildrenNodes(currentNode, data) : getRootNodes(data) + setRenderData(roots) + }, [data]) + const onBreadClick = (title) => { + const node = fullBreadData[title] + setRenderData(getChildrenNodes(node, data)) + setFullBreadData((preData) => { + const keysArr = Object.keys(preData) + const delArr = keysArr.filter((_, index) => index > keysArr.indexOf(title)) + delArr.forEach((key) => { + delete preData[key] + }) + return preData + }) + } + const onReturnClick = useCallback(() => { + setLoadingState('normal') + setRenderData(getRootNodes(data)) + setFullBreadData({}) + }) + const onNodeClick = (node, children) => { + if (node.isLeaf) { + onSelected(node) + return + } + expandData.current = expandData.current ? expandData.current.concat([node]) : [].concat([node]) + setFullBreadData((preData) => { + return { + ...preData, + [node.title]: node + } + }) + setCurrentNode(node) + if (children.length > 0) { + setRenderData(children) + } else { + setRenderData([]) + setLoadingState('loading') + expandProps(node, true, (arg) => { + setLoadingState(arg.length > 0 ? 'normal' : 'empty') + }) + } + } + return ( + <div className="hi-breadtree__root"> + {Object.keys(fullBreadData).length > 0 && ( + <Bread datas={fullBreadData} localeDatas={localeDatas} onClick={onBreadClick} onReturnClick={onReturnClick} /> + )} + {loadingState === 'loading' && <Loading size="small" />} + <ul className="hi-breadtree__list"> + {loadingState === 'empty' ? ( + <li> + <span className="hi-select-tree--empty">empty</span> + </li> + ) : ( + renderData.map((node, index) => { + const children = getChildrenNodes(node, data) + const textCls = classNames( + 'hi-breadtree__text', + selectedItems.find((n) => n.id === node.id) && 'hi-breadtree__text--selected' + ) + return ( + <li key={index} className="hi-breadtree__item"> + {checkable && node.isLeaf ? ( + <Checkbox + indeterminate={checkedNodes.semiChecked.includes(node.id)} + checked={checkedNodes.checked.includes(node.id)} + onChange={(e) => onCheck(e.target.checked, node)} + > + <span className={textCls}>{node.title}</span> + </Checkbox> + ) : ( + <span + className={textCls} + onClick={() => { + onNodeClick(node, children) + }} + > + {node.title} + </span> + )} + {(children.length > 0 || !node.isLeaf) && ( + <Icon name={'right'} onClick={() => onNodeClick(node, children)} /> + )} + </li> + ) + }) + )} + </ul> + </div> + ) +} +export default NavTree diff --git a/components/select-tree/components/tree/TreeNode.jsx b/components/select-tree/components/tree/TreeNode.jsx new file mode 100644 index 000000000..8611980eb --- /dev/null +++ b/components/select-tree/components/tree/TreeNode.jsx @@ -0,0 +1,105 @@ +import React, { useContext, useRef, useCallback, useState } from 'react' +import Checkbox from '../../../checkbox' +import Icon from '../../../icon' +import Classnames from 'classnames' +import TreeContext from './context' +import IconLoading from './LoadingIcon' +import { getChildrenNodes } from './util' + +const Switcher = ({ expanded, node, onExpandEvent }) => { + const [loading, setLoading] = useState(false) + return loading ? ( + <IconLoading /> + ) : ( + <Icon + name={expanded ? 'caret-down' : 'caret-right'} + onClick={() => { + !expanded && setLoading(true) + onExpandEvent(node, !expanded, () => setLoading(false)) + }} + /> + ) +} + +const TreeNode = ({ data, flttenData }) => { + // 接受原始拉平数据,用于快速查找子元素 + const { + treeNodeRender, + checkable, + checkedNodes, + selectedItems, + onClick, + selectedId, + onCheckboxChange, + expandIds, + onExpandEvent, + isRemoteLoadData + } = useContext(TreeContext) + const treeNodeRef = useRef(null) + + const renderIndent = useCallback(() => { + return <span style={{ flex: '0 0 20px' }} /> + }, []) + + const renderCheckbox = useCallback( + (node, { checked, semiChecked }) => { + return ( + <Checkbox + indeterminate={semiChecked.includes(node.id)} + checked={checked.includes(node.id)} + onChange={(e) => { + onCheckboxChange(e.target.checked, node, { checked, semiChecked }) + }} + > + <span dangerouslySetInnerHTML={{ __html: node._title || node.title }} /> + </Checkbox> + ) + }, + [checkedNodes] + ) + + const renderTitle = useCallback((node, _selectedId) => { + const { id, title, _title } = node + return ( + <div + ref={treeNodeRef} + className={Classnames('hi-select-tree__title', { + 'hi-select-tree__title--selected': selectedItems.filter((s) => s.id === id).length > 0 + })} + onClick={() => { + onClick(node) + }} + dangerouslySetInnerHTML={{ __html: treeNodeRender ? treeNodeRender(_title || title) : _title || title }} + /> + ) + }, []) + return ( + <ul className="hi-select-tree__nodes"> + {data.map((node, index) => { + const childrenNodes = getChildrenNodes(node, flttenData) + const expand = expandIds.includes(node.id) + return ( + <React.Fragment key={index}> + <li className="hi-select-tree__node"> + <div className="hi-select-tree__node--self"> + {(childrenNodes.length || isRemoteLoadData) && !node.isLeaf ? ( + <Switcher expanded={expand} node={node} onExpandEvent={onExpandEvent} /> + ) : ( + renderIndent() + )} + {checkable ? renderCheckbox(node, checkedNodes) : renderTitle(node, selectedId)} + </div> + </li> + {childrenNodes.length > 0 && expand && ( + <li className="hi-select-tree__node"> + <TreeNode data={childrenNodes} flttenData={flttenData} /> + </li> + )} + </React.Fragment> + ) + })} + </ul> + ) +} + +export default TreeNode diff --git a/components/select-tree/components/tree/context.jsx b/components/select-tree/components/tree/context.jsx new file mode 100644 index 000000000..056b3bcc2 --- /dev/null +++ b/components/select-tree/components/tree/context.jsx @@ -0,0 +1,5 @@ +import React from 'react' + +const TreeContext = React.createContext() + +export default TreeContext diff --git a/components/select-tree/components/tree/index.jsx b/components/select-tree/components/tree/index.jsx new file mode 100644 index 000000000..72b6327c3 --- /dev/null +++ b/components/select-tree/components/tree/index.jsx @@ -0,0 +1,57 @@ +import React from 'react' +import Loading from '../../../loading' +import TreeNode from './TreeNode' +import TreeContext from './context' +import './style/index' +import { getRootNodes } from './util' + +const PREFIX = 'hi-select-tree' + +const Tree = ({ + data, + expandIds, + checkedNodes, + selectedItems, + treeNodeRender, + checkable, + editable, + editMenu, + onClick, + onCheck, + onExpand, + nodeDataState, + loadDataOnExpand, + isRemoteLoadData +}) => { + return ( + <TreeContext.Provider + value={{ + treeNodeRender, + checkable, + checkedNodes, + selectedItems, + editable, + editMenu, + PREFIX, + onClick, + onCheckboxChange: onCheck, + expandIds, + onExpandEvent: onExpand, + loadDataOnExpand, + isRemoteLoadData + }} + > + <div className={`${PREFIX}`}> + {nodeDataState === 'loading' && <Loading size="small" />} + {nodeDataState === 'empty' && <span className="hi-select-tree--empty">empty</span>} + {nodeDataState === 'normal' && <TreeNode data={getRootNodes(data)} flttenData={data} />} + </div> + </TreeContext.Provider> + ) +} + +Tree.defaultProps = { + onExpand: () => {}, + loadDataOnExpand: false +} +export default Tree diff --git a/components/select-tree/components/tree/style/index.js b/components/select-tree/components/tree/style/index.js new file mode 100644 index 000000000..63810a681 --- /dev/null +++ b/components/select-tree/components/tree/style/index.js @@ -0,0 +1 @@ +import './index.scss' diff --git a/components/select-tree/components/tree/style/index.scss b/components/select-tree/components/tree/style/index.scss new file mode 100644 index 000000000..5867d61a1 --- /dev/null +++ b/components/select-tree/components/tree/style/index.scss @@ -0,0 +1,144 @@ +@import '../../../../core-css/index.scss'; +$tree: 'hi-select-tree' !default; + +.#{$tree} { + color: use-color('black'); + padding: 12px 12px 0 12px; + box-sizing: border-box; + height: 100%; + overflow: auto; + + &--empty { + margin-left: 50%; + margin-top: 45%; + display: inline-block; + transform: translate(-50%, 0); + } + + &__nodes { + list-style-type: none; + padding: 0; + margin: 0; + } + + &__node { + .hi-btn--loading--icon { + margin-top: -8px; + } + + ul { + padding: 0 16px; + } + + &--self { + display: flex; + align-items: center; + cursor: pointer; + margin-bottom: 12px; + + .hi-checkbox { + white-space: nowrap; + } + + .icon-check { + color: use-color('primary'); + } + } + + .hi-icon { + cursor: pointer; + font-size: 16px; + margin-right: 4px; + } + } + + &__title { + height: 24px; + line-height: 24px; + text-align: left; + white-space: nowrap; + padding: 0 4px; + border-radius: 2px; + + &:hover { + color: #383e47; + background-color: use-color('primary-10'); + } + + &--selected { + color: use-color('primary'); + + &:hover { + color: use-color('primary'); + } + } + } +} + +.hi-breadtree { + &__root { + height: 100%; + width: 100%; + display: flex; + flex-direction: column; + } + + &__list { + margin: 0; + padding: 0 12px; + } + + &__item { + list-style: none; + height: 36px; + display: flex; + align-items: center; + cursor: pointer; + } + + &__text { + flex: 1; + + &--selected { + color: use-color('primary'); + } + } + + &__bread { + display: flex; + flex-wrap: nowrap; + justify-content: flex-start; + height: 36px; + align-items: center; + padding: 0 12px; + background: rgba(247, 247, 247, 1); + font-size: 14px; + flex: none; + } + + &__separator { + margin: 2px 4px 0; + } + + &__bread-content { + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + margin: 0 4px; + + &:first-child { + cursor: pointer; + margin-left: 0; + flex: 0 0 auto; + } + + &:hover:not(:last-child) { + color: use-color('primary'); + cursor: pointer; + } + + &--normal { + flex: 0 0 auto; + } + } +} diff --git a/components/select-tree/components/tree/util.js b/components/select-tree/components/tree/util.js new file mode 100644 index 000000000..0ef85bbf1 --- /dev/null +++ b/components/select-tree/components/tree/util.js @@ -0,0 +1,364 @@ +import _ from 'lodash' +// 根据 ID 获取节点 +export const getNode = (id, data) => { + return data.find((n) => n.id === id) +} +// 根据 title 获取节点 +export const getNodeByTitle = (title, data) => { + return data.find((n) => n.title === title) +} +// 根据 id || title 获取节点 +export const getNodeByIdTitle = (val, data) => { + return data.find((n) => n.title === val || n.id === val) +} +// 获取指定节点的兄弟节点 +export const getSibilingsNodes = (node, data) => { + return data.filter((n) => n.pId === node.pId) +} + +// 获取指定节点的父节点 +export const getParentNode = (node, data) => { + return data.find((n) => n.id === node.pId) +} +// 获取指定节点的直接子节点 +export const getChildrenNodes = (node, data) => { + return data.filter((n) => n.pId === node.id) +} +// 获取根节点 +export const getRootNodes = (data) => { + return data.filter((n) => !n.pId) +} +// 获取指定节点的所有后代节点 +export const getDescendantNodes = (node, data, arr = []) => { + const children = getChildrenNodes(node, data) + if (children.length > 0) { + children.forEach((n) => { + arr.push(n) + if (!n.isLeaf) { + getDescendantNodes(n, data, arr) + } + }) + } + return arr +} + +export const hasChildren = (node, data) => { + let bol = false + for (let i = 0; i < data.length; i++) { + if (data[i].pId === node.id) { + bol = true + break + } + } + return bol +} +// 移除指定节点的所有后代节点 +export const removeDescendantNodes = (node, data) => { + const descs = getDescendantNodes(node, data) + descs.map((d) => d.id) + data.filter((n) => descs.forEach()) +} +// 获取指定节点的所有祖先节点 +export const getAncestorsNodes = (node, data, arr = []) => { + const firstParentNode = getParentNode(node, data) + if (firstParentNode) { + arr.push(firstParentNode) + getAncestorsNodes(firstParentNode, data, arr) + } + return arr +} + +/** + * 处理选中数据 + * @param {*} node 当前节点 + * @param {*} data 拉平数据 + * @param {*} checkedIds 选中 IDS + * @param {*} semiCheckedIds 半选 IDS + */ +export const updateCheckData = (node, data, checkedIds, semiCheckedIds) => { + const children = getDescendantNodes(node, data) + const ancestors = node.pId ? getAncestorsNodes(node, data) : [] + children.forEach((child) => { + checkedIds.add(child.id) + semiCheckedIds.delete(child.id) + }) + semiCheckedIds.delete(node.id) + checkedIds.add(node.id) + ancestors.forEach((ancestor) => { + const chi = getChildrenNodes(ancestor, data).map((c) => c.id) + const ins = _.intersection(chi, [...checkedIds]) + if (ins.length === chi.length) { + checkedIds.add(ancestor.id) + semiCheckedIds.delete(ancestor.id) + } else { + semiCheckedIds.add(ancestor.id) + } + }) + return { + checked: [...checkedIds], + semiChecked: [...semiCheckedIds] + } +} + +/** + * 处理取消选中数据 + * @param {*} node 当前节点 + * @param {*} data 拉平数据 + * @param {*} checkedIds 选中 IDS + * @param {*} semiCheckedIds 半选 IDS + */ +export const updateUnCheckData = (node, data, checkedIds, semiCheckedIds) => { + const children = getDescendantNodes(node, data) + const ancestors = node.pId ? getAncestorsNodes(node, data) : [] + checkedIds.delete(node.id) + ancestors.forEach((ancestor) => { + checkedIds.delete(ancestor.id) + semiCheckedIds.add(ancestor.id) + const chi = getChildrenNodes(ancestor, data).map((c) => c.id) + const ins = _.intersection(chi, [...checkedIds, ...semiCheckedIds]) + if (ins.length === 0) { + checkedIds.delete(ancestor.id) + semiCheckedIds.delete(ancestor.id) + } + }) + + children.forEach((child) => { + checkedIds.delete(child.id) + }) + return { + checked: [...checkedIds], + semiChecked: [...semiCheckedIds] + } +} + +/** + * 处理选中的回显数据 + * @param {*} checkedIds 当前所有被选中的节点 ID 集合 + * @param {*} nodeEntries 所有数据的Map 集合 + * @param {*} type 数据回显方式 + */ +export const processSelectedIds = (checkedIds, nodeEntries, type, flattenData) => { + const keySet = new Set(checkedIds) + if (type === 'CHILD') { + return checkedIds.filter((id) => { + const entity = nodeEntries[id] + if (entity) { + let children = [] + if (entity.children && entity.children.length > 0) { + children = entity.children + } else { + // 当异步加载数据后,集合中不存在 children,根据节点取 children + children = getChildrenNodes(entity, flattenData) + } + if (children.length === 0) { + return true + } + if (children.every((node) => keySet.has(node.id))) { + return false + } + } + return true + }) + } + if (type === 'PARENT') { + return checkedIds.filter((id) => { + const entity = nodeEntries[id] + const parent = entity ? entity.parent : null + if (parent && keySet.has(parent.id)) { + return false + } + return true + }) + } + return checkedIds +} + +/** + * 生成展开数据 + * @param {*} expandIds 受控展开节点 IDS + * @param {*} defaultExpandIds 非受控展开节点 IDS + * @param {*} flattenData 拉平数据 + */ +export const parseExpandIds = (expandIds, defaultExpandIds, flattenData) => { + const ids = defaultExpandIds.length > 0 ? defaultExpandIds : expandIds + let arr = [] + ids.forEach((id) => { + const node = getNode(id, flattenData) + if (node) { + arr.push(node.id) + node.ancestors && node.ancestors.length > 0 && (arr = arr.concat(node.ancestors)) + } + }) + return [...new Set(arr)] +} +/** + * 将数据拉平为 pId 类数据 + * @param {*} data 原始数据 + * @param {*} defaultExpandIds 默认展开节点 + * @param {*} defaultExpandAll 是否默认展开全部节点 + * @param {*} isGenEntries 是否生成 map 集合(当多选且数据回显方式不等于 ALL 时) + */ +export const flattenNodesData = (data, isGenEntries = false) => { + const flattenData = [] + const nodeEntries = {} + const fun = (datas, newArr, parent = {}) => { + datas = _.cloneDeep(datas) + datas.forEach((node) => { + const pId = parent.id + node.pId = pId + if (pId) { + const arr = parent.ancestors ? [...parent.ancestors] : [] + arr.unshift(pId) + node.ancestors = arr + } + const _children = node.children + newArr.push(node) + isGenEntries && + (nodeEntries[node.id] = { + ...node, + parent + }) + if (_children) { + fun(_children, newArr, node) + delete node.children + } else { + node.isLeaf = node.hasOwnProperty('isLeaf') ? node.isLeaf : true + } + }) + } + fun(data, flattenData) + return { + flattenData, + nodeEntries + } +} + +export const fillNodeEntries = (parentNode, currentNodeEntries, newData) => { + newData.forEach((nd) => { + nd.parent = parentNode + currentNodeEntries[nd.id] = nd + }) + return currentNodeEntries +} +/** + * 根据 defaultValue 解析默认选中项(自动勾选) + * 2020.06.28 暂停「不含在数据中」的默认值,会引起诸多副作用 + * defaultValue: + * [id, ...] | [title, ...] | [{id: ..}] | [{id: ..., title: ...}] + * 匹配原则: 如果值不符合 {id, title},会优先从现有数据中匹配 id 或 title,如匹配成功,取 node 做为已选中,如无匹配 则跳过 + * 如同时包含{id, title},从现有数据中匹配对应数据,如有,取 node 做为已选中,如无匹配,则直接使用该值,与现有数据无关联 + */ +export const parseDefaultSelectedItems = (defaultValue, flattenData) => { + const defaultNodes = [] + if (typeof defaultValue === 'string' || typeof defaultValue === 'number') { + const node = getNodeByIdTitle(defaultValue, flattenData) + node && defaultNodes.push(node) + } else if (defaultValue instanceof Array) { + defaultValue.forEach((val) => { + let node + if (typeof val !== 'object') { + // [0, 'x'] + node = getNodeByIdTitle(val, flattenData) + } else { + // if (val.id && val.title) { + // // [{id: '', title: ''}] + // node = getNode(val.id, flattenData) || val + // } else { + node = getNodeByIdTitle(val.id || val.title, flattenData) + // } + } + node && defaultNodes.push(node) + }) + } + return defaultNodes +} + +/** + * 根据 defaultCheckedIds 解析全选/半选数据 + * @param {*} selectedItems 已选中选项 + */ +export const parseCheckStatusData = (value, checkedNodes, flattenData) => { + value = value.concat(checkedNodes.checked) + const selectedItems = parseDefaultSelectedItems([...new Set(value)], flattenData) + const semiCheckedIds = new Set(checkedNodes.semiChecked) + const checkedIds = new Set(checkedNodes.checked) + semiCheckedIds.clear() + checkedIds.clear() + let isUpdate = false + selectedItems.forEach((node) => { + isUpdate = true + updateCheckData(node, flattenData, checkedIds, semiCheckedIds) + }) + if (isUpdate) { + return { + checked: [...checkedIds], + semiChecked: [...semiCheckedIds] + } + } + return null +} + +/** + * 根据数据回显方式设定显示的数据 + * @param {*} checkIds 当前选中的节点 ID 集合 + */ +export const parseSelectedItems = (checkedNodes, nodeEntries, showCheckedMode, flattenData) => { + const keys = processSelectedIds(checkedNodes.checked, nodeEntries, showCheckedMode, flattenData) + return keys.map((id) => getNode(id, flattenData)) +} + +/** + * 匹配值替换为高亮项 + * @param {*} val 搜索关键字 + * @param {*} text 节点 title + */ +export const matchFilterKey = (val, text = '') => { + const reg = new RegExp(val, 'gi') + const str = `<span style="color: #428ef5">${val}</span>` + if (reg.test(text)) { + text = text.replace(reg, str) + return text + } + return null +} + +/** + * 树节点过滤(根据原始数据) + * @param {*} data 原始数据 + * @param {*} filterVal 过滤值 + */ +export const treeFilterByOriginalData = (data, filterVal) => { + const nodes = _.cloneDeep(data) + if (!(nodes && nodes.length)) { + return + } + const newChildren = [] + for (const node of nodes) { + const matchResult = matchFilterKey(filterVal, node.title) + if (matchResult) { + newChildren.push(node) + } else { + const subs = treeFilterByOriginalData(node.children, filterVal) + if ((subs && subs.length) || matchResult) { + node.children = subs + newChildren.push(node) + } + } + } + return newChildren +} + +export const clearReturnData = (arg) => { + arg = _.cloneDeep(arg) + if (arg instanceof Array) { + arg = arg.map((node) => { + delete node.ancestors + delete node.pId + return node + }) + } else { + delete arg.ancestors + delete arg.pId + } + return arg +} diff --git a/components/select-tree/index.d.ts b/components/select-tree/index.d.ts new file mode 100644 index 000000000..26b3b1aab --- /dev/null +++ b/components/select-tree/index.d.ts @@ -0,0 +1,41 @@ +import { CSSProperties } from "react" + +type DataItem = { + id: string | number + title: string + children?: DataItem[] +} +type DataSource = { + url: string + type?: 'get' | 'post' + data?: object + params?: object + headers?: object + mode?: 'same-origin' | 'cors' | 'no-cors' | 'navigate' + transformResponse?: (response: object) => DataItem[] +} +type FieldNames = { + id?: string + title?: string + disabled?: string + children?: string +} +const DataSourFun: (keyword: string) => DataSource +const FilterOptionFun: (keyword: string, item: DataItem) => boolean +interface Props { + type?: 'single' | 'multiple' + data?: DataItem[] + showCheckedMode?: 'ALL' | 'PARENT' | 'CHILD' + mode?: 'normal' | 'breadcrumb' + defaultExpandAll?: boolean + defaultExpandIds?: string[] | number[] + expandIds?: string[] | number[] + dataSource?: DataSource | DataSourFun + value?: DataItem[] | string[] | number[] + defaultValue?: DataItem[] | string[] | number[] + searchMode?: 'highlight' | 'filter' + onChange?: (selectedIds: string[], changedItem: DataItem) => void + overlayClassName?: string +} +declare const SelectTree: React.ComponentType<Props> +export default SelectTree diff --git a/components/select-tree/index.js b/components/select-tree/index.js new file mode 100644 index 000000000..8e5662c6c --- /dev/null +++ b/components/select-tree/index.js @@ -0,0 +1,4 @@ +import SelectTreeHook from './SelectTreeHook' +import './style/index' + +export default SelectTreeHook diff --git a/components/select-tree/style/index.js b/components/select-tree/style/index.js new file mode 100644 index 000000000..63810a681 --- /dev/null +++ b/components/select-tree/style/index.js @@ -0,0 +1 @@ +import './index.scss' diff --git a/components/select-tree/style/index.scss b/components/select-tree/style/index.scss new file mode 100644 index 000000000..323a7aa50 --- /dev/null +++ b/components/select-tree/style/index.scss @@ -0,0 +1,172 @@ +@import '../../core-css/index.scss'; + +.hi-selecttree { + &__input { + width: 320px; + height: 32px; + line-height: 32px; + border: 1px solid use-color('gray-30'); + box-sizing: border-box; + border-radius: 2px; + text-align: left; + padding: 0 0 0 12px; + background-color: use-color('white'); + color: use-color('black'); + display: inline-flex; + justify-content: space-between; + + &:hover { + border: 1px solid use-color('primary'); + + .hi-selecttree__input--expand.clearable { + display: none; + } + + .hi-selecttree__icon-close { + display: block; + } + + .hi-selecttree__icon-close:hover { + color: use-color('black'); + } + } + + &--single { + .hi-selecttree__selecteditem { + background: none; + padding-left: 0; + } + } + + &--placeholder { + color: use-color('gray-50'); + } + + &-icon { + margin: 0 12px; + cursor: pointer; + } + } + + &__selected-wrapper { + flex: 1 0 80%; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + display: flex; + align-items: center; + } + + &__icon-close { + color: use-color('gray-50'); + display: none; + } + + &__selected { + &--hidden { + visibility: hidden; + position: absolute; + z-index: -1; + + span { + padding: 0 16px; + } + } + } + + &__selecteditem { + flex: 0 0 auto; + position: relative; + height: 22px; + line-height: 22px; + padding: 0 20px 0 10px; + margin: 0 2px; + overflow: hidden; + vertical-align: middle; + background-color: use-color('gray-10'); + border-radius: 2px; + text-align: left; + box-sizing: border-box; + + &-name { + font-size: 13px; + display: inline-block; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + max-width: 100%; + } + + &-remove { + cursor: pointer; + display: inline-block; + font-size: 12px; + position: absolute; + top: 0; + right: 4px; + padding: 0 0 0 8px; + } + } + + &__popper { + background: use-color('white'); + box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.15); + border-radius: 2px; + max-height: 300px; + overflow: auto; + width: 320px; + + &--loading { + height: 300px; + } + } + + &__root { + font-size: 14px; + width: 100%; + height: 100%; + overflow: hidden; + position: relative; + } + + &--hassearch { + padding: 8px 0 0 0; + } + + &__searchbar-wrapper { + background-color: use-color('white'); + width: 100%; + padding: 0 12px; + box-sizing: border-box; + } + + &__searchbar-inner { + height: 36px; + border-bottom: 1px solid use-color('gray-30'); + box-sizing: border-box; + display: flex; + align-items: center; + padding: 0 2px; + + .hi-selecttree_searchbar__icon-close { + color: use-color('gray-50'); + cursor: pointer; + } + + .hi-selecttree_searchbar__icon-close:hover { + color: use-color('black'); + } + } + + &__searchinput { + width: 100%; + height: 100%; + border: none; + outline: none; + padding: 0 10px; + } + + &__panel { + padding: 12px; + } +} diff --git a/components/select/MultipleInput.js b/components/select/MultipleInput.js new file mode 100644 index 000000000..e5ab25af1 --- /dev/null +++ b/components/select/MultipleInput.js @@ -0,0 +1,130 @@ +import React, { useState, useEffect, useRef } from 'react' +import classNames from 'classnames' +import _ from 'lodash' + +import { transKeys } from './utils' + +const MultipleInput = ({ + placeholder, + selectedItems: propsSelectItem, + dropdownShow, + cacheSelectItem, + disabled, + searchable, + clearable, + multipleMode = 'nowrap', + onFocus, + theme, + onBlur, + onClick, + onClickOption, + onClear, + handleKeyDown, + fieldNames, + isFocus +}) => { + const icon = dropdownShow ? 'up' : 'down' + const [showCount, setShowCount] = useState(0) + const tagWrapperRef = useRef('') + const calShowCountFlag = useRef(true) // 在渲染完成进行测试是否展示 +1 + + useEffect(() => { + if (multipleMode === 'nowrap' && calShowCountFlag.current && tagWrapperRef.current) { + // 多选超过一行时以数字显示 + const tagWrapperRect = tagWrapperRef.current.getBoundingClientRect() + let width = 0 + let showCountIndex = 0 // 在第几个开始显示折行 + const tags = tagWrapperRef.current.querySelectorAll('.hi-select__input--item') + tags.forEach((tag, index) => { + const tagRect = tag.getBoundingClientRect() + width += tagRect.width + if (width + 90 > tagWrapperRect.width) { + // 50是留给显示剩余选项的空间 + calShowCountFlag.current = false + showCountIndex = index + } + }) + !calShowCountFlag.current && setShowCount(showCountIndex) + } else { + calShowCountFlag.current = true + } + }) + + const handleClear = (e) => { + e.stopPropagation() + onClear() + } + const selectedItems = _.uniqBy(cacheSelectItem.concat(propsSelectItem), transKeys(fieldNames, 'id')) + const currentCount = showCount === 0 ? selectedItems.length : showCount + return ( + <div + className={classNames( + 'hi-select__input', + 'multiple-values', + `theme__${theme}`, + { + disabled + }, + { + 'hi-select__input__focus': isFocus + } + )} + ref={tagWrapperRef} + onClick={onClick} + > + {selectedItems.length === 0 && <div className="hi-select__input--placeholder">{placeholder}</div>} + <div + className={classNames('hi-select__input-items', { + 'hi-select__input-items--all': multipleMode === 'wrap' + })} + > + {selectedItems.slice(0, currentCount).map((item, index) => { + const _item = ( + <div + key={index} + className="hi-select__input--item" + style={{ + maxWidth: tagWrapperRef.current + ? (tagWrapperRef.current.getBoundingClientRect().width - 90) * 0.8 + : '80%' + }} + > + <div className="hi-select__input--item__name">{item[transKeys(fieldNames, 'title')]}</div> + <span + className="hi-select__input--item__remove" + onClick={(e) => { + e.stopPropagation() + onClickOption(item, 0) + }} + > + <i className="hi-icon icon-close" /> + </span> + </div> + ) + return _item + })} + {currentCount < selectedItems.length && ( + <div className="hi-select__input-items--left"> + +<span className="hi-select__input-items--left-count">{selectedItems.length - currentCount}</span> + </div> + )} + {searchable && !disabled && ( + <div className="hi-select__input--search"> + <input type="text" onKeyDown={handleKeyDown} onFocus={onFocus} onBlur={onBlur} readOnly /> + </div> + )} + </div> + <span className="hi-select__input--icon"> + <i + className={classNames(`hi-icon icon-${icon} hi-select__input--icon__expand`, { + clearable: clearable && selectedItems.length > 0 + })} + /> + {clearable && selectedItems.length > 0 && ( + <i className={`hi-icon icon-close-circle hi-select__input--icon__close`} onClick={handleClear} /> + )} + </span> + </div> + ) +} +export default MultipleInput diff --git a/components/select/Select.js b/components/select/Select.js index 0561484af..74e6c1ae1 100644 --- a/components/select/Select.js +++ b/components/select/Select.js @@ -1,664 +1,504 @@ -import React, { Component } from 'react' -import ReactDOM from 'react-dom' +import React, { useState, useEffect, useRef, forwardRef, useCallback } from 'react' import classNames from 'classnames' -import PropTypes from 'prop-types' -import debounce from 'lodash/debounce' -import cloneDeep from 'lodash/cloneDeep' +import _ from 'lodash' + import Popper from '../popper' import SelectInput from './SelectInput' import SelectDropdown from './SelectDropdown' import Provider from '../context' -import fetchJsonp from 'fetch-jsonp' -import qs from 'qs' -import _ from 'lodash' - -class Select extends Component { - autoloadFlag = true // 第一次自动加载数据标识 - - static propTypes = { - type: PropTypes.oneOf(['single', 'multiple']), - multipleWrap: PropTypes.oneOf(['wrap', 'nowrap']), - data: PropTypes.array, - dataSource: PropTypes.oneOfType([ - PropTypes.object, - PropTypes.func - ]), - defaultValue: PropTypes.oneOfType([ - PropTypes.string, - PropTypes.array, - PropTypes.bool, - PropTypes.number - ]), - value: PropTypes.oneOfType([ - PropTypes.string, - PropTypes.array, - PropTypes.bool, - PropTypes.number - ]), - showCheckAll: PropTypes.bool, - autoload: PropTypes.bool, - withCredentials: PropTypes.bool, - searchable: PropTypes.bool, - filterOption: PropTypes.func, - clearable: PropTypes.bool, - disabled: PropTypes.bool, - placeholder: PropTypes.string, - emptyContent: PropTypes.string, - optionWidth: PropTypes.number, - style: PropTypes.object, - onChange: PropTypes.func, - render: PropTypes.func, - open: PropTypes.bool - } - - static defaultProps = { - data: [], - type: 'single', - multipleWrap: 'nowrap', - disabled: false, - clearable: true, - defaultValue: '', - autoload: false, - showCheckAll: false, - open: true, - withCredentials: false, - onClick: () => {}, - onBlur: () => {}, - onFocus: () => {} - } - - constructor (props) { - super(props) - - const { data, value, defaultValue } = props - const dropdownItems = cloneDeep(data) - const initialValue = value === undefined ? defaultValue : value - const selectedItems = this.resetSelectedItems( - initialValue, - dropdownItems, - [] +import HiRequest from '../_util/hi-request' +import { resetSelectedItems, transKeys } from './utils' + +const InternalSelect = (props) => { + const { + data, + type, + showCheckAll, + showJustSelected, + className, + disabled, + clearable, + style, + children, + optionWidth, + render, + multipleWrap, + onBlur, + onFocus, + dataSource, + filterOption, + theme, + localeDatas, + preventOverflow, + placement, + onChange: propsonChange, + value, + defaultValue, + autoload, + searchable: propsSearchable, + fieldNames, + overlayClassName, + setOverlayContainer + } = props + const selectInputContainer = useRef() + const [dropdownItems, setDropdownItems] = useState(data) + const [focusedIndex, setFocusedIndex] = useState(0) + const [isFocus, setIsFouces] = useState(false) + // 存储问题 + const [cacheSelectItem, setCacheSelectItem] = useState([]) + + // value 有可能是0的情况 + const [selectedItems, setSelectedItems] = useState( + resetSelectedItems(value === undefined ? defaultValue : value, _.cloneDeep(data), transKeys(fieldNames, 'id')) + ) + + const [dropdownShow, setDropdownShow] = useState(false) + // 搜索关键字 + const [keyword, setKeyword] = useState('') + const [loading, setLoading] = useState(false) + const [searchable, setSearchable] = useState(dataSource ? true : propsSearchable) + useEffect(() => { + // 处理默认值的问题 + const selectedItems = resetSelectedItems( + value === undefined ? defaultValue : value, + _.uniqBy(cacheSelectItem.concat(dropdownItems), transKeys(fieldNames, 'id')), + transKeys(fieldNames, 'id') ) - - const searchable = this.getSearchable() - this.debouncedFilterItems = debounce(this.onFilterItems.bind(this), 300) - this.clickOutsideHandel = this.clickOutside.bind(this) - - this.state = { - searchable, - queryLength: 1, - focusedIndex: 0, - selectedItems, - cacheSelectedItems: selectedItems, - dropdownItems, - dropdownShow: false, - fetching: false, - keyword: '', - filterText: '', - searchInput: { - width: 2 - } - } - } - - getChildContext () { - return { - component: this - } - } - - componentWillMount () { - if (this.isRemote() && this.props.autoload) { - this.remoteSearch() - } - } - - componentDidMount () { - window.addEventListener('click', this.clickOutsideHandel) - this.resetFocusedIndex() - } - - componentWillUnmount () { - window.removeEventListener('click', this.clickOutsideHandel) - } - - clickOutside (e) { - const selectInput = ReactDOM.findDOMNode(this.selectInput) - if ((selectInput && selectInput.contains(e.target)) || (e.target.tagName === 'INPUT' && e.target.className.includes('hi-select__dropdown__searchbar--input'))) { - return - } - this.hideDropdown() - } - - componentWillReceiveProps (nextProps) { - if (!_.isEqual(nextProps.data, this.props.data)) { - const selectedItems = this.resetSelectedItems( - nextProps.value || this.state.selectedItems, - nextProps.data, - [] + // 在异步多选的时候时候才需要进行值的记录 + dataSource && type === 'multiple' && setCacheSelectItem(selectedItems) + }, []) + useEffect(() => { + setSearchable(dataSource ? true : propsSearchable) + }, [propsSearchable]) + + useEffect(() => { + setIsFouces(dropdownShow) + }, [dropdownShow]) + + useEffect(() => { + if (value !== undefined) { + // 处理默认值的问题 + const selectedItems = resetSelectedItems( + value, + _.uniqBy(cacheSelectItem.concat(dropdownItems), transKeys(fieldNames, 'id')), + transKeys(fieldNames, 'id') ) - this.setState({ - selectedItems, - cacheSelectedItems: selectedItems, - dropdownItems: cloneDeep(nextProps.data) - }) - } else { - if (!_.isEqual(nextProps.value, this.props.value)) { - const selectedItems = this.resetSelectedItems( - nextProps.value, - this.state.dropdownItems, - [] - ) // 异步获取时会从内部改变dropdownItems,所以不能从list取 - this.setState({ - selectedItems, - cacheSelectedItems: selectedItems - }) - } + setSelectedItems(selectedItems) } - } - - getSearchable () { - const { searchable } = this.props - - if (this.isRemote()) { - return true - } - return searchable - } - - parseValue (value = this.props.value) { - if (Array.isArray(value)) { - return value.map(v => { - if (typeof v === 'object') { - return v.id - } else { - return v - } - }) - } else { - return [value] - } - } - - isRemote () { - const { dataSource, onSearch } = this.props - return onSearch || dataSource - } - - resetSelectedItems (value, dropdownItems = [], reviceSelectedItems = []) { - const values = this.parseValue(value) - let selectedItems = [] - dropdownItems.forEach(item => { - if (values.includes(item.id)) { - selectedItems.push(item) + }, [value]) + + useEffect(() => { + const _data = _.cloneDeep(data) + const selectedItems = resetSelectedItems( + value === undefined ? defaultValue : value, + _data, + transKeys(fieldNames, 'id') + ) + setSelectedItems(selectedItems) + setDropdownItems(_data) + dataSource && type === 'multiple' && setCacheSelectItem(selectedItems) + }, [data]) + + const localeDatasProps = useCallback( + (key) => { + if (props[key]) { + return props[key] + } else { + return localeDatas.select[key] } - }) - return _.uniqBy(reviceSelectedItems.concat(selectedItems), 'id') - } - - onEnterSelect () { - const { dropdownItems, focusedIndex } = this.state - const item = dropdownItems[focusedIndex] - this.onClickOption(item, focusedIndex) - } - - onChange (selectedItems, changedItems, callback, cacheSelectedItems) { - const { onChange, value } = this.props - value === undefined && - this.setState( - { - selectedItems - }, - callback - ) - const selectedIds = selectedItems.map(({ id }) => id) - onChange && onChange(selectedIds, changedItems) - } - - checkAll (filterItems, e) { - // 全选 - e && e.stopPropagation() - - const { selectedItems } = this.state - let _selectedItems = [...selectedItems] - let changedItems = [] - filterItems.forEach(item => { - if (!item.disabled && this.matchFilter(item)) { - if ( - !_selectedItems.map(selectItem => selectItem.id).includes(item.id) - ) { + }, + [props] + ) + // 改变的回调 + const onChange = useCallback( + (selectedItems, changedItems, callback) => { + if (value === undefined) { + setSelectedItems(selectedItems) + callback() + } + // 调用用户的select + const selectedIds = selectedItems.map((item) => item[transKeys(fieldNames, 'id')]) + propsonChange && propsonChange(selectedIds, changedItems) + }, + [propsonChange] + ) + // 选中某一项 + const onClickOption = useCallback( + (item, index) => { + if (!item || item[transKeys(fieldNames, 'disabled')]) return + + let _selectedItems = _.cloneDeep(selectedItems) + if (type === 'multiple') { + // 获取元素索引 + const itemIndex = _selectedItems.findIndex((sItem) => { + return sItem[transKeys(fieldNames, 'id')] === item[transKeys(fieldNames, 'id')] + }) + if (itemIndex === -1) { _selectedItems.push(item) - changedItems.push(item) + } else { + _selectedItems.splice(itemIndex, 1) } - } - }) - this.onChange(_selectedItems, changedItems, () => {}, _selectedItems) - } - - onClickOption (item, index) { - if (!item || item.disabled) return - - let selectedItems = this.state.selectedItems.concat() - let cacheSelectedItems = this.state.selectedItems.concat() - let focusedIndex = index - - if (this.props.type === 'multiple') { - let itemIndex = this.state.selectedItems.findIndex(sItem => { - return sItem.id === item.id - }) - if (itemIndex === -1) { - selectedItems.push(item) - if (!cacheSelectedItems.map(cacheItem => cacheItem.id).includes(item.id)) { - cacheSelectedItems.push(item) + // 在受控情况下 + if (_.isEqual(cacheSelectItem, selectedItems) && dataSource) { + setCacheSelectItem(_selectedItems) } } else { - selectedItems.splice(itemIndex, 1) + _selectedItems = [item] } - } else { - selectedItems = [item] - this.setState({ - cacheSelectedItems: [item] - }) - } - - this.onChange(selectedItems, item, () => { - this.setState({ - focusedIndex, - cacheSelectedItems: this.props.type === 'multiple' ? cacheSelectedItems : [item] + onChange(_selectedItems, item, () => { + setFocusedIndex(index) }) - }, this.props.type === 'multiple' ? cacheSelectedItems : [item]) - if (this.props.type !== 'multiple') { - this.hideDropdown() - } - } + type !== 'multiple' && hideDropdown() + }, + [type, selectedItems, onChange, dropdownShow, cacheSelectItem] + ) - clearKeyword () { - this.setState( - { - keyword: '' - }, - () => { - this.selectInput.clearInput() - } - ) - } - - handleInputClick = e => { - let { dropdownShow } = this.state + // 收起下拉框 + const hideDropdown = useCallback(() => { if (dropdownShow) { - this.hideDropdown() - return + setKeyword('') + setDropdownShow(false) } - - !this.getSearchable() && this.selectInput.focus() - if (this.props.disabled) { - return + // 多选具有默认值的话打开的话应该显示选中的值 + if (dataSource && type === 'multiple') { + setCacheSelectItem(selectedItems) + setDropdownItems(selectedItems) } - - if (dropdownShow === false) { - this.showDropdown() - } - } - - hideDropdown () { - this.state.dropdownShow === true && - this.setState({ dropdownShow: false, cacheSelectedItems: this.state.selectedItems }, () => { - this.clearKeyword() - }) - } - - showDropdown () { - this.state.dropdownShow === false && this.setState({ dropdownShow: true }) - } - - deleteItem (item) { - if (item.disabled) return - let selectedItems = this.state.selectedItems.concat() - const sIndex = selectedItems.findIndex((obj, index, arr) => { - return obj.id === item.id - }) - - selectedItems.splice(sIndex, 1) - this.onChange(selectedItems, item, () => { - !this.getSearchable() && this.selectInput.focus() - }, selectedItems) - } - // 全部删除 - deleteAllItems () { - const { type } = this.props - const focusedIndex = this.resetFocusedIndex() - const changedItems = [...this.state.selectedItems] - this.onChange( - [], - type === 'multiple' ? changedItems : changedItems[0], - () => { - this.setState({ focusedIndex }) - this.onFilterItems('') - }, - [] - ) - } - - remoteSearch (keyword) { - const { onSearch, dataSource, autoload, withCredentials: propsWithCredentials } = this.props - if (onSearch && typeof onSearch === 'function') { - this.setState({ - fetching: true - }) - onSearch(keyword).finally(() => { - this.setState({ fetching: false }) - }) - } else { - const _dataSource = typeof dataSource === 'function' ? dataSource(keyword) : dataSource - let { - url, - transformResponse, - error, - params, - headers, - mode, - data = {}, - type = 'GET', - key, - withCredentials = propsWithCredentials, - jsonpCallback = 'callback', - ...options - } = _dataSource - - keyword = - !keyword && this.autoloadFlag && autoload - ? _dataSource.keyword - : keyword - this.autoloadFlag = false // 第一次自动加载数据后,输入的关键词即使为空也不再使用默认关键词 - Object.assign(options, {mode}, {headers}) - - const queryParams = qs.stringify( - Object.assign({}, params, key && { [key]: keyword }) - ) - if (!_.isEmpty(queryParams)) { - url = url.includes('?') ? `${url}&${queryParams}` : `${url}?${queryParams}` - } - if (type.toUpperCase() === 'POST') { - options.body = JSON.stringify(data) - } - - this.setState({ - fetching: true - }) - - if (type.toUpperCase() === 'JSONP') { - const _o = { - jsonpCallback: jsonpCallback, - jsonpCallbackFunction: jsonpCallback - } - fetchJsonp(url, _o) - .then(res => res.json()) - .then(json => { - this._setDropdownItems(json, transformResponse) + }, [dropdownShow, selectedItems, dataSource, type]) + // 方向键的回调 + const moveFocusedIndex = useCallback( + (direction) => { + let _focusedIndex = focusedIndex + if (direction === 'up') { + dropdownItems + .slice(0, _focusedIndex) + .reverse() + .every((item) => { + _focusedIndex-- + if (!item[transKeys(fieldNames, 'disabled')] && matchFilter(item)) { + return false + } + return true }) } else { - /* eslint-disable */ - fetch(url, { - method: type, - credentials: withCredentials ? 'include' : 'same-origin', - ...options + dropdownItems.slice(_focusedIndex + 1).every((item) => { + _focusedIndex++ + if (!item[transKeys(fieldNames, 'disabled')] && matchFilter(item)) { + return false + } + return true }) - .then(response => response.json()) - .then( - res => { - this._setDropdownItems(res, transformResponse) - }, - err => { - error && error(err) - this.setState({ - fetching: false - }) - } - ) } - } - } - _setDropdownItems(res, func) { - let dropdownItems = [] - if (func) { - dropdownItems = func(res) - } else { - dropdownItems = res.data - } - if (Array.isArray(dropdownItems)) { - const reviceSelectedItems = this.props.type === 'multiple' ? this.props.dataSource && this.state.selectedItems || [] : this.state.cacheSelectedItems - const selectedItems = this.resetSelectedItems( - this.props.value, - dropdownItems, - reviceSelectedItems - ) - this.setState({ - dropdownItems, - selectedItems - }) - } - this.setState({ - fetching: false - }) - } - onFilterItems(keyword) { - const { onSearch, dataSource, autoload } = this.props - this.setState( - { - keyword: keyword - }, - () => this.resetFocusedIndex() - ) - if (dataSource) { - if (autoload ||(keyword && keyword.length >= this.state.queryLength)) { - this.remoteSearch(keyword) + setFocusedIndex(_focusedIndex) + }, + [focusedIndex, dropdownItems, fieldNames] + ) + // 点击回车选中 + const onEnterSelect = useCallback(() => { + const item = dropdownItems[focusedIndex] + onClickOption(item, focusedIndex) + }, [dropdownItems, focusedIndex, onClickOption]) + // 按键操作 + const handleKeyDown = useCallback( + (evt) => { + if (evt.keyCode === 13) { + onEnterSelect() } - } else if(onSearch) { - this.remoteSearch(keyword) - } - } - matchFilter(item) { - const { filterOption } = this.props - const { searchable, keyword } = this.state + if (evt.keyCode === 38) { + evt.preventDefault() + moveFocusedIndex('up') + } + if (evt.keyCode === 40) { + evt.preventDefault() + moveFocusedIndex('down') + } + }, + [onEnterSelect, moveFocusedIndex, moveFocusedIndex] + ) + // 对关键字的校验 对数据的过滤 + const matchFilter = useCallback( + (item) => { + const shouldMatch = dataSource || !searchable || !keyword + + if (typeof filterOption === 'function') { + return shouldMatch || filterOption(keyword, item) + } - const shouldMatch = this.isRemote() || !searchable || !keyword + return ( + shouldMatch || + String(item[transKeys(fieldNames, 'id')] || '').includes(keyword) || + String(item[transKeys(fieldNames, 'title')] || '').includes(keyword) + ) + }, + [dataSource, searchable, keyword, filterOption] + ) - if (typeof filterOption === "function") { - return shouldMatch || filterOption(keyword, item) + useEffect(() => { + if (dataSource && autoload) { + remoteSearch() } + }) - return ( - shouldMatch || - String(item.id).includes(keyword) || String(item.title).includes(keyword) + const remoteSearch = useCallback( + (keyword) => { + const _dataSource = typeof dataSource === 'function' ? dataSource(keyword) : dataSource + if (Array.isArray(_dataSource)) { + setDropdownItems(_dataSource) + return + } + // 处理promise函数 + if (_dataSource.toString() === '[object Promise]') { + setLoading(true) + _dataSource.then( + (res) => { + setLoading(false) + setDropdownItems(Array.isArray(res) ? res : []) + }, + () => { + setLoading(false) + setDropdownItems([]) + } + ) + return + } + // 调用接口 + HiRequestSearch(_dataSource, keyword) + }, + [dataSource, keyword] + ) + const HiRequestSearch = useCallback((_dataSource, keyword) => { + const { + url, + method = 'GET', + transformResponse, + headers, + data = {}, + params = {}, + key, + error, + credentials, + withCredentials = false, + ...options + } = _dataSource + // 处理Key + + options.params = key ? { [key]: keyword, ...params } : params + + const _withCredentials = withCredentials || credentials === 'include' + + HiRequest({ + url, + method, + data: data, + withCredentials: _withCredentials, + error, + beforeRequest: (config) => { + setLoading(true) + return config + }, + errorCallback: (err) => { + setLoading(false) + error && error(err) + }, + ...options + }).then( + (response) => { + setLoading(false) + const dataItems = transformResponse && transformResponse(response.data, response) + if (Array.isArray(dataItems)) { + setDropdownItems(dataItems) + } else { + console.error('transformResponse return data is not array') + } + }, + (error) => { + throw error + } ) + }, []) + useEffect(() => { + resetFocusedIndex() + }, [keyword]) + // 过滤筛选项 + const onFilterItems = (keyword) => { + setKeyword(keyword) + + if (dataSource && (autoload || keyword)) { + remoteSearch(keyword) + } } - - resetFocusedIndex(setState = true) { - let focusedIndex = -1 - - this.state.dropdownItems.every(item => { - focusedIndex++ - if (!item.disabled && this.matchFilter(item)) { + // 重置下标 + const resetFocusedIndex = () => { + let _focusedIndex = -1 + dropdownItems.every((item) => { + _focusedIndex++ + if (!item[transKeys(fieldNames, 'disabled')] && matchFilter(item)) { return false } return true }) - setState && - this.setState({ - focusedIndex - }) - return focusedIndex + setFocusedIndex(_focusedIndex) + return _focusedIndex } - setFocusedIndex(focusedIndex) { - this.setState({ focusedIndex }) + // 全部删除 + const deleteAllItems = () => { + onChange([], type === 'multiple' ? selectedItems : selectedItems[0], () => { + onFilterItems('') + resetFocusedIndex() + }) + setCacheSelectItem([]) } - - moveFocusedIndex(direction) { - let { focusedIndex } = this.state - const { dropdownItems } = this.state - - if (direction === "up") { - dropdownItems - .slice(0, focusedIndex) - .reverse() - .every(item => { - focusedIndex-- - if (!item.disabled && this.matchFilter(item)) { - return false - } - return true - }) - } else { - dropdownItems.slice(focusedIndex + 1).every(item => { - focusedIndex++ - if (!item.disabled && this.matchFilter(item)) { - return false - } - return true - }) + // 防抖 + const debouncedFilterItems = _.debounce(onFilterItems, 300) + // 全选 + const checkAll = (e, filterItems, isCheck) => { + // 全选 + e && e.stopPropagation() + if (!isCheck) { + onChange([], [], () => {}) + return } - this.setState({ - focusedIndex + const _selectedItems = [...selectedItems] + const changedItems = [] + filterItems.forEach((item) => { + if (!item[transKeys(fieldNames, 'disabled')] && matchFilter(item)) { + if ( + !_selectedItems + .map((selectItem) => selectItem[transKeys(fieldNames, 'id')]) + .includes(item[transKeys(fieldNames, 'id')]) + ) { + _selectedItems.push(item) + changedItems.push(item) + } + } }) + onChange(_selectedItems, changedItems, () => {}) } - - localeDatasProps(key) { - const { localeDatas } = this.props - if (this.props[key]) { - return this.props[key] - } else { - return localeDatas.select[key] + // input点击事件 + const handleInputClick = () => { + if (dropdownShow) { + hideDropdown() + return } - } - - render() { - const { - type, - showCheckAll, - className, - disabled, - clearable, - style, - children, - optionWidth, - render, - multipleWrap, - onClick, - onBlur, - onFocus, - dataSource, - filterOption, - onSearch, - theme, - localeDatas - } = this.props - const placeholder = this.localeDatasProps('placeholder') - const emptyContent = this.localeDatasProps('emptyContent') - const searchPlaceholder = this.localeDatasProps('searchPlaceholder') - const { - selectedItems, - cacheSelectedItems, - dropdownItems, - searchable, - dropdownShow, - focusedIndex, - fetching, - } = this.state - const extraClass = { - "is-multiple": type === "multiple", - "is-single": type === "single" + if (disabled) { + return } - const selectInputWidth = this.selectInputContainer ? this.selectInputContainer.getBoundingClientRect().width : null - return ( - <div - className={classNames("hi-select", className, extraClass)} - style={style} - > - <div - className="hi-select__input-container" - ref={node => { - this.selectInputContainer = node + !dropdownShow && setDropdownShow(true) + } + const placeholder = localeDatasProps('placeholder') + const emptyContent = localeDatasProps('emptyContent') + const searchPlaceholder = localeDatasProps('searchPlaceholder') + const extraClass = { + 'is-multiple': type === 'multiple', + 'is-single': type === 'single' + } + const selectInputWidth = selectInputContainer.current + ? selectInputContainer.current.getBoundingClientRect().width + : null + return ( + <div className={classNames('hi-select', className, extraClass)} style={style}> + <div className="hi-select__input-container" ref={selectInputContainer}> + <SelectInput + handleKeyDown={handleKeyDown} + theme={theme} + mode={type} + disabled={disabled} + searchable={searchable} // 要删除掉 + clearable={clearable} + dropdownShow={dropdownShow} + placeholder={placeholder} + selectedItems={selectedItems || []} + multipleMode={multipleWrap} + cacheSelectItem={cacheSelectItem} + onBlur={onBlur} + onFocus={onFocus} + onClickOption={onClickOption} + onClear={deleteAllItems} + fieldNames={fieldNames} + isFocus={isFocus} + value={value} + onClick={() => { + handleInputClick() }} - > - <SelectInput - ref={node => { - this.selectInput = node - }} - theme={theme} - mode={type} - disabled={disabled} - searchable={searchable} - clearable={clearable} - show={dropdownShow && this.props.open} - dropdownShow={dropdownShow} - placeholder={placeholder} - selectedItems={selectedItems} - dropdownItems={dropdownItems} - multipleMode={multipleWrap} - container={this.selectInputContainer} - moveFocusedIndex={this.moveFocusedIndex.bind(this)} - onClick={() => { - if (this.props.open) { - this.handleInputClick() - } - onClick() - }} - onBlur={onBlur} - onFocus={onFocus} - onDelete={this.deleteItem.bind(this)} - onClear={this.deleteAllItems.bind(this)} - onSearch={this.debouncedFilterItems.bind(this)} - onEnterSelect={this.onEnterSelect.bind(this)} - /> - </div> - {children} - <Popper - show={dropdownShow && this.props.open} - attachEle={this.selectInputContainer} - zIndex={1050} - topGap={5} - leftGap={0} - className="hi-select__popper" - placement="top-bottom-start" - > - { dropdownShow && this.props.open && <SelectDropdown - noFoundTip={emptyContent} - localeMap={localeDatas.select || {} } - mode={type} - searchPlaceholder={searchPlaceholder} - theme={theme} - onBlur={onBlur} - onFocus={onFocus} - isOnSearch = {onSearch || dataSource} - onSearch={this.debouncedFilterItems.bind(this)} - searchable={searchable} - showCheckAll={showCheckAll} - checkAll={this.checkAll.bind(this)} - loading={fetching} - focusedIndex={focusedIndex} - filterOption={filterOption} - matchFilter={this.matchFilter.bind(this)} - setFocusedIndex={this.setFocusedIndex.bind(this)} - show={dropdownShow && this.props.open} - optionWidth={optionWidth} - selectInputWidth={selectInputWidth} - onEnterSelect={this.onEnterSelect.bind(this)} - moveFocusedIndex={this.moveFocusedIndex.bind(this)} - dropdownItems={ dataSource && this.state.keyword === '' ? cacheSelectedItems : dropdownItems} - selectedItems={selectedItems} - dropdownRender={render} - onClickOption={this.onClickOption.bind(this)} - /> - } - </Popper> + /> </div> - ) - } -} -Select.childContextTypes = { - component: PropTypes.any + {children} + <Popper + show={dropdownShow} + attachEle={selectInputContainer.current} + zIndex={1050} + topGap={5} + leftGap={0} + overlayClassName={overlayClassName} + setOverlayContainer={setOverlayContainer} + // 是否防止溢出功能 暂时不开放 + preventOverflow={preventOverflow} + // 自定义options的方向 + placement={placement || 'top-bottom-start'} + className="hi-select__popper" + width={optionWidth} + onClickOutside={() => { + hideDropdown() + }} + > + <SelectDropdown + emptyContent={emptyContent} + fieldNames={fieldNames} + localeMap={localeDatas.select || {}} + mode={type} + searchPlaceholder={searchPlaceholder} + theme={theme} + onBlur={onBlur} + onFocus={onFocus} + isOnSearch={dataSource} + onSearch={debouncedFilterItems} + searchable={searchable} + showCheckAll={showCheckAll} + checkAll={checkAll} + loading={loading} + focusedIndex={focusedIndex} + showJustSelected={showJustSelected} + filterOption={filterOption} + matchFilter={matchFilter} + show={dropdownShow} + handleKeyDown={handleKeyDown} + optionWidth={optionWidth} + selectInputWidth={selectInputWidth} + dropdownItems={dropdownItems} + selectedItems={selectedItems} + dropdownRender={render} + onClickOption={onClickOption} + /> + </Popper> + </div> + ) } +InternalSelect.defaultProps = { + data: [], + type: 'single', + fieldNames: { + title: 'title', + id: 'id', + disabled: 'disabled', + children: 'children' + }, + multipleWrap: 'nowrap', + disabled: false, + clearable: true, + defaultValue: '', + autoload: false, + showCheckAll: false, + showJustSelected: false, + open: true, + onClick: () => {}, + onBlur: () => {}, + onFocus: () => {} +} +const Select = forwardRef((props, ref) => { + return <InternalSelect {...props} innerRef={ref} /> +}) export default Provider(Select) diff --git a/components/select/SelectDropdown.js b/components/select/SelectDropdown.js index 764909091..10d205c18 100644 --- a/components/select/SelectDropdown.js +++ b/components/select/SelectDropdown.js @@ -1,261 +1,312 @@ -import React, { Component } from 'react' +import React, { useState, useEffect, useRef, useCallback } from 'react' import classNames from 'classnames' import Checkbox from '../checkbox' import Loading from '../loading' import Icon from '../icon' +import { transKeys } from './utils' -class SelectDropdown extends Component { - constructor (props) { - super(props) - this.state = { - filterItems: this.props.dropdownItems, - searchbarValue: '', - cachedropdownItems: this.props.dropdownItems - } - } - static getDerivedStateFromProps (nextProps, prevState) { - const {selectedItems, mode, isOnSearch, dropdownItems, show} = nextProps - const {searchbarValue, cachedropdownItems} = prevState - const _filterItems = selectedItems.length > 0 && searchbarValue.length === 0 && mode === 'single' && isOnSearch ? cachedropdownItems : dropdownItems - const _searchbarValue = show ? searchbarValue : '' - return {filterItems: _filterItems, searchbarValue: _searchbarValue} - } - componentDidMount () { - this.focus() - } - focus = () => { - this.props.searchable && setTimeout(() => this.searchbar && this.searchbar.focus(), 0) - } - onClickOption (e, item, index) { - e.stopPropagation() - e.preventDefault() - if (item.disabled) { - return - } - this.props.mode === 'single' && this.props.isOnSearch && this.setState({ - cachedropdownItems: this.props.dropdownItems - }) - this.props.onClickOption(item, index) - } - filterOptions = (keyword) => { - const { dropdownItems, filterOption } = this.props - let filterItems = [] - if (typeof filterOption === 'function' || keyword === '') { - filterItems = dropdownItems - } else { - dropdownItems.map((item) => { - String(item.title).includes(keyword) && filterItems.push(item) - }) - } - this.setState({ - filterItems: filterItems, - searchbarValue: keyword - }) - } - searchEvent (e) { - const filterText = e.target.value - this.filterOptions(filterText) - this.props.onSearch(filterText) - - this.setState({ - searchbarValue: filterText - }) - } - hightlightKeyword (text, uniqueKey) { - const { searchbarValue } = this.state - let _keyword = this.state.searchbarValue - _keyword = searchbarValue.includes('[') ? _keyword.replace(/\[/gi, '\\[') : _keyword - _keyword = searchbarValue.includes('(') ? _keyword.replace(/\(/gi, '\\(') : _keyword - _keyword = searchbarValue.includes(')') ? _keyword.replace(/\)/gi, '\\)') : _keyword +const SelectDropdown = ({ + mode, + matchFilter, + emptyContent, + loading, + optionWidth, + showCheckAll, + showJustSelected, + dropdownRender, + theme, + searchable, + onFocus, + onBlur, + searchPlaceholder, + dropdownItems, + localeMap, + handleKeyDown, + onSearch, + isOnSearch, + onClickOption, + checkAll, + selectInputWidth, + selectedItems, + show, + fieldNames +}) => { + const [filterItems, setFilterItems] = useState(dropdownItems) + const [searchbarValue, setSearchbarValue] = useState('') + const [ischeckAll, setIscheckAll] = useState(false) + const searchbar = useRef('') + useEffect(() => { + setFilterItems(dropdownItems) + }, [dropdownItems]) - let parts = text.toString().split(new RegExp(`(${_keyword})`, 'gi')) - return ( - this.state.searchbarValue.length > 0 ? <p key={uniqueKey}> - { parts.map((part, i) => - part === searchbarValue - ? <span key={i} className={'hi-select__dropdown--item__name-hightlight'}> - { part } - </span> - : part + // 监控全选功能 + useEffect(() => { + setIscheckAll(selectedItems.length > 0 && selectedItems.length === filterItems.length) + }, [selectedItems, filterItems]) + // 让搜索框获取焦点 + useEffect(() => { + searchable && setTimeout(() => searchbar.current && searchbar.current.focus(), 0) + }, []) + // 仅看已选 + const showSelected = useCallback( + (check) => { + if (check) { + const values = selectedItems.map((item) => { + return item[transKeys(fieldNames, 'id')] + }) + setFilterItems( + dropdownItems.filter((item) => { + return values.includes(item[transKeys(fieldNames, 'id')]) + }) ) - } - </p> - : text - ) - } - onMouseEnter (item, index) { - !item.disabled && this.props.setFocusedIndex(index) - } - - itemSelected (item) { - const selectedItems = this.props.selectedItems + } else { + setFilterItems(dropdownItems) + } + }, + [selectedItems, fieldNames, dropdownItems] + ) + useEffect(() => { + const _filterItems = dropdownItems + setFilterItems(_filterItems) + }, [mode, isOnSearch, dropdownItems, show]) - return selectedItems.map((item) => item.id).indexOf(item.id) > -1 + let matched = 0 + const style = optionWidth && { + width: optionWidth } - cleanSearchbarValue (e) { - e.stopPropagation() - const filterText = '' - this.filterOptions(filterText) - this.props.onSearch(filterText) - this.setState({ - searchbarValue: filterText - }) - } - handleKeyDown (evt) { - if (evt.keyCode === 13) { - this.props.onEnterSelect() - } + const filterOptions = useCallback( + (keyword) => { + setFilterItems(dropdownItems) + setSearchbarValue(keyword) + }, + [dropdownItems] + ) + const searchEvent = useCallback( + (e) => { + const filterText = e.target.value + filterOptions(filterText) + onSearch(filterText) + }, + [onSearch] + ) - if (evt.keyCode === 38) { - evt.preventDefault() - this.props.moveFocusedIndex('up') - } - if (evt.keyCode === 40) { - evt.preventDefault() - this.props.moveFocusedIndex('down') - } - } - renderOption (mode, isSelected, item) { - if (item.children) { - return item.children - } - if (this.props.dropdownRender) { - return this.props.dropdownRender(item, isSelected) + const cleanSearchbarValue = useCallback( + (e) => { + e.stopPropagation() + const filterText = '' + filterOptions(filterText) + onSearch(filterText) + }, + [onSearch] + ) + // 是否被选中 + const itemSelected = useCallback( + (item) => { + return ( + selectedItems.map((item) => item[transKeys(fieldNames, 'id')]).indexOf(item[transKeys(fieldNames, 'id')]) > -1 + ) + }, + [selectedItems, fieldNames] + ) + // 点击某个选项时 + const onClickOptionIntal = useCallback( + (e, item, index) => { + e.stopPropagation() + e.preventDefault() + if (item[transKeys(fieldNames, 'disabled')]) { + return + } + onClickOption(item, index) + }, + [onClickOption, fieldNames] + ) + // 高亮关键字 + const hightlightKeyword = useCallback( + (text = '', uniqueKey) => { + let _keyword = searchbarValue + _keyword = searchbarValue.includes('[') ? _keyword.replace(/\[/gi, '\\[') : _keyword + _keyword = searchbarValue.includes('(') ? _keyword.replace(/\(/gi, '\\(') : _keyword + _keyword = searchbarValue.includes(')') ? _keyword.replace(/\)/gi, '\\)') : _keyword + + const parts = text.split(new RegExp(`(${_keyword})`, 'gi')) + return searchbarValue.length > 0 ? ( + <p key={uniqueKey}> + {parts.map((part, i) => + part === searchbarValue ? ( + <span key={i} className={'hi-select__dropdown--item__name-hightlight'}> + {part} + </span> + ) : ( + part + ) + )} + </p> + ) : ( + text + ) + }, + [searchbarValue] + ) + // 渲染单个选项 + const renderOption = (isSelected, item) => { + if (dropdownRender) { + return dropdownRender(item, isSelected) } const paddingNum = mode === 'multiple' ? 48 : 24 + // 提高可读性 + let width = selectInputWidth ? selectInputWidth - paddingNum : null + if (optionWidth) { + width = optionWidth - paddingNum + } const style = { - width: this.props.optionWidth ? this.props.optionWidth - paddingNum : this.props.selectInputWidth ? this.props.selectInputWidth - paddingNum : null + width } return ( <React.Fragment> {mode === 'multiple' && ( <Checkbox - className='hi-select__dropdown--item__checkbox' + className="hi-select__dropdown--item__checkbox" checked={isSelected} - disabled={item.disabled} + disabled={item[transKeys(fieldNames, 'disabled')]} > - <div className='hi-select__dropdown--item__name' style={style}>{ - this.props.isOnSearch ? item.title : this.hightlightKeyword(item.title, item.id) - }</div> + <div className="hi-select__dropdown--item__name" style={style}> + {isOnSearch + ? item[transKeys(fieldNames, 'title')] + : hightlightKeyword(item[transKeys(fieldNames, 'title')], item[transKeys(fieldNames, 'id')])} + </div> </Checkbox> )} {mode === 'single' && ( - <div className='hi-select__dropdown--item__name' style={style}>{ - this.props.isOnSearch ? item.title : this.hightlightKeyword(item.title, item.id) - }</div> - )} - {mode === 'single' && isSelected && ( - <div className='hi-select__dropdown--item__check-icon'> - <i className='hi-icon icon-check' /> + <div className="hi-select__dropdown--item__name" style={style}> + {isOnSearch + ? item[transKeys(fieldNames, 'title')] + : hightlightKeyword(item[transKeys(fieldNames, 'title')], item[transKeys(fieldNames, 'id')])} </div> )} </React.Fragment> ) } - - render () { - const { - mode, - focusedIndex, - matchFilter, - noFoundTip, - loading, - optionWidth, - showCheckAll, - dropdownRender, - theme, - searchable, - onFocus, - onBlur, - searchPlaceholder, - localeMap - } = this.props - const { filterItems, searchbarValue } = this.state - let matched = 0 - const style = optionWidth && { - width: optionWidth - } - + const groupItem = (filterGroupItem, filterItemsIndex) => { + const renderGroup = [] + const label = ( + <li className="hi-select__dropdown--label" key={filterGroupItem[transKeys(fieldNames, 'id')]}> + {filterGroupItem[transKeys(fieldNames, 'title')]} + </li> + ) + renderGroup.push(label) + filterGroupItem[transKeys(fieldNames, 'children')].forEach((item, index) => { + renderGroup.push(normalItem(item, filterItemsIndex + 1 + '-' + index)) + }) + return renderGroup + } + const normalItem = (item, filterItemsIndex) => { + matched++ + const isSelected = itemSelected(item) + const isDisabled = item[transKeys(fieldNames, 'disabled')] return ( - <div - className='hi-select__dropdown' - style={style} + <li + className={classNames('hi-select__dropdown--item', `theme__${theme}`, { + 'is-active': isSelected, + 'is-disabled': isDisabled, + 'hi-select__dropdown--item-default': !item[transKeys(fieldNames, 'children')] && !dropdownRender + })} + onClick={(e) => onClickOptionIntal(e, item, filterItemsIndex)} + key={item[transKeys(fieldNames, 'id')]} + index={filterItemsIndex} > - {searchable && - <div className='hi-select__dropdown__searchbar'> - <div className='hi-select__dropdown__searchbar--content'> - <Icon name='search' /> + {renderOption(isSelected, item, filterItemsIndex)} + </li> + ) + } + const renderItems = () => { + return ( + <ul className="hi-select__dropdown--items"> + {filterItems && + filterItems.map((item, filterItemsIndex) => { + if (matchFilter(item)) { + return item[transKeys(fieldNames, 'children')] + ? groupItem(item, filterItemsIndex) + : normalItem(item, filterItemsIndex) + } + })} + {matched === 0 && ( + <li + className="hi-select__dropdown--item hi-select__dropdown-item--empty is-disabled" + onClick={(e) => e.stopPropagation()} + > + {emptyContent} + </li> + )} + </ul> + ) + } + return ( + <div className="hi-select__dropdown" style={style}> + {searchable && ( + <div className="hi-select__dropdown__searchbar"> + <div className="hi-select__dropdown__searchbar--content"> + <span style={{ cursor: 'pointer' }}> + <Icon name="search" /> + </span> <input - className='hi-select__dropdown__searchbar--input' + className="hi-select__dropdown__searchbar--input" placeholder={searchPlaceholder} - clearable='true' - ref={(input) => { - this.searchbar = input - }} + clearable="true" + ref={searchbar} value={searchbarValue} - onFocus={onFocus.bind(this)} - onBlur={onBlur.bind(this)} - clearabletrigger='always' - onKeyDown={this.handleKeyDown.bind(this)} - onInput={this.searchEvent.bind(this)} - onChange={this.searchEvent.bind(this)} + onFocus={onFocus} + onBlur={onBlur} + clearabletrigger="always" + onKeyDown={handleKeyDown} + onChange={searchEvent} /> - {searchbarValue.length > 0 ? <Icon name='close-circle' style={{cursor: 'pointer'}} onClick={this.cleanSearchbarValue.bind(this)} /> : null} - </div> - </div>} - {loading && ( - <div className='hi-select__dropdown--loading'> - <Loading size='small' /> + {searchbarValue.length > 0 ? ( + <span style={{ cursor: 'pointer' }} onClick={cleanSearchbarValue}> + <i className={`hi-icon icon-close-circle hi-select__dropdown--icon__close`} /> + </span> + ) : null} </div> - )} - {!loading && ( - <ul className='hi-select__dropdown--items'> + </div> + )} + {loading && ( + <div className="hi-select__dropdown--loading"> + <Loading size="small" /> + </div> + )} - { - filterItems.map((item, index) => { - if (matchFilter(item)) { - matched++ - const isSelected = this.itemSelected(item) - const isDisabled = item.disabled - return ( - <li - className={classNames('hi-select__dropdown--item', `theme__${theme}`, { - 'is-active': isSelected, - 'is-disabled': isDisabled, - 'hi-select__dropdown--item-default': - !item.children && !dropdownRender - })} - onClick={(e) => this.onClickOption(e, item, index)} - key={item.id} - data-focused={focusedIndex === index} - onMouseEnter={() => this.onMouseEnter(item, index)} - > - {this.renderOption(mode, isSelected, item)} - </li> - ) - } - }) - } - {matched === 0 && ( - <li - className='hi-select__dropdown--item hi-select__dropdown-item--empty is-disabled' - onClick={(e) => e.stopPropagation()} + {!loading && renderItems()} + + {mode === 'multiple' && (showCheckAll || showJustSelected) && ( + <div className={`hi-select__dropdown-check-all theme__${theme}`}> + <div> + {showCheckAll && ( + <Checkbox + checked={ischeckAll} + onChange={(e) => { + checkAll(e, filterItems, e.target.checked) + }} > - {noFoundTip} - </li> + {localeMap.checkAll} + </Checkbox> )} - </ul> - )} - {mode === 'multiple' && showCheckAll && ( - <div className={`hi-select__dropdown-check-all theme__${theme}`} onClick={this.props.checkAll.bind(this, filterItems)}> - {localeMap['checkAll']} </div> - )} - </div> - ) - } + <div> + {showJustSelected && ( + <Checkbox + onChange={(e) => { + showSelected(e.target.checked) + }} + > + {localeMap.justSelected} + </Checkbox> + )} + </div> + </div> + )} + </div> + ) } export default SelectDropdown diff --git a/components/select/SelectInput.js b/components/select/SelectInput.js index 1b53acae3..9b0bf2f0e 100644 --- a/components/select/SelectInput.js +++ b/components/select/SelectInput.js @@ -1,293 +1,17 @@ -import React, { Component } from 'react' -import classNames from 'classnames' -import { getTextWidth } from './common.js' - -class SelectInput extends Component { - constructor (props) { - super(props) - - this.state = { - showCount: 0, - value: '', - inputStyle: { - width: 2 - }, - cacheselectedItems: [] - } - this.wrapperRect = this.itemsRef && this.itemsRef.getBoundingClientRect() - } - - calShowCountFlag = true - componentDidMount() { - this.wrapperRect = this.itemsRef && this.itemsRef.getBoundingClientRect() - } - componentDidUpdate () { - if ( - this.props.multipleMode === 'nowrap' && - this.calShowCountFlag && - this.itemsRef - ) { - // 多选超过一行时以数字显示 - const itemsRect = this.wrapperRect - let width = 0 - let showCount = 0 - const items = this.itemsRef.querySelectorAll('.hi-select__input--item') - - for (const item of items) { - const itemRect = item.getBoundingClientRect() - width += itemRect.width - if ( - width + 50 < itemsRect.width || - (width > itemsRect.width && - width + 50 <= itemsRect.width && - showCount + 1 === items.length) - ) { - // 50是留给显示剩余选项的空间 - ++showCount - } else { - break - } - } - this.setState({ showCount }) - this.calShowCountFlag = false - } else { - this.calShowCountFlag = true - } - } - - static getDerivedStateFromProps (nextProps, nextState) { - return nextProps.dropdownShow - ? { cacheselectedItems: nextProps.selectedItems.length > 0 ? nextProps.selectedItems : nextState.cacheselectedItems } : { cacheselectedItems: nextProps.selectedItems } - } - focus () { - this.wrapperRect = this.itemsRef && this.itemsRef.getBoundingClientRect() - setTimeout(() => this.searchInput && this.searchInput.focus(), 0) - } - - handleKeywordChange (evt) { - var val = evt.target.value - this.setState({ - value: val, - inputStyle: { - width: getTextWidth(val) - } - }) - this.props.onSearch(evt.target.value) - } - - clearInput () { - this.searchInput && (this.searchInput.value = '') - this.setState({ - value: '' - }) - } - - handleKeyDown (evt) { - if (evt.keyCode === 13) { - this.props.onEnterSelect() - } - - if (evt.keyCode === 38) { - evt.preventDefault() - this.props.moveFocusedIndex('up') - } - if (evt.keyCode === 40) { - evt.preventDefault() - this.props.moveFocusedIndex('down') - } - } - - handleClear () { - this.setState({ - cacheselectedItems: [] - }) - this.props.onClear() - this.clearInput() - } - - renderMultiple () { - let { - placeholder, - selectedItems, - dropdownShow, - disabled, - searchable, - clearable, - multipleMode, - onFocus, - theme, - onBlur - } = this.props - let icon = dropdownShow ? 'up' : 'down' - let { showCount, value, inputStyle } = this.state - showCount = - showCount === 0 || this.calShowCountFlag - ? selectedItems.length - : showCount - - if (!selectedItems.length) { - inputStyle = { width: '100%' } - } - return ( - <div - className={classNames('hi-select__input', 'multiple-values', `theme__${theme}`, { - disabled - })} - onClick={this.props.onClick} - > - {selectedItems.length === 0 && !value && ( - <div className='hi-select__input--placeholder'>{placeholder}</div> - )} - <div - className={classNames('hi-select__input-items', { - 'hi-select__input-items--all': multipleMode === 'wrap' - })} - ref={(node) => { - this.itemsRef = node - }} - > - {selectedItems.slice(0, showCount).map((item, index) => { - const _item = ( - <div key={index} className='hi-select__input--item' style={{ maxWidth: this.itemsRef ? (this.itemsRef.getBoundingClientRect().width - 50) * 0.8 : '80%' }}> - <div className='hi-select__input--item__name'>{item.title}</div> - <span - className={classNames('hi-select__input--item__remove', { - disabled - })} - onClick={(e) => { - e.stopPropagation() - !disabled && this.props.onDelete(item) - }} - > - <i className='hi-icon icon-close' /> - </span> - </div> - ) - return _item - })} - {showCount < selectedItems.length && ( - <div className={classNames('hi-select__input-items--left', { - disabled - })}> - + - <span className='hi-select__input-items--left-count'> - {selectedItems.length - showCount} - </span> - </div> - )} - {searchable && !disabled && ( - <div className='hi-select__input--search'> - <input - type='text' - style={inputStyle} - ref={(input) => { - this.searchInput = input - }} - onChange={this.handleKeywordChange.bind(this)} - onKeyDown={this.handleKeyDown.bind(this)} - onFocus={onFocus.bind(this)} - onBlur={onBlur.bind(this)} - readOnly - /> - </div> - )} - </div> - <span className='hi-select__input--icon'> - <i - className={classNames( - `hi-icon icon-${icon} hi-select__input--icon__expand`, - { clearable: clearable && selectedItems.length > 0 } - )} - /> - {clearable && selectedItems.length > 0 && ( - <i - className={`hi-icon icon-close-circle hi-select__input--icon__close`} - onClick={this.handleClear.bind(this)} - /> - )} - </span> - </div> - ) - } - - renderSingle () { - let { - placeholder, - selectedItems, - dropdownShow, - disabled, - clearable, - onFocus, - theme, - onBlur - } = this.props - - selectedItems = selectedItems.length > 0 ? selectedItems : this.state.cacheselectedItems - placeholder = - selectedItems.length > 0 ? selectedItems[0].title : placeholder - let icon = dropdownShow ? 'up' : 'down' - return ( - <div - className={classNames('hi-select__input', 'single-value', `theme__${theme}`, { disabled })} - onClick={this.props.onClick} - ref={(node) => { - this.itemsRef = node - }} - > - <div - className={classNames('hi-select__input--item', { - 'hi-select__hide': !(!dropdownShow && selectedItems.length > 0) - })} - style={{width: this.wrapperRect && this.wrapperRect.width-46}} - > - <div className='hi-select__input--item__name'> - {selectedItems[0] && selectedItems[0].title} - </div> - </div> - {(dropdownShow || selectedItems.length === 0) && ( - <div className={classNames('hi-select__input--search', {'hi-select__input--search--value': selectedItems.length > 0})} style={{width:this.wrapperRect && this.wrapperRect.width-46}}> - <input - type='text' - ref={(input) => { - this.searchInput = input - }} - value={selectedItems.length > 0 ? placeholder : ''} - placeholder={placeholder} - onChange={this.handleKeywordChange.bind(this)} - onKeyDown={this.handleKeyDown.bind(this)} - onFocus={onFocus.bind(this)} - onBlur={onBlur.bind(this)} - readOnly - /> - </div> - )} - <span className='hi-select__input--icon'> - <i - className={classNames( - `hi-icon icon-${icon} hi-select__input--icon__expand`, - { clearable: clearable && selectedItems.length > 0 } - )} - /> - {clearable && selectedItems.length > 0 && ( - <i - className={`hi-icon icon-close-circle hi-select__input--icon__close`} - onClick={this.handleClear.bind(this)} - /> - )} - </span> - </div> - ) - } - - render () { - let { mode } = this.props - - if (mode === 'multiple') { - return this.renderMultiple() - } else { - return this.renderSingle() - } - } +import React, { forwardRef } from 'react' +import SingleInput from './SingleInput' +import MultipleInput from './MultipleInput' + +const InternalSelectInput = (props) => { + const { mode, handleKeyDown } = props + + return mode === 'multiple' ? ( + <MultipleInput {...props} handleKeyDown={handleKeyDown} /> + ) : ( + <SingleInput {...props} handleKeyDown={handleKeyDown} /> + ) } - +const SelectInput = forwardRef((props, ref) => { + return <InternalSelectInput {...props} innerRef={ref} /> +}) export default SelectInput diff --git a/components/select/SingleInput.js b/components/select/SingleInput.js new file mode 100644 index 000000000..0083c4965 --- /dev/null +++ b/components/select/SingleInput.js @@ -0,0 +1,93 @@ +import React, { useState, useEffect } from 'react' +import classNames from 'classnames' +import { transKeys } from './utils' + +// 单选输入框 +const SingleInput = (props) => { + let { + placeholder, + dropdownShow, + disabled, + clearable, + onFocus, + theme, + onBlur, + onClick, + selectedItems: propsSelectItem, + handleKeyDown, + onClear, + fieldNames, + isFocus + } = props + const [cacheselectedItems, setCacheselectedItems] = useState(propsSelectItem || []) + useEffect(() => { + setCacheselectedItems(propsSelectItem) + }, [propsSelectItem]) + + const handleClear = (e) => { + e.stopPropagation() + + onClear() + setCacheselectedItems([]) + } + + const icon = dropdownShow ? 'up' : 'down' + + const selectedItems = propsSelectItem.length > 0 ? propsSelectItem : cacheselectedItems + + placeholder = selectedItems.length > 0 ? selectedItems[0][transKeys(fieldNames, 'title')] : placeholder + + return ( + <div + className={classNames( + 'hi-select__input', + 'single-value', + `theme__${theme}`, + { disabled }, + { + 'hi-select__input__focus': isFocus + } + )} + onClick={onClick} + > + <div + className={classNames('hi-select__input--item', { + 'hi-select__hide': !(!dropdownShow && selectedItems.length > 0) + })} + > + <div className="hi-select__input--item__name"> + {selectedItems[0] && selectedItems[0][transKeys(fieldNames, 'title')]} + </div> + </div> + {(dropdownShow || selectedItems.length === 0) && ( + <div + className={classNames('hi-select__input--search', { + 'hi-select__input--search--value': selectedItems.length > 0 + })} + > + <input + type="text" + value={selectedItems.length > 0 ? placeholder : ''} + placeholder={placeholder} + onKeyDown={handleKeyDown} + onFocus={onFocus} + onBlur={onBlur} + readOnly + /> + </div> + )} + <span className="hi-select__input--icon"> + <i + className={classNames(`hi-icon icon-${icon} hi-select__input--icon__expand`, { + clearable: clearable && selectedItems.length > 0 + })} + /> + {clearable && selectedItems.length > 0 && ( + <i className={`hi-icon icon-close-circle hi-select__input--icon__close`} onClick={handleClear} /> + )} + </span> + </div> + ) +} + +export default SingleInput diff --git a/components/select/index.d.ts b/components/select/index.d.ts new file mode 100644 index 000000000..23dd47a31 --- /dev/null +++ b/components/select/index.d.ts @@ -0,0 +1,51 @@ +import { CSSProperties } from "react" + +type DataItem = { + id: string | number + title: string + disabled?: boolean + children?: DataItem[] +} +export type DataSource = { + url: string + type?: 'get' | 'post' + data?: object + params?: object + headers?: object + mode?: 'same-origin' | 'cors' | 'no-cors' | 'navigate' + transformResponse?: (response: object) => DataItem[] +} +type FieldNames = { + id?: string + title?: string + disabled?: string + children?: string +} +const DataSourFun: (keyword: string) => DataSource +const FilterOptionFun: (keyword: string, item: DataItem) => boolean +interface Props { + type?: 'single' | 'multiple' + data?: DataItem[] + fieldNames?: FieldNames + dataSource?: DataSource | DataSourFun + value?: string | string[] + defaultValue?: string | string[] + showCheckAll?: boolean + showJustSelected?: boolean + multipleWrap?: 'wrap' | 'nowrap' + searchable?: boolean + filterOption?: FilterOptionFun + clearable?: boolean + autoload?: boolean + disabled?: boolean + placeholder?: string + emptyContent?: string | JSX.Element + style?: CSSProperties + optionWidth?: number + onChange?: (selectedIds: string[], changedItem: DataItem) => void + render?: (item: DataItem, selected: boolean) => JSX.Element + overlayClassName?: string + setOverlayContainer?: (triggerNode: any) => any +} +declare const Select: React.ComponentType<Props> +export default Select diff --git a/components/select/index.js b/components/select/index.js index 5243259eb..45b143b9a 100644 --- a/components/select/index.js +++ b/components/select/index.js @@ -1,6 +1,14 @@ +import React from 'react' import Select from './Select' -import SelectLegacy from './select-legacy' +import SelectV1 from './select-legacy/select-v1' +import SelectV2 from './select-legacy/select-v2' import './style/index' -import SwitchVersion from '../_util/SwitchVersion' -export default SwitchVersion(Select, SelectLegacy) +const SelectWrapper = ({ legacy, legacyV2, ...props }) => { + let WrapperComponent = legacy ? SelectV1 : Select + WrapperComponent = legacyV2 ? SelectV2 : WrapperComponent + + return <WrapperComponent {...props} /> +} + +export default SelectWrapper diff --git a/components/select/select-legacy/Option.js b/components/select/select-legacy/select-v1/Option.js similarity index 100% rename from components/select/select-legacy/Option.js rename to components/select/select-legacy/select-v1/Option.js diff --git a/components/select/select-legacy/Select.js b/components/select/select-legacy/select-v1/Select.js similarity index 66% rename from components/select/select-legacy/Select.js rename to components/select/select-legacy/select-v1/Select.js index fcb5abcfd..9eab0ca8e 100644 --- a/components/select/select-legacy/Select.js +++ b/components/select/select-legacy/select-v1/Select.js @@ -5,10 +5,10 @@ import PropTypes from 'prop-types' import shallowEqual from 'shallowequal' import debounce from 'lodash/debounce' import cloneDeep from 'lodash/cloneDeep' -import Popper from '../../popper' +import Popper from '../../../popper' import SelectInput from './SelectInput' import SelectDropdown from './SelectDropdown' -import Provider from '../../context' +import Provider from '../../../context' import fetchJsonp from 'fetch-jsonp' class Select extends Component { autoloadFlag = true // 第一次自动加载数据标识 @@ -58,11 +58,12 @@ class Select extends Component { constructor (props) { super(props) - let { - list - } = this.props + let { list } = this.props const dropdownItems = cloneDeep(list) - const selectedItems = this.resetSelectedItems(this.props.value, dropdownItems) + const selectedItems = this.resetSelectedItems( + this.props.value, + dropdownItems + ) const searchable = this.getSearchable() this.debouncedFilterItems = debounce(this.onFilterItems.bind(this), 300) this.clickOutsideHandel = this.clickOutside.bind(this) @@ -114,16 +115,26 @@ class Select extends Component { componentWillReceiveProps (props) { if (!shallowEqual(props.value, this.props.value)) { - const selectedItems = this.resetSelectedItems(props.value, this.state.dropdownItems) // 异步获取时会从内部改变dropdownItems,所以不能从list取 - - this.setState({ - selectedItems - }, () => { - // this.onChange() - }) + const selectedItems = this.resetSelectedItems( + props.value, + this.state.dropdownItems + ) // 异步获取时会从内部改变dropdownItems,所以不能从list取 + + this.setState( + { + selectedItems + }, + () => { + // this.onChange() + } + ) } if (!shallowEqual(props.list, this.props.list)) { - const selectedItems = this.resetSelectedItems(props.value, props.list, true) + const selectedItems = this.resetSelectedItems( + props.value, + props.list, + true + ) this.setState({ selectedItems, @@ -133,9 +144,7 @@ class Select extends Component { } getSearchable () { - let { - searchable - } = this.props + let { searchable } = this.props if (this.isRemote()) { return true @@ -157,25 +166,28 @@ class Select extends Component { } isRemote () { - let { - origin - } = this.props + let { origin } = this.props return origin && !!origin.url } resetSelectedItems (value, dropdownItems, listChanged = false) { const values = this.parseValue(value) - const selectedItems = listChanged && this.props.mode === 'multiple' ? this.state.selectedItems : [] // 如果是多选,dropdownItems有改动,需要保留之前的选中值 - - dropdownItems && dropdownItems.map(item => { - if (values.indexOf(item.id) !== -1) { - let itemIndex = selectedItems.findIndex((sItem) => { // 多选时检查是否已选中 - return sItem.id === item.id - }) - - itemIndex === -1 && selectedItems.push(item) - } - }) + const selectedItems = + listChanged && this.props.mode === 'multiple' + ? this.state.selectedItems + : [] // 如果是多选,dropdownItems有改动,需要保留之前的选中值 + + dropdownItems && + dropdownItems.map(item => { + if (values.indexOf(item.id) !== -1) { + let itemIndex = selectedItems.findIndex(sItem => { + // 多选时检查是否已选中 + return sItem.id === item.id + }) + + itemIndex === -1 && selectedItems.push(item) + } + }) return selectedItems } @@ -188,10 +200,7 @@ class Select extends Component { } onEnterSelect () { - const { - dropdownItems, - focusedIndex - } = this.state + const { dropdownItems, focusedIndex } = this.state const item = dropdownItems[focusedIndex] this.onClickOption(item, focusedIndex) @@ -212,18 +221,23 @@ class Select extends Component { let changedItems = [] dropdownItems.forEach(item => { if (!item.disabled && this.matchFilter(item)) { - if (!_selectedItems.map(selectItem => selectItem.id).includes(item.id)) { + if ( + !_selectedItems.map(selectItem => selectItem.id).includes(item.id) + ) { _selectedItems.push(item) changedItems.push(item) } } }) - this.setState({ - selectedItems: _selectedItems - }, () => { - this.selectInput.focus() - this.onChange(changedItems) - }) + this.setState( + { + selectedItems: _selectedItems + }, + () => { + this.selectInput.focus() + this.onChange(changedItems) + } + ) } onClickOption (item, index) { @@ -233,7 +247,7 @@ class Select extends Component { let focusedIndex = index if (this.props.mode === 'multiple') { - let itemIndex = this.state.selectedItems.findIndex((sItem) => { + let itemIndex = this.state.selectedItems.findIndex(sItem => { return sItem.id === item.id }) if (itemIndex === -1) { @@ -245,33 +259,37 @@ class Select extends Component { selectedItems = [item] } - this.setState({ - selectedItems, - focusedIndex - }, () => { - if (this.props.mode !== 'multiple') { - this.hideDropdown() - } else { - this.selectInput.focus() - this.clearKeyword() // 多选状态清空筛选 - } + this.setState( + { + selectedItems, + focusedIndex + }, + () => { + if (this.props.mode !== 'multiple') { + this.hideDropdown() + } else { + this.selectInput.focus() + this.clearKeyword() // 多选状态清空筛选 + } - this.onChange(item) - }) + this.onChange(item) + } + ) } clearKeyword () { - this.setState({ - keyword: '' - }, () => { - this.selectInput.clearInput() - }) + this.setState( + { + keyword: '' + }, + () => { + this.selectInput.clearInput() + } + ) } - handleInputClick = (e) => { - let { - dropdownShow - } = this.state + handleInputClick = e => { + let { dropdownShow } = this.state if (dropdownShow) { this.hideDropdown() @@ -289,13 +307,14 @@ class Select extends Component { } hideDropdown () { - this.state.dropdownShow === true && this.setState({dropdownShow: false}, () => { - this.clearKeyword() - }) + this.state.dropdownShow === true && + this.setState({ dropdownShow: false }, () => { + this.clearKeyword() + }) } showDropdown () { - this.state.dropdownShow === false && this.setState({dropdownShow: true}) + this.state.dropdownShow === false && this.setState({ dropdownShow: true }) this.selectInput.focus() } @@ -308,24 +327,32 @@ class Select extends Component { }) selectedItems.splice(sIndex, 1) - this.setState({ - selectedItems - }, () => { - this.selectInput.focus() - this.onChange(item) - }) + this.setState( + { + selectedItems + }, + () => { + this.selectInput.focus() + this.onChange(item) + } + ) } // 全部删除 deleteAllItems () { const focusedIndex = this.resetFocusedIndex() const changedItems = [...this.state.selectedItems] - this.setState({ - focusedIndex, - selectedItems: [] - }, () => { - this.onChange(this.props.mode === 'multiple' ? changedItems : changedItems[0]) - this.onFilterItems('') - }) + this.setState( + { + focusedIndex, + selectedItems: [] + }, + () => { + this.onChange( + this.props.mode === 'multiple' ? changedItems : changedItems[0] + ) + this.onFilterItems('') + } + ) } remoteSearch (keyword) { @@ -339,9 +366,15 @@ class Select extends Component { jsonpCallback = 'callback', ...options } = this.props.origin - keyword = !keyword && this.autoloadFlag && this.props.autoload ? this.props.origin.keyword : keyword + keyword = + !keyword && this.autoloadFlag && this.props.autoload + ? this.props.origin.keyword + : keyword this.autoloadFlag = false // 第一次自动加载数据后,输入的关键词即使为空也不再使用默认关键词 - url = url.indexOf('?') === -1 ? `${url}?${[key]}=${keyword}` : `${url}&${[key]}=${keyword}` + url = + url.indexOf('?') === -1 + ? `${url}?${[key]}=${keyword}` + : `${url}&${[key]}=${keyword}` if (type.toUpperCase() === 'POST') { options.body = JSON.stringify(data) @@ -351,23 +384,33 @@ class Select extends Component { }) if (type.toUpperCase() === 'JSONP') { - const _o = {jsonpCallback: jsonpCallback, jsonpCallbackFunction: jsonpCallback} - fetchJsonp(url, _o).then((res) => res.json()).then((json) => { this._setDropdownItems(json, func) }) + const _o = { + jsonpCallback: jsonpCallback, + jsonpCallbackFunction: jsonpCallback + } + fetchJsonp(url, _o) + .then(res => res.json()) + .then(json => { + this._setDropdownItems(json, func) + }) } else { /* eslint-disable */ fetch(url, { method: type, ...options }) - .then(response => response.json()) - .then(res => { - this._setDropdownItems(res, func) - }, err => { - error && error(err) - this.setState({ - fetching: false - }) - }) + .then(response => response.json()) + .then( + res => { + this._setDropdownItems(res, func) + }, + err => { + error && error(err) + this.setState({ + fetching: false + }) + } + ) } } _setDropdownItems(res, func) { @@ -378,7 +421,11 @@ class Select extends Component { dropdownItems = res.data } if (Array.isArray(dropdownItems)) { - const selectedItems = this.resetSelectedItems(this.props.value, dropdownItems, true) + const selectedItems = this.resetSelectedItems( + this.props.value, + dropdownItems, + true + ) this.setState({ dropdownItems, selectedItems @@ -388,30 +435,41 @@ class Select extends Component { fetching: false }) } - onFilterItems (keyword) { - this.setState({ - keyword - }, ()=>this.resetFocusedIndex()) + onFilterItems(keyword) { + this.setState( + { + keyword + }, + () => this.resetFocusedIndex() + ) if (this.props.origin) { // this.setState({ // dropdownItems: [] // }) - if (this.props.autoload || keyword.toString().length >= this.state.queryLength) { + if ( + this.props.autoload || + keyword.toString().length >= this.state.queryLength + ) { this.remoteSearch(keyword) } } } - matchFilter (item) { - const { - searchable, - keyword - } = this.state - return this.isRemote() || (!searchable || !keyword) || (searchable && keyword && (String(item.id).includes(keyword) || String(item.name).includes(keyword))) + matchFilter(item) { + const { searchable, keyword } = this.state + return ( + this.isRemote() || + !searchable || + !keyword || + (searchable && + keyword && + (String(item.id).includes(keyword) || + String(item.name).includes(keyword))) + ) } - resetFocusedIndex (setState = true) { + resetFocusedIndex(setState = true) { let focusedIndex = -1 this.state.dropdownItems.every(item => { @@ -421,32 +479,32 @@ class Select extends Component { } return true }) - setState && this.setState({ - focusedIndex - }) + setState && + this.setState({ + focusedIndex + }) return focusedIndex } - setFocusedIndex (focusedIndex) { - this.setState({focusedIndex}) + setFocusedIndex(focusedIndex) { + this.setState({ focusedIndex }) } - moveFocusedIndex (direction) { - let { - focusedIndex - } = this.state - const { - dropdownItems - } = this.state + moveFocusedIndex(direction) { + let { focusedIndex } = this.state + const { dropdownItems } = this.state if (direction === 'up') { - dropdownItems.slice(0, focusedIndex).reverse().every(item => { - focusedIndex-- - if (!item.disabled && this.matchFilter(item)) { - return false - } - return true - }) + dropdownItems + .slice(0, focusedIndex) + .reverse() + .every(item => { + focusedIndex-- + if (!item.disabled && this.matchFilter(item)) { + return false + } + return true + }) } else { dropdownItems.slice(focusedIndex + 1).every(item => { focusedIndex++ @@ -461,10 +519,8 @@ class Select extends Component { }) } - localeDatasProps (key) { - const { - localeDatas - } = this.props + localeDatasProps(key) { + const { localeDatas } = this.props if (this.props[key]) { return this.props[key] } else { @@ -472,7 +528,7 @@ class Select extends Component { } } - render () { + render() { const { mode, showCheckAll, @@ -504,10 +560,20 @@ class Select extends Component { } return ( - <div className={classNames('hi-select', className, extraClass)} style={style}> - <div className='hi-select__input-container' ref={node => { this.selectInputContainer = node }}> + <div + className={classNames('hi-select', className, extraClass)} + style={style} + > + <div + className='hi-select__input-container' + ref={node => { + this.selectInputContainer = node + }} + > <SelectInput - ref={node => { this.selectInput = node }} + ref={node => { + this.selectInput = node + }} mode={mode} disabled={disabled} searchable={searchable} @@ -519,8 +585,8 @@ class Select extends Component { multipleMode={multipleMode} container={this.selectInputContainer} moveFocusedIndex={this.moveFocusedIndex.bind(this)} - onClick={()=>{ - if(this.props.open) { + onClick={() => { + if (this.props.open) { this.handleInputClick() } onClick() @@ -533,14 +599,14 @@ class Select extends Component { onEnterSelect={this.onEnterSelect.bind(this)} /> </div> - { children } + {children} <Popper show={dropdownShow && this.props.open} attachEle={this.selectInputContainer} zIndex={1050} topGap={5} className='hi-select__popper' - placement="top-bottom-start" + placement='top-bottom-start' > <SelectDropdown noFoundTip={noFoundTip} diff --git a/components/select/select-legacy/SelectDropdown.js b/components/select/select-legacy/select-v1/SelectDropdown.js similarity index 91% rename from components/select/select-legacy/SelectDropdown.js rename to components/select/select-legacy/select-v1/SelectDropdown.js index ffef00e18..21f4845e9 100644 --- a/components/select/select-legacy/SelectDropdown.js +++ b/components/select/select-legacy/select-v1/SelectDropdown.js @@ -2,8 +2,8 @@ import React, { Component } from 'react' import classNames from 'classnames' -import Checkbox from '../../checkbox' -import Loading from '../../loading' +import Checkbox from '../../../checkbox' +import Loading from '../../../loading' export default class SelectDropdown extends Component { onClickOption (e, item, index) { @@ -67,7 +67,11 @@ export default class SelectDropdown extends Component { } return ( - <div className='hi-select__dropdown' onClick={this.props.onClick} style={style}> + <div + className='hi-select__dropdown' + onClick={this.props.onClick} + style={style} + > {loading && ( <div className='hi-select__dropdown--loading'> <Loading size='small' /> @@ -86,7 +90,8 @@ export default class SelectDropdown extends Component { className={classNames('hi-select__dropdown--item', { 'is-active': isSelected, 'is-disabled': isDisabled, - 'hi-select__dropdown--item-default': !item.children && !dropdownRender + 'hi-select__dropdown--item-default': + !item.children && !dropdownRender })} onClick={e => this.onClickOption(e, item, index)} key={item.id} diff --git a/components/select/select-legacy/SelectInput.js b/components/select/select-legacy/select-v1/SelectInput.js similarity index 100% rename from components/select/select-legacy/SelectInput.js rename to components/select/select-legacy/select-v1/SelectInput.js diff --git a/components/select/select-legacy/common.js b/components/select/select-legacy/select-v1/common.js similarity index 100% rename from components/select/select-legacy/common.js rename to components/select/select-legacy/select-v1/common.js diff --git a/components/select/select-legacy/index.js b/components/select/select-legacy/select-v1/index.js similarity index 100% rename from components/select/select-legacy/index.js rename to components/select/select-legacy/select-v1/index.js diff --git a/components/select/select-legacy/select-v2/Select.js b/components/select/select-legacy/select-v2/Select.js new file mode 100644 index 000000000..6d1a826a9 --- /dev/null +++ b/components/select/select-legacy/select-v2/Select.js @@ -0,0 +1,693 @@ +import React, { Component } from 'react' +import ReactDOM from 'react-dom' +import classNames from 'classnames' +import PropTypes from 'prop-types' +import debounce from 'lodash/debounce' +import cloneDeep from 'lodash/cloneDeep' +import Popper from '../../../popper' +import SelectInput from './SelectInput' +import SelectDropdown from './SelectDropdown' +import Provider from '../../../context' +import fetchJsonp from 'fetch-jsonp' +import qs from 'qs' +import _ from 'lodash' +class Select extends Component { + autoloadFlag = true // 第一次自动加载数据标识 + + static propTypes = { + type: PropTypes.oneOf(['single', 'multiple']), + multipleWrap: PropTypes.oneOf(['wrap', 'nowrap']), + data: PropTypes.array, + dataSource: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + defaultValue: PropTypes.oneOfType([ + PropTypes.string, + PropTypes.array, + PropTypes.bool, + PropTypes.number + ]), + value: PropTypes.oneOfType([ + PropTypes.string, + PropTypes.array, + PropTypes.bool, + PropTypes.number + ]), + showCheckAll: PropTypes.bool, + autoload: PropTypes.bool, + searchable: PropTypes.bool, + filterOption: PropTypes.func, + clearable: PropTypes.bool, + disabled: PropTypes.bool, + placeholder: PropTypes.string, + emptyContent: PropTypes.string, + optionWidth: PropTypes.number, + style: PropTypes.object, + onChange: PropTypes.func, + render: PropTypes.func, + open: PropTypes.bool + } + + static defaultProps = { + data: [], + type: 'single', + multipleWrap: 'nowrap', + disabled: false, + clearable: true, + defaultValue: '', + autoload: false, + showCheckAll: false, + open: true, + onClick: () => {}, + onBlur: () => {}, + onFocus: () => {} + } + + constructor (props) { + super(props) + + const { data, value, defaultValue } = props + const dropdownItems = cloneDeep(data) + const initialValue = value === undefined ? defaultValue : value + const selectedItems = this.resetSelectedItems( + initialValue, + dropdownItems, + [] + ) + + const searchable = this.getSearchable() + this.debouncedFilterItems = debounce(this.onFilterItems.bind(this), 300) + this.clickOutsideHandel = this.clickOutside.bind(this) + + this.state = { + searchable, + queryLength: 1, + focusedIndex: 0, + selectedItems, + cacheSelectedItems: selectedItems, + dropdownItems, + dropdownShow: false, + fetching: false, + keyword: '', + filterText: '', + searchInput: { + width: 2 + } + } + } + + getChildContext () { + return { + component: this + } + } + + componentWillMount () { + if (this.isRemote() && this.props.autoload) { + this.remoteSearch() + } + } + + componentDidMount () { + window.addEventListener('click', this.clickOutsideHandel) + this.resetFocusedIndex() + } + + componentWillUnmount () { + window.removeEventListener('click', this.clickOutsideHandel) + } + + clickOutside (e) { + const selectInput = ReactDOM.findDOMNode(this.selectInput) + if ( + (selectInput && selectInput.contains(e.target)) || + (e.target.tagName === 'INPUT' && + e.target.className.includes('hi-select__dropdown__searchbar--input')) + ) { + return + } + this.hideDropdown() + } + + componentWillReceiveProps (nextProps) { + if (!_.isEqual(nextProps.data, this.props.data)) { + const selectedItems = this.resetSelectedItems( + nextProps.value || this.state.selectedItems, + nextProps.data, + [] + ) + this.setState({ + selectedItems, + cacheSelectedItems: selectedItems, + dropdownItems: cloneDeep(nextProps.data) + }) + } else { + if (!_.isEqual(nextProps.value, this.props.value)) { + const selectedItems = this.resetSelectedItems( + nextProps.value, + this.state.dropdownItems, + [] + ) // 异步获取时会从内部改变dropdownItems,所以不能从list取 + this.setState({ + selectedItems, + cacheSelectedItems: selectedItems + }) + } + } + } + + getSearchable () { + const { searchable } = this.props + + if (this.isRemote()) { + return true + } + return searchable + } + + parseValue (value = this.props.value) { + if (Array.isArray(value)) { + return value.map(v => { + if (typeof v === 'object') { + return v.id + } else { + return v + } + }) + } else { + return [value] + } + } + + isRemote () { + const { dataSource, onSearch } = this.props + return onSearch || dataSource + } + + resetSelectedItems (value, dropdownItems = [], reviceSelectedItems = []) { + const values = this.parseValue(value) + let selectedItems = [] + dropdownItems.forEach(item => { + if (values.includes(item.id)) { + selectedItems.push(item) + } + }) + return _.uniqBy(reviceSelectedItems.concat(selectedItems), 'id') + } + + onEnterSelect () { + const { dropdownItems, focusedIndex } = this.state + const item = dropdownItems[focusedIndex] + this.onClickOption(item, focusedIndex) + } + + onChange (selectedItems, changedItems, callback, cacheSelectedItems) { + const { onChange, value } = this.props + value === undefined && + this.setState( + { + selectedItems + }, + callback + ) + const selectedIds = selectedItems.map(({ id }) => id) + onChange && onChange(selectedIds, changedItems) + } + + checkAll (filterItems, e) { + // 全选 + e && e.stopPropagation() + + const { selectedItems } = this.state + let _selectedItems = [...selectedItems] + let changedItems = [] + filterItems.forEach(item => { + if (!item.disabled && this.matchFilter(item)) { + if ( + !_selectedItems.map(selectItem => selectItem.id).includes(item.id) + ) { + _selectedItems.push(item) + changedItems.push(item) + } + } + }) + this.onChange(_selectedItems, changedItems, () => {}, _selectedItems) + } + + onClickOption (item, index) { + if (!item || item.disabled) return + + let selectedItems = this.state.selectedItems.concat() + let cacheSelectedItems = this.state.selectedItems.concat() + let focusedIndex = index + + if (this.props.type === 'multiple') { + let itemIndex = this.state.selectedItems.findIndex(sItem => { + return sItem.id === item.id + }) + if (itemIndex === -1) { + selectedItems.push(item) + if ( + !cacheSelectedItems.map(cacheItem => cacheItem.id).includes(item.id) + ) { + cacheSelectedItems.push(item) + } + } else { + selectedItems.splice(itemIndex, 1) + } + } else { + selectedItems = [item] + this.setState({ + cacheSelectedItems: [item] + }) + } + + this.onChange( + selectedItems, + item, + () => { + this.setState({ + focusedIndex, + cacheSelectedItems: + this.props.type === 'multiple' ? cacheSelectedItems : [item] + }) + }, + this.props.type === 'multiple' ? cacheSelectedItems : [item] + ) + if (this.props.type !== 'multiple') { + this.hideDropdown() + } + } + + clearKeyword () { + this.setState( + { + keyword: '' + }, + () => { + this.selectInput.clearInput() + } + ) + } + + handleInputClick = e => { + let { dropdownShow } = this.state + if (dropdownShow) { + this.hideDropdown() + return + } + + !this.getSearchable() && this.selectInput.focus() + if (this.props.disabled) { + return + } + + if (dropdownShow === false) { + this.showDropdown() + } + } + + hideDropdown () { + this.state.dropdownShow === true && + this.setState( + { dropdownShow: false, cacheSelectedItems: this.state.selectedItems }, + () => { + this.clearKeyword() + } + ) + } + + showDropdown () { + this.state.dropdownShow === false && this.setState({ dropdownShow: true }) + } + + deleteItem (item) { + if (item.disabled) return + let selectedItems = this.state.selectedItems.concat() + const sIndex = selectedItems.findIndex((obj, index, arr) => { + return obj.id === item.id + }) + + selectedItems.splice(sIndex, 1) + this.onChange( + selectedItems, + item, + () => { + !this.getSearchable() && this.selectInput.focus() + }, + selectedItems + ) + } + // 全部删除 + deleteAllItems () { + const { type } = this.props + const focusedIndex = this.resetFocusedIndex() + const changedItems = [...this.state.selectedItems] + this.onChange( + [], + type === 'multiple' ? changedItems : changedItems[0], + () => { + this.setState({ focusedIndex }) + this.onFilterItems('') + }, + [] + ) + } + + remoteSearch (keyword) { + const { onSearch, dataSource, autoload } = this.props + if (onSearch && typeof onSearch === 'function') { + this.setState({ + fetching: true + }) + onSearch(keyword).finally(() => { + this.setState({ fetching: false }) + }) + } else { + const _dataSource = + typeof dataSource === 'function' ? dataSource(keyword) : dataSource + let { + url, + transformResponse, + error, + params, + headers, + mode, + data = {}, + type = 'GET', + key, + jsonpCallback = 'callback', + ...options + } = _dataSource + + keyword = + !keyword && this.autoloadFlag && autoload + ? _dataSource.keyword + : keyword + this.autoloadFlag = false // 第一次自动加载数据后,输入的关键词即使为空也不再使用默认关键词 + Object.assign(options, { mode }, { headers }) + + const queryParams = qs.stringify( + Object.assign({}, params, key && { [key]: keyword }) + ) + if (!_.isEmpty(queryParams)) { + url = url.includes('?') + ? `${url}&${queryParams}` + : `${url}?${queryParams}` + } + if (type.toUpperCase() === 'POST') { + options.body = JSON.stringify(data) + } + + this.setState({ + fetching: true + }) + + if (type.toUpperCase() === 'JSONP') { + const _o = { + jsonpCallback: jsonpCallback, + jsonpCallbackFunction: jsonpCallback + } + fetchJsonp(url, _o) + .then(res => res.json()) + .then(json => { + this._setDropdownItems(json, transformResponse) + }) + } else { + /* eslint-disable */ + fetch(url, { + method: type, + ...options + }) + .then(response => response.json()) + .then( + res => { + this._setDropdownItems(res, transformResponse) + }, + err => { + error && error(err) + this.setState({ + fetching: false + }) + } + ) + } + } + } + _setDropdownItems(res, func) { + let dropdownItems = [] + if (func) { + dropdownItems = func(res) + } else { + dropdownItems = res.data + } + if (Array.isArray(dropdownItems)) { + const reviceSelectedItems = + this.props.type === 'multiple' + ? (this.props.dataSource && this.state.selectedItems) || [] + : this.state.cacheSelectedItems + const selectedItems = this.resetSelectedItems( + this.props.value, + dropdownItems, + reviceSelectedItems + ) + this.setState({ + dropdownItems, + selectedItems + }) + } + this.setState({ + fetching: false + }) + } + onFilterItems(keyword) { + const { onSearch, dataSource, autoload } = this.props + this.setState( + { + keyword: keyword + }, + () => this.resetFocusedIndex() + ) + + if (dataSource) { + if (autoload || (keyword && keyword.length >= this.state.queryLength)) { + this.remoteSearch(keyword) + } + } else if (onSearch) { + this.remoteSearch(keyword) + } + } + + matchFilter(item) { + const { filterOption } = this.props + const { searchable, keyword } = this.state + + const shouldMatch = this.isRemote() || !searchable || !keyword + + if (typeof filterOption === 'function') { + return shouldMatch || filterOption(keyword, item) + } + + return ( + shouldMatch || + String(item.id).includes(keyword) || + String(item.title).includes(keyword) + ) + } + + resetFocusedIndex(setState = true) { + let focusedIndex = -1 + + this.state.dropdownItems.every(item => { + focusedIndex++ + if (!item.disabled && this.matchFilter(item)) { + return false + } + return true + }) + setState && + this.setState({ + focusedIndex + }) + return focusedIndex + } + + setFocusedIndex(focusedIndex) { + this.setState({ focusedIndex }) + } + + moveFocusedIndex(direction) { + let { focusedIndex } = this.state + const { dropdownItems } = this.state + + if (direction === 'up') { + dropdownItems + .slice(0, focusedIndex) + .reverse() + .every(item => { + focusedIndex-- + if (!item.disabled && this.matchFilter(item)) { + return false + } + return true + }) + } else { + dropdownItems.slice(focusedIndex + 1).every(item => { + focusedIndex++ + if (!item.disabled && this.matchFilter(item)) { + return false + } + return true + }) + } + this.setState({ + focusedIndex + }) + } + + localeDatasProps(key) { + const { localeDatas } = this.props + if (this.props[key]) { + return this.props[key] + } else { + return localeDatas.select[key] + } + } + + render() { + const { + type, + showCheckAll, + className, + disabled, + clearable, + style, + children, + optionWidth, + render, + multipleWrap, + onClick, + onBlur, + onFocus, + dataSource, + filterOption, + onSearch, + theme, + localeDatas, + preventOverflow, + placement + } = this.props + const placeholder = this.localeDatasProps('placeholder') + const emptyContent = this.localeDatasProps('emptyContent') + const searchPlaceholder = this.localeDatasProps('searchPlaceholder') + const { + selectedItems, + cacheSelectedItems, + dropdownItems, + searchable, + dropdownShow, + focusedIndex, + fetching + } = this.state + const extraClass = { + 'is-multiple': type === 'multiple', + 'is-single': type === 'single' + } + const selectInputWidth = this.selectInputContainer + ? this.selectInputContainer.getBoundingClientRect().width + : null + return ( + <div + className={classNames('hi-select', className, extraClass)} + style={style} + > + <div + className='hi-select__input-container' + ref={node => { + this.selectInputContainer = node + }} + > + <SelectInput + ref={node => { + this.selectInput = node + }} + theme={theme} + mode={type} + disabled={disabled} + searchable={searchable} + clearable={clearable} + show={dropdownShow && this.props.open} + dropdownShow={dropdownShow} + placeholder={placeholder} + selectedItems={selectedItems} + dropdownItems={dropdownItems} + multipleMode={multipleWrap} + container={this.selectInputContainer} + moveFocusedIndex={this.moveFocusedIndex.bind(this)} + onClick={() => { + if (this.props.open) { + this.handleInputClick() + } + onClick() + }} + onBlur={onBlur} + onFocus={onFocus} + onDelete={this.deleteItem.bind(this)} + onClear={this.deleteAllItems.bind(this)} + onSearch={this.debouncedFilterItems.bind(this)} + onEnterSelect={this.onEnterSelect.bind(this)} + /> + </div> + {children} + <Popper + show={dropdownShow && this.props.open} + attachEle={this.selectInputContainer} + zIndex={1050} + topGap={5} + leftGap={0} + preventOverflow={preventOverflow} + className='hi-select__popper' + placement={placement || 'top-bottom-start'} + > + {dropdownShow && this.props.open && ( + <SelectDropdown + noFoundTip={emptyContent} + localeMap={localeDatas.select || {}} + mode={type} + searchPlaceholder={searchPlaceholder} + theme={theme} + onBlur={onBlur} + onFocus={onFocus} + isOnSearch={onSearch || dataSource} + onSearch={this.debouncedFilterItems.bind(this)} + searchable={searchable} + showCheckAll={showCheckAll} + checkAll={this.checkAll.bind(this)} + loading={fetching} + focusedIndex={focusedIndex} + filterOption={filterOption} + matchFilter={this.matchFilter.bind(this)} + setFocusedIndex={this.setFocusedIndex.bind(this)} + show={dropdownShow && this.props.open} + optionWidth={optionWidth} + selectInputWidth={selectInputWidth} + onEnterSelect={this.onEnterSelect.bind(this)} + moveFocusedIndex={this.moveFocusedIndex.bind(this)} + dropdownItems={ + dataSource && this.state.keyword === '' + ? cacheSelectedItems + : dropdownItems + } + selectedItems={selectedItems} + dropdownRender={render} + onClickOption={this.onClickOption.bind(this)} + /> + )} + </Popper> + </div> + ) + } +} +Select.childContextTypes = { + component: PropTypes.any +} + +export default Provider(Select) diff --git a/components/select/select-legacy/select-v2/SelectDropdown.js b/components/select/select-legacy/select-v2/SelectDropdown.js new file mode 100644 index 000000000..158b94aaf --- /dev/null +++ b/components/select/select-legacy/select-v2/SelectDropdown.js @@ -0,0 +1,296 @@ +import React, { Component } from 'react' +import classNames from 'classnames' +import Checkbox from '../../../checkbox' +import Loading from '../../../loading' +import Icon from '../../../icon' + +class SelectDropdown extends Component { + constructor (props) { + super(props) + this.state = { + filterItems: this.props.dropdownItems, + searchbarValue: '', + cachedropdownItems: this.props.dropdownItems + } + } + static getDerivedStateFromProps (nextProps, prevState) { + const { selectedItems, mode, isOnSearch, dropdownItems, show } = nextProps + const { searchbarValue, cachedropdownItems } = prevState + const _filterItems = + selectedItems.length > 0 && + searchbarValue.length === 0 && + mode === 'single' && + isOnSearch + ? cachedropdownItems + : dropdownItems + const _searchbarValue = show ? searchbarValue : '' + return { filterItems: _filterItems, searchbarValue: _searchbarValue } + } + componentDidMount () { + this.focus() + } + focus = () => { + this.props.searchable && setTimeout(() => this.searchbar.focus(), 0) + } + onClickOption (e, item, index) { + e.stopPropagation() + e.preventDefault() + if (item.disabled) { + return + } + this.props.mode === 'single' && + this.props.isOnSearch && + this.setState({ + cachedropdownItems: this.props.dropdownItems + }) + this.props.onClickOption(item, index) + } + filterOptions = keyword => { + const { dropdownItems, filterOption } = this.props + let filterItems = [] + if (typeof filterOption === 'function' || keyword === '') { + filterItems = dropdownItems + } else { + dropdownItems.map(item => { + String(item.title).includes(keyword) && filterItems.push(item) + }) + } + this.setState({ + filterItems: filterItems, + searchbarValue: keyword + }) + } + searchEvent (e) { + const filterText = e.target.value + this.filterOptions(filterText) + this.props.onSearch(filterText) + + this.setState({ + searchbarValue: filterText + }) + } + hightlightKeyword (text, uniqueKey) { + const { searchbarValue } = this.state + let _keyword = this.state.searchbarValue + _keyword = searchbarValue.includes('[') + ? _keyword.replace(/\[/gi, '\\[') + : _keyword + _keyword = searchbarValue.includes('(') + ? _keyword.replace(/\(/gi, '\\(') + : _keyword + _keyword = searchbarValue.includes(')') + ? _keyword.replace(/\)/gi, '\\)') + : _keyword + + let parts = text.split(new RegExp(`(${_keyword})`, 'gi')) + return this.state.searchbarValue.length > 0 ? ( + <p key={uniqueKey}> + {parts.map((part, i) => + part === searchbarValue ? ( + <span + key={i} + className={'hi-select__dropdown--item__name-hightlight'} + > + {part} + </span> + ) : ( + part + ) + )} + </p> + ) : ( + text + ) + } + onMouseEnter (item, index) { + !item.disabled && this.props.setFocusedIndex(index) + } + + itemSelected (item) { + const selectedItems = this.props.selectedItems + + return selectedItems.map(item => item.id).indexOf(item.id) > -1 + } + cleanSearchbarValue (e) { + e.stopPropagation() + const filterText = '' + this.filterOptions(filterText) + this.props.onSearch(filterText) + + this.setState({ + searchbarValue: filterText + }) + } + handleKeyDown (evt) { + if (evt.keyCode === 13) { + this.props.onEnterSelect() + } + + if (evt.keyCode === 38) { + evt.preventDefault() + this.props.moveFocusedIndex('up') + } + if (evt.keyCode === 40) { + evt.preventDefault() + this.props.moveFocusedIndex('down') + } + } + renderOption (mode, isSelected, item) { + if (item.children) { + return item.children + } + if (this.props.dropdownRender) { + return this.props.dropdownRender(item, isSelected) + } + const paddingNum = mode === 'multiple' ? 48 : 24 + const style = { + width: this.props.optionWidth + ? this.props.optionWidth - paddingNum + : this.props.selectInputWidth + ? this.props.selectInputWidth - paddingNum + : null + } + + return ( + <React.Fragment> + {mode === 'multiple' && ( + <Checkbox + className='hi-select__dropdown--item__checkbox' + checked={isSelected} + disabled={item.disabled} + > + <div className='hi-select__dropdown--item__name' style={style}> + {this.props.isOnSearch + ? item.title + : this.hightlightKeyword(item.title, item.id)} + </div> + </Checkbox> + )} + {mode === 'single' && ( + <div className='hi-select__dropdown--item__name' style={style}> + {this.props.isOnSearch + ? item.title + : this.hightlightKeyword(item.title, item.id)} + </div> + )} + {mode === 'single' && isSelected && ( + <div className='hi-select__dropdown--item__check-icon'> + <i className='hi-icon icon-check' /> + </div> + )} + </React.Fragment> + ) + } + + render () { + const { + mode, + focusedIndex, + matchFilter, + noFoundTip, + loading, + optionWidth, + showCheckAll, + dropdownRender, + theme, + searchable, + onFocus, + onBlur, + searchPlaceholder, + localeMap + } = this.props + const { filterItems, searchbarValue } = this.state + let matched = 0 + const style = optionWidth && { + width: optionWidth + } + + return ( + <div className='hi-select__dropdown' style={style}> + {searchable && ( + <div className='hi-select__dropdown__searchbar'> + <div className='hi-select__dropdown__searchbar--content'> + <Icon name='search' /> + <input + className='hi-select__dropdown__searchbar--input' + placeholder={searchPlaceholder} + clearable='true' + ref={input => { + this.searchbar = input + }} + value={searchbarValue} + onFocus={onFocus.bind(this)} + onBlur={onBlur.bind(this)} + clearabletrigger='always' + onKeyDown={this.handleKeyDown.bind(this)} + onInput={this.searchEvent.bind(this)} + onChange={this.searchEvent.bind(this)} + /> + {searchbarValue.length > 0 ? ( + <Icon + name='close-circle' + style={{ cursor: 'pointer' }} + onClick={this.cleanSearchbarValue.bind(this)} + /> + ) : null} + </div> + </div> + )} + {loading && ( + <div className='hi-select__dropdown--loading'> + <Loading size='small' /> + </div> + )} + {!loading && ( + <ul className='hi-select__dropdown--items'> + {filterItems.map((item, index) => { + if (matchFilter(item)) { + matched++ + const isSelected = this.itemSelected(item) + const isDisabled = item.disabled + return ( + <li + className={classNames( + 'hi-select__dropdown--item', + `theme__${theme}`, + { + 'is-active': isSelected, + 'is-disabled': isDisabled, + 'hi-select__dropdown--item-default': + !item.children && !dropdownRender + } + )} + onClick={e => this.onClickOption(e, item, index)} + key={item.id} + data-focused={focusedIndex === index} + onMouseEnter={() => this.onMouseEnter(item, index)} + > + {this.renderOption(mode, isSelected, item)} + </li> + ) + } + })} + {matched === 0 && ( + <li + className='hi-select__dropdown--item hi-select__dropdown-item--empty is-disabled' + onClick={e => e.stopPropagation()} + > + {noFoundTip} + </li> + )} + </ul> + )} + {mode === 'multiple' && showCheckAll && ( + <div + className={`hi-select__dropdown-check-all theme__${theme}`} + onClick={this.props.checkAll.bind(this, filterItems)} + > + {localeMap['checkAll']} + </div> + )} + </div> + ) + } +} + +export default SelectDropdown diff --git a/components/select/select-legacy/select-v2/SelectInput.js b/components/select/select-legacy/select-v2/SelectInput.js new file mode 100644 index 000000000..8b2c4037d --- /dev/null +++ b/components/select/select-legacy/select-v2/SelectInput.js @@ -0,0 +1,310 @@ +import React, { Component } from 'react' +import classNames from 'classnames' +import { getTextWidth } from './common.js' + +class SelectInput extends Component { + constructor (props) { + super(props) + + this.state = { + showCount: 0, + value: '', + inputStyle: { + width: 2 + }, + cacheselectedItems: [] + } + } + + calShowCountFlag = true + componentDidUpdate () { + if ( + this.props.multipleMode === 'nowrap' && + this.calShowCountFlag && + this.itemsRef + ) { + // 多选超过一行时以数字显示 + const itemsRect = this.itemsRef.getBoundingClientRect() + let width = 0 + let showCount = 0 + const items = this.itemsRef.querySelectorAll('.hi-select__input--item') + + for (const item of items) { + const itemRect = item.getBoundingClientRect() + width += itemRect.width + if ( + width + 50 < itemsRect.width || + (width > itemsRect.width && + width + 50 <= itemsRect.width && + showCount + 1 === items.length) + ) { + // 50是留给显示剩余选项的空间 + ++showCount + } else { + break + } + } + this.setState({ showCount }) + this.calShowCountFlag = false + } else { + this.calShowCountFlag = true + } + } + + static getDerivedStateFromProps (nextProps, nextState) { + return nextProps.dropdownShow + ? { + cacheselectedItems: + nextProps.selectedItems.length > 0 + ? nextProps.selectedItems + : nextState.cacheselectedItems + } + : { cacheselectedItems: nextProps.selectedItems } + } + focus () { + setTimeout(() => this.searchInput && this.searchInput.focus(), 0) + } + + handleKeywordChange (evt) { + var val = evt.target.value + this.setState({ + value: val, + inputStyle: { + width: getTextWidth(val) + } + }) + this.props.onSearch(evt.target.value) + } + + clearInput () { + this.searchInput && (this.searchInput.value = '') + this.setState({ + value: '' + }) + } + + handleKeyDown (evt) { + if (evt.keyCode === 13) { + this.props.onEnterSelect() + } + + if (evt.keyCode === 38) { + evt.preventDefault() + this.props.moveFocusedIndex('up') + } + if (evt.keyCode === 40) { + evt.preventDefault() + this.props.moveFocusedIndex('down') + } + } + + handleClear () { + this.setState({ + cacheselectedItems: [] + }) + this.props.onClear() + this.clearInput() + } + + renderMultiple () { + let { + placeholder, + selectedItems, + dropdownShow, + disabled, + searchable, + clearable, + multipleMode, + onFocus, + theme, + onBlur + } = this.props + let icon = dropdownShow ? 'up' : 'down' + let { showCount, value, inputStyle } = this.state + showCount = + showCount === 0 || this.calShowCountFlag + ? selectedItems.length + : showCount + + if (!selectedItems.length) { + inputStyle = { width: '100%' } + } + return ( + <div + className={classNames( + 'hi-select__input', + 'multiple-values', + `theme__${theme}`, + { + disabled + } + )} + onClick={this.props.onClick} + > + {selectedItems.length === 0 && !value && ( + <div className='hi-select__input--placeholder'>{placeholder}</div> + )} + <div + className={classNames('hi-select__input-items', { + 'hi-select__input-items--all': multipleMode === 'wrap' + })} + ref={node => { + this.itemsRef = node + }} + > + {selectedItems.slice(0, showCount).map((item, index) => { + const _item = ( + <div + key={index} + className='hi-select__input--item' + style={{ + maxWidth: this.itemsRef + ? (this.itemsRef.getBoundingClientRect().width - 50) * 0.8 + : '80%' + }} + > + <div className='hi-select__input--item__name'>{item.title}</div> + <span + className='hi-select__input--item__remove' + onClick={e => { + e.stopPropagation() + this.props.onDelete(item) + }} + > + <i className='hi-icon icon-close' /> + </span> + </div> + ) + return _item + })} + {showCount < selectedItems.length && ( + <div className='hi-select__input-items--left'> + + + <span className='hi-select__input-items--left-count'> + {selectedItems.length - showCount} + </span> + </div> + )} + {searchable && !disabled && ( + <div className='hi-select__input--search'> + <input + type='text' + style={inputStyle} + ref={input => { + this.searchInput = input + }} + onChange={this.handleKeywordChange.bind(this)} + onKeyDown={this.handleKeyDown.bind(this)} + onFocus={onFocus.bind(this)} + onBlur={onBlur.bind(this)} + readOnly + /> + </div> + )} + </div> + <span className='hi-select__input--icon'> + <i + className={classNames( + `hi-icon icon-${icon} hi-select__input--icon__expand`, + { clearable: clearable && selectedItems.length > 0 } + )} + /> + {clearable && selectedItems.length > 0 && ( + <i + className={`hi-icon icon-close-circle hi-select__input--icon__close`} + onClick={this.handleClear.bind(this)} + /> + )} + </span> + </div> + ) + } + + renderSingle () { + let { + placeholder, + selectedItems, + dropdownShow, + disabled, + clearable, + onFocus, + theme, + onBlur + } = this.props + + selectedItems = + selectedItems.length > 0 ? selectedItems : this.state.cacheselectedItems + placeholder = + selectedItems.length > 0 ? selectedItems[0].title : placeholder + let icon = dropdownShow ? 'up' : 'down' + + return ( + <div + className={classNames( + 'hi-select__input', + 'single-value', + `theme__${theme}`, + { disabled } + )} + onClick={this.props.onClick} + > + <div + className={classNames('hi-select__input--item', { + 'hi-select__hide': !(!dropdownShow && selectedItems.length > 0) + })} + > + <div className='hi-select__input--item__name'> + {selectedItems[0] && selectedItems[0].title} + </div> + </div> + {(dropdownShow || selectedItems.length === 0) && ( + <div + className={classNames('hi-select__input--search', { + 'hi-select__input--search--value': selectedItems.length > 0 + })} + > + <input + type='text' + ref={input => { + this.searchInput = input + }} + value={selectedItems.length > 0 ? placeholder : ''} + placeholder={placeholder} + onChange={this.handleKeywordChange.bind(this)} + onKeyDown={this.handleKeyDown.bind(this)} + onFocus={onFocus.bind(this)} + onBlur={onBlur.bind(this)} + readOnly + /> + </div> + )} + <span className='hi-select__input--icon'> + <i + className={classNames( + `hi-icon icon-${icon} hi-select__input--icon__expand`, + { clearable: clearable && selectedItems.length > 0 } + )} + /> + {clearable && selectedItems.length > 0 && ( + <i + className={`hi-icon icon-close-circle hi-select__input--icon__close`} + onClick={this.handleClear.bind(this)} + /> + )} + </span> + </div> + ) + } + + render () { + let { mode } = this.props + + if (mode === 'multiple') { + return this.renderMultiple() + } else { + return this.renderSingle() + } + } +} + +export default SelectInput diff --git a/components/select/select-legacy/select-v2/__tests__/index.test.js b/components/select/select-legacy/select-v2/__tests__/index.test.js new file mode 100644 index 000000000..8164c2098 --- /dev/null +++ b/components/select/select-legacy/select-v2/__tests__/index.test.js @@ -0,0 +1,485 @@ +import React from 'react' +import { mount, shallow } from 'enzyme' +import { Simulate } from 'react-dom/test-utils' +import sinon from 'sinon' + +import Select from '../' +/* eslint-env jest */ +const changeCallback = jest.fn(items => items) +const successCallback = jest.fn(res => res.data) +const errorCallback = jest.fn(err => err) +jest.mock('lodash/debounce', () => jest.fn(fn => fn)) +function trigger(elem, event, code ){ + + var myEvent = document.createEvent('Event') // 初始化这个事件对象,为它提高需要的“特性” + if (code) { + myEvent.which = code; + myEvent.keyCode = code; // Ctrl + } + + myEvent.initEvent(event, true, true); //执行事件 + + elem.dispatchEvent(myEvent); + +} +const options = [ + { title: '电视', id: '3' }, + { title: '手机', id: '2' }, + { title: '笔记本', id: '4' }, + { title: '生活周边', id: '5' }, + { title: '办公', id: '6' } +] +const multiOptions = [ + { title: '手机', id: '2' }, + { title: '小米2', id: '2-1' }, + { title: '小米3', id: '2-2' }, + { title: '小米4', id: '2-3' }, + { title: '小米5', id: '2-4' }, + { title: '电脑', id: '3' }, + { title: '笔记本', id: '4' }, + { title: '生活周边', id: '5' }, + { title: '其它', id: '6' } +] +const types = ['single', 'multiple'] +describe('Select', () => { + beforeEach(() => { + jest.useFakeTimers() + }) + + afterEach(() => { + jest.useRealTimers() + }) + + it('should disabled', () => { + types.forEach(type => { + const wrapper = mount(<Select type={type} disabled style={{ width: 200 }} data={options} />) + + expect(wrapper.find('.hi-select__input').hasClass('disabled')).toEqual(true) + wrapper.find('.hi-select__input').simulate('click') + expect(wrapper.find('.hi-select__popper').prop('show')).toEqual(false) + wrapper.unmount() + }) + }) + + it('should have default value', () => { + types.forEach(type => { + const wrapper = mount( + <Select + type={type} + style={{ width: 200 }} + data={type === 'single' ? options : multiOptions} + defaultValue={type === 'single' ? '3' : ['2', '3']} + /> + ) + if (type === 'single') { + expect( + wrapper.find('.hi-select__input').find('.hi-select__input--item__name').text() + ).toEqual('电视') + wrapper.find('.hi-select__input').simulate('click') + expect(wrapper.find('.hi-select__popper').prop('show')).toEqual(true) + document.querySelectorAll('.hi-select__dropdown--item')[2].click() + wrapper.update() + expect(wrapper.find('.hi-select__popper').prop('show')).toEqual(false) + expect( + wrapper.find('.hi-select__input').find('.hi-select__input--item__name').text() + ).toEqual('笔记本') + } + + if (type === 'multiple') { + expect( + wrapper + .find('.hi-select__input') + .find('.hi-select__input--item') + .map(val => val.find('.hi-select__input--item__name').text()) + ).toEqual(['手机', '电脑']) + wrapper.find('.hi-select__input').simulate('click') + expect(wrapper.find('.hi-select__popper').prop('show')).toEqual(true) + document + .querySelectorAll('.hi-select__dropdown')[0] + .querySelectorAll('.hi-select__dropdown--item')[2] + .click() + wrapper.update() + expect(wrapper.find('.hi-select__popper').prop('show')).toEqual(true) + expect( + wrapper + .find('.hi-select__input') + .find('.hi-select__input--item') + .map(val => val.find('.hi-select__input--item__name').text()) + ).toEqual(['手机', '电脑', '小米3']) + } + wrapper.unmount() + }) + }) + + it('should control by value', () => { + types.forEach(type => { + const wrapper = mount( + <Select + type={type} + style={{ width: 200 }} + data={type === 'single' ? options : multiOptions} + value={type === 'single' ? '2' : ['2', '4']} + defaultValue={type === 'single' ? '3' : ['2', '3']} + /> + ) + if (type === 'single') { + expect( + wrapper.find('.hi-select__input').find('.hi-select__input--item__name').text() + ).toEqual('手机') + wrapper.find('.hi-select__input').simulate('click') + expect(wrapper.find('.hi-select__popper').prop('show')).toEqual(true) + document.querySelectorAll('.hi-select__dropdown--item')[2].click() + expect( + wrapper.find('.hi-select__input').find('.hi-select__input--item__name').text() + ).toEqual('手机') + wrapper.setProps({ + value: '6' + }) + expect( + wrapper.find('.hi-select__input').find('.hi-select__input--item__name').text() + ).toEqual('办公') + } + + if (type === 'multiple') { + expect( + wrapper + .find('.hi-select__input') + .find('.hi-select__input--item') + .map(val => val.find('.hi-select__input--item__name').text()) + ).toEqual(['手机', '笔记本']) + wrapper.find('.hi-select__input').simulate('click') + expect(wrapper.find('.hi-select__popper').prop('show')).toEqual(true) + document + .querySelectorAll('.hi-select__dropdown')[0] + .querySelectorAll('.hi-select__dropdown--item')[2] + .click() + expect( + wrapper + .find('.hi-select__input') + .find('.hi-select__input--item') + .map(val => val.find('.hi-select__input--item__name').text()) + ).toEqual(['手机', '笔记本']) + wrapper.setProps({ + value: ['4', '5', '6'] + }) + expect( + wrapper + .find('.hi-select__input') + .find('.hi-select__input--item') + .map(val => val.find('.hi-select__input--item__name').text()) + ).toEqual(['笔记本', '生活周边', '其它']) + } + wrapper.unmount() + }) + }) + + it('should can delete one in multiple select', () => { + const wrapper = mount( + <Select + type="multiple" + style={{ width: '300px' }} + optionWidth={400} + data={multiOptions} + defaultValue={['4', '5', '2', '3']} + searchable={true} + placeholder="请选择..." + noFoundTip="无匹配数据" + onChange={changeCallback} + /> + ) + expect(wrapper.find('.hi-select__input--item')).toHaveLength(4) + wrapper.find('.hi-select__input--item__remove').at(0).simulate('click') // 删除第一个 + expect(wrapper.find('.hi-select__input--item')).toHaveLength(3) + wrapper.unmount() + }) + + it('should can delete all in multiple select', () => { + const wrapper = mount( + <Select + type="multiple" + style={{ width: '300px' }} + optionWidth={400} + data={multiOptions} + defaultValue={['4', '5', '2', '3']} + searchable={true} + placeholder="请选择..." + noFoundTip="无匹配数据" + onChange={changeCallback} + /> + ) + expect(wrapper.find('.hi-select__input--item')).toHaveLength(4) + wrapper.find('.hi-select__input').simulate('focus') + wrapper.find('.hi-select__input--icon__close').simulate('click') + expect(wrapper.find('.hi-select__input--item')).toHaveLength(0) + wrapper.unmount() + }) + + it('should can check all in multiple select', () => { + const wrapper = mount( + <Select + type="multiple" + style={{ width: '300px' }} + optionWidth={400} + data={multiOptions} + defaultValue={['4', '5', '2', '3']} + searchable={true} + showCheckAll={true} + placeholder="请选择..." + noFoundTip="无匹配数据" + /> + ) + wrapper.find('.hi-select__input').simulate('click') + expect(wrapper.find('.hi-select__popper').prop('show')).toEqual(true) + document.querySelector('.hi-select__dropdown__searchbar--input').value = '米' + trigger(document.querySelector('.hi-select__dropdown__searchbar--input'),'input') + document.querySelectorAll('.hi-select__dropdown-check-all')[0].click() + expect(document.querySelectorAll('.hi-checkbox__input--checked')).toHaveLength(4) + wrapper.unmount() + }) + + it('should custom render dropdown list', () => { + const wrapper = mount( + <Select + placeholder="请选择种类" + style={{ width: '200px' }} + value={'3'} + data={options} + searchable={true} + render={(item, isSelected) => { + return ( + <React.Fragment> + <span className="option-left" style={{ float: 'left' }}> + {item.name} + </span> + <span + className="option-right" + style={{ float: 'right', color: '#999', fontSize: 14 }} + > + {item.id} + </span> + </React.Fragment> + ) + }} + /> + ) + + wrapper.find('.hi-select__input').simulate('click') // 展开 + expect(document.querySelectorAll('.option-left')).toHaveLength(5) // 测试自定义模板 + expect(document.querySelectorAll('.option-right')).toHaveLength(5) + wrapper.unmount() + }) + + it('should handle keydown', () => { + const wrapper = mount( + <Select + type="single" + placeholder="请选择种类" + style={{ width: '200px' }} + defaultValue={'3'} + data={options} + /> + ) + + wrapper.find('.hi-select__input').simulate('click') + Simulate.mouseEnter(document.querySelectorAll('.hi-select__dropdown--item')[1]) + expect( + document.querySelectorAll('.hi-select__dropdown--item')[1].getAttribute('data-focused') + ).toEqual('true') + wrapper.unmount() + }) + + it('should handle mouseEnter', () => { + const wrapper = mount( + <Select + type="single" + placeholder="请选择种类" + style={{ width: '200px' }} + defaultValue={'3'} + data={options} + /> + ) + + wrapper.find('.hi-select__input').simulate('click') + expect( + document.querySelectorAll('.hi-select__dropdown--item')[0].getAttribute('data-focused') + ).toEqual('true') + wrapper.find('.hi-select__input--search').find('input').simulate('keydown', { keyCode: 40 }) + expect( + document.querySelectorAll('.hi-select__dropdown--item')[0].getAttribute('data-focused') + ).toEqual('false') + wrapper.find('.hi-select__input--search').find('input').simulate('keydown', { keyCode: 13 }) + expect(wrapper.find('.hi-select__input').find('.hi-select__input--item__name').text()).toEqual( + '手机' + ) + wrapper.find('.hi-select__input').simulate('click') + wrapper.find('.hi-select__input--search').find('input').simulate('keydown', { keyCode: 38 }) + wrapper.find('.hi-select__input--search').find('input').simulate('keydown', { keyCode: 13 }) + expect(wrapper.find('.hi-select__input').find('.hi-select__input--item__name').text()).toEqual( + '电视' + ) + wrapper.unmount() + }) + it('should handle mouseEnter when searchable', () => { + const wrapper = mount( + <Select + type="single" + placeholder="请选择种类" + style={{ width: '200px' }} + searchable + defaultValue={'2'} + data={options} + /> + ) + + wrapper.find('.hi-select__input').simulate('click') + expect(document.querySelectorAll('.hi-select__dropdown__searchbar--input')).toHaveLength(1) + trigger(document.querySelector('.hi-select__dropdown__searchbar--input'),'focus') + trigger(document.querySelector('.hi-select__dropdown__searchbar--input'),'keydown',40) + + expect( + document.querySelectorAll('.hi-select__dropdown--item')[1].getAttribute('data-focused') + ).toEqual('true') + trigger(document.querySelector('.hi-select__dropdown__searchbar--input'),'keydown',13) + + expect(wrapper.find('.hi-select__input').find('.hi-select__input--item__name').text()).toEqual( + '手机' + ) + wrapper.find('.hi-select__input').simulate('click') + trigger(document.querySelector('.hi-select__dropdown__searchbar--input'),'focus') + trigger(document.querySelector('.hi-select__dropdown__searchbar--input'),'keydown',38) + expect( + document.querySelectorAll('.hi-select__dropdown--item')[0].getAttribute('data-focused') + ).toEqual('true') + trigger(document.querySelector('.hi-select__dropdown__searchbar--input'),'keydown',13) + expect(wrapper.find('.hi-select__input').find('.hi-select__input--item__name').text()).toEqual( + '电视' + ) + wrapper.unmount() + }) + + it('should close when click outside', () => { + const outsideDom = document.createElement('div') + const wrapper = mount( + <Select + type="single" + placeholder="请选择种类" + style={{ width: '200px' }} + defaultValue={'3'} + data={options} + /> + ) + + document.body.appendChild(outsideDom) + + wrapper.find('.hi-select__input').simulate('click') + expect(wrapper.find('.hi-select__popper').prop('show')).toEqual(true) + outsideDom.click() + wrapper.update() + expect(wrapper.find('.hi-select__popper').prop('show')).toEqual(false) + + outsideDom.remove() + wrapper.unmount() + }) + + it('异步单选', done => { + const _document = document + const mockSuccessResponse = { + success: true, + code: 200, + data: [ + { title: '1-0', id: '0' }, + { title: '1-1', id: '1' }, + { title: '1-2', id: '2' }, + { title: '1-3', id: '3' } + ] + } + const mockJsonPromise = Promise.resolve(mockSuccessResponse) + const mockFetchPromise = Promise.resolve({ + json: () => mockJsonPromise + }) + jest.spyOn(global, 'fetch').mockImplementation(() => mockFetchPromise) + + const wrapper = mount( + <Select + mode="single" + dataSource={{ + type: 'GET', + key: 'id', + url: 'http://yapi.demo.qunar.com/mock/26534/hiui/select', + transformResponse: res => { + return res.data + } + }} + placeholder="请选择种类" + style={{ width: '200px' }} + onChange={changeCallback} + /> + ) + wrapper.find('.hi-select__input').simulate('click') // 展开 + wrapper.find('input').simulate('change', { target: { value: '1' } }) // 测试搜索 + + expect(global.fetch).toHaveBeenCalledTimes(1) + expect( + global.fetch + ).toHaveBeenCalledWith('http://yapi.demo.qunar.com/mock/26534/hiui/select?id=1', { + method: 'GET' + }) + process.nextTick(() => { + expect(_document.querySelectorAll('.hi-select__dropdown--item')).toHaveLength(4) + global.fetch.mockClear() + done() + wrapper.unmount() + }) + }) + + it('异步多选首次加载数据', done => { + const _document = document + const mockSuccessResponse = { + success: true, + code: 200, + data: [ + { title: '1-0', id: '0' }, + { title: '1-1', id: '1' }, + { title: '1-2', id: '2' }, + { title: '1-3', id: '3' } + ] + } + const mockJsonPromise = Promise.resolve(mockSuccessResponse) // 2 + const mockFetchPromise = Promise.resolve({ + // 3 + json: () => mockJsonPromise + }) + jest.spyOn(global, 'fetch').mockImplementation(() => mockFetchPromise) + + const wrapper = mount( + <Select + mode="single" + dataSource={{ + type: 'GET', + key: 'id', + url: 'http://yapi.demo.qunar.com/mock/26534/hiui/select', + transformResponse: res => { + return res.data + } + }} + autoload + placeholder="请选择种类" + style={{ width: '200px' }} + onChange={changeCallback} + /> + ) + expect(global.fetch).toHaveBeenCalledTimes(1) + expect( + global.fetch + ).toHaveBeenCalledWith('http://yapi.demo.qunar.com/mock/26534/hiui/select', { + method: 'GET' + }) + process.nextTick(() => { + // 首次加载数据 + wrapper.find('.hi-select__input').simulate('click') // 展开 + expect(_document.querySelectorAll('.hi-select__dropdown--item')).toHaveLength(1) + global.fetch.mockClear() + done() + }) + }) +}) diff --git a/components/select/select-legacy/select-v2/common.js b/components/select/select-legacy/select-v2/common.js new file mode 100644 index 000000000..4bc005364 --- /dev/null +++ b/components/select/select-legacy/select-v2/common.js @@ -0,0 +1,12 @@ +export function getTextWidth (text) { + var clientWidth = 0 + var span = document.createElement('span') + span.innerText = text + span.style.display = 'inline-block' + span.style.position = 'fixed' + span.style.top = '-100px' + document.body.appendChild(span) + clientWidth = span.clientWidth + 5 + document.body.removeChild(span) + return clientWidth +} diff --git a/components/select/select-legacy/select-v2/index.js b/components/select/select-legacy/select-v2/index.js new file mode 100644 index 000000000..34d656133 --- /dev/null +++ b/components/select/select-legacy/select-v2/index.js @@ -0,0 +1,4 @@ +import Select from './Select' +import './style/index' + +export default Select diff --git a/components/select/select-legacy/select-v2/style/index.js b/components/select/select-legacy/select-v2/style/index.js new file mode 100644 index 000000000..1345fa11b --- /dev/null +++ b/components/select/select-legacy/select-v2/style/index.js @@ -0,0 +1,4 @@ +import '../../../../style/icon/index.scss' +import './index.scss' +import './select-dropdown.scss' +import './select-input.scss' diff --git a/components/select/select-legacy/select-v2/style/index.scss b/components/select/select-legacy/select-v2/style/index.scss new file mode 100644 index 000000000..41536b3e8 --- /dev/null +++ b/components/select/select-legacy/select-v2/style/index.scss @@ -0,0 +1,19 @@ +$hoverColor: #ecf6fd !default; +$selectColor: #f7f7f7 !default; + +.hi-select { + display: inline-block; + width: 100%; + font-size: 14px; + overflow: hidden; + vertical-align: middle; + + &.is-disabled { + opacity: 0.4; + cursor: not-allowed; + } + + &__hide { + display: none; + } +} diff --git a/components/select/select-legacy/select-v2/style/select-dropdown.scss b/components/select/select-legacy/select-v2/style/select-dropdown.scss new file mode 100644 index 000000000..3473118bf --- /dev/null +++ b/components/select/select-legacy/select-v2/style/select-dropdown.scss @@ -0,0 +1,154 @@ +@import '@hi-ui/core-css/index.scss'; + +.hi-select__dropdown { + width: 100%; + font-size: 12px; + color: #333; + overflow-x: hidden; + overflow-y: auto; + background-color: #fff; + box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); + border-radius: 2px; + box-sizing: border-box; + text-align: left; + + &--loading { + height: 50px; + } + + &--items { + display: flex; + flex-direction: column; + overflow-y: auto; + max-height: 250px; + list-style: none; + margin: 0; + padding: 0; + } + + &-check-all { + padding: 8px 12px; + font-size: 12px; + color: #4284f5; + cursor: pointer; + border-top: 1px solid #e6e7e8; + } + + &--item { + flex: none; + display: block; + height: 36px; + line-height: 36px; + padding: 0 12px; + margin: 0; + font-weight: 400; + cursor: pointer; + list-style: none; + transition: all 0.3s ease; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + + &.hi-select__dropdown--item-default { + display: flex; + align-items: center; + } + + .hi-select__dropdown--item__name { + padding-right: 5px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-size: 14px; + + &-hightlight { + color: #f63; + } + } + + .hi-select__dropdown--item__checkbox { + flex: none; + position: relative; + } + + .hi-checkbox-label { + padding: 0; + margin-right: 10px; + } + + &.is-active { + color: #4284f5; + } + + &.is-disabled { + cursor: not-allowed; + opacity: 0.4; + } + + &[data-focused='true'] { + background-color: rgba(66, 132, 245, 0.08); + } + + &.disabled { + opacity: 0.4; + cursor: not-allowed; + } + + &__name { + flex: auto; + } + + &__check-icon { + flex: none; + } + } + + &__searchbar { + background-color: #fff; + width: 100%; + padding: 0 12px; + box-sizing: border-box; + + &--input { + width: 100%; + height: 100%; + border: none; + outline: none; + padding: 0 10px; + } + + .icon-close-circle { + color: #999; + } + + &--content { + height: 36px; + border-bottom: 1px solid #e6e7e8; + box-sizing: border-box; + display: flex; + align-items: center; + + .hi-input__inner { + border: none; + } + } + } +} + +@each $key, $value in $theme-colors { + .theme__#{$key}.hi-select__dropdown { + &-check-all { + color: $value; + } + + &--item { + &.is-active { + color: $value; + } + + &[data-focused='true'] { + background-color: rgba($value, 0.08); + } + } + } +} diff --git a/components/select/select-legacy/select-v2/style/select-input.scss b/components/select/select-legacy/select-v2/style/select-input.scss new file mode 100644 index 000000000..ce4d4f34d --- /dev/null +++ b/components/select/select-legacy/select-v2/style/select-input.scss @@ -0,0 +1,260 @@ +@import '@hi-ui/core-css/index.scss'; + +/* stylelint-disable */ +@mixin input-theme($themeColor) { + border-color: $themeColor; +} + +.hi-select__input { + position: relative; + display: flex; + align-items: center; + width: 100%; + background-color: #fff; + color: #333; + line-height: 1; + border-radius: 2px; + border: 1px solid #d8d8d8; + cursor: pointer; + outline: none; + user-select: none; + box-sizing: border-box; + height: 32px; + + &.disabled { + cursor: not-allowed; + background-color: #f2f2f2; + color: #ccc; + + .hi-select__input--icon { + background-color: #f2f2f2; + color: #ccc; + margin-left: 0 !important; + } + + .hi-select__input--icon, + input { + cursor: not-allowed; + } + } + + .hi-icon { + margin-left: 0 !important; + } + + &.active, + &:not(.disabled):hover { + border-color: #4284f5; + } + + &:not(.disabled):hover { + .hi-select__input--icon__expand.clearable { + display: none; + } + + .hi-select__input--icon__close { + display: block; + color: #bbb; + } + } + + .hi-select__input--icon { + flex: none; + } + + &--search { + input { + position: relative; + max-width: 100%; + width: 100%; + height: 100%; + padding: 0; + line-height: 1; + border-radius: 2px; + font-size: 14px; + cursor: pointer; + background: transparent; + border-width: 0; + outline: 0; + z-index: 10; + + &[data-visbility='false'] { + width: 1px; + } + } + + input::-webkit-input-placeholder { + font-weight: 300; + color: #ccc; + } + + input::-moz-placeholder { + /* Mozilla Firefox 19+ */ + font-weight: 300; + color: #ccc; + } + + input:-moz-placeholder { + /* Mozilla Firefox 4 to 18 */ + font-weight: 300; + color: #ccc; + } + + input:-ms-input-placeholder { + /* Internet Explorer 10-11 */ + font-weight: 300; + color: #ccc; + } + + &--value input { + color: #333; + } + } + + &--icon { + position: relative; + flex: none; + display: inline-block; + padding-right: 8px; + cursor: pointer; + font-size: 24px; + color: #434343; + background-color: #fff; + transform: scale(0.66666667) rotate(0deg); + transition: all 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + zoom: 1; + -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(sizingMethod='auto expand', M11=1, M12=0, M21=0, M22=1)"; + + .hi-select__input--icon__close { + display: none; + } + } + + &.single-value { + height: 32px; + line-height: 32px; + + .hi-select__input--item, + .hi-select__input--search { + flex: auto; + padding: 0 0 0 12px; + } + + .hi-select__input--item { + height: 32px; + line-height: 32px; + overflow: hidden; + transition: padding 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + text-align: left; + + &__name { + display: inline-block; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + max-width: 100%; + transition: margin 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + } + } + } + + &.multiple-values { + padding: 4px 4px 0 4px; + + .hi-select__input--icon { + margin-top: -4px; + margin-right: -4px; + } + + .hi-select__input--search { + padding-left: 3px; + } + + .hi-select__input--placeholder { + position: absolute; + top: 3px; + left: 13px; + right: 30px; + height: 24px; + line-height: 24px; + color: #ccc; + z-index: 1; + + & ~ .hi-select__input-items .hi-select__input--search { + padding: 0 20px 0 11px; + } + } + + .hi-select__input-items { + display: flex; + flex: auto; + overflow: hidden; + + &.hi-select__input-items--all { + flex-wrap: wrap; + } + + &--left { + display: flex; + align-items: center; + padding: 0 8px; + height: 22px; + line-height: 22px; + font-size: 12px; + color: #333; + background-color: #f2f2f2; + border-radius: 2px; + box-sizing: border-box; + } + } + + .hi-select__input--item { + flex: none; + position: relative; + max-width: 60%; + height: 22px; + line-height: 22px; + padding: 0 20px 0 10px; + margin: 0 4px 4px 0; + overflow: hidden; + vertical-align: middle; + background-color: #f2f2f2; + border-radius: 2px; + text-align: left; + + &__name { + font-size: 13px; + display: inline-block; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + max-width: 100%; + } + + &__remove { + cursor: pointer; + display: inline-block; + font-size: 12px; + position: absolute; + top: 0; + right: 4px; + padding: 0 0 0 8px; + } + } + + .hi-select__input--search { + height: 22px; + line-height: 22px; + margin-bottom: 4px; + } + } +} + +@each $key, $value in $theme-colors { + .theme__#{$key}.hi-select__input { + &.active, + &:not(.disabled):hover { + @include input-theme($value); + } + } +} diff --git a/components/select/style/index.scss b/components/select/style/index.scss index 41536b3e8..3539e61c4 100644 --- a/components/select/style/index.scss +++ b/components/select/style/index.scss @@ -1,6 +1,3 @@ -$hoverColor: #ecf6fd !default; -$selectColor: #f7f7f7 !default; - .hi-select { display: inline-block; width: 100%; diff --git a/components/select/style/select-dropdown.scss b/components/select/style/select-dropdown.scss index 3473118bf..6c3ab645c 100644 --- a/components/select/style/select-dropdown.scss +++ b/components/select/style/select-dropdown.scss @@ -1,12 +1,12 @@ -@import '@hi-ui/core-css/index.scss'; +@import '../../core-css/index.scss'; .hi-select__dropdown { width: 100%; font-size: 12px; - color: #333; + color: use-color('black'); overflow-x: hidden; overflow-y: auto; - background-color: #fff; + background-color: use-color('white'); box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); border-radius: 2px; box-sizing: border-box; @@ -27,11 +27,24 @@ } &-check-all { + display: flex; + justify-content: space-between; padding: 8px 12px; font-size: 12px; - color: #4284f5; + color: use-color('primary'); cursor: pointer; - border-top: 1px solid #e6e7e8; + border-top: 1px solid use-color('gray-30'); + + .hi-checkbox__text { + padding: 0; + } + } + + &--label { + padding: 0 12px; + font-size: 12px; + line-height: 30px; + color: use-color('gray-80'); } &--item { @@ -77,7 +90,7 @@ } &.is-active { - color: #4284f5; + color: use-color('primary'); } &.is-disabled { @@ -86,7 +99,11 @@ } &[data-focused='true'] { - background-color: rgba(66, 132, 245, 0.08); + background-color: use-color('primary-20'); + } + + &:hover { + background-color: use-color('primary-20'); } &.disabled { @@ -104,7 +121,7 @@ } &__searchbar { - background-color: #fff; + background-color: use-color('white'); width: 100%; padding: 0 12px; box-sizing: border-box; @@ -118,12 +135,16 @@ } .icon-close-circle { - color: #999; + color: use-color('gray-50'); + } + + .hi-select__dropdown--icon__close:hover { + color: use-color('black'); } &--content { height: 36px; - border-bottom: 1px solid #e6e7e8; + border-bottom: 1px solid use-color('gray-30'); box-sizing: border-box; display: flex; align-items: center; @@ -134,21 +155,3 @@ } } } - -@each $key, $value in $theme-colors { - .theme__#{$key}.hi-select__dropdown { - &-check-all { - color: $value; - } - - &--item { - &.is-active { - color: $value; - } - - &[data-focused='true'] { - background-color: rgba($value, 0.08); - } - } - } -} diff --git a/components/select/style/select-input.scss b/components/select/style/select-input.scss index 9f94796a2..c5bec7b33 100644 --- a/components/select/style/select-input.scss +++ b/components/select/style/select-input.scss @@ -1,20 +1,15 @@ -@import '@hi-ui/core-css/index.scss'; - -/* stylelint-disable */ -@mixin input-theme($themeColor) { - border-color: $themeColor; -} +@import '../../core-css/index.scss'; .hi-select__input { position: relative; display: flex; align-items: center; width: 100%; - background-color: #fff; - color: #333; + background-color: use-color('white'); + color: use-color('black'); line-height: 1; border-radius: 2px; - border: 1px solid #d8d8d8; + border: 1px solid use-color('gray-30'); cursor: pointer; outline: none; user-select: none; @@ -23,12 +18,12 @@ &.disabled { cursor: not-allowed; - background-color: #f2f2f2; - color: #ccc; + background-color: use-color('gray-10'); + color: use-color('gray-50'); .hi-select__input--icon { - background-color: #f2f2f2; - color: #ccc; + background-color: use-color('gray-10'); + color: use-color('gray-50'); margin-left: 0 !important; } @@ -44,7 +39,11 @@ &.active, &:not(.disabled):hover { - border-color: #4284f5; + border-color: use-color('primary'); + } + + &__focus:not(.disabled) { + border-color: use-color('primary'); } &:not(.disabled):hover { @@ -54,7 +53,12 @@ .hi-select__input--icon__close { display: block; - color: #bbb; + color: use-color('gray-50'); + } + + .hi-select__input--icon__close:hover { + display: block; + color: use-color('black'); } } @@ -71,7 +75,7 @@ padding: 0; line-height: 1; border-radius: 2px; - font-size: 14px; + font-size: $font-size-normal; cursor: pointer; background: transparent; border-width: 0; @@ -85,29 +89,29 @@ input::-webkit-input-placeholder { font-weight: 300; - color: #ccc; + color: use-color('gray-50'); } input::-moz-placeholder { /* Mozilla Firefox 19+ */ font-weight: 300; - color: #ccc; + color: use-color('gray-50'); } input:-moz-placeholder { /* Mozilla Firefox 4 to 18 */ font-weight: 300; - color: #ccc; + color: use-color('gray-50'); } input:-ms-input-placeholder { /* Internet Explorer 10-11 */ font-weight: 300; - color: #ccc; + color: use-color('gray-50'); } &--value input { - color: #333; + color: use-color('black'); } } @@ -117,13 +121,13 @@ display: inline-block; padding-right: 8px; cursor: pointer; - font-size: 24px; + font-size: 22px; color: #434343; - background-color: #fff; + background-color: use-color('white'); transform: scale(0.66666667) rotate(0deg); transition: all 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); zoom: 1; - -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(sizingMethod='auto expand', M11=1, M12=0, M21=0, M22=1)"; + filter: "progid:DXImageTransform.Microsoft.Matrix(sizingMethod='auto expand', M11=1, M12=0, M21=0, M22=1)"; .hi-select__input--icon__close { display: none; @@ -166,10 +170,6 @@ margin-right: -4px; } - .hi-select__input--search { - padding-left: 3px; - } - .hi-select__input--placeholder { position: absolute; top: 3px; @@ -177,7 +177,7 @@ right: 30px; height: 24px; line-height: 24px; - color: #ccc; + color: use-color('gray-50'); z-index: 1; & ~ .hi-select__input-items .hi-select__input--search { @@ -201,14 +201,10 @@ height: 22px; line-height: 22px; font-size: 12px; - color: #333; - background-color: #f2f2f2; + color: use-color('black'); + background-color: use-color('gray-10'); border-radius: 2px; box-sizing: border-box; - - &.disabled { - color: #ccc; - } } } @@ -222,7 +218,7 @@ margin: 0 4px 4px 0; overflow: hidden; vertical-align: middle; - background-color: #f2f2f2; + background-color: use-color('gray-10'); border-radius: 2px; text-align: left; @@ -243,10 +239,6 @@ top: 0; right: 4px; padding: 0 0 0 8px; - - &.disabled { - cursor: not-allowed; - } } } @@ -254,15 +246,7 @@ height: 22px; line-height: 22px; margin-bottom: 4px; - } - } -} - -@each $key, $value in $theme-colors { - .theme__#{$key}.hi-select__input { - &.active, - &:not(.disabled):hover { - @include input-theme($value); + padding-left: 3px; } } } diff --git a/components/select/utils.js b/components/select/utils.js new file mode 100644 index 000000000..51e4070ab --- /dev/null +++ b/components/select/utils.js @@ -0,0 +1,31 @@ +// 格式化value +const parseValue = (value) => { + if (Array.isArray(value)) { + return value.map((v) => { + return typeof v === 'object' ? v.id : v + }) + } else { + return [value] + } +} +// 整理Select数据结构 获取选中的Items id +export const resetSelectedItems = (value, dropdownItems = [], key) => { + const values = parseValue(value) + const selectedItems = dropdownItems.filter((item) => { + return values.includes(item[key]) + }) + + // 处理子节点 + dropdownItems.forEach((item) => { + if (item.children) { + item.children.forEach((childItem) => { + values.includes(childItem[key]) && selectedItems.push(childItem) + }) + } + }) + return selectedItems +} + +export const transKeys = (fieldNames, key) => { + return fieldNames[key] || key +} diff --git a/components/slider/index.d.ts b/components/slider/index.d.ts new file mode 100644 index 000000000..5bad12c34 --- /dev/null +++ b/components/slider/index.d.ts @@ -0,0 +1,17 @@ +interface Props { + type?: 'primary' | 'danger' | 'success' | 'warning' + defaultValue?: number + value?: number + min?: number + max?: number + disabled?: boolean + tipFormatter?: (value: number) => JSX.Element + marks?: { + [prop: number]: any + } + step?: number + vertical?: boolean + onChange?: (value: number) => void +} +declare const Slider: React.ComponentType<Props> +export default Slider diff --git a/components/slider/index.js b/components/slider/index.js new file mode 100644 index 000000000..6495d498e --- /dev/null +++ b/components/slider/index.js @@ -0,0 +1,420 @@ +import React, { useState, useRef, useEffect, useCallback, memo } from 'react' +import classNames from 'classnames' +import './style' +import useClickOutside from '../popper/utils/useClickOutside' +import { CSSTransition } from 'react-transition-group' +import Provider from '../context' + +const prefixCls = 'hi-slider' +const noop = () => {} +const Slider = memo( + ({ + defaultValue = 0, + max: initMax, + min: initMin, + step = 1, + vertical, + onChange = noop, + value: initValue, + disabled = false, + tipFormatter, + type = 'primary', + marks = {}, + theme + }) => { + const getValue = useCallback((value) => { + if (value === undefined) { + return value + } + if (value > (initMax || 100)) { + value = initMax || 100 + } else if (value < (initMin || 0)) { + value = initMin || 0 + } + return value + }, []) + const [value, setValue] = useState(initValue !== undefined ? getValue(initValue) : getValue(defaultValue)) + // 是否可拖动 + const [canMove, setCanMove] = useState(false) + const [canKeyDown, setCanKeyDown] = useState(false) + + const [startX, setStartX] = useState() + const [startY, setStartY] = useState() + + const [newRightPosition, setNewRightPosition] = useState(0) + const [startPosition, setStartPosition] = useState(0) + const [positionStep, setPositionStep] = useState(1) + const [showTooltip, setShowTooltip] = useState(false) + const [firstTime, setFirstTime] = useState(0) + const [lastTime, setLastTime] = useState(0) + const [isMove, setIsMove] = useState(false) + const [isClick, setIsClick] = useState(false) + const [max, setMax] = useState(initMax) + const [min, setMin] = useState(initMin) + const [isInitPage, setIsInitPage] = useState(true) + const sliderRef = useRef() + const tooltipRef = useRef() + + useClickOutside((e) => { + setShowTooltip(false) + setCanKeyDown(false) + setIsClick(false) + }, document.querySelector(`#${prefixCls}`)) + + useEffect(() => { + if (initMax !== undefined && initMin !== undefined) { + if (initMax < initMin) { + setMax(initMin) + setMin(initMax) + } + } + }, []) + + // value 改变更新长度和位置 + useEffect(() => { + const _value = initValue !== undefined ? getValue(initValue) : getValue(value) + setNewRightPosition(getTrackWidth(_value)) + if (!isInitPage) { + setShowTooltip(true) + } + }, [value, initValue]) + useEffect(() => { + setIsInitPage(false) + }) + useEffect(() => { + setIsInitPage(true) + }, []) + + useEffect(() => { + // 每一份步长对应在父元素的百分比 + setPositionStep((step / ((max || 100) - (min || 0))) * 100) + // 设置初始位置 + setStartPosition(((value - (min || 0)) / ((max || 100) - (min || 0))) * 100) + }, []) + + // <- -> 键盘事件 + const onKeyDown = useCallback( + (e) => { + if (e.keyCode === 37 || e.keyCode === 39) { + let _value = e.keyCode === 37 ? value - step : value + step + if (_value < (min || 0)) { + _value = min || 0 + } else if (_value > (max || 100)) { + _value = max || 100 + } + setStartPosition(((_value - (min || 0)) / ((max || 100) - (min || 0))) * 100) + if (initValue === undefined) { + setValue(_value) + } + onChange(_value) + } + }, + [value] + ) + + useEffect(() => { + if (canKeyDown) { + window.onkeydown = onKeyDown + } else { + window.onkeydown = null + } + }, [canKeyDown, onKeyDown]) + + useEffect(() => { + if (initValue !== undefined) { + const _value = getValue(initValue) + setValue(_value) + } + }, [initValue]) + + // 移动 + const onMouseMove = useCallback( + (e) => { + if (canMove) { + setIsMove(true) + const parent = sliderRef.current + + const { + width: sliderWidth, + height: sliderHeight, + right: sliderRight, + left: sliderLeft, + top: sliderTop, + bottom: sliderBottom + } = parent.getBoundingClientRect() + + let diff = 0 + let changeValue = 0 + + if (vertical) { + diff = -Math.round((((e.clientY - startY) / sliderHeight) * 100) / positionStep) * positionStep + } else { + diff = Math.round((((e.clientX - startX) / sliderWidth) * 100) / positionStep) * positionStep + } + // 开始位置 + 偏移位置 + let position = startPosition + diff + // 边界判断 + if (position <= 0) { + position = 0 + if (vertical) { + setStartY(sliderBottom) + } else { + setStartX(sliderLeft) + } + + setStartPosition(position) + } else if (position >= 100) { + position = 100 + if (vertical) { + setStartY(sliderTop) + } else { + setStartX(sliderRight) + } + + setStartPosition(position) + } + + changeValue = (min || 0) + Math.round((((max || 100) - (min || 0)) * position) / 100) + if (changeValue < (min || 0)) { + changeValue = min || 0 + } else if (changeValue > (max || 100)) { + changeValue = max || 100 + } + + if (initValue === undefined) { + setValue(changeValue) + } + + onChange(changeValue) + } + }, + [canMove, positionStep, startPosition] + ) + const onMouseUp = useCallback( + (e) => { + e.stopPropagation() + setLastTime(new Date().getTime()) + setStartPosition(newRightPosition) + // setShowTooltip(false) + setCanMove(false) + // setIsClick(false) + setIsMove(false) + }, + [newRightPosition] + ) + useEffect(() => { + if (disabled) { + return + } + if (canMove) { + window.onmouseup = onMouseUp + window.onmousemove = onMouseMove + } else { + window.onmouseup = null + window.onmousemove = null + } + }, [canMove, disabled, onMouseUp, onMouseMove]) + + // 获取 track 宽度 + const getTrackWidth = useCallback( + (value) => { + return ((value - (min || 0)) / ((max || 100) - (min || 0))) * 100 + }, + [value] + ) + + // 鼠标落下 + const onMouseDown = useCallback( + (e) => { + setFirstTime(new Date().getTime()) + if (disabled) { + return + } + const { clientX, clientY } = e + setCanMove(true) + setIsMove(true) + setIsClick(false) + setStartPosition(getTrackWidth(value)) + if (vertical) { + setStartY(clientY) + } else { + setStartX(clientX) + } + }, + [disabled, vertical, getTrackWidth] + ) + + // 鼠标移入展示tooltip + const onMouseEnter = useCallback(() => { + setShowTooltip(true) + }, [value]) + + // 点击滑块 + const onHandleClick = useCallback( + (e) => { + if (lastTime - firstTime < 200) { + e.stopPropagation() + setIsClick(true) + setShowTooltip(true) + setCanKeyDown(true) + } + }, + [lastTime, firstTime] + ) + + // slider 点击 + const railClick = useCallback( + (e) => { + if (disabled) { + return + } + + const parent = sliderRef.current + let diff = 0 + let position + const { width: sliderWidth, height: sliderHeight, left } = parent.getBoundingClientRect() + const { x, y } = tooltipRef.current.getBoundingClientRect() + + if (vertical) { + diff = -Math.round((((e.clientY - y) / sliderHeight) * 100) / positionStep) * positionStep + position = newRightPosition + diff + } else { + diff = Math.round((((e.clientX - x) / sliderWidth) * 100) / positionStep) * positionStep + position = e.clientX <= left ? 0 : newRightPosition + diff + } + + if (position <= 0) { + position = 0 + } else if (position >= 100) { + position = 100 + } + + const value = (min || 0) + Math.round((((max || 100) - (min || 0)) * position) / 100) + if (initValue === undefined) { + setValue(value) + } + setIsClick(true) + setStartPosition(position) + onChange(value) + }, + [positionStep, newRightPosition, vertical, disabled] + ) + // 点击marks上的点 + const onMarksClick = useCallback((e, value) => { + e.stopPropagation() + if (initValue === undefined) { + setValue(value) + setStartPosition(((value - (min || 0)) / ((max || 100) - (min || 0))) * 100) + } + onChange(value) + }, []) + const sliderClasses = classNames(prefixCls, `theme__${theme}`, { + [`${prefixCls}--disabled`]: disabled, + [`${prefixCls}--vertical`]: vertical, + [`${prefixCls}--${type}`]: true + }) + + return ( + <div className={sliderClasses} ref={sliderRef} id={prefixCls}> + <div className={`${prefixCls}__rail`} onClick={railClick} /> + <div + className={`${prefixCls}__track`} + style={{ + [!vertical ? 'width' : 'height']: `${newRightPosition.toFixed(4)}%`, + [!vertical ? 'left' : 'bottom']: 0 + }} + onClick={railClick} + /> + <div + className={classNames(`${prefixCls}__handle`, { + [`${prefixCls}__handle--focus`]: isClick + })} + onMouseDown={onMouseDown} + onMouseEnter={onMouseEnter} + onMouseLeave={() => { + if (!isMove && !isClick) { + setShowTooltip(false) + } + }} + ref={tooltipRef} + onClick={onHandleClick} + style={{ + [!vertical ? 'left' : 'top']: `${ + !vertical ? newRightPosition.toFixed(4) : (100 - newRightPosition).toFixed(4) + }%` + }} + tabIndex="0" + > + <CSSTransition + in={showTooltip} + timeout={300} + classNames={`${prefixCls}__tooltip`} + className={`${prefixCls}__tooltip`} + > + <div + style={{ + position: 'absolute', + top: !vertical ? 0 : 5, + left: !vertical ? 5 : 10, + width: '100%' + }} + > + <div className="hi-popper__container" style={{ left: 0, top: 0, zIndex: 1070 }}> + <div + className={classNames('hi-tooltip__popper', 'hi-popper__content', { + [`hi-popper__content--${vertical ? 'right' : 'top'}`]: true + })} + style={{ width: 'auto' }} + > + <div + className={classNames('hi-tooltip-base', { + [`hi-tooltip-${vertical ? 'right' : 'top'}`]: true + })} + > + {tipFormatter ? tipFormatter(value) : value} + </div> + </div> + </div> + </div> + </CSSTransition> + </div> + <div className={`${prefixCls}__step`} onClick={railClick}> + {Object.keys(marks).map((item, index) => ( + <span + className={classNames(`${prefixCls}__step-dot`, { + [`${prefixCls}__step-dotDisabled`]: value <= ((item - (min || 0)) / ((max || 100) - (min || 0))) * 100 + })} + key={index} + style={{ + [!vertical ? 'left' : 'bottom']: ((item - (min || 0)) / ((max || 100) - (min || 0))) * 100 + '%' + }} + onClick={(e) => onMarksClick(e, ((item - (min || 0)) / ((max || 100) - (min || 0))) * 100)} + /> + ))} + </div> + {((min && max) || Object.entries(marks).length !== 0) && ( + <div className={`${prefixCls}__stepText`}> + {min && <span className={`${prefixCls}__min ${prefixCls}__stepText-dot`}>{min}</span>} + {max && <span className={`${prefixCls}__max ${prefixCls}__stepText-dot`}>{max}</span>} + {Object.entries(marks).map(([key, item], index) => ( + <span + className={`${prefixCls}__stepText-dot`} + key={index} + style={{ + [!vertical ? 'left' : 'bottom']: ((key - (min || 0)) / ((max || 100) - (min || 0))) * 100 + '%', + transform: !vertical ? 'translateX(-50%)' : 'translateY(50%)' + }} + onClick={(e) => { + onMarksClick(e, ((key - (min || 0)) / ((max || 100) - (min || 0))) * 100) + }} + > + {item} + </span> + ))} + </div> + )} + </div> + ) + } +) +export default Provider(Slider) diff --git a/components/slider/style/index.js b/components/slider/style/index.js new file mode 100644 index 000000000..63810a681 --- /dev/null +++ b/components/slider/style/index.js @@ -0,0 +1 @@ +import './index.scss' diff --git a/components/slider/style/index.scss b/components/slider/style/index.scss new file mode 100644 index 000000000..2284c8ec9 --- /dev/null +++ b/components/slider/style/index.scss @@ -0,0 +1,229 @@ +@import '../../core-css/index.scss'; + +$prefix: 'hi-slider' !default; +$color-map: ( + 'primary': use-color('primary'), + 'warning': get-color($palette-secondary, 'warning'), + 'success': get-color($palette-secondary, 'success'), + 'danger': get-color($palette-secondary, 'danger') +) !default; + +.#{$prefix} { + box-sizing: border-box; + color: use-color('gray-80'); + font-size: $font-size-normal; + font-variant: tabular-nums; + line-height: 1.5715; + list-style: none; + position: relative; + height: 12px; + margin: 10px 6px; + padding: 4px 0; + + &.#{$prefix}--disabled { + cursor: not-allowed; + + .#{$prefix}__track { + background: use-color('gray-50'); + } + + .#{$prefix}__handle { + border-color: use-color('gray-50'); + + &:focus { + box-shadow: none; + } + } + + > * { + cursor: not-allowed !important; + } + } + + &.#{$prefix}--vertical { + height: 100%; + margin: 0; + padding: 0 4px; + + .#{$prefix}__rail { + height: 100%; + width: 4px; + } + + .#{$prefix}__track { + width: 4px; + } + + .#{$prefix}__handle { + margin-left: -5px; + margin-top: 0; + transform: translateY(-50%); + } + + .#{$prefix}__step { + position: absolute; + width: 4px; + height: 100%; + + &-dot { + position: absolute; + border-radius: 50%; + transform: translate(-50%, 50%); + left: 2px; + top: auto; + width: 7px; + height: 7px; + background: use-color('white'); + border: 1px solid use-color('primary'); + } + } + + .#{$prefix}__stepText { + height: 100%; + width: 40px; + position: absolute; + margin: 0; + right: 15px; + + .#{$prefix}__min { + transform: translateX(0%); + position: absolute; + bottom: -10px; + right: 0; + } + + .#{$prefix}__max { + position: absolute; + top: -4px; + transform: translateX(0%); + right: 0; + } + } + } + + .#{$prefix}__rail { + position: absolute; + width: 100%; + height: 4px; + background-color: use-color('gray-10'); + border-radius: 2px; + transition: background-color 0.3s; + } + + .#{$prefix}__step { + position: absolute; + width: 100%; + height: 4px; + background: 0 0; + cursor: pointer; + + &-dot { + position: absolute; + border-radius: 50%; + transform: translateX(-50%); + top: -3px; + width: 7px; + height: 7px; + background: use-color('white'); + border: 1px solid use-color('primary'); + + &.#{$prefix}__step-dotDisabled { + background: use-color('gray-30'); + border: 1px solid use-color('gray-30'); + } + } + } + + .#{$prefix}__stepText { + margin-top: 10px; + width: 100%; + height: 4px; + background: 0 0; + + .#{$prefix}__min { + transform: translateX(-50%); + } + + .#{$prefix}__max { + right: 0; + transform: translateX(50%); + } + + &-dot { + position: absolute; + border-radius: 50%; + cursor: pointer; + } + } + + .#{$prefix}__handle { + position: absolute; + width: 14px; + height: 14px; + margin-top: -5px; + background-color: use-color('white'); + border: solid 2px use-color('primary'); + border-radius: 50%; + box-sizing: border-box; + z-index: 20; + cursor: pointer; + transform: translateX(-50%); + user-select: none; + + &:focus, + &--focus { + box-shadow: 0 0 0 5px use-color('primary-20'); + outline: none; + } + } + + .#{$prefix}__track { + position: absolute; + height: 4px; + background: use-color('primary'); + border-radius: 2px; + } + + .#{$prefix}__tooltip { + opacity: 0; + + &-enter { + opacity: 0; + } + + &-enter-active { + opacity: 1; + transition: opacity 200ms; + } + + &-enter-done { + opacity: 1; + transition: opacity 200ms; + } + + &-exit { + opacity: 1; + } + + &-exit-done { + opacity: 0; + transition: opacity 200ms; + } + } + + @each $key, $value in $color-map { + &--#{$key} { + .#{$prefix}__track { + background-color: $value; + } + + .#{$prefix}__handle { + border-color: $value; + } + + .#{$prefix}__step-dot { + border-color: $value; + } + } + } +} diff --git a/components/stepper/Stepper.js b/components/stepper/Stepper.js index 2f6036a42..88d1eca7f 100644 --- a/components/stepper/Stepper.js +++ b/components/stepper/Stepper.js @@ -1,9 +1,9 @@ import React from 'react' +import Provider from '../context' +import Icon from '../icon' import classnames from 'classnames' import PropTypes from 'prop-types' -import Provider from '../context' -import Icon from '../icon' /** * Props * @prop id {string} id @@ -21,8 +21,7 @@ import Icon from '../icon' * @prop itemLayout {string} sign显示位置 */ class Stepper extends React.Component { - renderNode (arg, info) { - const { icon } = info + renderNode(arg, info) { const { itemLayout, current } = this.props const _c = classnames( 'hi-stepper__item', @@ -32,35 +31,34 @@ class Stepper extends React.Component { ) return ( <li className={_c} key={info.key}> - <div className='hi-stepper__item-content'> - <span className='hi-stepper__icon'> - {icon ? ( - typeof icon === 'string' ? ( - <Icon name={icon} /> + <div className="hi-stepper__item-content"> + <span className="hi-stepper__icon"> + {info.icon ? ( + typeof info.icon === 'string' ? ( + <Icon name={info.icon} /> ) : ( - icon + info.icon ) ) : ( - <span className='hi-stepper__num'>{info.key + 1}</span> + <span className="hi-stepper__num">{info.key + 1}</span> )} </span> - <span className='hi-stepper__title'> {info.title}</span> - {(arg === 'v' || itemLayout) && ( - <span className='hi-stepper__text'>{info.content}</span> - )} + <span className="hi-stepper__title"> {info.title}</span> + {(arg === 'v' || itemLayout) && <span className="hi-stepper__text">{info.content}</span>} </div> </li> ) } - renderStepperBar () { + + renderStepperBar() { const { current, data, vertical } = this.props const len = data.length return ( - <ul className='hi-stepper__list'> + <ul className="hi-stepper__list"> {data.map((v, i) => { - let info = Object.assign({ key: i, current }, v) + const info = Object.assign({ key: i, current }, v) if (i === len - 1) { info.last = true } @@ -70,13 +68,12 @@ class Stepper extends React.Component { </ul> ) } - render () { - let { className, placement, theme, style } = this.props + + render() { + const { className, placement, theme, style } = this.props const _className = classnames( 'hi-stepper', - placement === 'vertical' - ? 'hi-stepper--vertical' - : 'hi-stepper--horizontal', + placement === 'vertical' ? 'hi-stepper--vertical' : 'hi-stepper--horizontal', className, theme && 'theme__' + theme ) diff --git a/components/stepper/index.d.ts b/components/stepper/index.d.ts new file mode 100644 index 000000000..94af647fa --- /dev/null +++ b/components/stepper/index.d.ts @@ -0,0 +1,13 @@ +type DataItem = { + title: string | JSX.Element + content?: string | JSX.Element + icon?: string | JSX.Element +} +interface Props { + data: DataItem[] + current?: number + placement?: 'vertical' | 'horizontal' + itemLayout?: 'vertical' | 'horizontal' +} +declare const Stepper: React.ComponentType<Props> +export default Stepper diff --git a/components/stepper/style/index.scss b/components/stepper/style/index.scss index 14bc2a90c..170ef0f46 100644 --- a/components/stepper/style/index.scss +++ b/components/stepper/style/index.scss @@ -1,4 +1,4 @@ -@import '@hi-ui/core-css/index.scss'; +@import '../../core-css/index.scss'; .hi-stepper { width: 100%; @@ -29,13 +29,13 @@ line-height: 24px; border-radius: 50%; text-align: center; - color: #fff; - background-color: #ccc; + color: use-color('white'); + background-color: use-color('gray-50'); } &__title { padding: 0 0 0 8px; - color: #999; + color: use-color('gray-80'); text-align: center; word-break: keep-all; overflow: hidden; @@ -43,7 +43,7 @@ &__icon { display: inline-block; - background-color: #fff; + background-color: use-color('white'); z-index: 1; text-align: center; width: 24px; @@ -68,7 +68,7 @@ align-items: center; min-width: 36px; padding: 0 8px; - background-color: #fff; + background-color: use-color('white'); box-sizing: border-box; z-index: 1; } @@ -79,6 +79,26 @@ z-index: 1; display: flex; + &--active { + .hi-icon { + color: use-color('primary'); + } + + .hi-stepper__num { + background-color: use-color('primary'); + } + + .hi-stepper__title { + color: use-color('primary'); + } + } + + &--done { + &::after { + background-color: use-color('primary') !important; + } + } + &::after { content: ''; position: absolute; @@ -87,7 +107,7 @@ display: block; width: 100%; height: 1px; - background-color: #ccc; + background-color: use-color('gray-50'); z-index: -1; } @@ -125,7 +145,7 @@ &__text { font-size: 12px; - color: #999; + color: use-color('gray-80'); width: 100%; } } @@ -154,7 +174,6 @@ left: 12px; width: 1px; height: 100%; - background-color: #d8d8d8; } } @@ -171,7 +190,7 @@ &__icon { display: inline-block; padding: 4px 0; - background-color: #fff; + background-color: use-color('white'); z-index: 1; } @@ -179,33 +198,7 @@ flex: 1 1 100%; margin-left: 32px; font-size: 12px; - color: #666; - } - } - } -} - -@each $key, $value in $palette-primary { - .theme__#{$key} { - .hi-stepper__item { - &--active { - .hi-icon { - color: map-get(get-palette($value), '50'); - } - - .hi-stepper__num { - background-color: map-get(get-palette($value), '50'); - } - - .hi-stepper__title { - color: map-get(get-palette($value), '50'); - } - } - - &--done { - &::after { - background-color: map-get(get-palette($value), '50'); - } + color: use-color('gray-80'); } } } diff --git a/components/style/icon/diyIcon.scss b/components/style/icon/diyIcon.scss index afdfb795e..048a83889 100644 --- a/components/style/icon/diyIcon.scss +++ b/components/style/icon/diyIcon.scss @@ -1,9 +1,7 @@ /* stylelint-disable */ @font-face { font-family: 'diy-icon'; - src: - url('data:application/font-woff;base64,d09GRgABAAAAAAd8AAsAAAAADVAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADMAAABCsP6z7U9TLzIAAAE8AAAARAAAAFY8i0gSY21hcAAAAYAAAACNAAACCnnC60BnbHlmAAACEAAAAxYAAAYg/iRy3mhlYWQAAAUoAAAALwAAADYVf46XaGhlYQAABVgAAAAcAAAAJAfeA45obXR4AAAFdAAAAA8AAAA0NAAAAGxvY2EAAAWEAAAAHAAAABwJBApwbWF4cAAABaAAAAAfAAAAIAEeAEpuYW1lAAAFwAAAAUUAAAJtPlT+fXBvc3QAAAcIAAAAdAAAAI5LGQcBeJxjYGRgYOBikGPQYWB0cfMJYeBgYGGAAJAMY05meiJQDMoDyrGAaQ4gZoOIAgCKIwNPAHicY2BkYWCcwMDKwMHUyXSGgYGhH0IzvmYwYuRgYGBiYGVmwAoC0lxTGByeiT5TYG7438AQw9zA0AAUZgTJAQDhPgwYeJztkckRAjEQA9usWa79LvcVAAEQEC+iIrpJY9FYD5LAVa2qkcd+SMAc6MRDVChvCnleckvzO9bNrzzbTk0/7tMkHVM116Yz7Vb92LNgyUrvNgy66PmfoennN8VoWppbowSJnclWYm8y3ziYbCyORkkTJ6PMibNR+sTFqAfiarLJuBl1oxYNwxd56yFfAAAAeJx1VE9M01Acfr9WWgazY11f2zG2sb0yCAtbWNcWHQMUBQ/yJ5jWmGBIPCghhoQLEfVQYsJBEiMHY+LReFHCHQ8e9MZBD/45cDDxrDdJSDxQfQOjsK6/9r3Xvpe+73vf7+sPsQj9/sK6bB6dRjGUQAiiEsdnCmBEy6aV6ccpqEBTBpMovVg3Lh44YjwuMr2giq6HILZoLTLugSuqQGdYREdXjLtF7xt0Ihon9ycB++uKbh02lnQT3odzsFmpMiPmCFOtXB8YZobPNEDcp+G92dujmKdOYKpIa4wKlmIpXQWmPAR6CiTOj3p/4tYj72k4Fqa3qKp+VO/Gi8uru7vQKslSGFRNrTtvOvC8ls4rpJsnlg/16+jU1OjSygXn6uidBudcXn6+tbq6VdOWr8sdQXmko2oQZknKAyYW1ktmOUcsvSRLXB7+v2OCa82v/sK1iUmDEF2RZWVxskxjkmg9mtbzeGNxfp74SX58MLN9KZqLJq2bA9vPuqa7ksnB5FxdXjTUE5CXAmS5mjpDYKVA4QlvZLDPem8ZzdQYWICmufHxuSZY+AFOgwR9aieknePGZhlmdoxzbZvqxv3jEUMK1S1NleujXLBuZFKAj1NqonM8bUk4GiGD/67Cpg12jc8RK7DtV7Xbc1l0NMfmHYcyOUDHGDn2YTgOffCc/NFKnWf6AvJnmXKSurQIuJa2bK4KZbMCJdkvzXe7WRCa7bbwz3DbYefX5VcH2xJaC7UwiZ4IxpF3ta4uP/3obAATiinxHC9AEohRNofBNKiBcjyHSdmMmdRW2VzZ9NFa66/GeE1os3AxJKQ6SEQwzxWjWE7Lsp/gbbOQizd3tqbFUKijt7clKiWoF8TswDnvM+BO+hWu45sOqi5AXW3oBqEuIt0ZnPER2yjcK66D/vAl6N77Bh6aTddi/7W/nnUFIFLnGnoBugnOZalOKfBhLqgJeCLo6RlsJYiavdgAtir0KjsdadgRIvh8JVxf1xLB1bQk8fQ/jmF9CGhi/FV7feXuFcua1rJZrUGF+QAudC5B+2A7Qn8APVIftAAAeJxjYGRgYADik23MRfH8Nl8ZuFkYQOCmgaovgv5/lYWBWRvI5WBgAokCAPvlCHsAeJxjYGRgYG7438AQw8IAAkCSkQEV8AIARxMCdnicY2FgYGAhEQMABeQANQAAAAAAADAAagCoAN4BNgF6AcICBgJeApgC1gMQeJxjYGRgYOBlsGNgZwABJiDmAkIGhv9gPgMAEFgBaQB4nGWPTU7DMBCFX/oHpBKqqGCH5AViASj9EatuWFRq911036ZOmyqJI8et1ANwHo7ACTgC3IA78EgnmzaWx9+8eWNPANzgBx6O3y33kT1cMjtyDRe4F65TfxBukF+Em2jjVbhF/U3YxzOmwm10YXmD17hi9oR3YQ8dfAjXcI1P4Tr1L+EG+Vu4iTv8CrfQ8erCPuZeV7iNRy/2x1YvnF6p5UHFockikzm/gple75KFrdLqnGtbxCZTg6BfSVOdaVvdU+zXQ+ciFVmTqgmrOkmMyq3Z6tAFG+fyUa8XiR6EJuVYY/62xgKOcQWFJQ6MMUIYZIjK6Og7VWb0r7FDwl57Vj3N53RbFNT/c4UBAvTPXFO6stJ5Ok+BPV8bUnV0K27LnpQ0kV7NSRKyQl7WtlRC6gE2ZVeOEXpc0Yk/KGdI/wAJWm7IAAAAeJxtwbEOgjAQBuD7KaWKYnglE+Pi4uRO4RIukrbBq5a3d3D1+6iin5b+61DBoIZFA4cd9mhxwBEdTmS0aP2J69RoTjIEy2XkxdwvV8OF3XkdZ3mzfQhPsff5ya9ZvLBmL0N0N95CVLabhIVNSkr0BaZTHFg=') - format('woff'); + src: url('data:application/font-woff;base64,d09GRgABAAAAAAd8AAsAAAAADVAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADMAAABCsP6z7U9TLzIAAAE8AAAARAAAAFY8i0gSY21hcAAAAYAAAACNAAACCnnC60BnbHlmAAACEAAAAxYAAAYg/iRy3mhlYWQAAAUoAAAALwAAADYVf46XaGhlYQAABVgAAAAcAAAAJAfeA45obXR4AAAFdAAAAA8AAAA0NAAAAGxvY2EAAAWEAAAAHAAAABwJBApwbWF4cAAABaAAAAAfAAAAIAEeAEpuYW1lAAAFwAAAAUUAAAJtPlT+fXBvc3QAAAcIAAAAdAAAAI5LGQcBeJxjYGRgYOBikGPQYWB0cfMJYeBgYGGAAJAMY05meiJQDMoDyrGAaQ4gZoOIAgCKIwNPAHicY2BkYWCcwMDKwMHUyXSGgYGhH0IzvmYwYuRgYGBiYGVmwAoC0lxTGByeiT5TYG7438AQw9zA0AAUZgTJAQDhPgwYeJztkckRAjEQA9usWa79LvcVAAEQEC+iIrpJY9FYD5LAVa2qkcd+SMAc6MRDVChvCnleckvzO9bNrzzbTk0/7tMkHVM116Yz7Vb92LNgyUrvNgy66PmfoennN8VoWppbowSJnclWYm8y3ziYbCyORkkTJ6PMibNR+sTFqAfiarLJuBl1oxYNwxd56yFfAAAAeJx1VE9M01Acfr9WWgazY11f2zG2sb0yCAtbWNcWHQMUBQ/yJ5jWmGBIPCghhoQLEfVQYsJBEiMHY+LReFHCHQ8e9MZBD/45cDDxrDdJSDxQfQOjsK6/9r3Xvpe+73vf7+sPsQj9/sK6bB6dRjGUQAiiEsdnCmBEy6aV6ccpqEBTBpMovVg3Lh44YjwuMr2giq6HILZoLTLugSuqQGdYREdXjLtF7xt0Ihon9ycB++uKbh02lnQT3odzsFmpMiPmCFOtXB8YZobPNEDcp+G92dujmKdOYKpIa4wKlmIpXQWmPAR6CiTOj3p/4tYj72k4Fqa3qKp+VO/Gi8uru7vQKslSGFRNrTtvOvC8ls4rpJsnlg/16+jU1OjSygXn6uidBudcXn6+tbq6VdOWr8sdQXmko2oQZknKAyYW1ktmOUcsvSRLXB7+v2OCa82v/sK1iUmDEF2RZWVxskxjkmg9mtbzeGNxfp74SX58MLN9KZqLJq2bA9vPuqa7ksnB5FxdXjTUE5CXAmS5mjpDYKVA4QlvZLDPem8ZzdQYWICmufHxuSZY+AFOgwR9aieknePGZhlmdoxzbZvqxv3jEUMK1S1NleujXLBuZFKAj1NqonM8bUk4GiGD/67Cpg12jc8RK7DtV7Xbc1l0NMfmHYcyOUDHGDn2YTgOffCc/NFKnWf6AvJnmXKSurQIuJa2bK4KZbMCJdkvzXe7WRCa7bbwz3DbYefX5VcH2xJaC7UwiZ4IxpF3ta4uP/3obAATiinxHC9AEohRNofBNKiBcjyHSdmMmdRW2VzZ9NFa66/GeE1os3AxJKQ6SEQwzxWjWE7Lsp/gbbOQizd3tqbFUKijt7clKiWoF8TswDnvM+BO+hWu45sOqi5AXW3oBqEuIt0ZnPER2yjcK66D/vAl6N77Bh6aTddi/7W/nnUFIFLnGnoBugnOZalOKfBhLqgJeCLo6RlsJYiavdgAtir0KjsdadgRIvh8JVxf1xLB1bQk8fQ/jmF9CGhi/FV7feXuFcua1rJZrUGF+QAudC5B+2A7Qn8APVIftAAAeJxjYGRgYADik23MRfH8Nl8ZuFkYQOCmgaovgv5/lYWBWRvI5WBgAokCAPvlCHsAeJxjYGRgYG7438AQw8IAAkCSkQEV8AIARxMCdnicY2FgYGAhEQMABeQANQAAAAAAADAAagCoAN4BNgF6AcICBgJeApgC1gMQeJxjYGRgYOBlsGNgZwABJiDmAkIGhv9gPgMAEFgBaQB4nGWPTU7DMBCFX/oHpBKqqGCH5AViASj9EatuWFRq911036ZOmyqJI8et1ANwHo7ACTgC3IA78EgnmzaWx9+8eWNPANzgBx6O3y33kT1cMjtyDRe4F65TfxBukF+Em2jjVbhF/U3YxzOmwm10YXmD17hi9oR3YQ8dfAjXcI1P4Tr1L+EG+Vu4iTv8CrfQ8erCPuZeV7iNRy/2x1YvnF6p5UHFockikzm/gple75KFrdLqnGtbxCZTg6BfSVOdaVvdU+zXQ+ciFVmTqgmrOkmMyq3Z6tAFG+fyUa8XiR6EJuVYY/62xgKOcQWFJQ6MMUIYZIjK6Og7VWb0r7FDwl57Vj3N53RbFNT/c4UBAvTPXFO6stJ5Ok+BPV8bUnV0K27LnpQ0kV7NSRKyQl7WtlRC6gE2ZVeOEXpc0Yk/KGdI/wAJWm7IAAAAeJxtwbEOgjAQBuD7KaWKYnglE+Pi4uRO4RIukrbBq5a3d3D1+6iin5b+61DBoIZFA4cd9mhxwBEdTmS0aP2J69RoTjIEy2XkxdwvV8OF3XkdZ3mzfQhPsff5ya9ZvLBmL0N0N95CVLabhIVNSkr0BaZTHFg=') format('woff'); font-weight: normal; font-style: normal; } @@ -83,6 +81,7 @@ .Ficon-other::before { content: '\e61d'; color: #ccc; + font-size: 18px; } .Ficon-warning::before { @@ -135,6 +134,8 @@ color: #000; } + + .Ficon-success::before { content: '\e674'; color: #000; diff --git a/components/switch/index.d.ts b/components/switch/index.d.ts new file mode 100644 index 000000000..63030e7b3 --- /dev/null +++ b/components/switch/index.d.ts @@ -0,0 +1,9 @@ +interface Props { + content?: string[] | JSX.Element[] + checked?: boolean + defaultChecked?: boolean + disabled?: boolean + onChange?: (checked: boolean) => void +} +declare const Switch: React.ComponentType<Props> +export default Switch diff --git a/components/switch/index.js b/components/switch/index.js old mode 100755 new mode 100644 index 3222742dc..fd282866c --- a/components/switch/index.js +++ b/components/switch/index.js @@ -1,71 +1,4 @@ -import React, { Component } from 'react' -import PropTypes from 'prop-types' -import classNames from 'classnames' -import Provider from '../context' -import './style/index' - -class Switch extends Component { - constructor (props) { - super(props) - this.state = { - checked: props.checked - } - } - - componentWillReceiveProps (nextProps) { - if (nextProps.checked !== this.props.checked) { - this.setState({ checked: nextProps.checked }, () => { - this.props.onChange(nextProps.checked) - }) - } - } - - clickEvent () { - const { disabled, onChange, onClick } = this.props - if (!disabled) { - const res = onClick(this.state.checked) - if (typeof res === 'boolean' && !res) { - return - } - this.setState({ checked: !this.state.checked }, () => { - onChange(this.state.checked) - }) - } - } - - render () { - const { theme, content, disabled } = this.props - const { checked } = this.state - const sCls = classNames( - 'theme__' + theme, - 'hi-switch', - !checked && 'hi-switch--closed', - disabled && 'hi-switch--disabled' - ) - return ( - <span className={sCls} onClick={this.clickEvent.bind(this)}> - <span className='hi-switch__text'> - {content.length > 0 && (checked ? content[0] : content[1])} - </span> - </span> - ) - } -} - -Switch.defaultProps = { - content: [], - checked: false, - disabled: false, - onChange: () => {}, - onClick: () => { - return true - } -} -Switch.propTypes = { - content: PropTypes.array, - checked: PropTypes.bool, - disabled: PropTypes.bool, - onChange: PropTypes.func, - onClick: PropTypes.func -} -export default Provider(Switch) +import Switch from './switch' +import LegacySwitch from './switch-legacy' +export default Switch +export { LegacySwitch } diff --git a/components/switch/style/index.scss b/components/switch/style/index.scss index 776418c3b..87ecae8c0 100755 --- a/components/switch/style/index.scss +++ b/components/switch/style/index.scss @@ -1,23 +1,4 @@ -@import '@hi-ui/core-css/index.scss'; - -$basic-color: #4284f5 !default; - -@mixin hi-switch-style($color: get-color($palette-primary, 'hiui-blue')) { - & { - background: map-get(get-palette($color), '50'); - - &--closed, - &--disabled { - background: map-get(get-palette($color), 'g60'); - } - - &--disabled { - &::after { - background: map-get(get-palette($color), 'g50'); - } - } - } -} +@import '../../core-css/index.scss'; .hi-switch { display: inline-block; @@ -27,14 +8,18 @@ $basic-color: #4284f5 !default; cursor: pointer; position: relative; vertical-align: middle; + background: use-color('primary'); - @include hi-switch-style(); + &--closed, + &--disabled { + background: use-color('gray-50'); + } &::after { content: ''; width: 16px; height: 16px; - background: rgba(255, 255, 255, 1); + background: use-color('white'); position: absolute; border-radius: 50%; top: 2px; @@ -45,8 +30,8 @@ $basic-color: #4284f5 !default; } &__text { - color: #fff; - font-size: 12px; + color: use-color('white'); + font-size: $font-size-small; position: absolute; top: 0; line-height: 20px; @@ -71,9 +56,3 @@ $basic-color: #4284f5 !default; cursor: not-allowed; } } - -@each $key, $value in $palette-primary { - .theme__#{$key}.hi-switch { - @include hi-switch-style($value); - } -} diff --git a/components/switch/switch-legacy/__tests__/__snapshots__/index.test.js.snap b/components/switch/switch-legacy/__tests__/__snapshots__/index.test.js.snap new file mode 100644 index 000000000..1ea3722cc --- /dev/null +++ b/components/switch/switch-legacy/__tests__/__snapshots__/index.test.js.snap @@ -0,0 +1,34 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Switch basic use 1`] = ` +<div> + <span + className="theme__hiui-blue hi-switch hi-switch--closed" + onClick={[Function]} + > + <span + className="hi-switch__text" + /> + </span> + <span + className="theme__hiui-blue hi-switch hi-switch--closed" + onClick={[Function]} + > + <span + className="hi-switch__text" + > + OFF + </span> + </span> + <span + className="theme__hiui-blue hi-switch hi-switch--disabled" + onClick={[Function]} + > + <span + className="hi-switch__text" + > + 开 + </span> + </span> +</div> +`; diff --git a/components/switch/switch-legacy/__tests__/index.test.js b/components/switch/switch-legacy/__tests__/index.test.js new file mode 100644 index 000000000..af6ac56a7 --- /dev/null +++ b/components/switch/switch-legacy/__tests__/index.test.js @@ -0,0 +1,52 @@ +import React from 'react' +import { mount } from 'enzyme' +import renderer from 'react-test-renderer' +import Switch from '..' + +describe('Switch', () => { + beforeAll(() => { + jest.useFakeTimers() + }) + + afterAll(() => { + jest.useRealTimers() + }) + it('basic use', () => { + const wrapper = renderer.create( + <div> + <Switch /> + <Switch content={['ON', 'OFF']} /> + <Switch checked disabled content={['开', '关']} /> + </div> + ) + expect(wrapper).toMatchSnapshot() + }) + it('onchange', () => { + const onChange = jest.fn() + const wrapper = mount( + <Switch onChange={onChange} /> + ) + wrapper.find('.hi-switch').simulate('click') + expect(onChange).toBeCalled() + }) + it("checked",()=>{ + const wrapper = mount(<Switch checked content={['开', '关']} />) + expect(wrapper.find('.hi-switch--closed')).toHaveLength(0) + wrapper.setProps({checked:false}) + expect(wrapper.find('.hi-switch--closed')).toHaveLength(1) + }) + it("disabled",()=>{ + const wrapper = mount( + <Switch checked disabled /> + ) + wrapper.find('.hi-switch').simulate('click') + expect(wrapper.find('.hi-switch--closed')).toHaveLength(0) + }) + it('oldProps onClick', () => { + const wrapper = mount( + <Switch checked onClick={() => {return false}} /> + ) + wrapper.find('.hi-switch').simulate('click') + expect(wrapper.find('.hi-switch--closed')).toHaveLength(0) + }) +}) diff --git a/components/switch/switch-legacy/index.js b/components/switch/switch-legacy/index.js new file mode 100755 index 000000000..407c00e72 --- /dev/null +++ b/components/switch/switch-legacy/index.js @@ -0,0 +1,69 @@ +import React, { Component } from 'react' +import PropTypes from 'prop-types' +import classNames from 'classnames' +import Provider from '../../context' +import './style/index' + +class Switch extends Component { + constructor(props) { + super(props) + this.state = { + checked: props.checked + } + } + + componentWillReceiveProps(nextProps) { + if (nextProps.checked !== this.props.checked) { + this.setState({ checked: nextProps.checked }, () => { + this.props.onChange(nextProps.checked) + }) + } + } + + clickEvent() { + const { disabled, onChange, onClick } = this.props + if (!disabled) { + const res = onClick(this.state.checked) + if (typeof res === 'boolean' && !res) { + return + } + this.setState({ checked: !this.state.checked }, () => { + onChange(this.state.checked) + }) + } + } + + render() { + const { theme, content, disabled } = this.props + const { checked } = this.state + const sCls = classNames( + 'theme__' + theme, + 'hi-switch', + !checked && 'hi-switch--closed', + disabled && 'hi-switch--disabled' + ) + return ( + <span className={sCls} onClick={this.clickEvent.bind(this)}> + <span className="hi-switch__text">{content.length > 0 && (checked ? content[0] : content[1])}</span> + </span> + ) + } +} + +Switch.defaultProps = { + content: [], + checked: false, + disabled: false, + onChange: () => {}, + onClick: () => { + return true + } +} +Switch.propTypes = { + content: PropTypes.array, + checked: PropTypes.bool, + disabled: PropTypes.bool, + onChange: PropTypes.func, + onClick: PropTypes.func +} +export default Provider(Switch) diff --git a/components/switch/switch-legacy/style/index.js b/components/switch/switch-legacy/style/index.js new file mode 100644 index 000000000..63810a681 --- /dev/null +++ b/components/switch/switch-legacy/style/index.js @@ -0,0 +1 @@ +import './index.scss' diff --git a/components/switch/switch-legacy/style/index.scss b/components/switch/switch-legacy/style/index.scss new file mode 100755 index 000000000..776418c3b --- /dev/null +++ b/components/switch/switch-legacy/style/index.scss @@ -0,0 +1,79 @@ +@import '@hi-ui/core-css/index.scss'; + +$basic-color: #4284f5 !default; + +@mixin hi-switch-style($color: get-color($palette-primary, 'hiui-blue')) { + & { + background: map-get(get-palette($color), '50'); + + &--closed, + &--disabled { + background: map-get(get-palette($color), 'g60'); + } + + &--disabled { + &::after { + background: map-get(get-palette($color), 'g50'); + } + } + } +} + +.hi-switch { + display: inline-block; + min-width: 48px; + height: 20px; + border-radius: 10px; + cursor: pointer; + position: relative; + vertical-align: middle; + + @include hi-switch-style(); + + &::after { + content: ''; + width: 16px; + height: 16px; + background: rgba(255, 255, 255, 1); + position: absolute; + border-radius: 50%; + top: 2px; + left: 100%; + transform: translateX(-100%); + margin-left: -2px; + transition: all 200ms linear; + } + + &__text { + color: #fff; + font-size: 12px; + position: absolute; + top: 0; + line-height: 20px; + left: 6px; + transition: all 200ms linear; + user-select: none; + } + + &--closed { + &::after { + left: 2px; + transform: translateX(2px); + } + + .hi-switch__text { + left: auto; + right: 6px; + } + } + + &--disabled { + cursor: not-allowed; + } +} + +@each $key, $value in $palette-primary { + .theme__#{$key}.hi-switch { + @include hi-switch-style($value); + } +} diff --git a/components/switch/switch.js b/components/switch/switch.js new file mode 100755 index 000000000..ab60ef861 --- /dev/null +++ b/components/switch/switch.js @@ -0,0 +1,47 @@ +import React, { useState, useCallback, useEffect } from 'react' +import classNames from 'classnames' +import Provider from '../context' +import './style/index' + +const Switch = ({ content = [], disabled = false, checked, defaultChecked, onChange, onClick, theme }) => { + const [value, setValue] = useState(checked || defaultChecked || false) + + useEffect(() => { + if (checked !== undefined) { + setValue(checked) + } + }, [checked]) + + const clickSwitch = useCallback( + (e) => { + if (!disabled) { + if (onClick) { + onClick(!value, e) + } + if (onChange) { + onChange(!value) + } + if (checked === undefined) { + setValue(!value) + } + } + }, + [disabled, onChange, onClick, checked, value] + ) + + return ( + <span + className={classNames( + 'hi-switch', + `theme__${theme}`, + !value && 'hi-switch--closed', + disabled && 'hi-switch--disabled' + )} + onClick={clickSwitch} + > + <span className="hi-switch__text">{content.length > 0 && (value ? content[0] : content[1])}</span> + </span> + ) +} + +export default Provider(Switch) diff --git a/components/table/BodyTable.jsx b/components/table/BodyTable.jsx new file mode 100644 index 000000000..93f1323d0 --- /dev/null +++ b/components/table/BodyTable.jsx @@ -0,0 +1,189 @@ +import React, { useState, useContext, useRef, useEffect, useCallback } from 'react' +import Row from './Row' +import TableContext from './context' +import _ from 'lodash' +import { flatTreeData, setDepth } from './util' + +const BodyTable = ({ fatherRef, emptyContent }) => { + const [expandedTreeRows, setExpandedTreeRows] = useState([]) + const { + bordered, + data, + columns, + activeSorterColumn, + activeSorterType, + maxHeight, + headerTableRef, + stickyHeaderRef, + bodyTableRef, + leftFixedBodyTableRef, + rightFixedBodyTableRef, + syncScrollLeft, + syncScrollTop, + firstRowRef, + realColumnsWidth, + resizable, + scrollWidth, + setEachRowHeight + } = useContext(TableContext) + // **************** 获取colgroup + const _columns = _.cloneDeep(columns) + const depthArray = [] + setDepth(_columns, 0, depthArray) + const columnsgroup = flatTreeData(_columns).filter((col) => col.isLast) + // **************** + + // **************** 同步滚动位置 + const tableRef = useRef(null) + + // **************** 根据排序列处理数据 + let _data = data + + if (activeSorterColumn) { + const sorter = + columns.filter((d) => d.dataKey === activeSorterColumn)[0] && + columns.filter((d) => d.dataKey === activeSorterColumn)[0].sorter + + if (sorter) { + _data = activeSorterType === 'ascend' ? [...data].sort(sorter) : [...data].sort(sorter).reverse() + } + } + // ************* 处理求和、平均数 + const hasSumColumn = + columns.filter((item) => { + return item.total + }).length > 0 + const sumRow = { key: 'sum' } + columns.forEach((c, index) => { + if (index === 0) { + sumRow[c.dataKey] = '合计' + } + if (c.total) { + sumRow[c.dataKey] = _.sumBy(_data, (d) => d[c.dataKey]) + } + }) + const hasAvgColumn = + columns.filter((item) => { + return item.avg + }).length > 0 + const avgRow = { key: 'avg' } + columns.forEach((c, index) => { + if (index === 0) { + avgRow[c.dataKey] = '平均值' + } + if (c.sum) { + avgRow[c.dataKey] = _.sumBy(_data, (d) => d[c.dataKey]) / _data.length + } + }) + useEffect(() => { + if (tableRef.current && tableRef.current.children[1].children) { + const rowHeightArray = Array.from(tableRef.current.children[1].children).map((tr) => tr.clientHeight) + setEachRowHeight(rowHeightArray) + } + }, [data, setEachRowHeight]) + + let hasTree = false + if (_data && _data.length) { + hasTree = _data.some((row) => { + return row.children && row.children.length + }) + } + + const renderRow = (row, level, index, rowConfig = {}, isTree) => { + let childrenHasTree = false + if (row.children && row.children.length) { + childrenHasTree = row.children.some((child) => child.children && child.children.length) + } + return ( + <React.Fragment key={row.key}> + <Row + innerRef={index === 0 ? firstRowRef : null} + key={row.key} + rowData={row} + allRowData={row} + level={level} + index={index} + expandedTree={expandedTreeRows.includes(row.key)} + expandedTreeRows={expandedTreeRows} + setExpandedTreeRows={setExpandedTreeRows} + isAvgRow={rowConfig.isAvgRow} + isSumRow={rowConfig.isSumRow} + isTree={isTree} + /> + {row.children && + expandedTreeRows.includes(row.key) && + row.children.map((child) => { + return renderRow(child, level + 1, index, _, childrenHasTree || isTree) + })} + </React.Fragment> + ) + } + const renderEmptyContent = useCallback(() => { + return ( + <tr> + <td colSpan={columnsgroup.length} style={{ textAlign: 'center', height: 60 }}> + <div + style={{ + display: 'flex', + justifyContent: 'center', + alignItems: 'center' + }} + > + {typeof emptyContent === 'function' ? emptyContent() : emptyContent} + </div> + </td> + </tr> + ) + }, [columnsgroup.length, emptyContent]) + return ( + <div + style={{ + maxHeight: maxHeight || 'auto', + overflowY: tableRef.current && tableRef.current.clientHeight > maxHeight ? 'scroll' : null, // maxHeight 小于 table 实际高度才处滚动条 + overflowX: + (bodyTableRef.current && bodyTableRef.current.clientWidth) < + (tableRef.current && tableRef.current.clientWidth) + ? 'scroll' + : null // 表格宽度大于div宽度才展示横向滚动条 + }} + ref={bodyTableRef} + onScroll={(e) => { + syncScrollLeft(bodyTableRef.current.scrollLeft, headerTableRef.current) + syncScrollLeft(bodyTableRef.current.scrollLeft, stickyHeaderRef.current) + syncScrollTop(bodyTableRef.current.scrollTop, leftFixedBodyTableRef.current) + syncScrollTop(bodyTableRef.current.scrollTop, rightFixedBodyTableRef.current) + }} + > + <table + ref={tableRef} + style={{ + borderLeft: bordered ? '1px solid #e7e7e7' : 'none', + width: scrollWidth || '100%' + }} + > + <colgroup> + {columnsgroup.map((c, index) => ( + <col + key={index} + style={{ + width: resizable ? realColumnsWidth[index] : c.width, + minWidth: resizable ? realColumnsWidth[index] : c.width + // width: c.width, + // minWidth: c.width + }} + /> + ))} + </colgroup> + <tbody> + {_data && _data.length > 0 + ? _data.map((row, index) => renderRow(row, 1, index, _, hasTree)) + : renderEmptyContent(emptyContent)} + {hasSumColumn && renderRow(sumRow, 1, data.length, { isSumRow: true })} + {hasAvgColumn && renderRow(avgRow, 1, data.length + 1, { isAvgRow: true })} + </tbody> + </table> + </div> + ) +} + +export default BodyTable diff --git a/components/table/Cell.jsx b/components/table/Cell.jsx new file mode 100644 index 000000000..2b3d3ed04 --- /dev/null +++ b/components/table/Cell.jsx @@ -0,0 +1,69 @@ +import React, { useContext } from 'react' +import classNames from 'classnames' +import TableContext from './context' +import Icon from '../icon' +import Indent from './Indent' + +const Cell = ({ + column, + rowData, + allRowData, + columnIndex, + level, + expandedTree, + expandedTreeRows, + setExpandedTreeRows, + rowIndex, + isTree +}) => { + const { highlightedColKeys, highlightColumns, alignRightColumns, prefix } = useContext(TableContext) + // 处理自定义 render 或者合并单元格情况 + const cellContent = column.render + ? column.render(allRowData[column.dataKey], allRowData, rowIndex) + : allRowData[column.dataKey] + const isMergeCell = cellContent && typeof cellContent === 'object' && !cellContent.$$typeof + + if (isMergeCell && (cellContent.props.colSpan === 0 || cellContent.props.rowSpan === 0)) { + return null + } + return ( + <td + key={column.dataKey} + style={{ + textAlign: alignRightColumns.includes(column.dataKey) ? 'right' : 'left' + }} + colSpan={(isMergeCell && cellContent.props.colSpan) || ''} + rowSpan={(isMergeCell && cellContent.props.rowSpan) || ''} + className={classNames({ + [`${prefix}__col--highlight`]: + highlightedColKeys.includes(column.dataKey) || highlightColumns.includes(column.dataKey) + })} + > + {level > 1 && columnIndex === 0 && <Indent times={level - 1} />} + {columnIndex === 0 && + (rowData.children ? ( + <Icon + style={{ marginRight: 4, cursor: 'pointer' }} + name={expandedTree ? 'caret-down' : 'caret-right'} + onClick={() => { + const _expandedTreeRows = [...expandedTreeRows] + if (_expandedTreeRows.includes(rowData.key)) { + const idx = _expandedTreeRows.findIndex((row) => row === rowData.key) + _expandedTreeRows.splice(idx, 1) + setExpandedTreeRows(_expandedTreeRows) + } else { + _expandedTreeRows.push(rowData.key) + setExpandedTreeRows(_expandedTreeRows) + } + }} + /> + ) : ( + isTree && <span style={{ width: 18, display: 'inline-block' }} key={Math.random()} /> + ))} + + {(isMergeCell && cellContent.children) || cellContent} + </td> + ) +} + +export default Cell diff --git a/components/table/ColumnMenu.jsx b/components/table/ColumnMenu.jsx new file mode 100644 index 000000000..677af1b18 --- /dev/null +++ b/components/table/ColumnMenu.jsx @@ -0,0 +1,117 @@ +import React, { useRef, useContext, useState } from 'react' +import Icon from '../icon' +import Popper from '../popper' +import TableContext from './context' +import classNames from 'classnames' +import useClickOutside from './hooks/useClickOutside' + +const ColumnMenu = ({ columnKey, canSort, isSticky }) => { + const menuRef = useRef(null) + const popperMenu = useRef(null) + useClickOutside(popperMenu, () => setShowPopper(false), menuRef) + const { + activeSorterColumn, + setActiveSorterColumn, + activeSorterType, + setActiveSorterType, + highlightColumns, + setHighlightColumns, + freezeColumn, + setFreezeColumn, + prefix, + ceiling, + theme + } = useContext(TableContext) + const [showPopper, setShowPopper] = useState(false) + const _showPopper = ceiling ? isSticky && showPopper : showPopper + + return ( + <span + ref={menuRef} + onClick={() => { + setShowPopper(!showPopper) + }} + > + <Icon name="down" style={{ marginLeft: 4, cursor: 'pointer' }} /> + <Popper show={_showPopper} attachEle={menuRef.current} zIndex={1040} setOverlayContainer={() => document.body}> + <div className={[`${prefix}__col-menu theme__${theme}`]} ref={popperMenu}> + {canSort && ( + <div + className={classNames(`${prefix}__col-menu__item`, { + 'col-menu__item--highlight': activeSorterType === 'ascend' && activeSorterColumn === columnKey + })} + onClick={(e) => { + if (activeSorterType === 'ascend' && activeSorterColumn === columnKey) { + setActiveSorterType(null) + setActiveSorterColumn(null) + } else { + setActiveSorterType('ascend') + setActiveSorterColumn(columnKey) + } + setShowPopper(false) + }} + > + 升序 + <Icon name="asc" /> + </div> + )} + {canSort && ( + <div + className={classNames(`${prefix}__col-menu__item`, { + 'col-menu__item--highlight': activeSorterType === 'descend' && activeSorterColumn === columnKey + })} + onClick={(e) => { + if (activeSorterType === 'descend' && activeSorterColumn === columnKey) { + setActiveSorterType(null) + setActiveSorterColumn(null) + } else { + setActiveSorterType('descend') + setActiveSorterColumn(columnKey) + } + setShowPopper(false) + }} + > + 降序 + <Icon name="desc" /> + </div> + )} + <div + className={classNames(`${prefix}__col-menu__item`, { + 'col-menu__item--highlight': highlightColumns.includes(columnKey) + })} + onClick={(e) => { + if (highlightColumns.includes(columnKey)) { + setHighlightColumns(highlightColumns.filter((c) => c !== columnKey)) + } else { + setHighlightColumns(highlightColumns.concat(columnKey)) + } + setShowPopper(false) + }} + > + 高亮 + <Icon name="mark" /> + </div> + + <div + className={classNames(`${prefix}__col-menu__item`, { + 'col-menu__item--highlight': freezeColumn === columnKey + })} + onClick={(e) => { + if (freezeColumn === columnKey) { + setFreezeColumn(null) + } else { + setFreezeColumn(columnKey) + } + setShowPopper(false) + }} + > + 冻结 + <Icon name="lock" /> + </div> + </div> + </Popper> + </span> + ) +} + +export default ColumnMenu diff --git a/components/table/FixedBodyTable.jsx b/components/table/FixedBodyTable.jsx new file mode 100644 index 000000000..abe35091a --- /dev/null +++ b/components/table/FixedBodyTable.jsx @@ -0,0 +1,164 @@ +import React, { useState, useContext, useRef } from 'react' +import Row from './Row' +import TableContext from './context' +import _ from 'lodash' +import { flatTreeData, setDepth } from './util' + +const FixedBodyTable = ({ isFixed, rightFixedIndex }) => { + const [expandedTreeRows, setExpandedTreeRows] = useState([]) + const { + data, + leftFixedData, + rightFixedData, + leftFixedColumns, + rightFixedColumns, + columns, + maxHeight, + scrollBarSize, + syncScrollTop, + leftFixedBodyTableRef, + rightFixedBodyTableRef, + bodyTableRef, + activeSorterColumn, + activeSorterType, + realColumnsWidth, + bordered, + eachRowHeight + } = useContext(TableContext) + let _columns + if (isFixed === 'left') { + _columns = _.cloneDeep(leftFixedColumns) + } + if (isFixed === 'right') { + _columns = _.cloneDeep(rightFixedColumns) + } + const depthArray = [] + setDepth(_columns, 0, depthArray) + const columnsgroup = flatTreeData(_columns).filter((col) => col.isLast) + // TODO: 这里是考虑了多级表头的冻结,待优化 + // *********全量 col group + const allColumns = _.cloneDeep(columns) + const _depthArray = [] + setDepth(allColumns, 0, _depthArray) + const allColumnsgroup = flatTreeData(allColumns).filter((col) => col.isLast) + // *********** + const bodyInner = useRef(null) + const renderRow = (row, level, index, allRowData) => { + return ( + <React.Fragment key={row.key}> + <Row + rowData={row} + allRowData={allRowData} + isFixed={isFixed} + level={level} + index={index} + rowHeight={eachRowHeight[index]} + expandedTree={expandedTreeRows.includes(row.key)} + expandedTreeRows={expandedTreeRows} + setExpandedTreeRows={setExpandedTreeRows} + /> + {row.children && + expandedTreeRows.includes(row.key) && + row.children.map((child) => { + return renderRow(child, level + 1) + })} + </React.Fragment> + ) + } + let fixedColumnsWidth + if (isFixed === 'left') { + fixedColumnsWidth = leftFixedColumns + .map((c, idx) => realColumnsWidth[idx]) + .reduce((total, cur) => { + return total + cur + }, 0) + } + if (isFixed === 'right') { + fixedColumnsWidth = rightFixedColumns + .map((c, idx) => realColumnsWidth[idx + rightFixedIndex]) + .reduce((total, cur) => { + return total + cur + }, 0) + } + const fixedBodyTableRef = isFixed === 'left' ? leftFixedBodyTableRef : rightFixedBodyTableRef + // **************** 根据排序列处理数据 + let _fixedData = isFixed === 'left' ? leftFixedData : rightFixedData + const fixedColumns = isFixed === 'left' ? leftFixedColumns : rightFixedColumns + + if (activeSorterColumn) { + const sorter = + fixedColumns.filter((d) => d.dataKey === activeSorterColumn)[0] && + fixedColumns.filter((d) => d.dataKey === activeSorterColumn)[0].sorter + + if (sorter) { + _fixedData = activeSorterType === 'ascend' ? [..._fixedData].sort(sorter) : [..._fixedData].sort(sorter).reverse() + } + } + return ( + <div + style={{ + marginBottom: -scrollBarSize, + overflow: 'hidden', + width: + bodyTableRef.current && fixedColumnsWidth > bodyTableRef.current.clientWidth + ? bodyTableRef.current.clientWidth + : fixedColumnsWidth + 1 + }} + > + <div + style={{ + maxHeight: maxHeight || 'auto', + width: + bodyTableRef.current && fixedColumnsWidth > bodyTableRef.current.clientWidth + ? bodyTableRef.current.clientWidth + : fixedColumnsWidth + 20, + + overflow: 'scroll', + paddingRight: 0, + marginRight: -scrollBarSize // 利用负 margin 隐藏滚动条 + }} + ref={fixedBodyTableRef} + onScroll={(e) => { + syncScrollTop(fixedBodyTableRef.current.scrollTop, bodyTableRef.current) + if (isFixed === 'left') { + syncScrollTop(fixedBodyTableRef.current.scrollTop, rightFixedBodyTableRef.current) + } else { + syncScrollTop(fixedBodyTableRef.current.scrollTop, leftFixedBodyTableRef.current) + } + }} + > + <table + style={{ + width: 'auto', + borderLeft: bordered ? '1px solid #e7e7e7' : 'none' + }} + ref={bodyInner} + > + <colgroup> + {columnsgroup.map((c, idx) => { + // TODO: 这里是考虑了多级表头的冻结,待优化 + let width + allColumnsgroup.forEach((col, index) => { + if (col.dataKey === c.dataKey) { + width = realColumnsWidth[index] + } + }) + return ( + <col + key={idx} + style={{ + width: width, + minWidth: width + }} + /> + ) + })} + </colgroup> + <tbody>{_fixedData.map((row, index) => renderRow(row, 1, index, data[index]))}</tbody> + </table> + </div> + </div> + ) +} + +export default FixedBodyTable diff --git a/components/table/Header.js b/components/table/Header.js deleted file mode 100644 index b3e45b204..000000000 --- a/components/table/Header.js +++ /dev/null @@ -1,136 +0,0 @@ -import React, { Component } from 'react' -import prifix from './prefix' -import Icon from '../icon' -import Menu from './menu' - -class Sorter extends Component { - reversed = false - sortAsec = () => { - let {index, columns, kname, name} = this.props - let sorter = columns[index].sorter - let {cbs: {resetData}, dataSource} = this.props - dataSource.sort(sorter) - resetData(dataSource) - this.reversed = false - window.localStorage.setItem(name + '-sorter', [kname, 0]) - } - - sortDsec = () => { - let {index, columns, name, kname} = this.props - let sorter = columns[index].sorter - let {cbs: {resetData}, dataSource} = this.props - - dataSource.sort(sorter) - dataSource.reverse() - resetData(dataSource) - this.reversed = true - window.localStorage.setItem(name + '-sorter', [kname, 1]) - } - - render () { - return ( - <div> - <span style={{display: 'block', height: '12px', lineHeight: '12px'}}><Icon name={'up'} onClick={this.sortAsec} style={{fontSize: '12px'}} /></span> - <span style={{display: 'block', height: '12px', lineHeight: '12px'}}><Icon name={'down'} onClick={this.sortDsec} style={{fontSize: '12px'}} /></span> - </div> - ) - } -} - -class ServerSorter extends Component { - render () { - return ( - <div> - <span style={{display: 'block', height: '12px', lineHeight: '12px'}}> - <Icon - name={'up'} - onClick={(e) => { - let {item: {serverSort}, fetch} = this.props - fetch(serverSort[0]) - }} - style={{fontSize: '12px'}} /></span> - <span style={{display: 'block', height: '12px', lineHeight: '12px'}}> - <Icon - name={'down'} - onClick={(e) => { - let {item: {serverSort}, fetch} = this.props - fetch(serverSort[1]) - }} - style={{fontSize: '12px'}} - /> - </span> - </div> - ) - } -} - -let HeaderCell = (props) => { - let {item, index, contextMenu} = props - return ( - <th colSpan={item.colSpan || 1} key={'head-' + item.key || item.dataIndex || item.title} onContextMenu={(e) => contextMenu(e, item.key)}> - <div style={{display: 'flex', alignItems: 'center'}}> - <div>{typeof item.title === 'function' ? item.title() : item.title}</div>  - {item.sorter && <Sorter {...props} key={item.key} index={index} kname={item.key} />} - {item.serverSort && <ServerSorter {...props} key={item.key} index={index} kname={item.key} />} - </div> - </th> - ) -} - -let GroupCell = (props) => { - let {item, index, contextMenu} = props - return ( - <th colSpan={item.headColSpan} rowSpan={item.headRowSpan} key={'head-' + item.key || item.dataIndex || item.title} onContextMenu={(e) => contextMenu(e, item.key)}> - <div style={{display: 'flex', alignItems: 'center'}}>  - <div>{typeof item.title === 'function' ? item.title() : item.title}</div> - {item.sorter && <Sorter {...props} col={item} index={index} kname={item.key} />} - {item.serverSort && 'sirt'} - </div> - </th> - ) -} - -// 普通的表头 -export default class Header extends Component { - render () { - let { columns, headerColumns } = this.props - // 表头可以传组件,如果是文本就渲染文本 - let nodes = [] - // 固定表头分组,这里好难。。 - - if (headerColumns && headerColumns.length > 1) { - nodes = headerColumns.map((columns, k) => { - let tr = [] - columns = columns.filter(item => !item.hide) - for (let i = 0; i < columns.length; i++) { - tr.push(<GroupCell {...this.props} item={columns[i]} index={i} contextMenu={this.contextMenu} key={columns[i].key} />) - } - return <tr key={k}>{tr}</tr> - }) - } else { - for (let i = 0; i < columns.length;) { - let colSpan = columns[i].colSpan || 1 - nodes.push(<HeaderCell {...this.props} item={columns[i]} index={i} contextMenu={this.contextMenu} key={columns[i].key} />) - i = i + colSpan - } - - nodes = <tr>{nodes}</tr> - } - - return ( - <thead className={prifix('table-thead')}> - {nodes} - </thead> - ) - } - - contextMenu = (e, key) => { - e.preventDefault() - let {cbs, scrollWidth, scrollX = false, scroll = false, size, origin} = this.props - let sc = scrollWidth || scrollX || (scroll && scroll.x) - if (origin && origin.url) { - sc = false - } - Menu.show(e, cbs, key, !!sc, size, this.props.headerColumns.length === 1) - } -} diff --git a/components/table/HeaderTable.jsx b/components/table/HeaderTable.jsx new file mode 100644 index 000000000..867874eed --- /dev/null +++ b/components/table/HeaderTable.jsx @@ -0,0 +1,345 @@ +import React, { useContext, useRef, useState, useEffect } from 'react' +import TableContext from './context' +import ColumnMenu from './ColumnMenu' +import SettingMenu from './SettingMenu' +import _ from 'lodash' +import classnames from 'classnames' +import Checkbox from '../checkbox' +import { flatTreeData, setDepth, getLeafChildren, groupDataByDepth } from './util' +import { Resizable } from 'react-resizable' + +const HeaderTable = ({ isFixed, bodyWidth, rightFixedIndex }) => { + const { + rowSelection, + data, + columns, + leftFixedColumns, + rightFixedColumns, + expandedRender, + ceiling, + stickyTop, + scrollBarSize, + highlightedColKeys, + highlightColumns, + showColMenu, + maxHeight, + headerTableRef, + stickyHeaderRef, + bodyTableRef, + syncScrollLeft, + bordered, + alignRightColumns, + prefix, + realColumnsWidth, + setRealColumnsWidth, + resizable, + setting, + scrollWidth, + eachHeaderHeight, + setEachHeaderHeight + } = useContext(TableContext) + + // ******************** 隐藏滚动条 + const headerInner = useRef(null) + + // *****控制列最小可调整宽度 + const [minColWidth, setMinColWidth] = useState(Array(columns.length).fill(0)) + // ******************** + + // ********************* 判断是否全选 + let isAllChecked + if (rowSelection) { + const { selectedRowKeys = [] } = rowSelection + const flattedData = flatTreeData(data) + isAllChecked = flattedData.every((d) => selectedRowKeys.includes(d.key)) + } + // ********************* + + // *****************处理分组表头逻辑 + let headerColumns = columns + if (isFixed === 'left') { + headerColumns = leftFixedColumns + } + if (isFixed === 'right') { + headerColumns = rightFixedColumns + } + const _columns = _.cloneDeep(headerColumns) + const depthArray = [] + setDepth(_columns, 0, depthArray) + + const maxDepth = depthArray.length > 0 ? Math.max.apply(null, depthArray) : 0 + const columnsgroup = flatTreeData(_columns).filter((col) => col.isLast) + // TODO: 这里是考虑了多级表头的冻结,待优化 + // *********全量 col group + const allColumns = _.cloneDeep(columns) + const _depthArray = [] + setDepth(allColumns, 0, _depthArray) + const allColumnsgroup = flatTreeData(allColumns).filter((col) => col.isLast) + // *********** + flatTreeData(_columns).forEach((column) => { + const leafChildren = [] + getLeafChildren(column, leafChildren) + // 在最后一层,colspan = 1, rowspan = maxDepth - depth + 1 + // 不在最后一层,rowspan = 1, colspan = 叶子节点后代数量 + column.rowSpan = column.isLast ? maxDepth - column.depth + 1 : 1 + column.colSpan = column.isLast ? 1 : leafChildren.length + }) + + const groupedColumns = groupDataByDepth(_columns, maxDepth) + // ******************** + + useEffect(() => { + if (headerInner.current && headerInner.current.childNodes && headerInner.current.childNodes[1].childNodes[0]) { + const _minColWidth = Array.from(headerInner.current.childNodes[1].childNodes[0].childNodes).map((th) => { + return th.childNodes[0].className === 'power-table__header__title' ? th.childNodes[0].offsetWidth : 0 + }) + setMinColWidth(_minColWidth) + } + }, [columns, headerInner]) + + // ******************** 同步行高度 + useEffect(() => { + if (headerInner.current && !isFixed) { + setEachHeaderHeight(headerInner.current.clientHeight) + } + }, [headerInner, isFixed, setEachHeaderHeight]) + + // ********************处理排序逻辑 + // 可以排序的必须的是最后一级列 + + const hasSorterColumn = columnsgroup.filter((col) => col.sorter).map((sorterCol) => sorterCol.dataKey) + + // ******************** 行渲染 *********************** + const renderBaseRow = (cols, index, isSticky) => { + const _colums = [rowSelection && index === 0 && 'checkbox', expandedRender && index === 0 && 'expandedButton'] + .concat(cols) + .filter((column) => !!column) + return ( + <tr key={index}> + {_colums.map((c, idx) => { + let cell + if (c === 'checkbox') { + cell = ( + <th + rowSpan={groupedColumns.length} + key="checkbox" + style={{ + boxSizing: 'border-box', + width: 50, + height: isFixed ? eachHeaderHeight : 'auto' + }} + > + <Checkbox + checked={isAllChecked} + indeterminate={!isAllChecked && rowSelection.selectedRowKeys.length > 0} + onChange={(e) => { + if (rowSelection.onChange) { + rowSelection.onChange(isAllChecked ? [] : flatTreeData(data).map((d) => d.key)) + } + }} + /> + </th> + ) + } else if (c === 'expandedButton') { + cell = ( + <th + key="expandedButton" + rowSpan={groupedColumns.length} + style={{ + boxSizing: 'border-box', + width: 50, + height: isFixed ? eachHeaderHeight : 'auto' + }} + > + <span /> + </th> + ) + } else { + cell = ( + <th + key={idx} + colSpan={c.colSpan} + rowSpan={c.rowSpan} + style={{ + height: isFixed ? eachHeaderHeight : 'auto', + boxSizing: 'border-box', + textAlign: alignRightColumns.includes(c.dataKey) ? 'right' : 'left', + background: + highlightedColKeys.includes(c.dataKey) || highlightColumns.includes(c.dataKey) + ? '#F4F4F4' + : '#fbfbfb' + }} + > + <span className="hi-table__header__title"> + {typeof c.title === 'function' ? c.title() : c.title} + {showColMenu && c.isLast && ( + <ColumnMenu + columnKey={c.dataKey} + canSort={hasSorterColumn.includes(c.dataKey)} + isSticky={isSticky} + /> + )} + </span> + </th> + ) + } + return resizable && idx !== cols.length - 1 ? ( + <Resizable + key={idx} + width={realColumnsWidth[idx]} + height={0} + onResize={(e, { size }) => { + const minWidth = minColWidth[idx] + 31 + const anotherMinWidth = minColWidth[idx + 1] + 31 + let nextWidth = size.width > minWidth ? size.width : minWidth + let anotherWidth = realColumnsWidth[idx + 1] + realColumnsWidth[idx] - nextWidth + if (anotherWidth <= anotherMinWidth) { + anotherWidth = anotherMinWidth + nextWidth = realColumnsWidth[idx + 1] - anotherMinWidth + realColumnsWidth[idx] + } + const newRealColumnsWidth = [...realColumnsWidth] + newRealColumnsWidth[idx] = nextWidth + newRealColumnsWidth[idx + 1] = anotherWidth + setRealColumnsWidth(newRealColumnsWidth) + }} + draggableOpts={{ enableUserSelectHack: false }} + > + {cell} + </Resizable> + ) : ( + cell + ) + })} + </tr> + ) + } + + return [ + <div + key="normal" + style={{ + borderLeft: bordered && '1px solid #e7e7e7', + borderTop: bordered && '1px solid #e7e7e7', + overflow: 'hidden', + boxShadow: maxHeight && '0px 2px 6px 0px rgba(0,0,0,0.12)', + position: 'relative', + height: (eachHeaderHeight && (bordered ? eachHeaderHeight + 1 : eachHeaderHeight)) || 'auto' + }} + > + {setting && !isFixed && <SettingMenu />} + <div + className={`${prefix}__header`} + key="normal" + ref={isFixed ? null : headerTableRef} + style={{ + overflowY: maxHeight && !isFixed ? 'scroll' : 'hidden', + overflowX: isFixed ? 'hidden' : 'scroll', + marginBottom: !isFixed && -scrollBarSize, + height: (eachHeaderHeight && eachHeaderHeight + 20) || 'auto' + }} + onScroll={(e) => { + syncScrollLeft(headerTableRef.current.scrollLeft, bodyTableRef.current) + syncScrollLeft(headerTableRef.current.scrollLeft, stickyHeaderRef.current) + }} + > + <table + style={{ + width: isFixed ? 'auto' : scrollWidth || '100%', + height: isFixed ? eachHeaderHeight : 'auto' + }} + ref={headerInner} + > + <colgroup> + {columnsgroup.map((c, index) => { + let width + if (isFixed === 'right') { + allColumnsgroup.forEach((col, idx) => { + if (col.dataKey === c.dataKey) { + width = realColumnsWidth[idx] + } + }) + } else if (isFixed === 'left' || resizable) { + width = realColumnsWidth[index] + } else { + width = c.width + } + return ( + <col + key={index} + style={{ + width: width, + minWidth: width + }} + /> + ) + })} + </colgroup> + <thead>{groupedColumns.map((group, index) => renderBaseRow(group, index, false))}</thead> + </table> + </div> + </div>, + !isFixed && ceiling && ( + <div + key="ceiling" + className={classnames(`${prefix}__header`, `${prefix}__header--sticky`)} + ref={stickyHeaderRef} + style={{ + top: stickyTop, + width: bodyWidth, + borderLeft: bordered && '1px solid #e7e7e7' + }} + > + <table style={{ width: scrollWidth || '100%' }}> + <colgroup> + {columnsgroup.map((c, idx) => ( + <col + key={idx} + style={{ + width: resizable ? realColumnsWidth[idx] : c.width, + minWidth: resizable ? realColumnsWidth[idx] : c.width + }} + /> + ))} + </colgroup> + <thead>{groupedColumns.map((group, idx) => renderBaseRow(group, idx, true))}</thead> + </table> + </div> + ), + isFixed && ceiling && ( + <div + key="fixed-ceiling" + className={classnames(`${prefix}__header`, `${prefix}__header--sticky`)} + style={{ + top: stickyTop, + display: ceiling ? 'block' : 'none', + borderLeft: bordered && '1px solid #e7e7e7' + }} + > + <table style={{ width: 'auto' }}> + <colgroup> + {columnsgroup.map((c, idx) => { + let width + allColumnsgroup.forEach((col, index) => { + if (col.dataKey === c.dataKey) { + width = realColumnsWidth[index] + } + }) + return ( + <col + key={idx} + style={{ + width: width, + minWidth: width + }} + /> + ) + })} + </colgroup> + <thead>{groupedColumns.map((group, idx) => renderBaseRow(group, idx, true))}</thead> + </table> + </div> + ) + ] +} + +export default HeaderTable diff --git a/components/table/Indent.jsx b/components/table/Indent.jsx new file mode 100644 index 000000000..d810f5bdf --- /dev/null +++ b/components/table/Indent.jsx @@ -0,0 +1,10 @@ +import React from 'react' +const Indent = ({ times }) => { + const indents = [] + for (let i = 0; i <= times; i++) { + indents.push(<span className="hi-table__indent" key={Math.random()} />) + } + return indents +} + +export default Indent diff --git a/components/table/Row.jsx b/components/table/Row.jsx new file mode 100644 index 000000000..0a61fbcd9 --- /dev/null +++ b/components/table/Row.jsx @@ -0,0 +1,131 @@ +import React, { useState, useContext } from 'react' +import Cell from './Cell' +import TableContext from './context' +import classNames from 'classnames' +import _ from 'lodash' +import Checkbox from '../checkbox' +import Icon from '../icon' +import { flatTreeData, setDepth } from './util' + +const Row = ({ + rowData, + allRowData, + level, + expandedTree, + expandedTreeRows, + setExpandedTreeRows, + isFixed, + isSumRow, // 是否为合计行 + isAvgRow, // 是否为平均行 + index, + innerRef, + rowHeight, + isTree +}) => { + const [expanded, setExpanded] = useState(false) + const { + errorRowKeys, + rowSelection, + highlightedRowKeys, + setHighlightRows, + columns, + expandedRender, + leftFixedColumns, + rightFixedColumns, + hoverRow, + setHoverRow, + prefix + } = useContext(TableContext) + + const _columns = _.cloneDeep(columns) + const depthArray = [] + setDepth(_columns, 0, depthArray) + + let rowColumns = flatTreeData(_columns).filter((col) => col.isLast) + if (isFixed === 'left') { + rowColumns = leftFixedColumns + } + if (isFixed === 'right') { + rowColumns = rightFixedColumns + } + return [ + <tr + style={isFixed && rowHeight ? { height: rowHeight } : {}} + ref={innerRef} + className={classNames(`${prefix}__row`, { + [`${prefix}__row--error`]: errorRowKeys.includes(rowData.key), + [`${prefix}__row--highlight`]: hoverRow === rowData.key || highlightedRowKeys.includes(rowData.key), + [`${prefix}__row--total`]: isSumRow, + [`${prefix}__row--avg`]: isAvgRow + })} + key="row" + onDoubleClick={(e) => { + if (highlightedRowKeys.includes(rowData.key)) { + setHighlightRows(highlightedRowKeys.filter((r) => r !== rowData.key)) + } else { + setHighlightRows(highlightedRowKeys.concat(rowData.key)) + } + }} + onMouseEnter={(e) => setHoverRow(rowData.key)} + onMouseLeave={(e) => setHoverRow(null)} + > + {rowSelection && ( + <td style={{ width: 50 }}> + <Checkbox + checked={rowSelection.selectedRowKeys.includes(rowData.key)} + onChange={(e) => { + const { selectedRowKeys = [], onChange } = rowSelection + const _selectedRowKeys = [...selectedRowKeys] + if (_selectedRowKeys.includes(rowData.key)) { + onChange(_selectedRowKeys.filter((key) => key !== rowData.key)) + } else { + _selectedRowKeys.push(rowData.key) + onChange(_selectedRowKeys) + } + }} + /> + </td> + )} + {expandedRender && ( + <td style={{ width: 50 }}> + <Icon + style={{ cursor: 'pointer' }} + name={expanded ? 'down' : 'right'} + onClick={() => { + setExpanded(!expanded) + }} + /> + </td> + )} + + {rowColumns.map((column, idx) => ( + <Cell + key={idx} + column={column} + rowData={rowData} + allRowData={allRowData} + level={level} + columnIndex={idx} + rowIndex={index} + isTree={isTree} + expandedTree={expandedTree} + expandedTreeRows={expandedTreeRows} + setExpandedTreeRows={setExpandedTreeRows} + /> + ))} + </tr>, + // 可展开的内嵌部分 + expandedRender && expanded && ( + <tr key="expanded-row" className={`${prefix}--expanded`} style={{ background: 'rgba(251,251,251,1)' }}> + {/* 多选占位 */} + {rowSelection && <td />} + {/* 可展开内嵌显示 */} + <td colSpan={columns.length + 1} style={{ color: '#666666' }}> + {expandedRender(rowData, index)} + </td> + </tr> + ) + ] +} + +export default Row diff --git a/components/table/SettingMenu.jsx b/components/table/SettingMenu.jsx new file mode 100644 index 000000000..03921d7f0 --- /dev/null +++ b/components/table/SettingMenu.jsx @@ -0,0 +1,155 @@ +import React, { useRef, useState, useContext } from 'react' +import TableContext from './context' +import Popper from '../popper' +import Switch from '../switch' +import Icon from '../icon' +import { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd' +import useClickOutside from './hooks/useClickOutside' + +const SettingMenu = () => { + const colMenuRef = useRef(null) + const [showPopper, setShowPopper] = useState(false) + const popperMenu = useRef(null) + useClickOutside(popperMenu, () => setShowPopper(false), colMenuRef) + + const { sortCol, setSortCol, visibleCols, setVisibleCols, setCacheVisibleCols, columns, theme } = useContext( + TableContext + ) + + const grid = 8 + const getItemStyle = (isDragging, draggableStyle) => ({ + // some basic styles to make the items look a bit nicer + userSelect: 'none', + padding: grid * 2, + margin: `0 0 ${grid}px 0`, + background: '#fff', + border: isDragging ? '1px dashed var(--color-primary)' : 'none', + + // styles we need to apply on draggables + ...draggableStyle + }) + + const getListStyle = (isDraggingOver) => ({ + padding: grid, + width: 250 + }) + + return ( + <div + ref={colMenuRef} + onClick={() => { + setShowPopper(!showPopper) + }} + className={'hi-table__setting-btn'} + > + <Icon name="set" /> + <Popper show={showPopper} attachEle={colMenuRef.current} zIndex={1040} placement="bottom-end" width="250"> + <div ref={popperMenu} className={`theme__${theme} hi-table__setting-menu`}> + <DragDropContext + onDragEnd={(result) => { + if (result.destination) { + const _sortCol = [...sortCol] + const [removed] = _sortCol.splice(result.source.index, 1) + _sortCol.splice(result.destination.index, 0, removed) + setSortCol(_sortCol) + } + }} + > + <Droppable droppableId="droppable"> + {(provided, snapshot) => ( + <div + {...provided.droppableProps} + ref={provided.innerRef} + style={Object.assign( + { + marginTop: 8, + width: 276, + boxSizing: 'border-box', + background: '#fff', + boxShadow: '0px 2px 8px 0px rgba(56,62,71,0.1)', + borderRadius: 4, + border: '1px solid rgba(231,231,231,1)' + }, + getListStyle(snapshot.isDraggingOver) + )} + {...provided.droppableProps} + > + <div style={{ padding: '16px 20px' }}> + {sortCol.map((c, index) => ( + <Draggable key={c.dataKey} draggableId={c.dataKey} index={index}> + {(provided, snapshot) => ( + <div + ref={provided.innerRef} + {...provided.draggableProps} + {...provided.dragHandleProps} + style={Object.assign( + { + height: 28, + display: 'flex', + alignItems: 'center', + justifyContent: 'space-between' + }, + getItemStyle(snapshot.isDragging, provided.draggableProps.style) + )} + > + <div + style={{ + display: 'flex', + alignItems: 'center' + }} + > + <Switch + checked={visibleCols.map((vc) => vc.dataKey).includes(c.dataKey)} + onChange={(checked) => { + if (checked) { + setVisibleCols(visibleCols.concat(c)) + } else { + setVisibleCols(visibleCols.filter((col) => col.dataKey !== c.dataKey)) + } + }} + /> + <span style={{ display: 'inline-block', marginLeft: 9 }}> + {typeof c.title === 'function' ? c.title() : c.title} + </span> + </div> + + <Icon name="columns" /> + </div> + )} + </Draggable> + ))} + </div> + {provided.placeholder} + <div className="btn-group"> + <div + className={`btn btn--left`} + onClick={(e) => { + setShowPopper(false) + setCacheVisibleCols( + sortCol.filter((c) => visibleCols.map((vc) => vc.dataKey).includes(c.dataKey)) + ) + }} + > + 确定 + </div> + <div + className={`btn`} + onClick={(e) => { + setVisibleCols(columns) + setCacheVisibleCols(columns) + }} + > + 重置 + </div> + </div> + </div> + )} + </Droppable> + </DragDropContext> + </div> + </Popper> + </div> + ) +} + +export default SettingMenu diff --git a/components/table/Table.jsx b/components/table/Table.jsx new file mode 100644 index 000000000..bed5a23c3 --- /dev/null +++ b/components/table/Table.jsx @@ -0,0 +1,324 @@ +import React, { useState, useRef, useEffect } from 'react' +import HeaderTable from './HeaderTable' +import BodyTable from './BodyTable' +import TableContext from './context' +import classnames from 'classnames' +import { getFixedDataByFixedColumn, getScrollBarSize, flatTreeData } from './util' +import Pagination from '../pagination' +import axios from 'axios' +import FixedBodyTable from './FixedBodyTable' +import Provider from '../context' +import './style' + +const Table = ({ + striped, + bordered, + resizable, + size, + errorRowKeys = [], + rowSelection, + data = [], + highlightedRowKeys = [], + highlightedColKeys = [], + columns = [], + expandedRender, + maxHeight, + pagination, + dataSource, + showColMenu, + prefix = 'hi-table', + fixedToColumn, + sticky: _ceiling, + stickyTop = 0, + setting, + // ********* + sortCol, + setSortCol, + visibleCols, + setVisibleCols, + setCacheVisibleCols, + scrollWidth, + emptyContent = '暂无数据', + theme +}) => { + const hiTable = useRef(null) + const [ceiling, setCeiling] = useState(false) + const [activeSorterColumn, setActiveSorterColumn] = useState(null) + const [activeSorterType, setActiveSorterType] = useState(null) + const [highlightColumns, setHighlightColumns] = useState([]) + const [highlightRows, setHighlightRows] = useState([]) + const [freezeColumn, setFreezeColumn] = useState(null) + const [hoverRow, setHoverRow] = useState(null) + const [serverTableConfig, setServerTableConfig] = useState({ data: [], columns: [] }) + const [eachRowHeight, setEachRowHeight] = useState([]) + const [eachHeaderHeight, setEachHeaderHeight] = useState(null) + + const [realColumnsWidth, setRealColumnsWidth] = useState(columns.map((c) => c.width || 'auto')) + + const firstRowRef = useRef(null) + useEffect(() => { + if (!dataSource) { + setRealColumnsWidth(columns.map((c) => c.width || 'auto')) + const timer = setTimeout(() => { + if (firstRowRef.current) { + const _realColumnsWidth = Array.from(firstRowRef.current.childNodes).map((node) => node.clientWidth) + setRealColumnsWidth(_realColumnsWidth) + } + }) + return () => { + clearTimeout(timer) + } + } + }, [columns, dataSource, data]) + + const flattedColumns = flatTreeData(columns) + // 有表头分组那么也要 bordered + const _bordered = flattedColumns.length > columns.length || bordered + // ******************* 列冻结 ******************** + // 左侧冻结 + const leftFixedColumn = + freezeColumn || (typeof fixedToColumn === 'string' ? fixedToColumn : fixedToColumn && fixedToColumn.left) + // 右侧冻结 + const rightFixedColumn = fixedToColumn && fixedToColumn.right + + let leftFixedIndex, rightFixedIndex + // TODO: 这里是考虑了多级表头的冻结,待优化 + flattedColumns.forEach((c, index) => { + if (leftFixedColumn === c.dataKey) { + leftFixedIndex = index + } + if (rightFixedColumn === c.dataKey) { + rightFixedIndex = index + } + }) + const realLeftFixedColumns = [...flattedColumns].splice(0, leftFixedIndex + 1) + const leftFixedData = getFixedDataByFixedColumn(realLeftFixedColumns, data) + const realRightFixedColumns = [...flattedColumns].splice(rightFixedIndex) + + const rightFixedData = getFixedDataByFixedColumn(realRightFixedColumns, data) + // 同步滚动条 + const headerTableRef = useRef(null) + const stickyHeaderRef = useRef(null) + const bodyTableRef = useRef(null) + const leftFixedBodyTableRef = useRef(null) + const rightFixedBodyTableRef = useRef(null) + const syncScrollLeft = (scrollLeft, syncTarget) => { + if (syncTarget && syncTarget.scrollLeft !== scrollLeft) { + syncTarget.scrollLeft = scrollLeft + } + } + const syncScrollTop = (scrollTop, syncTarget) => { + if (syncTarget && syncTarget.scrollTop !== scrollTop) { + syncTarget.scrollTop = scrollTop + } + } + + const _pagination = (dataSource && serverTableConfig.pagination) || pagination + // 高亮行 + const _highlightRows = highlightedRowKeys.concat(highlightRows.filter((row) => !highlightedRowKeys.includes(row.key))) + // 需要右对齐的列 + const alignRightColumns = columns.filter((c) => c.align === 'right').map((col) => col.dataKey) + // baseTable + const baseTable = useRef(null) + const [baseTableWidth, setBaseTableWidth] = useState('100%') + const clientWidth = baseTable.current && baseTable.current.clientWidth + useEffect(() => { + setBaseTableWidth(clientWidth) + }, [clientWidth]) + + useEffect(() => { + if (_ceiling) { + window.addEventListener( + 'scroll', + () => { + if ( + hiTable && + hiTable.current && + hiTable.current.getBoundingClientRect().top <= stickyTop && + hiTable.current.getBoundingClientRect().bottom >= stickyTop + 35 + ) { + setCeiling(true) + syncScrollLeft(bodyTableRef.current.scrollLeft, stickyHeaderRef.current) + } else { + setCeiling(false) + } + }, + true + ) + } + }, [_ceiling, stickyTop]) + + useEffect(() => { + if (dataSource) { + const fetchConfig = dataSource() + axios(fetchConfig).then((res) => { + setServerTableConfig(res.data) + }) + } + }, [dataSource]) + return ( + <TableContext.Provider + value={{ + setting, + firstRowRef, + prefix, + errorRowKeys, + bordered: _bordered, + resizable, + rowSelection, + highlightedRowKeys: _highlightRows, + setHighlightRows, + highlightedColKeys, + data: dataSource ? serverTableConfig.data : data, + columns: dataSource ? serverTableConfig.columns : columns, + expandedRender, + leftFixedColumns: realLeftFixedColumns, + rightFixedColumns: realRightFixedColumns, + realColumnsWidth, + setRealColumnsWidth, + leftFixedData, + rightFixedData, + ceiling, + stickyTop, + scrollBarSize: getScrollBarSize(), // 滚动条宽度 + // 排序逻辑 + activeSorterColumn, + activeSorterType, + setActiveSorterColumn: setActiveSorterColumn, + setActiveSorterType: setActiveSorterType, + // 高亮列 + highlightColumns, + setHighlightColumns, + // 冻结列 + freezeColumn, + setFreezeColumn, + // hover 高亮行 + hoverRow, + setHoverRow, + showColMenu, + maxHeight, + // 同步滚动条 + headerTableRef, + stickyHeaderRef, + bodyTableRef, + syncScrollLeft, + leftFixedBodyTableRef, + rightFixedBodyTableRef, + syncScrollTop, + alignRightColumns, + // setting 列操作相关 + sortCol, + setSortCol, + visibleCols, + setVisibleCols, + setCacheVisibleCols, + // 出现横向滚动条时的宽度 + scrollWidth, + // 同步行高度 + eachRowHeight, + setEachRowHeight, + // 同步表头高度 + eachHeaderHeight, + setEachHeaderHeight, + theme + }} + > + <div + className={classnames(prefix, `theme__${theme}`, { + [`${prefix}--striped`]: striped, + [`${prefix}--bordered`]: _bordered, + [`${prefix}--${size}`]: size + })} + ref={hiTable} + > + {/* Normal table 普通表格 */} + <div className={`${prefix}__container`} ref={baseTable}> + <HeaderTable bodyWidth={baseTableWidth} /> + <BodyTable fatherRef={hiTable} emptyContent={emptyContent} /> + </div> + {/* Left fixed table 左侧固定列表格 */} + {leftFixedColumn && realLeftFixedColumns.length > 0 && ( + <div className={classnames(`${prefix}__container`, `${prefix}__container--fixed-left`)}> + <HeaderTable isFixed="left" /> + <FixedBodyTable isFixed="left" /> + </div> + )} + {/* Right fixed table 右侧固定列表格 */} + {rightFixedColumn && realRightFixedColumns.length > 0 && ( + <div className={classnames(`${prefix}__container`, `${prefix}__container--fixed-right`)} style={{ right: 0 }}> + <HeaderTable isFixed="right" rightFixedIndex={rightFixedIndex} /> + <FixedBodyTable isFixed="right" rightFixedIndex={rightFixedIndex} /> + </div> + )} + {/* Pagination 分页组件 */} + {_pagination && ( + <div + className={classnames(`${prefix}__pagination`, { + [`${prefix}__pagination--${_pagination.placement}`]: _pagination.placement + })} + > + <Pagination {..._pagination} /> + </div> + )} + </div> + </TableContext.Provider> + ) +} + +const TableWrapper = ({ columns, uniqueId, standard, ...settingProps }) => { + const _sortCol = + uniqueId && window.localStorage.getItem(`${uniqueId}_sortCol`) + ? JSON.parse(window.localStorage.getItem(`${uniqueId}_sortCol`)) + : columns + + const _visibleCols = + uniqueId && window.localStorage.getItem(`${uniqueId}_visibleCols`) + ? JSON.parse(window.localStorage.getItem(`${uniqueId}_visibleCols`)) + : columns + + const _cacheVisibleCols = + uniqueId && window.localStorage.getItem(`${uniqueId}_cacheVisibleCols`) + ? JSON.parse(window.localStorage.getItem(`${uniqueId}_cacheVisibleCols`)) + : columns + // 列操作逻辑 + const [sortCol, setSortCol] = useState(_sortCol) + const [visibleCols, setVisibleCols] = useState(_visibleCols) + const [cacheVisibleCols, setCacheVisibleCols] = useState(_cacheVisibleCols) + useEffect(() => { + if (uniqueId) { + window.localStorage.setItem(`${uniqueId}_sortCol`, JSON.stringify(sortCol)) + window.localStorage.setItem(`${uniqueId}_visibleCols`, JSON.stringify(visibleCols)) + window.localStorage.setItem(`${uniqueId}_cacheVisibleCols`, JSON.stringify(cacheVisibleCols)) + } + }, [sortCol, visibleCols, cacheVisibleCols, uniqueId]) + + useEffect(() => { + setCacheVisibleCols(_cacheVisibleCols) + }, [_cacheVisibleCols]) + + const standardPreset = standard + ? { + showColMenu: true, + sticky: true, + bordered: true, + setting: true, + striped: true + } + : {} + + // *************** + return ( + <Table + columns={cacheVisibleCols} + {...settingProps} + {...standardPreset} + sortCol={sortCol} + setSortCol={setSortCol} + visibleCols={visibleCols} + setVisibleCols={setVisibleCols} + setCacheVisibleCols={setCacheVisibleCols} + /> + ) +} + +export default Provider(TableWrapper) diff --git a/components/table/context.jsx b/components/table/context.jsx new file mode 100644 index 000000000..ee1cae2f5 --- /dev/null +++ b/components/table/context.jsx @@ -0,0 +1,5 @@ +import React from 'react' + +const TableContext = React.createContext() + +export default TableContext diff --git a/components/table/hooks/useClickOutside.js b/components/table/hooks/useClickOutside.js new file mode 100644 index 000000000..6de76cd55 --- /dev/null +++ b/components/table/hooks/useClickOutside.js @@ -0,0 +1,21 @@ +import { useEffect } from 'react' + +export default function useClickOutside(ref, handler, iconRef) { + function handleClickOutside(event) { + if ( + ref.current && + !ref.current.contains(event.target) && + iconRef.current && + !iconRef.current.contains(event.target) + ) { + handler() + } + } + + useEffect(() => { + document.addEventListener('mousedown', handleClickOutside) + return () => { + document.removeEventListener('mousedown', handleClickOutside) + } + }) +} diff --git a/components/table/index.d.ts b/components/table/index.d.ts new file mode 100644 index 000000000..31fe46d26 --- /dev/null +++ b/components/table/index.d.ts @@ -0,0 +1,59 @@ + +type ColumnItem = { + title: string | JSX.Element + dataKey: string + align?: 'left' | 'right' + sorter?: () => boolean + avg?: boolean + total?: boolean + width?: number + children?: ColumnItem[] + render?: (text: string, record: object, index: number) => JSX.Element +} + +type Origin = { + url: string + currentPageName?: string + auto?: boolean + autoDelayTime?: number + headers?: object + data?: object + success?: (response: object) => any + error?: (err: object) => void + type?: 'GET' | 'POST' + withCredentials?: boolean +} +type FixedOption = { + left?: string + right?: string +} +type RowSelection = { + selectedRowKeys?: string[] | number[] + onChange?: (selectedRowKeys: string | number) => void +} +interface Props { + size?: 'small' | 'large' | 'default' | 'mini' + bordered?: boolean + striped?: boolean + sticky?: boolean + stickyTop?: number + highlightedColKeys?: string[] | number[] + expandedRender?: (record: object, index: number) => JSX.Element + maxHeight?: number + fixedToColumn?: string | FixedOption + pagination?: PaginationProps + errorRowKeys?: string[] | number[] + highlightedRowKeys?: string[] | number[] + rowSelection?: RowSelection + dataSource?: (current: number) => DataSource + showColMenu?: boolean + striped?: boolean + setting?: boolean + resizable?: boolean + standard?: boolean + emptyContent?: string | JSX.Element + columns: ColumnItem[] + data: object[] +} +declare const Table: React.ComponentType<Props> +export default Table diff --git a/components/table/index.jsx b/components/table/index.jsx new file mode 100644 index 000000000..1854edfee --- /dev/null +++ b/components/table/index.jsx @@ -0,0 +1,5 @@ +import LegacyTable from './table-legacy/table-v2' +import Table from './Table' + +export default Table +export { LegacyTable } diff --git a/components/table/style/Table.scss b/components/table/style/Table.scss index bf414898d..dcb0ccbce 100644 --- a/components/table/style/Table.scss +++ b/components/table/style/Table.scss @@ -1,284 +1,17 @@ -@import '@hi-ui/core-css/index.scss'; - -$table: 'hi-table' !default; -$bgColor: #f7fafe !default; - -$miniHeight: 32px !default; -$miniFontSize: 14px !default; - -$smallHeight: 44px !default; -$smallFontSize: 14px !default; - -$normalHeight: 52px !default; -$nornamFontSize: 14px !default; - -$largeHeight: 64px !default; -$largeFontSize: 14px !default; -$borderColor: #e6e7e8 !default; - -.hi-table-header-menu-small { - .hi-table-header-menu { - p { - height: $smallHeight; - } - } -} - -.hi-table-header-menu-mini { - .hi-table-header-menu { - p { - height: $miniHeight; - } - } -} +@import './variable.scss'; +@import '../../core-css/index.scss'; .#{$table} { - td, - th { - box-sizing: border-box; - } - //width: 100%; - &-container { - position: relative; - } - - .hi-icon.icon-menu { - color: #4284f5; - } - - &-pre-header { - height: $normalHeight; - line-height: $normalHeight; - border-top: 1px solid $borderColor; - padding-left: 8px; - padding-right: 16px; - } - - &-pre-footer { - height: $normalHeight; - line-height: $normalHeight; - border-bottom: 1px solid $borderColor; - padding-left: 8px; - padding-right: 16px; - background: $bgColor; - } - - &.striped { - table { - tr:nth-child(2n) { - background: $bgColor; - } - } - } - - &.bordered { - .#{$table}-pre-header { - border-left: 1px solid $borderColor; - border-right: 1px solid $borderColor; - } - - .#{$table}-pre-footer { - border-left: 1px solid $borderColor; - border-right: 1px solid $borderColor; - } - - table { - border-top: 1px solid $borderColor; - - tr { - td, - th { - border-left: 1px solid $borderColor; - - &:last-child { - border-right: 1px solid $borderColor; - } - } - } - } - } - - &.large { - &-pre-header { - height: $largeHeight; - line-height: $largeHeight; - } - - &-pre-footer { - height: $largeHeight; - line-height: $largeHeight; - } - - table { - tr { - height: $largeHeight; - font-size: $largeFontSize; - } - } - - .hi-table-header-menu { - > p { - height: $smallHeight !important; - font-size: $smallFontSize; - } - } - - .hi-table-setting-menu { - > div { - height: $smallHeight; - } - } - } - - &.small { - &-pre-header { - height: $smallHeight; - line-height: $smallHeight; - } - - &-pre-footer { - height: $smallHeight; - line-height: $smallHeight; - } - - table { - tr { - height: $smallHeight; - font-size: $smallFontSize; - } - } - - .hi-table-header-menu { - > p { - height: $smallHeight !important; - font-size: $smallFontSize; - } - } - - .hi-table-setting-menu { - > div { - height: $smallHeight; - } - } - } - - &.mini { - &-pre-header { - height: $miniHeight; - line-height: $miniHeight; - } - - &-pre-footer { - height: $miniHeight; - line-height: $miniHeight; - } - - table { - tr { - height: $miniHeight; - font-size: $miniFontSize; - } - } - - .hi-table-header-menu { - > p { - height: $miniHeight !important; - font-size: $miniHeight; - } - } - - .hi-table-setting-menu { - > div { - height: $miniHeight; - } - } - } - - tbody .hi-checkbox { - //pointer-events:none; - } - - &-wrapper { - //width: 100%; - } - - &-header-menu { - z-index: 999999; - background: #fff; - border: 1px solid $borderColor; - box-shadow: 0 2px 8px 0 rgba(56, 62, 71, 0.1); - border-radius: 2px; - width: 140px; - - p { - color: #383e47; - text-align: left; - margin: 0; - height: $normalHeight; - text-indent: 16px; - display: flex; - align-items: center; - justify-content: space-between; - cursor: pointer; - - &:hover { - background: $bgColor; - color: #4284f5; - } - } - } - - &-setting-menu { - z-index: 999999; - background: #fff; - //border: 1px solid $borderColor; - //box-shadow: 0 2px 8px 0 rgba(56, 62, 71, 0.1); - border-radius: 2px; - width: 140px; - - > div { - color: #383e47; - text-align: left; - margin: 0; - padding-left: 16px; - padding-right: 16px; - display: flex; - align-items: center; - justify-content: space-between; - cursor: pointer; - height: $normalHeight; - - &:hover { - background: $bgColor; - color: #4284f5; - } - - > p:first-child { - width: 140px; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - } - } + position: relative; - .active { - background: rgba(66, 133, 244, 0.15); - } - - &.column-menu { - position: absolute; - right: 30px; - top: 40px; - width: 220px; - max-height: 240px; - overflow-y: auto; - } + &__container { + position: relative; } - &-container table { + &__container table { width: 100%; border-collapse: separate; - background: #fff; + background: use-color('white'); margin: 0; box-sizing: border-box; display: table; @@ -290,233 +23,32 @@ $borderColor: #e6e7e8 !default; td, th { - white-space: nowrap; padding-left: 8px; padding-right: 16px; - border-bottom: 1px solid $borderColor; + border-bottom: 1px solid rgba(231, 231, 231, 1); text-align: left; box-sizing: border-box; } th { - background-color: $bgColor; - color: #83868c; + background-color: #fbfbfb; + color: use-color('gray-70'); position: relative; i:hover { - color: #4284f5; + color: use-color('primary'); } } td { - color: #3b4148; + color: use-color('black'); word-break: break-word; - - &.picked { - background: $bgColor; - } } tr { - transition: 0.2s; - //cursor: pointer; - height: $normalHeight; - font-size: $nornamFontSize; + font-size: $font-size-normal; padding: 0; box-sizing: border-box; - cursor: pointer; - - &.picked td { - background: $bgColor; - } - - &.expanded { - background: $bgColor; - } - - &:hover { - background: $bgColor; - } - } - } - - &-body-inner { - height: 100%; - } - - &-fixed-header > &-content > &-scroll > &-body { - position: relative; - } - - &-fixed-header &-body-inner { - overflow: scroll; - } - - &-fixed-header &-scroll &-header { - overflow: scroll; - padding-bottom: 20px; - margin-bottom: -20px; - } - - &-fixed-left, - &-fixed-right { - position: absolute; - top: 0; - overflow: hidden; - transition: box-shadow 0.3s ease; - border-radius: 0; - - table { - width: auto; - } - } - - &-fixed-header &-fixed-left &-body-outer &-fixed, - &-fixed-header &-fixed-right &-body-outer &-fixed { - border-radius: 0; - } - - &-fixed-left { - left: 0; - box-shadow: 6px 0 6px -4px rgba(0, 0, 0, 0.15); - - .#{$table}-header { - overflow-y: hidden; - } - // hide scrollbar in left fixed columns - .#{$table}-body-inner { - margin-right: -20px; - padding-right: 20px; - } - - .#{$table}-fixed-header & .#{$table}-body-inner { - padding-right: 0; - } - - &, - table { - border-radius: 4px 0 0 0; - } - } - - &-fixed-right { - right: 0; - box-shadow: -6px 0 6px -4px rgba(0, 0, 0, 0.15); - - &, - table { - border-radius: 0 4px 0 0; - } - - .#{$table}-expanded-row { - color: transparent; - //pointer-events: none; - } - } - - &.#{$table}-scroll-position-left &-fixed-left { - box-shadow: none; - } - - &.#{$table}-scroll-position-right &-fixed-right { - box-shadow: none; - } - - &-thead > tr > th.#{$table}-selection-column-custom { - padding-left: 16px; - padding-right: 0; - } - - &-thead > tr > th.#{$table}-selection-column, - &-tbody > tr > td.#{$table}-selection-column { - text-align: center; - width: 62px; - min-width: 62px; - - .hi-radio-wrapper { - margin-right: 0; - } - } - - &-placeholder { - position: relative; - padding: 16px; - background: #fff; - border-bottom: 1px solid #e6e7e8; - text-align: center; - z-index: 1; - } - - &-setting { - position: absolute; - right: 10px; - top: 0; - cursor: pointer; - width: 50px; - text-align: center; - box-sizing: border-box; - } -} - -@each $key, $value in $theme-colors { - .theme__#{$key}.hi-table { - .hi-table-container table th { - background-color: rgba($value, 0.1); - color: #83868c; - } - - .hi-table-container table tr { - background-color: #fff; - color: #83868c; - } - - .hi-table-container table .hi-table-thead tr:hover { - background-color: #fff; - } - - .hi-table-container table th i:hover { - color: $value; - } - - .hi-icon.icon-menu { - color: $value; - } - - .hi-table-container table tr:hover { - background-color: rgba($value, 0.1); - } - - a { - color: $value; - } - - .hi-table-setting-menu > div:hover { - background-color: rgba($value, 0.15); - color: $value; - } - - &.striped { - table { - tr:nth-child(2n) { - background: rgba($value, 0.1); - } - } - } - - .hi-pagination { - .hi-icon { - color: #666; - } - - .hi-icon:hover { - color: $value; - } - } - - .hi-pagination:hover > span { - .hi-icon { - color: $value; - } } } } diff --git a/components/table/style/index.scss b/components/table/style/index.scss index 96565987e..202fc0fa6 100644 --- a/components/table/style/index.scss +++ b/components/table/style/index.scss @@ -1 +1,303 @@ -@import './Table.scss'; +@import './table.scss'; +@import './reset.scss'; +@import '../../core-css/index.scss'; + +.#{$table}__col-menu { + width: 124px; + font-size: 14px; + background: use-color('white'); + box-shadow: 0 2px 8px 0 rgba(56, 62, 71, 0.1); + border-radius: 4px; + border: 1px solid rgba(231, 231, 231, 1); + padding: 7px 0; + + &__item { + cursor: pointer; + color: use-color('black'); + display: flex; + justify-content: space-between; + padding: 4px 12px; + + &:hover { + color: use-color('primary'); + } + + &.col-menu__item--highlight { + color: use-color('primary'); + } + + .hi-icon { + font-size: 16px; + } + } +} + +.#{$table}__setting-menu { + .btn-group { + display: flex; + border-top: 1px solid rgba(231, 231, 231, 1); + height: 48px; + align-items: center; + + .btn { + width: 50%; + text-align: center; + cursor: pointer; + } + + .btn--left { + border-right: 1px solid rgba(231, 231, 231, 1); + } + } +} + +.#{$table} { + .hi-checkbox__input:not(.hi-checkbox__input--checked) { + background: use-color('white'); + } + + .hi-checkbox { + height: auto; + } + + th { + font-weight: 500; + white-space: normal; + } + + td { + white-space: normal; + } + + &__setting-btn { + position: absolute; + height: 100%; + z-index: 3; + right: 0; + display: flex; + align-items: center; + border-left: 1px solid #e0e1e2; + border-bottom: 1px solid #e0e1e2; + color: #999; + cursor: pointer; + font-size: 14px; + width: 16px; + background: rgb(251, 251, 251); + } + + &__pagination { + display: flex; + justify-content: flex-end; + margin-top: 20px; + + &--left { + justify-content: flex-start; + } + + &--middle { + justify-content: center; + } + } + + &--small { + table { + tr { + font-size: $font-size-normal !important; + + & > td { + padding: $smallPadding !important; + } + } + + thead { + & > tr > th { + padding: $smallPadding !important; + } + } + } + } + + &--mini { + table { + tr { + font-size: $font-size-normal !important; + + & > td { + padding: $miniPadding !important; + } + } + + thead { + & > tr > th { + padding: $miniPadding !important; + } + } + } + } + + &--large { + table { + tr { + font-size: $font-size-normal !important; + + & > td { + padding: $largePadding !important; + } + } + + thead { + & > tr > th { + padding: $largePadding !important; + } + } + } + } + + &--striped { + table { + tr:nth-child(2n) { + background: $secondaryColor; + } + } + } + + &--bordered { + table { + thead { + & > tr > th { + border-right: 1px solid#e6e7e8; + } + } + + td { + border-right: 1px solid use-color('gray-20'); + } + } + + .#{$table}_header { + > table { + border-top: 1px solid#e6e7e8; + border-left: 1px solid#e6e7e8; + } + } + } + + &__container--fixed-left { + z-index: 1; + position: absolute; + top: 0; + border-right: 2px solid #e6e7e8; + overflow: hidden; + } + + &__container--fixed-right { + z-index: 1; + position: absolute; + top: 0; + border-left: 2px solid #e6e7e8; + overflow: hidden; + } + + &__header { + overflow-x: scroll; + position: relative; + + > table { + position: relative; + } + } + + &__header--sticky { + position: fixed; + top: 0; + overflow-x: hidden; + } + + table { + table-layout: fixed; + + thead { + & > tr > th { + background: #fbfbfb; + color: use-color('gray-70'); + padding: 15px; + border-bottom: 1px solid#e6e7e8; + box-sizing: border-box; + } + } + + tr { + min-height: 52px; + + &:hover { + background: use-color('primary-20'); + } + + & > td { + color: use-color('black'); + padding: 15px; + border-bottom: 1px solid use-color('gray-20'); + box-sizing: border-box; + } + } + + .#{$table}__row { + .#{$table}__indent { + display: inline-block; + width: 14px; + height: 100%; + } + + &--expanded { + background: #fbfbfb; + + & > td { + color: use-color('gray-80'); + } + } + + &.#{$table}__row--error { + & > td { + color: get-color($palette-secondary, 'danger'); + } + } + + &.#{$table}__row--highlight { + & > td { + background: use-color('primary-20'); + } + } + + &.#{$table}__row--total { + & > td { + background-color: rgba(251, 251, 251, 1); + } + } + + &.#{$table}__row--avg { + & > td { + background-color: rgba(251, 251, 251, 1); + } + } + + & > .#{$table}__col--highlight { + background: use-color('primary-20'); + } + } + } +} + +.react-resizable { + position: relative; + background-clip: padding-box; +} + +.react-resizable-handle { + position: absolute; + width: 10px; + height: 100%; + bottom: 0; + right: -5px; + cursor: col-resize; + z-index: 1; +} diff --git a/components/table/style/reset.scss b/components/table/style/reset.scss new file mode 100644 index 000000000..68f898e9a --- /dev/null +++ b/components/table/style/reset.scss @@ -0,0 +1,8 @@ +div, +p, +ul, +li { + margin: 0; + padding: 0; + box-sizing: border-box; +} diff --git a/components/table/style/variable.scss b/components/table/style/variable.scss new file mode 100644 index 000000000..56b696cb0 --- /dev/null +++ b/components/table/style/variable.scss @@ -0,0 +1,9 @@ +$table: 'hi-table' !default; +$secondaryColor: rgba(251, 251, 251, 1) !default; +$miniPadding: 4px !default; + +$smallPadding: 8px !default; + +$normalPadding: 14px !default; + +$largePadding: 20px !default; diff --git a/components/table/Body.js b/components/table/table-legacy/table-v2/Body.js similarity index 54% rename from components/table/Body.js rename to components/table/table-legacy/table-v2/Body.js index 33b0996fc..a6b5a1ded 100644 --- a/components/table/Body.js +++ b/components/table/table-legacy/table-v2/Body.js @@ -1,6 +1,6 @@ import React, { Component } from 'react' -import Icon from '../icon' -import '../icon/style' +import Icon from '../../../icon' +import '../../../icon/style' import prifix from './prefix' import Footer from './Footer' // 点击后会展开的那个图标 @@ -12,18 +12,20 @@ class Expand extends Component { } } render () { - let {rowItem} = this.props + let { rowItem } = this.props return ( - <div onClick={this.handleClick} data-open={false} > - {rowItem.ishiuitableopen - ? <Icon name={'down'} style={{fontSize: '14px'}} /> - : <Icon name={'right'} style={{fontSize: '14px'}} />} + <div onClick={this.handleClick} data-open={false}> + {rowItem.ishiuitableopen ? ( + <Icon name={'down'} style={{ fontSize: '14px' }} /> + ) : ( + <Icon name={'right'} style={{ fontSize: '14px' }} /> + )} </div> ) } - handleClick = (e) => { - let {addExpand, colItem, index, rowItem} = this.props + handleClick = e => { + let { addExpand, colItem, index, rowItem } = this.props addExpand(e, rowItem, index, colItem) } } @@ -41,12 +43,7 @@ class Row extends Component { } render () { - const { - expand, - k, - parent, - highlightRows - } = this.props + const { expand, k, parent, highlightRows } = this.props let classNames = { 'table-row': true, picked: highlightRows.includes(k), @@ -55,19 +52,25 @@ class Row extends Component { } return ( - <tr key={k} onDoubleClick={(e) => { - if (!k.toString()) { - return - } - if (highlightRows.includes(k)) { - highlightRows.splice(highlightRows.indexOf(k), 1) - } else { - highlightRows.push(k) - } - parent.setState({ - highlightRows - }) - }} className={prifix(classNames)}>{this.props.children}</tr> + <tr + key={k} + onDoubleClick={e => { + if (!k.toString()) { + return + } + if (highlightRows.includes(k)) { + highlightRows.splice(highlightRows.indexOf(k), 1) + } else { + highlightRows.push(k) + } + parent.setState({ + highlightRows + }) + }} + className={prifix(classNames)} + > + {this.props.children} + </tr> ) } } @@ -81,7 +84,15 @@ export default class Body extends Component { } render () { - let {columns, dataSource, cbs: {addExpand}, rowSelection = { }, highlightCols, advance, ...rest} = this.props + let { + columns, + dataSource, + cbs: { addExpand }, + rowSelection = {}, + highlightCols, + advance, + ...rest + } = this.props columns = columns.filter(item => !item.hide) let selectedRowKeys = rowSelection.selectedRowKeys || [] @@ -95,9 +106,18 @@ export default class Body extends Component { if (item.expand) { let obj = pureData.find(o => o.key === item.parent) let expand = columns.find(o => o.type === 'expand') - tr = expand ? <td colSpan={columns.length} key={'key-' + item.parent} className={prifix('table-col', highlightCols.includes(item.key) ? 'picked' : null)} > - {expand.render(obj[item.dataIndex], obj, pureData.indexOf(obj))} - </td> : null + tr = expand ? ( + <td + colSpan={columns.length} + key={'key-' + item.parent} + className={prifix( + 'table-col', + highlightCols.includes(item.key) ? 'picked' : null + )} + > + {expand.render(obj[item.dataIndex], obj, pureData.indexOf(obj))} + </td> + ) : null } else { // 扩展项的占位dom @@ -111,7 +131,17 @@ export default class Body extends Component { // 点击后会展开的那个图标 if (obj.type === 'expand') { // {/*<div key={'td-' + k + '-' + j} onClick={(e) => addExpand(e, obj)} data-index={k} data-open={false}> > </div>*/} - td = <Expand key={k} addExpand={addExpand} data-index={k} data-open={false} colItem={obj} index={k} rowItem={item} /> + td = ( + <Expand + key={k} + addExpand={addExpand} + data-index={k} + data-open={false} + colItem={obj} + index={k} + rowItem={item} + /> + ) } else { obj.render = obj.render || defaultRender td = obj.render(item[obj.dataIndex], item, i) @@ -133,7 +163,20 @@ export default class Body extends Component { // } } if (parseInt(rowSpan) !== 0) { - tr.push(<td className={prifix('table-col', highlightCols.includes(obj.key) ? 'picked' : null)} rowSpan={rowSpan} colSpan={colSpan} data-span={colSpan} key={'td-' + k + '-' + j} >{td}</td>) + tr.push( + <td + className={prifix( + 'table-col', + highlightCols.includes(obj.key) ? 'picked' : null + )} + rowSpan={rowSpan} + colSpan={colSpan} + data-span={colSpan} + key={'td-' + k + '-' + j} + > + {td} + </td> + ) } else { tr.push(null) } @@ -143,7 +186,17 @@ export default class Body extends Component { i++ // 动态插入的组件不累加 } - return <Row selectedRowKeys={selectedRowKeys} k={item.key || k} expand={item.expand} key={item.key || 'tr-' + k} {...rest}>{tr}</Row> + return ( + <Row + selectedRowKeys={selectedRowKeys} + k={item.key || k} + expand={item.expand} + key={item.key || 'tr-' + k} + {...rest} + > + {tr} + </Row> + ) }) return ( @@ -156,17 +209,21 @@ export default class Body extends Component { } getPrefixNodes () { - const { - columns, - advance - } = this.props + const { columns, advance } = this.props return advance.prefix.map((suf, index) => { return ( - <tr className={prifix('table-row')} key={`suf-${index}`}>{ - columns.map((item, j) => { - return <td className={prifix('table-col')} key={`suf-${item.dataIndex}-${index}-${j}`}>{suf[item.dataIndex]}</td> - }) - }</tr> + <tr className={prifix('table-row')} key={`suf-${index}`}> + {columns.map((item, j) => { + return ( + <td + className={prifix('table-col')} + key={`suf-${item.dataIndex}-${index}-${j}`} + > + {suf[item.dataIndex]} + </td> + ) + })} + </tr> ) }) } diff --git a/components/table/ClickOuterside.js b/components/table/table-legacy/table-v2/ClickOuterside.js similarity index 100% rename from components/table/ClickOuterside.js rename to components/table/table-legacy/table-v2/ClickOuterside.js diff --git a/components/table/Footer.js b/components/table/table-legacy/table-v2/Footer.js similarity index 100% rename from components/table/Footer.js rename to components/table/table-legacy/table-v2/Footer.js diff --git a/components/table/table-legacy/table-v2/Header.js b/components/table/table-legacy/table-v2/Header.js new file mode 100644 index 000000000..0f71c4adc --- /dev/null +++ b/components/table/table-legacy/table-v2/Header.js @@ -0,0 +1,207 @@ +import React, { Component } from 'react' +import prifix from './prefix' +import Icon from '../../../icon' +import Menu from './menu' + +class Sorter extends Component { + reversed = false + sortAsec = () => { + let { index, columns, kname, name } = this.props + let sorter = columns[index].sorter + let { + cbs: { resetData }, + dataSource + } = this.props + dataSource.sort(sorter) + resetData(dataSource) + this.reversed = false + window.localStorage.setItem(name + '-sorter', [kname, 0]) + } + + sortDsec = () => { + let { index, columns, name, kname } = this.props + let sorter = columns[index].sorter + let { + cbs: { resetData }, + dataSource + } = this.props + + dataSource.sort(sorter) + dataSource.reverse() + resetData(dataSource) + this.reversed = true + window.localStorage.setItem(name + '-sorter', [kname, 1]) + } + + render () { + return ( + <div> + <span style={{ display: 'block', height: '12px', lineHeight: '12px' }}> + <Icon + name={'up'} + onClick={this.sortAsec} + style={{ fontSize: '12px' }} + /> + </span> + <span style={{ display: 'block', height: '12px', lineHeight: '12px' }}> + <Icon + name={'down'} + onClick={this.sortDsec} + style={{ fontSize: '12px' }} + /> + </span> + </div> + ) + } +} + +class ServerSorter extends Component { + render () { + return ( + <div> + <span style={{ display: 'block', height: '12px', lineHeight: '12px' }}> + <Icon + name={'up'} + onClick={e => { + let { + item: { serverSort }, + fetch + } = this.props + fetch(serverSort[0]) + }} + style={{ fontSize: '12px' }} + /> + </span> + <span style={{ display: 'block', height: '12px', lineHeight: '12px' }}> + <Icon + name={'down'} + onClick={e => { + let { + item: { serverSort }, + fetch + } = this.props + fetch(serverSort[1]) + }} + style={{ fontSize: '12px' }} + /> + </span> + </div> + ) + } +} + +let HeaderCell = props => { + let { item, index, contextMenu } = props + return ( + <th + colSpan={item.colSpan || 1} + key={'head-' + item.key || item.dataIndex || item.title} + onContextMenu={e => contextMenu(e, item.key)} + > + <div style={{ display: 'flex', alignItems: 'center' }}> + <div> + {typeof item.title === 'function' ? item.title() : item.title} + </div> +   + {item.sorter && ( + <Sorter {...props} key={item.key} index={index} kname={item.key} /> + )} + {item.serverSort && ( + <ServerSorter + {...props} + key={item.key} + index={index} + kname={item.key} + /> + )} + </div> + </th> + ) +} + +let GroupCell = props => { + let { item, index, contextMenu } = props + return ( + <th + colSpan={item.headColSpan} + rowSpan={item.headRowSpan} + key={'head-' + item.key || item.dataIndex || item.title} + onContextMenu={e => contextMenu(e, item.key)} + > + <div style={{ display: 'flex', alignItems: 'center' }}> +   + <div> + {typeof item.title === 'function' ? item.title() : item.title} + </div> + {item.sorter && ( + <Sorter {...props} col={item} index={index} kname={item.key} /> + )} + {item.serverSort && 'sirt'} + </div> + </th> + ) +} + +// 普通的表头 +export default class Header extends Component { + render () { + let { columns, headerColumns } = this.props + // 表头可以传组件,如果是文本就渲染文本 + let nodes = [] + // 固定表头分组,这里好难。。 + + if (headerColumns && headerColumns.length > 1) { + nodes = headerColumns.map((columns, k) => { + let tr = [] + columns = columns.filter(item => !item.hide) + for (let i = 0; i < columns.length; i++) { + tr.push( + <GroupCell + {...this.props} + item={columns[i]} + index={i} + contextMenu={this.contextMenu} + key={columns[i].key} + /> + ) + } + return <tr key={k}>{tr}</tr> + }) + } else { + for (let i = 0; i < columns.length;) { + let colSpan = columns[i].colSpan || 1 + nodes.push( + <HeaderCell + {...this.props} + item={columns[i]} + index={i} + contextMenu={this.contextMenu} + key={columns[i].key} + /> + ) + i = i + colSpan + } + + nodes = <tr>{nodes}</tr> + } + + return <thead className={prifix('table-thead')}>{nodes}</thead> + } + + contextMenu = (e, key) => { + e.preventDefault() + let { + cbs, + scrollWidth, + scrollX = false, + scroll = false, + size, + origin + } = this.props + let sc = scrollWidth || scrollX || (scroll && scroll.x) + if (origin && origin.url) { + sc = false + } + Menu.show(e, cbs, key, !!sc, size, this.props.headerColumns.length === 1) + } +} diff --git a/components/table/TableContent.js b/components/table/table-legacy/table-v2/TableContent.js similarity index 54% rename from components/table/TableContent.js rename to components/table/table-legacy/table-v2/TableContent.js index 48b3e9498..73e3c0818 100644 --- a/components/table/TableContent.js +++ b/components/table/table-legacy/table-v2/TableContent.js @@ -8,11 +8,23 @@ export default class TableContent extends Component { this.dom = React.createRef() } render () { - let {columns, className, style, head = true, body = true, parent, ...rest} = this.props + let { + columns, + className, + style, + head = true, + body = true, + parent, + ...rest + } = this.props rest.columns = columns let showColumns = rest.columns.filter(item => !item.hide) let showHeaderColumns = rest.headerColumns.filter(item => !item.hide) - if (rest.headerColumns.length > 1 && parent.setting && parent.setting.current) { + if ( + rest.headerColumns.length > 1 && + parent.setting && + parent.setting.current + ) { parent.setting.current.style.display = 'none' } @@ -26,19 +38,25 @@ export default class TableContent extends Component { sty.width = parseInt(item.width) + 'px' } - return ( - <col - style={sty} - key={'col-' + index} /> - ) + return <col style={sty} key={'col-' + index} /> })} </colgroup> - {head - ? <Header {...rest} columns={showColumns} showHeaderColumns={showHeaderColumns} parent={parent} /> : null - } - {body - ? <Body {...rest} columns={showColumns} showHeaderColumns={showHeaderColumns} parent={parent} /> : null - } + {head ? ( + <Header + {...rest} + columns={showColumns} + showHeaderColumns={showHeaderColumns} + parent={parent} + /> + ) : null} + {body ? ( + <Body + {...rest} + columns={showColumns} + showHeaderColumns={showHeaderColumns} + parent={parent} + /> + ) : null} </table> ) } diff --git a/components/table/__tests__/index.test.js b/components/table/table-legacy/table-v2/__tests__/index.test.js similarity index 100% rename from components/table/__tests__/index.test.js rename to components/table/table-legacy/table-v2/__tests__/index.test.js diff --git a/components/table/checkbox/index.js b/components/table/table-legacy/table-v2/checkbox/index.js similarity index 83% rename from components/table/checkbox/index.js rename to components/table/table-legacy/table-v2/checkbox/index.js index c21ee4379..083eb6343 100644 --- a/components/table/checkbox/index.js +++ b/components/table/table-legacy/table-v2/checkbox/index.js @@ -1,8 +1,8 @@ import React, { Component } from 'react' import classNames from 'classnames' -import Provider from '../../context' +import Provider from '../../../../context' -import '../../checkbox/checkbox-legacy/style' +import '../../../../checkbox/checkbox-legacy/style' class Checkbox extends Component { render () { let { @@ -27,7 +27,6 @@ class Checkbox extends Component { } onChange(e, !checked) }} - className={classNames(`theme__${theme}`, { 'hi-checkbox-legacy': true, 'hi-checkbox-legacy--part': semi, @@ -38,7 +37,10 @@ class Checkbox extends Component { <span className='hi-checkbox-legacy__input' /> {text && ( <span - className={classNames({ 'hi-checkbox-legacy__label': true, highlight })} + className={classNames({ + 'hi-checkbox-legacy__label': true, + highlight + })} onClick={e => { onTitleClick && onTitleClick(e) }} diff --git a/components/table/checkbox/index.scss b/components/table/table-legacy/table-v2/checkbox/index.scss similarity index 100% rename from components/table/checkbox/index.scss rename to components/table/table-legacy/table-v2/checkbox/index.scss diff --git a/components/table/table-legacy/table-v2/checkbox/style/index.js b/components/table/table-legacy/table-v2/checkbox/style/index.js new file mode 100644 index 000000000..63810a681 --- /dev/null +++ b/components/table/table-legacy/table-v2/checkbox/style/index.js @@ -0,0 +1 @@ +import './index.scss' diff --git a/components/table/checkbox/style/index.scss b/components/table/table-legacy/table-v2/checkbox/style/index.scss similarity index 100% rename from components/table/checkbox/style/index.scss rename to components/table/table-legacy/table-v2/checkbox/style/index.scss diff --git a/components/table/index.js b/components/table/table-legacy/table-v2/index.js similarity index 54% rename from components/table/index.js rename to components/table/table-legacy/table-v2/index.js index 093452c1d..beedda750 100644 --- a/components/table/index.js +++ b/components/table/table-legacy/table-v2/index.js @@ -4,13 +4,13 @@ import ClickOutside from './ClickOuterside' import TableContent from './TableContent' import prifix from './prefix' import Checkbox from './checkbox' -import Pagination from '../pagination' -import Icon from '../icon' +import Pagination from '../../../pagination' +import Icon from '../../../icon' import './style' -import loading from '../loading' -import '../pagination/style' -import '../icon/style' -import Provider from '../context' +import loading from '../../../loading' +import '../../../pagination/style' +import '../../../icon/style' +import Provider from '../../../context' import { setKey, scrollTop, getStyle, getPosition, offset } from './tool' import request from 'axios' import qs from 'qs' @@ -45,19 +45,19 @@ class Table extends Component { useFixedHeader: false, rowKey: 'key', rowClassName: () => '', - onRow () {}, - onHeaderRow () {}, + onRow() {}, + onHeaderRow() {}, bodyStyle: {}, style: {}, showHeader: true, - scroll: {x: undefined, y: undefined}, + scroll: { x: undefined, y: undefined }, rowRef: () => null, emptyText: () => 'No Data' } - constructor (props) { + constructor(props) { super(props) // 只有dataSource,columns重造 - let {data = [], scroll} = props + let { data = [], scroll } = props data = setKey(data, 'id') this.dom = React.createRef() this.fixLeft = React.createRef() @@ -79,13 +79,13 @@ class Table extends Component { } } - runMemory () { - let {name} = this.props + runMemory() { + let { name } = this.props if (!name) { return } - let {dataSource} = this.state - let {columns, headerColumns, highlightCols} = this.state + let { dataSource } = this.state + let { columns, headerColumns, highlightCols } = this.state let col = window.localStorage.getItem(name + '-col') if (col) { col = col.split(',').filter(item => item) @@ -132,13 +132,13 @@ class Table extends Component { this.cbs.freezeCol(freezeCol) } - this.setState({columns, headerColumns, dataSource, highlightCols}) + this.setState({ columns, headerColumns, dataSource, highlightCols }) } // noinspection JSAnnotator cbs = { - highlighCol: (key) => { - let {highlightCols} = this.state + highlighCol: key => { + let { highlightCols } = this.state let col = highlightCols.indexOf(key) if (col > -1) { highlightCols.splice(col, 1) @@ -146,15 +146,15 @@ class Table extends Component { highlightCols.push(key) } // 设置操作记忆 - let {name} = this.props + let { name } = this.props window.localStorage.setItem(name + '-highlight', highlightCols) - this.setState({highlightCols}) + this.setState({ highlightCols }) }, - freezeCol: (key) => { + freezeCol: key => { // let col = - let {scrollWidth, scroll, scrollX, name} = this.props - let {columns} = this.state + let { scrollWidth, scroll, scrollX, name } = this.props + let { columns } = this.state let pin = false columns = columns.map(item => { delete item.fixed @@ -177,13 +177,13 @@ class Table extends Component { if (scrollWidth || scrollX || (scroll && scroll.x)) { columnsDetail.scrollX = true } - this.setState({...columnsDetail}, () => { + this.setState({ ...columnsDetail }, () => { this.xscroll() }) window.localStorage.setItem(name + '-freeze', key) }, - hideCol: (key) => { - let {columns, headerColumns} = this.state + hideCol: key => { + let { columns, headerColumns } = this.state columns.map(item => { if (item.key === key) { item.hide = !item.hide @@ -200,41 +200,60 @@ class Table extends Component { let colMemory = columns.filter(item => !item.hide).map(item => item.key) // 设置操作记忆 - let {name} = this.props + let { name } = this.props window.localStorage.setItem(name + '-col', colMemory) - this.setState({columns, headerColumns}) + this.setState({ columns, headerColumns }) }, - resetData: (dataSource) => { - this.setState({dataSource}) + resetData: dataSource => { + this.setState({ dataSource }) }, - resetColumns: (columns) => { - this.setState({columns}) + resetColumns: columns => { + this.setState({ columns }) }, addExpand: (e, item, index, col) => { - let {dataSource, columns} = this.state + let { dataSource, columns } = this.state let columnsDetail = this.setColumnsDetail(columns) if (!item.ishiuitableopen) { - dataSource.splice(index + 1, 0, {expand: true, dataIndex: col.dataIndex, parent: item.key, width: col.width || '50px', render: col.render}) + dataSource.splice(index + 1, 0, { + expand: true, + dataIndex: col.dataIndex, + parent: item.key, + width: col.width || '50px', + render: col.render + }) } else { dataSource.splice(index + 1, 1) } let obj = dataSource.find(o => o.key === item.key) obj.ishiuitableopen = !obj.ishiuitableopen - this.setState({dataSource: dataSource, ...columnsDetail}) + this.setState({ dataSource: dataSource, ...columnsDetail }) } } - getScrollXContent () { + getScrollXContent() { let scrollTable - let {dataSource, highlightCols, columns, headerColumns, leftFiexColumns, rightFixColumns, highlightRows} = this.state - let {style = {}, ...props} = this.props - let handleScroll = (e) => { + let { + dataSource, + highlightCols, + columns, + headerColumns, + leftFiexColumns, + rightFixColumns, + highlightRows + } = this.state + let { style = {}, ...props } = this.props + let handleScroll = e => { let onLeft = e.target.scrollLeft === 0 - let onRight = Math.abs(e.target.scrollWidth - e.target.scrollLeft - parseInt(getStyle(e.target, 'width'))) < 2 + let onRight = + Math.abs( + e.target.scrollWidth - + e.target.scrollLeft - + parseInt(getStyle(e.target, 'width')) + ) < 2 let left = this.fixLeft.current let right = this.fixRight.current if (left) { @@ -257,23 +276,55 @@ class Table extends Component { scrollTable = this.getBaseContent() } else { scrollTable = [ - <div className={prifix('table-scroll')} onScroll={handleScroll} key='content'> - - <div className={prifix('table-body')} style={{overflowX: 'auto'}}> - <TableContent style={{...style}} {...Object.assign({}, {...props}, {columns}, {dataSource, highlightCols, highlightRows}, {parent: this, cbs: this.cbs, fetch: this.fetch, t: this}, {headerColumns, name: this.props.name})} /> + <div + className={prifix('table-scroll')} + onScroll={handleScroll} + key='content' + > + <div className={prifix('table-body')} style={{ overflowX: 'auto' }}> + <TableContent + style={{ ...style }} + {...Object.assign( + {}, + { ...props }, + { columns }, + { dataSource, highlightCols, highlightRows }, + { parent: this, cbs: this.cbs, fetch: this.fetch, t: this }, + { headerColumns, name: this.props.name } + )} + /> </div> - { - dataSource.length === 0 ? this.getEmptyContent() : null - } + {dataSource.length === 0 ? this.getEmptyContent() : null} </div> ] if (leftFiexColumns.length > 0) { scrollTable.push( - <div className={prifix('table-fixed-left')} ref={this.fixLeft} style={{display: 'none'}} key='left'> + <div + className={prifix('table-fixed-left')} + ref={this.fixLeft} + style={{ display: 'none' }} + key='left' + > <div className={prifix('table-outer')}> <div className={prifix('table-inner')}> - <TableContent style={{width: 'auto', ...style}} className={prifix('table-fixed')} {...Object.assign({}, {...props}, {highlightRows, parent: this, columns: leftFiexColumns, headerColumns, name: this.props.name}, {dataSource, highlightCols}, {cbs: this.cbs, fetch: this.fetch, t: this})} /> + <TableContent + style={{ width: 'auto', ...style }} + className={prifix('table-fixed')} + {...Object.assign( + {}, + { ...props }, + { + highlightRows, + parent: this, + columns: leftFiexColumns, + headerColumns, + name: this.props.name + }, + { dataSource, highlightCols }, + { cbs: this.cbs, fetch: this.fetch, t: this } + )} + /> </div> </div> </div> @@ -282,10 +333,30 @@ class Table extends Component { if (rightFixColumns.length > 0) { scrollTable.push( - <div className={prifix('table-fixed-right')} ref={this.fixRight} key='right'> + <div + className={prifix('table-fixed-right')} + ref={this.fixRight} + key='right' + > <div className={prifix('table-outer')}> <div className={prifix('table-inner')}> - <TableContent style={{width: 'auto', ...style}} className={prifix('table-fixed')} {...Object.assign({}, {...props}, {highlightRows, parent: this, columns: rightFixColumns, headerColumns, name: this.props.name}, {dataSource, highlightCols}, {cbs: this.cbs, fetch: this.fetch, t: this})} /> + <TableContent + style={{ width: 'auto', ...style }} + className={prifix('table-fixed')} + {...Object.assign( + {}, + { ...props }, + { + highlightRows, + parent: this, + columns: rightFixColumns, + headerColumns, + name: this.props.name + }, + { dataSource, highlightCols }, + { cbs: this.cbs, fetch: this.fetch, t: this } + )} + /> </div> </div> </div> @@ -293,55 +364,100 @@ class Table extends Component { } } - return ( - <div className={prifix('table-content')}> - {scrollTable} - </div> - ) + return <div className={prifix('table-content')}>{scrollTable}</div> } - showColumsPanel= (e) => { - - } + showColumsPanel = e => {} - getScrollYContent () { - let {dataSource, highlightCols, columns, headerColumns, highlightRows} = this.state - let {scroll} = this.state - let {style = {}, ...props} = this.props + getScrollYContent() { + let { + dataSource, + highlightCols, + columns, + headerColumns, + highlightRows + } = this.state + let { scroll } = this.state + let { style = {}, ...props } = this.props return ( <div className={prifix('table-content')}> <div className={prifix('table-scroll')}> <div className={prifix('table-head')}> - <TableContent {...Object.assign({}, {...props}, {style: {...style}}, {columns}, {dataSource, highlightCols, highlightRows}, {parent: this, body: false, cbs: this.cbs, fetch: this.fetch, t: this})} /> + <TableContent + {...Object.assign( + {}, + { ...props }, + { style: { ...style } }, + { columns }, + { dataSource, highlightCols, highlightRows }, + { + parent: this, + body: false, + cbs: this.cbs, + fetch: this.fetch, + t: this + } + )} + /> </div> - <div className={prifix('table-body')} style={{maxHeight: scroll.y + 'px', overflow: 'auto'}} > - <TableContent {...Object.assign({}, {...props}, {style: {...style}}, {columns}, {dataSource, highlightCols, highlightRows}, {parent: this, head: false, cbs: this.cbs, fetch: this.fetch, t: this}, {headerColumns})} /> + <div + className={prifix('table-body')} + style={{ maxHeight: scroll.y + 'px', overflow: 'auto' }} + > + <TableContent + {...Object.assign( + {}, + { ...props }, + { style: { ...style } }, + { columns }, + { dataSource, highlightCols, highlightRows }, + { + parent: this, + head: false, + cbs: this.cbs, + fetch: this.fetch, + t: this + }, + { headerColumns } + )} + /> </div> </div> - { - dataSource.length === 0 ? this.getEmptyContent() : null - } + {dataSource.length === 0 ? this.getEmptyContent() : null} </div> ) } - getBaseContent () { - let {dataSource, highlightCols, columns, headerColumns, highlightRows} = this.state + getBaseContent() { + let { + dataSource, + highlightCols, + columns, + headerColumns, + highlightRows + } = this.state - let {style = {}, ...props} = this.props + let { style = {}, ...props } = this.props return ( <div className={prifix('table-content')}> - - <div className={prifix('table-body')} style={{overflowX: 'auto'}}> - <TableContent {...Object.assign({}, {style: {...style}}, {...props}, {columns}, {dataSource, highlightCols, highlightRows}, {parent: this, cbs: this.cbs, fetch: this.fetch, t: this}, {headerColumns})} /> + <div className={prifix('table-body')} style={{ overflowX: 'auto' }}> + <TableContent + {...Object.assign( + {}, + { style: { ...style } }, + { ...props }, + { columns }, + { dataSource, highlightCols, highlightRows }, + { parent: this, cbs: this.cbs, fetch: this.fetch, t: this }, + { headerColumns } + )} + /> </div> - { - this.isEmpty ? this.getEmptyContent() : null - } + {this.isEmpty ? this.getEmptyContent() : null} </div> ) } - get isEmpty () { + get isEmpty() { let dataLen = this.state.dataSource.length if (dataLen > 0) { return false @@ -350,9 +466,7 @@ class Table extends Component { if (!this.props.advance) { return true } - let { - advance - } = this.props + let { advance } = this.props let prefixLen = 0 let suffixLen = 0 if (advance.prefix) { @@ -368,21 +482,23 @@ class Table extends Component { return true } - getEmptyContent () { - let {emptyText} = this.props + getEmptyContent() { + let { emptyText } = this.props let text = typeof emptyText === 'string' ? emptyText : emptyText() - return <div className='hi-table-placeholder'>{text}</div> + return <div className={prifix('table-placeholder')}>{text}</div> } - componentDidUpdate () { - const { - fixTop, - height, - rowSelection - } = this.props - let leftFixTable = this.dom.current.querySelectorAll('.hi-table-fixed-left table tr') - let rightFixTable = this.dom.current.querySelectorAll('.hi-table-fixed-right table tr') - let scrollTable = this.dom.current.querySelectorAll('.hi-table-scroll table tr') + componentDidUpdate() { + const { fixTop, height, rowSelection } = this.props + let leftFixTable = this.dom.current.querySelectorAll( + '.hi-table-fixed-left table tr' + ) + let rightFixTable = this.dom.current.querySelectorAll( + '.hi-table-fixed-right table tr' + ) + let scrollTable = this.dom.current.querySelectorAll( + '.hi-table-scroll table tr' + ) if (scrollTable) { scrollTable.forEach((tr, index) => { @@ -397,34 +513,52 @@ class Table extends Component { if (!fixTop && !rowSelection && height) { let hiTableBody = this.dom.current.querySelectorAll('.hi-table-body') - hiTableBody && hiTableBody.length > 0 && hiTableBody.forEach(item => { - item.style.maxHeight = height - item.style.overflowY = 'auto' - item.onscroll = (e) => { - let thead = item.querySelectorAll('thead') - thead.forEach(h => { - h.style.transform = `translate(0,${item.scrollTop}px)` - }) - - let fixTableBodyArr = this.dom.current.querySelectorAll('.hi-table-inner') - fixTableBodyArr && fixTableBodyArr.length > 0 && fixTableBodyArr.forEach(fixTableBody => { - fixTableBody.style.maxHeight = (parseInt(height) - '18') + 'px' - fixTableBody.style.overflowY = 'hidden' - fixTableBody.scrollTop = item.scrollTop - fixTableBody.querySelector('thead').style.transform = `translate(0,${item.scrollTop}px)` - }) - } - }) + hiTableBody && + hiTableBody.length > 0 && + hiTableBody.forEach(item => { + item.style.maxHeight = height + item.style.overflowY = 'auto' + item.onscroll = e => { + let thead = item.querySelectorAll('thead') + thead.forEach(h => { + h.style.transform = `translate(0,${item.scrollTop}px)` + }) + + let fixTableBodyArr = this.dom.current.querySelectorAll( + '.hi-table-inner' + ) + fixTableBodyArr && + fixTableBodyArr.length > 0 && + fixTableBodyArr.forEach(fixTableBody => { + fixTableBody.style.maxHeight = parseInt(height) - '18' + 'px' + fixTableBody.style.overflowY = 'hidden' + fixTableBody.scrollTop = item.scrollTop + fixTableBody.querySelector( + 'thead' + ).style.transform = `translate(0,${item.scrollTop}px)` + }) + } + }) } } - render () { + render() { // 多选配置 // noinspection JSAnnotator - let {pagination, name, size = 'normal', bordered = false, striped = false, scrollX, header = null, footer = null, theme} = this.props + let { + pagination, + name, + size = 'normal', + bordered = false, + striped = false, + scrollX, + header = null, + footer = null, + theme + } = this.props // noinspection JSAnnotator - let {scroll, columnMenu, serverPagination} = this.state + let { scroll, columnMenu, serverPagination } = this.state let content // 不滚动 if (!scroll.x && !scroll.y) { @@ -451,7 +585,7 @@ class Table extends Component { content = this.getScrollXContent() } - let {columns} = this.state + let { columns } = this.state let pagePosition = 'flex-end' let serverPagePosition = 'flex-end' @@ -479,93 +613,114 @@ class Table extends Component { } let serverPaginationConfig = serverPagination return ( - <div className={prifix({table: true, [`theme__${theme}`]: true, [size]: size, bordered, striped})} ref={this.dom}> - {header && <div className={prifix({'table-pre-header': true})}>{header()}</div>} - <div className={prifix({'table-container': true})}> + <div + className={prifix({ + table: true, + [`theme__${theme}`]: true, + [size]: size, + bordered, + striped + })} + ref={this.dom} + > + {header && ( + <div className={prifix({ 'table-pre-header': true })}>{header()}</div> + )} + <div className={prifix({ 'table-container': true })}> <div>{content}</div> - { name && - <div className={prifix('table-setting')} ref={this.setting}> - <div onClick={(e) => { - let {columnMenu} = this.state - this.setState({columnMenu: !columnMenu}) - }}> - <Icon name='menu' style={{fontSize: '24px'}} - /> - </div> - { - columnMenu && <ClickOutside onClickOutside={(e) => this.setState({columnMenu: false})} > - <div className={prifix('table-setting-menu column-menu')} > - { - columns.map(item => ( + {name && ( + <div className={prifix('table-setting')} ref={this.setting}> + <div + onClick={e => { + let { columnMenu } = this.state + this.setState({ columnMenu: !columnMenu }) + }} + > + <Icon name='menu' style={{ fontSize: '24px' }} /> + </div> + {columnMenu && ( + <ClickOutside + onClickOutside={e => this.setState({ columnMenu: false })} + > + <div className={prifix('table-setting-menu column-menu')}> + {columns.map(item => ( <div key={item.key}> <div> - { - (function () { - if (item.type === 'select') { - return '多选' - } - if (item.type === 'expand') { - return '展开' - } - if (typeof item.title === 'function') { - return item.title() - } - return item.title - }()) - } + {(function() { + if (item.type === 'select') { + return '多选' + } + if (item.type === 'expand') { + return '展开' + } + if (typeof item.title === 'function') { + return item.title() + } + return item.title + })()} </div> <div> - <Checkbox checked={!item.hide} onChange={(e) => { - this.cbs.hideCol(item.key) - }} /> + <Checkbox + checked={!item.hide} + onChange={e => { + this.cbs.hideCol(item.key) + }} + /> </div> </div> - )) - } - </div> - </ClickOutside> + ))} + </div> + </ClickOutside> + )} + </div> + )} + </div> + {footer && ( + <div className={prifix({ 'table-pre-footer': true })}>{footer()}</div> + )} + {(pagination || columns) && <br />} + {pagination && ( + <div style={{ display: 'flex', justifyContent: pagePosition }}> + { + <div className={prifix('table-page')}> + <Pagination {...pagination} /> + </div> } </div> - } - </div> - {footer && <div className={prifix({'table-pre-footer': true})}>{footer()}</div>} - {(pagination || columns) && <br /> } - { - pagination && <div style={{display: 'flex', justifyContent: pagePosition}}> + )} + {serverPaginationConfig && ( + <div + style={{ display: 'flex', justifyContent: serverPagePosition }} + a='1' + > { - <div className={prifix('table-page')} > + <div className={prifix('table-page')}> <Pagination - {...pagination} + {...serverPaginationConfig} + onChange={current => { + serverPaginationConfig.onChange && + serverPaginationConfig.onChange(current) + this.setState( + { + serverPagination: { + ...serverPagination, + current + } + }, + this.fetch + ) + }} /> </div> } </div> - } - {serverPaginationConfig && <div style={{display: 'flex', justifyContent: serverPagePosition}} a='1'> - { - <div className={prifix('table-page')} > - <Pagination - {...serverPaginationConfig} - onChange={(current) => { - serverPaginationConfig.onChange && serverPaginationConfig.onChange(current) - this.setState({ - serverPagination: { - ...serverPagination, - current - } - }, this.fetch) - }} - /> - </div> - } - </div> - } + )} </div> ) } - xscroll () { - let {fixTop = false, name} = this.props + xscroll() { + let { fixTop = false, name } = this.props if (typeof fixTop === 'boolean') { fixTop = 0 } else { @@ -580,7 +735,9 @@ class Table extends Component { if (thead) { if ( scrollTop() + fixTop > offsetTop && - fixTop < parseInt(getStyle(dom, 'height'), 10) - parseInt(getStyle(thead[0], 'height'), 10) + fixTop < + parseInt(getStyle(dom, 'height'), 10) - + parseInt(getStyle(thead[0], 'height'), 10) ) { thead.forEach(th => { th.style.display = 'table-header-group' @@ -595,7 +752,8 @@ class Table extends Component { th.style.transform = `translate(0,0)` if (name) { this.setting.current.style.display = `block` - let h = parseInt(getStyle(dom.querySelector('thead'), 'height')) + 'px' + let h = + parseInt(getStyle(dom.querySelector('thead'), 'height')) + 'px' this.setting.current.style.height = h this.setting.current.style.lineHeight = h } @@ -603,15 +761,21 @@ class Table extends Component { } } } - getColumns (columns) { - let select = columns.find(({type}) => type === 'select') - let leftFiexColumns = columns.filter(({fixed}) => !!fixed && fixed === 'left') + getColumns(columns) { + let select = columns.find(({ type }) => type === 'select') + let leftFiexColumns = columns.filter( + ({ fixed }) => !!fixed && fixed === 'left' + ) // 将多选框放到左边,如果没有就放个null // 去掉null,否则遍历会报错 leftFiexColumns = leftFiexColumns.filter(col => !!col) - const rightFixColumns = columns.filter(({fixed}) => !!fixed && fixed === 'right') - const commanColumns = columns.filter(({fixed}) => !fixed || (fixed !== 'left' && fixed !== 'right')) + const rightFixColumns = columns.filter( + ({ fixed }) => !!fixed && fixed === 'right' + ) + const commanColumns = columns.filter( + ({ fixed }) => !fixed || (fixed !== 'left' && fixed !== 'right') + ) // 讲表格重新排序,并且去掉slelect ,因为是null columns = [...leftFiexColumns, ...commanColumns, ...rightFixColumns] @@ -627,8 +791,8 @@ class Table extends Component { } } - getHeaderGroup (columns, rowSelection) { - columns = columns.map((item) => { + getHeaderGroup(columns, rowSelection) { + columns = columns.map(item => { item.title = item.title || item.dataIndex item.key = item.key || item.dataIndex || item.title || item.id if (item.type === 'expand') { @@ -637,18 +801,32 @@ class Table extends Component { return item }) if (rowSelection) { - let {selectedRowKeys = [], dataName = 'key'} = rowSelection + let { selectedRowKeys = [], dataName = 'key' } = rowSelection columns.unshift({ width: '50px', type: 'select', key: 'hi-table-select-' + this.props.name, title: () => { - let {getCheckboxProps = (record) => ({ disabled: false }), onChange} = rowSelection + let { + getCheckboxProps = record => ({ disabled: false }), + onChange + } = rowSelection return ( - <Checkbox type='checkbox' - checked={selectedRowKeys.length === this.state.dataSource.filter(record => !getCheckboxProps(record).disabled).length && this.state.dataSource.filter(record => !getCheckboxProps(record).disabled).length > 0} + <Checkbox + type='checkbox' + checked={ + selectedRowKeys.length === + this.state.dataSource.filter( + record => !getCheckboxProps(record).disabled + ).length && + this.state.dataSource.filter( + record => !getCheckboxProps(record).disabled + ).length > 0 + } onChange={(e, checked) => { - let data = this.state.dataSource.filter(record => !getCheckboxProps(record).disabled) + let data = this.state.dataSource.filter( + record => !getCheckboxProps(record).disabled + ) let _selectedRowKeys = [...selectedRowKeys] if (checked) { _selectedRowKeys.splice(0, selectedRowKeys.length) @@ -658,27 +836,45 @@ class Table extends Component { } else { _selectedRowKeys.splice(0, _selectedRowKeys.length) } - onChange(_selectedRowKeys, data.filter(record => _selectedRowKeys.includes(record[dataName]))) + onChange( + _selectedRowKeys, + data.filter(record => + _selectedRowKeys.includes(record[dataName]) + ) + ) }} /> ) }, render: (text, record, index) => { - let {getCheckboxProps = (record) => ({ disabled: false }), onChange} = rowSelection + let { + getCheckboxProps = record => ({ disabled: false }), + onChange + } = rowSelection // todo dataName 是干嘛的不明白 return ( - <Checkbox type='checkbox' + <Checkbox + type='checkbox' checked={selectedRowKeys.includes(record[dataName])} disabled={getCheckboxProps(record).disabled} onChange={(e, checked) => { - let data = this.state.dataSource.filter(record => !getCheckboxProps(record).disabled) + let data = this.state.dataSource.filter( + record => !getCheckboxProps(record).disabled + ) let _selectedRowKeys = [...selectedRowKeys] if (checked) { _selectedRowKeys.push(record[dataName]) } else { - _selectedRowKeys = _selectedRowKeys.filter(key => record[dataName] !== key) + _selectedRowKeys = _selectedRowKeys.filter( + key => record[dataName] !== key + ) } - onChange(_selectedRowKeys, data.filter(record => _selectedRowKeys.includes(record[dataName]))) + onChange( + _selectedRowKeys, + data.filter(record => + _selectedRowKeys.includes(record[dataName]) + ) + ) }} key={record[dataName]} /> @@ -704,10 +900,10 @@ class Table extends Component { } } - deepMap(columns, {depth: 0, children: []}) - let getNum = (obj) => { + deepMap(columns, { depth: 0, children: [] }) + let getNum = obj => { let num = 0 - let getn = (list) => { + let getn = list => { for (let i = 0; i < list.length; i++) { let item = list[i] if (item.isLast) { @@ -726,7 +922,7 @@ class Table extends Component { bodyColumns[key].headColSpan = getNum(bodyColumns[key]) } - let maxArray = [...bodyColumns].sort((pre, next) => (next.depth - pre.depth)) + let maxArray = [...bodyColumns].sort((pre, next) => next.depth - pre.depth) let max = maxArray.length > 0 ? maxArray[0].depth : 0 // 设置header-rowSpan let bd = bodyColumns.map(item => { @@ -737,21 +933,24 @@ class Table extends Component { }) for (let i = 1; i < max + 1; i++) { - let arr = bd.filter(({depth}) => depth === i) + let arr = bd.filter(({ depth }) => depth === i) headerColumns.push(arr) } - bodyColumns = bodyColumns.filter(({isLast}) => isLast) + bodyColumns = bodyColumns.filter(({ isLast }) => isLast) return [headerColumns, bodyColumns] } - setColumnsDetail (bool, prop, c) { + setColumnsDetail(bool, prop, c) { let props = prop || this.props let leftFiexColumns = [] let rightFixColumns = [] - let [headerColumns, columns] = this.getHeaderGroup(c || props.columns, props.rowSelection) + let [headerColumns, columns] = this.getHeaderGroup( + c || props.columns, + props.rowSelection + ) - let {scroll, scrollX} = props + let { scroll, scrollX } = props // TODO 这里的逻辑要优化 if (scroll.x || scrollX || bool) { @@ -769,24 +968,24 @@ class Table extends Component { } } - fetch = (extra) => { + fetch = extra => { extra = extra || {} - const {origin} = this.props + const { origin } = this.props const { data, url, headers, withCredentials = false, type = 'GET', - success = (res) => {}, + success = res => {}, error = () => {}, mode = 'json', currentPageName = Table.config.currentPageName } = origin - loading.open(this.dom.current, {key: 'loading'}) + loading.open(this.dom.current, { key: 'loading' }) const { - serverPagination: {current} + serverPagination: { current } } = this.state let requestParams = { [currentPageName]: current, @@ -811,23 +1010,27 @@ class Table extends Component { if (headers) { options.headers = headers } - request.create().request(options).then(res => { - let {data, columns, page} = success(res) - let columnsDetail = this.setColumnsDetail(null, null, columns) - this.setState({ - dataSource: data, - ...columnsDetail, - serverPagination: page + request + .create() + .request(options) + .then(res => { + let { data, columns, page } = success(res) + let columnsDetail = this.setColumnsDetail(null, null, columns) + this.setState({ + dataSource: data, + ...columnsDetail, + serverPagination: page + }) + this.runMemory() + loading.close('loading') + }) + .catch(e => { + loading.close('loading') + error(e) }) - this.runMemory() - loading.close('loading') - }).catch((e) => { - loading.close('loading') - error(e) - }) } - reset (props) { + reset(props) { // noinspection JSAnnotator const { origin: { @@ -837,7 +1040,7 @@ class Table extends Component { type = 'GET', mode = 'json', withCredentials = false, - success = (res) => {}, + success = res => {}, error = () => {}, // pageSize = Table.config.pageSize, // pageSizeName = Table.config.pageSizeName, @@ -845,7 +1048,7 @@ class Table extends Component { } } = props || this.props - loading.open(this.dom.current, {key: 'loading'}) + loading.open(this.dom.current, { key: 'loading' }) this.setState({ loading: true }) @@ -873,28 +1076,32 @@ class Table extends Component { options.headers = headers } - request.create().request(options).then(res => { - let {data, columns, page} = success(res) - this.setState({ - dataSource: data, - serverPagination: page - }) - setTimeout((e) => { - let columnsDetail = this.setColumnsDetail(null, null, columns) + request + .create() + .request(options) + .then(res => { + let { data, columns, page } = success(res) this.setState({ - ...columnsDetail + dataSource: data, + serverPagination: page }) - this.runMemory() + setTimeout(e => { + let columnsDetail = this.setColumnsDetail(null, null, columns) + this.setState({ + ...columnsDetail + }) + this.runMemory() + loading.close('loading') + }) + }) + .catch(e => { loading.close('loading') + error(e) }) - }).catch((e) => { - loading.close('loading') - error(e) - }) } - componentDidMount () { - let {fixTop, scroll, name, origin} = this.props + componentDidMount() { + let { fixTop, scroll, name, origin } = this.props let dom = this.dom.current if (fixTop) { @@ -930,21 +1137,24 @@ class Table extends Component { this.runMemory() if (origin) { - this.setState({ - serverPagination: { - current: 1, - total: 1 - } - }, this.fetch) + this.setState( + { + serverPagination: { + current: 1, + total: 1 + } + }, + this.fetch + ) } }, 0) } - shouldComponentUpdate (nextProps, nextState, nextContext) { + shouldComponentUpdate(nextProps, nextState, nextContext) { return true } - componentWillReceiveProps ({data, columns, width, scroll, ...props}) { + componentWillReceiveProps({ data, columns, width, scroll, ...props }) { // 服务端表格 if (props.origin) { let oldOrigin = this.props.origin @@ -967,7 +1177,10 @@ class Table extends Component { } let pageSizeName = oldOrigin.pageSizeName || Table.config.pageSizeName - if (this.state.serverPagination && this.state.serverPagination.current !== 1) { + if ( + this.state.serverPagination && + this.state.serverPagination.current !== 1 + ) { if (oldOrigin.data[pageSizeName] !== newOrigin.data[pageSizeName]) { bool = false } @@ -986,8 +1199,14 @@ class Table extends Component { } else { data = setKey(data, 'id') // 只有dataSource,columns重造 - let columnsDetail = this.setColumnsDetail(columns, {data, columns, width, scroll, ...props}) - this.setState({dataSource: data, scroll, ...columnsDetail, ...props}) + let columnsDetail = this.setColumnsDetail(columns, { + data, + columns, + width, + scroll, + ...props + }) + this.setState({ dataSource: data, scroll, ...columnsDetail, ...props }) setTimeout(() => { this.runMemory() }, 0) @@ -1006,4 +1225,4 @@ Table.config = { } export default Provider(Table) -export {Table} +export { Table } diff --git a/components/table/menu/index.js b/components/table/table-legacy/table-v2/menu/index.js similarity index 100% rename from components/table/menu/index.js rename to components/table/table-legacy/table-v2/menu/index.js diff --git a/components/table/prefix.js b/components/table/table-legacy/table-v2/prefix.js similarity index 60% rename from components/table/prefix.js rename to components/table/table-legacy/table-v2/prefix.js index 5978d60f2..c767d9634 100644 --- a/components/table/prefix.js +++ b/components/table/table-legacy/table-v2/prefix.js @@ -2,5 +2,5 @@ import classNames from 'classnames' let name = 'hi' export default function (...obj) { - return name + '-' + classNames(obj) + return 'hi-table--legacy ' + name + '-' + classNames(obj) } diff --git a/components/table/table-legacy/table-v2/style/Table.scss b/components/table/table-legacy/table-v2/style/Table.scss new file mode 100644 index 000000000..fadf50d64 --- /dev/null +++ b/components/table/table-legacy/table-v2/style/Table.scss @@ -0,0 +1,522 @@ +@import '@hi-ui/core-css/index.scss'; + +$table: 'hi-table' !default; +$bgColor: #f7fafe !default; + +$miniHeight: 32px !default; +$miniFontSize: 14px !default; + +$smallHeight: 44px !default; +$smallFontSize: 14px !default; + +$normalHeight: 52px !default; +$nornamFontSize: 14px !default; + +$largeHeight: 64px !default; +$largeFontSize: 14px !default; +$borderColor: #e6e7e8 !default; + +.hi-table-header-menu-small { + .hi-table-header-menu { + p { + height: $smallHeight; + } + } +} + +.hi-table-header-menu-mini { + .hi-table-header-menu { + p { + height: $miniHeight; + } + } +} + +.#{$table}--legacy.#{$table} { + td, + th { + box-sizing: border-box; + } + //width: 100%; + &-container { + position: relative; + } + + .hi-icon.icon-menu { + color: #4284f5; + } + + &-pre-header { + height: $normalHeight; + line-height: $normalHeight; + border-top: 1px solid $borderColor; + padding-left: 8px; + padding-right: 16px; + } + + &-pre-footer { + height: $normalHeight; + line-height: $normalHeight; + border-bottom: 1px solid $borderColor; + padding-left: 8px; + padding-right: 16px; + background: $bgColor; + } + + &.striped { + table { + tr:nth-child(2n) { + background: $bgColor; + } + } + } + + &.bordered { + .#{$table}-pre-header { + border-left: 1px solid $borderColor; + border-right: 1px solid $borderColor; + } + + .#{$table}-pre-footer { + border-left: 1px solid $borderColor; + border-right: 1px solid $borderColor; + } + + table { + border-top: 1px solid $borderColor; + + tr { + td, + th { + border-left: 1px solid $borderColor; + + &:last-child { + border-right: 1px solid $borderColor; + } + } + } + } + } + + &.large { + &-pre-header { + height: $largeHeight; + line-height: $largeHeight; + } + + &-pre-footer { + height: $largeHeight; + line-height: $largeHeight; + } + + table { + tr { + height: $largeHeight; + font-size: $largeFontSize; + } + } + + .hi-table-header-menu { + > p { + height: $smallHeight !important; + font-size: $smallFontSize; + } + } + + .hi-table-setting-menu { + > div { + height: $smallHeight; + } + } + } + + &.small { + &-pre-header { + height: $smallHeight; + line-height: $smallHeight; + } + + &-pre-footer { + height: $smallHeight; + line-height: $smallHeight; + } + + table { + tr { + height: $smallHeight; + font-size: $smallFontSize; + } + } + + .hi-table-header-menu { + > p { + height: $smallHeight !important; + font-size: $smallFontSize; + } + } + + .hi-table-setting-menu { + > div { + height: $smallHeight; + } + } + } + + &.mini { + &-pre-header { + height: $miniHeight; + line-height: $miniHeight; + } + + &-pre-footer { + height: $miniHeight; + line-height: $miniHeight; + } + + table { + tr { + height: $miniHeight; + font-size: $miniFontSize; + } + } + + .hi-table-header-menu { + > p { + height: $miniHeight !important; + font-size: $miniHeight; + } + } + + .hi-table-setting-menu { + > div { + height: $miniHeight; + } + } + } + + tbody .hi-checkbox { + //pointer-events:none; + } + + &-wrapper { + //width: 100%; + } + + &-header-menu { + z-index: 999999; + background: #fff; + border: 1px solid $borderColor; + box-shadow: 0 2px 8px 0 rgba(56, 62, 71, 0.1); + border-radius: 2px; + width: 140px; + + p { + color: #383e47; + text-align: left; + margin: 0; + height: $normalHeight; + text-indent: 16px; + display: flex; + align-items: center; + justify-content: space-between; + cursor: pointer; + + &:hover { + background: $bgColor; + color: #4284f5; + } + } + } + + &-setting-menu { + z-index: 999999; + background: #fff; + //border: 1px solid $borderColor; + //box-shadow: 0 2px 8px 0 rgba(56, 62, 71, 0.1); + border-radius: 2px; + width: 140px; + + > div { + color: #383e47; + text-align: left; + margin: 0; + padding-left: 16px; + padding-right: 16px; + display: flex; + align-items: center; + justify-content: space-between; + cursor: pointer; + height: $normalHeight; + + &:hover { + background: $bgColor; + color: #4284f5; + } + + > p:first-child { + width: 140px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + } + + .active { + background: rgba(66, 133, 244, 0.15); + } + + &.column-menu { + position: absolute; + right: 30px; + top: 40px; + width: 220px; + max-height: 240px; + overflow-y: auto; + } + } + + &-container table { + width: 100%; + border-collapse: separate; + background: #fff; + margin: 0; + box-sizing: border-box; + display: table; + border-spacing: 0; + + col { + display: table-column; + } + + td, + th { + white-space: nowrap; + padding-left: 8px; + padding-right: 16px; + border-bottom: 1px solid $borderColor; + text-align: left; + box-sizing: border-box; + } + + th { + background-color: $bgColor; + color: #83868c; + position: relative; + + i:hover { + color: #4284f5; + } + } + + td { + color: #3b4148; + word-break: break-word; + + &.picked { + background: $bgColor; + } + } + + tr { + transition: 0.2s; + //cursor: pointer; + height: $normalHeight; + font-size: $nornamFontSize; + padding: 0; + box-sizing: border-box; + cursor: pointer; + + &.picked td { + background: $bgColor; + } + + &.expanded { + background: $bgColor; + } + + &:hover { + background: $bgColor; + } + } + } + + &-body-inner { + height: 100%; + } + + &-fixed-header > &-content > &-scroll > &-body { + position: relative; + } + + &-fixed-header &-body-inner { + overflow: scroll; + } + + &-fixed-header &-scroll &-header { + overflow: scroll; + padding-bottom: 20px; + margin-bottom: -20px; + } + + &-fixed-left, + &-fixed-right { + position: absolute; + top: 0; + overflow: hidden; + transition: box-shadow 0.3s ease; + border-radius: 0; + + table { + width: auto; + } + } + + &-fixed-header &-fixed-left &-body-outer &-fixed, + &-fixed-header &-fixed-right &-body-outer &-fixed { + border-radius: 0; + } + + &-fixed-left { + left: 0; + box-shadow: 6px 0 6px -4px rgba(0, 0, 0, 0.15); + + .#{$table}-header { + overflow-y: hidden; + } + // hide scrollbar in left fixed columns + .#{$table}-body-inner { + margin-right: -20px; + padding-right: 20px; + } + + .#{$table}-fixed-header & .#{$table}-body-inner { + padding-right: 0; + } + + &, + table { + border-radius: 4px 0 0 0; + } + } + + &-fixed-right { + right: 0; + box-shadow: -6px 0 6px -4px rgba(0, 0, 0, 0.15); + + &, + table { + border-radius: 0 4px 0 0; + } + + .#{$table}-expanded-row { + color: transparent; + //pointer-events: none; + } + } + + &.#{$table}-scroll-position-left &-fixed-left { + box-shadow: none; + } + + &.#{$table}-scroll-position-right &-fixed-right { + box-shadow: none; + } + + &-thead > tr > th.#{$table}-selection-column-custom { + padding-left: 16px; + padding-right: 0; + } + + &-thead > tr > th.#{$table}-selection-column, + &-tbody > tr > td.#{$table}-selection-column { + text-align: center; + width: 62px; + min-width: 62px; + + .hi-radio-wrapper { + margin-right: 0; + } + } + + &-placeholder { + position: relative; + padding: 16px; + background: #fff; + border-bottom: 1px solid #e6e7e8; + text-align: center; + z-index: 1; + } + + &-setting { + position: absolute; + right: 10px; + top: 0; + cursor: pointer; + width: 50px; + text-align: center; + box-sizing: border-box; + } +} + +@each $key, $value in $theme-colors { + .theme__#{$key}.hi-table { + .hi-table-container table th { + background-color: rgba($value, 0.1); + color: #83868c; + } + + .hi-table-container table tr { + background-color: #fff; + color: #83868c; + } + + .hi-table-container table .hi-table-thead tr:hover { + background-color: #fff; + } + + .hi-table-container table th i:hover { + color: $value; + } + + .hi-icon.icon-menu { + color: $value; + } + + .hi-table-container table tr:hover { + background-color: rgba($value, 0.1); + } + + a { + color: $value; + } + + .hi-table-setting-menu > div:hover { + background-color: rgba($value, 0.15); + color: $value; + } + + &.striped { + table { + tr:nth-child(2n) { + background: rgba($value, 0.1); + } + } + } + + .hi-pagination { + .hi-icon { + color: #666; + } + + .hi-icon:hover { + color: $value; + } + } + + .hi-pagination:hover > span { + .hi-icon { + color: $value; + } + } + } +} diff --git a/components/table/table-legacy/table-v2/style/index.js b/components/table/table-legacy/table-v2/style/index.js new file mode 100644 index 000000000..63810a681 --- /dev/null +++ b/components/table/table-legacy/table-v2/style/index.js @@ -0,0 +1 @@ +import './index.scss' diff --git a/components/table/table-legacy/table-v2/style/index.scss b/components/table/table-legacy/table-v2/style/index.scss new file mode 100644 index 000000000..96565987e --- /dev/null +++ b/components/table/table-legacy/table-v2/style/index.scss @@ -0,0 +1 @@ +@import './Table.scss'; diff --git a/components/table/tool.js b/components/table/table-legacy/table-v2/tool.js similarity index 87% rename from components/table/tool.js rename to components/table/table-legacy/table-v2/tool.js index bbe4295fd..193496b9c 100644 --- a/components/table/tool.js +++ b/components/table/table-legacy/table-v2/tool.js @@ -23,7 +23,7 @@ export function getStyle (obj, attr) { } export function position (obj) { - let pos = {left: 0, top: 0} + let pos = { left: 0, top: 0 } while (obj.parentNode) { pos.left += obj.clientLeft @@ -57,7 +57,7 @@ export function offset (element) { _position = window.getComputedStyle(node)['position'] // position=static: 继续递归父节点 - if (typeof (init) === 'undefined' && _position === 'static') { + if (typeof init === 'undefined' && _position === 'static') { getOffset(node.parentNode) return } @@ -81,12 +81,12 @@ export function getPosition (el) { // deal with browser quirks with body/window/document and page scroll let xScroll = el.scrollLeft || document.documentElement.scrollLeft let yScroll = el.scrollTop || document.documentElement.scrollTop - xPos += (el.offsetLeft - xScroll + el.clientLeft) - yPos += (el.offsetTop - yScroll + el.clientTop) + xPos += el.offsetLeft - xScroll + el.clientLeft + yPos += el.offsetTop - yScroll + el.clientTop } else { // for all other non-BODY elements - xPos += (el.offsetLeft - el.scrollLeft + el.clientLeft) - yPos += (el.offsetTop - el.scrollTop + el.clientTop) + xPos += el.offsetLeft - el.scrollLeft + el.clientLeft + yPos += el.offsetTop - el.scrollTop + el.clientTop } el = el.offsetParent } diff --git a/components/table/util.js b/components/table/util.js new file mode 100644 index 000000000..0ed846940 --- /dev/null +++ b/components/table/util.js @@ -0,0 +1,118 @@ +// 将树状数据拍平 +export const flatTreeData = (data, flattedData = []) => { + data.forEach(d => { + flattedData.push(d) + if (d.children) { + flatTreeData(d.children, flattedData) + } + }) + return flattedData +} + +// 给树状数据设置层级 +export const setDepth = (data, parentDepth = 0, depthArray = []) => { + data.forEach(d => { + d.depth = parentDepth + 1 + let children = d.children + if (children && children.length > 0) { + setDepth(children, d.depth, depthArray) + } else { + d.isLast = true + depthArray.push(d.depth) + } + }) +} + +// 获取叶子节点后代 +export const getLeafChildren = (item, children = []) => { + if (item.children && item.children.length > 0) { + item.children.forEach(child => { + if (child.isLast) { + children.push(child) + } else { + getLeafChildren(child, children) + } + }) + } +} +// 将树形数据按照层级分组 +export const groupDataByDepth = (data, depth = 1) => { + const flattedData = flatTreeData(data) + let result = Array(depth) + .fill(undefined) + .map(item => { + return [] + }) + + result.forEach((group, index) => { + flattedData.forEach(d => { + if (d.depth === index + 1) { + group.push(d) + } + }) + }) + return result +} + +// 根据固定列获取固定数据 +export const getFixedDataByFixedColumn = (fixedColumns, data) => { + const dataKeys = fixedColumns.map(item => item.dataKey).concat('key') + const result = data.map(d => { + let obj = {} + dataKeys.forEach(dataKey => { + obj[dataKey] = d[dataKey] + }) + return obj + }) + return result +} + +export const getStyle = (obj, attr) => { + if (obj.currentStyle) { + return obj.currentStyle[attr] + } else { + return window.getComputedStyle(obj, null)[attr] + } +} + +let cached +export function getScrollBarSize (fresh) { + if (typeof document === 'undefined') { + return 0 + } + + if (fresh || cached === undefined) { + const inner = document.createElement('div') + inner.style.width = '100%' + inner.style.height = '200px' + + const outer = document.createElement('div') + const outerStyle = outer.style + + outerStyle.position = 'absolute' + outerStyle.top = 0 + outerStyle.left = 0 + outerStyle.pointerEvents = 'none' + outerStyle.visibility = 'hidden' + outerStyle.width = '200px' + outerStyle.height = '150px' + outerStyle.overflow = 'hidden' + + outer.appendChild(inner) + + document.body.appendChild(outer) + + const widthContained = inner.offsetWidth + outer.style.overflow = 'scroll' + let widthScroll = inner.offsetWidth + + if (widthContained === widthScroll) { + widthScroll = outer.clientWidth + } + + document.body.removeChild(outer) + + cached = widthContained - widthScroll + } + return cached +} diff --git a/components/tabs/TabItem.js b/components/tabs/TabItem.js new file mode 100644 index 000000000..a06c9ab73 --- /dev/null +++ b/components/tabs/TabItem.js @@ -0,0 +1,75 @@ +import React from 'react' +import classNames from 'classnames' +import Icon from '../icon' +import Tooltip from '../tooltip' +const TabItem = ({ + index, + prefixCls, + item, + draggable, + activeId, + type, + editable, + handleClick, + deleteTab, + dragStart, + dragEnd, + canScroll +}) => { + const { tabTitle, tabId, tabDesc, disabled, closeable } = item + const itemClasses = classNames(`${prefixCls}__item`, { + [`${prefixCls}__item--active`]: tabId === activeId, + [`${prefixCls}__item--disabled`]: disabled + }) + + const toggleTooltip = (e, item) => { + e.target = e.target.closest('.hi-tabs__item') + if (canScroll) { + return + } + if (type === 'editable') { + if (e.type === 'mouseenter') { + item.tabId !== activeId && + Tooltip.open(e.target, { + title: item.tabTitle, + placement: 'top', + key: `tab-${item.tabId}` + }) + } else { + Tooltip.close(`tab-${item.tabId}`) + } + } + } + + return ( + <div + data-id={index} + onClick={(e) => handleClick(item, e)} + className={itemClasses} + draggable={draggable} + data-item={JSON.stringify({ ...item, newIndex: index })} + onDragEnd={(e) => dragEnd(e, item)} + onDragStart={(e) => dragStart(e, item)} + onMouseEnter={(e) => toggleTooltip(e, item)} + onMouseLeave={(e) => toggleTooltip(e, item)} + > + <span className={`${prefixCls}__item-name`}>{tabTitle}</span> + {type === 'desc' && ( + <span className={`${prefixCls}__item-desc`}>{tabDesc}</span> + )} + {editable && closeable && ( + <span className={`${prefixCls}__item-close`}> + <Icon + onClick={(e) => { + if (!item.disabled) { + deleteTab(e, tabId, index, item) + } + }} + name='close' + /> + </span> + )} + </div> + ) +} +export default TabItem diff --git a/components/tabs/TabPane.js b/components/tabs/TabPane.js index 71e761352..e26f122ee 100644 --- a/components/tabs/TabPane.js +++ b/components/tabs/TabPane.js @@ -1,31 +1,62 @@ -import React, { Component } from 'react' -import PropTypes from 'prop-types' +import React from 'react' -class TabPane extends Component { - static defaultProps = { - prefixCls: 'hi-tabs-pane', - disabled: false, - closeable: true +const TabPane = ({ + latestActiveIdIndex, + activeIdIndex, + index, + prefixCls = 'hi-tabs-pane', + children, + show, + animation, + placement +}) => { + const defineAnimation = () => { + if (latestActiveIdIndex === activeIdIndex) { + return + } + if (activeIdIndex === index) { + if (placement === 'horizontal') { + animateClass = + `${prefixCls}__` + + (Number(latestActiveIdIndex) > Number(activeIdIndex) + ? 'slide-right' + : 'slide-left') + } else { + animateClass = + `${prefixCls}__` + + (Number(latestActiveIdIndex) > Number(activeIdIndex) + ? 'slide-bottom' + : 'slide-top') + } + } + if (latestActiveIdIndex === index) { + if (placement === 'horizontal') { + animateClass = + `${prefixCls}__` + + (Number(latestActiveIdIndex) > Number(activeIdIndex) + ? 'slide-right-leave' + : 'slide-left-leave') + } else { + animateClass = + `${prefixCls}__` + + (Number(latestActiveIdIndex) > Number(activeIdIndex) + ? 'slide-bottom-leave' + : 'slide-top-leave') + } + } + return animateClass } - static propTypes = { - tabTitle: PropTypes.oneOfType([PropTypes.string, PropTypes.node]), - tabDesc: PropTypes.oneOfType([PropTypes.string, PropTypes.node]), - tabId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), - closeable: PropTypes.bool, - disabled: PropTypes.bool - } - - render () { - const { prefixCls, children, show } = this.props - const style = show ? {} : { display: 'none' } + const style = show + ? { position: 'relative', zIndex: 1, visibility: 'visible' } + : { position: 'absolute', zIndex: -1, visibility: 'hidden' } - return ( - <div className={`${prefixCls}`} style={style}> - {children} - </div> - ) - } + let animateClass = animation ? defineAnimation() : '' + return ( + <div className={`${prefixCls} ${animateClass}`} style={style}> + {children} + </div> + ) } export default TabPane diff --git a/components/tabs/Tabs.js b/components/tabs/Tabs.js index a98e4f395..03ba71fe2 100644 --- a/components/tabs/Tabs.js +++ b/components/tabs/Tabs.js @@ -1,100 +1,58 @@ -import React, { Component, cloneElement } from 'react' +import React, { useCallback, cloneElement, useState, useEffect, useRef } from 'react' +import _ from 'lodash' import PropTypes from 'prop-types' import classNames from 'classnames' import Icon from '../icon' import Tooltip from '../tooltip' import ItemDropdown from './ItemDropdown' +import TabItem from './TabItem' +import { CSSTransition, TransitionGroup } from 'react-transition-group' import Provider from '../context' const noop = () => {} -class Tabs extends Component { - static propTypes = { - type: PropTypes.oneOf(['desc', 'card', 'button', 'editable', 'line']), - placement: PropTypes.oneOf(['horizontal', 'vertical']), - activeId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), - defaultActiveId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), - max: PropTypes.number, - editable: PropTypes.bool, - className: PropTypes.string, - renderTabBar: PropTypes.func, - onTabClick: PropTypes.func, - onEdit: PropTypes.func - } - - static defaultProps = { - prefixCls: 'hi-tabs', - type: 'card', - placement: 'horizontal', - className: '', - max: 6, - editable: true, - onTabClick: noop, - onEdit: noop - } - - deletetabId = null - - constructor (props) { - super(props) - - const { defaultActiveId, activeId } = props - const { showTabItems, hiddenTabItems } = this.getTabItems(this.props) - - this.state = { - activeId: - activeId !== undefined - ? activeId - : defaultActiveId || (showTabItems && showTabItems[0] && showTabItems[0].tabId), - showTabItems, - hiddenTabItems, - defaultActiveId - } - } - - componentWillReceiveProps (nextProps) { - const { showTabItems, hiddenTabItems } = this.getTabItems(nextProps) - this.setState({ - showTabItems, - hiddenTabItems - }) - if (this.props.activeId !== nextProps.activeId) { - this.setState({ - activeId: nextProps.activeId - }) - } - // 考虑 tab 删完又新增一个的情况 - if (this.props.children.length === 0 && nextProps.children.length > 0) { - this.setState({ activeId: nextProps.children[0] && nextProps.children[0].props.tabId }) - } - - if ( - this.props.children.length > nextProps.children.length && - this.deletetabId && - this.deletetabId === this.state.activeId - ) { - // 删除的是当前激活的tab,需重置激活tab - this.setState( - { - activeId: (nextProps.children[0] && nextProps.children[0].props.tabId) || undefined - }, - () => { - this.deletetabId = null - } - ) - } - } - - getTabItems (props) { - const { children, type, placement, max } = props +const Tabs = ({ + onDrop, + onAdd, + onDropEnd, + onDragStart, + defaultActiveId, + activeId: activeIdProps, + children, + type, + placement, + max, + canScroll, + onDelete, + editable, + className, + theme, + prefixCls, + draggable, + onTabClick, + onBeforeDelete +}) => { + const getTabItems = () => { const showTabItems = [] const hiddenTabItems = [] - React.Children.map(children, (child, index) => { + React.Children.map(children, (child) => { if (child) { - const { tabTitle, tabId, tabDesc, disabled, closeable } = child.props - const item = { tabTitle, tabId, tabDesc, disabled, closeable } + const { tabTitle, tabId, tabDesc, disabled, closeable = true, animation } = child.props + const item = { + tabTitle, + tabId, + tabDesc, + disabled, + closeable, + animation + } - if (type === 'card' && placement === 'horizontal' && showTabItems.length >= max) { + if ( + (type === 'card' || type === 'line') && + placement === 'horizontal' && + showTabItems.length >= max && + !canScroll + ) { // 卡片式标签超过max时,其余标签的隐藏 hiddenTabItems.push(item) } else { @@ -104,127 +62,404 @@ class Tabs extends Component { }) return { showTabItems, hiddenTabItems } } + const tabItems = getTabItems() + const [showTabItems, setShowTabItems] = useState(tabItems.showTabItems) + const [hiddenTabItems, setHiddentab] = useState(tabItems.hiddenTabItems) - handleClick (tab, e) { - if (tab.disabled) { - return false + const [activeId, setActiveId] = useState( + activeIdProps !== undefined + ? activeIdProps + : defaultActiveId || (showTabItems && showTabItems[0] && showTabItems[0].tabId) + ) + const [dragged, setDragged] = useState() + const [over, setOver] = useState() + const [deletetabId, setDeletetabId] = useState() + const latestActiveId = useRef(activeId) + const containRef = useRef() + const inkRef = useRef() + const childRef = useRef() + + useEffect(() => { + if (deletetabId && latestActiveId.current === activeId) { + setActiveId(children[0] && children[0].props.tabId) } + }, [deletetabId]) - const { onTabClick } = this.props + useEffect(() => { + if (activeIdProps !== undefined) { + setActiveId(activeIdProps) + } + }, [activeIdProps]) - onTabClick(tab.tabId, e) - const activeId = this.props.activeId - activeId !== undefined || - this.setState({ - activeId: tab.tabId - }) - } + useEffect(() => { + const index = showTabItems.findIndex((item) => item.tabId === activeId) + const hideIndex = hiddenTabItems.findIndex((item) => item.tabId === activeId) + latestActiveId.current = index - addTab () { - const { onEdit, editable, children } = this.props + if (index === -1 && type === 'editable') { + setActiveId(showTabItems[0].tabId) + } - if (editable) { - onEdit('add', children.length + 1) + if (type === 'line') { + if (index !== -1) { + pseudoPosition(index) + } else { + if (hideIndex !== -1) { + pseudoPosition(max) + } + } } - } + }, [activeId, showTabItems, type]) + + // 过滤自定义属性 + const omitItem = useCallback((data) => { + return _.omit(data, ['animation', 'disabled', 'tabDesc']) + }, []) - deleteTab (e, tabId, index) { - e.stopPropagation() - this.deletetabId = tabId + useEffect(() => { + const tabItems = getTabItems() - const { onEdit, editable } = this.props + setShowTabItems(tabItems.showTabItems) + setHiddentab(tabItems.hiddenTabItems) + if (canScroll && children.length > childRef.current) { + const contain = containRef.current + setTimeout(() => { + contain.scrollLeft = contain.scrollWidth - contain.clientWidth + }, 0) + } + }, [children]) + // 计算激活状态下选中横线 + const pseudoPosition = useCallback((index) => { + const parentNode = containRef.current + if (!parentNode.childNodes.length) { + return + } + const child = parentNode.childNodes[index] + const { width } = child.getBoundingClientRect() + const ink = inkRef.current + if (placement === 'horizontal') { + const offsetLeft = child.offsetLeft + ink.style.width = `${width - 34}px` + ink.style.transform = `translateX(${offsetLeft + 17}px)` + } else { + const offsetTop = child.offsetTop + ink.style.transform = `translateY(${offsetTop}px)` + } + setTimeout(() => { + const { width } = child.getBoundingClientRect() + const ink = inkRef.current + if (placement === 'horizontal') { + const offsetLeft = child.offsetLeft + if (ink) { + ink.style.width = `${width - 34}px` + ink.style.transform = `translateX(${offsetLeft + 17}px)` + } + } + }, 300) + }, []) + + const addTab = useCallback(() => { if (editable) { - onEdit('delete', index, tabId) + onAdd(children.length + 1) + childRef.current = children.length } - } + }, [children, editable]) - checkEditable () { - const { editable, type } = this.props + const deleteTab = useCallback( + (e, tabId, index, item) => { + e.stopPropagation() + setDeletetabId(tabId) + if (editable) { + if (onBeforeDelete) { + const result = onBeforeDelete(item) + if (result === true) { + onDelete(item, index) + Tooltip.close(`tab-${tabId}`) + } + } else { + onDelete(item, index) + Tooltip.close(`tab-${tabId}`) + } + } + }, + [editable, activeId] + ) - return editable && type === 'editable' - } + const checkEditable = useCallback(() => editable && type === 'editable', [editable]) - renderTabContent (child) { - const { tabId } = child.props - const { activeId } = this.state + const renderTabContent = useCallback( + (child, index) => { + const { tabId, animation } = child.props + const activeIndex = showTabItems.findIndex((item) => item.tabId === activeId) - return cloneElement(child, { - show: tabId === activeId - }) - } - render () { - const { activeId, showTabItems, hiddenTabItems, defaultActiveId } = this.state - const { prefixCls, type, placement, children, className, theme } = this.props - const editable = this.checkEditable() - const tabsClasses = classNames(prefixCls, className, `${prefixCls}--${type}`, `theme__${theme}`, { - [`${prefixCls}--${placement}`]: type === 'card' - }) - let activeTabInHiddenItems = true + return cloneElement(child, { + show: tabId === activeId, + latestActiveIdIndex: latestActiveId.current ? latestActiveId.current : -1, + activeIdIndex: activeId ? activeIndex : -1, + index, + animation, + placement + }) + }, + [activeId, showTabItems] + ) + + const dragStart = useCallback((e, item) => { + if (type === 'card' || type === 'line' || type === 'editable') { + setDragged(e.currentTarget) + e.currentTarget.classList.add('hi-tabs__item--disabled') + onDragStart(omitItem(item)) + } + }, []) + + const dragEnd = useCallback( + (e, item) => { + const items = containRef.current.getElementsByClassName('hi-tabs__item') + const clientX = e.clientX + const clientY = e.clientY + const { left, right, top, bottom } = containRef.current.getBoundingClientRect() + + if (!(clientX >= left && clientX <= right && clientY <= bottom && clientY >= top)) { + for (let i = 0; i < items.length; i++) { + items[i].classList.remove('hi-tabs__item--disabled') + } + setOver(null) + return + } + if (type === 'card' || type === 'line' || type === 'editable') { + if (!over || !dragged) { + return + } + var data = [...showTabItems] + var from = Number(dragged.dataset.id) + var to = Number(over.dataset.id) + onDropEnd(omitItem(item), omitItem(showTabItems[to])) + data.splice(to, 0, data.splice(from, 1)[0]) + data = data.map((doc, index) => { + doc.newIndex = index + 1 + return doc + }) + e.currentTarget.classList.remove('hi-tabs__item--disabled') + + setShowTabItems(data) + } + }, + [over, showTabItems, dragged] + ) + + const handleClick = useCallback( + (tab, e) => { + if (tab.disabled) { + return false + } + if (activeIdProps === undefined) { + setActiveId(tab.tabId) + } + onTabClick(tab.tabId, e) + }, + [showTabItems] + ) + + const dragOver = useCallback( + (e) => { + if (type === 'card' || type === 'line' || type === 'editable') { + e.preventDefault() + + e.target = e.target.closest('.hi-tabs__item') + + if (!e.target || !dragged) { + return + } + + const taIndex = JSON.parse(e.target.dataset.item).newIndex + const dgIndex = JSON.parse(dragged.dataset.item).newIndex + onDrop(omitItem(showTabItems[taIndex]), omitItem(showTabItems[dgIndex])) + + if (taIndex === dgIndex) { + if (!over) return + setOver(e.target) + return + } + setOver(e.target) + } + }, + [over, dragged] + ) + const translateLeft = useCallback(() => { + const container = containRef.current + const width = container.scrollWidth + const clientWidth = container.clientWidth + let transX = Number(document.defaultView.getComputedStyle(container, null).transform.split(',')[4]) + + let srcollWidth + if (width / 3 > width - clientWidth) { + srcollWidth = width - clientWidth + } else { + srcollWidth = width / 3 + } + if (Math.abs(transX) + clientWidth + srcollWidth > width) { + transX = width - clientWidth - Math.abs(transX) + Math.abs(transX) + } else { + transX = Math.abs(transX - srcollWidth) + } + + container.style.transform = 'translateX(-' + transX + 'px)' + }, []) + const translateRight = useCallback(() => { + const container = containRef.current + const width = container.scrollWidth + let transX = Number(document.defaultView.getComputedStyle(container, null).transform.split(',')[4]) + if (Math.abs(transX) > width / 3) { + transX += width / 3 + } else { + transX += Math.abs(transX) + } + container.style.transform = 'translateX(' + transX + 'px)' + }, []) + const getHeader = useCallback(() => { return ( - <div className={tabsClasses}> + <> + {canScroll && <Icon name="left" className={`${prefixCls}__scroll__icon`} onClick={() => translateLeft()} />} <div className={`${prefixCls}__header`}> - <div className={`${prefixCls}__nav`}> - {showTabItems.map((item, index) => { - const { tabTitle, tabId, tabDesc, disabled, closeable } = item - const itemClasses = classNames(`${prefixCls}__item`, { - [`${prefixCls}__item--active`]: tabId === activeId, - [`${prefixCls}__item--disabled`]: disabled - }) - - activeTabInHiddenItems = activeTabInHiddenItems && tabId !== activeId - let ToolNav = type === 'editable' && tabId !== activeId ? Tooltip : 'div' - return ( - <ToolNav - className={itemClasses} - key={`${prefixCls}__item-${index}`} - onClick={(e) => this.handleClick(item, e)} - title={type === 'editable' && tabId !== activeId ? tabTitle : null} - > - <span className={`${prefixCls}__item-name`}>{tabTitle}</span> - {type === 'desc' && <span className={`${prefixCls}__item-desc`}>{tabDesc}</span>} - {editable && closeable && ( - <span className={`${prefixCls}__item-close`}> - <Icon onClick={(e) => this.deleteTab(e, tabId, index)} name='close' /> - </span> - )} - </ToolNav> - ) - })} + <div className={`${prefixCls}__nav contain`} onDragOver={dragOver} ref={containRef}> + <TransitionGroup component={null}> + {showTabItems.map((item, index) => { + const { tabId } = item + return ( + <CSSTransition + key={tabId} + timeout={200} + unmountOnExit + onExit={() => animateDone(tabId)} + classNames={`${prefixCls}__tab-items`} + > + <TabItem + key={`${prefixCls}__item-${index}`} + index={index} + prefixCls={prefixCls} + item={item} + draggable={draggable} + activeId={activeId} + type={type} + showTabItems={showTabItems} + editable={editableFlag} + handleClick={handleClick} + deleteTab={deleteTab} + dragStart={dragStart} + dragEnd={dragEnd} + canScroll={canScroll} + /> + </CSSTransition> + ) + })} + </TransitionGroup> {hiddenTabItems.length > 0 && ( <div className={classNames(`${prefixCls}__item`, { - [`${prefixCls}__item--active`]: activeTabInHiddenItems + [`${prefixCls}__item--active`]: hiddenTabItems.map((item) => item.tabId).includes(activeId) })} > <ItemDropdown - active={activeTabInHiddenItems} + active={hiddenTabItems.map((item) => item.tabId).includes(activeId)} activeId={activeId} theme={theme} defaultActiveId={defaultActiveId} items={hiddenTabItems} onChoose={(item, e) => { - this.handleClick(item, e) + handleClick(item, e) }} /> </div> )} + {type === 'line' && ( + <div + className={classNames(`${prefixCls}--line__ink`, { + [`${prefixCls}--line__ink-disabled`]: isActiveEffective + })} + ref={inkRef} + /> + )} </div> - {editable && ( + {editableFlag && !canScroll && ( <div className={`${prefixCls}__add`}> - <Icon onClick={this.addTab.bind(this)} name='plus' /> + <Icon onClick={addTab} name="plus" /> </div> )} </div> - <div className={`${prefixCls}__content`}> - {React.Children.map(children, (item) => { - return item && this.renderTabContent(item) - })} - </div> - </div> + {canScroll && <Icon name="right" className={`${prefixCls}__scroll__icon`} onClick={() => translateRight()} />} + </> ) + }) + + const tabsClasses = classNames( + prefixCls, + className, + `${prefixCls}--${type}`, + `theme__${theme}`, + { + [`${prefixCls}--${placement}`]: type === 'card' || type === 'line' + }, + { + [`${prefixCls}--scroll`]: canScroll + } + ) + + const editableFlag = checkEditable() + + const animateDone = (tabId) => { + Tooltip.close(`tab-${tabId}`) + } + // 判断选中的元素是否为disabled 状态 + let isActiveEffective = false + const arr = showTabItems.filter((item) => item.tabId === activeId) + if (arr.length) { + isActiveEffective = arr[0].disabled } + + return ( + <div className={tabsClasses}> + {canScroll ? <div className={`${prefixCls}__scroll--outter`}>{getHeader()}</div> : getHeader()} + <div className={`${prefixCls}__content`}> + {React.Children.map(children, (item, index) => item && renderTabContent(item, index))} + </div> + </div> + ) } +Tabs.propTypes = { + type: PropTypes.oneOf(['desc', 'card', 'button', 'editable', 'line']), + placement: PropTypes.oneOf(['horizontal', 'vertical']), + activeId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), + defaultActiveId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), + max: PropTypes.number, + editable: PropTypes.bool, + className: PropTypes.string, + renderTabBar: PropTypes.func, + onTabClick: PropTypes.func, + onAdd: PropTypes.func, + onDelete: PropTypes.func, + onDrop: PropTypes.func, + onDropEnd: PropTypes.func, + onDragStart: PropTypes.func, + draggable: PropTypes.bool +} + +Tabs.defaultProps = { + prefixCls: 'hi-tabs', + type: 'card', + placement: 'horizontal', + className: '', + max: 6, + editable: true, + onTabClick: noop, + onBeforeDelete: noop, + onDrop: noop, + onDropEnd: noop, + onDragStart: noop, + onAdd: noop, + onDelete: noop, + draggable: false +} export default Provider(Tabs) diff --git a/components/tabs/index.d.ts b/components/tabs/index.d.ts new file mode 100644 index 000000000..cb9a0412c --- /dev/null +++ b/components/tabs/index.d.ts @@ -0,0 +1,48 @@ +import { CSSProperties } from "react" + +type DataItem = { + content: string + id: string | number + disabled?: boolean +} +type NodeData = { + tabTitle: string | JSX.Element + tabDesc: string | JSX.Element + tabId: string | number + closeable: boolean + disabled: boolean + animation: boolean + newIndex?: number +} +interface Props { + type?: 'desc' | 'card' | 'button' | 'editable' | 'line' + placement?: 'vertical' | 'horizontal' + defaultActiveId?: string | number + activeId?: string | number + max?: number + canScroll?: boolean + draggable?: boolean + onTabClick?: (tabKey: string | number, event: MouseEvent) => void + onEdit?: (action: 'add' | 'delete', index: number, tabKey: string | number) => void + onDragStart?: (dragNode: NodeData) => void + onDropEnd?: (dragNode: NodeData, dropNode: NodeData) => void + onDrop?: (dragNode: NodeData, dropNode: NodeData) => void + onAdd?: () => void + onDelete?: (deleteNode: NodeData, index: number) => void + onBeforeDelete?: (deleteNode: NodeData) => void +} +interface PaneProps { + tabTitle: string | JSX.Element + tabDesc?: string | JSX.Element + tabId: string | number + closeable?: boolean + disabled?: boolean + animation?: boolean +} +declare class Pane extends React.Component<PaneProps, any> { +} +declare class Tabs extends React.Component<Props, any> { + static Pane = Pane +} +export default Tabs + diff --git a/components/tabs/index.js b/components/tabs/index.js index cbf03c2d7..ddc86b6d7 100755 --- a/components/tabs/index.js +++ b/components/tabs/index.js @@ -1,12 +1,18 @@ +import React from 'react' import Tabs from './Tabs' import TabPane from './TabPane' import './style/index' -import SwitchVersion from '../_util/SwitchVersion' import TabsLegacy from './tabs-legacy/index' -const VTabs = SwitchVersion(Tabs, TabsLegacy) -const VTabPane = SwitchVersion(TabPane, TabsLegacy.Pane) +const VTabs = ({ legacy, ...props }) => { + const WrapperComponent = legacy ? TabsLegacy : Tabs + return <WrapperComponent {...props} /> +} +const VTabPane = ({ legacy, ...props }) => { + const WrapperComponent = legacy ? TabsLegacy.Pane : TabPane + return <WrapperComponent {...props} /> +} VTabs.Pane = VTabPane diff --git a/components/tabs/style/animate.scss b/components/tabs/style/animate.scss new file mode 100644 index 000000000..8633bc5f0 --- /dev/null +++ b/components/tabs/style/animate.scss @@ -0,0 +1,215 @@ +$prefix: 'hi-tabs' !default; +$prefixPane: 'hi-tabs-pane' !default; + +.#{$prefix} { + .#{$prefix}__drag-up { + animation: dragup ease 0.2s 1; + animation-fill-mode: forwards; + } + + .#{$prefix}__drag-down { + animation: dragdown ease 0.2s 1; + animation-fill-mode: forwards; + } + + .#{$prefix}__drag-left { + animation: dragleft ease 0.2s 1; + animation-fill-mode: forwards; + } + + .#{$prefix}__drag-right { + animation: dragright ease 0.2s 1; + animation-fill-mode: forwards; + } + + .#{$prefix}__tab-items-enter { + box-sizing: border-box; + opacity: 0; + transition: all 300ms linear; + } + + .#{$prefix}__tab-items-enter-active { + opacity: 1; + transition: all 300ms linear; + } + + .#{$prefix}__tab-items-exit { + opacity: 1; + transition: all 300ms linear; + } + + .#{$prefix}__tab-items-exit-active { + opacity: 0; + transition: all 300ms linear; + } +} + +.#{$prefixPane}__slide-right { + animation: slideRight linear 300ms 1; + animation-fill-mode: forwards; +} + +.#{$prefixPane}__slide-left { + animation: slideLeft linear 300ms 1; + animation-fill-mode: forwards; +} + +.#{$prefixPane}__slide-right-leave { + animation: slideRightLeave linear 300ms 1; + animation-fill-mode: forwards; +} + +.#{$prefixPane}__slide-left-leave { + animation: slideLeftLeave linear 300ms 1; + animation-fill-mode: forwards; +} + +.#{$prefixPane}__slide-top { + animation: slideTop linear 300ms 1; + animation-fill-mode: forwards; +} + +.#{$prefixPane}__slide-bottom { + animation: slideBottom linear 300ms 1; + animation-fill-mode: forwards; +} + +.#{$prefixPane}__slide-top-leave { + animation: slideTopLeave linear 300ms 1; + animation-fill-mode: forwards; +} + +.#{$prefixPane}__slide-bottom-leave { + animation: slideBottomLeave linear 300ms 1; + animation-fill-mode: forwards; +} + +@keyframes slideRight { + from { + right: -100%; + } + + to { + right: 0; + } +} + +@keyframes slideLeft { + from { + left: -100%; + } + + to { + left: 0; + } +} + +@keyframes slideRightLeave { + from { + left: 0%; + opacity: 1; + } + + to { + left: -100%; + opacity: 0; + } +} + +@keyframes slideLeftLeave { + from { + right: 0; + opacity: 1; + } + + to { + right: -100%; + opacity: 0; + } +} + +@keyframes slideTop { + from { + top: -100%; + } + + to { + top: 0; + } +} + +@keyframes slideBottom { + from { + bottom: -100%; + } + + to { + bottom: 0; + } +} + +@keyframes slideTopLeave { + from { + bottom: 0%; + opacity: 1; + } + + to { + bottom: -100%; + opacity: 0; + } +} + +@keyframes slideBottomLeave { + from { + top: 0; + opacity: 1; + } + + to { + top: -100%; + opacity: 0; + } +} + +@keyframes dragup { + from { + margin-top: 0; + } + + to { + margin-top: 48px; + } +} + +@keyframes dragdown { + from { + margin-bottom: 0; + margin-top: 48px; + } + + to { + margin-bottom: 48px; + margin-top: 0; + } +} + +@keyframes dragleft { + from { + margin-left: 0; + } + + to { + margin-left: 90px; + } +} + +@keyframes dragright { + from { + margin-right: 0; + } + + to { + margin-right: 90px; + } +} diff --git a/components/tabs/style/index.scss b/components/tabs/style/index.scss index 78cd6c8ad..0da385423 100644 --- a/components/tabs/style/index.scss +++ b/components/tabs/style/index.scss @@ -1,17 +1,25 @@ -@import '@hi-ui/core-css/index.scss'; +@import '../../core-css/index.scss'; +@import './animate.scss'; + $prefix: 'hi-tabs' !default; .#{$prefix} { .#{$prefix}__header { position: relative; - font-size: 14px; - color: #333; + font-size: $font-size-normal; + color: use-color('black'); } .#{$prefix}__item { flex: 0 1 auto; cursor: pointer; border: 1px solid transparent; + transition: all 300ms; + + &--disabled { + color: use-color('gray-50') !important; + cursor: not-allowed; + } &:not(&--active) { overflow: hidden; @@ -23,6 +31,10 @@ $prefix: 'hi-tabs' !default; flex: none; } + &--flex1 { + flex: 1; + } + .hi-icon:not(.icon-close) { margin-right: 4px; } @@ -35,65 +47,27 @@ $prefix: 'hi-tabs' !default; justify-content: center; width: 24px; height: 24px; - color: #979797; + color: use-color('gray-70'); border-radius: 2px; cursor: pointer; box-sizing: border-box; - font-size: 16px; + font-size: $font-size-large; } .#{$prefix}__item-close { margin-left: 8px; - font-size: 16px; + font-size: $font-size-large; } - &--line { - & > .#{$prefix}__header { - .#{$prefix}__nav { - display: flex; - flex-wrap: nowrap; - border-bottom: 1px solid #e6e7e8; - } - - .#{$prefix}__item { - position: relative; - height: 40px; - line-height: 40px; - margin-right: 32px; - box-sizing: border-box; - border: none; - transition: color 0.5s linear; - - &::after { - display: inline-block; - position: absolute; - content: ''; - height: 2px; - width: 100%; - background: #4284f5; - bottom: 0; - left: 0; - opacity: 0; - transition: opacity 0.5s linear; - } - - &:hover { - color: #4284f5; - } - - &--active { - &::after { - opacity: 1; - } - - color: #4284f5; - } - } - } + &__content { + overflow: hidden; + display: flex; + position: relative; + flex: 1; } &--card { - & > .#{$prefix}__header { + .#{$prefix}__header { .#{$prefix}__nav { display: flex; flex-wrap: nowrap; @@ -106,13 +80,13 @@ $prefix: 'hi-tabs' !default; box-sizing: border-box; &:hover { - color: #4284f5; + color: use-color('primary'); } &--active { - border: 1px solid #e6e7e8; + border: 1px solid use-color('gray-20'); border-radius: 2px; - color: #4284f5; + color: use-color('primary'); } } } @@ -124,12 +98,12 @@ $prefix: 'hi-tabs' !default; } .#{$prefix}__header { - border-bottom: 1px solid #e6e7e8; + border-bottom: 1px solid use-color('gray-20'); } .#{$prefix}__item { &--active { - border-bottom-color: #fff; + border-bottom-color: use-color('white'); } } } @@ -141,7 +115,7 @@ $prefix: 'hi-tabs' !default; .#{$prefix}__header { flex: none; display: inline-block; - border-right: 1px solid #e6e7e8; + border-right: 1px solid use-color('gray-20'); } .#{$prefix}__nav { @@ -154,14 +128,14 @@ $prefix: 'hi-tabs' !default; border-bottom-left-radius: 4px; &--active { - border-right-color: #fff; + border-right-color: use-color('white'); } } } &--editable { - & > .#{$prefix}__header { - border-bottom: 1px solid #e6e7e8; + .#{$prefix}__header { + border-bottom: 1px solid use-color('gray-20'); .#{$prefix}__nav { display: flex; @@ -174,28 +148,37 @@ $prefix: 'hi-tabs' !default; .#{$prefix}__item { height: 40px; - min-width: 48px; line-height: 40px; margin-right: 4px; padding: 0 8px; - background: #fafafa; + background: use-color('gray-10'); border-radius: 2px 2px 0 0; - border: 1px solid #e6e7e8; + border: 1px solid use-color('gray-20'); text-align: center; box-sizing: border-box; + display: flex; + transition: all 200ms; + + &-name { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + display: block; + } &:last-child { margin-right: 0; } &:hover:not(.#{$prefix}__item--active) { - background-color: #f0f0f0; + background-color: use-color('gray-20'); } &--active { - background-color: #fff; - border-bottom-color: #fff; - color: #4284f5; + background-color: use-color('white'); + border-bottom-color: use-color('white'); + color: use-color('primary'); + flex: none; } } @@ -207,7 +190,7 @@ $prefix: 'hi-tabs' !default; } &--desc { - & > .#{$prefix}__header { + .#{$prefix}__header { .#{$prefix}__nav { display: flex; flex-wrap: nowrap; @@ -215,33 +198,33 @@ $prefix: 'hi-tabs' !default; } .#{$prefix}__item { - flex: none; display: flex; flex-direction: column; padding: 16px 20px; text-align: center; - border: 1px solid #e6e7e8; + border: 1px solid use-color('gray-20'); box-sizing: border-box; + background-color: use-color('white'); &:not(:first-child) { margin-left: -1px; } &:hover { - color: #4284f5; + color: use-color('primary'); .#{$prefix}__item-desc { - color: #4284f5; + color: use-color('primary'); } } &--active { - color: #4284f5; - border-color: #4284f5; + color: use-color('primary'); + border-color: use-color('primary'); z-index: 1; .#{$prefix}__item-desc { - color: #4284f5; + color: use-color('primary'); } } @@ -251,14 +234,14 @@ $prefix: 'hi-tabs' !default; &-desc { font-size: 12px; - color: #999; + color: use-color('gray-70'); } } } } &--button { - & > .#{$prefix}__header { + .#{$prefix}__header { .#{$prefix}__nav { display: flex; flex-wrap: wrap; @@ -271,22 +254,135 @@ $prefix: 'hi-tabs' !default; padding: 0 23px; box-sizing: border-box; margin-right: 24px; - border: 1px solid #d8d8d8; + border: 1px solid use-color('gray-30'); border-radius: 18px; &:hover:not(.hi-tabs__item--active) { - color: #4284f5; - border: 1px solid #4284f5; + color: use-color('primary'); + border: 1px solid use-color('primary'); } &--active { - color: #fff; - background-color: #4284f5; - border: 1px solid #4284f5; + color: use-color('white'); + background-color: use-color('primary'); + border: 1px solid use-color('primary'); } } } } + + &--line { + .#{$prefix}__header { + border-bottom: 1px solid use-color('gray-20'); + + .#{$prefix}__nav { + display: flex; + flex-wrap: nowrap; + } + + .#{$prefix}__item { + height: 40px; + line-height: 40px; + padding: 0 16px; + box-sizing: border-box; + + &:hover { + color: use-color('primary'); + } + + &--active { + border-radius: 2px; + color: use-color('primary'); + } + } + } + + &__ink { + content: ''; + width: 0; + display: block; + height: 2px; + background-color: use-color('primary'); + bottom: -1px; + transition: transform 300ms; + position: absolute; + + &-disabled { + background-color: use-color('gray-50'); + } + } + } + + &--line.#{$prefix}--vertical { + display: flex; + flex-wrap: nowrap; + + .#{$prefix}__header { + flex: none; + display: inline-block; + border-right: 1px solid use-color('gray-20'); + border-bottom: 1px solid transparent; + } + + .#{$prefix}--line__ink { + content: ''; + display: block; + top: 0; + width: 2px !important; + background-color: use-color('primary'); + right: -1px; + height: 40px; + transition: transform 300ms; + position: absolute; + } + + .#{$prefix}__nav { + flex-direction: column; + margin-right: -1px; + } + + .#{$prefix}__item { + transition: background 300ms; + + &--active { + background: use-color('primary-20'); + } + } + } + + &-pane { + position: relative; + width: 100%; + } + + &--scroll { + .contain { + position: relative; + transition: all 300ms; + transform: translateX(0); + } + + .#{$prefix}__header { + overflow: hidden; + } + + .#{$prefix}__item { + overflow: initial !important; + } + } + + &__scroll--outter { + display: flex; + + .#{$prefix}__scroll__icon { + cursor: pointer; + display: flex; + font-size: 37px; + justify-content: center; + align-items: center; + color: use-color('gray-80'); + } + } } .hi-tabs-dropdown { @@ -298,9 +394,9 @@ $prefix: 'hi-tabs' !default; max-height: 160px; padding: 4px 0; overflow: auto; - background-color: #fff; + background-color: use-color('white'); border-radius: 2px; - border: 1px solid rgba(230, 231, 232, 1); + border: 1px solid use-color('gray-20'); box-shadow: 0 2px 8px 0 rgba(56, 62, 71, 0.1); } @@ -309,95 +405,18 @@ $prefix: 'hi-tabs' !default; min-width: 140px; line-height: 36px; padding: 0 16px; - font-size: 14px; - color: #383e47; + font-size: $font-size-normal; + color: use-color('black'); white-space: nowrap; cursor: pointer; box-sizing: border-box; &:hover { - background-color: rgba(66, 133, 244, 0.08); + background-color: use-color('primary-20'); } &--active { - background-color: rgba(66, 133, 244, 0.08); - } - } -} - -@each $key, $value in $theme-colors { - .theme__#{$key}.#{$prefix} { - &--card { - & > .#{$prefix}__header { - .#{$prefix}__item { - &:hover { - color: $value; - } - - &--active { - color: $value; - } - } - } - } - - &--editable { - & > .#{$prefix}__header { - .#{$prefix}__item { - &--active { - color: $value; - } - } - } - } - - &--desc { - & > .#{$prefix}__header { - .#{$prefix}__item { - &:hover { - color: $value; - - .#{$prefix}__item-desc { - color: $value; - } - } - - &--active { - color: $value; - border-color: $value; - - .#{$prefix}__item-desc { - color: $value; - } - } - } - } - } - - &--button { - & > .#{$prefix}__header { - .#{$prefix}__item { - &:hover:not(.hi-tabs__item--active) { - color: $value; - border: 1px solid $value; - } - - &--active { - background-color: $value; - border: 1px solid $value; - } - } - } - } - } - - .theme__#{$key}.hi-tabs-dropdown__items { - .hi-tabs-dropdown__item:hover { - background-color: rgba($value, 0.1); - } - - .hi-tabs-dropdown__item.hi-tabs-dropdown__item--active { - background-color: rgba($value, 0.1); + background-color: use-color('primary-20'); } } } diff --git a/components/tag/TagGroup.js b/components/tag/TagGroup.js new file mode 100644 index 000000000..9a17d89ed --- /dev/null +++ b/components/tag/TagGroup.js @@ -0,0 +1,194 @@ +import React, { useCallback, useState, useRef, useEffect } from 'react' +import Tag from './index' +import Icon from '../icon' +import classNames from 'classnames' +import Tooltip from '../tooltip' +const noop = () => {} +const TagGroup = ({ editable, prefixCls = 'hi-tag-group', data, onAdd = noop, onEdit = noop, onDelete = noop }) => { + const newInputRef = useRef() + const editInputRef = useRef() + const tagGroupRef = useRef() + const editActiveRef = useRef() + const [newInputValue, setNewInputValue] = useState('') + const [inputVisible, setInputVisible] = useState(false) + const [editInputId, setEditInputId] = useState(-1) + const [editInputValue, setEditInputValue] = useState('') + const [hoverIndex, setHoverIndex] = useState(-1) + + useEffect(() => { + if (inputVisible) { + newInputRef.current.focus() + } + }, [inputVisible]) + useEffect(() => { + if (editInputId !== -1) { + editInputRef.current.focus() + } + }, [editInputId]) + // 新建 tags + const handleInputConfirm = useCallback(() => { + if (newInputValue) { + onAdd( + { + title: newInputValue, + tagId: new Date().getTime() + }, + data.length + ) + setNewInputValue('') + } + setInputVisible(false) + }, [newInputValue, data]) + + // 关闭 tags + const handleClose = useCallback( + (tagId) => { + const index = data.map((item) => item.tagId).indexOf(tagId) + if (index !== -1) { + onDelete(data[index], index) + } + }, + [data] + ) + + // 展示新建input + const showInput = useCallback(() => { + setInputVisible(true) + }, []) + + // 双击 + const onDoubleClick = useCallback( + (editInputId, title) => { + const index = data.map((item) => item.tagId).indexOf(editInputId) + const { width } = tagGroupRef.current.getElementsByClassName('hi-tag')[index].getBoundingClientRect() + editActiveRef.current = width + setEditInputId(editInputId) + setEditInputValue(title) + setInputVisible(false) + setNewInputValue('') + setHoverIndex(-1) + }, + [data] + ) + + // 修改 + const handleEditInputConfirm = useCallback( + (e) => { + const index = data.map((item) => item.tagId).indexOf(editInputId) + onEdit( + editInputValue === '' + ? null + : { + tagId: editInputId, + title: editInputValue + }, + index + ) + setEditInputId(-1) + setEditInputValue('') + }, + [editInputValue, data] + ) + + // 编辑状态文本框change + const handleEditInputChange = useCallback((e) => { + setEditInputValue(e.target.value) + }, []) + + const getTag = useCallback( + (item) => { + return ( + <Tag + key={item.tagId} + id={item.tagId} + editable={item.editable} + closable={item.closable} + handleClose={handleClose} + onDoubleClick={onDoubleClick} + isLongTag={item.isLongTag} + hoverIndex={hoverIndex} + transition + onMouseEnter={(id) => setHoverIndex(id)} + onMouseLeave={() => setHoverIndex(-1)} + > + {item.title} + </Tag> + ) + }, + [hoverIndex, handleClose, onDoubleClick] + ) + + const renderItem = useCallback( + (data) => { + const item = { ...data } + item.isLongTag = item.title.length > 20 + if (editInputId === item.tagId) { + return ( + <input + ref={editInputRef} + key={item.tagId} + value={editInputValue} + className={`${prefixCls}__editable--input`} + style={{ width: editActiveRef.current }} + onChange={handleEditInputChange} + onBlur={handleEditInputConfirm} + onKeyDown={(e) => { + if (e.keyCode === 13) { + handleEditInputConfirm(e) + } + }} + /> + ) + } else { + return item.isLongTag ? ( + <Tooltip title={item.title} key={item.tagId}> + {getTag(item)} + </Tooltip> + ) : ( + getTag(item) + ) + } + }, + [editInputId, editInputValue, handleEditInputChange, getTag, handleEditInputConfirm] + ) + + const tagGroupClass = { + 'hi-tag-group__editable': editable + } + + return ( + <div className={classNames(prefixCls, tagGroupClass)} ref={tagGroupRef}> + {data.map((item) => { + if (editable) { + item.editable = item.editable === undefined ? editable : item.editable + item.closable = item.closable === undefined ? editable : item.closable + } + + return renderItem(item) + })} + {editable && !inputVisible && ( + <span onClick={() => showInput()} className={`${prefixCls}__editable--plus`}> + <Icon name="plus" /> + </span> + )} + {editable && inputVisible && ( + <input + ref={newInputRef} + type="text" + value={newInputValue || ''} + className={`${prefixCls}__editable--input`} + onChange={(e) => { + setNewInputValue(e.target.value) + }} + onBlur={(e) => handleInputConfirm(e)} + onKeyDown={(e) => { + if (e.keyCode === 13) { + handleInputConfirm(e) + } + }} + /> + )} + </div> + ) +} +export default TagGroup diff --git a/components/tag/TagItem.js b/components/tag/TagItem.js new file mode 100644 index 000000000..3aca558dc --- /dev/null +++ b/components/tag/TagItem.js @@ -0,0 +1,80 @@ +import React, { useState, useEffect } from 'react' +import classNames from 'classnames' +import './style' +import Icon from '../icon' +import { CSSTransition } from 'react-transition-group' + +const noop = () => {} +const TagItem = ({ + type = 'primary', + appearance = 'default', + onClick, + children, + color, + closable = false, + editable, + handleClose = noop, + onDoubleClick = noop, + style = {}, + id, + isLongTag = false, + onMouseEnter = noop, + onMouseLeave = noop, + hoverIndex = -1, + shape = 'round' +}) => { + const [vi, setVi] = useState(false) + useEffect(() => { + setVi(true) + }, []) + const tagStyle = color + ? { + background: appearance === 'default' ? color : '', + borderColor: color, + color: appearance === 'line' ? color : '' + } + : {} + return ( + <CSSTransition + in={vi} + timeout={300} + classNames={'tag-transition'} + onExited={() => { + setTimeout(() => handleClose(id), 300) + }} + > + <span + className={classNames('hi-tag', { + [`hi-tag--${type}`]: type, + 'hi-tag--line': appearance === 'line', + 'hi-tag--square': shape === 'square' + })} + onClick={onClick} + style={{ ...style, ...tagStyle }} + onDoubleClick={() => { + if (editable) { + onDoubleClick(id, children) + } + }} + onMouseEnter={() => { + onMouseEnter(id) + }} + onMouseLeave={onMouseLeave} + > + {isLongTag ? children.slice(0, 20) + '...' : children} + {closable && ( + <button className="hi-tag__btn" type="button"> + <Icon + name="close" + onClick={(e) => { + setVi(false) + }} + /> + </button> + )} + </span> + </CSSTransition> + ) +} + +export default TagItem diff --git a/components/tag/index.d.ts b/components/tag/index.d.ts new file mode 100644 index 000000000..20d710bbf --- /dev/null +++ b/components/tag/index.d.ts @@ -0,0 +1,7 @@ +interface Props { + type?: 'primary' | 'success' | 'warning' | 'danger' + appearance?: 'default' | 'line' + onClick?: (e: MouseEvent) => void +} +declare const Tag: React.ComponentType<Props> +export default Tag diff --git a/components/tag/index.js b/components/tag/index.js index 19a9f2afb..bd93b7bb3 100644 --- a/components/tag/index.js +++ b/components/tag/index.js @@ -1,51 +1,7 @@ -import React, { Component } from 'react' -import PropTypes from 'prop-types' -import classNames from 'classnames' +import Tag from './TagItem' +import TagGroup from './TagGroup' import './style/index' -import Provider from '../context' -class Tag extends Component { - static propTypes = { - type: PropTypes.oneOf([ - 'primary', - 'success', - 'warning', - 'danger' - ]), - appearance: PropTypes.oneOf([ - 'default', - 'line' - ]), - onClick: PropTypes.func, - style: PropTypes.object, - className: PropTypes.string - } - static defaultProps = { - type: 'primary', - appearance: 'default' - } +Tag.Group = TagGroup - render () { - const prefixCls = 'hi-tag' - const {children, type, appearance, onClick, style, className, theme} = this.props - const eleClass = classNames( - `theme__${theme}`, - `${prefixCls}__container`, - className, - onClick && `${prefixCls}__container--click`, - `${prefixCls}__container--${type}`, - `${prefixCls}__container--${appearance}` - ) - - const restProps = { style, onClick } - - return ( - <div className={eleClass} {...restProps}> - {children} - </div> - ) - } -} - -export default Provider(Tag) -export {Tag} +export default Tag diff --git a/components/tag/style/index.scss b/components/tag/style/index.scss index 83fac0e0b..b9f2e40d5 100644 --- a/components/tag/style/index.scss +++ b/components/tag/style/index.scss @@ -1,78 +1,153 @@ -@import '@hi-ui/core-css/index.scss'; +@import '../../core-css/index.scss'; + +$color-map: ( + 'primary': use-color('primary'), + 'warning': get-color($palette-secondary, 'warning'), + 'success': get-color($palette-secondary, 'success'), + 'danger': get-color($palette-secondary, 'danger'), + 'default': use-color('gray-70') +) !default; $prefix: 'hi-tag' !default; +$prefixGroup: 'hi-tag-group' !default; + $primary: get-color($palette-primary, 'hiui-blue') !default; -$normal: #999 !default; + +.tag-transition { + &-enter { + opacity: 0; + } + + &-enter-done { + opacity: 1; + transition: opacity 0.3s !important; + } + + &-exit { + opacity: 1; + } + + &-exit-done { + opacity: 0; + transition: opacity 3s; + } +} .#{$prefix} { - &__container { - height: $line-height-size-normal; - display: inline-block; - vertical-align: middle; - padding: 0 6px; - font-size: $font-size-small; - box-sizing: border-box; - text-align: center; - line-height: $line-height-size-normal; - -webkit-font-smoothing: antialiased; - border-radius: 2px; + padding: 0 6px; + color: use-color('white'); + line-height: 20px; + box-sizing: border-box; + border-color: transparent; + margin-right: 4px; + margin-left: 4px; + border-radius: 11px; + font-size: 12px; + display: inline-block; + user-select: none; + transition: opacity 0.3s; - & + & { - margin-left: 10px; + &:hover { + opacity: 0.65; + } + + @each $key, $value in $color-map { + &--#{$key} { + background-color: $value; + border: 1px solid $value; } + } - &--default { - background: $primary; - color: $white; + &--line { + background: use-color('white'); - &.#{$prefix}__container--normal { - background: $normal; + @each $key, $value in $color-map { + &.#{$prefix}--#{$key} { + border: 1px solid $value; + color: $value; } + } + } - @each $key in 'success', 'danger', 'warning' { - &.#{$prefix}__container--#{$key} { - $status-color: map-get(get-palette(get-color($palette-secondary, $key)), '50'); + &.#{$prefix}--square { + border-radius: 2px; + } - background: $status-color; - } - } + .#{$prefix}__btn { + width: 16px; + height: 16px; + margin: 0; + padding: 0; + border: 0; + border-radius: 2px; + outline: 0; + font-size: $font-size-small; + line-height: 16px; + cursor: pointer; + opacity: 0.54; + background-color: transparent; + color: inherit; + transition: box-shadow $speed-fast $easing, opacity $speed-fast $easing; + + &:focus, + &:hover, + &:active { + opacity: 1; } + } +} - &--line { - background: transparent; - border: 1px solid $primary; - color: $primary; - padding: 0 5px; - line-height: $line-height-size-normal - 2; +.#{$prefixGroup} { + &__editable { + display: flex; + align-items: center; - &.#{$prefix}__container--normal { - border: 1px solid $normal; - color: $normal; - } + .#{$prefix} { + background: use-color('white'); + border: 1px solid use-color('gray-30'); + color: use-color('black'); + cursor: pointer; + transition: border-color 0.3s; - @each $key in 'success', 'danger', 'warning' { - &.#{$prefix}__container--#{$key} { - $status-color: map-get(get-palette(get-color($palette-secondary, $key)), '50'); + &:hover { + border: 1px solid use-color('primary') !important; + opacity: 1; + } - border: 1px solid $status-color; - color: $status-color; - } + .hi-icon { + margin-left: 3px; + cursor: pointer; } } - &--click { - cursor: pointer; + &--input { + margin: 0 4px; + border-radius: 11px; + border: 1px solid use-color('primary'); + outline: none; + padding: 2px 8px; + font-size: 12px; + box-sizing: border-box; + display: inline-block; + line-height: 16px; } - } -} -@each $key, $value in $theme-colors { - .theme__#{$key}.hi-tag__container--primary.hi-tag__container--default { - background: $value; - } + &--plus { + width: 50px; + border-radius: 11px; + border: 1px dashed use-color('gray-30'); + display: inline-block; + line-height: 20px; + text-align: center; + margin-left: 4px; + box-sizing: border-box; + cursor: pointer; + font-size: 12px; + transition: border-color 0.3s; - .theme__#{$key}.hi-tag__container--primary.hi-tag__container--line { - border: 1px solid $value; - color: $value; + &:hover { + border-color: use-color('primary'); + } + } } } diff --git a/components/timeline/index.d.ts b/components/timeline/index.d.ts new file mode 100644 index 000000000..44c79211b --- /dev/null +++ b/components/timeline/index.d.ts @@ -0,0 +1,17 @@ +type DataItem = { + title: string | JSX.Element + content?: string | JSX.Element + timestamp?: string + extraTime?: string + icon?: string | JSX.Element +} +type GroupItem = { + groupTitle: string | JSX.Element + children: DataItem[] +} +interface Props { + type?: 'default' | 'right' | 'cross' + data: DataItem[] | GroupItem[] +} +declare const Timeline: React.ComponentType<Props> +export default Timeline diff --git a/components/timeline/style/index.scss b/components/timeline/style/index.scss index fb3a8ca29..da6e1a469 100755 --- a/components/timeline/style/index.scss +++ b/components/timeline/style/index.scss @@ -1,4 +1,4 @@ -@import '@hi-ui/core-css/index.scss'; +@import '../../core-css/index.scss'; .hi-timeline { position: relative; @@ -38,8 +38,8 @@ .item__dot { width: 8px; height: 8px; - border: 2px solid #4284f5; - background: #fff; + border: 2px solid use-color('primary'); + background: use-color('white'); border-radius: 50%; box-sizing: border-box; position: absolute; @@ -51,7 +51,7 @@ .item__icon { position: absolute; - background: #fff; + background: use-color('white'); top: 7px; right: -20px; transform: translateX(50%); @@ -62,7 +62,7 @@ position: absolute; right: -20px; width: 2px; - background: rgb(242, 242, 242); + background: use-color('gray-20'); height: calc(100% + 20px); transform: translateX(50%); } @@ -73,15 +73,15 @@ margin-left: 20px; .item__time { - color: rgb(51, 51, 51); - font-size: 14px; - line-height: 22px; + color: use-color('black'); + font-size: $font-size-normal; + line-height: $line-height-size-normal; margin-bottom: 2px; } .item__extra { - color: rgb(158, 158, 158); - font-size: 12px; + color: use-color('gray-80'); + font-size: $font-size-small; line-height: 20px; } } @@ -91,15 +91,15 @@ width: 70%; .item__title { - color: rgb(51, 51, 51); - font-size: 14px; - line-height: 22px; + color: use-color('black'); + font-size: $font-size-normal; + line-height: $line-height-size-normal; margin-bottom: 2px; } .item__content { - color: rgb(158, 158, 158); - font-size: 12px; + color: use-color('gray-80'); + font-size: $font-size-small; line-height: 20px; } } @@ -112,8 +112,8 @@ .item__dot { width: 8px; height: 8px; - border: 2px solid #4284f5; - background: #fff; + border: 2px solid use-color('primary'); + background: use-color('white'); border-radius: 50%; box-sizing: border-box; position: absolute; @@ -127,7 +127,7 @@ position: absolute; left: -20px; width: 2px; - background: rgb(242, 242, 242); + background: use-color('gray-20'); height: calc(100% + 20px); transform: translateX(-50%); } @@ -137,15 +137,15 @@ margin-right: 20px; .item__time { - color: rgb(51, 51, 51); - font-size: 14px; - line-height: 22px; + color: use-color('black'); + font-size: $font-size-normal; + line-height: $line-height-size-normal; margin-bottom: 2px; } .item__extra { - color: rgb(158, 158, 158); - font-size: 12px; + color: use-color('gray-80'); + font-size: $font-size-small; line-height: 20px; } } @@ -154,15 +154,15 @@ width: 70%; .item__title { - color: rgb(51, 51, 51); - font-size: 14px; - line-height: 22px; + color: use-color('black'); + font-size: $font-size-normal; + line-height: $line-height-size-normal; margin-bottom: 2px; } .item__content { - color: rgb(158, 158, 158); - font-size: 12px; + color: use-color('gray-80'); + font-size: $font-size-small; line-height: 20px; } } @@ -177,22 +177,22 @@ margin-left: 24px; .item__title { - color: rgb(51, 51, 51); - font-size: 14px; - line-height: 22px; + color: use-color('black'); + font-size: $font-size-normal; + line-height: $line-height-size-normal; margin-bottom: 2px; } .item__content { - color: #666; - font-size: 12px; + color: use-color('gray-80'); + font-size: $font-size-small; line-height: 20px; margin-bottom: 6px; } .item__time { - color: #999; - font-size: 12px; + color: use-color('gray-70'); + font-size: $font-size-small; line-height: 20px; } @@ -218,8 +218,8 @@ .item__dot { width: 8px; height: 8px; - border: 2px solid #4284f5; - background: #fff; + border: 2px solid use-color('primary'); + background: use-color('white'); border-radius: 50%; box-sizing: border-box; position: absolute; @@ -231,7 +231,7 @@ .item__icon { position: absolute; - background: #fff; + background: use-color('white'); top: 7px; left: -20px; transform: translateX(-50%); @@ -243,7 +243,7 @@ left: -22px; top: 0; width: 2px; - background: rgb(242, 242, 242); + background: use-color('gray-20'); height: calc(100% + 20px); transform: translateX(50%); } @@ -255,7 +255,7 @@ margin-bottom: 24px; .collapse-opt { - font-size: 12px; + font-size: $font-size-small; margin-left: calc(30% + 20px); cursor: pointer; position: relative; @@ -266,7 +266,7 @@ top: 0; left: -20px; width: 2px; - background: #f2f2f2; + background: use-color('gray-20'); height: calc(100% + 24px); transform: translateX(-50%); } @@ -274,7 +274,7 @@ .item__dot { width: 4px !important; height: 4px !important; - background: #4284f5 !important; + background: use-color('primary') !important; border-radius: 50%; top: 9px !important; } @@ -285,8 +285,8 @@ width: calc(30% - 20px); margin-right: 20px; margin-bottom: 10px; - color: rgb(0, 0, 0); - font-weight: bolder; + color: use-color('black'); + font-weight: $font-weight-bold; position: relative; .item__line { @@ -295,7 +295,7 @@ left: calc(100% + 20px); right: 0; width: 2px; - background: #f2f2f2; + background: use-color('gray-20'); height: calc(100% + 10px); transform: translateX(-50%); } @@ -312,15 +312,15 @@ margin-right: 20px; .item__time { - color: rgb(51, 51, 51); - font-size: 14px; - line-height: 22px; + color: use-color('black'); + font-size: $font-size-normal; + line-height: $line-height-size-normal; margin-bottom: 2px; } .item__extra { - color: rgb(158, 158, 158); - font-size: 12px; + color: use-color('gray-80'); + font-size: $font-size-small; line-height: 20px; } } @@ -328,8 +328,8 @@ .item__dot { width: 8px; height: 8px; - border: 2px solid #4284f5; - background: #fff; + border: 2px solid use-color('primary'); + background: use-color('white'); border-radius: 50%; box-sizing: border-box; position: absolute; @@ -341,7 +341,7 @@ .item__icon { position: absolute; - background: #fff; + background: use-color('white'); top: 7px; left: 30%; transform: translateX(-50%); @@ -352,8 +352,8 @@ position: absolute; left: 30%; width: 2px; - background: rgb(242, 242, 242); - height: calc(100% + 20px); + background: use-color('gray-20'); + height: 100%; transform: translateX(-50%); } @@ -362,15 +362,15 @@ margin-left: 20px; .item__title { - color: rgb(51, 51, 51); - font-size: 14px; - line-height: 22px; + color: use-color('black'); + font-size: $font-size-normal; + line-height: $line-height-size-normal; margin-bottom: 2px; } .item__content { - color: rgb(158, 158, 158); - font-size: 12px; + color: use-color('gray-80'); + font-size: $font-size-small; line-height: 20px; } } @@ -394,19 +394,3 @@ } } } - -// @each $key, $value in $theme-colors { -// .theme__#{$key}.hi-timeline { -// .hi-timeline__dot { -// border: 2px solid $value; - -// &.hi-timeline__dot--custom { -// border: none; -// } - -// &--sub { -// background: $value; -// } -// } -// } -// } diff --git a/components/tooltip/index.d.ts b/components/tooltip/index.d.ts new file mode 100644 index 000000000..cc78f108b --- /dev/null +++ b/components/tooltip/index.d.ts @@ -0,0 +1,18 @@ +interface Props { + title: string | JSX.Element + placement?: 'top' | 'right' | 'bottom' | 'left' + visible?: boolean +} +type Options = { + title: string | JSX.Element + placement?: 'top' | 'right' | 'bottom' | 'left' + key: string +} +const OpenFun: (target: HTMLElement, options: Options) => void +const CloseFun: (key: string) => void +declare class Tooltip extends React.Component<Props, any> { + static open = OpenFun + static close = CloseFun +} +export default Tooltip + diff --git a/components/tooltip/index.js b/components/tooltip/index.js index 208e28a2d..27b91a925 100644 --- a/components/tooltip/index.js +++ b/components/tooltip/index.js @@ -39,8 +39,19 @@ class Tooltip extends Component { } } render () { - const { placement, style, className, onClick, title, children, visible } = this.props - const eleClass = classNames(`${prefixCls}-base`, placement && `${prefixCls}-${placement}`) + const { + placement, + style, + className, + onClick, + title, + children, + visible + } = this.props + const eleClass = classNames( + `${prefixCls}-base`, + placement && `${prefixCls}-${placement}` + ) const { tooltipShow } = this.state return ( <div @@ -77,7 +88,10 @@ class Tooltip extends Component { function deprecatedOpen ({ target, placement = 'top', title }) { let mountNode = document.createElement('div') - const eleClass = classNames(`${prefixCls}-base`, placement && `${prefixCls}-${placement}`) + const eleClass = classNames( + `${prefixCls}-base`, + placement && `${prefixCls}-${placement}` + ) render( <Popper className={`${prefixCls}__popper`} @@ -100,7 +114,10 @@ function deprecatedOpen ({ target, placement = 'top', title }) { function open (target, { placement = 'top', title, key }) { let mountNode = document.createElement('div') - const eleClass = classNames(`${prefixCls}-base`, placement && `${prefixCls}-${placement}`) + const eleClass = classNames( + `${prefixCls}-base`, + placement && `${prefixCls}-${placement}` + ) render( <Popper className={`${prefixCls}__popper`} @@ -125,7 +142,10 @@ function close (key) { } function openWrapper (target, options) { - if (target['nodeName'] || (typeof target === 'object' && target['$$typeof'])) { + if ( + target['nodeName'] || + (typeof target === 'object' && target['$$typeof']) + ) { open(target, options) } else { return deprecatedOpen(target) diff --git a/components/tooltip/style/index.scss b/components/tooltip/style/index.scss index b0e5dc1d1..7dea0284b 100644 --- a/components/tooltip/style/index.scss +++ b/components/tooltip/style/index.scss @@ -1,3 +1,5 @@ +@import '../../core-css/index.scss'; + .hi-tooltip { position: relative; display: inline-block; @@ -5,9 +7,9 @@ .hi-tooltip-base { border-radius: 2px; - background: #333; - font-size: 12px; - color: #fff; + background: use-color('gray-80'); + font-size: $font-size-small; + color: use-color('white'); padding: 6px 12px; line-height: 20px; white-space: nowrap; @@ -18,7 +20,7 @@ position: absolute; width: 5px; height: 5px; - background: #333; + background: use-color('gray-80'); } } diff --git a/components/transfer/Item.js b/components/transfer/Item.js index 0633b8a4d..d2d94cb79 100644 --- a/components/transfer/Item.js +++ b/components/transfer/Item.js @@ -4,7 +4,7 @@ import Checkbox from '../checkbox' import { DragSource, DropTarget } from 'react-dnd' import classNames from 'classnames' class Item extends Component { - render () { + render() { const { mode, item, @@ -24,18 +24,16 @@ class Item extends Component { const sourceStyle = sourceNode === item.id && isDragging ? { - background: 'rgba(246,246,246,1)', - color: 'rgba(204,204,204,1)' - } + background: 'rgba(246,246,246,1)', + color: 'rgba(204,204,204,1)' + } : {} const itemCls = classNames('hi-transfer__item', `theme__${theme}`, item.disabled && 'hi-transfer__item--disabled') const el = ( <li style={sourceStyle} className={itemCls} onClick={onClick.bind(this)}> - {targetNode === item.id && - isDragging && - <div className={`hi-transfer__divider--${dividerPosition}`} />} - {mode !== 'basic' - ? <Checkbox + {targetNode === item.id && isDragging && <div className={`hi-transfer__divider--${dividerPosition}`} />} + {mode !== 'basic' ? ( + <Checkbox legacy text={item.content} value={item.id} @@ -43,7 +41,9 @@ class Item extends Component { disabled={item.disabled} onChange={checkboxOnChange.bind(this)} /> - : item.content} + ) : ( + item.content + )} </li> ) return dir === 'right' && draggable ? connectDropTarget(connectDragSource(el)) : el @@ -52,7 +52,7 @@ class Item extends Component { const TYPE = 'CARD' const source = { - beginDrag (props) { + beginDrag(props) { props.setSourceNode(props.item.id) if (props.onDragStart(props.item)) { return { @@ -62,17 +62,17 @@ const source = { return false }, - isDragging (props, monitor) { + isDragging(props, monitor) { return props.id === monitor.getItem().id } } const target = { - canDrop (props, monitor) { + canDrop(props, monitor) { return true }, - drop (props, monitor, component) { + drop(props, monitor, component) { const { sourceItem } = monitor.getItem() const { item: targetItem, removeTargetNode, move, onDrop } = props if (onDrop(sourceItem, targetItem)) { @@ -80,15 +80,14 @@ const target = { removeTargetNode() } }, - hover (props, monitor, component) { + hover(props, monitor, component) { if (monitor.isOver({ shallow: true })) { const { item: targetItem, setTargetNode, positionX, positionY, setPosition } = props const sourcePosition = monitor.getClientOffset() const targetComponent = findDOMNode(component).getBoundingClientRect() if (!(sourcePosition.x === positionX && sourcePosition.y === positionY)) { setPosition(sourcePosition.x, sourcePosition.y) - const dividerPosition = - sourcePosition.y <= targetComponent.y + targetComponent.height / 2 ? 'up' : 'down' + const dividerPosition = sourcePosition.y <= targetComponent.y + targetComponent.height / 2 ? 'up' : 'down' setTargetNode(targetItem.id, dividerPosition) } } @@ -103,14 +102,12 @@ const DragItem = DropTarget(TYPE, target, (connect, monitor) => ({ }))(Item) ) -const HOCItem = ItemComponent => { +const HOCItem = (ItemComponent) => { return class WrapperItem extends Component { - render () { + render() { const { dir, draggable } = this.props - return draggable && dir === 'right' - ? <DragItem {...this.props} /> - : <ItemComponent {...this.props} /> + return draggable && dir === 'right' ? <DragItem {...this.props} /> : <ItemComponent {...this.props} /> } } } diff --git a/components/transfer/Transfer.js b/components/transfer/Transfer.js index fdb9310e4..157fb7e63 100755 --- a/components/transfer/Transfer.js +++ b/components/transfer/Transfer.js @@ -259,7 +259,7 @@ class Transfer extends Component { showAllSelect, searchable, draggable, - emptyContent, + emptyContent: propsEmptyContent, title, disabled, theme, @@ -282,6 +282,7 @@ class Transfer extends Component { dividerPosition } = this.state const localeMap = localeDatas.transfer || {} + const emptyContent = propsEmptyContent ? propsEmptyContent : [localeMap.emptyContent, localeMap.emptyContent] const selectedKeys = dir === 'left' ? sourceSelectedKeys : targetSelectedKeys const filterText = dir === 'left' ? leftFilter : rightFilter const filterResult = datas.filter(item => item.content.includes(filterText)) @@ -299,7 +300,7 @@ class Transfer extends Component { <div className='hi-transfer__searchbar'> <Icon name='search' /> <Input - placeholder='搜索' + placeholder={localeMap.searchPlaceholder} clearable='true' clearableTrigger='always' onInput={this.searchEvent.bind(this, dir)} @@ -424,7 +425,6 @@ Transfer.defaultProps = { showCheckAll: false, searchable: false, draggable: false, - emptyContent: ['暂无数据', '暂无数据'], title: ['', ''], disabled: false, onDragStart: () => true, diff --git a/components/transfer/index.d.ts b/components/transfer/index.d.ts new file mode 100644 index 000000000..287eb10e3 --- /dev/null +++ b/components/transfer/index.d.ts @@ -0,0 +1,20 @@ +type DataItem = { + id: string | number + content: string | JSX.Element + disabled?: boolean +} +interface Props { + type?: 'default' | 'multiple' + showCheckAll?: boolean + searchable?: boolean + disabled?: boolean + title?: string[] | JSX.Element[] + emptyContent?: string[] | JSX.Element[] + data: DataItem[] + targetLimit?: number + targetIds?: number[] | string[] + targetSortType?: 'default' | 'queue' + onChange?: (targetKey: number[] | string[], direction: 'left' | 'right', moveDatas: DataItem[]) => void +} +declare const Transfer: React.ComponentType<Props> +export default Transfer diff --git a/components/transfer/style/index.scss b/components/transfer/style/index.scss index feb1fbc0f..166674707 100755 --- a/components/transfer/style/index.scss +++ b/components/transfer/style/index.scss @@ -1,4 +1,4 @@ -@import '@hi-ui/core-css/index.scss'; +@import '../../core-css/index.scss'; .hi-transfer { display: flex; @@ -6,19 +6,19 @@ &__container { width: 240px; box-sizing: border-box; - background: rgba(255, 255, 255, 1); + background: use-color('white'); border-radius: 2px; - border: 1px solid rgba(231, 231, 231, 1); + border: 1px solid use-color('gray-20'); position: relative; } &__title { height: 40px; - background: rgba(246, 246, 246, 1); + background: use-color('gray-10'); line-height: 40px; padding-left: 15px; box-sizing: border-box; - border-bottom: 1px solid #e6e7e8; + border-bottom: 1px solid use-color('gray-20'); } &__operation { @@ -48,14 +48,12 @@ &__body { height: 222px; overflow: auto; - // border-top: 1px solid rgb(231, 231, 231); - // border-bottom: 1px solid rgb(231, 231, 231); box-sizing: border-box; &--empty { text-align: center; line-height: 222px; - color: rgba(153, 153, 153, 1); + color: use-color('gray-70'); } } @@ -76,11 +74,11 @@ text-align: left; .hi-checkbox-legacy--checked .hi-checkbox-legacy__input { - border: 1px solid #4284f5; + border: 1px solid use-color('primary'); } &:hover { - background: rgba(66, 132, 245, 0.1); + background: use-color('primary-20'); } &--disabled { @@ -94,8 +92,8 @@ &--limit { height: 40px; - color: #999; - font-size: 14px; + color: use-color('gray-70'); + font-size: $font-size-normal; display: flex; align-items: center; } @@ -108,7 +106,6 @@ background: url('../img/warning.png'); background-repeat: no-repeat; background-position: left center; - // margin-right: 15px; } &__footer { @@ -117,18 +114,18 @@ justify-content: space-between; padding: 0 15px; height: 40px; - border-top: 1px solid #e7e7e7; + border-top: 1px solid use-color('gray-20'); box-sizing: border-box; &--checkbox-part { .hi-checkbox__input { - background: #4284f5; + background: use-color('primary'); &::after { content: ''; position: absolute; display: block; - border: 1px solid #fff; + border: 1px solid use-color('white'); margin-top: -1px; left: 3px; right: 3px; @@ -143,7 +140,7 @@ height: 40px; width: 208px; margin: 0 auto; - border-bottom: 1px solid #e6e7e8; + border-bottom: 1px solid use-color('gray-20'); box-sizing: border-box; display: flex; align-items: center; @@ -156,7 +153,7 @@ &__limit-tips { position: absolute; background: #4a4a4a; - color: #fff; + color: use-color('white'); font-size: 12px; padding: 2px 5px; left: 50%; @@ -171,7 +168,7 @@ position: absolute; width: 100%; height: 1px; - background-color: rgba(66, 132, 245, 1); + background-color: use-color('primary'); top: 0; left: 0; } @@ -180,7 +177,7 @@ position: absolute; width: 100%; height: 1px; - background-color: rgba(66, 132, 245, 1); + background-color: use-color('primary'); bottom: 0; left: 0; } @@ -198,27 +195,3 @@ box-sizing: border-box; } } - -@each $key, $value in $theme-colors { - .hi-transfer { - &.theme__#{$key} { - .hi-transfer__divider--up { - background-color: $value; - } - - .hi-transfer__divider--down { - background-color: $value; - } - } - - &__item.theme__#{$key} { - .hi-checkbox-legacy--checked .hi-checkbox-legacy__input { - border: 1px solid $value; - } - - &:hover { - background-color: rgba($value, 0.15); - } - } - } -} diff --git a/components/tree/BaseTree.jsx b/components/tree/BaseTree.jsx new file mode 100644 index 000000000..709ce60a7 --- /dev/null +++ b/components/tree/BaseTree.jsx @@ -0,0 +1,99 @@ +import React from 'react' +import TreeNode from './TreeNode' +import TreeContext from './context' +import './style/index' +import useFlatData from './hooks/useFlatData' +import useSelect from './hooks/useSelect' +import useCheckable from './hooks/useCheckable' +import useExpand from './hooks/useExpand' +import { getAncestorIds } from './util' +import classnames from 'classnames' + +const PREFIX = 'hi-tree' + +const BaseTree = ({ + data, + treeNodeRender, + menuRender, + checkable, + selectable = true, + selectedId, + defaultSelectedId, + onSelect, + expandedIds, + defaultExpandedIds, + onExpand, + checkedIds, + defaultCheckedIds, + onCheck, + editable, + editMenu, + onClick, + draggable, + onLoadChildren, + apperance, + onDragStart, + onDragOver, + onDrop, + onDragEnd, + className +}) => { + const [flatData] = useFlatData(data) + const [selectNodeId, onSelectNode] = useSelect({ + selectedId, + selectable, + defaultSelectedId, + onSelect + }) + const [expandedNodeIds, onExpandNode] = useExpand({ expandedIds, defaultExpandedIds, onExpand }) + + const [{ checkedNodes, semiCheckedIds }, onCheckNode] = useCheckable({ + defaultCheckedIds, + checkedIds, + onCheck, + data, + flatData + }) + return ( + <TreeContext.Provider + value={{ + treeNodeRender, + menuRender, + checkable, + checkedNodes, + semiCheckedIds, + selectedId: selectNodeId, + onSelectNode, + expandedNodeIds, + onExpandNode, + editable, + editMenu, + PREFIX, + onClick, + onCheckNode, + draggable, + onLoadChildren, + apperance, + onDragStart, + onDragOver, + onDrop, + onDragEnd + }} + > + <div className={classnames(PREFIX, className)}> + <ul className="root-list"> + {flatData + .filter((node) => { + const ancestors = getAncestorIds(node.id, data) + return ancestors.every((ancestor) => expandedNodeIds.includes(ancestor)) + }) + .map((node) => { + return <TreeNode key={node.id} node={node} /> + })} + </ul> + </div> + </TreeContext.Provider> + ) +} + +export default BaseTree diff --git a/components/tree/IconLoading.js b/components/tree/IconLoading.js index 46701665d..1c1f568aa 100644 --- a/components/tree/IconLoading.js +++ b/components/tree/IconLoading.js @@ -3,22 +3,27 @@ import React from 'react' const IconLoading = (props) => { const size = '0.8em' const themeColor = { - 'orange': '#f63', - 'cyan': '#46bc99', - 'magenta': '#ff5975', - 'lavender': '#b450de', - 'blue': '#3da8f5', - 'purple': '#8a8acb' + orange: '#f63', + cyan: '#46bc99', + magenta: '#ff5975', + lavender: '#b450de', + blue: '#3da8f5', + purple: '#8a8acb' } return ( - <i className='hi-icon hi-btn--loading--icon'> - <svg viewBox='0 0 18 18' width={size} height={size} fill={themeColor[props.theme] ? themeColor[props.theme] : '#4284F5'}> + <i className="hi-btn--loading--icon"> + <svg + viewBox="0 0 18 18" + width={size} + height={size} + fill={themeColor[props.theme] ? themeColor[props.theme] : '#4284F5'} + > <g> <path - d='m9 18c-4.9706 0-9-4.0294-9-9 0-4.9706 4.0294-9 9-9 4.9706 0 9 4.0294 9 9 0 4.9706-4.0294 9-9 9zm0-2c3.866 0 7-3.134 7-7 0-3.866-3.134-7-7-7-3.866 0-7 3.134-7 7 0 3.866 3.134 7 7 7z' - opacity='.15' + d="m9 18c-4.9706 0-9-4.0294-9-9 0-4.9706 4.0294-9 9-9 4.9706 0 9 4.0294 9 9 0 4.9706-4.0294 9-9 9zm0-2c3.866 0 7-3.134 7-7 0-3.866-3.134-7-7-7-3.866 0-7 3.134-7 7 0 3.866 3.134 7 7 7z" + opacity=".15" /> - <path d='m15.547 2.8242c0.37904 0.40168 0.36068 1.0346-0.040996 1.4136-0.40168 0.37904-1.0346 0.36068-1.4136-0.040996-1.315-1.3935-3.1381-2.1969-5.0922-2.1969-3.866 0-7 3.134-7 7 0 0.55228-0.44772 1-1 1s-1-0.44772-1-1c0-4.9706 4.0294-9 9-9 2.5103 0 4.8578 1.0343 6.5468 2.8242z' /> + <path d="m15.547 2.8242c0.37904 0.40168 0.36068 1.0346-0.040996 1.4136-0.40168 0.37904-1.0346 0.36068-1.4136-0.040996-1.315-1.3935-3.1381-2.1969-5.0922-2.1969-3.866 0-7 3.134-7 7 0 0.55228-0.44772 1-1 1s-1-0.44772-1-1c0-4.9706 4.0294-9 9-9 2.5103 0 4.8578 1.0343 6.5468 2.8242z" /> </g> </svg> </i> diff --git a/components/tree/Tree.js b/components/tree/Tree.js index 48ed60313..7d1a58efd 100644 --- a/components/tree/Tree.js +++ b/components/tree/Tree.js @@ -1,246 +1,507 @@ -import React, { Component } from 'react' -import classNames from 'classnames' -import TreeNode from './TreeNode' -import isEqual from 'lodash/isEqual' -import { getAll, dealData } from './util' -import withDragDropContext from '../lib/withDragDropContext' +import React, { useState, useCallback, useEffect } from 'react' +import BaseTree from './BaseTree' +import Input from '../input' +import Button from '../button' +import Modal from '../modal' +import { getAncestorIds, findNode } from './util' +import _ from 'lodash' +import { v4 as uuidv4 } from 'uuid' +import CustomTreeNode from './customTreeNode' +import axios from 'axios' +import Provider from '../context' import './style/index' -export class Tree extends Component { - constructor (props) { - super(props) - - this.state = { - hasExpanded: [], - dataMap: {}, - data: [], - semiChecked: [], - disabledKeys: [], - all: [], - checkedIds: [], - semiCheckedIds: [] +const PREFIX = 'hi-tree' + +const getMatchedNodes = (data, searchValue, matchedNodes = []) => { + data.forEach((item) => { + if (searchValue !== '' && item.title.includes(searchValue)) { + matchedNodes.push(item) + } + if (item.children) { + getMatchedNodes(item.children, searchValue, matchedNodes) + } + }) + return matchedNodes +} +const getShowData = (data, matchedIds, filtedIds) => { + for (let i = 0; i < data.length; i++) { + if (matchedIds.includes(data[i].id)) { + } else if (filtedIds.includes(data[i].id)) { + getShowData(data[i].children, matchedIds, filtedIds) + } else { + data.splice(i, 1) + i = i - 1 } } + return data +} - static defaultProps = { - prefixCls: 'hi-tree', - defaultCheckedKeys: [], - data: [], - apperance: 'default', - contextMenu: [] - } +const getDefaultIds = (data, collections = []) => { + data.forEach((d) => { + if (d.children) { + collections.push(d.id) + getDefaultIds(d.children, collections) + } + }) + return collections +} + +const Tree = (props) => { + const { + searchable, + searchConfig = {}, + data, + expandedIds, + defaultExpandedIds, + defaultExpandAll = false, + filter = false, + contextMenu, + editable, + onBeforeSave, + onSave, + onBeforeDelete, + onDelete, + onLoadChildren, + onExpand, + onDragStart, + onDrop, + onDropEnd, + theme, + localeDatas + } = props + const localMap = localeDatas.tree || {} + const { placeholder = localMap.searchPlaceholder, emptyContent = localMap.searchEmptyResult } = searchConfig + const [cacheData, updateCacheData] = useState(data) + useEffect(() => { + updateCacheData(data) + }, [data]) - static getDerivedStateFromProps (props, state) { - let data = {} - if (!isEqual(props.data, state.data)) { - const dataMap = {} - dealData(props.data, dataMap) - data.dataMap = dataMap - data.data = props.data - - if (state.data.length === 0) { - let defaultExpandedArr = [] - - for (let key in dataMap) { - const item = dataMap[key] - const itemHasChildren = item.children && item.children.length > 0 - const itemShouldExpand = - (props.defaultExpandAll && item.expanded !== false) || item.expanded === true - if (itemHasChildren && itemShouldExpand) { - defaultExpandedArr.push(item.id) + const [menuVisible, setMenuVisible] = useState(null) + const [modalVisible, setModalVisible] = useState(null) + + const [editingNodes, setEditingNodes] = useState([]) + + const [searchValue, setSearchValue] = useState('') + const [matchedNodes, setMatchedNodes] = useState([]) + const [filteredIds, setFilteredIds] = useState([]) + const [expanded, setExpanded] = useState( + expandedIds || defaultExpandedIds || (defaultExpandAll && getDefaultIds(data)) || [] + ) + + useEffect(() => { + if (expandedIds) { + setExpanded(expandedIds) + } + }, [expandedIds]) + + const showData = getShowData( + _.cloneDeep(cacheData), + matchedNodes.map((n) => n.id), + filteredIds + ) + // 加载节点 + const loadChildren = useCallback( + (node) => { + if (onLoadChildren) { + return axios(onLoadChildren(node)).then( + (res) => { + const dataCache = _.cloneDeep(cacheData) + const loadNode = findNode(node.id, dataCache) + loadNode.children = res.data + updateCacheData(dataCache) + return res + }, + (error) => { + return error + } + ) + } + }, + [onLoadChildren, cacheData] + ) + // 移动节点 + const switchNode = useCallback((targetItemId, sourceItemId, data, allData, dropDividerPosition) => { + const sourceNode = findNode(sourceItemId, allData) + const _data = [...data] + _data.forEach((item, idx) => { + if (item.id === targetItemId) { + const position = dropDividerPosition === 'down' ? idx + 1 : idx + data.splice(position, 0, sourceNode) + } else { + if (item.children) { + if (item.children.some((e) => e.id === targetItemId)) { + const index = item.children.findIndex((i) => i.id === targetItemId) + const position = dropDividerPosition === 'down' ? index + 1 : index + item.children.splice(position, 0, sourceNode) + } else { + switchNode(targetItemId, sourceItemId, item.children, allData, dropDividerPosition) } } - data.hasExpanded = defaultExpandedArr } - } - - if (props.data && props.checkedIds) { - data.all = getAll(props.data, props.checkedIds) - } + }) + }, []) - return data - } + const addDropNode = useCallback((targetItemId, sourceItemId, data, allData) => { + data.forEach((d, index) => { + if (d.id === targetItemId) { + const sourceNode = findNode(sourceItemId, allData) + if (!d.children) { + d.children = [] + } + d.children.push(sourceNode) + } else { + if (d.children) { + addDropNode(targetItemId, sourceItemId, d.children, allData) + } + } + }) + }, []) + // 删除拖动的节点 + const _delDragNode = useCallback((itemId, data) => { + data.forEach((d, index) => { + if (d.id === itemId) { + data.splice(index, 1) + } else { + if (d.children) { + _delDragNode(itemId, d.children) + } + } + }) + }, []) - onCheckChange = (checked, item) => { - const { onChange, checkedIds, onCheckChange, onCheck } = this.props - let checkedArr = checkedIds - - let { all } = this.state - let semiChecked = all.filter(item => item.semi).map(item => item.id) - let disabledKeys = all.filter(item => item.disabled).map(item => item.id) - let myself = all.find(a => a.id === item.id) - let children = myself.child - let parent = myself.parent - if (semiChecked.includes(item.id)) { - children.forEach(child => { - checkedArr = checkedArr.filter(c => c !== child) - }) - checkedArr = checkedArr.filter(c => c !== item.id) - } else { - if (checked) { - checkedArr = checkedArr.filter(c => c !== item.id) - children.forEach(child => { - checkedArr = checkedArr.filter(c => c !== child) - }) - parent.forEach(p => { - checkedArr = checkedArr.filter(c => c !== p) - }) + const moveNode = useCallback( + ({ targetId, sourceId, direction, depth }) => { + const _dataCache = _.cloneDeep(cacheData) + _delDragNode(sourceId, _dataCache) + if (direction === 'in') { + addDropNode(targetId, sourceId, _dataCache, cacheData) } else { - checkedArr = checkedArr.concat(children) - checkedArr.push(item.id) - parent.forEach(p => { - let par = all.find(a => a.id === p).child - let bool = true - par.forEach(p => { - if (!checkedArr.includes(p)) { - bool = false + switchNode(targetId, sourceId, _dataCache, cacheData, direction) + } + if (onDrop) { + const sourceNode = findNode(sourceId, cacheData) + const dragNode = findNode(targetId, cacheData) + const result = onDrop( + sourceNode, + dragNode, + { before: cacheData, after: _dataCache }, + { before: depth.source, after: direction === 'in' ? depth.target + 1 : depth.target } + ) + if (result === true) { + updateCacheData(_dataCache) + if (onDropEnd) { + onDropEnd(sourceNode, dragNode) + } + } else if (result && typeof result.then === 'function') { + result.then((res) => { + updateCacheData(_dataCache) + if (onDropEnd) { + onDropEnd(sourceNode, dragNode) } }) - bool && checkedArr.push(p) - }) + } + } else { + updateCacheData(_dataCache) } - } + }, + [cacheData, _delDragNode, addDropNode, switchNode, onDrop, onDropEnd] + ) - disabledKeys.forEach(d => { - checkedArr = checkedArr.filter(c => c !== d.id) - }) + // 编辑节点 + const editNode = (node) => { + setEditingNodes(editingNodes.concat(node)) + } + // 同步编辑值 + const onValueChange = useCallback( + (value, nodeId) => { + setEditingNodes( + editingNodes + .filter((n) => n.id !== nodeId) + .concat( + Object.assign( + {}, + editingNodes.find((n) => n.id === nodeId), + { + title: value + } + ) + ) + ) + }, + [editingNodes] + ) + // 取消编辑 + const cancelEdit = useCallback( + (nodeId) => { + setEditingNodes(editingNodes.filter((n) => n.id !== nodeId)) + }, + [editingNodes] + ) - parent.forEach(p => { - let child = all.find(item => item.id === p).child - let semi = false - let num = 0 - checkedArr.forEach(c => { - if (child.includes(c)) { - num = num + 1 + // 添加兄弟节点 + const _addSibNode = useCallback((node, data, addNode) => { + data.forEach((d, index) => { + if (d.id === node.id) { + data.splice(index + 1, 0, addNode) + } else { + if (d.children) { + _addSibNode(node, d.children, addNode) } - }) + } + }) + }, []) - semi = num !== 0 && num !== child.length + const addSiblingNode = useCallback( + (node) => { + const dataCache = _.cloneDeep(cacheData) + const addNode = { id: uuidv4(), title: '', TREE_NODE_TYPE: 'add' } + _addSibNode(node, dataCache, addNode) + setEditingNodes(editingNodes.concat(addNode)) + updateCacheData(dataCache) + }, + [cacheData, editingNodes, _addSibNode] + ) - if (semi) { - if (!semiChecked.includes(p)) { - semiChecked.push(p) + // 添加子节点 + const _addChildNode = useCallback((node, data, addNode) => { + data.forEach((d, index) => { + if (d.id === node.id) { + if (!d.children) { + d.children = [] } + d.children.push(addNode) } else { - semiChecked = semiChecked.filter(s => s !== p) + if (d.children) { + _addChildNode(node, d.children, addNode) + } } }) + }, []) + const addChildNode = useCallback( + (node) => { + const dataCache = _.cloneDeep(cacheData) + const addNode = { id: uuidv4(), title: '', TREE_NODE_TYPE: 'add' } + _addChildNode(node, dataCache, addNode) + setEditingNodes(editingNodes.concat(addNode)) + updateCacheData(dataCache) + setExpanded(expanded.concat(node.id)) + }, + [editingNodes, cacheData, _addChildNode, expanded] + ) - onChange && onChange(checkedArr, item.title, !checked, semiChecked) - onCheckChange && onCheckChange(checkedArr, item.title, !checked, semiChecked) - onCheck && onCheck(checkedArr, item, !checked, semiChecked) - } - - // 展开、收起节点 - onExpanded = (expanded, item) => { - let expandedArr = [...this.state.hasExpanded] - - if (expandedArr.includes(item.id)) { - expandedArr.splice(expandedArr.indexOf(item.id), 1) - } else { - expandedArr.push(item.id) - } - this.setState({ - hasExpanded: expandedArr + // 取消添加节点 + const _cancelAddNode = (node, data) => { + data.forEach((d, index) => { + if (d.id === node.id) { + data.splice(index, 1) + } else { + if (d.children) { + _cancelAddNode(node, d.children) + } + } }) - this.props.onExpand && this.props.onExpand(expanded, expandedArr, item) } - // 展开节点 - expandTreeNode = id => { - const _hasExpanded = [...this.state.hasExpanded] - if (!_hasExpanded.includes(id)) { - _hasExpanded.push(id) - this.setState({ - hasExpanded: _hasExpanded - }) - } - } - setExpandTreeNodes = ids => { - this.setState({ - hasExpanded: ids + const cancelAddNode = useCallback( + (node) => { + const dataCache = _.cloneDeep(cacheData) + _cancelAddNode(node, dataCache) + updateCacheData(dataCache) + }, + [cacheData, _cancelAddNode] + ) + // 保存 + const _saveEdit = (itemId, data, nodeEdited) => { + data.forEach((d, index) => { + if (d.id === itemId) { + d.title = nodeEdited.title + delete d.TREE_NODE_TYPE + } else { + if (d.children) { + _saveEdit(itemId, d.children, nodeEdited) + } + } }) } - closeExpandedTreeNode = id => { - this.setState({ - hasExpanded: this.state.hasExpanded.filter(expandId => expandId !== id) + const saveEdit = useCallback( + (enode) => { + const nodeEdited = { ...editingNodes.find((node) => node.id === enode.id) } + const dataCache = _.cloneDeep(cacheData) + _saveEdit(enode.id, dataCache, nodeEdited) + if (onBeforeSave) { + const result = onBeforeSave(nodeEdited, { before: cacheData, after: dataCache }, enode.depth) + if (result === true) { + updateCacheData(dataCache) + onSave(nodeEdited, dataCache) + } + } else { + updateCacheData(dataCache) + onSave(enode, dataCache) + } + setEditingNodes(editingNodes.filter((n) => n.id !== enode.id)) + }, + [editingNodes, cacheData, _saveEdit] + ) + + // 删除节点 + const _deleteNode = (itemId, data) => { + data.forEach((d, index) => { + if (d.id === itemId) { + data.splice(index, 1) + } else { + if (d.children) { + _deleteNode(itemId, d.children) + } + } }) } - render () { - const { - prefixCls, - checkable, - closeIcon, - openIcon, - highlightable, - editable, - searchable, - draggable, - style, - loadTreeNode, - onDragStart, - onDrop, - onDropEnd, - onDelete, - onBeforeDelete, - onSave, - onBeforeSave, - onClick, - apperance, - contextMenu, - defaultHighlightId, - theme - } = this.props - const { data } = this.state - return ( - <div - className={classNames(`${prefixCls}`, `theme__${theme}`, { 'hi-tree--show-line': apperance === 'line' })} - style={style} - > - <TreeNode - origin={loadTreeNode} - showLine={apperance === 'line'} - apperance={apperance} - checked={this.props.checkedIds || []} - onClick={onClick} - semiChecked={this.state.all.filter(item => item.semi).map(item => item.id)} - expanded={this.state.hasExpanded} - closeExpandedTreeNode={this.closeExpandedTreeNode} - expandTreeNode={this.expandTreeNode} - setExpandTreeNodes={this.setExpandTreeNodes} - onCheckChange={this.onCheckChange} - onExpanded={this.onExpanded} - data={data} - theme={theme} - prefixCls={prefixCls} - checkable={checkable} - highlightable={highlightable} - defaultHighlightId={defaultHighlightId} - editable={editable} + const deleteNode = useCallback( + (node) => { + const dataCache = _.cloneDeep(cacheData) + _deleteNode(node.id, dataCache) + if (onBeforeDelete) { + const result = onBeforeDelete(node, { before: cacheData, after: dataCache }, node.depth) + if (result === true) { + updateCacheData(dataCache) + onDelete(node, dataCache) + } + } else { + updateCacheData(dataCache) + onDelete(node, dataCache) + } + }, + [cacheData, _deleteNode] + ) + + const menuRender = useCallback( + (node) => { + let menu = [ + { title: localMap.edit, type: 'editNode' }, + { title: localMap.addChildNode, type: 'addChildNode' }, + { title: localMap.addNode, type: 'addSiblingNode' }, + { title: localMap.del, type: 'deleteNode' } + ] + if (contextMenu) { + menu = contextMenu(node) + } + return ( + <ul className={`${PREFIX}__menu theme__${theme}`}> + {menu.map((m, index) => ( + <li + className={`menu-item`} + key={index} + onClick={(e) => { + e.stopPropagation() + if (m.onClick) { + m.onClick(node) + } else { + if (m.type === 'editNode') { + editNode(node) + } + if (m.type === 'addSiblingNode') { + addSiblingNode(node) + } + if (m.type === 'addChildNode') { + addChildNode(node) + } + if (m.type === 'deleteNode') { + setModalVisible(node) + } + } + setMenuVisible(null) + }} + > + {m.title} + </li> + ))} + </ul> + ) + }, + [editNode, addChildNode, addSiblingNode] + ) + + const treeNodeRender = useCallback( + (node, { selected }, treeNodeRef, onSelectNode) => { + return ( + <CustomTreeNode + node={node} + status={{ selected }} + onSelectNode={onSelectNode} + searchValue={searchValue} + editingNodes={editingNodes} + menuVisible={menuVisible} searchable={searchable} - openIcon={openIcon} - closeIcon={closeIcon} - draggable={draggable} - onDragStart={onDragStart} - onDrop={onDrop} - onDropEnd={onDropEnd} - onDelete={onDelete} - onBeforeDelete={onBeforeDelete} - onSave={onSave} - onBeforeSave={onBeforeSave} - contextMenu={contextMenu} + onValueChange={onValueChange} + saveEdit={saveEdit} + cancelEdit={cancelEdit} + cancelAddNode={cancelAddNode} + setMenuVisible={setMenuVisible} + editable={editable} + menuRender={menuRender} + localeDatas={localeDatas} /> - </div> - ) - } -} - -const HOCTree = TreeComponent => { - return class WrapperTree extends Component { - render () { - const { draggable } = this.props - const DraggableTree = withDragDropContext(Tree) - return draggable ? <DraggableTree {...this.props} /> : <TreeComponent {...this.props} /> - } - } + ) + }, + [searchValue, editingNodes, menuVisible, searchable] + ) + return ( + <React.Fragment> + {searchable && ( + <div className={`${PREFIX}__searcher theme__${theme}`}> + <Input + value={searchValue} + type="text" + placeholder={placeholder} + onChange={(e) => { + const matchedNodes = getMatchedNodes(cacheData, e.target.value) + let filteredNodes = [] + matchedNodes.forEach((node) => { + const ancestors = getAncestorIds(node.id, cacheData, []) + filteredNodes = filteredNodes.concat(ancestors) + }) + setSearchValue(e.target.value) + setMatchedNodes(matchedNodes) + setFilteredIds(_.uniq(filteredNodes)) + setExpanded(_.uniq(filteredNodes)) + }} + append={<Button icon="search" />} + style={{ width: '250px', marginBottom: '24px' }} + /> + {matchedNodes.length === 0 && searchValue !== '' && ( + <div className="searcher__result--empty">{emptyContent}</div> + )} + </div> + )} + <BaseTree + {...props} + className={`theme__${theme}`} + onLoadChildren={onLoadChildren ? loadChildren : null} + treeNodeRender={treeNodeRender} + expandedIds={expanded} + onExpand={(expandedNode, isExpanded, ids) => { + setExpanded(ids) + if (onExpand) { + onExpand(expandedNode, isExpanded, ids) + } + }} + onDrop={moveNode} + onDragStart={onDragStart} + data={filter && searchable && searchValue !== '' ? showData : cacheData} + /> + <Modal + title={localMap.modalTitle} + visible={modalVisible !== null} + onConfirm={() => { + deleteNode(modalVisible) + setModalVisible(null) + }} + onCancel={() => { + setModalVisible(null) + }} + > + {localMap.delTips} + </Modal> + </React.Fragment> + ) } -export default HOCTree(Tree) +export default Provider(Tree) diff --git a/components/tree/TreeDivider.js b/components/tree/TreeDivider.js deleted file mode 100644 index 98a598f60..000000000 --- a/components/tree/TreeDivider.js +++ /dev/null @@ -1,18 +0,0 @@ -import React from 'react' -import ClassNames from 'classnames' -const TreeDivider = props => { - return ( - <div - className={ClassNames( - 'hi-tree__divider', - `theme__${props.theme}`, - `hi-tree__divider--${props.placement}` - )} - > - <div className='divider-circle' /> - <div className='divider-line' /> - </div> - ) -} - -export default TreeDivider diff --git a/components/tree/TreeNode.jsx b/components/tree/TreeNode.jsx new file mode 100644 index 000000000..1f5f9b1c5 --- /dev/null +++ b/components/tree/TreeNode.jsx @@ -0,0 +1,230 @@ +import React, { useContext, useState, useRef, useCallback } from 'react' +import Checkbox from '../checkbox' +import Icon from '../icon' + +import Classnames from 'classnames' +import TreeContext from './context' + +import Loading from './IconLoading' +const switcherApperanceMap = { + default: ['caret-right', 'caret-down'], + folder: ['folder', 'folder-open'], + line: ['plus-square', 'minus-square'] +} + +const TreeNode = ({ node }) => { + const { + treeNodeRender, + checkable, + checkedNodes, + semiCheckedIds, + onSelectNode, + selectedId, + onCheckNode, + expandedNodeIds, + onExpandNode, + draggable, + onLoadChildren, + apperance = 'default', + onDragStart, + onDragOver, + onDrop, + onDragEnd + } = useContext(TreeContext) + const [direction, setDirection] = useState(null) + const [dragId, setDragId] = useState(null) + + const treeNodeRef = useRef(null) + + const [loading, setLoading] = useState(false) + + // 渲染 apperance 占位 + const renderApperancePlaceholder = useCallback((apperance) => { + if (apperance === 'folder') { + return <Icon name="file" style={{ marginRight: 8 }} /> + } + }, []) + // 渲染展开收起 + const renderSwitcher = useCallback( + (expandedIds, node, onExpandNode, onLoadChildren) => { + const expanded = expandedIds.includes(node.id) + return loading ? ( + <Loading /> + ) : ( + <Icon + style={{ cursor: 'pointer', marginRight: 8, fontSize: 16 }} + name={expanded ? switcherApperanceMap[apperance][1] : switcherApperanceMap[apperance][0]} + onClick={() => { + if (onLoadChildren && !node.children) { + setLoading(true) + onLoadChildren(node).then( + (res) => { + setLoading(false) + onExpandNode(node, !expanded, expandedIds) + }, + () => { + setLoading(false) + } + ) + } else { + onExpandNode(node, !expanded, expandedIds) + } + }} + /> + ) + }, + [loading, setLoading, apperance] + ) + // 渲染空白占位 + const renderIndent = useCallback((times, isSiblingLast, ancestors) => { + const isAncestorSiblingLast = [] + if (ancestors) { + ancestors.forEach((a, idx) => { + if (idx < ancestors.length - 1) { + isAncestorSiblingLast.push(a.id === ancestors[idx + 1].children[ancestors[idx + 1].children.length - 1].id) + } + }) + } + const _isAncestorSiblingLast = isAncestorSiblingLast.reverse() + return Array(times) + .fill('') + .map((indent, index) => { + return ( + <span key={index} style={{ alignSelf: 'stretch' }} id={index}> + <span + className={Classnames('tree-node__indent', { + 'tree-node__indent--parent-tail': _isAncestorSiblingLast[index] && index !== times - 1, + 'tree-node__indent--tail': isSiblingLast && times - 1 === index + })} + /> + </span> + ) + }) + }, []) + + // 渲染复选框 + const renderCheckbox = useCallback((node, { checked, semiChecked }) => { + return ( + <Checkbox + indeterminate={semiChecked.includes(node.id)} + checked={checked.includes(node.id)} + disabled={node.disabled} + onChange={(e) => { + onCheckNode(node, e.target.checked, checked) + }} + /> + ) + }, []) + + // 渲染标题 + const renderTitle = useCallback( + (node, selectedId) => { + const { id, title, depth } = node + return ( + <div + ref={treeNodeRef} + draggable={!node.disabled && draggable} + className={Classnames('tree-node__title', { + [`tree-node__title--${direction}`]: direction, + [`tree-node__title--draggable`]: draggable, + [`tree-node__title--disabled`]: node.disabled + })} + onDragStart={(e) => { + e.stopPropagation() + e.dataTransfer.setData('treeNode', JSON.stringify({ id, depth })) + setDragId(id) + if (onDragStart) { + onDragStart(node) + } + }} + onDragEnd={(e) => { + e.preventDefault() + e.stopPropagation() + e.dataTransfer.clearData() + setDragId(null) + if (onDragEnd) { + onDragEnd(e) + } + }} + onDragLeave={(e) => { + e.preventDefault() + e.stopPropagation() + setDirection(null) + }} + onDragOver={(e) => { + e.preventDefault() + e.stopPropagation() + if (dragId !== id) { + const targetBoundingRect = treeNodeRef.current.getBoundingClientRect() + const hoverTargetSortY = (targetBoundingRect.bottom - targetBoundingRect.top) / 3 + const hoverTargetInsideY = hoverTargetSortY * 2 + // 鼠标垂直移动距离 + const hoverClientY = e.clientY - targetBoundingRect.top + + if (hoverClientY < hoverTargetSortY) { + setDirection('up') + } else if (hoverClientY >= hoverTargetSortY && hoverClientY < hoverTargetInsideY) { + setDirection('in') + } else { + setDirection('down') + } + } + if (onDragOver) { + onDragOver(e) + } + }} + onDrop={(e) => { + e.preventDefault() + e.stopPropagation() + setDirection(null) + if (onDrop && dragId !== id) { + const passedData = JSON.parse(e.dataTransfer.getData('treeNode')) + onDrop({ + targetId: id, + sourceId: Number(passedData.id), + depth: { source: passedData.depth, target: depth }, + direction + }) + } + }} + > + {treeNodeRender ? ( + treeNodeRender(node, { selected: selectedId === id }, treeNodeRef, onSelectNode) + ) : ( + <div + className={Classnames('title__text', { + 'title__text--selected': selectedId === id + })} + onClick={() => { + onSelectNode(node) + }} + > + {title} + </div> + )} + </div> + ) + }, + [treeNodeRef, draggable, treeNodeRender, direction, dragId] + ) + return ( + <li className={Classnames('tree-node', { 'tree-node--line': apperance === 'line' })}> + {renderIndent( + (node.children && node.children.length) || (onLoadChildren && !node.isLeaf && !node.children) + ? node.depth + : apperance !== 'default' + ? node.depth + : (node.depth && node.depth + 1) || 1, + node.id === (node.sibling && node.sibling[node.sibling.length - 1].id), + node.ancestors + )} + {(!node.children || (onLoadChildren && node.isLeaf)) && renderApperancePlaceholder(apperance)} + {((node.children && node.children.length) || (onLoadChildren && !node.isLeaf && !node.children)) && + renderSwitcher(expandedNodeIds, node, onExpandNode, onLoadChildren)} + {checkable && renderCheckbox(node, { checked: checkedNodes, semiChecked: semiCheckedIds })} + {renderTitle(node, selectedId)} + </li> + ) +} + +export default TreeNode diff --git a/components/tree/context.jsx b/components/tree/context.jsx new file mode 100644 index 000000000..056b3bcc2 --- /dev/null +++ b/components/tree/context.jsx @@ -0,0 +1,5 @@ +import React from 'react' + +const TreeContext = React.createContext() + +export default TreeContext diff --git a/components/tree/customTreeNode.jsx b/components/tree/customTreeNode.jsx new file mode 100644 index 000000000..474b24b75 --- /dev/null +++ b/components/tree/customTreeNode.jsx @@ -0,0 +1,130 @@ +import React, { useRef } from 'react' +import Input from '../input' +import Popper from '../popper' +import Classnames from 'classnames' + +const CustomTreeNode = ({ + node, + status: { selected }, + onSelectNode, + searchValue, + editingNodes, + menuVisible, + searchable, + onValueChange, + saveEdit, + cancelEdit, + cancelAddNode, + setMenuVisible, + editable, + menuRender, + localeDatas +}) => { + const ref = useRef(null) + const localMap = localeDatas.tree || {} + + if (editingNodes.map((n) => n.id).includes(node.id)) { + return ( + <div className="tree-node__title--editing"> + <Input + style={{ width: 240, marginRight: 20 }} + value={(editingNodes.find((n) => n.id === node.id) || {}).title} + onChange={(e) => { + onValueChange(e.target.value, node.id) + }} + /> + <span + className={Classnames('save-btn', { + 'save-btn-disabled': (editingNodes.find((n) => n.id === node.id) || {}).title === '' + })} + onClick={() => { + if ((editingNodes.find((n) => n.id === node.id) || {}).title === '') { + return + } + saveEdit(node) + }} + > + {localMap.confirm} + </span> + <span + style={{ cursor: 'pointer', color: '#999' }} + onClick={() => { + cancelEdit(node.id) + if (node.TREE_NODE_TYPE === 'add') { + cancelAddNode(node) + } + }} + > + {localMap.cancel} + </span> + </div> + ) + } else { + if (searchValue !== '' && searchable && typeof node.title === 'string' && node.title.includes(searchValue)) { + const index = node.title.indexOf(searchValue) + const beforeStr = node.title.substr(0, index) + const afterStr = node.title.substr(index + searchValue.length) + return ( + <div + ref={ref} + className={Classnames('title__text', { + 'title__text--selected': selected + })} + onClick={() => { + onSelectNode(node) + }} + onContextMenu={(e) => { + if (editable) { + e.preventDefault() + setMenuVisible(node.id) + } + }} + > + <span> + {beforeStr} + <span className="title__text--matched">{searchValue}</span> + {afterStr} + </span> + </div> + ) + } else { + return ( + <div + ref={ref} + className={Classnames('title__text', { + 'title__text--selected': selected + })} + onClick={() => { + if (!node.disabled) { + onSelectNode(node) + } + }} + onContextMenu={(e) => { + if (editable && !node.disabled) { + e.preventDefault() + setMenuVisible(node.id) + } + }} + > + {node.title} + {editable && ( + <Popper + show={menuVisible === node.id} + attachEle={ref.current} + width={false} + zIndex={1040} + placement="right-start" + onClickOutside={() => { + setMenuVisible(null) + }} + > + {menuRender(node)} + </Popper> + )} + </div> + ) + } + } +} + +export default CustomTreeNode diff --git a/components/tree/hooks/useCheckable.js b/components/tree/hooks/useCheckable.js new file mode 100644 index 000000000..6e04b1a77 --- /dev/null +++ b/components/tree/hooks/useCheckable.js @@ -0,0 +1,104 @@ +import { useState, useEffect, useCallback } from 'react' +import { getChildrenIds, getAncestorIds, findNode } from '../util' +import _ from 'lodash' + +const useCheckable = ({ defaultCheckedIds, checkedIds, onCheck, data, flatData }) => { + const currentCheckedIds = checkedIds || defaultCheckedIds || [] + const [_checkedIds, setCheckedIds] = useState(currentCheckedIds) + + useEffect(() => { + if (checkedIds) { + setCheckedIds(checkedIds) + } + }, [checkedIds]) + + const getSemiChecked = (checkedId, flatData, data) => { + const semiChecked = [] + flatData.forEach((node) => { + if (node.parentId && !checkedId.includes(node.parentId) && checkedId.includes(node.id)) { + semiChecked.push(node.parentId) + } + }) + return _.uniq( + semiChecked + .map((s) => getAncestorIds(s, data)) + .concat(semiChecked) + .flat() + ) + } + + const onCheckNode = useCallback( + (checkedNode, checked, _checkedIds) => { + let semiCheckedIds = getSemiChecked(_checkedIds, flatData, data) + let checkedNodes = [..._checkedIds] + const children = getChildrenIds(checkedNode) + const ancestors = getAncestorIds(checkedNode.id, data) + if (checked) { + // 选中对后代的影响 + children.forEach((child) => { + if (!checkedNodes.includes(child)) { + checkedNodes.push(child) + } + if (semiCheckedIds.includes(child)) { + semiCheckedIds = semiCheckedIds.filter((id) => id !== child) + } + }) + checkedNodes.push(checkedNode.id) + semiCheckedIds = semiCheckedIds.filter((id) => id !== checkedNode.id) + // 选中对所有父辈的影响 + ancestors.forEach((ancestor) => { + if ( + findNode(ancestor, data) + .children.map((child) => child.id) + .every((childId) => checkedNodes.includes(childId)) + ) { + semiCheckedIds = semiCheckedIds.filter((id) => id !== ancestor) + checkedNodes.push(ancestor) + } else { + semiCheckedIds.push(ancestor) + } + }) + } else { + // 不选中对祖先的影响 + ancestors.forEach((ancestor) => { + if (checkedNodes.includes(ancestor)) { + semiCheckedIds.push(ancestor) + } + checkedNodes = checkedNodes.filter((id) => id !== ancestor) + // 还要考虑这个不选中,父辈 semi 也没有了的情况 + let checkChildrenNum = 0 + const ancestorChildren = findNode(ancestor, data).children.map((child) => child.id) + ancestorChildren.forEach((childId) => { + if (checkedNodes.includes(childId)) { + checkChildrenNum = checkChildrenNum + 1 + } + }) + if (checkChildrenNum === 1) { + semiCheckedIds = semiCheckedIds.filter((id) => id !== ancestor) + } + }) + // 不选中对后代的影响 + children.forEach((child) => { + if (checkedNodes.includes(child)) { + checkedNodes = checkedNodes.filter((id) => id !== child) + } + if (semiCheckedIds.includes(child)) { + semiCheckedIds = semiCheckedIds.filter((id) => id !== child) + } + }) + checkedNodes = checkedNodes.filter((id) => id !== checkedNode.id) + } + + if (!checkedIds) { + setCheckedIds(checkedNodes) + } + if (onCheck) { + onCheck(checked, { checkedIds: checkedNodes, semiCheckedIds }, checkedNode) + } + }, + [checkedIds, flatData, data] + ) + return [{ checkedNodes: _checkedIds, semiCheckedIds: getSemiChecked(_checkedIds, flatData, data) }, onCheckNode] +} + +export default useCheckable diff --git a/components/tree/hooks/useClickOutside.js b/components/tree/hooks/useClickOutside.js new file mode 100644 index 000000000..ce3d57c2b --- /dev/null +++ b/components/tree/hooks/useClickOutside.js @@ -0,0 +1,17 @@ +import { useEffect } from 'react' + +const useClickOutside = (ref, callback) => { + const handleClick = e => { + if (ref.current && !ref.current.contains(e.target)) { + callback() + } + } + useEffect(() => { + document.addEventListener('click', handleClick) + return () => { + document.removeEventListener('click', handleClick) + } + }, []) +} + +export default useClickOutside diff --git a/components/tree/hooks/useExpand.js b/components/tree/hooks/useExpand.js new file mode 100644 index 000000000..d3e95ce40 --- /dev/null +++ b/components/tree/hooks/useExpand.js @@ -0,0 +1,31 @@ +import { useState, useEffect, useCallback } from 'react' + +const useSelect = ({ defaultExpandedIds, expandedIds, onExpand }) => { + const [_expandedIds, setExpandedId] = useState(expandedIds || defaultExpandedIds || []) + + useEffect(() => { + if (expandedIds) { + setExpandedId(expandedIds) + } + }, [expandedIds]) + + const onExpandNode = useCallback( + (expandedNode, isExpanded, epdIds) => { + const ids = [...epdIds] + if (expandedNode !== undefined && !expandedIds) { + setExpandedId(isExpanded ? ids.concat(expandedNode.id) : ids.filter((id) => id !== expandedNode.id)) + } + if (onExpand) { + onExpand( + expandedNode, + isExpanded, + isExpanded ? ids.concat(expandedNode.id) : ids.filter((id) => id !== expandedNode.id) + ) + } + }, + [expandedIds] + ) + return [_expandedIds, onExpandNode] +} + +export default useSelect diff --git a/components/tree/hooks/useFlatData.js b/components/tree/hooks/useFlatData.js new file mode 100644 index 000000000..363a6256e --- /dev/null +++ b/components/tree/hooks/useFlatData.js @@ -0,0 +1,33 @@ +import { useState, useEffect } from 'react' +import _ from 'lodash' +import { getAncestors } from '../util' +const transformData = (_data) => { + for (let i = 0; i < _data.length; i++) { + if (!_data[i].depth) { + _data[i].depth = 0 + } + if (_data[i].children) { + const _children = _data[i].children.map((child) => { + child.depth = _data[i].depth + 1 + child.parentId = _data[i].id + child.sibling = _data[i].children + child.parent = _data[i] + child.ancestors = getAncestors(child.id, _data) + return child + }) + _data.splice(i + 1, 0, ..._children) + } + } +} +const useFlatData = (data) => { + const [flatData, setFlatData] = useState(data) + useEffect(() => { + const _data = _.cloneDeep(data) + transformData(_data) + setFlatData(_data) + }, [data]) + + return [flatData, setFlatData] +} + +export default useFlatData diff --git a/components/tree/hooks/useSelect.js b/components/tree/hooks/useSelect.js new file mode 100644 index 000000000..bf49efbed --- /dev/null +++ b/components/tree/hooks/useSelect.js @@ -0,0 +1,28 @@ +import { useState, useEffect, useCallback } from 'react' + +const useSelect = ({ defaultSelectedId, selectedId, onSelect, selectable }) => { + const [_selectedId, setSelectedId] = useState((selectable && selectedId) || (selectable && defaultSelectedId) || null) + + useEffect(() => { + if (selectable && selectedId) { + setSelectedId(selectedId) + } + }, [selectedId, selectable]) + + const onSelectNode = useCallback( + (selectedNode) => { + if (selectable) { + if (selectedNode !== undefined && !selectedId) { + setSelectedId(selectedNode.id) + } + if (onSelect) { + onSelect(selectedNode) + } + } + }, + [selectedId, selectable] + ) + return [_selectedId, onSelectNode] +} + +export default useSelect diff --git a/components/tree/index.d.ts b/components/tree/index.d.ts new file mode 100644 index 000000000..e389048b8 --- /dev/null +++ b/components/tree/index.d.ts @@ -0,0 +1,55 @@ +type TreeNode = { + id: string | number + title: string | JSX.Element + disabled?: boolean + children?: TreeNode[] +} +type LoadTreeNode = { + method?: 'get' | 'post' + url: string + headers?: object + data?: object + params?: object + transformResponse: (response: object) => TreeNode[] +} +type ContextMenuOption = { + type?: 'editNode' | 'addChildNode' | 'addSiblingNode' | 'deleteNode' + title?: string | JSX.Element + onClick?: (item: TreeNode, node: TreeNode) => void +} +const LoadTreeNodeFun: (id: stsring) => TreeNode +const ContextMenuOptionFun: (item: TreeNode) => ContextMenuOption[] + +type DataStatus = { + before: TreeNode[] + after: TreeNode[] +} +interface Props { + data: TreeNode[] + checkable?: boolean + editable?: boolean + draggable?: boolean + searchable?: boolean + selectable?: boolean + defaultExpandAll?: boolean + defaultHighlightId?: boolean + loadTreeNode?: LoadTreeNode | LoadTreeNodeFun + checkedIds?: string[] + openIcon?: string + closeIcon?: string + apperance?: 'default' | 'line' | 'folder' + contextMenu?: ContextMenuOption[] | ContextMenuOptionFun + onChange?: (data: TreeNode[]) => void + onExpand?: (expanded: boolean, expandIds: string[], expandedNode: TreeNode) => void + onCheck?: (checked: boolean, checkedIds: string[], checkedNode: TreeNode) => void + onClick?: (clickNode: TreeNode) => void + onDragStart?: (dragNode: TreeNode) => void + onDrop?: (dragNode: TreeNode, dropNode: TreeNode) => boolean + onDropEnd?: (dragNode: TreeNode, dropNode: TreeNode) => void + onBeforeDelete?: (deletedNode: TreeNode, data: DataStatus, level: number) => boolean + onDelete?: (deletedNode: TreeNode, data: TreeNode[]) => void + onBeforeSave?: (savedNode: TreeNode, data: DataStatus, level: number) => boolean + onSave?: (savedNode: TreeNode, data: TreeNode[]) => void +} +declare const Tree: React.ComponentType<Props> +export default Tree diff --git a/components/tree/index.js b/components/tree/index.js deleted file mode 100644 index 840e2bb9a..000000000 --- a/components/tree/index.js +++ /dev/null @@ -1,5 +0,0 @@ -import Tree from './Tree' -import TreeLegacy from './tree-legacy/index' -import SwitchVersion from '../_util/SwitchVersion' -import Provider from '../context' -export default SwitchVersion(Provider(Tree), TreeLegacy) diff --git a/components/tree/index.jsx b/components/tree/index.jsx new file mode 100644 index 000000000..25955c0dc --- /dev/null +++ b/components/tree/index.jsx @@ -0,0 +1,5 @@ +import LegacyTree from './tree-legacy/tree-v2' +import Tree from './Tree' + +export default Tree +export { LegacyTree } diff --git a/components/tree/style/index.scss b/components/tree/style/index.scss index 670dd8457..71dcebe45 100644 --- a/components/tree/style/index.scss +++ b/components/tree/style/index.scss @@ -1,594 +1,213 @@ -@import '@hi-ui/core-css/index.scss'; -$tree: 'hi-tree' !default; - -.hi-tree { - font-size: 14px; - - @include component-reset(); - - color: #383e47; +@import '../../core-css/index.scss'; - /* TODO: The following style does not fully restore ui, so commented =========== */ - // &:not(.hi-tree--show-line) { - // li:not(.is-root):not(.no-expanded) { - // margin-top: 10px; - // } +$tree: 'hi-tree' !default; - // .is-root { - // margin-bottom: 10px; - // } - // } +.#{$tree}__menu { + background: use-color('white'); + width: 120px; + box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.1); + border-radius: 2px; + padding: 4px 0; + margin: 0 0 0 4px; + font-size: $font-size-normal; - /* =========== */ - .hi-checkbox-legacy { - margin-left: 6px; - } + li.menu-item { + list-style: none; + padding: 0 15px; + height: 36px; + line-height: 36px; + transition: background 0.3s; + cursor: pointer; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; - .hi-checkbox-legacy--part .hi-checkbox-legacy__input { - border: 1px solid #4284f5; + &:hover { + background: use-color('primary-20'); + } } +} - .hi-checkbox-legacy--checked:not(.hi-checkbox-legacy--disabled) .hi-checkbox-legacy__input { - border: 1px solid #4284f5; - } +.#{$tree} { + color: use-color('gray-80'); - .hi-tree__searcher { + &__searcher { position: relative; - padding-left: 15px; - margin-bottom: 24px; - .hi-tree__searcher--empty { + .searcher__result--empty { position: absolute; + left: 24px; top: 34px; - color: #999; - left: 39px; font-size: 12px; + color: use-color('gray-70'); } + } - .hi-input__inner { - flex: 1; - } - - .hi-input--append { - line-height: 32px; + ul { + list-style-type: none; + padding: 0; + margin: 0; + } - .hi-input__append { - width: 32px; - height: 30px; - border-radius: 2px 0 0 2px; - border: 1px solid rgba(216, 216, 216, 1); - border-left: none; - text-align: center; - } - } + ul:not(.root-list) { + padding: 0 16px; } - .hi-tree__divider { - position: absolute; + .tree-node { display: flex; - width: 100%; align-items: center; + padding-bottom: 4px; - &--top { - top: 0; - } - - &--inner { - bottom: -2px; - } - - &--bottom { - bottom: 0; - } + .hi-btn--loading--icon { + margin-top: -6px; - .divider-line { - flex: 1; - height: 1px; - background-color: rgba(66, 132, 245, 1); + svg { + fill: use-color('primary'); + } } - .divider-circle { - flex: 0 0 5px; - height: 5px; - border: 1px solid rgba(66, 132, 245, 1); - border-radius: 2.5px; - box-sizing: border-box; + &__indent { + width: 24px; + height: 100%; + display: inline-block; } - } - - &.hi-tree--show-line { - li { - & > ul { - position: relative; - - &::after { - position: absolute; - top: 0; - left: -10px; - width: 1px; - height: 100%; - background: #c8c8c8; - content: ''; - } - } - - &.is-root { - > .item__wrapper { - &::before { - display: none; - } - - &::after { - display: none; - } - } - - & > ul { - position: relative; - &::after { - display: none; - } - } - - &:not(:last-of-type) { - > ul { - > li { - &:last-of-type { - > ul { - &::after { - display: block; - height: calc(100% + 4px); - } - } - - > .item__wrapper { - &::after { - position: absolute; - top: -4px; - left: -10px; - height: calc(100% + 8px); - width: 1px; - background: #c8c8c8; - content: ''; - } - } - } - } - } - - &.no-expanded { - &::before { - position: absolute; - top: calc(50% + 5px); - left: 9px; - width: 1px; - height: calc(50% - 5px); - background: #c8c8c8; - content: ''; - } - } - } - - &:not(:first-of-type) { - &:not(.no-expanded) { - > .item__wrapper { - &::before { - position: absolute; - top: 1px; - left: 7px; - width: 1px; - height: calc(50% - 9px); - background: #c8c8c8; - content: ''; - display: block; - } - } - } - - &.no-expanded { - &::after { - position: absolute; - top: 0; - left: 9px; - width: 1px; - height: calc(50% - 11px); - background: #c8c8c8; - content: ''; - } - } - } - } + &--line { + position: relative; - &:last-of-type { - > .item__wrapper { + span:last-of-type { + .tree-node__indent { &::after { - position: absolute; - top: -4px; - left: -10px; - height: calc(50% + 2px); - width: 1px; - background: #c8c8c8; content: ''; - } - } - - & > ul { - &::after { - display: none; + position: absolute; + width: 50%; + height: 1px; + background-color: use-color('gray-70'); + left: calc(50% - 4px); + top: 50%; } } } - } - .item__wrapper { - .hi-checkbox-legacy { - height: 24px; - } + .tree-node__indent { + position: relative; - &.can-expand { &::before { - width: 10px; + content: ''; + position: absolute; + width: 1px; + height: calc(100% + 4px); + background-color: use-color('gray-70'); + left: 8px; } - } - &--expanded { - &.can-expand { - > .hi-tree_item-text { - padding-left: 8px; - - &::before { - position: absolute; - top: calc(50% + 8px); - left: -11px; - height: calc(50% - 4px); - width: 1px; - background: #c8c8c8; - content: ''; - } + &--parent-tail { + &::before { + content: none; } + } - > .editing { - position: relative; - - &::before { - position: absolute; - top: calc(50% + 7px); - left: -11px; - height: calc(50% - 2px); - width: 1px; - background: #c8c8c8; - content: ''; - } + &--tail { + &::before { + height: calc(50%); + content: '' !important; } } } - - &::before { - position: absolute; - left: -10px; - top: 50%; - height: 1px; - width: 14px; - background: #c8c8c8; - transform: translateY(-3px); - content: ''; - } - - &::after { - position: absolute; - top: -4px; - left: -10px; - height: calc(100% + 4px); - width: 1px; - background: #c8c8c8; - content: ''; - } } - } - ul { - padding-left: 15px; - } - - li { - position: relative; - padding: 2px; - - & > .item__wrapper { + &__title { display: flex; - align-items: center; - padding-bottom: 5px; - position: relative; - } + flex: 1; + border-radius: 1px; - .editing { - display: flex; - align-items: center; + .title__text { + height: $line-height-size-large; + line-height: $line-height-size-large; + font-size: $font-size-normal; + padding: 0 4px; + cursor: pointer; - .hi-input { - width: 240px; - margin-right: 20px; - } - } + &:hover { + background: use-color('primary-20'); + color: use-color('gray-80'); + } - .hi-checkbox-label { - display: none; - } + &--matched { + color: use-color('primary'); + } - &.switcher-none { - .#{$tree}-switcher { - cursor: default; + &--selected { + background: use-color('primary-40'); - &::after { - content: none; + &:hover { + background: use-color('primary-40'); + } } } - } - } - - &_item-text { - cursor: pointer; - display: inline-block; - vertical-align: middle; - padding: 0 4px; - position: relative; - line-height: 24px; - user-select: none; - - &.dragTo { - background-color: #4284f5; - } - - &.dragToGapBottom { - border-top: 1px solid #4284f5; - } - - &.dragToGapTop { - border-bottom: 1px solid #4284f5; - } - - &.has_checkbox { - width: calc(100% - 40px); - padding-left: 4px; - } - - transition: background 0.3s; - - &--disabled { - color: rgba(0, 0, 0, 0.25); - cursor: not-allowed; - } - - &:hover:not(.hi-tree_item-text--disabled) { - background-color: rgba(66, 133, 244, 0.08); - color: rgba(56, 62, 71, 1); - } - - &.dragging { - background-color: rgba(246, 246, 246, 1); - color: rgba(204, 204, 204, 1); - } - - &.highlight { - background-color: rgba(66, 133, 245, 0.2); - } - } - &_item-icon { - display: inline-block; - vertical-align: middle; - width: 18px; - cursor: pointer; - - .hi-tree-switcher { - color: #666; - font-size: 16px; - } - - .hi-tree__dot { - position: absolute; - width: 7px; - height: 7px; - border-radius: 3.5px; - background: #c8c8c8; - transform: translateY(-50%); - top: 50%; - left: 3.5px; - } - } - - .#{$tree} { - &-bar { - position: relative; - height: 20px; - line-height: 20px; + &--editing { + display: flex; + flex: 1; + align-items: center; - .#{$tree} { - &-switcher { - position: absolute; - left: 1px; - background: #fff; - padding: 6px 0; - font-size: 12px; - line-height: 1; - vertical-align: middle; - display: inline-block; + .save-btn { cursor: pointer; - } + margin-right: 12px; + color: use-color('primary'); - &-node { - display: inline-block; - padding: 2px 6px; - border-radius: 2px; - overflow: hidden; - vertical-align: middle; - - &[draggable='true'] { - -webkit-user-drag: element; - user-select: none; - cursor: pointer; + & + &--disabled { + cursor: not-allowed; + color: use-color('gray-70'); } - - label { - margin-left: 16px; - cursor: pointer; - } - } - // 虚拟checkbox - &-input { - display: none; } - &-input:checked + .#{$tree}-checkbox::after { - content: ''; + span { display: inline-block; - width: 8px; - height: 4px; - border: 2px solid #fff; - border-top: none; - border-right: none; - transform: rotate(-45deg) translate(6px, -4px); } + } - &-input:checked + .#{$tree}-checkbox { - background-color: #4284f5; - } + &--draggable { + border-top: 2px solid transparent; + border-bottom: 2px solid transparent; + } - &-checkbox { - width: 14px; - height: 14px; - border: 1px solid #d8d8d8; - display: inline-block; - vertical-align: middle; - } + &--disabled { + cursor: not-allowed; + color: use-color('gray-50'); - &-title { - display: inline-block; - margin-left: 4px; - vertical-align: middle; - user-select: none; + .title__text { + cursor: not-allowed; &:hover { - background-color: rgba(230, 247, 255, 1); + background: use-color('white'); + color: use-color('gray-50'); } - > * { - display: inline-block; + &--selected { + background: use-color('white'); + color: use-color('gray-50'); + + &:hover { + background: use-color('white'); + color: use-color('gray-50'); + } } } } - &.gap-bottom { - border-bottom-color: #f00; + &--up { + border-top: 2px solid use-color('primary'); } - &.gap-enter { - background-color: #ff0; + &--in { + background: use-color('primary'); + color: use-color('white'); } - &.gap-top { - border-top-color: #f00; + &--down { + border-bottom: 2px solid use-color('primary'); } } - - &-child { - overflow: hidden; - } - } -} - -.right-click-menu { - color: #333; - position: absolute; - // top: 0; - // left: calc(100% + 5px); - z-index: 1060; - // width: 120px; - background: #fff; - border: 1px solid #e6e7e8; - border-radius: 2px; - box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.1); - box-sizing: border-box; - padding: 0; - list-style: none; - margin: 0; - max-height: 240px; - overflow: auto; - - li { - padding: 0 15px; - height: 36px; - line-height: 36px; - transition: background 0.3s; - cursor: pointer; - text-overflow: ellipsis; - white-space: nowrap; - overflow: hidden; - - &:hover { - background: rgba(66, 133, 244, 0.08); - } - } -} - -@each $key, $value in $theme-colors { - .theme__#{$key}.#{$tree} { - .hi-checkbox-legacy--part .hi-checkbox-legacy__input { - border: 1px solid $value; - } - - .hi-checkbox-legacy__label.highlight { - color: $value; - } - - .hi-checkbox-legacy--checked .hi-checkbox-legacy__input { - border: 1px solid $value; - } - - .#{$tree}_item-text { - &:hover:not(.hi-tree_item-text--disabled) { - background-color: rgba($value, 0.08); - color: rgba(56, 62, 71, 1); - } - - &.dragTo { - background-color: $value; - } - - &.dragToGapBottom { - border-top: 1px solid $value; - } - - &.dragToGapTop { - border-bottom: 1px solid $value; - } - - &.highlight { - background-color: rgba($value, 0.2); - } - } - - .#{$tree}-bar { - &-input:checked + .#{$tree}-checkbox { - background-color: $value; - } - } - - .hi-tree__divider { - .divider-line { - background-color: $value; - } - - .divider-circle { - border: 1px solid $value; - } - } - } - - .theme__#{$key}.right-click-menu { - li:hover { - background-color: rgba($value, 0.15); - } } } diff --git a/components/tree/tree-legacy/TreeDivider.js b/components/tree/tree-legacy/TreeDivider.js deleted file mode 100644 index 3b3633e33..000000000 --- a/components/tree/tree-legacy/TreeDivider.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react' -import ClassNames from 'classnames' -const TreeDivider = props => { - return ( - <div - className={ClassNames( - 'hi-tree__divider', - `hi-tree__divider--${props.top ? 'top' : 'bottom'}` - )} - > - <div className='divider-circle' /> - <div className='divider-line' /> - </div> - ) -} - -export default TreeDivider diff --git a/components/tree/tree-legacy/Tree.js b/components/tree/tree-legacy/tree-v1/Tree.js similarity index 98% rename from components/tree/tree-legacy/Tree.js rename to components/tree/tree-legacy/tree-v1/Tree.js index 08fc5ba96..0110e3e6b 100644 --- a/components/tree/tree-legacy/Tree.js +++ b/components/tree/tree-legacy/tree-v1/Tree.js @@ -3,7 +3,7 @@ import classNames from 'classnames' import TreeNode from './TreeNode' import isEqual from 'lodash/isEqual' import { getAll, dealData } from './util' -import withDragDropContext from '../../lib/withDragDropContext' +import withDragDropContext from '../../../lib/withDragDropContext' import './style/index' diff --git a/components/tree/tree-legacy/tree-v1/TreeDivider.js b/components/tree/tree-legacy/tree-v1/TreeDivider.js new file mode 100644 index 000000000..77dc646fb --- /dev/null +++ b/components/tree/tree-legacy/tree-v1/TreeDivider.js @@ -0,0 +1,12 @@ +import React from 'react' +import ClassNames from 'classnames' +const TreeDivider = (props) => { + return ( + <div className={ClassNames('hi-tree__divider', `hi-tree__divider--${props.top ? 'top' : 'bottom'}`)}> + <div className="divider-circle" /> + <div className="divider-line" /> + </div> + ) +} + +export default TreeDivider diff --git a/components/tree/tree-legacy/TreeItem.js b/components/tree/tree-legacy/tree-v1/TreeItem.js similarity index 77% rename from components/tree/tree-legacy/TreeItem.js rename to components/tree/tree-legacy/tree-v1/TreeItem.js index b6af3cee3..54f2c8a3c 100644 --- a/components/tree/tree-legacy/TreeItem.js +++ b/components/tree/tree-legacy/tree-v1/TreeItem.js @@ -1,14 +1,14 @@ import React, { Component } from 'react' -import Checkbox from '../../table/checkbox/index' +import { CheckboxLegacy as Checkbox } from '../../../checkbox' import { DragSource, DropTarget } from 'react-dnd' -import Input from '../../input' +import Input from '../../../input' import { findDOMNode } from 'react-dom' import TreeDivider from './TreeDivider' const Types = { TreeNode: 'treeNode' } class TreeItem extends Component { - render () { + render() { const { editable, draggable, @@ -48,10 +48,8 @@ class TreeItem extends Component { } = this.props const treeItem = ( <li key={item.id}> - <div className='item--wrapper'> - {targetNode === item.id && dropDividerPosition === 'down' && isOver && ( - <TreeDivider top /> - )} + <div className="item--wrapper"> + {targetNode === item.id && dropDividerPosition === 'down' && isOver && <TreeDivider top />} { <span onClick={() => { @@ -62,8 +60,7 @@ class TreeItem extends Component { }} className={`${prefixCls}_item-icon`} > - {((item.children && item.children.length > 0) || (origin && !expanded)) && - renderSwitcher(expanded)} + {((item.children && item.children.length > 0) || (origin && !expanded)) && renderSwitcher(expanded)} </span> } {checkable ? ( @@ -71,7 +68,7 @@ class TreeItem extends Component { semi={semiChecked.includes(item.id)} checked={checked} onChange={() => onCheckChange(checked, item)} - onTitleClick={e => { + onTitleClick={(e) => { onNodeClick && onNodeClick(item) onClick && onClick(item) highlightable && onSetHighlight(item) @@ -81,12 +78,12 @@ class TreeItem extends Component { text={item.title} disabled={item.disabled} /> - ) : item.status === 'editable' || editNodes.map(node => node.id).includes(item.id) ? ( - <div className='editing'> + ) : item.status === 'editable' || editNodes.map((node) => node.id).includes(item.id) ? ( + <div className="editing"> <Input - placeholder='请输入菜单名称' - value={(editingNodes.find(node => node.id === item.id) || {}).title} - onChange={e => { + placeholder="请输入菜单名称" + value={(editingNodes.find((node) => node.id === item.id) || {}).title} + onChange={(e) => { onValueChange(e.target.value, item.id) }} /> @@ -101,7 +98,7 @@ class TreeItem extends Component { <span style={{ cursor: 'pointer' }} onClick={() => { - if (editNodes.map(node => node.id).includes(item.id)) { + if (editNodes.map((node) => node.id).includes(item.id)) { cancelEditNode(item.id) } else { cancelAddSiblingNode(item.id) @@ -115,16 +112,16 @@ class TreeItem extends Component { connectDragSource( <span style={item.style} - className={`${prefixCls}_item-text ${itemStyle} ${ - highlight === item.id ? 'highlight' : '' - } ${draggingNode === item.id ? 'dragging' : ''}`} - onContextMenu={e => { + className={`${prefixCls}_item-text ${itemStyle} ${highlight === item.id ? 'highlight' : ''} ${ + draggingNode === item.id ? 'dragging' : '' + }`} + onContextMenu={(e) => { if (editable) { e.preventDefault() showRightClickMenu(item) } }} - onClick={e => { + onClick={(e) => { closeRightClickMenu() onNodeClick && onNodeClick(item) onClick && onClick(item) @@ -134,24 +131,22 @@ class TreeItem extends Component { > {item.title} {renderRightClickMenu(item)} - {targetNode === item.id && dropDividerPosition === 'sub' && isOver && ( - <TreeDivider /> - )} + {targetNode === item.id && dropDividerPosition === 'sub' && isOver && <TreeDivider />} </span> ) ) : ( <span style={item.style} - className={`${prefixCls}_item-text ${itemStyle} ${ - highlight === item.id ? 'highlight' : '' - } ${draggingNode === item.id ? 'dragging' : ''}`} - onContextMenu={e => { + className={`${prefixCls}_item-text ${itemStyle} ${highlight === item.id ? 'highlight' : ''} ${ + draggingNode === item.id ? 'dragging' : '' + }`} + onContextMenu={(e) => { if (this.props.editable) { e.preventDefault() showRightClickMenu(item) } }} - onClick={e => { + onClick={(e) => { closeRightClickMenu() onNodeClick && onNodeClick(item) onClick && onClick(item) @@ -171,7 +166,7 @@ class TreeItem extends Component { } } const source = { - beginDrag (props) { + beginDrag(props) { // 开始拖拽前,如果已经展开,则需要收起 if (props.expanded) { props.closeExpandedTreeNode(props.item.id) @@ -179,7 +174,7 @@ const source = { props.onDragStart(props.item) return { sourceItem: props.item, originalExpandStatus: props.expanded } }, - endDrag (props, monitor) { + endDrag(props, monitor) { const dropResult = monitor.getDropResult() if (!dropResult) { const { removeTargetNode, removeDraggingNode } = props @@ -189,7 +184,7 @@ const source = { } } const target = { - drop (props, monitor) { + drop(props, monitor) { const { sourceItem, originalExpandStatus } = monitor.getItem() const { item: targetItem, @@ -204,7 +199,7 @@ const target = { if (monitor.isOver({ shallow: true })) { if ( sourceItem.id === targetItem.id || - (targetItem.children && targetItem.children.map(t => t.id).includes(sourceItem.id)) + (targetItem.children && targetItem.children.map((t) => t.id).includes(sourceItem.id)) ) { // 如果源节点就是目的节点或者源节点是目的节点的子节点(直系)再或者源节点是目的节点的父节点,那么什么都不做 // 如果什么都不做,原来展开则现在还展开 @@ -221,16 +216,9 @@ const target = { } } }, - hover (props, monitor, component) { + hover(props, monitor, component) { const { sourceItem } = monitor.getItem() - const { - item: targetItem, - setDraggingNode, - setTargetNode, - positionX, - positionY, - setPosition - } = props + const { item: targetItem, setDraggingNode, setTargetNode, positionX, positionY, setPosition } = props // 先看下是不是在最近得组件 if (monitor.isOver({ shallow: true })) { const sourcePosition = monitor.getClientOffset() @@ -248,32 +236,30 @@ const target = { } } } -function sourceCollect (connect, monitor) { +function sourceCollect(connect, monitor) { return { connectDragSource: connect.dragSource(), isDragging: monitor.isDragging() } } -function targetCollect (connect, monitor) { +function targetCollect(connect, monitor) { return { connectDropTarget: connect.dropTarget(), isOver: monitor.isOver() } } -const DraggableTreeItem = DropTarget(Types['TreeNode'], target, targetCollect)( - DragSource(Types['TreeNode'], source, sourceCollect)(TreeItem) -) -const HOCTreeItem = TreeItemComponent => { +const DraggableTreeItem = DropTarget( + Types.TreeNode, + target, + targetCollect +)(DragSource(Types.TreeNode, source, sourceCollect)(TreeItem)) +const HOCTreeItem = (TreeItemComponent) => { return class WrapperTreeItem extends Component { - render () { + render() { const { draggable } = this.props - return draggable ? ( - <DraggableTreeItem {...this.props} /> - ) : ( - <TreeItemComponent {...this.props} /> - ) + return draggable ? <DraggableTreeItem {...this.props} /> : <TreeItemComponent {...this.props} /> } } } diff --git a/components/tree/tree-legacy/TreeNode.js b/components/tree/tree-legacy/tree-v1/TreeNode.js similarity index 98% rename from components/tree/tree-legacy/TreeNode.js rename to components/tree/tree-legacy/tree-v1/TreeNode.js index 45dbcfe0d..ef31a6ad8 100644 --- a/components/tree/tree-legacy/TreeNode.js +++ b/components/tree/tree-legacy/tree-v1/TreeNode.js @@ -2,13 +2,13 @@ import React, { Component } from 'react' import classNames from 'classnames' import isEqual from 'lodash/isEqual' import cloneDeep from 'lodash/cloneDeep' -import Input from '../../input' -import Icon from '../../icon' -import uuidv4 from 'uuid/v4' +import Input from '../../../input' +import Icon from '../../../icon' +import { v4 as uuidv4 } from 'uuid' import TreeItem from './TreeItem' -import Modal from '../../modal' +import Modal from '../../../modal' import { collectExpandId, findNode } from './util' -import { handleNotificate } from '../../notification' +import { handleNotificate } from '../../../notification' import axios from 'axios' import qs from 'qs' diff --git a/components/tree/tree-legacy/index.js b/components/tree/tree-legacy/tree-v1/index.js similarity index 100% rename from components/tree/tree-legacy/index.js rename to components/tree/tree-legacy/tree-v1/index.js diff --git a/components/tree/tree-legacy/tree-v1/style/index.js b/components/tree/tree-legacy/tree-v1/style/index.js new file mode 100644 index 000000000..63810a681 --- /dev/null +++ b/components/tree/tree-legacy/tree-v1/style/index.js @@ -0,0 +1 @@ +import './index.scss' diff --git a/components/tree/tree-legacy/style/index.scss b/components/tree/tree-legacy/tree-v1/style/index.scss similarity index 100% rename from components/tree/tree-legacy/style/index.scss rename to components/tree/tree-legacy/tree-v1/style/index.scss diff --git a/components/tree/tree-legacy/util.js b/components/tree/tree-legacy/tree-v1/util.js similarity index 80% rename from components/tree/tree-legacy/util.js rename to components/tree/tree-legacy/tree-v1/util.js index d57019592..2f6115637 100644 --- a/components/tree/tree-legacy/util.js +++ b/components/tree/tree-legacy/tree-v1/util.js @@ -10,7 +10,7 @@ * @param {boolen} isClose 当前状态是否为关闭 * @param {function} func 动画结束后的回调行数 */ -export function toggleSlide (el, isClose, func) { +export function toggleSlide(el, isClose, func) { if (!isClose) { el.style.display = 'block' el.style.height = 0 @@ -21,7 +21,7 @@ export function toggleSlide (el, isClose, func) { let sum = 0 let start = null - const animate = timestamp => { + const animate = (timestamp) => { if (!start) start = timestamp const progress = timestamp - start sum = progress * speed @@ -43,7 +43,7 @@ export function toggleSlide (el, isClose, func) { * @param {*} event * @param {*} treeNode 拖拽进入的当前节点 */ -export function calcDropPosition (event, treeNode) { +export function calcDropPosition(event, treeNode) { const offsetTop = getOffset(treeNode).top const offsetHeight = treeNode.offsetHeight const pageY = event.pageY @@ -60,7 +60,7 @@ export function calcDropPosition (event, treeNode) { * 计算offset * @param {*} ele */ -export function getOffset (ele) { +export function getOffset(ele) { if (!ele.getClientRects().length) { return { top: 0, left: 0 } } @@ -84,7 +84,7 @@ export function getOffset (ele) { * @param {ele} cur 当前节点 * @param {ele} tar 目标节点 */ -export function insBefore (cur, tar) { +export function insBefore(cur, tar) { const current = cur.parentNode.parentNode // li const target = tar.parentNode // li target.parentNode.insertBefore(current, target) @@ -94,7 +94,7 @@ export function insBefore (cur, tar) { * @param {ele} cur 当前节点 * @param {ele} tar 目标节点 */ -export function insAfter (cur, tar) { +export function insAfter(cur, tar) { const current = cur.parentNode.parentNode // li const target = tar.parentNode // li if (target.parentNode.lastChild === target) { @@ -108,14 +108,14 @@ export function insAfter (cur, tar) { * @param {ele} cur 当前节点 * @param {ele} tar 目标节点 */ -export function insChild (cur, tar) { +export function insChild(cur, tar) { const current = cur.parentNode.parentNode // li const target = tar.parentNode.parentNode // li if (current === target) return if (target.childNodes.length > 1) { tar.parentNode.nextSibling.appendChild(current) } else { - let ul = document.createElement('ul') + const ul = document.createElement('ul') ul.setAttribute('class', 'hi-tree-child') ul.appendChild(current) target.appendChild(ul) @@ -127,7 +127,7 @@ export function insChild (cur, tar) { * 深拷贝 * @param {*} arr */ -export function deepClone (arr) { +export function deepClone(arr) { let i let copy @@ -143,17 +143,17 @@ export function deepClone (arr) { return arr } -export function deepMap (data, parent) { +export function deepMap(data, parent) { let arr = [] - for (let key in data) { - let item = { ...data[key] } + for (const key in data) { + const item = { ...data[key] } if (parent) { item.parent = parent } else { item.parent = [] } if (item.children && item.children.length > 0) { - let childParent = [...item.parent] + const childParent = [...item.parent] childParent.unshift(item.id) arr = arr.concat(deepMap(item.children, childParent)) delete item.children @@ -165,9 +165,9 @@ export function deepMap (data, parent) { return arr } -export function getChild (data, id) { - let arr = [] - data.forEach(item => { +export function getChild(data, id) { + const arr = [] + data.forEach((item) => { if (!item.parent.includes(id)) { return } @@ -179,15 +179,15 @@ export function getChild (data, id) { return arr } -export function getSemi (data, checks) { - let all = deepMap(data) - let arr = all - .map(item => { +export function getSemi(data, checks) { + const all = deepMap(data) + const arr = all + .map((item) => { item.child = getChild(all, item.id) item.family = item.parent.concat(item.child) item.semi = false let num = 0 - checks.forEach(c => { + checks.forEach((c) => { if (item.child.includes(c)) { num = num + 1 } @@ -196,38 +196,38 @@ export function getSemi (data, checks) { item.semi = num !== 0 && num !== item.child.length return item }) - .filter(item => item.semi) - .map(item => item.id) + .filter((item) => item.semi) + .map((item) => item.id) return arr } -export function getChildren (data, id) { - let all = deepMap(data) +export function getChildren(data, id) { + const all = deepMap(data) return all - .map(item => { + .map((item) => { item.child = getChild(all, item.id) return item }) - .find(item => item.id === id).child + .find((item) => item.id === id).child } -export function getDisabled (data) { - let all = deepMap(data) - return all.filter(item => item.disabled).map(item => item.id) +export function getDisabled(data) { + const all = deepMap(data) + return all.filter((item) => item.disabled).map((item) => item.id) } -export function getItem (data, id) { - let all = deepMap(data) - return all.find(item => item.id === id) +export function getItem(data, id) { + const all = deepMap(data) + return all.find((item) => item.id === id) } -export function getAll (data, checkedKeys) { +export function getAll(data, checkedKeys) { let all = deepMap(data) - all = all.map(item => { + all = all.map((item) => { item.child = getChild(all, item.id) item.family = item.parent.concat(item.child) item.semi = false let num = 0 - checkedKeys.forEach(c => { + checkedKeys.forEach((c) => { if (item.child.includes(c)) { num = num + 1 } @@ -243,14 +243,14 @@ export const dealData = (data, tempData = {}, parent = null) => { if (data.length === 0) { return data } - data.map(item => { + data.map((item) => { tempData[item.id] = { ...item } if (parent) { tempData[item.id].parent = parent } if (item.children && item.children.length > 0) { const tempArr = [] - item.children.map(i => { + item.children.map((i) => { tempArr.push(i.id) }) tempData[item.id].children = tempArr @@ -262,9 +262,9 @@ export const dealData = (data, tempData = {}, parent = null) => { // 寻找某一节点的父节点 export const getParentId = (id, data) => { let parentId - data.forEach(item => { + data.forEach((item) => { if (item.children) { - if (item.children.some(item => item.id === id)) { + if (item.children.some((item) => item.id === id)) { parentId = item.id } else if (getParentId(id, item.children)) { parentId = getParentId(id, item.children) @@ -276,9 +276,9 @@ export const getParentId = (id, data) => { // 寻找某一节点的所有子节点 export const getChildrenIds = (node, arr = []) => { if (node.children) { - arr = node.children.map(i => i.id).concat(arr) + arr = node.children.map((i) => i.id).concat(arr) } - node.children.forEach(c => getChildrenIds(c, arr)) + node.children.forEach((c) => getChildrenIds(c, arr)) return arr } // 寻找某一节点的所有祖先节点 @@ -292,7 +292,7 @@ export const getAncestorIds = (id, data, arr = []) => { // 收集所有需要展开的节点 id export const collectExpandId = (data, searchValue, collection = [], allData) => { - data.forEach(item => { + data.forEach((item) => { if (searchValue && item.title.includes(searchValue)) { const parentIds = getAncestorIds(item.id, allData, []) collection.splice(collection.length - 1, 0, ...parentIds) diff --git a/components/tree/tree-legacy/tree-v2/IconLoading.js b/components/tree/tree-legacy/tree-v2/IconLoading.js new file mode 100644 index 000000000..84346c230 --- /dev/null +++ b/components/tree/tree-legacy/tree-v2/IconLoading.js @@ -0,0 +1,32 @@ +import React from 'react' + +const IconLoading = (props) => { + const size = '0.8em' + const themeColor = { + orange: '#f63', + cyan: '#46bc99', + magenta: '#ff5975', + lavender: '#b450de', + blue: '#3da8f5', + purple: '#8a8acb' + } + return ( + <i className="hi-icon hi-btn--loading--icon"> + <svg + viewBox="0 0 18 18" + width={size} + height={size} + fill={themeColor[props.theme] ? themeColor[props.theme] : '#4284F5'} + > + <g> + <path + d="m9 18c-4.9706 0-9-4.0294-9-9 0-4.9706 4.0294-9 9-9 4.9706 0 9 4.0294 9 9 0 4.9706-4.0294 9-9 9zm0-2c3.866 0 7-3.134 7-7 0-3.866-3.134-7-7-7-3.866 0-7 3.134-7 7 0 3.866 3.134 7 7 7z" + opacity=".15" + /> + <path d="m15.547 2.8242c0.37904 0.40168 0.36068 1.0346-0.040996 1.4136-0.40168 0.37904-1.0346 0.36068-1.4136-0.040996-1.315-1.3935-3.1381-2.1969-5.0922-2.1969-3.866 0-7 3.134-7 7 0 0.55228-0.44772 1-1 1s-1-0.44772-1-1c0-4.9706 4.0294-9 9-9 2.5103 0 4.8578 1.0343 6.5468 2.8242z" /> + </g> + </svg> + </i> + ) +} +export default IconLoading diff --git a/components/date-picker/Modal.js b/components/tree/tree-legacy/tree-v2/Modal.js similarity index 61% rename from components/date-picker/Modal.js rename to components/tree/tree-legacy/tree-v2/Modal.js index 07aea567a..3443e5c10 100644 --- a/components/date-picker/Modal.js +++ b/components/tree/tree-legacy/tree-v2/Modal.js @@ -1,27 +1,27 @@ -import {Component} from 'react' +import { Component } from 'react' import ReactDOM from 'react-dom' import clickOutSide from 'react-click-outside' class Modal extends Component { - constructor (props) { + constructor(props) { super(props) this.el = document.createElement('div') this._body = document.body } - componentDidMount () { + componentDidMount() { this._body.appendChild(this.el) } - handleClickOutside (e) { + + handleClickOutside(e) { this.props.clickOutSide(e) } - componentWillUnmount () { + + componentWillUnmount() { this._body.removeChild(this.el) } - render () { - return ReactDOM.createPortal( - this.props.children, - this.el - ) + + render() { + return ReactDOM.createPortal(this.props.children, this.el) } } export default clickOutSide(Modal) diff --git a/components/tree/tree-legacy/tree-v2/Tree.js b/components/tree/tree-legacy/tree-v2/Tree.js new file mode 100644 index 000000000..89d78eda2 --- /dev/null +++ b/components/tree/tree-legacy/tree-v2/Tree.js @@ -0,0 +1,246 @@ +import React, { Component } from 'react' +import classNames from 'classnames' +import TreeNode from './TreeNode' +import isEqual from 'lodash/isEqual' +import { getAll, dealData } from './util' +import withDragDropContext from '../../../lib/withDragDropContext' +import './style/index' + +export class Tree extends Component { + constructor (props) { + super(props) + + this.state = { + hasExpanded: [], + dataMap: {}, + data: [], + semiChecked: [], + disabledKeys: [], + all: [], + checkedIds: [], + semiCheckedIds: [] + } + } + + static defaultProps = { + prefixCls: 'hi-tree', + defaultCheckedKeys: [], + data: [], + apperance: 'default', + contextMenu: [] + } + + static getDerivedStateFromProps (props, state) { + let data = {} + if (!isEqual(props.data, state.data)) { + const dataMap = {} + dealData(props.data, dataMap) + data.dataMap = dataMap + data.data = props.data + + if (state.data.length === 0) { + let defaultExpandedArr = [] + + for (let key in dataMap) { + const item = dataMap[key] + const itemHasChildren = item.children && item.children.length > 0 + const itemShouldExpand = + (props.defaultExpandAll && item.expanded !== false) || item.expanded === true + if (itemHasChildren && itemShouldExpand) { + defaultExpandedArr.push(item.id) + } + } + data.hasExpanded = defaultExpandedArr + } + } + + if (props.data && props.checkedIds) { + data.all = getAll(props.data, props.checkedIds) + } + + return data + } + + onCheckChange = (checked, item) => { + const { onChange, checkedIds, onCheckChange, onCheck } = this.props + let checkedArr = checkedIds + + let { all } = this.state + let semiChecked = all.filter(item => item.semi).map(item => item.id) + let disabledKeys = all.filter(item => item.disabled).map(item => item.id) + let myself = all.find(a => a.id === item.id) + let children = myself.child + let parent = myself.parent + if (semiChecked.includes(item.id)) { + children.forEach(child => { + checkedArr = checkedArr.filter(c => c !== child) + }) + checkedArr = checkedArr.filter(c => c !== item.id) + } else { + if (checked) { + checkedArr = checkedArr.filter(c => c !== item.id) + children.forEach(child => { + checkedArr = checkedArr.filter(c => c !== child) + }) + parent.forEach(p => { + checkedArr = checkedArr.filter(c => c !== p) + }) + } else { + checkedArr = checkedArr.concat(children) + checkedArr.push(item.id) + parent.forEach(p => { + let par = all.find(a => a.id === p).child + let bool = true + par.forEach(p => { + if (!checkedArr.includes(p)) { + bool = false + } + }) + bool && checkedArr.push(p) + }) + } + } + + disabledKeys.forEach(d => { + checkedArr = checkedArr.filter(c => c !== d.id) + }) + + parent.forEach(p => { + let child = all.find(item => item.id === p).child + let semi = false + let num = 0 + checkedArr.forEach(c => { + if (child.includes(c)) { + num = num + 1 + } + }) + + semi = num !== 0 && num !== child.length + + if (semi) { + if (!semiChecked.includes(p)) { + semiChecked.push(p) + } + } else { + semiChecked = semiChecked.filter(s => s !== p) + } + }) + + onChange && onChange(checkedArr, item.title, !checked, semiChecked) + onCheckChange && onCheckChange(checkedArr, item.title, !checked, semiChecked) + onCheck && onCheck(checkedArr, item, !checked, semiChecked) + } + + // 展开、收起节点 + onExpanded = (expanded, item) => { + let expandedArr = [...this.state.hasExpanded] + + if (expandedArr.includes(item.id)) { + expandedArr.splice(expandedArr.indexOf(item.id), 1) + } else { + expandedArr.push(item.id) + } + this.setState({ + hasExpanded: expandedArr + }) + this.props.onExpand && this.props.onExpand(expanded, expandedArr, item) + } + // 展开节点 + expandTreeNode = id => { + const _hasExpanded = [...this.state.hasExpanded] + if (!_hasExpanded.includes(id)) { + _hasExpanded.push(id) + this.setState({ + hasExpanded: _hasExpanded + }) + } + } + setExpandTreeNodes = ids => { + this.setState({ + hasExpanded: ids + }) + } + closeExpandedTreeNode = id => { + this.setState({ + hasExpanded: this.state.hasExpanded.filter(expandId => expandId !== id) + }) + } + render () { + const { + prefixCls, + checkable, + closeIcon, + openIcon, + highlightable, + editable, + searchable, + draggable, + style, + loadTreeNode, + onDragStart, + onDrop, + onDropEnd, + onDelete, + onBeforeDelete, + onSave, + onBeforeSave, + onClick, + apperance, + contextMenu, + defaultHighlightId, + theme + } = this.props + const { data } = this.state + return ( + <div + className={classNames(`${prefixCls}`, `theme__${theme}`, { 'hi-tree--show-line': apperance === 'line' })} + style={style} + > + <TreeNode + origin={loadTreeNode} + showLine={apperance === 'line'} + apperance={apperance} + checked={this.props.checkedIds || []} + onClick={onClick} + semiChecked={this.state.all.filter(item => item.semi).map(item => item.id)} + expanded={this.state.hasExpanded} + closeExpandedTreeNode={this.closeExpandedTreeNode} + expandTreeNode={this.expandTreeNode} + setExpandTreeNodes={this.setExpandTreeNodes} + onCheckChange={this.onCheckChange} + onExpanded={this.onExpanded} + data={data} + theme={theme} + prefixCls={prefixCls} + checkable={checkable} + highlightable={highlightable} + defaultHighlightId={defaultHighlightId} + editable={editable} + searchable={searchable} + openIcon={openIcon} + closeIcon={closeIcon} + draggable={draggable} + onDragStart={onDragStart} + onDrop={onDrop} + onDropEnd={onDropEnd} + onDelete={onDelete} + onBeforeDelete={onBeforeDelete} + onSave={onSave} + onBeforeSave={onBeforeSave} + contextMenu={contextMenu} + /> + </div> + ) + } +} + +const HOCTree = TreeComponent => { + return class WrapperTree extends Component { + render () { + const { draggable } = this.props + const DraggableTree = withDragDropContext(Tree) + return draggable ? <DraggableTree {...this.props} /> : <TreeComponent {...this.props} /> + } + } +} +export default HOCTree(Tree) diff --git a/components/tree/tree-legacy/tree-v2/TreeDivider.js b/components/tree/tree-legacy/tree-v2/TreeDivider.js new file mode 100644 index 000000000..a336e6f57 --- /dev/null +++ b/components/tree/tree-legacy/tree-v2/TreeDivider.js @@ -0,0 +1,12 @@ +import React from 'react' +import ClassNames from 'classnames' +const TreeDivider = (props) => { + return ( + <div className={ClassNames('hi-tree__divider', `theme__${props.theme}`, `hi-tree__divider--${props.placement}`)}> + <div className="divider-circle" /> + <div className="divider-line" /> + </div> + ) +} + +export default TreeDivider diff --git a/components/tree/TreeItem.js b/components/tree/tree-legacy/tree-v2/TreeItem.js similarity index 98% rename from components/tree/TreeItem.js rename to components/tree/tree-legacy/tree-v2/TreeItem.js index 151cc557c..5e0e9c416 100644 --- a/components/tree/TreeItem.js +++ b/components/tree/tree-legacy/tree-v2/TreeItem.js @@ -1,12 +1,12 @@ import React, { Component } from 'react' -import Checkbox from '../table/checkbox/index' +import {CheckboxLegacy as Checkbox} from '../../../checkbox' import { DragSource, DropTarget } from 'react-dnd' import classNames from 'classnames' -import Input from '../input' +import Input from '../../../input' import { findDOMNode } from 'react-dom' import TreeDivider from './TreeDivider' import IconLoading from './IconLoading' -import Provider from '../context' +import Provider from '../../../context' const Types = { TreeNode: 'treeNode' } diff --git a/components/tree/TreeNode.js b/components/tree/tree-legacy/tree-v2/TreeNode.js similarity index 98% rename from components/tree/TreeNode.js rename to components/tree/tree-legacy/tree-v2/TreeNode.js index 179c5d443..fe460071f 100644 --- a/components/tree/TreeNode.js +++ b/components/tree/tree-legacy/tree-v2/TreeNode.js @@ -2,16 +2,16 @@ import React, { Component } from 'react' import classNames from 'classnames' import isEqual from 'lodash/isEqual' import cloneDeep from 'lodash/cloneDeep' -import Input from '../input' -import Icon from '../icon' -import uuidv4 from 'uuid/v4' +import Input from '../../../input' +import Icon from '../../../icon' +import { v4 as uuidv4 } from 'uuid' import TreeItem from './TreeItem' -import Modal from '../modal' +import Modal from '../../../modal' import { collectExpandId, findNode } from './util' import axios from 'axios' import qs from 'qs' -import Provider from '../context' -import CModal from '../date-picker/Modal' +import Provider from '../../../context' +import CModal from './Modal' class TreeNode extends Component { constructor (props) { diff --git a/components/tree/__tests__/index.test.js b/components/tree/tree-legacy/tree-v2/__tests__/index.test.js similarity index 100% rename from components/tree/__tests__/index.test.js rename to components/tree/tree-legacy/tree-v2/__tests__/index.test.js diff --git a/components/tree/tree-legacy/tree-v2/index.js b/components/tree/tree-legacy/tree-v2/index.js new file mode 100644 index 000000000..3aaa430f7 --- /dev/null +++ b/components/tree/tree-legacy/tree-v2/index.js @@ -0,0 +1,5 @@ +import Tree from './Tree' +import TreeLegacy from '../tree-v1/index' +import SwitchVersion from '../../../_util/SwitchVersion' +import Provider from '../../../context' +export default SwitchVersion(Provider(Tree), TreeLegacy) diff --git a/components/tree/tree-legacy/tree-v2/style/index.js b/components/tree/tree-legacy/tree-v2/style/index.js new file mode 100644 index 000000000..63810a681 --- /dev/null +++ b/components/tree/tree-legacy/tree-v2/style/index.js @@ -0,0 +1 @@ +import './index.scss' diff --git a/components/tree/tree-legacy/tree-v2/style/index.scss b/components/tree/tree-legacy/tree-v2/style/index.scss new file mode 100644 index 000000000..670dd8457 --- /dev/null +++ b/components/tree/tree-legacy/tree-v2/style/index.scss @@ -0,0 +1,594 @@ +@import '@hi-ui/core-css/index.scss'; +$tree: 'hi-tree' !default; + +.hi-tree { + font-size: 14px; + + @include component-reset(); + + color: #383e47; + + /* TODO: The following style does not fully restore ui, so commented =========== */ + // &:not(.hi-tree--show-line) { + // li:not(.is-root):not(.no-expanded) { + // margin-top: 10px; + // } + + // .is-root { + // margin-bottom: 10px; + // } + // } + + /* =========== */ + .hi-checkbox-legacy { + margin-left: 6px; + } + + .hi-checkbox-legacy--part .hi-checkbox-legacy__input { + border: 1px solid #4284f5; + } + + .hi-checkbox-legacy--checked:not(.hi-checkbox-legacy--disabled) .hi-checkbox-legacy__input { + border: 1px solid #4284f5; + } + + .hi-tree__searcher { + position: relative; + padding-left: 15px; + margin-bottom: 24px; + + .hi-tree__searcher--empty { + position: absolute; + top: 34px; + color: #999; + left: 39px; + font-size: 12px; + } + + .hi-input__inner { + flex: 1; + } + + .hi-input--append { + line-height: 32px; + + .hi-input__append { + width: 32px; + height: 30px; + border-radius: 2px 0 0 2px; + border: 1px solid rgba(216, 216, 216, 1); + border-left: none; + text-align: center; + } + } + } + + .hi-tree__divider { + position: absolute; + display: flex; + width: 100%; + align-items: center; + + &--top { + top: 0; + } + + &--inner { + bottom: -2px; + } + + &--bottom { + bottom: 0; + } + + .divider-line { + flex: 1; + height: 1px; + background-color: rgba(66, 132, 245, 1); + } + + .divider-circle { + flex: 0 0 5px; + height: 5px; + border: 1px solid rgba(66, 132, 245, 1); + border-radius: 2.5px; + box-sizing: border-box; + } + } + + &.hi-tree--show-line { + li { + & > ul { + position: relative; + + &::after { + position: absolute; + top: 0; + left: -10px; + width: 1px; + height: 100%; + background: #c8c8c8; + content: ''; + } + } + + &.is-root { + > .item__wrapper { + &::before { + display: none; + } + + &::after { + display: none; + } + } + + & > ul { + position: relative; + + &::after { + display: none; + } + } + + &:not(:last-of-type) { + > ul { + > li { + &:last-of-type { + > ul { + &::after { + display: block; + height: calc(100% + 4px); + } + } + + > .item__wrapper { + &::after { + position: absolute; + top: -4px; + left: -10px; + height: calc(100% + 8px); + width: 1px; + background: #c8c8c8; + content: ''; + } + } + } + } + } + + &.no-expanded { + &::before { + position: absolute; + top: calc(50% + 5px); + left: 9px; + width: 1px; + height: calc(50% - 5px); + background: #c8c8c8; + content: ''; + } + } + } + + &:not(:first-of-type) { + &:not(.no-expanded) { + > .item__wrapper { + &::before { + position: absolute; + top: 1px; + left: 7px; + width: 1px; + height: calc(50% - 9px); + background: #c8c8c8; + content: ''; + display: block; + } + } + } + + &.no-expanded { + &::after { + position: absolute; + top: 0; + left: 9px; + width: 1px; + height: calc(50% - 11px); + background: #c8c8c8; + content: ''; + } + } + } + } + + &:last-of-type { + > .item__wrapper { + &::after { + position: absolute; + top: -4px; + left: -10px; + height: calc(50% + 2px); + width: 1px; + background: #c8c8c8; + content: ''; + } + } + + & > ul { + &::after { + display: none; + } + } + } + } + + .item__wrapper { + .hi-checkbox-legacy { + height: 24px; + } + + &.can-expand { + &::before { + width: 10px; + } + } + + &--expanded { + &.can-expand { + > .hi-tree_item-text { + padding-left: 8px; + + &::before { + position: absolute; + top: calc(50% + 8px); + left: -11px; + height: calc(50% - 4px); + width: 1px; + background: #c8c8c8; + content: ''; + } + } + + > .editing { + position: relative; + + &::before { + position: absolute; + top: calc(50% + 7px); + left: -11px; + height: calc(50% - 2px); + width: 1px; + background: #c8c8c8; + content: ''; + } + } + } + } + + &::before { + position: absolute; + left: -10px; + top: 50%; + height: 1px; + width: 14px; + background: #c8c8c8; + transform: translateY(-3px); + content: ''; + } + + &::after { + position: absolute; + top: -4px; + left: -10px; + height: calc(100% + 4px); + width: 1px; + background: #c8c8c8; + content: ''; + } + } + } + + ul { + padding-left: 15px; + } + + li { + position: relative; + padding: 2px; + + & > .item__wrapper { + display: flex; + align-items: center; + padding-bottom: 5px; + position: relative; + } + + .editing { + display: flex; + align-items: center; + + .hi-input { + width: 240px; + margin-right: 20px; + } + } + + .hi-checkbox-label { + display: none; + } + + &.switcher-none { + .#{$tree}-switcher { + cursor: default; + + &::after { + content: none; + } + } + } + } + + &_item-text { + cursor: pointer; + display: inline-block; + vertical-align: middle; + padding: 0 4px; + position: relative; + line-height: 24px; + user-select: none; + + &.dragTo { + background-color: #4284f5; + } + + &.dragToGapBottom { + border-top: 1px solid #4284f5; + } + + &.dragToGapTop { + border-bottom: 1px solid #4284f5; + } + + &.has_checkbox { + width: calc(100% - 40px); + padding-left: 4px; + } + + transition: background 0.3s; + + &--disabled { + color: rgba(0, 0, 0, 0.25); + cursor: not-allowed; + } + + &:hover:not(.hi-tree_item-text--disabled) { + background-color: rgba(66, 133, 244, 0.08); + color: rgba(56, 62, 71, 1); + } + + &.dragging { + background-color: rgba(246, 246, 246, 1); + color: rgba(204, 204, 204, 1); + } + + &.highlight { + background-color: rgba(66, 133, 245, 0.2); + } + } + + &_item-icon { + display: inline-block; + vertical-align: middle; + width: 18px; + cursor: pointer; + + .hi-tree-switcher { + color: #666; + font-size: 16px; + } + + .hi-tree__dot { + position: absolute; + width: 7px; + height: 7px; + border-radius: 3.5px; + background: #c8c8c8; + transform: translateY(-50%); + top: 50%; + left: 3.5px; + } + } + + .#{$tree} { + &-bar { + position: relative; + height: 20px; + line-height: 20px; + + .#{$tree} { + &-switcher { + position: absolute; + left: 1px; + background: #fff; + padding: 6px 0; + font-size: 12px; + line-height: 1; + vertical-align: middle; + display: inline-block; + cursor: pointer; + } + + &-node { + display: inline-block; + padding: 2px 6px; + border-radius: 2px; + overflow: hidden; + vertical-align: middle; + + &[draggable='true'] { + -webkit-user-drag: element; + user-select: none; + cursor: pointer; + } + + label { + margin-left: 16px; + cursor: pointer; + } + } + // 虚拟checkbox + &-input { + display: none; + } + + &-input:checked + .#{$tree}-checkbox::after { + content: ''; + display: inline-block; + width: 8px; + height: 4px; + border: 2px solid #fff; + border-top: none; + border-right: none; + transform: rotate(-45deg) translate(6px, -4px); + } + + &-input:checked + .#{$tree}-checkbox { + background-color: #4284f5; + } + + &-checkbox { + width: 14px; + height: 14px; + border: 1px solid #d8d8d8; + display: inline-block; + vertical-align: middle; + } + + &-title { + display: inline-block; + margin-left: 4px; + vertical-align: middle; + user-select: none; + + &:hover { + background-color: rgba(230, 247, 255, 1); + } + + > * { + display: inline-block; + } + } + } + + &.gap-bottom { + border-bottom-color: #f00; + } + + &.gap-enter { + background-color: #ff0; + } + + &.gap-top { + border-top-color: #f00; + } + } + + &-child { + overflow: hidden; + } + } +} + +.right-click-menu { + color: #333; + position: absolute; + // top: 0; + // left: calc(100% + 5px); + z-index: 1060; + // width: 120px; + background: #fff; + border: 1px solid #e6e7e8; + border-radius: 2px; + box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.1); + box-sizing: border-box; + padding: 0; + list-style: none; + margin: 0; + max-height: 240px; + overflow: auto; + + li { + padding: 0 15px; + height: 36px; + line-height: 36px; + transition: background 0.3s; + cursor: pointer; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + + &:hover { + background: rgba(66, 133, 244, 0.08); + } + } +} + +@each $key, $value in $theme-colors { + .theme__#{$key}.#{$tree} { + .hi-checkbox-legacy--part .hi-checkbox-legacy__input { + border: 1px solid $value; + } + + .hi-checkbox-legacy__label.highlight { + color: $value; + } + + .hi-checkbox-legacy--checked .hi-checkbox-legacy__input { + border: 1px solid $value; + } + + .#{$tree}_item-text { + &:hover:not(.hi-tree_item-text--disabled) { + background-color: rgba($value, 0.08); + color: rgba(56, 62, 71, 1); + } + + &.dragTo { + background-color: $value; + } + + &.dragToGapBottom { + border-top: 1px solid $value; + } + + &.dragToGapTop { + border-bottom: 1px solid $value; + } + + &.highlight { + background-color: rgba($value, 0.2); + } + } + + .#{$tree}-bar { + &-input:checked + .#{$tree}-checkbox { + background-color: $value; + } + } + + .hi-tree__divider { + .divider-line { + background-color: $value; + } + + .divider-circle { + border: 1px solid $value; + } + } + } + + .theme__#{$key}.right-click-menu { + li:hover { + background-color: rgba($value, 0.15); + } + } +} diff --git a/components/tree/tree-legacy/tree-v2/util.js b/components/tree/tree-legacy/tree-v2/util.js new file mode 100644 index 000000000..5a074df31 --- /dev/null +++ b/components/tree/tree-legacy/tree-v2/util.js @@ -0,0 +1,134 @@ +export function deepMap(data, parent) { + let arr = [] + for (const key in data) { + const item = { ...data[key] } + if (parent) { + item.parent = parent + } else { + item.parent = [] + } + if (item.children && item.children.length > 0) { + const childParent = [...item.parent] + childParent.unshift(item.id) + arr = arr.concat(deepMap(item.children, childParent)) + delete item.children + } else { + // item.parent = parent + } + arr.push(item) + } + return arr +} + +export function getChild(data, id) { + const arr = [] + data.forEach((item) => { + if (!item.parent.includes(id)) { + return + } + if (arr.includes(id)) { + return + } + arr.push(item.id) + }) + return arr +} + +export function getAll(data, checkedKeys) { + let all = deepMap(data) + all = all.map((item) => { + item.child = getChild(all, item.id) + item.family = item.parent.concat(item.child) + item.semi = false + let num = 0 + checkedKeys.forEach((c) => { + if (item.child.includes(c)) { + num = num + 1 + } + }) + item.num = num + item.semi = num !== 0 && num !== item.child.length + return item + }) + return all +} + +export const dealData = (data, tempData = {}, parent = null) => { + if (data.length === 0) { + return data + } + data.map((item) => { + tempData[item.id] = { ...item } + if (parent) { + tempData[item.id].parent = parent + } + if (item.children && item.children.length > 0) { + const tempArr = [] + item.children.map((i) => { + tempArr.push(i.id) + }) + tempData[item.id].children = tempArr + dealData(item.children, tempData, item.id) + } + }) +} + +// 寻找某一节点的父节点 +export const getParentId = (id, data) => { + let parentId + data.forEach((item) => { + if (item.children) { + if (item.children.some((item) => item.id === id)) { + parentId = item.id + } else if (getParentId(id, item.children)) { + parentId = getParentId(id, item.children) + } + } + }) + return parentId +} + +// 寻找某一节点的所有子节点 +export const getChildrenIds = (node, arr = []) => { + if (node.children) { + arr = node.children.map((i) => i.id).concat(arr) + } + node.children.forEach((c) => getChildrenIds(c, arr)) + return arr +} +// 寻找某一节点的所有祖先节点 +export const getAncestorIds = (id, data, arr = []) => { + if (getParentId(id, data)) { + arr.push(getParentId(id, data)) + getAncestorIds(getParentId(id, data), data, arr) + } + return arr +} + +// 收集所有需要展开的节点 id +export const collectExpandId = (data, searchValue, collection = [], allData) => { + data.forEach((item) => { + if (searchValue && item.title.includes(searchValue)) { + const parentIds = getAncestorIds(item.id, allData, []) + collection.splice(collection.length - 1, 0, ...parentIds) + } + if (item.children) { + collectExpandId(item.children, searchValue, collection, allData) + } + }) + return collection +} +// 给定一个结合,根据 id 寻找节点 +export const findNode = (itemId, data) => { + let node + data.forEach((d, index) => { + if (d.id === itemId) { + node = d + } else { + if (d.children && findNode(itemId, d.children)) { + node = findNode(itemId, d.children) + } + } + }) + return node +} diff --git a/components/tree/util.js b/components/tree/util.js index a1c44b242..491a4f5bf 100644 --- a/components/tree/util.js +++ b/components/tree/util.js @@ -1,84 +1,9 @@ -export function deepMap (data, parent) { - let arr = [] - for (let key in data) { - let item = { ...data[key] } - if (parent) { - item.parent = parent - } else { - item.parent = [] - } - if (item.children && item.children.length > 0) { - let childParent = [...item.parent] - childParent.unshift(item.id) - arr = arr.concat(deepMap(item.children, childParent)) - delete item.children - } else { - // item.parent = parent - } - arr.push(item) - } - return arr -} - -export function getChild (data, id) { - let arr = [] - data.forEach(item => { - if (!item.parent.includes(id)) { - return - } - if (arr.includes(id)) { - return - } - arr.push(item.id) - }) - return arr -} - -export function getAll (data, checkedKeys) { - let all = deepMap(data) - all = all.map(item => { - item.child = getChild(all, item.id) - item.family = item.parent.concat(item.child) - item.semi = false - let num = 0 - checkedKeys.forEach(c => { - if (item.child.includes(c)) { - num = num + 1 - } - }) - item.num = num - item.semi = num !== 0 && num !== item.child.length - return item - }) - return all -} - -export const dealData = (data, tempData = {}, parent = null) => { - if (data.length === 0) { - return data - } - data.map(item => { - tempData[item.id] = { ...item } - if (parent) { - tempData[item.id].parent = parent - } - if (item.children && item.children.length > 0) { - const tempArr = [] - item.children.map(i => { - tempArr.push(i.id) - }) - tempData[item.id].children = tempArr - dealData(item.children, tempData, item.id) - } - }) -} - // 寻找某一节点的父节点 export const getParentId = (id, data) => { let parentId - data.forEach(item => { + data.forEach((item) => { if (item.children) { - if (item.children.some(item => item.id === id)) { + if (item.children.some((item) => item.id === id)) { parentId = item.id } else if (getParentId(id, item.children)) { parentId = getParentId(id, item.children) @@ -88,14 +13,20 @@ export const getParentId = (id, data) => { return parentId } -// 寻找某一节点的所有子节点 -export const getChildrenIds = (node, arr = []) => { - if (node.children) { - arr = node.children.map(i => i.id).concat(arr) - } - node.children.forEach(c => getChildrenIds(c, arr)) - return arr +export const getParent = (id, data) => { + let parent + data.forEach((item) => { + if (item.children) { + if (item.children.some((item) => item.id === id)) { + parent = item + } else if (getParent(id, item.children)) { + parent = getParent(id, item.children) + } + } + }) + return parent } + // 寻找某一节点的所有祖先节点 export const getAncestorIds = (id, data, arr = []) => { if (getParentId(id, data)) { @@ -105,19 +36,24 @@ export const getAncestorIds = (id, data, arr = []) => { return arr } -// 收集所有需要展开的节点 id -export const collectExpandId = (data, searchValue, collection = [], allData) => { - data.forEach(item => { - if (searchValue && item.title.includes(searchValue)) { - const parentIds = getAncestorIds(item.id, allData, []) - collection.splice(collection.length - 1, 0, ...parentIds) - } - if (item.children) { - collectExpandId(item.children, searchValue, collection, allData) - } - }) - return collection +export const getAncestors = (id, data, arr = []) => { + if (getParent(id, data)) { + arr.push(getParent(id, data)) + getAncestors(getParent(id, data).id, data, arr) + } + return arr +} + +// 寻找某一节点的所有子节点 +export const getChildrenIds = (node, arr = []) => { + if (node.children) { + arr.splice(0, 0, ...node.children.map((i) => i.id)) + node.children.forEach((c) => getChildrenIds(c, arr)) + } + + return arr } + // 给定一个结合,根据 id 寻找节点 export const findNode = (itemId, data) => { let node @@ -132,3 +68,20 @@ export const findNode = (itemId, data) => { }) return node } + +export const getSemiChecked = (checkedIds, data, allData, semiChecked = []) => { + data.forEach((node) => { + const ancestorIds = getAncestorIds(node.id, allData) + if (checkedIds.includes(node.id)) { + ancestorIds.forEach((ancestorId) => { + if (!checkedIds.includes(ancestorId) && !semiChecked.includes(ancestorId)) { + semiChecked.push(ancestorId) + } + }) + } + if (node.children) { + getSemiChecked(checkedIds, node.children, allData, semiChecked) + } + }) + return semiChecked +} diff --git a/components/upload/AvatarUpload.js b/components/upload/AvatarUpload.js new file mode 100644 index 000000000..cba583445 --- /dev/null +++ b/components/upload/AvatarUpload.js @@ -0,0 +1,206 @@ +import React, { useState, useCallback, useRef } from 'react' +import Modal from '../modal' +import Preview from './Preview' +import Cropper from 'react-cropper' +import Icon from '../icon' +import FileSelect from './FileSelect' +import useUpload from './hooks/useUpload' +import 'cropperjs/dist/cropper.css' + +const AvatarUpload = ({ + onRemove, + disabled, + accept, + localeDatas, + theme, + fileList, + defaultFileList, + multiple, + avatarOptions = {}, + onChange, + uploadAction, + maxSize, + name = 'file', + withCredentials, + headers, + data, + beforeUpload, + customUpload +}) => { + const { aspectRatio = 0, dragMode = 'move', dropBoxSize = [] } = avatarOptions + const cropperRef = useRef(null) + const [_fileList, uploadFiles, deleteFile] = useUpload({ + fileList, + defaultFileList, + onChange, + uploadAction, + maxSize, + name, + withCredentials, + headers, + data, + onRemove, + beforeUpload, + customUpload, + localeDatas + }) + const [cropperFile, setCropperFile] = useState({}) + + // TODO: 提取 usePreview hook + const [visible, setVisible] = useState(false) + const [previewFile, setPreviewFile] = useState({}) + const [activeIndex, setActiveIndex] = useState(0) + + const closeModal = useCallback(() => { + setPreviewFile({}) + setVisible(false) + }, []) + + const previewImage = useCallback((file, index) => { + setPreviewFile(file) + setVisible(true) + setActiveIndex(index) + }, []) + + const [cropperVisible, setCropperVisible] = useState(false) + + const selectFile = useCallback((files) => { + takeCropper(files[0]) + }, []) + + const takeCropper = useCallback((file) => { + const fr = new window.FileReader() + + fr.onload = (e) => { + file.url = e.target.result + setCropperVisible(true) + setCropperFile(file) + } + fr.readAsDataURL(file) + }, []) + + const base2blob = useCallback((dataurl, filename) => { + const arr = dataurl.split(',') + const mime = arr[0].match(/:(.*?);/)[1] + const bstr = window.atob(arr[1]) + let n = bstr.length + const u8arr = new Uint8Array(n) + while (n--) { + u8arr[n] = bstr.charCodeAt(n) + } + return new window.File([u8arr], filename, { + type: mime + }) + }, []) + + const confirmCropper = useCallback( + (filename) => { + // 裁切图片 + if (cropperRef.current) { + const canvas = cropperRef.current.getCroppedCanvas() + if (typeof canvas === 'undefined') { + return + } + const dataUrl = canvas.toDataURL() + const file = base2blob(dataUrl, filename) + file.url = dataUrl + file.fileType = 'img' + uploadFiles([file]) + setCropperVisible(false) + } + }, + [cropperRef.current] + ) + + const images = _fileList.map((file) => { + return { + url: file && file.url + } + }) + + const file = _fileList[0] + return ( + <div className={`theme__${theme} hi-upload hi-upload--avatar`}> + <ul className="hi-upload__list"> + {!!file && + (file.uploadState === 'loading' ? ( + <li className="hi-upload__item"> + <img src={file.url} className="hi-upload__thumb" /> + <div className="hi-upload__precent"> + <p className="hi-upload__loading-text"> + {file.progressNumber + ? file.progressNumber < 100 + ? file.progressNumber && file.progressNumber.toFixed(2) + '%' + : localeDatas.upload.uploadSuccess + : 0 + '%'} + </p> + <div className="hi-upload__loading-bar" style={{ width: file.progressNumber * 1.4 + 'px' }} /> + </div> + </li> + ) : ( + <li className="hi-upload__item" onClick={() => previewImage(file, 0)} style={{ cursor: 'pointer' }}> + <img src={file.url} className={`hi-upload__thumb ${file.uploadState === 'error' && 'error'}`} /> + <Icon + name="close-circle" + filled + className="hi-upload__photo-del" + onClick={(e) => { + e.stopPropagation() + deleteFile(file, 0) + }} + /> + {file.uploadState === 'error' && ( + <div className="hi-upload__item--photo-error">{localeDatas.upload.uploadFailed}</div> + )} + </li> + ))} + {!file && ( + <FileSelect + onSelect={selectFile} + multiple={multiple} + disabled={disabled} + accept={accept} + style={{ display: 'inline-block' }} + > + <li className="hi-upload__item hi-upload__item--upload"> + <Icon name="plus" style={{ fontSize: 24 }} /> + </li> + </FileSelect> + )} + </ul> + <Modal + visible={cropperVisible} + onConfirm={() => { + confirmCropper(cropperFile.name) + }} + onCancel={() => { + setCropperVisible(false) + }} + backDrop={false} + > + <Cropper + src={cropperFile.url || ''} + ready={(e) => { + if (dropBoxSize.length > 0) { + cropperRef.current.setCropBoxData({ + width: dropBoxSize[0], + height: dropBoxSize[1] || dropBoxSize[0] + }) + } + }} + aspectRatio={aspectRatio} + guides={false} + dragMode={dragMode} + ref={cropperRef} + crop={() => {}} + style={{ height: 400, width: '100%' }} + /> + </Modal> + {visible && ( + <Preview src={previewFile.url} images={images} activeIndex={activeIndex} show={visible} onClose={closeModal} /> + )} + </div> + ) +} + +export default AvatarUpload diff --git a/components/upload/DragUpload.js b/components/upload/DragUpload.js new file mode 100644 index 000000000..e3fcab95f --- /dev/null +++ b/components/upload/DragUpload.js @@ -0,0 +1,152 @@ +import React, { useState, useCallback } from 'react' +import classNames from 'classnames' +import Icon from '../icon' +import FileSelect from './FileSelect' +import useUpload from './hooks/useUpload' + +const DragUpload = ({ + multiple, + accept, + disabled, + tips, + localeDatas, + onRemove, + theme, + onDownload, + fileList, + defaultFileList, + maxCount, + onChange, + maxSize, + uploadAction, + name = 'file', + withCredentials, + headers, + data, + beforeUpload, + customUpload +}) => { + const [_fileList, uploadFiles, deleteFile] = useUpload({ + fileList, + defaultFileList, + onChange, + uploadAction, + maxSize, + name, + withCredentials, + headers, + data, + onRemove, + beforeUpload, + customUpload, + localeDatas + }) + + const [dragging, setDragging] = useState(false) + const onDragOver = useCallback((e) => { + e.preventDefault() + e.stopPropagation() + setDragging(true) + }, []) + + const onDragLeave = useCallback((e) => { + e.preventDefault() + e.stopPropagation() + setDragging(false) + }, []) + + const onDrop = useCallback((e) => { + e.preventDefault() + e.stopPropagation() + if (!disabled) { + uploadFiles(e.dataTransfer.files) + } + setDragging(false) + }, []) + const dragCls = classNames( + 'hi-upload', + 'hi-upload--drag', + dragging && !disabled && 'drop-over', + disabled && 'hi-upload--disabled', + _fileList.length > 0 && 'hi-upload--nohover' + ) + + return ( + <FileSelect + onSelect={uploadFiles} + multiple={multiple} + className={`theme__${theme}`} + disabled={disabled || _fileList.length >= maxCount} + accept={accept} + > + <div className={dragCls} onDragOver={onDragOver} onDragLeave={onDragLeave} onDrop={onDrop}> + {_fileList.length === 0 ? ( + <div className={'drag-upload__desc'}> + <Icon name="cloud-upload" className="icon" /> + <span>{localeDatas.upload.drag}</span> + {tips && <span className="hi-upload__tips hi-upload__tips--single-line">{tips}</span>} + </div> + ) : ( + <ul className={'hi-upload__list'}> + {_fileList.length > 0 && ( + <li className="hi-upload__item hi-upload__item-tips"> + <Icon name="tishi" /> + <span className="hi-upload__tips--exist"> + {_fileList.length >= maxCount ? localeDatas.upload.dragTipsLimited : localeDatas.upload.dragTips} + {tips && ',' + tips} + </span> + </li> + )} + {_fileList.map((file, index) => { + return ( + <li key={index} title={file.name} className="hi-upload__item"> + <span className={`Ficon-${file.fileType}`} /> + <div className="hi-upload__right-content"> + <a + target="_blank" + rel="noreferrer" + href={file.url || null} + className={classNames( + 'hi-upload__filename', + 'upload-list__item-name', + file.uploadState === 'error' && 'hi-upload__filename--error' + )} + title={file.name} + onClick={(e) => { + if (onDownload) { + e.preventDefault() + onDownload(file) + } + }} + > + {file.name} + </a> + <span + className="hi-upload__operate-icon" + onClick={(e) => { + e.stopPropagation() + deleteFile(file, index) + }} + > + {file.uploadState === 'loading' ? localeDatas.upload.cancel : localeDatas.upload.delete} + </span> + </div> + {file.uploadState === 'loading' && ( + <div className="hi-upload__upstatus"> + <i className="hi-upload__upstatus-line" style={{ width: file.progressNumber + '%' }} /> + <i className="hi-upload__upstatus-num"> + {(file.progressNumber && file.progressNumber.toFixed(2)) || 0}% + </i> + </div> + )} + </li> + ) + })} + </ul> + )} + </div> + </FileSelect> + ) +} + +export default DragUpload diff --git a/components/upload/FileSelect.js b/components/upload/FileSelect.js new file mode 100644 index 000000000..af0928bfe --- /dev/null +++ b/components/upload/FileSelect.js @@ -0,0 +1,29 @@ +import React, { useCallback, useRef } from 'react' + +const FileSelect = ({ children, onSelect, multiple, disabled, accept, style, className }) => { + const inputRef = useRef(null) + const onClick = useCallback(() => { + if (inputRef.current) { + inputRef.current.click() + } + }, [inputRef.current]) + return ( + <div onClick={onClick} className={className} style={style}> + <input + type="file" + multiple={multiple && 'multiple'} + disabled={disabled && 'disabled'} + accept={accept} + style={{ display: 'none' }} + onChange={(e) => { + onSelect(e.target.files) + inputRef.current.value = '' + }} + ref={inputRef} + /> + {children} + </div> + ) +} + +export default FileSelect diff --git a/components/upload/NormalUpload.js b/components/upload/NormalUpload.js new file mode 100644 index 000000000..c68e93397 --- /dev/null +++ b/components/upload/NormalUpload.js @@ -0,0 +1,108 @@ +import React from 'react' +import classNames from 'classnames' +import Button from '../button' +import Icon from '../icon' +import FileSelect from './FileSelect' +import useUpload from './hooks/useUpload' + +const NormalUpload = ({ + maxCount, + content, + disabled, + multiple, + tips, + showUploadList = true, + onRemove, + accept, + loading, + onDownload, + fileList, + defaultFileList, + maxSize, + uploadAction, + name, + withCredentials, + headers, + data, + onChange, + beforeUpload, + customUpload, + theme, + localeDatas +}) => { + const [_fileList, uploadFiles, deleteFile] = useUpload({ + fileList, + defaultFileList, + onChange, + uploadAction, + maxSize, + name, + withCredentials, + headers, + data, + onRemove, + beforeUpload, + customUpload, + localeDatas + }) + return ( + <div className={`hi-upload theme__${theme}`}> + <FileSelect + style={{ display: 'inline-block' }} + onSelect={uploadFiles} + multiple={multiple} + disabled={disabled || _fileList.length >= maxCount} + accept={accept} + > + <Button type="primary" disabled={disabled || _fileList.length >= maxCount} loading={loading}> + {content || localeDatas.upload.buttonText} + </Button> + </FileSelect> + {tips && <div className="hi-upload__tips">{tips}</div>} + {showUploadList && _fileList.length > 0 && ( + <ul className="hi-upload__list"> + {_fileList.map((file, index) => { + return ( + <li key={index} className="hi-upload__item" title={file.name}> + <span className={classNames(`Ficon-${file.fileType}`)} /> + <div className="hi-upload__right-content"> + <a + target="_blank" + rel="noreferrer" + href={file.url || null} + className={classNames( + 'hi-upload__filename', + file.uploadState === 'error' && 'hi-upload__filename--error' + )} + title={file.name} + onClick={(e) => { + if (onDownload) { + e.preventDefault() + onDownload(file) + } + }} + > + {file.name} + </a> + <span> + <Icon + onClick={() => deleteFile(file, index)} + name={file.uploadState === 'loading' ? 'close' : 'delete'} + /> + </span> + </div> + {file.uploadState === 'loading' && ( + <div className="hi-upload__upstatus"> + <i className="hi-upload__upstatus-line" style={{ width: file.progressNumber + '%' }} /> + </div> + )} + </li> + ) + })} + </ul> + )} + </div> + ) +} + +export default NormalUpload diff --git a/components/upload/PictureListUpload.js b/components/upload/PictureListUpload.js new file mode 100644 index 000000000..8d4a83479 --- /dev/null +++ b/components/upload/PictureListUpload.js @@ -0,0 +1,110 @@ +import React from 'react' +import Icon from '../icon' +import classNames from 'classnames' +import Button from '../button' +import FileSelect from './FileSelect' +import useUpload from './hooks/useUpload' + +const PictureListUpload = ({ + content, + showUploadList = true, + multiple, + disabled, + accept, + onRemove, + onDownload, + fileList, + defaultFileList, + maxCount, + loading, + onChange, + uploadAction, + maxSize, + name, + theme, + withCredentials, + headers, + data, + beforeUpload, + customUpload, + localeDatas +}) => { + const [_fileList, uploadFiles, deleteFile] = useUpload({ + fileList, + defaultFileList, + onChange, + uploadAction, + maxSize, + name, + withCredentials, + headers, + data, + onRemove, + beforeUpload, + customUpload, + localeDatas + }) + return ( + <div className={`hi-upload hi-upload--picture-card theme__${theme}`}> + <FileSelect + style={{ display: 'inline-block' }} + onSelect={uploadFiles} + multiple={multiple} + disabled={disabled || _fileList.length >= maxCount} + accept={accept} + > + <Button type="primary" disabled={disabled || _fileList.length >= maxCount} loading={loading}> + {content || localeDatas.upload.buttonText} + </Button> + </FileSelect> + {showUploadList && _fileList.length > 0 && ( + <ul className="hi-upload__list"> + {_fileList.map((file, index) => { + const fileNameCls = classNames( + 'hi-upload__filename', + file.uploadState === 'error' && 'hi-upload__filename--error' + ) + const itemCls = classNames('hi-upload__item', file.uploadState === 'error' && 'hi-upload__item--error') + return ( + <li key={index} title={file.name} className={itemCls}> + <div className="img-wrap"> + <img src={file.url} /> + </div> + <div className="hi-upload__right-content"> + <a + target="_blank" + rel="noreferrer" + href={file.url || null} + className={fileNameCls} + title={file.name} + onClick={(e) => { + if (onDownload) { + e.preventDefault() + onDownload(file) + } + }} + > + {file.name} + </a> + <span> + <Icon + name={file.uploadState === 'loading' ? 'close' : 'delete'} + onClick={() => deleteFile(file, index)} + /> + </span> + {file.uploadState === 'loading' && ( + <div className="hi-upload__upstatus"> + <i className="hi-upload__upstatus-line" style={{ width: file.progressNumber + '%' }} /> + </div> + )} + </div> + </li> + ) + })} + </ul> + )} + </div> + ) +} + +export default PictureListUpload diff --git a/components/upload/PictureUpload.js b/components/upload/PictureUpload.js new file mode 100644 index 000000000..7fe7c4317 --- /dev/null +++ b/components/upload/PictureUpload.js @@ -0,0 +1,160 @@ +import React, { useState, useCallback } from 'react' +import classNames from 'classnames' +import Preview from './Preview' +import Icon from '../icon' +import FileSelect from './FileSelect' +import useUpload from './hooks/useUpload' + +const PictureUpload = ({ + onRemove, + disabled, + accept, + localeDatas, + theme, + fileList, + defaultFileList, + photoSize = 'default', + maxCount = Infinity, + multiple, + onChange, + uploadAction, + maxSize, + name, + withCredentials, + headers, + data, + beforeUpload, + customUpload +}) => { + const [_fileList, uploadFiles, deleteFile] = useUpload({ + fileList, + defaultFileList, + onChange, + uploadAction, + maxSize, + name, + withCredentials, + headers, + data, + onRemove, + beforeUpload, + customUpload, + photoSize, + localeDatas + }) + + // TODO: 提取 usePreview hook + const [visible, setVisible] = useState(false) + const [previewFile, setPreviewFile] = useState({}) + const [activeIndex, setActiveIndex] = useState(0) + + const closeModal = useCallback(() => { + setPreviewFile({}) + setVisible(false) + }, []) + + const previewImage = useCallback((file, index) => { + setPreviewFile(file) + setVisible(true) + setActiveIndex(index) + }, []) + + const images = _fileList.map((file) => { + return { + url: file.url + } + }) + + const precentNum = () => { + let num = 1.4 + switch (photoSize) { + case 'small': + num = 0.8 + break + case 'large': + num = 2 + break + default: + num = 1.4 + break + } + return num + } + return ( + <div + className={classNames('hi-upload hi-upload--photo', `theme__${theme}`, { + 'hi-upload--disabled': disabled + })} + > + <ul className="hi-upload__list"> + {_fileList.map((file, index) => { + if (file.uploadState === 'loading') { + return ( + <li key={index} className={classNames('hi-upload__item', `hi-upload__item--${photoSize}`)}> + <img src={file.url} className="hi-upload__thumb" /> + <div className={`hi-upload__precent hi-upload__precent--${photoSize}`}> + <p className="hi-upload__loading-text"> + {file.progressNumber + ? file.progressNumber < 100 + ? file.progressNumber && file.progressNumber.toFixed(2) + '%' + : localeDatas.upload.uploadSuccess + : 0 + '%'} + </p> + <div + className="hi-upload__loading-bar" + style={{ width: file.progressNumber * precentNum() + 'px' }} + /> + {/* 进度条底部阴影 */} + <div className="hi-upload__loading-shadow" /> + </div> + </li> + ) + } else { + return ( + <li + key={index} + className={classNames('hi-upload__item', `hi-upload__item--${photoSize}`)} + style={{ cursor: 'pointer' }} + onClick={() => previewImage(file, index)} + > + <img src={file.url} className={`hi-upload__thumb ${file.uploadState === 'error' && 'error'}`} /> + <Icon + filled + name="close-circle" + className="hi-upload__photo-del" + onClick={(e) => { + e.stopPropagation() + deleteFile(file, index) + }} + /> + {file.uploadState === 'error' && ( + <div className="hi-upload__item--photo-error">{localeDatas.upload.uploadFailed}</div> + )} + </li> + ) + } + })} + {maxCount > _fileList.length && ( + <FileSelect + onSelect={uploadFiles} + multiple={multiple} + disabled={disabled} + accept={accept} + style={{ display: 'inline-block' }} + > + <li className={classNames('hi-upload__item', 'hi-upload__item--upload', `hi-upload__item--${photoSize}`)}> + <label style={{ display: 'block', cursor: 'pointer' }}> + <Icon name="plus" style={{ fontSize: 24 }} /> + </label> + </li> + </FileSelect> + )} + </ul> + {visible && ( + <Preview src={previewFile.url} images={images} activeIndex={activeIndex} show={visible} onClose={closeModal} /> + )} + </div> + ) +} + +export default PictureUpload diff --git a/components/upload/Preview.js b/components/upload/Preview.js index 6cb9254ba..88cc7cd16 100644 --- a/components/upload/Preview.js +++ b/components/upload/Preview.js @@ -7,7 +7,7 @@ import Icon from '../icon' import './style/preview.js' class Preview extends Component { - constructor (props) { + constructor(props) { super(props) this.state = { extraClass: '', @@ -40,14 +40,16 @@ class Preview extends Component { this.handleMouseWheel = this.handleMouseWheel.bind(this) } - componentDidMount () { + componentDidMount() { this.loadImg(this.state.activeIndex) this.previewRef.current.addEventListener('DOMMouseScroll', this.handleMouseWheel, false) } - componentWillUnmount () { + + componentWillUnmount() { this.previewRef.current.removeEventListener('DOMMouseScroll', this.handleMouseWheel, false) } - onClose (e) { + + onClose(e) { this.setState({ style: {}, extraClass: '', @@ -55,7 +57,8 @@ class Preview extends Component { }) this.props.onClose && this.props.onClose() } - handleMouseWheel (e) { + + handleMouseWheel(e) { e = e || window.event e.preventDefault() e.stopPropagation() @@ -73,12 +76,13 @@ class Preview extends Component { direct = delta > 0 ? -1 : 1 } if (direct !== 0) { - let x = e.clientX - let y = e.clientY + const x = e.clientX + const y = e.clientY this.handleZoom(x, y, direct) } } - handleMouseDown (e) { + + handleMouseDown(e) { e.preventDefault() e.stopPropagation() this.setState({ @@ -87,13 +91,15 @@ class Preview extends Component { mouseY: e.nativeEvent.clientY }) } - handleMouseUp () { + + handleMouseUp() { this.setState({ isMouseDown: false }) } - handleMouseMove (e) { + + handleMouseMove(e) { if (this.state.isMouseDown) { - let diffX = e.clientX - this.state.mouseX - let diffY = e.clientY - this.state.mouseY + const diffX = e.clientX - this.state.mouseX + const diffY = e.clientY - this.state.mouseY this.setState({ mouseX: e.clientX, mouseY: e.clientY @@ -104,14 +110,15 @@ class Preview extends Component { }) } } - handleZoom (x, y, direct) { + + handleZoom(x, y, direct) { const speed = 0.05 - let imgCenterXY = this.getImageCenterXY() - let diffX = x - imgCenterXY.x - let diffY = y - imgCenterXY.y - let { left, top, scaleX, scaleY } = this.state.style - let directX = scaleX > 0 ? 1 : -1 - let directY = scaleY > 0 ? 1 : -1 + const imgCenterXY = this.getImageCenterXY() + const diffX = x - imgCenterXY.x + const diffY = y - imgCenterXY.y + const { left, top, scaleX, scaleY } = this.state.style + const directX = scaleX > 0 ? 1 : -1 + const directY = scaleY > 0 ? 1 : -1 const _scaleX = scaleX + speed * direct * directX const _scaleY = scaleY + speed * direct * directY if (Math.abs(_scaleX) < 0.1 || Math.abs(_scaleY) < 0.1) { @@ -120,24 +127,27 @@ class Preview extends Component { this.changeImageState({ scaleX: _scaleX, scaleY: _scaleY, - top: top + -direct * diffY / scaleX * speed * directX, - left: left + -direct * diffX / scaleY * speed * directY + top: top + ((-direct * diffY) / scaleX) * speed * directX, + left: left + ((-direct * diffX) / scaleY) * speed * directY }) } - handleRotate (isRight) { + + handleRotate(isRight) { const { rotate } = this.state.style this.changeImageState({ rotate: rotate + 90 * (isRight ? 1 : -1) }) } - getImageCenterXY () { + + getImageCenterXY() { const { left, top, width, height } = this.state.style return { x: left + width / 2, y: top + height / 2 } } - changeImageState (args) { + + changeImageState(args) { const { style } = this.state const _style = Object.assign({}, style, { ...args }) this.setState( @@ -157,7 +167,8 @@ class Preview extends Component { } ) } - loadImg (imageIndex) { + + loadImg(imageIndex) { const { images } = this.props if (!images || images.length === 0) { return @@ -176,18 +187,19 @@ class Preview extends Component { } img.src = currentImage.url } - getImgWidthHeight (imgWidth, imgHeight) { + + getImgWidthHeight(imgWidth, imgHeight) { let width = 0 let height = 0 const { innerHeight, innerWidth } = window - let maxWidth = innerWidth * 0.8 - let maxHeight = innerHeight * 0.8 + const maxWidth = innerWidth * 0.8 + const maxHeight = innerHeight * 0.8 let style = {} width = Math.min(maxWidth, imgWidth) - height = width / imgWidth * imgHeight + height = (width / imgWidth) * imgHeight if (height > maxHeight) { height = maxHeight - width = height / imgHeight * imgWidth + width = (height / imgHeight) * imgWidth } style = { width, @@ -200,9 +212,10 @@ class Preview extends Component { } this.changeImageState(style) } - clickEvent (type, event) { + + clickEvent(type, event) { event.stopPropagation() - let { activeIndex } = this.state + const { activeIndex } = this.state const { x, y } = this.getImageCenterXY() switch (type) { case 'zoomIn': @@ -234,15 +247,15 @@ class Preview extends Component { } } - render () { + render() { const { show, images } = this.props const { extraClass, compileStyle, isLoaded, activeIndex } = this.state return createPortal( <ReactCSSTransitionGroup - transitionName='hi-preview' + transitionName="hi-preview" transitionEnterTimeout={50} transitionLeaveTimeout={50} - component='div' + component="div" > <div key={1} @@ -251,32 +264,32 @@ class Preview extends Component { onMouseMove={this.handleMouseMove} onWheel={this.handleMouseWheel} > - {isLoaded && + {isLoaded && ( <img ref={this.imgRef} src={images[activeIndex].url} style={{ ...compileStyle }} onMouseDown={this.handleMouseDown} onMouseUp={this.handleMouseUp} - className='hi-preview__image' - />} + className="hi-preview__image" + /> + )} <div - className='hi-preview-toolbar' - onClick={e => { + className="hi-preview-toolbar" + onClick={(e) => { e.stopPropagation() }} > - <Icon name='zoom-out' onClick={this.clickEvent.bind(this, 'zoomIn')} /> - <Icon name='zoom-in' onClick={this.clickEvent.bind(this, 'zoomOut')} /> - <Icon name='left' onClick={this.clickEvent.bind(this, 'prev')} /> - <Icon name='ratio' onClick={this.clickEvent.bind(this, 'reset')} /> - <Icon name='right' onClick={this.clickEvent.bind(this, 'next')} /> - <Icon name='rotate-left' onClick={this.clickEvent.bind(this, 'leftRotate')} /> - <Icon name='rotate-right' onClick={this.clickEvent.bind(this, 'rightRotate')} /> - {/* <Icon name='close-circle-o' onClick={this.clickEvent.bind(this, 'close')} /> */} + <Icon name="zoom-in" onClick={this.clickEvent.bind(this, 'zoomIn')} /> + <Icon name="zoom-out" onClick={this.clickEvent.bind(this, 'zoomOut')} /> + <Icon name="left" onClick={this.clickEvent.bind(this, 'prev')} /> + <Icon name="equal-proportion" onClick={this.clickEvent.bind(this, 'reset')} /> + <Icon name="right" onClick={this.clickEvent.bind(this, 'next')} /> + <Icon name="rotate-left" onClick={this.clickEvent.bind(this, 'leftRotate')} /> + <Icon name="rotate-right" onClick={this.clickEvent.bind(this, 'rightRotate')} /> </div> - <div className='hi-preview__close' onClick={this.onClose.bind(this)}> - <img src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAZGklEQVR4Xu2dC5QVxZnHv6/v5TE+QMAYNIpsHEVHmDu3emVPTASV5SVrjHmtoDGauNHFkAQjEUWPGhWFGNfEVwibRDYSTUJyoub4zEYii0lIqu6dgYyIGAFRwTDoIOwwzJ3+9tRwySICc7u6+lHdVefMGTlWfY9/1W9ud9+urxBsswpYBQ6oAFptrAJWgQMrYAGxq8MqcBAFLCB2eVgFLCB2DVgF1BSwnyBqutlRGVHAApKRibZpqilgAVHTzY7KiAIWkIxMtE1TTQELiJpudlRGFLCAZGSibZpqClhA1HSzozKigAUk4okeNWrUoFwuNxAR5c8AABgof+S/q/8tI2ononb5e8+P/Lf8KZfL70QccqbdWUD0T7/T2Nh4fD6fPwkATkTEk4joJEQ8EQCOB4BcQJfdALCOiF5GxDVEtAYRX+7u7l5TLpfXAwAFtG+H76WABSTgcigUCiflcrmxiDieiEYi4ikBTQYaTkQvImKZiJ7zPG9puVx+OZDBjA+2gPhcAE1NTSc6jnMmIp5JRPL3MT5NRNqdiF4HgKWIuJSIlgoh1kYagOHOLCA1TCBj7BREnEZEFyBifQ1DEttFXpoR0cOI+IgQ4sXEBpqQwCwgB5iIxsbGf8jn81MR8QIAGJWQ+dIaBhG1IOLDnuc9XCqV5P2LbfsoYAHZS5CGhoah/fv3l58SEop/ytJqIaI/SFg6Ojp+1trauilLuR8sVwsIADDGJiHiVQAw3i6MHgWeJaK7hBBPZV2PLAPiuK77KQCYLRnJ+kLYX/5E9GcAuF0I8SsA8LKoUeYAcV23DwB8HgBmAYD8rsK23hV4iYjmIeJDnPOu3runp0dmAGlsbDw0l8tdLi+lEPFD6ZnCSDPZCAB3bt68+fsbN27siNRzTM6yAAgyxi4BgDsQ8aiYdE6b201ENEsI8VDaEts3n1QDwhhrBIAfIqKb9omMIz8iegERr+Ccr4zDfxQ+UwlIQ0PD4P79+98BAF9ERCcKIbPqg4g8RFzQ3d19XRpfpEwbIPLJ1BVEdCsiDsrqoo0p7zYiuk4IsTBNL0ymBhDXdU8gop/ay6mY8Ki6JaI/eZ732XK5vC7eSPR4TwUgrut+BgAeBIBD9MhirQRRgIi2I+IXOOc/D2InCWONBmT48OH9Bw8efJ+cjCSIaWN4rwJEtHDr1q1fWbdu3U5TtTEWELkPI5/PPwYAI0wVPyNxv1SpVD7e3Ny8xsR8jQSEMfZviPgdAKgzUfQMxvy/RPRlIcSPTMvdOEAYYz+wl1SmLbPd8RLRvUKIGSZFbxIgedd1lwDAeSYJbGN9332J3Kh1EQDIvfWJb0YAcuyxx9YdddRRTyLi2MQragOsRYFn2trazjPh5j3xgMgyOX379v0tADTVorztY4wCKwBgAudcljZKbEs0IIVC4UP5fP53AHBCYhW0gQVRYHVHR8dZSd7BmFhAqo9xJRxDg8yAHZt4BV4DgLM4568kMdJEAlIoFE7N5/PPA8DgJIpmY9KuQJvneWNKpVKrdssBDSYOENd1j5ZbPZNebyqg7nb4PgoQ0RuI+I+c8zeTJE6iAHFdV9anlTdvditsklZJdLG8JKvJJOnGPTGAVB/l/g4RT4tuPqynBCqwor29fczatWs7kxBbUgDJua77GwA4Mwmi2BjiVYCInhJCTElCJZVEAMIYW4KIsgSPbVaBHgWI6CEhxOfiliN2QFzXfQAArohbCOs/eQoQ0XwhxDVxRhYrILLaCCIa94ZnnBOWNd+e500rlUoPx5V3bIAwxuoRsdnuAoxr6s3wS0Q7PM8bGdcW3lgAqVY3LAHAqWZMk40yZgVKnHP5dDPyN4DjAkRudvpKzKJb92Yp8G3O+dVRhxw5IMVicbLjOE9Enaj1Z74Cnuf9c6lU+u8oM4kUkJEjR36wb9++qxHxiCiTtL5So8CWHTt2nLx69eq2qDKKFBDGmPymfExUyVk/qVTgWc75hKgyiwwQ13WnAcDiqBKzftKrQJSPfiMBpKGh4bC6ujp5HLHd25HedRtlZm9u3rz5hCiOYIgEEMbYXYg4M0oFra90K0BEdwoh5CFIobbQAanuDJQbYXKhZmKNZ02B7q6urlNbWlrkK/KhtdABYYwtR8TTQ8vAGs6yAss55x8LU4BQAWGMXSjPtQszAWs72woQ0QVCiJ+GpUJogFRvzF8FgCPDCt7atQoAQKg37KEBwhi7ERFvslNoFQhbASKaI4SYG4afUACpHkvwpv3GPIwpszb3VYCI3t66desxYVRqDAUQxtgsRJxvp9IqEJUCRDRTCHG3bn/aAam+yv6Gqfcexx57LPTt2xf++te/6tY60fbq6+uho6MDXn/99UTHeaDgqmWDhnPOu3QmEAYg0wHgPp1Bhm2rf//+cPXVV8O4cePg8MMP73EnF8uyZcvgjjvugG3btoUdQiz2jzjiCLj22mvh9NNPh7q63UetvPvuu/Dss8/CnXfeCbt27YolLlWnRPSl6iGiqibeN043IDnG2CuIeLy2CEM2NGzYMLj77rtB/t5f+9vf/gazZ8+G5ma5+TE9rVAowPz582HIkCH7TWr9+vUwc+ZM2LBhgzFJE9E6IcSHdZ6yqxUQ13U/Xz1M0whR8/k8LFmyBORl1cGa/Es6Y8YM4JwbkVdvQbquC/fcc0/PpeTB2quvvgpTp06FSqXSm8kk/f8LOec/0RWQVkAYY39BxAZdwYVtR/6FvPDCC2tykxZIaoVjjyiLFi3qgcmgtpJz3qgrXm2AMMZcRPyzrsCisPPCCy/0+ld07zhMh8QvHDL37du3w5lnmlXPr1KpsObmZlnzIHDTCch/IOLXAkcUkYGhQ4fCr3/9a9/eTIVEBY494kycOBHa2iLbxOd7TvYz4C7O+dd1GNIFCDLGNiPiB3QEFYUNeXP69NNPK7kyDZIgcEiBxo4dCzt27FDSKqZBmznnWvYeaQGEMTYREZ+KSQxltxKQAz3F6c2oKZAEhWPz5s0wZYosk2tW8zxvfKlUkvWeAzVdgPwYEeXJpUa1K6+8Ei699FLlmJMOSVA4pDALFy6EBQsWKGsU10AielAIoT651cADA1JfX99v4MCB7wBA/7jEUPXbr1+/nvuQQYMGqZro+TItiY+AdcCxZcsWOPfcc6GrS+uX08pa+xz4bltb21FB388KDIjpez7kExr5rXHQNn36dFixQp79E38bPXo03H///YEDueqqq+D55+VJeGY2HXtFdAAizy+fZKaEu6OeMGEC3HbbbYCoLkdSPkl0fHIQEcyZMweeeeYZk6dVHqHwuBDi40GSUF8RAFC9vNoOAPkgQSRhbBogsXC8byVVOOfy0l+5pm8gQBhjZyNipKUgw4TJZEgsHPtfGUQ0RgixTHXdBAXkJkS8UdV5EseZCImF48AriYiuF0LcprrWAgHiuu5v5SHwqs6TOs4kSCwcva6iZzjnE3vtdYAOQQCRB2/K+w/jHu/WIpYJkFg4aplJ2Mk5P0T1FXhlQJqamk7P5XLLawrR0E5JhsTCUfui6u7uHl0ul/9U+4j/76kMiOu6swHgdhWnJo1JIiQWDt8r6GrO+bd9jwIAZUAYY08g4mQVp6aNSRIkFg7/q4eIHhNCnOd/ZDBAXkfEY1ScmjgmCZDogKO7uxtuuOEG478E9LmGNnLOj/M5pqe70idIQ0ND37q6uk4VhyaPiRMSXXBcc801sHTpUpOnQSn2jo6Ofq2trb6rUCgBUigUivl8XihFavigOCCxcARfNJ7nNZVKJd+VN5QAYYz9KyI+EjxsMy1ECYmFQ9sa+Szn/Od+rSkB4rruDQDwTb/O0tQ/CkgsHPpWjGr9XiVAGGMPIWJt5UD05Zg4S2FCYuHQPt2LOOeX+LWqCsgKRDzNr7M09g8DEguH/pVCRL8XQvg+yEkVkHcR8TD9aZhpUUIyd27w6vuXX355jwC1FHU7mFLyUW5Wn1YdRJctnHPfRUV8A+K6rnyvxagSF1FgN2nSJLj11lsDudpTC7e3ioe9OZH1dmV9XdveqwDn3PH7TpZvQBoaGobW1dW9acV/vwI6LreC6Go/OXpV7wOc8y299tqrg29AGhsbR/Tp02e1HydZ6hsXJBaO3lfZrl27Tli5cqWvcy18A9LU1HRaLpdLRnWC3jWJpUfUkFg4apvm7u7uYrlcLtfWe3cv34AUi8VxjuMELsjlJ0gT+0YFiYWj9tXhed7YUqnkq0yLb0AYY+cj4i9rDyu7PcOGxMLhb20R0blCCF8FmX0DYtoZIP4k1N87LEgsHP7nioguEkIs9jNSBZCvAMB3/DjJel/dkFg4lFfUdM75A35G+wakWCxe7zjOLX6c2L56itNJHS0c6qvJ87zZpVJpnh8LvgFxXfdaAAj+tbGfKFPQV5Y4nTdvHuRyuUDZWEACyXcd59zXNnHfgBSLxRmO43w3UJgZG6wLjj2yWUjUFhARzRBC3OtntG9AGGOXIuIP/TjJcl/dcFhIAq2mSzjni/xY8A2I67qfAYCf+XGS1b7y5vyWW24JfFl1IP3sJ4m/lUVEnxJC+PqKwjcgxWJxsuM4T/gLLXu9dT+5spAEX0Pd3d0TyuWyr7c4fQPCGDsDEX19Gxk8NbMsRAWHvdzyty6I6CNCiD/4GeUbkCwXbKhF2KjhsJDUMiu7+3ied2qpVGqtfYTCu1iMsXpEfNmPk6z0jQsOC0ltK6yzs3PYqlWrXqut9+5evj9B7H6Q/cs7efLknhvyIE3Xhqnrrrsua4XhapK9u7t7ULlcludp1tx8AwIAjuu6sgBXsG+8ag4x+R3tltvkzxERdQohfJ9EoAIIMMZaEfGU5MsSfoQ6Lqv2Pd/QFm0IZd7KnPOiX8uqgPwSEc/36yxt/cOAY49GFhK9q4WIHhFCTPVrVQmQYrE413Ec+U5WZluYcFhI9C8rIrpZCHGTX8uqgFzsOI6vr+z9Bpbk/lHAoRuSDFZ0f88S8jxvaqlU8l0uVwmQQqEwOp/P/zHJizis2KKEQyckaTn7XHVeK5UKa25uLvkdrwRIY2PjoX369JHnE2aqxQGHhUTPEov0+AMZsuu6bwDA0XrCT76VOOGwkAReH69xzoepWFH6BJGOGGOPIeK5Kk5NG5MEOCwkgVbNo5zzT6hYUAakWCxe5TiO0sGIKoHGNSZJcFhI1FYBEc0UQtytMloZENd1GQBwFaemjEkiHBYS/6tHpWDcHi/KgMj3uFzXbQeAw/2HnPwRSYbDQlL7+iGid4QQg2of8d6eQQBJ7X2ICXBYSGpe8r/inCu/9REIkDTeh5gEh4WkJki+xjlXruMWCJC03YeYCIeF5OCQEFFBCNFSE0r76RQIkDTdh5gMh4Vk/8s/6P2HtBoUEPmF4U8AwPdbkqpEhzEuDXBYSPa7Mv6Lc/75IGsmMCCMsX9BxMeDBBHn2LPOOgu+9a1vBQ5h+vTpsGJFMo5NGT16NNx///2Bc5o1axY899xzge3EZYCIJgkhng7iPzAgcochY2wLIio/SguSQJCxQ4YMgV/84hdw2GHq55Huu9kpSDw6x+rYT7J9+3Y4//zz4e2339YZWiS2iOhtIcSRslZDEIc6AJGPe7+HiLuPaDWoLViwQF4iKkecVDh0Xm4tX74cvvrVryprFNdAIrpXCDEjqH8tgBSLxTGO4/wuaDBRjpefHk8/rf7pm3Q4dEIybtw4aG+X3wmb0zzPO71UKv0+aMRaAJFBuK67AQCOCxpQVOOHDx8OS5YsUXJnChy6IJGXWa+95qtajpKuGgdt5JxrWYvaAGGMzUfEWRqTDNXU4MGDlUrjmAaHDkjGjx9v1H0IEc0VQszRsYC0AdLU1NSUy+V879jSkYSqjaeeegqOPFLex9XWTIUjCCRvvfUWnHPOObUJlJBeRNQghHhRRzjaAKleZq0EgJE6AovCxmWXXQZXXHFFTa5Mh0MVknvvvRcefPDBmjRKSCel8j4Hil0rIMVi0ahiDvK0p8WLF0N9ff1B5zYtcPiF5JVXXoFp06b1HPtmSiOizwkhHtIVr1ZAZLVFxtgGRDxGV4Bh2znuuOPg5ptvhsbGxv262rBhA9x0003Q0qL8Ok/YKSjZl/nKvIYN2/9OVJnvjTfeaNTNORGtF0KcII9yVBJlP4N0AyK/E/kyIt6jK8Co7Hzyk5+EKVOmQKFQ6HG5evVqePLJJ3s+YdLcLr74Ypg4cSKMGDGiJ81yuQyPP/44PProoyamfSXnPPgrBHtlrh2Q4cOH9x88eLD8FPmAiQoPGDAADjnkENi0aZOJ4SvHfPTRR0NHRwe8846v2s7K/kIYuAUAjuGcd+m0rR0QGRxjbA4i3qozUGvLKnAwBVSOeK5F0VAAaWhoOKyurk6WBUrldtxahLV9olOAiLZXKpWhLS0tO3R7DQWQ6qfIPET8hu6ArT2rwL4KENFtQojrw1AmNEBc1x1IROsQ8YgwArc2rQJVBeS9Rz3nPJSXxUIDRAbvuu5lALDQTqVVIEQFfJ997ieWUAGpXmqtQMTT/ARl+1oFalGAiF4QQny0lr6qfUIHxHXdUUTUjIih+1IVwY4zUoHuSqXS0NzcvCbM6CNZtK7rfhcAAm9eCVMIa9s4Be7inH897KgjAaT62PdVAKj91dmwM7f2TVZgU0dHx4mtra2hH8ERCSDVe5GLEPHHJs+KjT0ZChDRBUKIn0YRTWSAVJ9q/RYAzooiMesjnQoQ0W+EEOOjyi5SQEaOHPnBfv36rbKXWlFNb+r8tHV1dTW0tLS8FVVmkQJSvdQ6GwB+Y59qRTXF6fBDROR53tnlcnlplBlFDkj1Uut2AJgdZaLWl9kKhPk6ycGUiQUQubHKdd0XAGC02dNmo49IgeWc8zMAgCLy93c3cQEiNyZ9KJfLrbLvakU95Wb5kwWoK5XKiCjvO/ZWKDZAZBDFYnGy4zhPmDVlNtooFdBRXzdIvLECUoXkesdxbgmShB2bTgXC2gTlR63YAanetP8nAHzRT+C2b7oVIKL7hBBfjjvLRAAizylhjP0KET8etyDWf/wKENFjQojz4o9EwwE6upJwXbcPAPyPfbKlS1Fj7cg1cLbu4guqaiTlE6QnfrkLEQD+CAC7a9DYljUFVnV0dHwkipcQaxU2UYBUITmaiP5sUvG5WsW2/Q6sABG9UalUinE9zj1QZIkDRAbKGDsFAJabeGqVhUBJgTYA+BjnfLXS6BAHJRIQmW9jY+OIPn36PGvSmSMhzlOaTW+sVCrjwt4ZqCpgYgGRCTU0NAytq6uTp0ierJqgHZdoBV7q7Owcu2rVqs1JjTLRgOx14/6MfbqV1CWkFhcR/X7btm2T1q5du03NQjSjEg+IlEHW+x0yZIispjwhGlmslzAVIKInd+7c+YnW1tZdYfrRYdsIQKqJyjeAfwAAgQ6G1yGataGuABEtFkJ8Lo43c1WiNgmQnvyKxeJcx3GuVUnWjoldgVs55zfEHoWPAIwDpArJVERciIiH+sjVdo1JAVlc2vO8i8rlsnGHjhgJiJxnxlg9Iv4SAEbFNO/WbW0K/MXzvCmlUml9bd2T1ctYQKSM9fX1/QYMGPAdRLw8WbLaaKoKPNDe3j5z7dq1naYqYjQge0QvFoufQsRF9pIrGcvQ5EuqfRVMBSB7LrkA4BFEdJOxTDIbhejq6vp0S0uLrKRpfEsNINWZcFzXvVxWwLDvcUW7NonobUS8nnP+PQDwovUenre0AdKj1Mknnzzk0EMPnUdEX7D1t8JbPNKyrFeFiD/s6Oj4Rmtr69ZwvUVvPZWA7JGxqanptFwuJ/+iseilTb9HeawFAFwshEjXIfJ7TV2qAanmKbfzfgkR5wLA4PQv20gybCOiOUKI75vyjbiqKlkApEeb6m7FfweArwHAB1UFy/i4TZ7n3d3Z2Xlfknb9hTknmQFkj4jyxcdBgwZd4jjOLAD4cJjipsU2Ea0FgDt37tz5IxNeMNSpe+YA2Us8hzH2GUSUNYKbdIqaIluCiOYJIZak6cmUn/nJMiB/16la4XEmAER27oSfSYq6rzyDw/O8+eVyWe7ozHSzgOw1/cVi8RhEvBAA5GlYjVlaGUQkn0QtJqKHSqXSG1nK/WC5WkAOoI4sHIGIcu/JtBTvi98AAA8T0SIhxIsWivcrYAHpfVVgsVgc4zjORUT0adOr0ctvvAFgidy4VCqVnk/7Y9rep/fgPSwg/hTMFQoFN5/PjyGiMxDxYwZ8tyJL6shqhcsqlcqy5uZmDgDd/tLObm8LSMC5Z4w1IuJHAeAMImpCRFnTK7ZGRC8iYsnzvGWO48iDZ1bGFkwKHFtA9E+i09TUNCyXy51ERCchovx9ovwNAMfL07UCupR//dcT0RpEXENEL8vfXV1dL7e0tKyzl0wB1d1nuAVEr569Whs1atSgXC43EBHlzwAAkPWIe/5d/W9po52I2uXvPT/y3/KnXC6/06sT20GbAhYQbVJaQ2lUwAKSxlm1OWlTwAKiTUprKI0KWEDSOKs2J20KWEC0SWkNpVEBC0gaZ9XmpE0BC4g2Ka2hNCpgAUnjrNqctClgAdEmpTWURgUsIGmcVZuTNgUsINqktIbSqIAFJI2zanPSpsD/AXXskF+F6TXSAAAAAElFTkSuQmCC' /> + <div className="hi-preview__close" onClick={this.onClose.bind(this)}> + <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAZGklEQVR4Xu2dC5QVxZnHv6/v5TE+QMAYNIpsHEVHmDu3emVPTASV5SVrjHmtoDGauNHFkAQjEUWPGhWFGNfEVwibRDYSTUJyoub4zEYii0lIqu6dgYyIGAFRwTDoIOwwzJ3+9tRwySICc7u6+lHdVefMGTlWfY9/1W9ud9+urxBsswpYBQ6oAFptrAJWgQMrYAGxq8MqcBAFLCB2eVgFLCB2DVgF1BSwnyBqutlRGVHAApKRibZpqilgAVHTzY7KiAIWkIxMtE1TTQELiJpudlRGFLCAZGSibZpqClhA1HSzozKigAUk4okeNWrUoFwuNxAR5c8AABgof+S/q/8tI2ononb5e8+P/Lf8KZfL70QccqbdWUD0T7/T2Nh4fD6fPwkATkTEk4joJEQ8EQCOB4BcQJfdALCOiF5GxDVEtAYRX+7u7l5TLpfXAwAFtG+H76WABSTgcigUCiflcrmxiDieiEYi4ikBTQYaTkQvImKZiJ7zPG9puVx+OZDBjA+2gPhcAE1NTSc6jnMmIp5JRPL3MT5NRNqdiF4HgKWIuJSIlgoh1kYagOHOLCA1TCBj7BREnEZEFyBifQ1DEttFXpoR0cOI+IgQ4sXEBpqQwCwgB5iIxsbGf8jn81MR8QIAGJWQ+dIaBhG1IOLDnuc9XCqV5P2LbfsoYAHZS5CGhoah/fv3l58SEop/ytJqIaI/SFg6Ojp+1trauilLuR8sVwsIADDGJiHiVQAw3i6MHgWeJaK7hBBPZV2PLAPiuK77KQCYLRnJ+kLYX/5E9GcAuF0I8SsA8LKoUeYAcV23DwB8HgBmAYD8rsK23hV4iYjmIeJDnPOu3runp0dmAGlsbDw0l8tdLi+lEPFD6ZnCSDPZCAB3bt68+fsbN27siNRzTM6yAAgyxi4BgDsQ8aiYdE6b201ENEsI8VDaEts3n1QDwhhrBIAfIqKb9omMIz8iegERr+Ccr4zDfxQ+UwlIQ0PD4P79+98BAF9ERCcKIbPqg4g8RFzQ3d19XRpfpEwbIPLJ1BVEdCsiDsrqoo0p7zYiuk4IsTBNL0ymBhDXdU8gop/ay6mY8Ki6JaI/eZ732XK5vC7eSPR4TwUgrut+BgAeBIBD9MhirQRRgIi2I+IXOOc/D2InCWONBmT48OH9Bw8efJ+cjCSIaWN4rwJEtHDr1q1fWbdu3U5TtTEWELkPI5/PPwYAI0wVPyNxv1SpVD7e3Ny8xsR8jQSEMfZviPgdAKgzUfQMxvy/RPRlIcSPTMvdOEAYYz+wl1SmLbPd8RLRvUKIGSZFbxIgedd1lwDAeSYJbGN9332J3Kh1EQDIvfWJb0YAcuyxx9YdddRRTyLi2MQragOsRYFn2trazjPh5j3xgMgyOX379v0tADTVorztY4wCKwBgAudcljZKbEs0IIVC4UP5fP53AHBCYhW0gQVRYHVHR8dZSd7BmFhAqo9xJRxDg8yAHZt4BV4DgLM4568kMdJEAlIoFE7N5/PPA8DgJIpmY9KuQJvneWNKpVKrdssBDSYOENd1j5ZbPZNebyqg7nb4PgoQ0RuI+I+c8zeTJE6iAHFdV9anlTdvditsklZJdLG8JKvJJOnGPTGAVB/l/g4RT4tuPqynBCqwor29fczatWs7kxBbUgDJua77GwA4Mwmi2BjiVYCInhJCTElCJZVEAMIYW4KIsgSPbVaBHgWI6CEhxOfiliN2QFzXfQAArohbCOs/eQoQ0XwhxDVxRhYrILLaCCIa94ZnnBOWNd+e500rlUoPx5V3bIAwxuoRsdnuAoxr6s3wS0Q7PM8bGdcW3lgAqVY3LAHAqWZMk40yZgVKnHP5dDPyN4DjAkRudvpKzKJb92Yp8G3O+dVRhxw5IMVicbLjOE9Enaj1Z74Cnuf9c6lU+u8oM4kUkJEjR36wb9++qxHxiCiTtL5So8CWHTt2nLx69eq2qDKKFBDGmPymfExUyVk/qVTgWc75hKgyiwwQ13WnAcDiqBKzftKrQJSPfiMBpKGh4bC6ujp5HLHd25HedRtlZm9u3rz5hCiOYIgEEMbYXYg4M0oFra90K0BEdwoh5CFIobbQAanuDJQbYXKhZmKNZ02B7q6urlNbWlrkK/KhtdABYYwtR8TTQ8vAGs6yAss55x8LU4BQAWGMXSjPtQszAWs72woQ0QVCiJ+GpUJogFRvzF8FgCPDCt7atQoAQKg37KEBwhi7ERFvslNoFQhbASKaI4SYG4afUACpHkvwpv3GPIwpszb3VYCI3t66desxYVRqDAUQxtgsRJxvp9IqEJUCRDRTCHG3bn/aAam+yv6Gqfcexx57LPTt2xf++te/6tY60fbq6+uho6MDXn/99UTHeaDgqmWDhnPOu3QmEAYg0wHgPp1Bhm2rf//+cPXVV8O4cePg8MMP73EnF8uyZcvgjjvugG3btoUdQiz2jzjiCLj22mvh9NNPh7q63UetvPvuu/Dss8/CnXfeCbt27YolLlWnRPSl6iGiqibeN043IDnG2CuIeLy2CEM2NGzYMLj77rtB/t5f+9vf/gazZ8+G5ma5+TE9rVAowPz582HIkCH7TWr9+vUwc+ZM2LBhgzFJE9E6IcSHdZ6yqxUQ13U/Xz1M0whR8/k8LFmyBORl1cGa/Es6Y8YM4JwbkVdvQbquC/fcc0/PpeTB2quvvgpTp06FSqXSm8kk/f8LOec/0RWQVkAYY39BxAZdwYVtR/6FvPDCC2tykxZIaoVjjyiLFi3qgcmgtpJz3qgrXm2AMMZcRPyzrsCisPPCCy/0+ld07zhMh8QvHDL37du3w5lnmlXPr1KpsObmZlnzIHDTCch/IOLXAkcUkYGhQ4fCr3/9a9/eTIVEBY494kycOBHa2iLbxOd7TvYz4C7O+dd1GNIFCDLGNiPiB3QEFYUNeXP69NNPK7kyDZIgcEiBxo4dCzt27FDSKqZBmznnWvYeaQGEMTYREZ+KSQxltxKQAz3F6c2oKZAEhWPz5s0wZYosk2tW8zxvfKlUkvWeAzVdgPwYEeXJpUa1K6+8Ei699FLlmJMOSVA4pDALFy6EBQsWKGsU10AielAIoT651cADA1JfX99v4MCB7wBA/7jEUPXbr1+/nvuQQYMGqZro+TItiY+AdcCxZcsWOPfcc6GrS+uX08pa+xz4bltb21FB388KDIjpez7kExr5rXHQNn36dFixQp79E38bPXo03H///YEDueqqq+D55+VJeGY2HXtFdAAizy+fZKaEu6OeMGEC3HbbbYCoLkdSPkl0fHIQEcyZMweeeeYZk6dVHqHwuBDi40GSUF8RAFC9vNoOAPkgQSRhbBogsXC8byVVOOfy0l+5pm8gQBhjZyNipKUgw4TJZEgsHPtfGUQ0RgixTHXdBAXkJkS8UdV5EseZCImF48AriYiuF0LcprrWAgHiuu5v5SHwqs6TOs4kSCwcva6iZzjnE3vtdYAOQQCRB2/K+w/jHu/WIpYJkFg4aplJ2Mk5P0T1FXhlQJqamk7P5XLLawrR0E5JhsTCUfui6u7uHl0ul/9U+4j/76kMiOu6swHgdhWnJo1JIiQWDt8r6GrO+bd9jwIAZUAYY08g4mQVp6aNSRIkFg7/q4eIHhNCnOd/ZDBAXkfEY1ScmjgmCZDogKO7uxtuuOEG478E9LmGNnLOj/M5pqe70idIQ0ND37q6uk4VhyaPiRMSXXBcc801sHTpUpOnQSn2jo6Ofq2trb6rUCgBUigUivl8XihFavigOCCxcARfNJ7nNZVKJd+VN5QAYYz9KyI+EjxsMy1ECYmFQ9sa+Szn/Od+rSkB4rruDQDwTb/O0tQ/CkgsHPpWjGr9XiVAGGMPIWJt5UD05Zg4S2FCYuHQPt2LOOeX+LWqCsgKRDzNr7M09g8DEguH/pVCRL8XQvg+yEkVkHcR8TD9aZhpUUIyd27w6vuXX355jwC1FHU7mFLyUW5Wn1YdRJctnHPfRUV8A+K6rnyvxagSF1FgN2nSJLj11lsDudpTC7e3ioe9OZH1dmV9XdveqwDn3PH7TpZvQBoaGobW1dW9acV/vwI6LreC6Go/OXpV7wOc8y299tqrg29AGhsbR/Tp02e1HydZ6hsXJBaO3lfZrl27Tli5cqWvcy18A9LU1HRaLpdLRnWC3jWJpUfUkFg4apvm7u7uYrlcLtfWe3cv34AUi8VxjuMELsjlJ0gT+0YFiYWj9tXhed7YUqnkq0yLb0AYY+cj4i9rDyu7PcOGxMLhb20R0blCCF8FmX0DYtoZIP4k1N87LEgsHP7nioguEkIs9jNSBZCvAMB3/DjJel/dkFg4lFfUdM75A35G+wakWCxe7zjOLX6c2L56itNJHS0c6qvJ87zZpVJpnh8LvgFxXfdaAAj+tbGfKFPQV5Y4nTdvHuRyuUDZWEACyXcd59zXNnHfgBSLxRmO43w3UJgZG6wLjj2yWUjUFhARzRBC3OtntG9AGGOXIuIP/TjJcl/dcFhIAq2mSzjni/xY8A2I67qfAYCf+XGS1b7y5vyWW24JfFl1IP3sJ4m/lUVEnxJC+PqKwjcgxWJxsuM4T/gLLXu9dT+5spAEX0Pd3d0TyuWyr7c4fQPCGDsDEX19Gxk8NbMsRAWHvdzyty6I6CNCiD/4GeUbkCwXbKhF2KjhsJDUMiu7+3ied2qpVGqtfYTCu1iMsXpEfNmPk6z0jQsOC0ltK6yzs3PYqlWrXqut9+5evj9B7H6Q/cs7efLknhvyIE3Xhqnrrrsua4XhapK9u7t7ULlcludp1tx8AwIAjuu6sgBXsG+8ag4x+R3tltvkzxERdQohfJ9EoAIIMMZaEfGU5MsSfoQ6Lqv2Pd/QFm0IZd7KnPOiX8uqgPwSEc/36yxt/cOAY49GFhK9q4WIHhFCTPVrVQmQYrE413Ec+U5WZluYcFhI9C8rIrpZCHGTX8uqgFzsOI6vr+z9Bpbk/lHAoRuSDFZ0f88S8jxvaqlU8l0uVwmQQqEwOp/P/zHJizis2KKEQyckaTn7XHVeK5UKa25uLvkdrwRIY2PjoX369JHnE2aqxQGHhUTPEov0+AMZsuu6bwDA0XrCT76VOOGwkAReH69xzoepWFH6BJGOGGOPIeK5Kk5NG5MEOCwkgVbNo5zzT6hYUAakWCxe5TiO0sGIKoHGNSZJcFhI1FYBEc0UQtytMloZENd1GQBwFaemjEkiHBYS/6tHpWDcHi/KgMj3uFzXbQeAw/2HnPwRSYbDQlL7+iGid4QQg2of8d6eQQBJ7X2ICXBYSGpe8r/inCu/9REIkDTeh5gEh4WkJki+xjlXruMWCJC03YeYCIeF5OCQEFFBCNFSE0r76RQIkDTdh5gMh4Vk/8s/6P2HtBoUEPmF4U8AwPdbkqpEhzEuDXBYSPa7Mv6Lc/75IGsmMCCMsX9BxMeDBBHn2LPOOgu+9a1vBQ5h+vTpsGJFMo5NGT16NNx///2Bc5o1axY899xzge3EZYCIJgkhng7iPzAgcochY2wLIio/SguSQJCxQ4YMgV/84hdw2GHq55Huu9kpSDw6x+rYT7J9+3Y4//zz4e2339YZWiS2iOhtIcSRslZDEIc6AJGPe7+HiLuPaDWoLViwQF4iKkecVDh0Xm4tX74cvvrVryprFNdAIrpXCDEjqH8tgBSLxTGO4/wuaDBRjpefHk8/rf7pm3Q4dEIybtw4aG+X3wmb0zzPO71UKv0+aMRaAJFBuK67AQCOCxpQVOOHDx8OS5YsUXJnChy6IJGXWa+95qtajpKuGgdt5JxrWYvaAGGMzUfEWRqTDNXU4MGDlUrjmAaHDkjGjx9v1H0IEc0VQszRsYC0AdLU1NSUy+V879jSkYSqjaeeegqOPFLex9XWTIUjCCRvvfUWnHPOObUJlJBeRNQghHhRRzjaAKleZq0EgJE6AovCxmWXXQZXXHFFTa5Mh0MVknvvvRcefPDBmjRKSCel8j4Hil0rIMVi0ahiDvK0p8WLF0N9ff1B5zYtcPiF5JVXXoFp06b1HPtmSiOizwkhHtIVr1ZAZLVFxtgGRDxGV4Bh2znuuOPg5ptvhsbGxv262rBhA9x0003Q0qL8Ok/YKSjZl/nKvIYN2/9OVJnvjTfeaNTNORGtF0KcII9yVBJlP4N0AyK/E/kyIt6jK8Co7Hzyk5+EKVOmQKFQ6HG5evVqePLJJ3s+YdLcLr74Ypg4cSKMGDGiJ81yuQyPP/44PProoyamfSXnPPgrBHtlrh2Q4cOH9x88eLD8FPmAiQoPGDAADjnkENi0aZOJ4SvHfPTRR0NHRwe8846v2s7K/kIYuAUAjuGcd+m0rR0QGRxjbA4i3qozUGvLKnAwBVSOeK5F0VAAaWhoOKyurk6WBUrldtxahLV9olOAiLZXKpWhLS0tO3R7DQWQ6qfIPET8hu6ArT2rwL4KENFtQojrw1AmNEBc1x1IROsQ8YgwArc2rQJVBeS9Rz3nPJSXxUIDRAbvuu5lALDQTqVVIEQFfJ997ieWUAGpXmqtQMTT/ARl+1oFalGAiF4QQny0lr6qfUIHxHXdUUTUjIih+1IVwY4zUoHuSqXS0NzcvCbM6CNZtK7rfhcAAm9eCVMIa9s4Be7inH897KgjAaT62PdVAKj91dmwM7f2TVZgU0dHx4mtra2hH8ERCSDVe5GLEPHHJs+KjT0ZChDRBUKIn0YRTWSAVJ9q/RYAzooiMesjnQoQ0W+EEOOjyi5SQEaOHPnBfv36rbKXWlFNb+r8tHV1dTW0tLS8FVVmkQJSvdQ6GwB+Y59qRTXF6fBDROR53tnlcnlplBlFDkj1Uut2AJgdZaLWl9kKhPk6ycGUiQUQubHKdd0XAGC02dNmo49IgeWc8zMAgCLy93c3cQEiNyZ9KJfLrbLvakU95Wb5kwWoK5XKiCjvO/ZWKDZAZBDFYnGy4zhPmDVlNtooFdBRXzdIvLECUoXkesdxbgmShB2bTgXC2gTlR63YAanetP8nAHzRT+C2b7oVIKL7hBBfjjvLRAAizylhjP0KET8etyDWf/wKENFjQojz4o9EwwE6upJwXbcPAPyPfbKlS1Fj7cg1cLbu4guqaiTlE6QnfrkLEQD+CAC7a9DYljUFVnV0dHwkipcQaxU2UYBUITmaiP5sUvG5WsW2/Q6sABG9UalUinE9zj1QZIkDRAbKGDsFAJabeGqVhUBJgTYA+BjnfLXS6BAHJRIQmW9jY+OIPn36PGvSmSMhzlOaTW+sVCrjwt4ZqCpgYgGRCTU0NAytq6uTp0ierJqgHZdoBV7q7Owcu2rVqs1JjTLRgOx14/6MfbqV1CWkFhcR/X7btm2T1q5du03NQjSjEg+IlEHW+x0yZIispjwhGlmslzAVIKInd+7c+YnW1tZdYfrRYdsIQKqJyjeAfwAAgQ6G1yGataGuABEtFkJ8Lo43c1WiNgmQnvyKxeJcx3GuVUnWjoldgVs55zfEHoWPAIwDpArJVERciIiH+sjVdo1JAVlc2vO8i8rlsnGHjhgJiJxnxlg9Iv4SAEbFNO/WbW0K/MXzvCmlUml9bd2T1ctYQKSM9fX1/QYMGPAdRLw8WbLaaKoKPNDe3j5z7dq1naYqYjQge0QvFoufQsRF9pIrGcvQ5EuqfRVMBSB7LrkA4BFEdJOxTDIbhejq6vp0S0uLrKRpfEsNINWZcFzXvVxWwLDvcUW7NonobUS8nnP+PQDwovUenre0AdKj1Mknnzzk0EMPnUdEX7D1t8JbPNKyrFeFiD/s6Oj4Rmtr69ZwvUVvPZWA7JGxqanptFwuJ/+iseilTb9HeawFAFwshEjXIfJ7TV2qAanmKbfzfgkR5wLA4PQv20gybCOiOUKI75vyjbiqKlkApEeb6m7FfweArwHAB1UFy/i4TZ7n3d3Z2Xlfknb9hTknmQFkj4jyxcdBgwZd4jjOLAD4cJjipsU2Ea0FgDt37tz5IxNeMNSpe+YA2Us8hzH2GUSUNYKbdIqaIluCiOYJIZak6cmUn/nJMiB/16la4XEmAER27oSfSYq6rzyDw/O8+eVyWe7ozHSzgOw1/cVi8RhEvBAA5GlYjVlaGUQkn0QtJqKHSqXSG1nK/WC5WkAOoI4sHIGIcu/JtBTvi98AAA8T0SIhxIsWivcrYAHpfVVgsVgc4zjORUT0adOr0ctvvAFgidy4VCqVnk/7Y9rep/fgPSwg/hTMFQoFN5/PjyGiMxDxYwZ8tyJL6shqhcsqlcqy5uZmDgDd/tLObm8LSMC5Z4w1IuJHAeAMImpCRFnTK7ZGRC8iYsnzvGWO48iDZ1bGFkwKHFtA9E+i09TUNCyXy51ERCchovx9ovwNAMfL07UCupR//dcT0RpEXENEL8vfXV1dL7e0tKyzl0wB1d1nuAVEr569Whs1atSgXC43EBHlzwAAkPWIe/5d/W9po52I2uXvPT/y3/KnXC6/06sT20GbAhYQbVJaQ2lUwAKSxlm1OWlTwAKiTUprKI0KWEDSOKs2J20KWEC0SWkNpVEBC0gaZ9XmpE0BC4g2Ka2hNCpgAUnjrNqctClgAdEmpTWURgUsIGmcVZuTNgUsINqktIbSqIAFJI2zanPSpsD/AXXskF+F6TXSAAAAAElFTkSuQmCC" /> </div> </div> </ReactCSSTransitionGroup>, diff --git a/components/upload/Upload.js b/components/upload/Upload.js deleted file mode 100644 index 50bd7cf47..000000000 --- a/components/upload/Upload.js +++ /dev/null @@ -1,372 +0,0 @@ -import React, { Component } from 'react' -import ReactDOM from 'react-dom' -import PropTypes from 'prop-types' -import shallowEqual from 'shallowequal' -import cloneDeep from 'lodash/cloneDeep' -import Modal from '../modal' -import Button from '../button' -import Icon from '../icon' - -let fileId = 0 - -class Upload extends Component { - constructor (props) { - super(props) - - const fileList = this.prepareDefaultFileList(props.fileList || props.defaultFileList) - this.state = { - visibleModal: false, - fileList, - fileCountLimted: fileList.length >= props.maxCount - } - } - componentWillReceiveProps (nextProps) { - if (!shallowEqual(nextProps.fileList, this.props.fileList)) { - this.setState({ - fileList: this.prepareDefaultFileList(nextProps.fileList), - fileCountLimted: nextProps.fileList.length >= nextProps.maxCount - }) - } - } - - prepareDefaultFileList (fileList) { - const _fileList = cloneDeep(fileList) - - _fileList.map(file => { - file.fileId = this.getFileId() - }) - return _fileList - } - - getFileType (file) { - let ext = file.name.slice(file.name.lastIndexOf('.') + 1).toLowerCase() - let fileType = '' - switch (ext) { - case 'jpg': - case 'jpeg': - case 'gif': - case 'png': - case 'bmp': - fileType = 'img' - break - case 'rar': - case 'zip': - fileType = 'zip' - break - case 'doc': - case 'docx': - fileType = 'word' - break - case 'pdf': - fileType = 'pdf' - break - case 'ppt': - case 'pptx': - fileType = 'ppt' - break - case 'xls': - case 'xlsx': - fileType = 'excel' - break - case 'key': - fileType = 'key' - break - case 'exe': - case 'dmg': - fileType = 'exe' - break - case 'mp4': - fileType = 'video' - break - case 'mp3': - fileType = 'audio' - break - default: - fileType = 'other' - break - } - return fileType - } - - getFileId () { - return `$$HIUI_FILE_ID_${fileId++}` - } - outMaxsizeTip () { - const { localeDatas } = this.props - if (this.state.visibleModal) { - return ( - <Modal - title={localeDatas.upload.modalTitle} - style={{width: '480px'}} - onCancel={this.cancelEvent} - visible={this.state.visibleModal} - footer={[ - <Button type='primary' key={0} onClick={this.cancelEvent}>{localeDatas.upload.modalBtn}</Button> - ]} - > - <div className='hi-upload__modal-tips'> - <Icon name='info-circle-o' style={{color: '#db9639', fontSize: '48px'}} /> - <div className='hi-upload__error—content'> - <div className='hi-upload__error-title'>{localeDatas.upload.modalTiptitle}</div> - <div className='hi-upload__error-info'>{localeDatas.upload.modalTiptxt}</div> - </div> - </div> - </Modal> - ) - } - return null - } - - cancelEvent = () => { - this.setState({ - visibleModal: false - }) - } - - uploadFiles (files) { - const { beforeUpload, customUpload, maxSize } = this.props - const { fileList, fileCountLimted } = this.state - if (fileCountLimted) { - return - } - if (!beforeUpload(files, fileList)) { - return - } - if (customUpload) { - customUpload(files) - ReactDOM.findDOMNode(this.uploadRef).value = '' - return - } - - if (files.length === 0) return - const _fileList = [...fileList] - - Object.keys(files).forEach((key) => { - const file = files[key] - if (file.size > maxSize * 1024) { - this.setState({ - visibleModal: true - }) - return - } - - file.fileId = this.getFileId() - file.uploadState = 'loading' - file.fileType = this.getFileType(file) - - _fileList.unshift(file) - this.setState({ fileList: _fileList }, () => { - this.uploadFile(file) - }) - }) - - ReactDOM.findDOMNode(this.uploadRef).value = '' - } - - deleteFile (file, index) { - const { fileList } = this.state - const { onRemove } = this.props - const doRemove = () => { - fileList.splice(index, 1) - this.setState({ fileList, fileCountLimted: false }) - } - const ret = onRemove(file, fileList, index) - - file.uploadState === 'loading' && file.xhr.abort() - if (ret === true) { - doRemove() - } else if (ret && typeof ret.then === 'function') { - ret.then(res => { - if (res === true) { - doRemove() - } - }) - } - } - - onUpload (file, fileList, response) { - const { onChange, maxCount } = this.props - const onUploadError = () => { - for (const index in fileList) { - if (fileList[index].fileId === file.fileId) { - const _fileList = [...fileList] - _fileList.splice(index, 1) - this.setState({ - fileList: _fileList, - fileCountLimted: _fileList.length >= this.props.maxCount - }) - break - } - } - } - const changeResult = onChange(file, fileList, response) - if (changeResult === false) { - onUploadError() - } else if (changeResult && typeof changeResult.then === 'function') { - changeResult.then(res => { - if (res === false) { - onUploadError() - } - }) - } else { - if (fileList.length >= maxCount) { - this.setState({ fileCountLimted: true }) - } - } - } - - uploadFile = async(file, dataUrl = '') => { - const FileReader = window.FileReader - const XMLHttpRequest = window.XMLHttpRequest - const FormData = window.FormData - const { fileList } = this.state - const { name, params, headers, uploadAction, withCredentials, maxCount } = this.props - - let _uploadAction = typeof uploadAction === 'string' ? uploadAction : uploadAction(file) - - if(_uploadAction.toString() === '[object Promise]'){ - await _uploadAction.then(res=>{ - _uploadAction = res - }).catch((error)=>{ - throw new Error(error) - }) - } - this.setState({ fileCountLimted: fileList.length >= maxCount }) - const onerror = err => { - const { fileList } = this.state - const errRes = err !== undefined ? err : { status: xhr.status, statusText: xhr.statusText } - const _fileList = [...fileList] - file.uploadState = 'error' - const idx = _fileList.findIndex(item => item.fileId === file.fileId) - _fileList.splice(idx, 1, file) - this.setState({ fileList: _fileList }) - this.onUpload(file, _fileList, errRes) - } - - if (file.fileType === 'img') { - // 用来图片预览 - if (dataUrl) { - file.url = dataUrl - } else if (dataUrl !== false) { - const fr = new FileReader() - - fr.onload = e => { - const url = e.target.result - const _fileList = [...fileList] - file.url = url - const idx = _fileList.findIndex(item => item.fileId === file.fileId) - _fileList.splice(idx, 1, file) - this.setState({ fileList: _fileList }) - } - fr.readAsDataURL(file) - } - } - - let xhr = new XMLHttpRequest() - let formFile = new FormData() - file.xhr = xhr - xhr.withCredentials = withCredentials - if (dataUrl) { - formFile.append(name, dataUrl) - } else { - formFile.append(name, file) - } - // 设置除file外需要带入的参数 - if (params) { - for (let i in params) { - formFile.append(i, params[i]) - } - } - xhr.onreadystatechange = () => { - if (xhr.readyState === 4) { - if (xhr.status === 200) { - const { fileList } = this.state - const _fileList = [...fileList] - file.uploadState = 'success' - const idx = _fileList.findIndex(item => item.fileId === file.fileId) - _fileList.splice(idx, 1, file) - this.setState({ fileList: _fileList }, () => - this.onUpload(file, _fileList, JSON.parse(xhr.response)) - ) - } else { - onerror() - } - } - } - xhr.upload.onerror = () => { - onerror() - } - xhr.upload.onprogress = event => { - const { fileList } = this.state - var e = event || window.event - var percentComplete = Math.ceil(e.loaded / e.total * 100) - const _fileList = [...fileList] - const idx = _fileList.findIndex(item => item.fileId === file.fileId) - _fileList.splice(idx, 1, file) - file.progressNumber = percentComplete - this.setState({ fileList: _fileList }) - } - - xhr.open('post', _uploadAction, true) - // 设置用户传入的请求头 - if (headers) { - for (let j in headers) { - xhr.setRequestHeader(j, headers[j]) - } - } - xhr.send(formFile) - } - - uploadStatusIcon (status) { - switch (status) { - case 'success': - return 'right' - - case 'error': - return 'warning' - - default: - return '' - } - } -} - -Upload.propTypes = { - type: PropTypes.string, - accept: PropTypes.string, - limit: PropTypes.number, - buttonText: PropTypes.string, - buttonIcon: PropTypes.string, - param: PropTypes.object, - name: PropTypes.string, - disabled: PropTypes.bool, - headers: PropTypes.object, - showUploadList: PropTypes.bool, - multiple: PropTypes.bool, - onChange: PropTypes.func, - customUpload: PropTypes.func, - beforeUpload: PropTypes.func, - defaultFileList: PropTypes.array, - fileList: PropTypes.array, - onRemove: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]), - maxSize: PropTypes.number, - withCredentials: PropTypes.bool -} - -Upload.defaultProps = { - defaultFileList: [], - headers: {}, - accept: '', - limit: null, - buttonIcon: 'upload', - param: null, - name: 'file', - disabled: false, - showUploadList: true, - multiple: false, - withCredentials: false, - beforeUpload: () => true, - onRemove: () => true, - onChange: () => true -} -export default Upload diff --git a/components/upload/UploadAvatar.js b/components/upload/UploadAvatar.js deleted file mode 100644 index 3ebac6d0d..000000000 --- a/components/upload/UploadAvatar.js +++ /dev/null @@ -1,253 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' -import Modal from '../modal' -import Upload from './Upload' -import Preview from './Preview' -import Cropper from 'react-cropper' -import Icon from '../icon' -import 'cropperjs/dist/cropper.css' - -class UploadAvatar extends Upload { - containerWidth = 550 - containerHeight = 500 - filename = '' - img = null - scale = 1 - draging = false - dragBeginXy = { - x: 0, - y: 0 - } - - constructor (props) { - super(props) - - this.state = Object.assign( - { - showPreviewModal: false, - showCropperModal: false, - position: { - top: 0, - left: 0 - }, - src: '' - }, - this.state - ) - this.cropperRef = React.createRef() - } - - uploadFiles (files) { - if (files.length === 0) return - this.setState({ uploadState: 'loading' }, () => { - this.filename = files[0].name - this.showCropperModal(files[0]) - }) - } - - showCropperModal (file) { - const fr = new window.FileReader() - - fr.onload = e => { - const src = e.target.result - this.setState({ src }, () => { - this.setState({ showCropperModal: true }) - }) - } - fr.readAsDataURL(file) - } - - base2blob (dataurl, filename) { - let arr = dataurl.split(',') - const mime = arr[0].match(/:(.*?);/)[1] - const bstr = window.atob(arr[1]) - let n = bstr.length - let u8arr = new Uint8Array(n) - while (n--) { - u8arr[n] = bstr.charCodeAt(n) - } - return new window.File([u8arr], filename, { - type: mime - }) - } - - cancel () { - this.setState({ showCropperModal: false }) - } - - formatFile (file) { - file.fileType = 'img' - - return file - } - - confirm () { - // 裁切图片 - - const cs = this.cropperRef.current.getCroppedCanvas() - if (typeof cs === 'undefined') { - return - } - const dataUrl = cs.toDataURL() - const file = this.base2blob(dataUrl, this.filename) - file.url = dataUrl - - this.formatFile(file) - this.setState( - { - fileList: [file], - showCropperModal: false - }, - () => { - const { beforeUpload, customUpload } = this.props - - if (!beforeUpload(file, this.state.fileList)) { - return - } - if (customUpload) { - customUpload(file) - } else { - this.uploadFile(file, false) - } - } - ) - } - - closePreviewModal () { - this.setState({ - showPreviewModal: false - }) - } - - previewImage () { - this.setState({ - showPreviewModal: true - }) - } - - render () { - const { disabled, accept, localeDatas, avatarOptions = {}, onRemove, theme } = this.props - const { fileList, showCropperModal, showPreviewModal } = this.state - const { aspectRatio = 0, dragMode = 'move', dropBoxSize = [] } = avatarOptions - const file = fileList[0] - return ( - <div className={`theme__${theme} hi-upload hi-upload--avatar`}> - <ul className='hi-upload__list'> - {!!file && - (file.uploadState === 'loading' - ? <li className='hi-upload__item'> - <img src={file.url} className='hi-upload__thumb' /> - <div className='hi-upload__precent'> - <p className='hi-upload__loading-text'> - {file.progressNumber - ? file.progressNumber < 100 - ? file.progressNumber + '%' - : localeDatas.upload.uploadSuccess - : 0 + '%'} - </p> - <div - className='hi-upload__loading-bar' - style={{ width: file.progressNumber * 1.4 + 'px' }} - /> - </div> - </li> - : <li className='hi-upload__item'> - <img - src={file.url} - className={`hi-upload__thumb ${file.uploadState === 'error' && 'error'}`} - /> - <div className='hi-upload__item-mask' onClick={() => this.previewImage(file)}> - <Icon name='eye' /> - <span> - {localeDatas.upload.preview} - </span> - </div> - {onRemove && - <Icon - name='close-circle' - className='hi-upload__photo-del' - onClick={() => this.deleteFile(file, 0)} - />} - </li>)} - {!file && - <li className='hi-upload__item hi-upload__item--upload'> - <label style={{ display: 'block' }}> - <input - ref={node => { - this.uploadRef = node - }} - type='file' - accept={accept} - disabled={disabled && 'disabled'} - onChange={e => this.uploadFiles(e.target.files)} - hidden - /> - <Icon name='plus' /> - </label> - </li>} - </ul> - <Modal - show={showCropperModal} - onConfirm={() => { - this.confirm() - }} - onCancel={() => { - this.cancel() - }} - backDrop={false} - > - <Cropper - src={this.state.src} - ready={e => { - if (dropBoxSize.length > 0) { - this.cropperRef.current.setCropBoxData({ - width: dropBoxSize[0], - height: dropBoxSize[1] || dropBoxSize[0] - }) - } - }} - aspectRatio={aspectRatio} - guides={false} - dragMode={dragMode} - ref={this.cropperRef} - crop={() => {}} - style={{ height: 400, width: '100%' }} - /> - </Modal> - {showPreviewModal && - file && - <Preview - src={file.url} - images={[file]} - activeIndex={0} - show={showPreviewModal} - onClose={this.closePreviewModal.bind(this)} - />} - </div> - ) - } -} - -UploadAvatar.propTypes = Object.assign( - {}, - { - ...Upload.propTypes - }, - { - width: PropTypes.number, - height: PropTypes.number - } -) -UploadAvatar.defaultProps = Object.assign( - {}, - { - ...Upload.defaultProps - }, - { - width: 200, - height: 200, - accept: 'image/jpg,image/jpeg,image/png' - } -) - -export default UploadAvatar diff --git a/components/upload/UploadClick.js b/components/upload/UploadClick.js deleted file mode 100644 index aced1e1ee..000000000 --- a/components/upload/UploadClick.js +++ /dev/null @@ -1,108 +0,0 @@ -import React from 'react' -import classNames from 'classnames' -import Upload from './Upload' -import Button from '../button' -import Icon from '../icon' - -class UploadClick extends Upload { - handleButtonClick = () => { - this.uploadRef.value = '' - this.uploadRef.click() - } - - render () { - const { - content, - disabled, - multiple, - tips, - showUploadList, - onRemove, - accept, - loading, - localeDatas, - theme, - onDownload - } = this.props - const { - fileList, - fileCountLimted - } = this.state - return ( - <div className={`hi-upload hi-upload--normal theme__${theme}`}> - { - this.outMaxsizeTip() - } - <label> - <input - ref={node => { this.uploadRef = node }} - type='file' - onChange={e => this.uploadFiles(e.target.files)} - multiple={multiple && 'multiple'} - disabled={(disabled || fileCountLimted) && 'disabled'} - accept={accept} - hidden - /> - <Button type='primary' disabled={disabled || fileCountLimted} onClick={this.handleButtonClick} loading={loading}> - { content || localeDatas.upload.buttonText} - </Button> - </label> - { - tips && <span className='hi-upload__tips hi-upload__tips--single-line'>{tips}</span> - } - {showUploadList && ( - <ul className='hi-upload__list'> - {fileList.map((file, index) => { - const fileNameCls = classNames( - 'hi-upload__filename', - file.uploadState === 'error' && 'hi-upload__filename--error' - ) - return ( - <li - key={index} - className='hi-upload__item' - title={file.name} - > - <span className={classNames(`Ficon-${file.fileType}`)} /> - <div className='hi-upload__right-content'> - <a target='_blank' href={file.url || null} className={fileNameCls} title={file.name} onClick={e => { - if (onDownload) { - e.preventDefault() - onDownload(file) - } - }}> - {file.name} - </a> - <span - > - { onRemove && - <Icon - onClick={() => this.deleteFile(file, index)} - name={file.uploadState === 'loading' ? 'close' : 'delete'} - /> - } - </span> - </div> - { - file.uploadState === 'loading' && ( - <div className='hi-upload__upstatus'> - <i className='hi-upload__upstatus-line' style={{ width: file.progressNumber + '%' }} /> - </div> - ) - } - </li> - ) - })} - </ul>)} - </div> - ) - } -} - -UploadClick.defaultProps = Object.assign({}, { - ...Upload.defaultProps -}, { - type: 'normal' -}) - -export default UploadClick diff --git a/components/upload/UploadDrag.js b/components/upload/UploadDrag.js deleted file mode 100644 index d27bdb8c5..000000000 --- a/components/upload/UploadDrag.js +++ /dev/null @@ -1,175 +0,0 @@ -import React from 'react' -import classNames from 'classnames' -import Upload from './Upload' -import Icon from '../icon' - -class UploadDrag extends Upload { - constructor (props) { - super(props) - this.state = Object.assign( - { - overEvent: false - }, - this.state - ) - this.dragBoxRef = React.createRef() - } - - dragoverFn (e) { - e.preventDefault() - this.setState({ overEvent: true }) - } - - dragleaveFn (e) { - e.preventDefault() - this.setState({ overEvent: false }) - } - - dropFn (e) { - e.stopPropagation() - e.preventDefault() - if (this.props.disabled) { - return - } - this.setState({ overEvent: false }) - let files = e.dataTransfer.files - this.uploadFiles(files) - } - targetInput = () => { - this.uploadRef.value = '' - this.uploadRef.click() - } - render () { - const { - multiple, - accept, - disabled, - tips, - localeDatas, - onRemove, - theme, - onDownload - } = this.props - const { - overEvent, - fileList, - fileCountLimted - } = this.state - - const dragCls = classNames( - `theme__${theme}`, - 'hi-upload', - 'hi-upload--drag', - overEvent && !disabled && 'drop-over', - disabled && 'hi-upload--disabled', - fileList.length > 0 && 'hi-upload--nohover' - ) - return ( - <div - className={dragCls} - onDragOver={e => this.dragoverFn(e)} - onDragLeave={e => this.dragleaveFn(e)} - onDrop={e => this.dropFn(e)} - ref={this.dragBoxRef} - onClick={(e) => { - if (e.target.nodeName === 'INPUT' && e.target.type === 'file') { - this.uploadRef.value = '' - } - }} - > - { - this.outMaxsizeTip() - } - <div - className={ - fileList.length === 0 - ? 'show-drop-content' - : 'drop-content' - } - > - <label className='hi-upload-label'> - <Icon name='upload-cloud' className='icon' /> - <span className='drop-click'>{localeDatas.upload.drag}</span> - { - tips && <span className='hi-upload__tips hi-upload__tips--single-line'>{tips}</span> - } - <input - ref={node => { this.uploadRef = node }} - type='file' - className='upload-input' - onChange={e => { - this.uploadFiles(e.target.files) - }} - multiple={multiple && 'multiple'} - disabled={(disabled || fileCountLimted) && 'disabled'} - hidden - accept={accept} - /> - </label> - </div> - <ul - className={ - fileList.length === 0 - ? 'hide-upload-list' - : 'hi-upload__list' - } - > - { - fileList.length > 0 && <li className='hi-upload__item hi-upload__item-tips' onClick={this.targetInput}> - <Icon name='tishi' /> - <span className='hi-upload__tips--exist'> - {fileCountLimted ? localeDatas.upload.dragTipsLimited : localeDatas.upload.dragTips} - {tips && (',' + tips)} - </span> - </li> - } - {fileList.map((file, index) => { - const fileNameCls = classNames( - 'hi-upload__filename', - 'upload-list__item-name', - file.uploadState === 'error' && 'hi-upload__filename--error' - ) - return ( - - <li - key={index} - title={file.name} - className='hi-upload__item' - > - <span className={`Ficon-${file.fileType}`} /> - <div className='hi-upload__right-content'> - <a target='_blank' href={file.url || null} className={fileNameCls} title={file.name} onClick={e => { - if (onDownload) { - e.preventDefault() - onDownload(file) - } - }}> - {file.name} - </a> - { - onRemove && <span - className='hi-upload__operate-icon' - onClick={() => this.deleteFile(file, index)} - > - {file.uploadState === 'loading' ? localeDatas.upload.cancel : localeDatas.upload.delete } - </span> - } - </div> - { - file.uploadState === 'loading' && ( - <div className='hi-upload__upstatus'> - <i className='hi-upload__upstatus-line' style={{ width: file.progressNumber + '%' }} /> - <i className='hi-upload__upstatus-num'>{file.progressNumber || 0}%</i> - </div> - ) - } - </li> - ) - })} - </ul> - </div> - ) - } -} - -export default UploadDrag diff --git a/components/upload/UploadPhoto.js b/components/upload/UploadPhoto.js deleted file mode 100644 index 38949907d..000000000 --- a/components/upload/UploadPhoto.js +++ /dev/null @@ -1,176 +0,0 @@ -import React from 'react' -import classNames from 'classnames' -import Upload from './Upload' -import Preview from './Preview' -import Icon from '../icon' - -class UploadPhoto extends Upload { - constructor (props) { - super(props) - this.state = Object.assign( - { - uploading: false, - progressNumber: 0, - showModal: false, - previewFile: {}, - activeIndex: 0, - images: [] - }, - this.state - ) - } - - closeModal () { - this.setState({ - previewFile: {}, - showModal: false - }) - } - - previewImage (file, activeIndex) { - this.setState({ - previewFile: file, - showModal: true, - activeIndex - }) - } - precentNum () { - const {photoSize} = this.props - let num = 1.4 - switch (photoSize) { - case 'small': - num = 0.8 - break; - case 'large': - num = 2 - break; - default: - num = 1.4 - break; - } - return num - } - render () { - const { - fileList, - showModal, - previewFile, - activeIndex, - fileCountLimted - } = this.state - const { - onRemove, - disabled, - accept, - localeDatas, - theme, - photoSize = 'default' - } = this.props - const images = fileList.map(file => { - return { - url: file.url - } - }) - return ( - <div className={classNames('hi-upload hi-upload--photo', `theme__${theme}`, {'hi-upload--disabled': disabled})} - onClick={(e) => { - if (e.target.nodeName === 'INPUT' && e.target.type === 'file') { - this.uploadRef.value = '' - } - }} - > - { - this.outMaxsizeTip() - } - <ul className='hi-upload__list'> - {fileList.map((file, index) => { - if (file.uploadState === 'loading') { - return ( - <li key={index} className={ - classNames( - 'hi-upload__item', - `hi-upload__item--${photoSize}` - )}> - <img src={file.url} className='hi-upload__thumb' /> - <div className={classNames( - 'hi-upload__precent', - `hi-upload__precent--${photoSize}` - )}> - <p className='hi-upload__loading-text'>{file.progressNumber ? (file.progressNumber < 100 ? (file.progressNumber + '%') : localeDatas.upload.uploadSuccess) : (0 + '%')}</p> - <div className='hi-upload__loading-bar' style={{ width: (file.progressNumber * this.precentNum()) + 'px' }} /> - {/* 进度条底部阴影 */} - <div className='hi-upload__loading-shadow' /> - </div> - </li> - ) - } else { - return ( - <li - key={index} - className={classNames( - 'hi-upload__item', - `hi-upload__item--${photoSize}` - )} - style={{cursor: 'pointer'}} - onClick={() => this.previewImage(file, index)} - > - <img src={file.url} className={`hi-upload__thumb ${file.uploadState === 'error' && 'error'}`} /> - { - onRemove && <Icon name='close-circle' className='hi-upload__photo-del' onClick={(e) => { - e.stopPropagation() - this.deleteFile(file, index) - }} /> - } - { - file.uploadState === 'error' && <div className='hi-upload__item--photo-error'> - {localeDatas.upload.uploadFailed} - </div> - } - </li> - ) - } - })} - { - !fileCountLimted && <li - className={classNames( - 'hi-upload__item', - 'hi-upload__item--upload', - `hi-upload__item--${photoSize}` - )} - > - <label style={{display: 'block'}}> - <input - ref={node => { - this.uploadRef = node - }} - type='file' - accept={accept} - disabled={(disabled || fileCountLimted) && 'disabled'} - onChange={e => this.uploadFiles(e.target.files)} - hidden - /> - <Icon name='plus' /> - </label> - </li> - } - </ul> - { - showModal && <Preview - src={previewFile.url} - images={images} - activeIndex={activeIndex} - show={showModal} - onClose={this.closeModal.bind(this)} - /> - } - </div> - ) - } -} -UploadPhoto.defaultProps = Object.assign({}, { - ...Upload.defaultProps -}, { - accept: 'image/jpg,image/jpeg,image/png' -}) - -export default UploadPhoto diff --git a/components/upload/UploadPictureCard.js b/components/upload/UploadPictureCard.js deleted file mode 100644 index fdb84815e..000000000 --- a/components/upload/UploadPictureCard.js +++ /dev/null @@ -1,108 +0,0 @@ -import React from 'react' -import Upload from './Upload' -import Icon from '../icon' -import classNames from 'classnames' -import Button from '../button' - -class UploadPictureCard extends Upload { - handleButtonClick = () => { - this.uploadRef.value = '' - this.uploadRef.click() - } - render () { - const { - content, - showUploadList, - multiple, - disabled, - accept, - onRemove, - localeDatas, - theme, - onDownload - } = this.props - const { - fileList, - fileCountLimted - } = this.state - - return ( - <div className={`hi-upload hi-upload--picture-card theme__${theme}`}> - { - this.outMaxsizeTip() - } - <div> - <label> - <input - ref={node => { this.uploadRef = node }} - type='file' - className='upload-input' - onChange={e => this.uploadFiles(e.target.files)} - multiple={multiple && 'multiple'} - disabled={(disabled || fileCountLimted) && 'disabled'} - accept={accept} - hidden - /> - <Button type='primary' disabled={disabled || fileCountLimted} onClick={this.handleButtonClick}> - { content || localeDatas.upload.buttonText} - </Button> - </label> - </div> - {showUploadList && ( - <ul className='hi-upload__list'> - {fileList.map((file, index) => { - const fileNameCls = classNames( - 'hi-upload__filename', - file.uploadState === 'error' && 'hi-upload__filename--error' - ) - const itemCls = classNames( - 'hi-upload__item', - file.uploadState === 'error' && 'hi-upload__item--error' - ) - return ( - <li key={index} title={file.name} className={itemCls}> - <div className='img-wrap'> - <img src={file.url} /> - </div> - <div className='hi-upload__right-content'> - <a target='_blank' href={file.url || null} className={fileNameCls} title={file.name} onClick={e => { - if (onDownload) { - e.preventDefault() - onDownload(file) - } - }}> - {file.name} - </a> - <span> - { onRemove && - <Icon - name={file.uploadState === 'loading' ? 'close' : 'delete'} - onClick={() => this.deleteFile(file, index)} - /> - } - </span> - { - file.uploadState === 'loading' && ( - <div className='hi-upload__upstatus'> - <i className='hi-upload__upstatus-line' style={{ width: file.progressNumber + '%' }} /> - </div> - ) - } - </div> - - </li> - ) - })} - </ul> - )} - </div> - ) - } -} -UploadPictureCard.defaultProps = Object.assign({}, { - ...Upload.defaultProps -}, { - accept: 'image/jpg,image/jpeg,image/png' -}) - -export default UploadPictureCard diff --git a/components/upload/hooks/useUpload.js b/components/upload/hooks/useUpload.js new file mode 100644 index 000000000..be1c129ff --- /dev/null +++ b/components/upload/hooks/useUpload.js @@ -0,0 +1,214 @@ +import { useState, useEffect, useCallback, useRef } from 'react' +import request from '../request' +import { getFileType } from '../util' +import { v4 as uuidV4 } from 'uuid' +import Modal from '../../modal' + +const useUpload = ({ + fileList, + defaultFileList, + onChange, + uploadAction, + maxSize, + name = 'file', + withCredentials, + headers, + data, + onRemove, + beforeUpload, + customUpload, + localeDatas +}) => { + const localMap = localeDatas.upload || {} + const [_fileList, updateFileList] = useState(fileList || defaultFileList || []) + const fileListRef = useRef(fileList || defaultFileList || []) + useEffect(() => { + if (fileList) { + updateFileList(fileList) + } + }, [fileList]) + + const deleteFile = useCallback((file, index) => { + if (file.abort) { + file.abort() + } + let result = true + if (onRemove) { + result = onRemove(file) + } + if (!fileList) { + if (result === true) { + const newFileList = [...fileListRef.current] + newFileList.splice(index, 1) + fileListRef.current = newFileList + updateFileList(fileListRef.current) + } else if (result && typeof result.then === 'function') { + result.then((res) => { + if (res === true) { + const newFileList = [...fileListRef.current] + newFileList.splice(index, 1) + fileListRef.current = newFileList + updateFileList(fileListRef.current) + } + }) + } + } + }, []) + + const onSuccess = (file, res) => { + const newFileList = [...fileListRef.current] + file.uploadState = 'success' + delete file.abort + const idx = fileListRef.current.findIndex((item) => item.fileId === file.fileId) + const result = onChange(file, newFileList, res) + // 处理如果onChange return false 的时候需要删除该文件 + if (typeof result === 'boolean' && !result) { + deleteFile(file, idx) + return + } + newFileList.splice(idx, 1, file) + + if (fileList) { + return false + } else if (result && typeof result.then === 'function') { + result.then((re) => { + if (re === false) { + return false + } else { + fileListRef.current = newFileList + updateFileList(fileListRef.current) + } + }) + } else { + fileListRef.current = newFileList + updateFileList(fileListRef.current) + } + } + + const onProgress = useCallback( + (file, e) => { + const newFileList = [...fileListRef.current] + file.progressNumber = e.percent + const idx = fileListRef.current.findIndex((item) => item.fileId === file.fileId) + newFileList.splice(idx, 1, file) + fileListRef.current = newFileList + updateFileList(fileListRef.current) + }, + [onChange] + ) + + const onError = (file, error, res) => { + const newFileList = [...fileListRef.current] + file.uploadState = 'error' + const idx = fileListRef.current.findIndex((item) => item.fileId === file.fileId) + const result = onChange(file, newFileList, res) + + // 处理如果onChange return false 的时候需要删除该文件 + if (typeof result === 'boolean' && !result) { + deleteFile(file, idx) + return + } + + newFileList.splice(idx, 1, file) + + if (fileList) { + return false + } else if (result && typeof result.then === 'function') { + result.then((re) => { + if (re === false) { + return false + } else { + fileListRef.current = newFileList + updateFileList(fileListRef.current) + } + }) + } else { + fileListRef.current = newFileList + updateFileList(fileListRef.current) + } + } + + const uploadFiles = useCallback( + (files) => { + if (customUpload) { + customUpload(files) + } else { + const _files = Object.keys(files) + .map((idx) => { + const file = files[idx] + if (beforeUpload) { + const result = beforeUpload(file, fileListRef.current) + if (result === false) { + return null + } + } + if (file.size > maxSize * 1024) { + Modal.confirm({ + title: localMap.modalTitle, + content: localMap.modalTiptxt, + cancelText: null, + confirmText: localMap.modalBtn + }) + + return null + } + file.fileId = uuidV4() + file.uploadState = 'loading' + file.fileType = getFileType(file) + return file + }) + .filter(async (file) => { + if (file) { + if (file.fileType === 'img') { + // 用来图片预览 + const fr = new FileReader() + fr.onload = (e) => { + const url = e.target.result + file.url = url + } + fr.readAsDataURL(file) + } + let _uploadAction = typeof uploadAction === 'string' ? uploadAction : uploadAction(file) + + if (_uploadAction.toString() === '[object Promise]') { + await _uploadAction + .then((res) => { + _uploadAction = res + }) + .catch((error) => { + throw new Error(error) + }) + } + const action = request({ + file, + action: _uploadAction, + name, + withCredentials, + headers, + data, + onSuccess, + onError, + onProgress + }) + file.abort = action.abort + return file + } + return false + }) + + fileListRef.current = _files + .filter((file) => { + return file + }) + .reverse() + .concat(fileListRef.current) + updateFileList(fileListRef.current) + } + }, + [onSuccess, onProgress, onError, uploadAction, name, withCredentials, headers, data, beforeUpload, customUpload] + ) + + return [_fileList, uploadFiles, deleteFile] +} + +export default useUpload diff --git a/components/upload/index.d.ts b/components/upload/index.d.ts new file mode 100644 index 000000000..8c13e2c4e --- /dev/null +++ b/components/upload/index.d.ts @@ -0,0 +1,35 @@ +type FileItem = { + fileId: string + fileType: string + name: string + uploadState: 'success' | 'uploading' | 'error' + url: string +} +interface Props { + type?: 'default' | 'drag' | 'pictureCard' | 'avatar' | 'photo' + accept?: MimeType + content?: string | JSX.Element + maxSize?: number + maxCount?: number + uploadAction: string + data?: { + [prop: string]: any + } + name?: string + disabled?: boolean + headers?: object + withCredentials?: boolean + showUploadList?: boolean + multiple?: boolean + defaultFileList?: FileItem[] + fileList?: FileItem[] + loading?: boolean + beforeUpload?: (files: FileItem[], fileList: FileItem[]) => boolean + customUpload?: (files: FileItem[]) => void + onChange?: (file: FileItem, fileList: FileItem[], response: object) => boolean + onRemove?: (file: FileItem, fileList: FileItem[], index: number) => boolean + onDownload?: (file: FileItem) => void + photoSize?: 'small' | 'default' | 'large' +} +declare const Upload: React.ComponentType<Props> +export default Upload diff --git a/components/upload/index.js b/components/upload/index.js index 7c24e2331..530acb7fa 100644 --- a/components/upload/index.js +++ b/components/upload/index.js @@ -1,6 +1,25 @@ -import Upload from './main.js' -import SwitchVersion from '../_util/SwitchVersion' -import UploadLegacy from './upload-legacy' +import React from 'react' +import NormalUpload from './NormalUpload' +import DragUpload from './DragUpload' +import PictureUpload from './PictureUpload' +import AvatarUpload from './AvatarUpload' +import PictureListUpload from './PictureListUpload' +import './style/index' import Provider from '../context' -export default SwitchVersion(Provider(Upload), UploadLegacy) +const Upload = (props) => { + const { type } = props + if (type === 'drag') { + return <DragUpload {...props} /> + } else if (type === 'photo') { + return <PictureUpload {...props} /> + } else if (type === 'avatar') { + return <AvatarUpload {...props} /> + } else if (type === 'pictureCard') { + return <PictureListUpload {...props} /> + } else { + return <NormalUpload {...props} /> + } +} + +export default Provider(Upload) diff --git a/components/upload/main.js b/components/upload/main.js deleted file mode 100644 index 62bca10ed..000000000 --- a/components/upload/main.js +++ /dev/null @@ -1,28 +0,0 @@ -import React, { Component } from 'react' -import UploadClick from './UploadClick' -import UploadDrag from './UploadDrag' -import UploadPhoto from './UploadPhoto' -import UploadAvatar from './UploadAvatar' -import UploadPictureCard from './UploadPictureCard' -import './style/index' - -export default class Upload extends Component { - constructor () { - super() - this.uploadRef = React.createRef() - } - render () { - const { type } = this.props - if (type === 'drag') { - return <UploadDrag {...this.props} ref={this.uploadRef} /> - } else if (type === 'photo') { - return <UploadPhoto {...this.props} ref={this.uploadRef} /> - } else if (type === 'avatar') { - return <UploadAvatar {...this.props} ref={this.uploadRef} /> - } else if (type === 'pictureCard') { - return <UploadPictureCard {...this.props} ref={this.uploadRef} /> - } else { - return <UploadClick {...this.props} ref={this.uploadRef} /> - } - } -} diff --git a/components/upload/request.js b/components/upload/request.js new file mode 100644 index 000000000..60463a788 --- /dev/null +++ b/components/upload/request.js @@ -0,0 +1,103 @@ +function formatError(option, xhr, msg) { + msg = msg || `Upload ${option.action} error` + const err = new Error(msg) + err.status = xhr.status + err.url = option.action + return err +} + +function formatBody(xhr) { + const text = xhr.responseText || xhr.response + if (!text) { + return text + } + + try { + return JSON.parse(text) + } catch (e) { + return text + } +} + +// option { +// onProgress: (file, event: { percent: number }): void, +// onError: (file, event: Error, body?: Object): void, +// onSuccess: (file, body: Object): void, +// data: Object, +// name: String, +// file: File, +// withCredentials: Boolean, +// action: String, +// headers: Object, +// timeout: Number +// } +export default function upload(option) { + const xhr = new window.XMLHttpRequest() + + if (option.onProgress && xhr.upload) { + xhr.upload.onprogress = function progress(e) { + if (e.total > 0) { + e.percent = (e.loaded / e.total) * 100 + } + option.onProgress(option.file, e) + } + } + + const formData = new window.FormData() + + if (option.data) { + Object.keys(option.data).forEach((key) => { + formData.append(key, option.data[key]) + }) + } + + formData.append(option.name, option.file) + + xhr.onerror = (e) => { + option.onError(option.file, e, {}) + } + + xhr.onload = function onload() { + if (xhr.status < 200 || xhr.status >= 300) { + return option.onError(option.file, formatError(option, xhr), formatBody(xhr)) + } + + option.onSuccess(option.file, formatBody(xhr)) + } + + xhr.open('POST', option.action, true) + + const { timeout } = option + + if (typeof timeout === 'number' && timeout > 0) { + xhr.timeout = timeout + xhr.ontimeout = () => { + const msg = `Upload abort for exceeding time (timeout: ${timeout}ms)` + option.onError(formatError(option, xhr, msg), formatBody(xhr)) + } + } + + if (option.withCredentials && 'withCredentials' in xhr) { + xhr.withCredentials = true + } + + const headers = option.headers || {} + + // 跨域等场景设置该头会报错,需要设为 null 来关闭 + if (headers['X-Requested-With'] !== null) { + xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest') + } + + for (const h in headers) { + if (headers.hasOwnProperty(h) && headers[h] !== null) { + xhr.setRequestHeader(h, headers[h]) + } + } + xhr.send(formData) + + return { + abort() { + xhr.abort() + } + } +} diff --git a/components/upload/style/index.scss b/components/upload/style/index.scss index a02ff1667..30b2b46ee 100644 --- a/components/upload/style/index.scss +++ b/components/upload/style/index.scss @@ -1,4 +1,4 @@ -@import '@hi-ui/core-css/index.scss'; +@import '../../core-css/index.scss'; .hi-upload { &--disabled { @@ -6,9 +6,10 @@ } &__tips { - font-size: 12px; - color: rgb(153, 153, 153); + font-size: $font-size-small; + color: use-color('gray-70'); line-height: 20px; + margin-top: 8px; &--single-line { display: block; @@ -29,7 +30,7 @@ &__item { height: 36px; cursor: default; - color: #666; + color: use-color('gray-80'); display: flex; align-items: center; padding: 6px 0; @@ -41,33 +42,33 @@ text-overflow: ellipsis; white-space: nowrap; overflow: hidden; - font-size: 14px; + font-size: $font-size-normal; cursor: pointer; - color: #666; + color: use-color('gray-80'); &--error { - color: rgb(255, 0, 0); + color: get-color($palette-secondary, 'danger'); &:not([href]) { - color: rgb(255, 0, 0); + color: get-color($palette-secondary, 'danger'); } } } &-tips { - color: #428ef5; - background: #edf2fc; + color: use-color('primary'); border-radius: 2px; font-size: 14px; padding: 8px 12px; height: auto !important; - border: 1px solid #d8e5ff; + background-color: use-color('primary-20'); + border: 1px solid use-color('primary-40'); } .hi-icon { cursor: pointer; font-size: 16px; - color: #ccc; + color: use-color('gray-50'); } .icon-plus { @@ -98,7 +99,7 @@ display: inline-block; height: 2px; width: 0; - background: #4284f5; + background: use-color('primary'); border-radius: 4px 0 0 4px; position: absolute; left: 0; @@ -112,7 +113,7 @@ top: -32px; font-style: normal; font-size: 12px; - color: #999; + color: use-color('primary'); } } @@ -122,22 +123,23 @@ width: 100%; min-height: 172px; box-sizing: border-box; - border: 1px dashed #dbdbdb; + border: 1px dashed use-color('gray-30'); + transition: border-color 0.3s; border-radius: 2px; cursor: pointer; padding: 12px; &:hover:not(.hi-upload--nohover) { - border-color: #4284f5; + border-color: use-color('primary'); } .hi-upload__operate-icon { - color: #4284f5; + color: use-color('primary'); cursor: pointer; } .icon-tishi { - color: #4284f5; + color: use-color('primary'); margin-right: 5px; } @@ -147,39 +149,24 @@ &, &:hover { - border-color: #d9d9d9; - } - - .drop-click { - cursor: not-allowed; + border-color: use-color('gray-30'); } } .hi-upload__item { &:not(:first-child) { - border-bottom: 1px solid rgba(230, 230, 230, 1); + border-bottom: 1px solid use-color('gray-20'); } } - .drop-content { - display: none; - } - - .show-drop-content { - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - margin: auto; - display: inline-block; - height: 60px; - text-align: center; + .drag-upload__desc { + display: flex; + flex-direction: column; + height: 172px; + align-items: center; + justify-content: center; font-size: 14px; - color: #333; - letter-spacing: 0; - line-height: 22px; - cursor: inherit; + color: use-color('black'); .hi-upload__tips--single-line { padding: 0; @@ -187,19 +174,15 @@ } .icon { - display: block; - cursor: inherit; margin-bottom: 6px; - - &::before { - font-size: 40px; - color: #4284f5; - } + fill: use-color('primary'); + height: 40px; + width: 40px; } } - .drop-over { - border: 1px dashed #0099fb; + &.drop-over { + border: 1px dashed use-color('primary'); } } @@ -211,7 +194,7 @@ &, &:hover { - border-color: #d9d9d9; + border-color: use-color('gray-30'); } } } @@ -230,7 +213,7 @@ margin: 8px; overflow: visible; vertical-align: middle; - background: #fff; + background: use-color('white'); border-radius: 2px; &--photo-error { @@ -238,7 +221,7 @@ background: rgba(0, 0, 0, 0.5); position: absolute; width: 100%; - color: #fff; + color: use-color('white'); bottom: 0; line-height: 28px; font-size: 16px; @@ -246,7 +229,7 @@ } &:not(:last-child) { - background: #e7e7e7; + background: use-color('gray-20'); } img { @@ -257,12 +240,13 @@ &--upload { text-align: center; font-size: 28px; - color: #e7e7e7; - border: 1px dashed rgba(216, 216, 216, 1); + color: use-color('gray-50'); + border: 1px dashed use-color('gray-30'); + transition: border-color 0.3s; line-height: 140px; &:hover { - border-color: #0099fb; + border-color: use-color('primary'); } } @@ -277,7 +261,7 @@ flex-direction: column; justify-content: center; align-items: center; - color: #fff; + color: use-color('white'); opacity: 0; transition: 0.3s ease; z-index: 2; @@ -297,7 +281,7 @@ &:hover { .hi-upload__photo-del { display: block; - color: #000; + color: use-color('black'); z-index: 4; } @@ -343,15 +327,15 @@ height: 80px; line-height: 80px; box-sizing: border-box; + cursor: pointer; } } &__photo-del { position: absolute; right: -8px; - top: -10px; + top: -8px; font-size: 20px; - line-height: 20px; display: none; z-index: 3; } @@ -363,7 +347,7 @@ left: 0; top: 0; background: rgba(0, 0, 0, 0.5); - color: #fff; + color: use-color('white'); font-size: 14px; display: flex; justify-content: center; @@ -387,7 +371,7 @@ position: absolute; left: 0; bottom: 0; - background: #4284f5; + background: use-color('primary'); z-index: 3; } @@ -397,13 +381,11 @@ position: absolute; left: 0; bottom: 0; - background: #000; + background: use-color('black'); opacity: 0.34; z-index: 2; } - - &--picture-card { .hi-upload__upstatus { width: 100%; @@ -425,23 +407,23 @@ .hi-upload__item { height: 64px; box-sizing: border-box; - border: 1px solid #d8d8d8; + border: 1px solid use-color('gray-30'); border-radius: 2px; padding: 8px 18px 8px 6px; margin-bottom: 12px; font-size: 12px; - color: #333; + color: use-color('black'); &--error { - border: 1px solid rgba(244, 65, 65, 1); + border: 1px solid get-color($palette-secondary, 'danger'); } &:hover { - background: rgba(247, 247, 247, 1); + background: use-color('gray-10'); } &.loading { - color: #999; + color: use-color('gray-70'); } .img-wrap { @@ -492,13 +474,13 @@ width: 300px; line-height: 24px; font-size: 16px; - color: #333; + color: use-color('black'); margin-bottom: 4px; } &-info { font-size: 14px; - color: #666; + color: use-color('gray-80'); } } @@ -523,68 +505,3 @@ font-size: 0; } } - -@each $key, $value in $theme-colors { - .theme__#{$key}.hi-upload { - &--drag { - &:hover:not(.hi-upload--nohover) { - border-color: $value; - } - - .hi-upload__operate-icon { - color: $value; - } - - .drop-over { - border: 1px dashed $value; - } - - .show-drop-content { - .icon { - &::before { - color: $value; - } - } - } - } - - .hi-upload__item { - &-tips { - color: $value; - - .hi-upload__operate-icon { - color: $value; - } - - .icon-tishi { - color: $value; - } - } - } - - &--avatar, - &--photo { - .hi-upload__item { - &--upload { - &:hover { - border-color: $value; - } - } - } - } - - .hi-upload__upstatus { - &-line { - background-color: $value; - } - - &-num { - color: $value; - } - } - - .hi-upload__loading-bar { - background: $value; - } - } -} diff --git a/components/upload/tool.js b/components/upload/tool.js deleted file mode 100644 index 7225fd315..000000000 --- a/components/upload/tool.js +++ /dev/null @@ -1,67 +0,0 @@ -const AJAX = function (obj) { // 做网络请求的时候,以对象形式传递进来 - /* - //规定:obj里面包含属性有: - 1.deleteAction - 2.type---get还是 post - 3.data--前端给后端传递的参数(前端传递的时候以"对象形式") - 4.回调函数---success - 5. hearders---请求头 - */ - - let ajaxObj = null - if (window.XMLHttpRequest) { - let XMLHttpRequest = window.XMLHttpRequest - ajaxObj = new XMLHttpRequest() - } else { - let ActiveXObject = window.ActiveXObject - ajaxObj = new ActiveXObject('Microsoft.XMLHTTP') - } - // 检测状态的变化 - ajaxObj.onreadystatechange = function () { - if (ajaxObj.readyState === 4) { - if ((ajaxObj.status >= 200 && ajaxObj.status < 300) || ajaxObj.status === 304) { - if (obj.success) { - obj.success(JSON.parse(ajaxObj.responseText)) - } - } - } - } - // -------------------------------------------- - let params = '' - // 判断是否传递了参数 - if (obj.data) { - for (let key in obj.data) { - params += (key + '=' + obj.data[key] + '&') - } - params = params.slice(0, params.length - 1) - } - // ------------------------------------------- - // type 转化为小写,方便使用 - let type = obj.type || 'get' - type = type.toLowerCase() - if (type === 'get') { - ajaxObj.open(type, obj.deleteAction + '?' + params, true) - // 设置用户传入的请求头 - if (obj.headers) { - for (let j in obj.headers) { - if (j) { - ajaxObj.setRequestHeader(j, obj.headers[j]) - } - } - } - ajaxObj.send() - } else { - ajaxObj.open(type, obj.deleteAction, true) - // 设置用户传入的请求头 - if (obj.headers) { - for (let j in obj.headers) { - if (j) { - ajaxObj.setRequestHeader(j, obj.headers[j]) - } - } - } - ajaxObj.send(params) - } -} - -export default AJAX diff --git a/components/upload/upload-legacy/Preview.js b/components/upload/upload-legacy/Preview.js deleted file mode 100644 index 336a532c0..000000000 --- a/components/upload/upload-legacy/Preview.js +++ /dev/null @@ -1,306 +0,0 @@ -import React, { Component } from 'react' -import {createPortal} from 'react-dom' -import ReactCSSTransitionGroup from 'react-addons-css-transition-group' -import PropTypes from 'prop-types' -import classNames from 'classnames' -import Icon from '../../icon' -import './style/preview.js' - -class Preview extends Component { - constructor (props) { - super(props) - this.state = { - extraClass: '', - style: { - width: 0, - height: 0, - left: 0, - top: 0, - rotate: 0, - scaleX: 1, - scaleY: 1 - }, - compileStyle: { - }, - imgLoaded: false, - isLoaded: false, - isMouseDown: false, - mouseX: 0, - mouseY: 0, - zoomValue: 100, - rotateValue: 0, - activeIndex: props.activeIndex || 0 - } - this.node = document.createElement('div') - document.body.appendChild(this.node) - this.imgRef = React.createRef() - this.previewRef = React.createRef() - this.handleMouseDown = this.handleMouseDown.bind(this) - this.handleMouseMove = this.handleMouseMove.bind(this) - this.handleMouseUp = this.handleMouseUp.bind(this) - this.handleMouseWheel = this.handleMouseWheel.bind(this) - } - - componentDidMount () { - this.loadImg(this.state.activeIndex) - this.previewRef.current.addEventListener('mousewheel', this.handleMouseWheel, false) - this.previewRef.current.addEventListener('DOMMouseScroll', this.handleMouseWheel, false) - } - componentWillUnmount () { - this.previewRef.current.removeEventListener('mousewheel', this.handleMouseWheel, false) - this.previewRef.current.removeEventListener('DOMMouseScroll', this.handleMouseWheel, false) - } - // static getDerivedStateFromProps (nextProps, prevState) { - // const { activeIndex } = nextProps - // if (nextProps.activeIndex !== prevState.activeIndex) { - // return { - // activeIndex - // } - // } - // return null - // } - onClose (e) { - this.setState({ - style: {}, - extraClass: '', - imgLoaded: false - }) - this.props.onClose && this.props.onClose() - } - handleMouseWheel (e) { - e = e || window.event - e.preventDefault() - e.stopPropagation() - let direct - let delta = 0 - if (e.wheelDelta) { - delta = e.wheelDelta - if (window.opera) delta = -delta - } else if (e.detail) { - delta = -e.detail - } - if (delta === 0) { - direct = 0 - } else { - direct = delta > 0 ? -1 : 1 - } - if (direct !== 0) { - let x = e.clientX - let y = e.clientY - this.handleZoom(x, y, direct) - } - } - handleMouseDown (e) { - e.preventDefault() - e.stopPropagation() - this.setState({ - isMouseDown: true, - mouseX: e.nativeEvent.clientX, - mouseY: e.nativeEvent.clientY - }) - } - handleMouseUp () { - this.setState({isMouseDown: false}) - } - handleMouseMove (e) { - if (this.state.isMouseDown) { - let diffX = e.clientX - this.state.mouseX - let diffY = e.clientY - this.state.mouseY - this.setState({ - mouseX: e.clientX, - mouseY: e.clientY - }) - this.changeImageState({ - left: this.state.style.left + diffX, - top: this.state.style.top + diffY - }) - } - } - handleZoom (x, y, direct) { - const speed = 0.05 - let imgCenterXY = this.getImageCenterXY() - let diffX = x - imgCenterXY.x - let diffY = y - imgCenterXY.y - let {left, top, scaleX, scaleY} = this.state.style - let directX = scaleX > 0 ? 1 : -1 - let directY = scaleY > 0 ? 1 : -1 - const _scaleX = scaleX + speed * direct * directX - const _scaleY = scaleY + speed * direct * directY - if (Math.abs(_scaleX) < 0.1 || Math.abs(_scaleY) < 0.1) { - return - } - this.changeImageState({ - scaleX: _scaleX, - scaleY: _scaleY, - top: top + -direct * diffY / scaleX * speed * directX, - left: left + -direct * diffX / scaleY * speed * directY - }) - } - handleRotate (isRight) { - const { rotate } = this.state.style - this.changeImageState({ - rotate: rotate + 90 * (isRight ? 1 : -1) - }) - } - getImageCenterXY () { - const { left, top, width, height } = this.state.style - return { - x: left + width / 2, - y: top + height / 2 - } - } - changeImageState (args) { - const { style } = this.state - const _style = Object.assign({}, style, {...args}) - this.setState({ - style: _style - }, () => { - const compileStyle = { - width: _style.width, - height: _style.height, - transform: `translateX(${_style.left}px) translateY(${_style.top}px) rotate(${_style.rotate}deg) scaleX(${_style.scaleX}) scaleY(${_style.scaleY})` - } - this.setState({ - compileStyle, - isLoaded: true - }) - }) - } - loadImg (imageIndex) { - const { images } = this.props - if (!images || images.length === 0) { - return - } - if (imageIndex >= images.length) { - imageIndex = 0 - } - if (imageIndex < 0) { - imageIndex = images.length - 1 - } - this.setState({activeIndex: imageIndex}) - const currentImage = images[imageIndex] - const img = new window.Image() - img.onload = () => { - this.getImgWidthHeight(img.width, img.height) - } - img.src = currentImage.url - } - getImgWidthHeight (imgWidth, imgHeight) { - let width = 0 - let height = 0 - const { innerHeight, innerWidth } = window - let maxWidth = innerWidth * 0.8 - let maxHeight = innerHeight * 0.8 - let style = {} - width = Math.min(maxWidth, imgWidth) - height = width / imgWidth * imgHeight - if (height > maxHeight) { - height = maxHeight - width = height / imgHeight * imgWidth - } - style = { - width, - height, - left: (innerWidth - width) / 2, - top: (innerHeight - height) / 2, - scaleX: 1, - scaleY: 1, - rotate: 0 - } - this.changeImageState(style) - } - clickEvent (type, event) { - event.stopPropagation() - let { activeIndex } = this.state - const {x, y} = this.getImageCenterXY() - switch (type) { - case 'zoomIn': - this.handleZoom(x, y, 1) - break - case 'zoomOut': - this.handleZoom(x, y, -1) - break - case 'reset': - this.loadImg(activeIndex) - break - case 'leftRotate': - this.handleRotate() - break - case 'rightRotate': - this.handleRotate(true) - break - case 'prev': - this.loadImg(activeIndex - 1) - break - case 'next': - this.loadImg(activeIndex + 1) - break - case 'close': - this.onClose() - break - default: - break - } - } - - render () { - const { show, images } = this.props - const { - extraClass, - compileStyle, - isLoaded, - activeIndex - } = this.state - return ( - createPortal( - <ReactCSSTransitionGroup - transitionName='hi-preview' - transitionEnterTimeout={50} - transitionLeaveTimeout={50} - component='div' - > - <div - key={1} - ref={this.previewRef} - className={classNames('hi-preview', extraClass, {'hi-preview--hide': !show})} - onMouseMove={this.handleMouseMove} - > - { - isLoaded && <img - ref={this.imgRef} - src={images[activeIndex].url} - style={{...compileStyle}} - onMouseDown={this.handleMouseDown} - onMouseUp={this.handleMouseUp} - className='hi-preview__image' - /> - } - <div className='hi-preview-toolbar' onClick={(e) => { e.stopPropagation() }}> - - <Icon name='zoom-out' onClick={this.clickEvent.bind(this, 'zoomIn')} /> - <Icon name='zoom-in' onClick={this.clickEvent.bind(this, 'zoomOut')} /> - <Icon name='left' onClick={this.clickEvent.bind(this, 'prev')} /> - <Icon name='ratio' onClick={this.clickEvent.bind(this, 'reset')} /> - <Icon name='right' onClick={this.clickEvent.bind(this, 'next')} /> - <Icon name='rotate-left' onClick={this.clickEvent.bind(this, 'leftRotate')} /> - <Icon name='rotate-right' onClick={this.clickEvent.bind(this, 'rightRotate')} /> - {/* <Icon name='close-circle-o' onClick={this.clickEvent.bind(this, 'close')} /> */} - </div> - <div className='hi-preview__close' onClick={this.onClose.bind(this)}> - <img src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAZGklEQVR4Xu2dC5QVxZnHv6/v5TE+QMAYNIpsHEVHmDu3emVPTASV5SVrjHmtoDGauNHFkAQjEUWPGhWFGNfEVwibRDYSTUJyoub4zEYii0lIqu6dgYyIGAFRwTDoIOwwzJ3+9tRwySICc7u6+lHdVefMGTlWfY9/1W9ud9+urxBsswpYBQ6oAFptrAJWgQMrYAGxq8MqcBAFLCB2eVgFLCB2DVgF1BSwnyBqutlRGVHAApKRibZpqilgAVHTzY7KiAIWkIxMtE1TTQELiJpudlRGFLCAZGSibZpqClhA1HSzozKigAUk4okeNWrUoFwuNxAR5c8AABgof+S/q/8tI2ononb5e8+P/Lf8KZfL70QccqbdWUD0T7/T2Nh4fD6fPwkATkTEk4joJEQ8EQCOB4BcQJfdALCOiF5GxDVEtAYRX+7u7l5TLpfXAwAFtG+H76WABSTgcigUCiflcrmxiDieiEYi4ikBTQYaTkQvImKZiJ7zPG9puVx+OZDBjA+2gPhcAE1NTSc6jnMmIp5JRPL3MT5NRNqdiF4HgKWIuJSIlgoh1kYagOHOLCA1TCBj7BREnEZEFyBifQ1DEttFXpoR0cOI+IgQ4sXEBpqQwCwgB5iIxsbGf8jn81MR8QIAGJWQ+dIaBhG1IOLDnuc9XCqV5P2LbfsoYAHZS5CGhoah/fv3l58SEop/ytJqIaI/SFg6Ojp+1trauilLuR8sVwsIADDGJiHiVQAw3i6MHgWeJaK7hBBPZV2PLAPiuK77KQCYLRnJ+kLYX/5E9GcAuF0I8SsA8LKoUeYAcV23DwB8HgBmAYD8rsK23hV4iYjmIeJDnPOu3runp0dmAGlsbDw0l8tdLi+lEPFD6ZnCSDPZCAB3bt68+fsbN27siNRzTM6yAAgyxi4BgDsQ8aiYdE6b201ENEsI8VDaEts3n1QDwhhrBIAfIqKb9omMIz8iegERr+Ccr4zDfxQ+UwlIQ0PD4P79+98BAF9ERCcKIbPqg4g8RFzQ3d19XRpfpEwbIPLJ1BVEdCsiDsrqoo0p7zYiuk4IsTBNL0ymBhDXdU8gop/ay6mY8Ki6JaI/eZ732XK5vC7eSPR4TwUgrut+BgAeBIBD9MhirQRRgIi2I+IXOOc/D2InCWONBmT48OH9Bw8efJ+cjCSIaWN4rwJEtHDr1q1fWbdu3U5TtTEWELkPI5/PPwYAI0wVPyNxv1SpVD7e3Ny8xsR8jQSEMfZviPgdAKgzUfQMxvy/RPRlIcSPTMvdOEAYYz+wl1SmLbPd8RLRvUKIGSZFbxIgedd1lwDAeSYJbGN9332J3Kh1EQDIvfWJb0YAcuyxx9YdddRRTyLi2MQragOsRYFn2trazjPh5j3xgMgyOX379v0tADTVorztY4wCKwBgAudcljZKbEs0IIVC4UP5fP53AHBCYhW0gQVRYHVHR8dZSd7BmFhAqo9xJRxDg8yAHZt4BV4DgLM4568kMdJEAlIoFE7N5/PPA8DgJIpmY9KuQJvneWNKpVKrdssBDSYOENd1j5ZbPZNebyqg7nb4PgoQ0RuI+I+c8zeTJE6iAHFdV9anlTdvditsklZJdLG8JKvJJOnGPTGAVB/l/g4RT4tuPqynBCqwor29fczatWs7kxBbUgDJua77GwA4Mwmi2BjiVYCInhJCTElCJZVEAMIYW4KIsgSPbVaBHgWI6CEhxOfiliN2QFzXfQAArohbCOs/eQoQ0XwhxDVxRhYrILLaCCIa94ZnnBOWNd+e500rlUoPx5V3bIAwxuoRsdnuAoxr6s3wS0Q7PM8bGdcW3lgAqVY3LAHAqWZMk40yZgVKnHP5dDPyN4DjAkRudvpKzKJb92Yp8G3O+dVRhxw5IMVicbLjOE9Enaj1Z74Cnuf9c6lU+u8oM4kUkJEjR36wb9++qxHxiCiTtL5So8CWHTt2nLx69eq2qDKKFBDGmPymfExUyVk/qVTgWc75hKgyiwwQ13WnAcDiqBKzftKrQJSPfiMBpKGh4bC6ujp5HLHd25HedRtlZm9u3rz5hCiOYIgEEMbYXYg4M0oFra90K0BEdwoh5CFIobbQAanuDJQbYXKhZmKNZ02B7q6urlNbWlrkK/KhtdABYYwtR8TTQ8vAGs6yAss55x8LU4BQAWGMXSjPtQszAWs72woQ0QVCiJ+GpUJogFRvzF8FgCPDCt7atQoAQKg37KEBwhi7ERFvslNoFQhbASKaI4SYG4afUACpHkvwpv3GPIwpszb3VYCI3t66desxYVRqDAUQxtgsRJxvp9IqEJUCRDRTCHG3bn/aAam+yv6Gqfcexx57LPTt2xf++te/6tY60fbq6+uho6MDXn/99UTHeaDgqmWDhnPOu3QmEAYg0wHgPp1Bhm2rf//+cPXVV8O4cePg8MMP73EnF8uyZcvgjjvugG3btoUdQiz2jzjiCLj22mvh9NNPh7q63UetvPvuu/Dss8/CnXfeCbt27YolLlWnRPSl6iGiqibeN043IDnG2CuIeLy2CEM2NGzYMLj77rtB/t5f+9vf/gazZ8+G5ma5+TE9rVAowPz582HIkCH7TWr9+vUwc+ZM2LBhgzFJE9E6IcSHdZ6yqxUQ13U/Xz1M0whR8/k8LFmyBORl1cGa/Es6Y8YM4JwbkVdvQbquC/fcc0/PpeTB2quvvgpTp06FSqXSm8kk/f8LOec/0RWQVkAYY39BxAZdwYVtR/6FvPDCC2tykxZIaoVjjyiLFi3qgcmgtpJz3qgrXm2AMMZcRPyzrsCisPPCCy/0+ld07zhMh8QvHDL37du3w5lnmlXPr1KpsObmZlnzIHDTCch/IOLXAkcUkYGhQ4fCr3/9a9/eTIVEBY494kycOBHa2iLbxOd7TvYz4C7O+dd1GNIFCDLGNiPiB3QEFYUNeXP69NNPK7kyDZIgcEiBxo4dCzt27FDSKqZBmznnWvYeaQGEMTYREZ+KSQxltxKQAz3F6c2oKZAEhWPz5s0wZYosk2tW8zxvfKlUkvWeAzVdgPwYEeXJpUa1K6+8Ei699FLlmJMOSVA4pDALFy6EBQsWKGsU10AielAIoT651cADA1JfX99v4MCB7wBA/7jEUPXbr1+/nvuQQYMGqZro+TItiY+AdcCxZcsWOPfcc6GrS+uX08pa+xz4bltb21FB388KDIjpez7kExr5rXHQNn36dFixQp79E38bPXo03H///YEDueqqq+D55+VJeGY2HXtFdAAizy+fZKaEu6OeMGEC3HbbbYCoLkdSPkl0fHIQEcyZMweeeeYZk6dVHqHwuBDi40GSUF8RAFC9vNoOAPkgQSRhbBogsXC8byVVOOfy0l+5pm8gQBhjZyNipKUgw4TJZEgsHPtfGUQ0RgixTHXdBAXkJkS8UdV5EseZCImF48AriYiuF0LcprrWAgHiuu5v5SHwqs6TOs4kSCwcva6iZzjnE3vtdYAOQQCRB2/K+w/jHu/WIpYJkFg4aplJ2Mk5P0T1FXhlQJqamk7P5XLLawrR0E5JhsTCUfui6u7uHl0ul/9U+4j/76kMiOu6swHgdhWnJo1JIiQWDt8r6GrO+bd9jwIAZUAYY08g4mQVp6aNSRIkFg7/q4eIHhNCnOd/ZDBAXkfEY1ScmjgmCZDogKO7uxtuuOEG478E9LmGNnLOj/M5pqe70idIQ0ND37q6uk4VhyaPiRMSXXBcc801sHTpUpOnQSn2jo6Ofq2trb6rUCgBUigUivl8XihFavigOCCxcARfNJ7nNZVKJd+VN5QAYYz9KyI+EjxsMy1ECYmFQ9sa+Szn/Od+rSkB4rruDQDwTb/O0tQ/CkgsHPpWjGr9XiVAGGMPIWJt5UD05Zg4S2FCYuHQPt2LOOeX+LWqCsgKRDzNr7M09g8DEguH/pVCRL8XQvg+yEkVkHcR8TD9aZhpUUIyd27w6vuXX355jwC1FHU7mFLyUW5Wn1YdRJctnHPfRUV8A+K6rnyvxagSF1FgN2nSJLj11lsDudpTC7e3ioe9OZH1dmV9XdveqwDn3PH7TpZvQBoaGobW1dW9acV/vwI6LreC6Go/OXpV7wOc8y299tqrg29AGhsbR/Tp02e1HydZ6hsXJBaO3lfZrl27Tli5cqWvcy18A9LU1HRaLpdLRnWC3jWJpUfUkFg4apvm7u7uYrlcLtfWe3cv34AUi8VxjuMELsjlJ0gT+0YFiYWj9tXhed7YUqnkq0yLb0AYY+cj4i9rDyu7PcOGxMLhb20R0blCCF8FmX0DYtoZIP4k1N87LEgsHP7nioguEkIs9jNSBZCvAMB3/DjJel/dkFg4lFfUdM75A35G+wakWCxe7zjOLX6c2L56itNJHS0c6qvJ87zZpVJpnh8LvgFxXfdaAAj+tbGfKFPQV5Y4nTdvHuRyuUDZWEACyXcd59zXNnHfgBSLxRmO43w3UJgZG6wLjj2yWUjUFhARzRBC3OtntG9AGGOXIuIP/TjJcl/dcFhIAq2mSzjni/xY8A2I67qfAYCf+XGS1b7y5vyWW24JfFl1IP3sJ4m/lUVEnxJC+PqKwjcgxWJxsuM4T/gLLXu9dT+5spAEX0Pd3d0TyuWyr7c4fQPCGDsDEX19Gxk8NbMsRAWHvdzyty6I6CNCiD/4GeUbkCwXbKhF2KjhsJDUMiu7+3ied2qpVGqtfYTCu1iMsXpEfNmPk6z0jQsOC0ltK6yzs3PYqlWrXqut9+5evj9B7H6Q/cs7efLknhvyIE3Xhqnrrrsua4XhapK9u7t7ULlcludp1tx8AwIAjuu6sgBXsG+8ag4x+R3tltvkzxERdQohfJ9EoAIIMMZaEfGU5MsSfoQ6Lqv2Pd/QFm0IZd7KnPOiX8uqgPwSEc/36yxt/cOAY49GFhK9q4WIHhFCTPVrVQmQYrE413Ec+U5WZluYcFhI9C8rIrpZCHGTX8uqgFzsOI6vr+z9Bpbk/lHAoRuSDFZ0f88S8jxvaqlU8l0uVwmQQqEwOp/P/zHJizis2KKEQyckaTn7XHVeK5UKa25uLvkdrwRIY2PjoX369JHnE2aqxQGHhUTPEov0+AMZsuu6bwDA0XrCT76VOOGwkAReH69xzoepWFH6BJGOGGOPIeK5Kk5NG5MEOCwkgVbNo5zzT6hYUAakWCxe5TiO0sGIKoHGNSZJcFhI1FYBEc0UQtytMloZENd1GQBwFaemjEkiHBYS/6tHpWDcHi/KgMj3uFzXbQeAw/2HnPwRSYbDQlL7+iGid4QQg2of8d6eQQBJ7X2ICXBYSGpe8r/inCu/9REIkDTeh5gEh4WkJki+xjlXruMWCJC03YeYCIeF5OCQEFFBCNFSE0r76RQIkDTdh5gMh4Vk/8s/6P2HtBoUEPmF4U8AwPdbkqpEhzEuDXBYSPa7Mv6Lc/75IGsmMCCMsX9BxMeDBBHn2LPOOgu+9a1vBQ5h+vTpsGJFMo5NGT16NNx///2Bc5o1axY899xzge3EZYCIJgkhng7iPzAgcochY2wLIio/SguSQJCxQ4YMgV/84hdw2GHq55Huu9kpSDw6x+rYT7J9+3Y4//zz4e2339YZWiS2iOhtIcSRslZDEIc6AJGPe7+HiLuPaDWoLViwQF4iKkecVDh0Xm4tX74cvvrVryprFNdAIrpXCDEjqH8tgBSLxTGO4/wuaDBRjpefHk8/rf7pm3Q4dEIybtw4aG+X3wmb0zzPO71UKv0+aMRaAJFBuK67AQCOCxpQVOOHDx8OS5YsUXJnChy6IJGXWa+95qtajpKuGgdt5JxrWYvaAGGMzUfEWRqTDNXU4MGDlUrjmAaHDkjGjx9v1H0IEc0VQszRsYC0AdLU1NSUy+V879jSkYSqjaeeegqOPFLex9XWTIUjCCRvvfUWnHPOObUJlJBeRNQghHhRRzjaAKleZq0EgJE6AovCxmWXXQZXXHFFTa5Mh0MVknvvvRcefPDBmjRKSCel8j4Hil0rIMVi0ahiDvK0p8WLF0N9ff1B5zYtcPiF5JVXXoFp06b1HPtmSiOizwkhHtIVr1ZAZLVFxtgGRDxGV4Bh2znuuOPg5ptvhsbGxv262rBhA9x0003Q0qL8Ok/YKSjZl/nKvIYN2/9OVJnvjTfeaNTNORGtF0KcII9yVBJlP4N0AyK/E/kyIt6jK8Co7Hzyk5+EKVOmQKFQ6HG5evVqePLJJ3s+YdLcLr74Ypg4cSKMGDGiJ81yuQyPP/44PProoyamfSXnPPgrBHtlrh2Q4cOH9x88eLD8FPmAiQoPGDAADjnkENi0aZOJ4SvHfPTRR0NHRwe8846v2s7K/kIYuAUAjuGcd+m0rR0QGRxjbA4i3qozUGvLKnAwBVSOeK5F0VAAaWhoOKyurk6WBUrldtxahLV9olOAiLZXKpWhLS0tO3R7DQWQ6qfIPET8hu6ArT2rwL4KENFtQojrw1AmNEBc1x1IROsQ8YgwArc2rQJVBeS9Rz3nPJSXxUIDRAbvuu5lALDQTqVVIEQFfJ997ieWUAGpXmqtQMTT/ARl+1oFalGAiF4QQny0lr6qfUIHxHXdUUTUjIih+1IVwY4zUoHuSqXS0NzcvCbM6CNZtK7rfhcAAm9eCVMIa9s4Be7inH897KgjAaT62PdVAKj91dmwM7f2TVZgU0dHx4mtra2hH8ERCSDVe5GLEPHHJs+KjT0ZChDRBUKIn0YRTWSAVJ9q/RYAzooiMesjnQoQ0W+EEOOjyi5SQEaOHPnBfv36rbKXWlFNb+r8tHV1dTW0tLS8FVVmkQJSvdQ6GwB+Y59qRTXF6fBDROR53tnlcnlplBlFDkj1Uut2AJgdZaLWl9kKhPk6ycGUiQUQubHKdd0XAGC02dNmo49IgeWc8zMAgCLy93c3cQEiNyZ9KJfLrbLvakU95Wb5kwWoK5XKiCjvO/ZWKDZAZBDFYnGy4zhPmDVlNtooFdBRXzdIvLECUoXkesdxbgmShB2bTgXC2gTlR63YAanetP8nAHzRT+C2b7oVIKL7hBBfjjvLRAAizylhjP0KET8etyDWf/wKENFjQojz4o9EwwE6upJwXbcPAPyPfbKlS1Fj7cg1cLbu4guqaiTlE6QnfrkLEQD+CAC7a9DYljUFVnV0dHwkipcQaxU2UYBUITmaiP5sUvG5WsW2/Q6sABG9UalUinE9zj1QZIkDRAbKGDsFAJabeGqVhUBJgTYA+BjnfLXS6BAHJRIQmW9jY+OIPn36PGvSmSMhzlOaTW+sVCrjwt4ZqCpgYgGRCTU0NAytq6uTp0ierJqgHZdoBV7q7Owcu2rVqs1JjTLRgOx14/6MfbqV1CWkFhcR/X7btm2T1q5du03NQjSjEg+IlEHW+x0yZIispjwhGlmslzAVIKInd+7c+YnW1tZdYfrRYdsIQKqJyjeAfwAAgQ6G1yGataGuABEtFkJ8Lo43c1WiNgmQnvyKxeJcx3GuVUnWjoldgVs55zfEHoWPAIwDpArJVERciIiH+sjVdo1JAVlc2vO8i8rlsnGHjhgJiJxnxlg9Iv4SAEbFNO/WbW0K/MXzvCmlUml9bd2T1ctYQKSM9fX1/QYMGPAdRLw8WbLaaKoKPNDe3j5z7dq1naYqYjQge0QvFoufQsRF9pIrGcvQ5EuqfRVMBSB7LrkA4BFEdJOxTDIbhejq6vp0S0uLrKRpfEsNINWZcFzXvVxWwLDvcUW7NonobUS8nnP+PQDwovUenre0AdKj1Mknnzzk0EMPnUdEX7D1t8JbPNKyrFeFiD/s6Oj4Rmtr69ZwvUVvPZWA7JGxqanptFwuJ/+iseilTb9HeawFAFwshEjXIfJ7TV2qAanmKbfzfgkR5wLA4PQv20gybCOiOUKI75vyjbiqKlkApEeb6m7FfweArwHAB1UFy/i4TZ7n3d3Z2Xlfknb9hTknmQFkj4jyxcdBgwZd4jjOLAD4cJjipsU2Ea0FgDt37tz5IxNeMNSpe+YA2Us8hzH2GUSUNYKbdIqaIluCiOYJIZak6cmUn/nJMiB/16la4XEmAER27oSfSYq6rzyDw/O8+eVyWe7ozHSzgOw1/cVi8RhEvBAA5GlYjVlaGUQkn0QtJqKHSqXSG1nK/WC5WkAOoI4sHIGIcu/JtBTvi98AAA8T0SIhxIsWivcrYAHpfVVgsVgc4zjORUT0adOr0ctvvAFgidy4VCqVnk/7Y9rep/fgPSwg/hTMFQoFN5/PjyGiMxDxYwZ8tyJL6shqhcsqlcqy5uZmDgDd/tLObm8LSMC5Z4w1IuJHAeAMImpCRFnTK7ZGRC8iYsnzvGWO48iDZ1bGFkwKHFtA9E+i09TUNCyXy51ERCchovx9ovwNAMfL07UCupR//dcT0RpEXENEL8vfXV1dL7e0tKyzl0wB1d1nuAVEr569Whs1atSgXC43EBHlzwAAkPWIe/5d/W9po52I2uXvPT/y3/KnXC6/06sT20GbAhYQbVJaQ2lUwAKSxlm1OWlTwAKiTUprKI0KWEDSOKs2J20KWEC0SWkNpVEBC0gaZ9XmpE0BC4g2Ka2hNCpgAUnjrNqctClgAdEmpTWURgUsIGmcVZuTNgUsINqktIbSqIAFJI2zanPSpsD/AXXskF+F6TXSAAAAAElFTkSuQmCC' /> - </div> - - </div> - </ReactCSSTransitionGroup>, - this.node - ) - ) - } -} -Preview.propTypes = { - src: PropTypes.string, - show: PropTypes.bool, - onClose: PropTypes.func -} - -export default Preview diff --git a/components/upload/upload-legacy/Upload.js b/components/upload/upload-legacy/Upload.js deleted file mode 100644 index b2360087a..000000000 --- a/components/upload/upload-legacy/Upload.js +++ /dev/null @@ -1,321 +0,0 @@ -import { Component } from 'react' -import ReactDOM from 'react-dom' -import PropTypes from 'prop-types' -import shallowEqual from 'shallowequal' -import cloneDeep from 'lodash/cloneDeep' - -let fileId = 0 - -class Upload extends Component { - constructor (props) { - super(props) - const fileList = this.prepareDefaultFileList(props.defaultFileList) - this.state = { - fileList, - fileCountLimted: false - } - } - componentWillReceiveProps (nextProps) { - if (!shallowEqual(nextProps.defaultFileList, this.props.defaultFileList)) { - this.setState({ - fileList: this.prepareDefaultFileList(nextProps.defaultFileList) - }) - } - } - - prepareDefaultFileList (fileList) { - const _fileList = cloneDeep(fileList) - - _fileList.map(file => { - file.fileId = this.getFileId() - }) - return _fileList - } - - getFileType (file) { - let ext = file.name.slice(file.name.lastIndexOf('.') + 1).toLowerCase() - let fileType = '' - - switch (ext) { - case 'jpg': - case 'jpeg': - case 'gif': - case 'png': - case 'bmp': - fileType = 'img' - break - case 'rar': - case 'zip': - fileType = 'zip' - break - case 'doc': - case 'docx': - fileType = 'word' - break - case 'pdf': - fileType = 'pdf' - break - case 'ppt': - case 'pptx': - fileType = 'ppt' - break - case 'xls': - case 'xlsx': - fileType = 'excel' - break - case 'key': - fileType = 'key' - break - case 'exe': - case 'dmg': - fileType = 'exe' - break - case 'mp4': - fileType = 'video' - break - case 'mp3': - fileType = 'audio' - break - default: - fileType = 'other' - break - } - return fileType - } - - getFileId () { - return `$$HIUI_FILE_ID_${fileId++}` - } - - uploadFiles (files) { - const { - beforeUpload, - customUpload, - maxSize, - maxCount - } = this.props - const { - fileList, - fileCountLimted - } = this.state - if (fileCountLimted) { - return - } - if (!beforeUpload(files, fileList)) { - return - } - if (customUpload) { - customUpload(files) - return - } - - if (files.length === 0) return - for (let key in files) { - if (!files.hasOwnProperty(key)) continue - let file = files[key] - if (file.size > maxSize * 1024) { - return - } - file.fileId = this.getFileId() - file.uploadState = 'loading' - file.fileType = this.getFileType(file) - fileList.unshift(file) - this.setState({ fileList }) - this.uploadFile(file) - } - if (fileList.length === maxCount) { - this.setState({fileCountLimted: true}) - } - ReactDOM.findDOMNode(this.uploadRef).value = '' - } - - deleteFile (file, index) { - const { - fileList - } = this.state - const { - onRemove - } = this.props - const doRemove = () => { - fileList.splice(index, 1) - this.setState({fileList, fileCountLimted: false}) - } - const ret = onRemove(file, fileList, index) - if (ret === true) { - doRemove() - } else if (ret && typeof ret.then === 'function') { - ret.then(res => { - if (res === true) { - doRemove() - } - }) - } - } - - onUpload (file, fileList, response) { - const { - onChange - } = this.props - - const onUploadError = () => { - for (const index in fileList) { - if (fileList[index].fileId === file.fileId) { - fileList.splice(index, 1) - this.setState({fileList}) - break - } - } - } - - const callback = (ret) => { - if (ret === false) { - onUploadError() - } else if (ret && typeof ret.then === 'function') { - ret.then(res => { - if (res === false) { - onUploadError() - } - }) - } - } - - onChange(file, fileList, response, callback) - } - - uploadFile (file, dataUrl = '') { - const FileReader = window.FileReader - const XMLHttpRequest = window.XMLHttpRequest - const FormData = window.FormData - const { - fileList - } = this.state - const { - name, - param, - headers, - uploadAction - } = this.props - const onerror = (err) => { - const errRes = err !== undefined ? err : { status: xhr.status, statusText: xhr.statusText } - file.uploadState = 'error' - this.setState({ fileList }) - this.onUpload(file, fileList, errRes) - } - - if (file.fileType === 'img') { // 用来图片预览 - if (dataUrl) { - file.url = dataUrl - } else if (dataUrl !== false) { - const fr = new FileReader() - - fr.onload = e => { - const url = e.target.result - file.url = url - this.setState({ fileList }) - } - fr.readAsDataURL(file) - } - } - - let xhr = new XMLHttpRequest() - let formFile = new FormData() - - if (dataUrl) { - formFile.append(name, dataUrl) - } else { - formFile.append(name, file) - } - // 设置除file外需要带入的参数 - if (param) { - for (let i in param) { - formFile.append(i, param[i]) - } - } - xhr.upload.onload = () => { - file.uploadState = 'success' - this.setState({ fileList }) - } - xhr.onreadystatechange = () => { - if (xhr.readyState === 4) { - if (xhr.status === 200) { - this.onUpload(file, fileList, JSON.parse(xhr.response)) - } else { - onerror() - } - } - } - xhr.upload.onerror = () => { - onerror() - } - xhr.upload.onprogress = event => { - var e = event || window.event - var percentComplete = Math.ceil(e.loaded / e.total * 100) - file.progressNumber = percentComplete - this.setState({ fileList }) - } - - xhr.open('post', uploadAction, true) - // 设置用户传入的请求头 - if (headers) { - for (let j in headers) { - xhr.setRequestHeader(j, headers[j]) - } - } - xhr.send(formFile) - } - - uploadStatusIcon (status) { - switch (status) { - case 'success': - return 'right' - - case 'error': - return 'warning' - - default: - return '' - } - } -} - -Upload.propTypes = { - type: PropTypes.string, - accept: PropTypes.string, - limit: PropTypes.number, - buttonText: PropTypes.string, - buttonIcon: PropTypes.string, - uploadAction: PropTypes.string, - param: PropTypes.object, - name: PropTypes.string, - disabled: PropTypes.bool, - headers: PropTypes.object, - showUploadList: PropTypes.bool, - multiple: PropTypes.bool, - onChange: PropTypes.func, - customUpload: PropTypes.func, - beforeUpload: PropTypes.func, - defaultFileList: PropTypes.array, - fileList: PropTypes.array, - onRemove: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]), - maxSize: PropTypes.number -} - -Upload.defaultProps = { - defaultFileList: [], - // headers: {'Content-type': 'multipart/form-data'}, // headers 不可以设置Content-type https://stackoverflow.com/questions/17415084/multipart-data-post-using-python-requests-no-multipart-boundary-was-found/17438575 - headers: {}, - accept: '', - limit: null, - buttonIcon: 'upload', - uploadAction: '', - param: null, - name: 'file', - disabled: false, - showUploadList: true, - multiple: false, - beforeUpload: () => true, - onRemove: () => true, - onChange: () => true - // overEvent: false -} -export default Upload diff --git a/components/upload/upload-legacy/UploadAvatar.js b/components/upload/upload-legacy/UploadAvatar.js deleted file mode 100644 index a7fd0eb2a..000000000 --- a/components/upload/upload-legacy/UploadAvatar.js +++ /dev/null @@ -1,238 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' -import Modal from '../../modal' -import Provider from '../../context' -import Upload from './Upload' -import Preview from './Preview' -import Cropper from 'react-cropper' -import Icon from '../../icon' -import 'cropperjs/dist/cropper.css' -class UploadAvatar extends Upload { - containerWidth = 550 - containerHeight = 500 - filename = '' - img = null - scale = 1 - draging = false - dragBeginXy = { - x: 0, - y: 0 - } - - constructor (props) { - super(props) - - this.state = Object.assign( - { - showPreviewModal: false, - showCropperModal: false, - position: { - top: 0, - left: 0 - }, - src: '' - }, - this.state - ) - this.cropperRef = React.createRef() - } - - uploadFiles (files) { - if (files.length === 0) return - this.setState({uploadState: 'loading'}, () => { - this.filename = files[0].name - this.showCropperModal(files[0]) - }) - } - - showCropperModal (file) { - const fr = new window.FileReader() - - fr.onload = e => { - const src = e.target.result - this.setState({src}, () => { - this.setState({showCropperModal: true}) - }) - } - fr.readAsDataURL(file) - } - - base2blob (dataurl, filename) { - let arr = dataurl.split(',') - const mime = arr[0].match(/:(.*?);/)[1] - const bstr = window.atob(arr[1]) - let n = bstr.length - let u8arr = new Uint8Array(n) - while (n--) { - u8arr[n] = bstr.charCodeAt(n) - } - return new window.File([u8arr], filename, { - type: mime - }) - } - - cancel () { - this.setState({showCropperModal: false}) - } - - formatFile (file) { - file.fileType = 'img' - - return file - } - - confirm () { // 裁切图片 - const cs = this.cropperRef.current.getCroppedCanvas() - if (typeof cs === 'undefined') { - return - } - const dataUrl = cs.toDataURL() - const file = this.base2blob(dataUrl, this.filename) - file.url = dataUrl - - this.formatFile(file) - this.setState({ - fileList: [file], - showCropperModal: false - }, () => { - const { - beforeUpload, - customUpload - } = this.props - - if (!beforeUpload(file, this.state.fileList)) { - return - } - if (customUpload) { - customUpload(file) - } else { - this.uploadFile(file, false) - } - }) - } - - closePreviewModal () { - this.setState({ - showPreviewModal: false - }) - } - - previewImage () { - this.setState({ - showPreviewModal: true - }) - } - - render () { - const { - disabled, - accept, - localeDatas, - avatarOptions = {} - } = this.props - const { - fileList, - showCropperModal, - showPreviewModal - } = this.state - const { aspectRatio = 0, dragMode = 'move', dropBoxSize = [] } = avatarOptions - const file = fileList[0] - return ( - <div className='hi-upload-legacy hi-upload-legacy--avatar'> - <ul className='hi-upload-legacy__list'> - { - !!file && ( - file.uploadState === 'loading' - ? ( - <li className='hi-upload-legacy__item'> - <img src={file.url} className='hi-upload-legacy__thumb' /> - <div className='hi-upload-legacy__precent'> - <p className='hi-upload-legacy__loading-text'>{file.progressNumber ? (file.progressNumber < 100 ? (file.progressNumber + '%') : localeDatas.upload.uploadSuccess) : (0 + '%')}</p> - <div className='hi-upload-legacy__loading-bar' style={{ width: (file.progressNumber * 1.4) + 'px' }} /> - </div> - </li> - ) - : ( - <li className='hi-upload-legacy__item'> - <img src={file.url} className={`hi-upload-legacy__thumb ${file.uploadState === 'error' && 'error'}`} onClick={() => this.previewImage(file)} /> - { - <Icon name='close-circle' className='hi-upload-legacy__photo-del' onClick={() => this.deleteFile(file, 0)} /> - } - </li> - ) - ) - } - { - !file && ( - <li className='hi-upload-legacy__item hi-upload-legacy__item--upload'> - <label style={{display: 'block'}}> - <input - ref={node => { - this.uploadRef = node - }} - type='file' - accept={accept} - disabled={disabled && 'disabled'} - onChange={e => this.uploadFiles(e.target.files)} - hidden - /> - <Icon name='plus' /> - </label> - </li> - ) - } - </ul> - <Modal - show={showCropperModal} - onConfirm={() => { this.confirm() }} - onCancel={() => { this.cancel() }} - backDrop={false} - > - <Cropper - src={this.state.src} - ready={(e) => { - if (dropBoxSize.length > 0) { - this.cropperRef.current.setCropBoxData({ - width: dropBoxSize[0], - height: dropBoxSize[1] || dropBoxSize[0] - }) - } - }} - aspectRatio={aspectRatio} - guides={false} - dragMode={dragMode} - ref={this.cropperRef} - crop={() => { - }} - style={{height: 400, width: '100%'}} - /> - </Modal> - { - showPreviewModal && file && <Preview - src={file.url} - images={[file]} - activeIndex={0} - show={showPreviewModal} - onClose={this.closePreviewModal.bind(this)} - /> - } - </div> - ) - } -} - -UploadAvatar.propTypes = Object.assign({}, { - ...Upload.propTypes -}, { - width: PropTypes.number, - height: PropTypes.number -}) -UploadAvatar.defaultProps = Object.assign({}, { - ...Upload.defaultProps -}, { - width: 200, - height: 200, - accept: 'image/jpg,image/jpeg,image/png' -}) - -export default Provider(UploadAvatar) diff --git a/components/upload/upload-legacy/UploadClick.js b/components/upload/upload-legacy/UploadClick.js deleted file mode 100644 index 25aacd124..000000000 --- a/components/upload/upload-legacy/UploadClick.js +++ /dev/null @@ -1,89 +0,0 @@ -import React from 'react' -import classNames from 'classnames' -import Provider from '../../context' -import Upload from './Upload' -import Icon from '../../icon' - -class UploadClick extends Upload { - render () { - const { - buttonText, - disabled, - multiple, - tips, - showUploadList, - onRemove, - accept, - localeDatas - } = this.props - const { - fileList, - fileCountLimted - } = this.state - return ( - <div className='hi-upload-legacy hi-upload-legacy--normal'> - <label> - <input - ref={node => { this.uploadRef = node }} - type='file' - onChange={e => this.uploadFiles(e.target.files)} - multiple={multiple && 'multiple'} - disabled={(disabled || fileCountLimted) && 'disabled'} - accept={accept} - hidden - /> - <span className={`hi-upload-legacy__button ${(disabled || fileCountLimted) ? 'hi-upload-legacy__button--disabled' : ''}`}> - { buttonText || localeDatas.upload.buttonText} - </span> - </label> - { - tips && <span className='hi-upload-legacy__tips hi-upload-legacy__tips--single-line'>{tips}</span> - } - {showUploadList && ( - <ul className='hi-upload-legacy__list'> - {fileList.map((file, index) => { - const fileNameCls = classNames( - 'hi-upload-legacy__filename', - file.uploadState === 'error' && 'hi-upload-legacy__filename--error' - ) - return ( - <li - key={index} - className='hi-upload-legacy__item' - title={file.name} - > - <span className={classNames(`Ficon-${file.fileType}`)} /> - <div className='hi-upload-legacy__right-content'> - <span className={fileNameCls} title={file.name}>{file.name}</span> - <span> - { onRemove && - <Icon - name={file.uploadState === 'loading' ? 'close' : 'delete'} - onClick={() => this.deleteFile(file, index)} - /> - } - </span> - </div> - { - file.uploadState === 'loading' && ( - <div className='hi-upload-legacy__upstatus'> - <i className='hi-upload-legacy__upstatus-line' style={{ width: file.progressNumber + '%' }} /> - </div> - ) - } - </li> - ) - })} - </ul>)} - </div> - ) - } -} - -UploadClick.defaultProps = Object.assign({}, { - ...Upload.defaultProps -}, { - type: 'normal' -}) - -export default Provider(UploadClick) diff --git a/components/upload/upload-legacy/UploadDrag.js b/components/upload/upload-legacy/UploadDrag.js deleted file mode 100644 index d22933b1c..000000000 --- a/components/upload/upload-legacy/UploadDrag.js +++ /dev/null @@ -1,150 +0,0 @@ -import React from 'react' -import classNames from 'classnames' -import Provider from '../../context' -import Upload from './Upload' -import Icon from '../../icon' - -class UploadDrag extends Upload { - constructor (props) { - super(props) - this.state = Object.assign( - { - overEvent: false - }, - this.state - ) - } - - dragoverFn (e) { - e.preventDefault() - this.setState({ overEvent: true }) - } - - dragleaveFn (e) { - e.preventDefault() - this.setState({ overEvent: false }) - } - - dropFn (e) { - e.stopPropagation() - e.preventDefault() - if (this.props.disabled) { - return - } - this.setState({ overEvent: false }) - let files = e.dataTransfer.files - this.uploadFiles(files) - } - - render () { - const { - multiple, - accept, - disabled, - tips, - localeDatas - } = this.props - const { - overEvent, - fileList - } = this.state - - const dragCls = classNames( - 'hi-upload-legacy', - 'hi-upload-legacy--drag', - overEvent && !disabled && 'drop-over', - disabled && 'hi-upload-legacy--disabled', - fileList.length > 0 && 'hi-upload-legacy--nohover' - ) - return ( - <div - className={dragCls} - onDragOver={e => this.dragoverFn(e)} - onDragLeave={e => this.dragleaveFn(e)} - onDrop={e => this.dropFn(e)} - onClick={(e) => { - e.stopImmediatePropagation() - if (!e.target.className.includes('hi-upload-legacy__operate-icon') && !e.target.className.includes('upload-input')) { - this.uploadRef.click() - } - }} - > - <div - className={ - fileList.length === 0 - ? 'show-drop-content' - : 'drop-content' - } - > - <label className='hi-upload-legacy-label'> - <Icon name='upload-cloud' className='icon' /> - <span className='drop-click'>{localeDatas.upload.drag}</span> - { - tips && <span className='hi-upload-legacy__tips hi-upload-legacy__tips--single-line'>{tips}</span> - } - <input - ref={node => { this.uploadRef = node }} - type='file' - className='upload-input' - onChange={e => { - this.uploadFiles(e.target.files) - }} - multiple={multiple && 'multiple'} - disabled={disabled && 'disabled'} - hidden - accept={accept} - /> - </label> - </div> - <ul - className={ - fileList.length === 0 - ? 'hide-upload-list' - : 'hi-upload-legacy__list' - } - > - { - fileList.length > 0 && <li className='hi-upload-legacy__item hi-upload-legacy__item-tips'> - <Icon name='comment-circle-o' />{localeDatas.upload.dragTips} - </li> - } - {fileList.map((file, index) => { - const fileNameCls = classNames( - 'file-name', - 'upload-list__item-name', - file.uploadState === 'error' && 'file-name--error' - ) - return ( - <li - key={index} - title={file.name} - className='hi-upload-legacy__item' - > - <span className={`Ficon-${file.fileType}`} /> - <div className='hi-upload-legacy__right-content'> - <span className={fileNameCls}>{file.name}</span> - <span - className='hi-upload-legacy__operate-icon' - onClick={(e) => this.deleteFile(e, file, index)} - > - {file.uploadState === 'loading' ? localeDatas.upload.cancel : localeDatas.upload.delete } - </span> - </div> - { - file.uploadState === 'loading' && ( - <div className='hi-upload-legacy__upstatus'> - <i className='hi-upload-legacy__upstatus-line' style={{ width: file.progressNumber + '%' }} /> - <i className='hi-upload-legacy__upstatus-num'>{file.progressNumber || 0}%</i> - </div> - ) - } - </li> - ) - })} - </ul> - </div> - ) - } -} - -export default Provider(UploadDrag) diff --git a/components/upload/upload-legacy/UploadPhoto.js b/components/upload/upload-legacy/UploadPhoto.js deleted file mode 100644 index a618376a0..000000000 --- a/components/upload/upload-legacy/UploadPhoto.js +++ /dev/null @@ -1,126 +0,0 @@ -import React from 'react' -import classNames from 'classnames' -import Provider from '../../context' -import Upload from './Upload' -import Preview from './Preview' -import Icon from '../../icon' - -class UploadPhoto extends Upload { - constructor (props) { - super(props) - this.state = Object.assign( - { - uploading: false, - progressNumber: 0, - showModal: false, - previewFile: {}, - activeIndex: 0, - images: [] - }, - this.state - ) - } - - closeModal () { - this.setState({ - previewFile: {}, - showModal: false - }) - } - - previewImage (file, activeIndex) { - this.setState({ - previewFile: file, - showModal: true, - activeIndex - }) - } - - render () { - const { - fileList, - showModal, - previewFile, - activeIndex - } = this.state - const { - onRemove, - disabled, - accept, - localeDatas - } = this.props - const images = fileList.map(file => { - return { - url: file.url - } - }) - return ( - <div className={classNames('hi-upload-legacy hi-upload-legacy--photo', {'hi-upload-legacy--disabled': disabled})}> - <ul className='hi-upload-legacy__list'> - {fileList.map((file, index) => { - if (file.uploadState === 'loading') { - return ( - <li key={index} className='hi-upload-legacy__item'> - <img src={file.url} className='hi-upload-legacy__thumb' /> - <div className='hi-upload-legacy__precent'> - <p className='hi-upload-legacy__loading-text'>{file.progressNumber ? (file.progressNumber < 100 ? (file.progressNumber + '%') : localeDatas.upload.uploadSuccess) : (0 + '%')}</p> - <div className='hi-upload-legacy__loading-bar' style={{ width: (file.progressNumber * 1.4) + 'px' }} /> - </div> - </li> - ) - } else { - return ( - <li key={index} className='hi-upload-legacy__item'> - <img src={file.url} className={`hi-upload-legacy__thumb ${file.uploadState === 'error' && 'error'}`} onClick={() => this.previewImage(file, index)} /> - { - onRemove && <Icon name='close-circle' className='hi-upload-legacy__photo-del' onClick={() => this.deleteFile(file, index)} /> - } - { - file.uploadState === 'error' && <div className='hi-upload-legacy__precent'> - <div> - <Icon name='comment-circle-o' /> - <br /> - {localeDatas.upload.uploadFailed} - </div> - </div> - } - </li> - ) - } - })} - <li className='hi-upload-legacy__item hi-upload-legacy__item--upload'> - <label style={{display: 'block'}}> - <input - ref={node => { - this.uploadRef = node - }} - type='file' - accept={accept} - disabled={disabled && 'disabled'} - onChange={e => this.uploadFiles(e.target.files)} - hidden - /> - <Icon name='plus' /> - </label> - </li> - </ul> - { - showModal && <Preview - src={previewFile.url} - images={images} - activeIndex={activeIndex} - show={showModal} - onClose={this.closeModal.bind(this)} - /> - } - </div> - ) - } -} -UploadPhoto.defaultProps = Object.assign({}, { - ...Upload.defaultProps -}, { - accept: 'image/jpg,image/jpeg,image/png' -}) - -export default Provider(UploadPhoto) diff --git a/components/upload/upload-legacy/UploadPictureCard.js b/components/upload/upload-legacy/UploadPictureCard.js deleted file mode 100644 index 38b1939d5..000000000 --- a/components/upload/upload-legacy/UploadPictureCard.js +++ /dev/null @@ -1,93 +0,0 @@ -import React from 'react' -import Upload from './Upload' -import Provider from '../../context' -import Icon from '../../icon' -import classNames from 'classnames' - -class UploadPictureCard extends Upload { - render () { - const { - buttonText, - showUploadList, - multiple, - disabled, - accept, - onRemove, - localeDatas - } = this.props - const { - fileList - } = this.state - - return ( - <div className='hi-upload-legacy hi-upload-legacy--picture-card'> - <div> - <label> - <input - ref={node => { this.uploadRef = node }} - type='file' - className='upload-input' - onChange={e => this.uploadFiles(e.target.files)} - multiple={multiple && 'multiple'} - disabled={disabled && 'disabled'} - accept={accept} - hidden - /> - <span className={`hi-upload-legacy__button ${disabled ? 'hi-upload-legacy__button--disabled' : ''}`}> - {buttonText || localeDatas.upload.buttonText} - </span> - </label> - </div> - {showUploadList && ( - <ul className='hi-upload-legacy__list'> - {fileList.map((file, index) => { - const fileNameCls = classNames( - 'hi-upload-legacy__filename', - file.uploadState === 'error' && 'hi-upload-legacy__filename--error' - ) - const itemCls = classNames( - 'hi-upload-legacy__item', - file.uploadState === 'error' && 'hi-upload-legacy__item--error' - ) - return ( - <li key={index} title={file.name} className={itemCls}> - <div className='img-wrap'> - <img src={file.url} /> - {file.uploadState === 'loading' && (<div className='img-mask' />)} - </div> - <div className='hi-upload-legacy__right-content'> - <span className={fileNameCls} title={file.name}>{file.name}</span> - <span> - {/* {file.uploadState !== 'loading' && (<span className={'Ficon-' + this.uploadStatusIcon(file.uploadState)} />)} */} - { onRemove && - <Icon - name={file.uploadState === 'loading' ? 'close' : 'delete'} - onClick={() => this.deleteFile(file, index)} - /> - } - </span> - { - file.uploadState === 'loading' && ( - <div className='hi-upload-legacy__upstatus'> - <i className='hi-upload-legacy__upstatus-line' style={{ width: file.progressNumber + '%' }} /> - </div> - ) - } - </div> - - </li> - ) - })} - </ul> - )} - </div> - ) - } -} -UploadPictureCard.defaultProps = Object.assign({}, { - ...Upload.defaultProps -}, { - accept: 'image/jpg,image/jpeg,image/png' -}) - -export default Provider(UploadPictureCard) diff --git a/components/upload/upload-legacy/index.js b/components/upload/upload-legacy/index.js deleted file mode 100644 index a9987ac52..000000000 --- a/components/upload/upload-legacy/index.js +++ /dev/null @@ -1,24 +0,0 @@ -import React, { Component } from 'react' -import UploadClick from './UploadClick' -import UploadDrag from './UploadDrag' -import UploadPhoto from './UploadPhoto' -import UploadAvatar from './UploadAvatar' -import UploadPictureCard from './UploadPictureCard' -import './style/index' - -export default class Upload extends Component { - render () { - const { type } = this.props - if (type === 'normal') { - return <UploadClick {...this.props} /> - } else if (type === 'drag') { - return <UploadDrag {...this.props} /> - } else if (type === 'photo') { - return <UploadPhoto {...this.props} /> - } else if (type === 'avatar') { - return <UploadAvatar {...this.props} /> - } else if (type === 'pictureCard') { - return <UploadPictureCard {...this.props} /> - } - } -} diff --git a/components/upload/upload-legacy/style/index.js b/components/upload/upload-legacy/style/index.js deleted file mode 100644 index f0e4d0b9c..000000000 --- a/components/upload/upload-legacy/style/index.js +++ /dev/null @@ -1,2 +0,0 @@ -import './index.scss' -import '../../../style/icon/diyIcon.scss' diff --git a/components/upload/upload-legacy/style/index.scss b/components/upload/upload-legacy/style/index.scss deleted file mode 100644 index 78cdd2e5e..000000000 --- a/components/upload/upload-legacy/style/index.scss +++ /dev/null @@ -1,362 +0,0 @@ -.hi-upload-legacy { - &--disabled { - cursor: not-allowed; - } - - &__button { - display: inline-block; - width: 88px; - height: 32px; - font-size: 14px; - background: #4284f5; - color: #fff; - cursor: pointer; - line-height: 32px; - text-align: center; - border-radius: 2px; - - &--disabled { - cursor: not-allowed; - opacity: 0.5; - } - } - - &__tips { - font-size: 12px; - color: rgb(153, 153, 153); - // padding-top: 12px !important; - - &--single-line { - display: block; - padding: 12px 0 8px; - } - } - - &__list { - width: 100%; - overflow: hidden; - } - - &__item { - height: 36px; - cursor: default; - color: #666; - display: flex; - align-items: center; - padding-bottom: 8px; - overflow: hidden; - position: relative; - - &-tips { - color: #428ef5; - background: #edf2fc; - border-radius: 2px; - font-size: 14px; - padding: 4px 6px; - height: auto !important; - border: 1px solid #d8e5ff; - } - - .hi-icon { - cursor: pointer; - font-size: 18px; - } - } - - &__right-content { - position: relative; - display: flex; - flex: 1; - justify-content: space-between; - align-items: center; - padding-left: 8px; - overflow: hidden; - } - - &__filename { - flex: 1; - text-overflow: ellipsis; - white-space: nowrap; - overflow: hidden; - font-size: 14px; - - &--error { - color: rgb(255, 0, 0); - } - } - - &__upstatus { - width: 100%; - height: 2px; - background: #f2f2f2; - border-radius: 9px; - position: absolute; - bottom: 0; - - &-line { - display: inline-block; - height: 2px; - width: 0; - background: #4284f5; - border-radius: 4px 0 0 4px; - position: absolute; - left: 0; - top: 0; - transition: width 0.1s linear; - } - - &-num { - position: absolute; - right: 38px; - top: -32px; - font-style: normal; - font-size: 12px; - color: #999; - } - } - - // 拖拽样式 - &--drag { - position: relative; - width: 100%; - min-height: 140px; - box-sizing: border-box; - border: 1px dotted #dbdbdb; - cursor: pointer; - padding: 12px; - - &:hover:not(.hi-upload-legacy--nohover) { - border-color: #4284f5; - } - - .hi-upload-legacy__operate-icon { - color: #4284f5; - cursor: pointer; - } - - &.hi-upload-legacy--disabled { - cursor: not-allowed; - opacity: 0.6; - - &, - &:hover { - border-color: #d9d9d9; - } - - .drop-click { - cursor: not-allowed; - } - } - - .drop-content { - display: none; - } - - .show-drop-content { - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - margin: auto; - display: inline-block; - height: 60px; - text-align: center; - font-size: 12px; - color: #333; - letter-spacing: 0; - line-height: 20px; - cursor: inherit; - - .icon { - display: block; - cursor: inherit; - margin-bottom: 10px; - - &::before { - font-size: 30px; - color: #4284f5; - } - } - } - - .drop-over { - border: 1px dashed #0099fb; - } - } - - &--avatar, - &--photo { - &.hi-upload-legacy--disabled { - .photo-upload { - cursor: not-allowed; - - &, - &:hover { - border-color: #d9d9d9; - } - } - } - - .hi-upload-legacy__list { - overflow: visible; - } - - .hi-upload-legacy__item { - width: 140px; - height: 140px; - display: inline-block; - position: relative; - text-align: center; - padding: 0; - margin: 8px; - // margin-right: 16px; - overflow: visible; - // margin-top: 0; - vertical-align: middle; - background: #fff; - // margin-bottom: 16px; - - &:not(:last-child) { - background: #e7e7e7; - } - - img { - margin-top: 50%; - transform: translateY(-50%); - } - - &--upload { - text-align: center; - font-size: 28px; - color: #e7e7e7; - border: 1px dotted #bcbcbc; - line-height: 140px; - - &:hover { - border-color: #0099fb; - } - } - - &:hover { - .hi-upload-legacy__photo-del { - display: block; - } - } - } - } - - &__photo-del { - position: absolute; - right: -8px; - top: -12px; - font-size: 18px; - display: none; - z-index: 2; - } - - &__precent { - position: absolute; - width: 140px; - height: 140px; - left: 0; - top: 0; - background: rgba(0, 0, 0, 0.4); - color: #fff; - font-size: 14px; - display: flex; - justify-content: center; - align-items: center; - } - - &__loading-bar { - width: 0; - height: 4px; - position: absolute; - left: 0; - bottom: 0; - background: #4284f5; - } - - &__thumb { - max-width: 140px; - max-height: 140px; - } - - &--picture-card { - .upload--disabled { - cursor: not-allowed; - } - - .hi-upload-legacy__list { - margin-top: 15px; - overflow: auto; - - .hi-upload-legacy__item { - height: 64px; - box-sizing: border-box; - border: 1px solid #d8d8d8; - border-radius: 2px; - padding: 8px 18px 8px 8px; - margin-bottom: 8px; - font-size: 12px; - color: #333; - - &--error { - border: 1px solid rgba(244, 65, 65, 1); - } - - &:hover { - background: rgba(247, 247, 247, 1); - } - - &.loading { - color: #999; - } - - .img-wrap { - float: left; - width: 50px; - height: 50px; - margin-right: 12px; - position: relative; - - img { - position: absolute; - left: 0; - top: 0; - right: 0; - bottom: 0; - margin: auto; - max-width: 50px; - max-height: 50px; - } - - .img-mask { - width: 50px; - height: 50px; - position: absolute; - left: 0; - top: 0; - background: rgba(0, 0, 0, 0.3); - } - } - } - } - } - - p { - margin: 0; - padding: 0; - } - - ul { - margin: 0; - padding: 0; - list-style: none; - } - - li { - list-style: none; - } -} diff --git a/components/upload/upload-legacy/style/preview.js b/components/upload/upload-legacy/style/preview.js deleted file mode 100644 index f26a6d530..000000000 --- a/components/upload/upload-legacy/style/preview.js +++ /dev/null @@ -1 +0,0 @@ -import './preview.scss' diff --git a/components/upload/upload-legacy/style/preview.scss b/components/upload/upload-legacy/style/preview.scss deleted file mode 100644 index 2eb0eb067..000000000 --- a/components/upload/upload-legacy/style/preview.scss +++ /dev/null @@ -1,51 +0,0 @@ -.hi-preview { - position: fixed; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: rgba(0, 0, 0, 0.54); - z-index: 9999; - - &__image { - &:hover { - cursor: move; - } - } - - &-toolbar { - position: absolute; - bottom: 20px; - left: 50%; - transform: translate(-50%, -50%); - background: #fff; - padding: 0 32px; - height: 48px; - display: flex; - align-items: center; - border-radius: 28px; - - .hi-icon { - margin: 0 12px; - font-size: 20px; - cursor: pointer; - } - } - - &__close { - position: absolute; - right: 10px; - top: 10px; - width: 36px; - height: 36px; - line-height: 1; - border-radius: 50%; - text-align: center; - - img { - width: 100%; - height: 100%; - cursor: pointer; - } - } -} diff --git a/components/upload/upload-legacy/tool.js b/components/upload/upload-legacy/tool.js deleted file mode 100644 index 7225fd315..000000000 --- a/components/upload/upload-legacy/tool.js +++ /dev/null @@ -1,67 +0,0 @@ -const AJAX = function (obj) { // 做网络请求的时候,以对象形式传递进来 - /* - //规定:obj里面包含属性有: - 1.deleteAction - 2.type---get还是 post - 3.data--前端给后端传递的参数(前端传递的时候以"对象形式") - 4.回调函数---success - 5. hearders---请求头 - */ - - let ajaxObj = null - if (window.XMLHttpRequest) { - let XMLHttpRequest = window.XMLHttpRequest - ajaxObj = new XMLHttpRequest() - } else { - let ActiveXObject = window.ActiveXObject - ajaxObj = new ActiveXObject('Microsoft.XMLHTTP') - } - // 检测状态的变化 - ajaxObj.onreadystatechange = function () { - if (ajaxObj.readyState === 4) { - if ((ajaxObj.status >= 200 && ajaxObj.status < 300) || ajaxObj.status === 304) { - if (obj.success) { - obj.success(JSON.parse(ajaxObj.responseText)) - } - } - } - } - // -------------------------------------------- - let params = '' - // 判断是否传递了参数 - if (obj.data) { - for (let key in obj.data) { - params += (key + '=' + obj.data[key] + '&') - } - params = params.slice(0, params.length - 1) - } - // ------------------------------------------- - // type 转化为小写,方便使用 - let type = obj.type || 'get' - type = type.toLowerCase() - if (type === 'get') { - ajaxObj.open(type, obj.deleteAction + '?' + params, true) - // 设置用户传入的请求头 - if (obj.headers) { - for (let j in obj.headers) { - if (j) { - ajaxObj.setRequestHeader(j, obj.headers[j]) - } - } - } - ajaxObj.send() - } else { - ajaxObj.open(type, obj.deleteAction, true) - // 设置用户传入的请求头 - if (obj.headers) { - for (let j in obj.headers) { - if (j) { - ajaxObj.setRequestHeader(j, obj.headers[j]) - } - } - } - ajaxObj.send(params) - } -} - -export default AJAX diff --git a/components/upload/util.js b/components/upload/util.js new file mode 100644 index 000000000..e87e9ab67 --- /dev/null +++ b/components/upload/util.js @@ -0,0 +1,39 @@ +export const getFileType = (file) => { + const ext = file.name.slice(file.name.lastIndexOf('.') + 1).toLowerCase() + let fileType = 'other' + if (['jpg', 'jpeg', 'gif', 'png', 'bmp'].includes(ext)) { + fileType = 'img' + } + if (['rar', 'zip'].includes(ext)) { + fileType = 'zip' + } + if (['rar', 'zip'].includes(ext)) { + fileType = 'zip' + } + if (['doc', 'docx'].includes(ext)) { + fileType = 'word' + } + if (['pdf'].includes(ext)) { + fileType = 'pdf' + } + if (['ppt', 'pptx'].includes(ext)) { + fileType = 'ppt' + } + if (['key'].includes(ext)) { + fileType = 'key' + } + if (['exe', 'dmg'].includes(ext)) { + fileType = 'exe' + } + + if (['xls', 'xlsx'].includes(ext)) { + fileType = 'excel' + } + if (['mp4'].includes(ext)) { + fileType = 'video' + } + if (['mp3'].includes(ext)) { + fileType = 'audio' + } + return fileType +} diff --git a/components/watermark/index.d.ts b/components/watermark/index.d.ts new file mode 100644 index 000000000..26d6c8775 --- /dev/null +++ b/components/watermark/index.d.ts @@ -0,0 +1,8 @@ +interface Props { + density?: 'low' | 'default' | 'high' + content?: strgin | string[] + logo?: any + opacity?: number +} +declare const Watermark: React.ComponentType<Props> +export default Watermark diff --git a/components/watermark/index.js b/components/watermark/index.js index 239e8a3bc..27de77483 100644 --- a/components/watermark/index.js +++ b/components/watermark/index.js @@ -1,30 +1,37 @@ import React from 'react' import PropTypes from 'prop-types' import WaterMarker from './watermark' +import Provider from '../context/index' + import _ from 'lodash' -class Watermark extends React.Component { - constructor (props) { +class InternalWatermark extends React.Component { + constructor(props) { super(props) this.rootRef = React.createRef() } - componentDidMount () { + + componentDidMount() { const container = this.rootRef.current + const { localeDatas, content } = this.props const options = _.cloneDeep(this.props) + options.content = content || localeDatas.watermark.content delete options.children WaterMarker(container, options) } - render () { + + render() { + const { allowCopy } = this.props return ( - <div ref={this.rootRef} style={{ overflow: 'hidden' }}> + <div ref={this.rootRef} style={{ overflow: 'hidden', userSelect: allowCopy ? 'text' : 'none' }}> {this.props.children} </div> ) } } -Watermark.propTypes = { +InternalWatermark.propTypes = { id: PropTypes.string, width: PropTypes.number, height: PropTypes.number, @@ -40,19 +47,20 @@ Watermark.propTypes = { textOverflowEffect: PropTypes.oneOf(['zoom', 'cut']) } -Watermark.defaultProps = { +InternalWatermark.defaultProps = { id: null, density: 'default', textAlign: 'left', font: 14, color: 'rgba(148, 148, 148, 0.2)', - content: '请勿外传', rotate: -30, zIndex: 1000, logo: null, grayLogo: true, isAutoWrap: false, - textOverflowEffect: 'zoom' + textOverflowEffect: 'zoom', + allowCopy: false } +const Watermark = Provider(InternalWatermark) Watermark.generate = WaterMarker export default Watermark diff --git a/components/watermark/watermark.js b/components/watermark/watermark.js index 0a5669f22..b414ac8f1 100644 --- a/components/watermark/watermark.js +++ b/components/watermark/watermark.js @@ -1,7 +1,8 @@ const defaultOptions = { id: null, textAlign: 'left', - font: 'normal normal lighter 28px -apple-system,BlinkMacSystemFont,"Helvetica Neue",Helvetica,Arial,"Microsoft Yahei","Hiragino Sans GB","Heiti SC","WenQuanYi Micro Hei",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"', + font: + 'normal normal lighter 28px -apple-system,BlinkMacSystemFont,"Helvetica Neue",Helvetica,Arial,"Microsoft Yahei","Hiragino Sans GB","Heiti SC","WenQuanYi Micro Hei",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"', color: 'rgba(148, 148, 148, 0.2)', content: '请勿外传', rotate: -30, @@ -14,7 +15,7 @@ const defaultOptions = { const parseTextData = (ctx, texts, width, isWrap) => { let content = [] - let lines = [] + const lines = [] if (texts instanceof Array) { content = texts } else if (typeof texts === 'string') { @@ -25,8 +26,8 @@ const parseTextData = (ctx, texts, width, isWrap) => { if (isWrap) { content.forEach((text) => { let curLine = '' - for (let char of text) { - let nextLine = curLine + char + for (const char of text) { + const nextLine = curLine + char if (char === '\n' || ctx.measureText(nextLine).width > width) { lines.push(curLine) curLine = char === '\n' ? '' : char @@ -42,26 +43,17 @@ const parseTextData = (ctx, texts, width, isWrap) => { } } const drawText = (ctx, options) => { - let { - width, - _w = width, - height, - textOverflowEffect, - content: text, - font, - isAutoWrap, - logo - } = options - let oldBaseLine = ctx.textBaseline + let { width, _w = width, height, textOverflowEffect, content: text, font, isAutoWrap, logo } = options + const oldBaseLine = ctx.textBaseline let x = 0 - let y = 16 + const y = 16 ctx.textBaseline = 'hanging' /** * LOGO 固定宽高: 32 * 32 * 内容区域为 画布宽度 - 48 (预留左右各24的 padding) * 如含 LOGO ,文字的起始 X 坐标为: 24(padding-left) + 32(logo size) + 4(logo 与 text 间距) */ - let lineHeight = parseInt(font * 2) // ctx.font必须以'XXpx'开头 + const lineHeight = parseInt(font * 2) // ctx.font必须以'XXpx'开头 if (logo) { x += 64 _w -= 64 @@ -69,9 +61,9 @@ const drawText = (ctx, options) => { const lines = parseTextData(ctx, text, width, isAutoWrap) // 计算 Y 的起始位置 - let lineY = y + (ctx.canvas.height) / 2 - (lineHeight * lines.length) / 2 + let lineY = y + ctx.canvas.height / 2 - (lineHeight * lines.length) / 2 const initLineY = lineY - for (let line of lines) { + for (const line of lines) { let lineX if (ctx.textAlign === 'center') { lineX = x + width + 40 @@ -121,8 +113,13 @@ const toImage = (canvas, key, container, options) => { visibility:visible !important; display: block !important; opacity: ${opacity} !important; + user-select:none !important; background-image:url('${base64Url}'); - ${options.grayLogo ? '-webkit-filter: grayscale(100%);-moz-filter: grayscale(100%);-ms-filter: grayscale(100%);-o-filter: grayscale(100%);filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);_filter:none;' : ''} + ${ + options.grayLogo + ? '-webkit-filter: grayscale(100%);-moz-filter: grayscale(100%);-ms-filter: grayscale(100%);-o-filter: grayscale(100%);filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);_filter:none;' + : '' + } ` watermarkDiv.setAttribute('style', styleStr) if (window.getComputedStyle(container).getPropertyValue('position') === 'static') { @@ -135,7 +132,14 @@ const toImage = (canvas, key, container, options) => { let mo = new MutationObserver(function () { const __wm = document.querySelector(`.${key}`) const cs = __wm ? window.getComputedStyle(__wm) : {} - if ((__wm && (__wm.getAttribute('style') !== styleStr || cs.visibility === 'hidden' || cs.display === 'none' || cs.opacity === 0)) || !__wm) { + if ( + (__wm && + (__wm.getAttribute('style') !== styleStr || + cs.visibility === 'hidden' || + cs.display === 'none' || + cs.opacity === 0)) || + !__wm + ) { mo.disconnect() mo = null WaterMarker(container, JSON.parse(JSON.stringify(options))) @@ -150,7 +154,7 @@ const toImage = (canvas, key, container, options) => { } const WaterMarker = (container, args) => { const _container = container || document.body - const {density} = args + const { density } = args let _markSize = { width: 420, height: 270 @@ -162,17 +166,7 @@ const WaterMarker = (container, args) => { } } const options = Object.assign({}, defaultOptions, _markSize, args) - const { - id, - width, - height, - textAlign, - textBaseline, - font, - color, - logo, - rotate - } = options + const { id, width, height, textAlign, textBaseline, font, color, logo, rotate } = options let key = 'hi-' + Math.floor(Math.random() * (9999 - 1000)) + 1000 + '__wm' if (id && id.trim().length > 0 && !document.querySelector(id + '__wm')) { key = id + '__wm' @@ -183,10 +177,12 @@ const WaterMarker = (container, args) => { canvas.setAttribute('height', height + 'px') ctx.textAlign = textAlign ctx.textBaseline = textBaseline - ctx.font = `normal normal lighter ${Number(font * 2)}px -apple-system,BlinkMacSystemFont,"Helvetica Neue",Helvetica,Arial,"Microsoft Yahei","Hiragino Sans GB","Heiti SC","WenQuanYi Micro Hei",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"` + ctx.font = `normal normal lighter ${Number( + font * 2 + )}px -apple-system,BlinkMacSystemFont,"Helvetica Neue",Helvetica,Arial,"Microsoft Yahei","Hiragino Sans GB","Heiti SC","WenQuanYi Micro Hei",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"` ctx.fillStyle = color ctx.translate(width / 2, height / 2) - ctx.rotate(Math.PI / 180 * rotate) + ctx.rotate((Math.PI / 180) * rotate) ctx.translate(-width / 2, -height / 2) drawText(ctx, options) diff --git a/docs/demo/alert/section-autoClose.jsx b/docs/demo/alert/section-autoClose.jsx index ba6a1bb38..13fbffe73 100755 --- a/docs/demo/alert/section-autoClose.jsx +++ b/docs/demo/alert/section-autoClose.jsx @@ -9,11 +9,11 @@ class Demo extends React.Component { render () { return ( <div> - <Alert type="info" title="信息提示的文案" onClose={()=>{console.log('alert关闭回调')}} /> + <Alert type="primary" title="信息提示的文案" onClose={()=>{console.log('alert关闭回调')}} /> <br /> <Alert type="success" title="成功提示的文案" onClose={()=>{console.log('alert关闭回调')}} /> <br /> - <Alert type="error" title="错误提示的文案" onClose={()=>{console.log('alert关闭回调')}} /> + <Alert type="danger" title="错误提示的文案" onClose={()=>{console.log('alert关闭回调')}} /> <br /> <Alert type="warning" title="警示提示的文案" onClose={()=>{console.log('alert关闭回调')}} /> </div> diff --git a/docs/demo/alert/section-base.jsx b/docs/demo/alert/section-base.jsx index 56a2c2eaf..6b7dc9a71 100755 --- a/docs/demo/alert/section-base.jsx +++ b/docs/demo/alert/section-base.jsx @@ -9,11 +9,11 @@ class Demo extends React.Component { render () { return ( <div> - <Alert type="info" title="信息提示的文案" onClose={()=>{console.log('alert关闭回调')}} /> + <Alert type="primary" title="信息提示的文案" onClose={()=>{console.log('alert关闭回调')}} /> <br /> <Alert type="success" title="成功提示的文案" onClose={()=>{console.log('alert关闭回调')}} /> <br /> - <Alert type="error" title="错误提示的文案" onClose={()=>{console.log('alert关闭回调')}} /> + <Alert type="danger" title="错误提示的文案" onClose={()=>{console.log('alert关闭回调')}} /> <br /> <Alert type="warning" title="警示提示的文案" onClose={()=>{console.log('alert关闭回调')}} /> </div> diff --git a/docs/demo/alert/section-closeable.jsx b/docs/demo/alert/section-closeable.jsx index 3b298a31c..f1214fe98 100755 --- a/docs/demo/alert/section-closeable.jsx +++ b/docs/demo/alert/section-closeable.jsx @@ -10,11 +10,11 @@ class Demo extends React.Component { render () { return ( <div> - <Alert type="info" title="信息提示的文案" closeable={false} /> + <Alert type="primary" title="信息提示的文案" closeable={false} /> <br /> <Alert type="success" title="成功提示的文案" closeable={false} /> <br /> - <Alert type="error" title="错误提示的文案" closeable={false} /> + <Alert type="danger" title="错误提示的文案" closeable={false} /> <br /> <Alert type="warning" title="警示提示的文案" closeable={false} /> </div> diff --git a/docs/demo/alert/section-title.jsx b/docs/demo/alert/section-title.jsx index 36bba3633..1a00b39db 100755 --- a/docs/demo/alert/section-title.jsx +++ b/docs/demo/alert/section-title.jsx @@ -9,11 +9,11 @@ class Demo extends React.Component { render () { return ( <div> - <Alert type="info" title="信息提示的文案" content="文字说明文字说明文字说明文字说明文字说明文字说明" onClose={()=>{console.log('alert关闭回调')}} /> + <Alert type="primary" title="信息提示的文案" content="文字说明文字说明文字说明文字说明文字说明文字说明" onClose={()=>{console.log('alert关闭回调')}} /> <br /> <Alert type="success" title="成功提示的文案" content="文字说明文字说明文字说明文字说明文字说明文字说明" onClose={()=>{console.log('alert关闭回调')}} /> <br /> - <Alert type="error" title="错误提示的文案" content="文字说明文字说明文字说明文字说明文字说明文字说明" onClose={()=>{console.log('alert关闭回调')}} /> + <Alert type="danger" title="错误提示的文案" content="文字说明文字说明文字说明文字说明文字说明文字说明" onClose={()=>{console.log('alert关闭回调')}} /> <br /> <Alert type="warning" title="警示提示的文案" content="文字说明文字说明文字说明文字说明文字说明文字说明" onClose={()=>{console.log('alert关闭回调')}} /> </div> diff --git a/docs/demo/breadcrumb/section-base.jsx b/docs/demo/breadcrumb/section-base.jsx index 42bec7816..bb1a54762 100644 --- a/docs/demo/breadcrumb/section-base.jsx +++ b/docs/demo/breadcrumb/section-base.jsx @@ -19,11 +19,15 @@ class Demo extends React.Component { }] return ( <div> - <Breadcrumb data={data}/> + <Breadcrumb data={data} onClick={(path)=>{ + console.log('go path: ',path) + }}/> </div> ) } }` -const DemoBase = () => <DocViewer code={code} scope={{ Breadcrumb }} prefix={prefix} desc={desc} /> +const DemoBase = () => ( + <DocViewer code={code} scope={{ Breadcrumb }} prefix={prefix} desc={desc} /> +) export default DemoBase diff --git a/docs/demo/breadcrumb/section-dropdown.jsx b/docs/demo/breadcrumb/section-dropdown.jsx new file mode 100644 index 000000000..bf38235c2 --- /dev/null +++ b/docs/demo/breadcrumb/section-dropdown.jsx @@ -0,0 +1,63 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import Breadcrumb from '../../../components/breadcrumb' +import Dropdown from '../../../components/dropdown' +const prefix = 'breadcrumd-dropdown' +const desc = '面包屑和下拉菜单结合' +const code = `import React from 'react' +import Breadcrumb from '@hi-ui/hiui/es/breadcrumb'\n +class Demo extends React.Component { + constructor(props){ + super(props) + this.state = { + list:[ + { + id: 0, + title: '小米商城', + href:'https://www.mi.com/index.html' + }, { + id: 1, + title: '小米社区', + href:'https://www.mi.com/index.html' + } + ] + } + } + render () { + const {list} = this.state + const contentDrop = ( + <Dropdown data={list} width={100} title={<span style={{fontSize:'12px',color:"#666"}}>分类</span>} onClick={(data)=>{ + console.log('data',data) + }} /> + ) + const data = [{ + content: '首页', + path: '/home' + }, { + content: '列表', + path: '/list' + }, { + content: contentDrop, + },{ + content: '手机详情', + path: '/phone' + }] + return ( + <div> + <Breadcrumb data={data} onClick={(path)=>{ + console.log('go path: ',path) + }}/> + </div> + ) + } +}` + +const DemoBase = () => ( + <DocViewer + code={code} + scope={{ Breadcrumb, Dropdown }} + prefix={prefix} + desc={desc} + /> +) +export default DemoBase diff --git a/docs/demo/breadcrumb/section-icon.jsx b/docs/demo/breadcrumb/section-icon.jsx index bea6eba06..e442ed992 100644 --- a/docs/demo/breadcrumb/section-icon.jsx +++ b/docs/demo/breadcrumb/section-icon.jsx @@ -13,7 +13,7 @@ class Demo extends React.Component { icon: 'document', path: '/product' }, { - icon: 'component', + icon: 'relation', content: '手机', path: '/phone' }, { diff --git a/docs/demo/card/section-button.jsx b/docs/demo/card/section-button.jsx index e3329bdf3..8432e1391 100644 --- a/docs/demo/card/section-button.jsx +++ b/docs/demo/card/section-button.jsx @@ -13,7 +13,7 @@ class Demo extends React.Component { <Card hoverable size='default' - extra={[<Icon name='edit' key={1}/>, <Icon name='delete' key={2}/>]} + extra={<span style={{color:'#4387f4'}}><Icon name='edit' key={1}/><Icon name='delete' key={2}/></span>} title='这里是标题这里是标题这里是标题' > <p>包含额外扩展按钮</p> @@ -22,7 +22,5 @@ class Demo extends React.Component { ) } }` -const DemoButton = () => ( - <DocViewer desc={desc} code={code} scope={{ Card, Icon }} prefix={prefix} /> -) +const DemoButton = () => <DocViewer desc={desc} code={code} scope={{ Card, Icon }} prefix={prefix} /> export default DemoButton diff --git a/docs/demo/card/section-simple.jsx b/docs/demo/card/section-simple.jsx index 713bb9bd5..e17214112 100644 --- a/docs/demo/card/section-simple.jsx +++ b/docs/demo/card/section-simple.jsx @@ -29,6 +29,7 @@ class Demo extends React.Component { <Card hoverable type='simple' + size='large' > 简易卡片 </Card> diff --git a/docs/demo/carousel/section-base.jsx b/docs/demo/carousel/section-base.jsx index 2f99bb6fe..42290906f 100644 --- a/docs/demo/carousel/section-base.jsx +++ b/docs/demo/carousel/section-base.jsx @@ -19,13 +19,7 @@ class Demo extends React.Component { > { data.map((item,index) => { - return <div - style={{height: 300, textAlign: 'center', lineHeight: '300px', background: '#428ef5', color: '#fff'}} - key={index} - onClick={()=>{ - console.log(index) - }} - >{item}</div> + return <div style={{height: 300, textAlign: 'center', lineHeight: '300px', background: '#428ef5', color: '#fff'}} key={index}>{item}</div> }) } </Carousel> diff --git a/docs/demo/cascader/section-advanced.jsx b/docs/demo/cascader/section-advanced.jsx index d162f0c7b..6ff8f52db 100644 --- a/docs/demo/cascader/section-advanced.jsx +++ b/docs/demo/cascader/section-advanced.jsx @@ -3,7 +3,7 @@ import DocViewer from '../../../libs/doc-viewer' import Cascader from '../../../components/cascader' const prefix = 'section-advanced' const desc = '展示从多个收起的备选项中选出的一个选项' -const rightOptions = ['自定义字段名', '自定义显示', '搜索', '动态加载选项'] +const rightOptions = ['自定义字段名', '自定义显示', '动态加载选项', 'hover触发次级菜单', '选中任意层级'] const code = [ { code: `import React from 'react' @@ -160,193 +160,6 @@ class Demo extends React.Component { }, { code: `import React from 'react' import Cascader from '@hi-ui/hiui/es/cascader'\n -class Demo extends React.Component { - constructor () { - super() - this.state = { - options: [ - { - "id":1, - - "children":[ - { - "id":195, - - "children":[ - { - "id":619, - - "children":[ - { - "id":621, - - "children":[ - { - "id":899, - - "children":null, - "content":"testaaab[899]" - }, - { - "id":908, - - "children":null, - "content":"F11S[908]" - } - ], - "content":"POCO手机1[621]" - } - ], - "content":"POCO手机[619]" - }, - { - "id":577, - - "children":[ - { - "id":579, - - "children":null, - "content":"黑鲨手机1[579]" - }, - { - "id":656, - - "children":null, - "content":"黑鲨手机 Helo[656]" - } - ], - "content":"黑鲨手机[577]" - }, - { - "id":196, - - "children":[ - { - "id":663, - - "children":null, - "content":"小米Play[663]" - }, - - { - "id":207, - - "children":[ - { - "id":620, - - "children":null, - "content":"小米Max3[620]" - } - ], - "content":"小米Max[207]" - } - ], - "content":"小米系列[196]" - }, - - { - "id":925, - - "children":[ - { - "id":926, - - "children":null, - "content":"大象手机A[926]" - }, - { - "id":927, - - "children":null, - "content":"大象手机B[927]" - } - ], - "content":"大象手机[925]" - } - ], - "content":"手机[195]" - }, - { - "id":674, - - "children":[ - { - "id":830, - - "children":[ - { - "id":831, - - "children":null, - "content":"燃气灶[831]" - } - ], - "content":"厨卫大电[830]" - }, - - { - "id":930, - - "children":null, - "content":"医疗器械[930]" - }, - - - { - "id":678, - - "children":[ - { - "id":679, - - "children":null, - "content":"礼品[679]" - } - ], - "content":"钟表/珠宝首饰/礼品[678]" - }, - { - "id":845, - - "children":[ - { - "id":677, - - "children":null, - "content":"电视配件[677]" - } - ], - "content":"手机电视配件[845]" - } - ], - "content":"生态链[674]" - } - ], - "content":"商品[1]" - } -] - } - } - render(){ - return( - <Cascader - onChange={(value)=>{ - console.log('on change', value) - }} - noFoundTip="未搜索到相关内容" - searchable={true} - data={this.state.options} - style={{ width: 240 }} - /> - ) - } -}`, - opt: ['搜索'] - }, { - code: `import React from 'react' -import Cascader from '@hi-ui/hiui/es/cascader'\n class Demo extends React.Component { constructor () { super() @@ -481,6 +294,154 @@ class Demo extends React.Component { } }`, opt: ['动态加载选项'] + }, { + code: `import React from 'react' +import Cascader from '@hi-ui/hiui/es/cascader'\n +class Demo extends React.Component { + constructor () { + super() + this.state = { + options: [ + { + id: '手机', + content: '手机', + children: [ + { + id: '小米', + content: '小米', + children: [ + { + id: '小米3', + content: '小米3' + }, + { + id: '小米4', + content: '小米4' + }, + ] + }, + { + id: '红米', + content: '红米', + children: [ + { + id: '红米3', + content: '红米3' + }, + { + id: '红米4', + content: '红米4' + } + ] + } + ] + }, + { + id: '电视', + content: '电视', + children: [ + { + id: '小米电视4A', + content: '小米电视4A' + }, + { + id: '小米电视4C', + content: '小米电视4C' + } + ] + } + ] + } + } + render(){ + return( + <Cascader + onChange={(id)=>{ + console.log('on change', id) + }} + expandTrigger='hover' + data={this.state.options} + style={{ width: 240 }} + /> + ) + } +}`, + opt: ['hover触发次级菜单'] + }, + { + code: `import React from 'react' +import Cascader from '@hi-ui/hiui/es/cascader'\n +class Demo extends React.Component { + constructor () { + super() + this.state = { + options: [ + { + id: '手机', + content: '手机', + children: [ + { + id: '小米', + content: '小米', + children: [ + { + id: '小米3', + content: '小米3' + }, + { + id: '小米4', + content: '小米4' + }, + ] + }, + { + id: '红米', + content: '红米', + children: [ + { + id: '红米3', + content: '红米3' + }, + { + id: '红米4', + content: '红米4' + } + ] + } + ] + }, + { + id: '电视', + content: '电视', + children: [ + { + id: '小米电视4A', + content: '小米电视4A' + }, + { + id: '小米电视4C', + content: '小米电视4C' + } + ] + } + ] + } + } + render(){ + return( + <Cascader + onChange={(id)=>{ + console.log('on change', id) + }} + changeOnSelect + expandTrigger='hover' + data={this.state.options} + style={{ width: 240 }} + /> + ) + } +}`, + opt: ['选中任意层级'] } ] diff --git a/docs/demo/cascader/section-basic.jsx b/docs/demo/cascader/section-basic.jsx index 8e5d6bfc3..1c9fef2ca 100644 --- a/docs/demo/cascader/section-basic.jsx +++ b/docs/demo/cascader/section-basic.jsx @@ -12,6 +12,7 @@ class Demo extends React.Component { constructor () { super() this.state = { + value:['手机','小米'], options: [ { id: '手机', @@ -65,11 +66,17 @@ class Demo extends React.Component { } } render(){ + const {value} = this.state return( <Cascader onChange={(id)=>{ - console.log('on change', id) + console.log('change') + this.setState({ + value:id + }) }} + + value={value} data={this.state.options} style={{ width: 240 }} /> @@ -77,7 +84,8 @@ class Demo extends React.Component { } }`, opt: ['基础'] - }, { + }, + { code: `import React from 'react' import Cascader from '@hi-ui/hiui/es/cascader'\n class Demo extends React.Component { @@ -142,7 +150,7 @@ class Demo extends React.Component { onChange={(id)=>{ console.log('on change', id) }} - value={['电视','小米电视4C']} + defaultValue={['电视','小米电视4C']} data={this.state.options} style={{ width: 240 }} /> @@ -150,7 +158,8 @@ class Demo extends React.Component { } }`, opt: ['带默认值'] - }, { + }, + { code: `import React from 'react' import Cascader from '@hi-ui/hiui/es/cascader'\n class Demo extends React.Component { @@ -223,7 +232,8 @@ class Demo extends React.Component { } }`, opt: ['可清空'] - }, { + }, + { code: `import React from 'react' import Cascader from '@hi-ui/hiui/es/cascader'\n class Demo extends React.Component { diff --git a/docs/demo/cascader/section-search.jsx b/docs/demo/cascader/section-search.jsx new file mode 100644 index 000000000..030948c0a --- /dev/null +++ b/docs/demo/cascader/section-search.jsx @@ -0,0 +1,201 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import Cascader from '../../../components/cascader' +const prefix = 'section-search' +const desc = '选项数量较大,不熟悉数据的结构关系情况下,用搜索关键词的方式快速定位' + +const code = `import React from 'react' +import Cascader from '@hi-ui/hiui/es/cascader'\n +class Demo extends React.Component { + constructor () { + super() + this.state = { + options: [ + { + "id":1, + + "children":[ + { + "id":195, + + "children":[ + { + "id":619, + + "children":[ + { + "id":621, + + "children":[ + { + "id":899, + + "children":null, + "content":"testaaab[899]" + }, + { + "id":908, + + "children":null, + "content":"F11S[908]" + } + ], + "content":"POCO手机1[621]" + } + ], + "content":"POCO手机[619]" + }, + { + "id":577, + + "children":[ + { + "id":579, + + "children":null, + "content":"黑鲨手机1[579]" + }, + { + "id":656, + + "children":null, + "content":"黑鲨手机 Helo[656]" + } + ], + "content":"黑鲨手机[577]" + }, + { + "id":196, + + "children":[ + { + "id":663, + + "children":null, + "content":"小米Play[663]" + }, + + { + "id":207, + + "children":[ + { + "id":620, + + "children":null, + "content":"小米Max3[620]" + } + ], + "content":"小米Max[207]" + } + ], + "content":"小米系列[196]" + }, + + { + "id":925, + + "children":[ + { + "id":926, + + "children":null, + "content":"大象手机A[926]" + }, + { + "id":927, + + "children":null, + "content":"大象手机B[927]" + } + ], + "content":"大象手机[925]" + } + ], + "content":"手机[195]" + }, + { + "id":674, + + "children":[ + { + "id":830, + + "children":[ + { + "id":831, + + "children":null, + "content":"燃气灶[831]" + } + ], + "content":"厨卫大电[830]" + }, + + { + "id":930, + + "children":null, + "content":"医疗器械[930]" + }, + + + { + "id":678, + + "children":[ + { + "id":679, + + "children":null, + "content":"礼品[679]" + } + ], + "content":"钟表/珠宝首饰/礼品[678]" + }, + { + "id":845, + + "children":[ + { + "id":677, + + "children":null, + "content":"电视配件[677]" + } + ], + "content":"手机电视配件[845]" + } + ], + "content":"生态链[674]" + } + ], + "content":"商品[1]" + } +] + } + } + render(){ + return( + <Cascader + onChange={(value)=>{ + console.log('on change', value) + }} + noFoundTip="未搜索到相关内容" + searchable={true} + data={this.state.options} + style={{ width: 240 }} + /> + ) + } +}` + +const DemoBasic = () => ( + <DocViewer + code={code} + scope={{ Cascader }} + prefix={prefix} + desc={desc} + /> +) +export default DemoBasic diff --git a/docs/demo/charts/section-base.jsx b/docs/demo/charts/section-base.jsx new file mode 100755 index 000000000..c097a6d6a --- /dev/null +++ b/docs/demo/charts/section-base.jsx @@ -0,0 +1,98 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import Charts from '../../../components/charts' +const prefix = 'charts-base' +const desc = '' +const code = `import React from 'react' +import Charts from '@hi-ui/hiui/es/charts'\n +class Demo extends React.Component { + constructor() { + super() + this.options = { + tooltip: { + trigger: 'axis', + axisPointer: { // 坐标轴指示器,坐标轴触发有效 + type: 'shadow' // 默认为直线,可选为:'line' | 'shadow' + } + }, + legend: { + data: ['直接访问', '邮件营销', '联盟广告', '视频广告', '搜索引擎'] + }, + grid: { + left: '3%', + right: '4%', + bottom: '3%', + containLabel: true + }, + xAxis: { + type: 'value' + }, + yAxis: { + type: 'category', + data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] + }, + series: [ + { + name: '直接访问', + type: 'bar', + stack: '总量', + label: { + show: true, + position: 'insideRight' + }, + data: [320, 302, 301, 334, 390, 330, 320] + }, + { + name: '邮件营销', + type: 'bar', + stack: '总量', + label: { + show: true, + position: 'insideRight' + }, + data: [120, 132, 101, 134, 90, 230, 210] + }, + { + name: '联盟广告', + type: 'bar', + stack: '总量', + label: { + show: true, + position: 'insideRight' + }, + data: [220, 182, 191, 234, 290, 330, 310] + }, + { + name: '视频广告', + type: 'bar', + stack: '总量', + label: { + show: true, + position: 'insideRight' + }, + data: [150, 212, 201, 154, 190, 330, 410] + }, + { + name: '搜索引擎', + type: 'bar', + stack: '总量', + label: { + show: true, + position: 'insideRight' + }, + data: [820, 832, 901, 934, 1290, 1330, 1320] + } + ] + } + } + render () { + return ( + <div> + <Charts option={this.options}/> + </div> + ) + } +}` + +const DemoBase = () => <DocViewer desc={desc} code={code} scope={{ Charts }} prefix={prefix} /> +export default DemoBase diff --git a/docs/demo/charts/section-base2.jsx b/docs/demo/charts/section-base2.jsx new file mode 100755 index 000000000..7fcd46bb5 --- /dev/null +++ b/docs/demo/charts/section-base2.jsx @@ -0,0 +1,106 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import Charts from '../../../components/charts' +const prefix = 'charts-base2' +const desc = '' +const code = `import React from 'react' +import Charts from '@hi-ui/hiui/es/charts'\n +class Demo extends React.Component { + constructor() { + super() + this.options = option = { + title: { + text: '堆叠区域图' + }, + tooltip: { + trigger: 'axis', + axisPointer: { + type: 'cross', + label: { + backgroundColor: '#6a7985' + } + } + }, + legend: { + data: ['邮件营销', '联盟广告', '视频广告', '直接访问', '搜索引擎'] + }, + toolbox: { + feature: { + saveAsImage: {} + } + }, + grid: { + left: '3%', + right: '4%', + bottom: '3%', + containLabel: true + }, + xAxis: [ + { + type: 'category', + boundaryGap: false, + data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] + } + ], + yAxis: [ + { + type: 'value' + } + ], + series: [ + { + name: '邮件营销', + type: 'line', + stack: '总量', + areaStyle: {}, + data: [120, 132, 101, 134, 90, 230, 210] + }, + { + name: '联盟广告', + type: 'line', + stack: '总量', + areaStyle: {}, + data: [220, 182, 191, 234, 290, 330, 310] + }, + { + name: '视频广告', + type: 'line', + stack: '总量', + areaStyle: {}, + data: [150, 232, 201, 154, 190, 330, 410] + }, + { + name: '直接访问', + type: 'line', + stack: '总量', + areaStyle: {}, + data: [320, 332, 301, 334, 390, 330, 320] + }, + { + name: '搜索引擎', + type: 'line', + stack: '总量', + label: { + normal: { + show: true, + position: 'top' + } + }, + areaStyle: {}, + data: [820, 932, 901, 934, 1290, 1330, 1320] + } + ] + } + + } + render () { + return ( + <div> + <Charts option={this.options}/> + </div> + ) + } +}` + +const DemoBase = () => <DocViewer desc={desc} code={code} scope={{ Charts }} prefix={prefix} /> +export default DemoBase diff --git a/docs/demo/charts/section-base3.jsx b/docs/demo/charts/section-base3.jsx new file mode 100755 index 000000000..64291d5bb --- /dev/null +++ b/docs/demo/charts/section-base3.jsx @@ -0,0 +1,62 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import Charts from '../../../components/charts' +const prefix = 'charts-base2' +const desc = '' +const code = `import React from 'react' +import Charts from '@hi-ui/hiui/es/charts'\n +class Demo extends React.Component { + constructor() { + super() + this.options = { + title: { + text: '某站点用户访问来源', + subtext: '纯属虚构', + left: 'center' + }, + tooltip: { + trigger: 'item', + formatter: '{a} <br/>{b} : {c} ({d}%)' + }, + legend: { + orient: 'vertical', + left: 'left', + data: ['直接访问', '邮件营销', '联盟广告', '视频广告', '搜索引擎'] + }, + series: [ + { + name: '访问来源', + type: 'pie', + radius: '55%', + center: ['50%', '60%'], + data: [ + {value: 335, name: '直接访问'}, + {value: 310, name: '邮件营销'}, + {value: 234, name: '联盟广告'}, + {value: 135, name: '视频广告'}, + {value: 1548, name: '搜索引擎'} + ], + emphasis: { + itemStyle: { + shadowBlur: 10, + shadowOffsetX: 0, + shadowColor: 'rgba(0, 0, 0, 0.5)' + } + } + } + ] + } + + + } + render () { + return ( + <div> + <Charts option={this.options}/> + </div> + ) + } +}` + +const DemoBase = () => <DocViewer desc={desc} code={code} scope={{ Charts }} prefix={prefix} /> +export default DemoBase diff --git a/docs/demo/checkbox/section-row.jsx b/docs/demo/checkbox/section-row.jsx new file mode 100644 index 000000000..1923dec8e --- /dev/null +++ b/docs/demo/checkbox/section-row.jsx @@ -0,0 +1,87 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import Checkbox from '../../../components/checkbox' +import Grid from '../../../components/grid' +const prefix = 'section-row' +const desc = 'Checkbox 与 Grid 组件一起使用,可以实现灵活的布局。' +const code = `import React from 'react' +import Checkbox from '@hi-ui/hiui/es/checkbox'\n +class Demo extends React.Component { + constructor () { + super() + this.state = { + list: [{ + content: '手机', + id: 'Phone' + },{ + content: '电脑', + id: 'Computer' + },{ + content: '智能', + id: 'Intelli' + },{ + content: '出行', + id: 'Transfer', + disabled: true + }], + value: ['Phone'] + } + } + render() { + const Row = Grid.Row + const Col = Grid.Col + return ( + <div> + <Row> + <Col span={8}> + <Checkbox onChange={(e)=>{ + console.log('checked',e.target.checked) + }}> + 手机 + </Checkbox> + </Col> + <Col span={8}> + <Checkbox onChange={(e)=>{ + console.log('checked',e.target.checked) + }}> + 电脑 + </Checkbox> + </Col> + <Col span={8}> + <Checkbox onChange={(e)=>{ + console.log('checked',e.target.checked) + }}> + 智能 + </Checkbox> + </Col> + </Row> + <Row> + <Col span={8}> + <Checkbox onChange={(e)=>{ + console.log('checked',e.target.checked) + }}> + 出行 + </Checkbox> + </Col> + <Col span={8}> + <Checkbox onChange={(e)=>{ + console.log('checked',e.target.checked) + }}> + 生态 + </Checkbox> + </Col> + </Row> + </div> + ) + } +}` + +const DemoBasic = () => ( + <DocViewer + code={code} + scope={{ Checkbox, Grid }} + prefix={prefix} + desc={desc} + /> +) +export default DemoBasic diff --git a/docs/demo/code-editor/code-editor/index.js b/docs/demo/code-editor/code-editor/index.js new file mode 100644 index 000000000..bdecc2a2b --- /dev/null +++ b/docs/demo/code-editor/code-editor/index.js @@ -0,0 +1,20 @@ +import React from 'react' +import classNames from 'classnames' + +import { UnControlled } from 'react-codemirror2' +import CodeMirror from 'codemirror' +import 'codemirror/lib/codemirror.css' +import './style/index.js' +const CodeEditor = ({ value, className, ...props }) => { + return ( + <UnControlled + value={value} + className={classNames('hi-codeEditor', { + className + })} + {...props} + /> + ) +} +export default CodeEditor +export { CodeMirror } diff --git a/docs/demo/code-editor/code-editor/style/index.js b/docs/demo/code-editor/code-editor/style/index.js new file mode 100644 index 000000000..67206756d --- /dev/null +++ b/docs/demo/code-editor/code-editor/style/index.js @@ -0,0 +1,4 @@ +import 'react-quill/dist/quill.snow.css' +import 'react-quill/dist/quill.bubble.css' +import 'react-quill/dist/quill.core.css' +import './index.scss' diff --git a/docs/demo/code-editor/code-editor/style/index.scss b/docs/demo/code-editor/code-editor/style/index.scss new file mode 100644 index 000000000..ce5974084 --- /dev/null +++ b/docs/demo/code-editor/code-editor/style/index.scss @@ -0,0 +1,4 @@ +.CodeMirror pre.CodeMirror-line, +.CodeMirror pre.CodeMirror-line-like { + padding: 0 4px !important; +} diff --git a/docs/demo/code-editor/diff_match_patch.js b/docs/demo/code-editor/diff_match_patch.js new file mode 100644 index 000000000..c41b51327 --- /dev/null +++ b/docs/demo/code-editor/diff_match_patch.js @@ -0,0 +1,49 @@ +(function(){function diff_match_patch(){this.Diff_Timeout=1;this.Diff_EditCost=4;this.Match_Threshold=0.5;this.Match_Distance=1E3;this.Patch_DeleteThreshold=0.5;this.Patch_Margin=4;this.Match_MaxBits=32} +diff_match_patch.prototype.diff_main=function(a,b,c,d){"undefined"==typeof d&&(d=0>=this.Diff_Timeout?Number.MAX_VALUE:(new Date).getTime()+1E3*this.Diff_Timeout);if(null==a||null==b)throw Error("Null input. (diff_main)");if(a==b)return a?[[0,a]]:[];"undefined"==typeof c&&(c=!0);var e=c,f=this.diff_commonPrefix(a,b);c=a.substring(0,f);a=a.substring(f);b=b.substring(f);var f=this.diff_commonSuffix(a,b),g=a.substring(a.length-f);a=a.substring(0,a.length-f);b=b.substring(0,b.length-f);a=this.diff_compute_(a, +b,e,d);c&&a.unshift([0,c]);g&&a.push([0,g]);this.diff_cleanupMerge(a);return a}; +diff_match_patch.prototype.diff_compute_=function(a,b,c,d){if(!a)return[[1,b]];if(!b)return[[-1,a]];var e=a.length>b.length?a:b,f=a.length>b.length?b:a,g=e.indexOf(f);return-1!=g?(c=[[1,e.substring(0,g)],[0,f],[1,e.substring(g+f.length)]],a.length>b.length&&(c[0][0]=c[2][0]=-1),c):1==f.length?[[-1,a],[1,b]]:(e=this.diff_halfMatch_(a,b))?(f=e[0],a=e[1],g=e[2],b=e[3],e=e[4],f=this.diff_main(f,g,c,d),c=this.diff_main(a,b,c,d),f.concat([[0,e]],c)):c&&100<a.length&&100<b.length?this.diff_lineMode_(a,b, +d):this.diff_bisect_(a,b,d)}; +diff_match_patch.prototype.diff_lineMode_=function(a,b,c){var d=this.diff_linesToChars_(a,b);a=d.chars1;b=d.chars2;d=d.lineArray;a=this.diff_main(a,b,!1,c);this.diff_charsToLines_(a,d);this.diff_cleanupSemantic(a);a.push([0,""]);for(var e=d=b=0,f="",g="";b<a.length;){switch(a[b][0]){case 1:e++;g+=a[b][1];break;case -1:d++;f+=a[b][1];break;case 0:if(1<=d&&1<=e){a.splice(b-d-e,d+e);b=b-d-e;d=this.diff_main(f,g,!1,c);for(e=d.length-1;0<=e;e--)a.splice(b,0,d[e]);b+=d.length}d=e=0;g=f=""}b++}a.pop();return a}; +diff_match_patch.prototype.diff_bisect_=function(a,b,c){for(var d=a.length,e=b.length,f=Math.ceil((d+e)/2),g=f,h=2*f,j=Array(h),i=Array(h),k=0;k<h;k++)j[k]=-1,i[k]=-1;j[g+1]=0;i[g+1]=0;for(var k=d-e,q=0!=k%2,r=0,t=0,p=0,w=0,v=0;v<f&&!((new Date).getTime()>c);v++){for(var n=-v+r;n<=v-t;n+=2){var l=g+n,m;m=n==-v||n!=v&&j[l-1]<j[l+1]?j[l+1]:j[l-1]+1;for(var s=m-n;m<d&&s<e&&a.charAt(m)==b.charAt(s);)m++,s++;j[l]=m;if(m>d)t+=2;else if(s>e)r+=2;else if(q&&(l=g+k-n,0<=l&&l<h&&-1!=i[l])){var u=d-i[l];if(m>= +u)return this.diff_bisectSplit_(a,b,m,s,c)}}for(n=-v+p;n<=v-w;n+=2){l=g+n;u=n==-v||n!=v&&i[l-1]<i[l+1]?i[l+1]:i[l-1]+1;for(m=u-n;u<d&&m<e&&a.charAt(d-u-1)==b.charAt(e-m-1);)u++,m++;i[l]=u;if(u>d)w+=2;else if(m>e)p+=2;else if(!q&&(l=g+k-n,0<=l&&(l<h&&-1!=j[l])&&(m=j[l],s=g+m-l,u=d-u,m>=u)))return this.diff_bisectSplit_(a,b,m,s,c)}}return[[-1,a],[1,b]]}; +diff_match_patch.prototype.diff_bisectSplit_=function(a,b,c,d,e){var f=a.substring(0,c),g=b.substring(0,d);a=a.substring(c);b=b.substring(d);f=this.diff_main(f,g,!1,e);e=this.diff_main(a,b,!1,e);return f.concat(e)}; +diff_match_patch.prototype.diff_linesToChars_=function(a,b){function c(a){for(var b="",c=0,f=-1,g=d.length;f<a.length-1;){f=a.indexOf("\n",c);-1==f&&(f=a.length-1);var r=a.substring(c,f+1),c=f+1;(e.hasOwnProperty?e.hasOwnProperty(r):void 0!==e[r])?b+=String.fromCharCode(e[r]):(b+=String.fromCharCode(g),e[r]=g,d[g++]=r)}return b}var d=[],e={};d[0]="";var f=c(a),g=c(b);return{chars1:f,chars2:g,lineArray:d}}; +diff_match_patch.prototype.diff_charsToLines_=function(a,b){for(var c=0;c<a.length;c++){for(var d=a[c][1],e=[],f=0;f<d.length;f++)e[f]=b[d.charCodeAt(f)];a[c][1]=e.join("")}};diff_match_patch.prototype.diff_commonPrefix=function(a,b){if(!a||!b||a.charAt(0)!=b.charAt(0))return 0;for(var c=0,d=Math.min(a.length,b.length),e=d,f=0;c<e;)a.substring(f,e)==b.substring(f,e)?f=c=e:d=e,e=Math.floor((d-c)/2+c);return e}; +diff_match_patch.prototype.diff_commonSuffix=function(a,b){if(!a||!b||a.charAt(a.length-1)!=b.charAt(b.length-1))return 0;for(var c=0,d=Math.min(a.length,b.length),e=d,f=0;c<e;)a.substring(a.length-e,a.length-f)==b.substring(b.length-e,b.length-f)?f=c=e:d=e,e=Math.floor((d-c)/2+c);return e}; +diff_match_patch.prototype.diff_commonOverlap_=function(a,b){var c=a.length,d=b.length;if(0==c||0==d)return 0;c>d?a=a.substring(c-d):c<d&&(b=b.substring(0,c));c=Math.min(c,d);if(a==b)return c;for(var d=0,e=1;;){var f=a.substring(c-e),f=b.indexOf(f);if(-1==f)return d;e+=f;if(0==f||a.substring(c-e)==b.substring(0,e))d=e,e++}}; +diff_match_patch.prototype.diff_halfMatch_=function(a,b){function c(a,b,c){for(var d=a.substring(c,c+Math.floor(a.length/4)),e=-1,g="",h,j,n,l;-1!=(e=b.indexOf(d,e+1));){var m=f.diff_commonPrefix(a.substring(c),b.substring(e)),s=f.diff_commonSuffix(a.substring(0,c),b.substring(0,e));g.length<s+m&&(g=b.substring(e-s,e)+b.substring(e,e+m),h=a.substring(0,c-s),j=a.substring(c+m),n=b.substring(0,e-s),l=b.substring(e+m))}return 2*g.length>=a.length?[h,j,n,l,g]:null}if(0>=this.Diff_Timeout)return null; +var d=a.length>b.length?a:b,e=a.length>b.length?b:a;if(4>d.length||2*e.length<d.length)return null;var f=this,g=c(d,e,Math.ceil(d.length/4)),d=c(d,e,Math.ceil(d.length/2)),h;if(!g&&!d)return null;h=d?g?g[4].length>d[4].length?g:d:d:g;var j;a.length>b.length?(g=h[0],d=h[1],e=h[2],j=h[3]):(e=h[0],j=h[1],g=h[2],d=h[3]);h=h[4];return[g,d,e,j,h]}; +diff_match_patch.prototype.diff_cleanupSemantic=function(a){for(var b=!1,c=[],d=0,e=null,f=0,g=0,h=0,j=0,i=0;f<a.length;)0==a[f][0]?(c[d++]=f,g=j,h=i,i=j=0,e=a[f][1]):(1==a[f][0]?j+=a[f][1].length:i+=a[f][1].length,e&&(e.length<=Math.max(g,h)&&e.length<=Math.max(j,i))&&(a.splice(c[d-1],0,[-1,e]),a[c[d-1]+1][0]=1,d--,d--,f=0<d?c[d-1]:-1,i=j=h=g=0,e=null,b=!0)),f++;b&&this.diff_cleanupMerge(a);this.diff_cleanupSemanticLossless(a);for(f=1;f<a.length;){if(-1==a[f-1][0]&&1==a[f][0]){b=a[f-1][1];c=a[f][1]; +d=this.diff_commonOverlap_(b,c);e=this.diff_commonOverlap_(c,b);if(d>=e){if(d>=b.length/2||d>=c.length/2)a.splice(f,0,[0,c.substring(0,d)]),a[f-1][1]=b.substring(0,b.length-d),a[f+1][1]=c.substring(d),f++}else if(e>=b.length/2||e>=c.length/2)a.splice(f,0,[0,b.substring(0,e)]),a[f-1][0]=1,a[f-1][1]=c.substring(0,c.length-e),a[f+1][0]=-1,a[f+1][1]=b.substring(e),f++;f++}f++}}; +diff_match_patch.prototype.diff_cleanupSemanticLossless=function(a){function b(a,b){if(!a||!b)return 6;var c=a.charAt(a.length-1),d=b.charAt(0),e=c.match(diff_match_patch.nonAlphaNumericRegex_),f=d.match(diff_match_patch.nonAlphaNumericRegex_),g=e&&c.match(diff_match_patch.whitespaceRegex_),h=f&&d.match(diff_match_patch.whitespaceRegex_),c=g&&c.match(diff_match_patch.linebreakRegex_),d=h&&d.match(diff_match_patch.linebreakRegex_),i=c&&a.match(diff_match_patch.blanklineEndRegex_),j=d&&b.match(diff_match_patch.blanklineStartRegex_); +return i||j?5:c||d?4:e&&!g&&h?3:g||h?2:e||f?1:0}for(var c=1;c<a.length-1;){if(0==a[c-1][0]&&0==a[c+1][0]){var d=a[c-1][1],e=a[c][1],f=a[c+1][1],g=this.diff_commonSuffix(d,e);if(g)var h=e.substring(e.length-g),d=d.substring(0,d.length-g),e=h+e.substring(0,e.length-g),f=h+f;for(var g=d,h=e,j=f,i=b(d,e)+b(e,f);e.charAt(0)===f.charAt(0);){var d=d+e.charAt(0),e=e.substring(1)+f.charAt(0),f=f.substring(1),k=b(d,e)+b(e,f);k>=i&&(i=k,g=d,h=e,j=f)}a[c-1][1]!=g&&(g?a[c-1][1]=g:(a.splice(c-1,1),c--),a[c][1]= +h,j?a[c+1][1]=j:(a.splice(c+1,1),c--))}c++}};diff_match_patch.nonAlphaNumericRegex_=/[^a-zA-Z0-9]/;diff_match_patch.whitespaceRegex_=/\s/;diff_match_patch.linebreakRegex_=/[\r\n]/;diff_match_patch.blanklineEndRegex_=/\n\r?\n$/;diff_match_patch.blanklineStartRegex_=/^\r?\n\r?\n/; +diff_match_patch.prototype.diff_cleanupEfficiency=function(a){for(var b=!1,c=[],d=0,e=null,f=0,g=!1,h=!1,j=!1,i=!1;f<a.length;){if(0==a[f][0])a[f][1].length<this.Diff_EditCost&&(j||i)?(c[d++]=f,g=j,h=i,e=a[f][1]):(d=0,e=null),j=i=!1;else if(-1==a[f][0]?i=!0:j=!0,e&&(g&&h&&j&&i||e.length<this.Diff_EditCost/2&&3==g+h+j+i))a.splice(c[d-1],0,[-1,e]),a[c[d-1]+1][0]=1,d--,e=null,g&&h?(j=i=!0,d=0):(d--,f=0<d?c[d-1]:-1,j=i=!1),b=!0;f++}b&&this.diff_cleanupMerge(a)}; +diff_match_patch.prototype.diff_cleanupMerge=function(a){a.push([0,""]);for(var b=0,c=0,d=0,e="",f="",g;b<a.length;)switch(a[b][0]){case 1:d++;f+=a[b][1];b++;break;case -1:c++;e+=a[b][1];b++;break;case 0:1<c+d?(0!==c&&0!==d&&(g=this.diff_commonPrefix(f,e),0!==g&&(0<b-c-d&&0==a[b-c-d-1][0]?a[b-c-d-1][1]+=f.substring(0,g):(a.splice(0,0,[0,f.substring(0,g)]),b++),f=f.substring(g),e=e.substring(g)),g=this.diff_commonSuffix(f,e),0!==g&&(a[b][1]=f.substring(f.length-g)+a[b][1],f=f.substring(0,f.length- +g),e=e.substring(0,e.length-g))),0===c?a.splice(b-d,c+d,[1,f]):0===d?a.splice(b-c,c+d,[-1,e]):a.splice(b-c-d,c+d,[-1,e],[1,f]),b=b-c-d+(c?1:0)+(d?1:0)+1):0!==b&&0==a[b-1][0]?(a[b-1][1]+=a[b][1],a.splice(b,1)):b++,c=d=0,f=e=""}""===a[a.length-1][1]&&a.pop();c=!1;for(b=1;b<a.length-1;)0==a[b-1][0]&&0==a[b+1][0]&&(a[b][1].substring(a[b][1].length-a[b-1][1].length)==a[b-1][1]?(a[b][1]=a[b-1][1]+a[b][1].substring(0,a[b][1].length-a[b-1][1].length),a[b+1][1]=a[b-1][1]+a[b+1][1],a.splice(b-1,1),c=!0):a[b][1].substring(0, +a[b+1][1].length)==a[b+1][1]&&(a[b-1][1]+=a[b+1][1],a[b][1]=a[b][1].substring(a[b+1][1].length)+a[b+1][1],a.splice(b+1,1),c=!0)),b++;c&&this.diff_cleanupMerge(a)};diff_match_patch.prototype.diff_xIndex=function(a,b){var c=0,d=0,e=0,f=0,g;for(g=0;g<a.length;g++){1!==a[g][0]&&(c+=a[g][1].length);-1!==a[g][0]&&(d+=a[g][1].length);if(c>b)break;e=c;f=d}return a.length!=g&&-1===a[g][0]?f:f+(b-e)}; +diff_match_patch.prototype.diff_prettyHtml=function(a){for(var b=[],c=/&/g,d=/</g,e=/>/g,f=/\n/g,g=0;g<a.length;g++){var h=a[g][0],j=a[g][1],j=j.replace(c,"&").replace(d,"<").replace(e,">").replace(f,"¶<br>");switch(h){case 1:b[g]='<ins style="background:#e6ffe6;">'+j+"</ins>";break;case -1:b[g]='<del style="background:#ffe6e6;">'+j+"</del>";break;case 0:b[g]="<span>"+j+"</span>"}}return b.join("")}; +diff_match_patch.prototype.diff_text1=function(a){for(var b=[],c=0;c<a.length;c++)1!==a[c][0]&&(b[c]=a[c][1]);return b.join("")};diff_match_patch.prototype.diff_text2=function(a){for(var b=[],c=0;c<a.length;c++)-1!==a[c][0]&&(b[c]=a[c][1]);return b.join("")};diff_match_patch.prototype.diff_levenshtein=function(a){for(var b=0,c=0,d=0,e=0;e<a.length;e++){var f=a[e][0],g=a[e][1];switch(f){case 1:c+=g.length;break;case -1:d+=g.length;break;case 0:b+=Math.max(c,d),d=c=0}}return b+=Math.max(c,d)}; +diff_match_patch.prototype.diff_toDelta=function(a){for(var b=[],c=0;c<a.length;c++)switch(a[c][0]){case 1:b[c]="+"+encodeURI(a[c][1]);break;case -1:b[c]="-"+a[c][1].length;break;case 0:b[c]="="+a[c][1].length}return b.join("\t").replace(/%20/g," ")}; +diff_match_patch.prototype.diff_fromDelta=function(a,b){for(var c=[],d=0,e=0,f=b.split(/\t/g),g=0;g<f.length;g++){var h=f[g].substring(1);switch(f[g].charAt(0)){case "+":try{c[d++]=[1,decodeURI(h)]}catch(j){throw Error("Illegal escape in diff_fromDelta: "+h);}break;case "-":case "=":var i=parseInt(h,10);if(isNaN(i)||0>i)throw Error("Invalid number in diff_fromDelta: "+h);h=a.substring(e,e+=i);"="==f[g].charAt(0)?c[d++]=[0,h]:c[d++]=[-1,h];break;default:if(f[g])throw Error("Invalid diff operation in diff_fromDelta: "+ +f[g]);}}if(e!=a.length)throw Error("Delta length ("+e+") does not equal source text length ("+a.length+").");return c};diff_match_patch.prototype.match_main=function(a,b,c){if(null==a||null==b||null==c)throw Error("Null input. (match_main)");c=Math.max(0,Math.min(c,a.length));return a==b?0:a.length?a.substring(c,c+b.length)==b?c:this.match_bitap_(a,b,c):-1}; +diff_match_patch.prototype.match_bitap_=function(a,b,c){function d(a,d){var e=a/b.length,g=Math.abs(c-d);return!f.Match_Distance?g?1:e:e+g/f.Match_Distance}if(b.length>this.Match_MaxBits)throw Error("Pattern too long for this browser.");var e=this.match_alphabet_(b),f=this,g=this.Match_Threshold,h=a.indexOf(b,c);-1!=h&&(g=Math.min(d(0,h),g),h=a.lastIndexOf(b,c+b.length),-1!=h&&(g=Math.min(d(0,h),g)));for(var j=1<<b.length-1,h=-1,i,k,q=b.length+a.length,r,t=0;t<b.length;t++){i=0;for(k=q;i<k;)d(t,c+ +k)<=g?i=k:q=k,k=Math.floor((q-i)/2+i);q=k;i=Math.max(1,c-k+1);var p=Math.min(c+k,a.length)+b.length;k=Array(p+2);for(k[p+1]=(1<<t)-1;p>=i;p--){var w=e[a.charAt(p-1)];k[p]=0===t?(k[p+1]<<1|1)&w:(k[p+1]<<1|1)&w|((r[p+1]|r[p])<<1|1)|r[p+1];if(k[p]&j&&(w=d(t,p-1),w<=g))if(g=w,h=p-1,h>c)i=Math.max(1,2*c-h);else break}if(d(t+1,c)>g)break;r=k}return h}; +diff_match_patch.prototype.match_alphabet_=function(a){for(var b={},c=0;c<a.length;c++)b[a.charAt(c)]=0;for(c=0;c<a.length;c++)b[a.charAt(c)]|=1<<a.length-c-1;return b}; +diff_match_patch.prototype.patch_addContext_=function(a,b){if(0!=b.length){for(var c=b.substring(a.start2,a.start2+a.length1),d=0;b.indexOf(c)!=b.lastIndexOf(c)&&c.length<this.Match_MaxBits-this.Patch_Margin-this.Patch_Margin;)d+=this.Patch_Margin,c=b.substring(a.start2-d,a.start2+a.length1+d);d+=this.Patch_Margin;(c=b.substring(a.start2-d,a.start2))&&a.diffs.unshift([0,c]);(d=b.substring(a.start2+a.length1,a.start2+a.length1+d))&&a.diffs.push([0,d]);a.start1-=c.length;a.start2-=c.length;a.length1+= +c.length+d.length;a.length2+=c.length+d.length}}; +diff_match_patch.prototype.patch_make=function(a,b,c){var d;if("string"==typeof a&&"string"==typeof b&&"undefined"==typeof c)d=a,b=this.diff_main(d,b,!0),2<b.length&&(this.diff_cleanupSemantic(b),this.diff_cleanupEfficiency(b));else if(a&&"object"==typeof a&&"undefined"==typeof b&&"undefined"==typeof c)b=a,d=this.diff_text1(b);else if("string"==typeof a&&b&&"object"==typeof b&&"undefined"==typeof c)d=a;else if("string"==typeof a&&"string"==typeof b&&c&&"object"==typeof c)d=a,b=c;else throw Error("Unknown call format to patch_make."); +if(0===b.length)return[];c=[];a=new diff_match_patch.patch_obj;for(var e=0,f=0,g=0,h=d,j=0;j<b.length;j++){var i=b[j][0],k=b[j][1];!e&&0!==i&&(a.start1=f,a.start2=g);switch(i){case 1:a.diffs[e++]=b[j];a.length2+=k.length;d=d.substring(0,g)+k+d.substring(g);break;case -1:a.length1+=k.length;a.diffs[e++]=b[j];d=d.substring(0,g)+d.substring(g+k.length);break;case 0:k.length<=2*this.Patch_Margin&&e&&b.length!=j+1?(a.diffs[e++]=b[j],a.length1+=k.length,a.length2+=k.length):k.length>=2*this.Patch_Margin&& +e&&(this.patch_addContext_(a,h),c.push(a),a=new diff_match_patch.patch_obj,e=0,h=d,f=g)}1!==i&&(f+=k.length);-1!==i&&(g+=k.length)}e&&(this.patch_addContext_(a,h),c.push(a));return c};diff_match_patch.prototype.patch_deepCopy=function(a){for(var b=[],c=0;c<a.length;c++){var d=a[c],e=new diff_match_patch.patch_obj;e.diffs=[];for(var f=0;f<d.diffs.length;f++)e.diffs[f]=d.diffs[f].slice();e.start1=d.start1;e.start2=d.start2;e.length1=d.length1;e.length2=d.length2;b[c]=e}return b}; +diff_match_patch.prototype.patch_apply=function(a,b){if(0==a.length)return[b,[]];a=this.patch_deepCopy(a);var c=this.patch_addPadding(a);b=c+b+c;this.patch_splitMax(a);for(var d=0,e=[],f=0;f<a.length;f++){var g=a[f].start2+d,h=this.diff_text1(a[f].diffs),j,i=-1;if(h.length>this.Match_MaxBits){if(j=this.match_main(b,h.substring(0,this.Match_MaxBits),g),-1!=j&&(i=this.match_main(b,h.substring(h.length-this.Match_MaxBits),g+h.length-this.Match_MaxBits),-1==i||j>=i))j=-1}else j=this.match_main(b,h,g); +if(-1==j)e[f]=!1,d-=a[f].length2-a[f].length1;else if(e[f]=!0,d=j-g,g=-1==i?b.substring(j,j+h.length):b.substring(j,i+this.Match_MaxBits),h==g)b=b.substring(0,j)+this.diff_text2(a[f].diffs)+b.substring(j+h.length);else if(g=this.diff_main(h,g,!1),h.length>this.Match_MaxBits&&this.diff_levenshtein(g)/h.length>this.Patch_DeleteThreshold)e[f]=!1;else{this.diff_cleanupSemanticLossless(g);for(var h=0,k,i=0;i<a[f].diffs.length;i++){var q=a[f].diffs[i];0!==q[0]&&(k=this.diff_xIndex(g,h));1===q[0]?b=b.substring(0, +j+k)+q[1]+b.substring(j+k):-1===q[0]&&(b=b.substring(0,j+k)+b.substring(j+this.diff_xIndex(g,h+q[1].length)));-1!==q[0]&&(h+=q[1].length)}}}b=b.substring(c.length,b.length-c.length);return[b,e]}; +diff_match_patch.prototype.patch_addPadding=function(a){for(var b=this.Patch_Margin,c="",d=1;d<=b;d++)c+=String.fromCharCode(d);for(d=0;d<a.length;d++)a[d].start1+=b,a[d].start2+=b;var d=a[0],e=d.diffs;if(0==e.length||0!=e[0][0])e.unshift([0,c]),d.start1-=b,d.start2-=b,d.length1+=b,d.length2+=b;else if(b>e[0][1].length){var f=b-e[0][1].length;e[0][1]=c.substring(e[0][1].length)+e[0][1];d.start1-=f;d.start2-=f;d.length1+=f;d.length2+=f}d=a[a.length-1];e=d.diffs;0==e.length||0!=e[e.length-1][0]?(e.push([0, +c]),d.length1+=b,d.length2+=b):b>e[e.length-1][1].length&&(f=b-e[e.length-1][1].length,e[e.length-1][1]+=c.substring(0,f),d.length1+=f,d.length2+=f);return c}; +diff_match_patch.prototype.patch_splitMax=function(a){for(var b=this.Match_MaxBits,c=0;c<a.length;c++)if(!(a[c].length1<=b)){var d=a[c];a.splice(c--,1);for(var e=d.start1,f=d.start2,g="";0!==d.diffs.length;){var h=new diff_match_patch.patch_obj,j=!0;h.start1=e-g.length;h.start2=f-g.length;""!==g&&(h.length1=h.length2=g.length,h.diffs.push([0,g]));for(;0!==d.diffs.length&&h.length1<b-this.Patch_Margin;){var g=d.diffs[0][0],i=d.diffs[0][1];1===g?(h.length2+=i.length,f+=i.length,h.diffs.push(d.diffs.shift()), +j=!1):-1===g&&1==h.diffs.length&&0==h.diffs[0][0]&&i.length>2*b?(h.length1+=i.length,e+=i.length,j=!1,h.diffs.push([g,i]),d.diffs.shift()):(i=i.substring(0,b-h.length1-this.Patch_Margin),h.length1+=i.length,e+=i.length,0===g?(h.length2+=i.length,f+=i.length):j=!1,h.diffs.push([g,i]),i==d.diffs[0][1]?d.diffs.shift():d.diffs[0][1]=d.diffs[0][1].substring(i.length))}g=this.diff_text2(h.diffs);g=g.substring(g.length-this.Patch_Margin);i=this.diff_text1(d.diffs).substring(0,this.Patch_Margin);""!==i&& +(h.length1+=i.length,h.length2+=i.length,0!==h.diffs.length&&0===h.diffs[h.diffs.length-1][0]?h.diffs[h.diffs.length-1][1]+=i:h.diffs.push([0,i]));j||a.splice(++c,0,h)}}};diff_match_patch.prototype.patch_toText=function(a){for(var b=[],c=0;c<a.length;c++)b[c]=a[c];return b.join("")}; +diff_match_patch.prototype.patch_fromText=function(a){var b=[];if(!a)return b;a=a.split("\n");for(var c=0,d=/^@@ -(\d+),?(\d*) \+(\d+),?(\d*) @@$/;c<a.length;){var e=a[c].match(d);if(!e)throw Error("Invalid patch string: "+a[c]);var f=new diff_match_patch.patch_obj;b.push(f);f.start1=parseInt(e[1],10);""===e[2]?(f.start1--,f.length1=1):"0"==e[2]?f.length1=0:(f.start1--,f.length1=parseInt(e[2],10));f.start2=parseInt(e[3],10);""===e[4]?(f.start2--,f.length2=1):"0"==e[4]?f.length2=0:(f.start2--,f.length2= +parseInt(e[4],10));for(c++;c<a.length;){e=a[c].charAt(0);try{var g=decodeURI(a[c].substring(1))}catch(h){throw Error("Illegal escape in patch_fromText: "+g);}if("-"==e)f.diffs.push([-1,g]);else if("+"==e)f.diffs.push([1,g]);else if(" "==e)f.diffs.push([0,g]);else if("@"==e)break;else if(""!==e)throw Error('Invalid patch mode "'+e+'" in: '+g);c++}}return b};diff_match_patch.patch_obj=function(){this.diffs=[];this.start2=this.start1=null;this.length2=this.length1=0}; +diff_match_patch.patch_obj.prototype.toString=function(){var a,b;a=0===this.length1?this.start1+",0":1==this.length1?this.start1+1:this.start1+1+","+this.length1;b=0===this.length2?this.start2+",0":1==this.length2?this.start2+1:this.start2+1+","+this.length2;a=["@@ -"+a+" +"+b+" @@\n"];var c;for(b=0;b<this.diffs.length;b++){switch(this.diffs[b][0]){case 1:c="+";break;case -1:c="-";break;case 0:c=" "}a[b+1]=c+encodeURI(this.diffs[b][1])+"\n"}return a.join("").replace(/%20/g," ")}; +this.diff_match_patch=diff_match_patch;this.DIFF_DELETE=-1;this.DIFF_INSERT=1;this.DIFF_EQUAL=0;})() diff --git a/docs/demo/code-editor/jsonlint.js b/docs/demo/code-editor/jsonlint.js new file mode 100644 index 000000000..f34759e81 --- /dev/null +++ b/docs/demo/code-editor/jsonlint.js @@ -0,0 +1 @@ +var jsonlint=function(){var a=!0,b=!1,c={},d=function(){var a={trace:function(){},yy:{},symbols_:{error:2,JSONString:3,STRING:4,JSONNumber:5,NUMBER:6,JSONNullLiteral:7,NULL:8,JSONBooleanLiteral:9,TRUE:10,FALSE:11,JSONText:12,JSONValue:13,EOF:14,JSONObject:15,JSONArray:16,"{":17,"}":18,JSONMemberList:19,JSONMember:20,":":21,",":22,"[":23,"]":24,JSONElementList:25,$accept:0,$end:1},terminals_:{2:"error",4:"STRING",6:"NUMBER",8:"NULL",10:"TRUE",11:"FALSE",14:"EOF",17:"{",18:"}",21:":",22:",",23:"[",24:"]"},productions_:[0,[3,1],[5,1],[7,1],[9,1],[9,1],[12,2],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[15,2],[15,3],[20,3],[19,1],[19,3],[16,2],[16,3],[25,1],[25,3]],performAction:function(b,c,d,e,f,g,h){var i=g.length-1;switch(f){case 1:this.$=b.replace(/\\(\\|")/g,"$1").replace(/\\n/g,"\n").replace(/\\r/g,"\r").replace(/\\t/g," ").replace(/\\v/g," ").replace(/\\f/g,"\f").replace(/\\b/g,"\b");break;case 2:this.$=Number(b);break;case 3:this.$=null;break;case 4:this.$=!0;break;case 5:this.$=!1;break;case 6:return this.$=g[i-1];case 13:this.$={};break;case 14:this.$=g[i-1];break;case 15:this.$=[g[i-2],g[i]];break;case 16:this.$={},this.$[g[i][0]]=g[i][1];break;case 17:this.$=g[i-2],g[i-2][g[i][0]]=g[i][1];break;case 18:this.$=[];break;case 19:this.$=g[i-1];break;case 20:this.$=[g[i]];break;case 21:this.$=g[i-2],g[i-2].push(g[i])}},table:[{3:5,4:[1,12],5:6,6:[1,13],7:3,8:[1,9],9:4,10:[1,10],11:[1,11],12:1,13:2,15:7,16:8,17:[1,14],23:[1,15]},{1:[3]},{14:[1,16]},{14:[2,7],18:[2,7],22:[2,7],24:[2,7]},{14:[2,8],18:[2,8],22:[2,8],24:[2,8]},{14:[2,9],18:[2,9],22:[2,9],24:[2,9]},{14:[2,10],18:[2,10],22:[2,10],24:[2,10]},{14:[2,11],18:[2,11],22:[2,11],24:[2,11]},{14:[2,12],18:[2,12],22:[2,12],24:[2,12]},{14:[2,3],18:[2,3],22:[2,3],24:[2,3]},{14:[2,4],18:[2,4],22:[2,4],24:[2,4]},{14:[2,5],18:[2,5],22:[2,5],24:[2,5]},{14:[2,1],18:[2,1],21:[2,1],22:[2,1],24:[2,1]},{14:[2,2],18:[2,2],22:[2,2],24:[2,2]},{3:20,4:[1,12],18:[1,17],19:18,20:19},{3:5,4:[1,12],5:6,6:[1,13],7:3,8:[1,9],9:4,10:[1,10],11:[1,11],13:23,15:7,16:8,17:[1,14],23:[1,15],24:[1,21],25:22},{1:[2,6]},{14:[2,13],18:[2,13],22:[2,13],24:[2,13]},{18:[1,24],22:[1,25]},{18:[2,16],22:[2,16]},{21:[1,26]},{14:[2,18],18:[2,18],22:[2,18],24:[2,18]},{22:[1,28],24:[1,27]},{22:[2,20],24:[2,20]},{14:[2,14],18:[2,14],22:[2,14],24:[2,14]},{3:20,4:[1,12],20:29},{3:5,4:[1,12],5:6,6:[1,13],7:3,8:[1,9],9:4,10:[1,10],11:[1,11],13:30,15:7,16:8,17:[1,14],23:[1,15]},{14:[2,19],18:[2,19],22:[2,19],24:[2,19]},{3:5,4:[1,12],5:6,6:[1,13],7:3,8:[1,9],9:4,10:[1,10],11:[1,11],13:31,15:7,16:8,17:[1,14],23:[1,15]},{18:[2,17],22:[2,17]},{18:[2,15],22:[2,15]},{22:[2,21],24:[2,21]}],defaultActions:{16:[2,6]},parseError:function(b,c){throw new Error(b)},parse:function(b){function o(a){d.length=d.length-2*a,e.length=e.length-a,f.length=f.length-a}function p(){var a;return a=c.lexer.lex()||1,typeof a!="number"&&(a=c.symbols_[a]||a),a}var c=this,d=[0],e=[null],f=[],g=this.table,h="",i=0,j=0,k=0,l=2,m=1;this.lexer.setInput(b),this.lexer.yy=this.yy,this.yy.lexer=this.lexer,typeof this.lexer.yylloc=="undefined"&&(this.lexer.yylloc={});var n=this.lexer.yylloc;f.push(n),typeof this.yy.parseError=="function"&&(this.parseError=this.yy.parseError);var q,r,s,t,u,v,w={},x,y,z,A;for(;;){s=d[d.length-1],this.defaultActions[s]?t=this.defaultActions[s]:(q==null&&(q=p()),t=g[s]&&g[s][q]);if(typeof t=="undefined"||!t.length||!t[0]){if(!k){A=[];for(x in g[s])this.terminals_[x]&&x>2&&A.push("'"+this.terminals_[x]+"'");var B="";this.lexer.showPosition?B="Parse error on line "+(i+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+A.join(", ")+", got '"+this.terminals_[q]+"'":B="Parse error on line "+(i+1)+": Unexpected "+(q==1?"end of input":"'"+(this.terminals_[q]||q)+"'"),this.parseError(B,{text:this.lexer.match,token:this.terminals_[q]||q,line:this.lexer.yylineno,loc:n,expected:A})}if(k==3){if(q==m)throw new Error(B||"Parsing halted.");j=this.lexer.yyleng,h=this.lexer.yytext,i=this.lexer.yylineno,n=this.lexer.yylloc,q=p()}for(;;){if(l.toString()in g[s])break;if(s==0)throw new Error(B||"Parsing halted.");o(1),s=d[d.length-1]}r=q,q=l,s=d[d.length-1],t=g[s]&&g[s][l],k=3}if(t[0]instanceof Array&&t.length>1)throw new Error("Parse Error: multiple actions possible at state: "+s+", token: "+q);switch(t[0]){case 1:d.push(q),e.push(this.lexer.yytext),f.push(this.lexer.yylloc),d.push(t[1]),q=null,r?(q=r,r=null):(j=this.lexer.yyleng,h=this.lexer.yytext,i=this.lexer.yylineno,n=this.lexer.yylloc,k>0&&k--);break;case 2:y=this.productions_[t[1]][1],w.$=e[e.length-y],w._$={first_line:f[f.length-(y||1)].first_line,last_line:f[f.length-1].last_line,first_column:f[f.length-(y||1)].first_column,last_column:f[f.length-1].last_column},v=this.performAction.call(w,h,j,i,this.yy,t[1],e,f);if(typeof v!="undefined")return v;y&&(d=d.slice(0,-1*y*2),e=e.slice(0,-1*y),f=f.slice(0,-1*y)),d.push(this.productions_[t[1]][0]),e.push(w.$),f.push(w._$),z=g[d[d.length-2]][d[d.length-1]],d.push(z);break;case 3:return!0}}return!0}},b=function(){var a={EOF:1,parseError:function(b,c){if(!this.yy.parseError)throw new Error(b);this.yy.parseError(b,c)},setInput:function(a){return this._input=a,this._more=this._less=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this},input:function(){var a=this._input[0];this.yytext+=a,this.yyleng++,this.match+=a,this.matched+=a;var b=a.match(/\n/);return b&&this.yylineno++,this._input=this._input.slice(1),a},unput:function(a){return this._input=a+this._input,this},more:function(){return this._more=!0,this},less:function(a){this._input=this.match.slice(a)+this._input},pastInput:function(){var a=this.matched.substr(0,this.matched.length-this.match.length);return(a.length>20?"...":"")+a.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var a=this.match;return a.length<20&&(a+=this._input.substr(0,20-a.length)),(a.substr(0,20)+(a.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var a=this.pastInput(),b=(new Array(a.length+1)).join("-");return a+this.upcomingInput()+"\n"+b+"^"},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var a,b,c,d,e,f;this._more||(this.yytext="",this.match="");var g=this._currentRules();for(var h=0;h<g.length;h++){c=this._input.match(this.rules[g[h]]);if(c&&(!b||c[0].length>b[0].length)){b=c,d=h;if(!this.options.flex)break}}if(b){f=b[0].match(/\n.*/g),f&&(this.yylineno+=f.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:f?f[f.length-1].length-1:this.yylloc.last_column+b[0].length},this.yytext+=b[0],this.match+=b[0],this.yyleng=this.yytext.length,this._more=!1,this._input=this._input.slice(b[0].length),this.matched+=b[0],a=this.performAction.call(this,this.yy,this,g[d],this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1);if(a)return a;return}if(this._input==="")return this.EOF;this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var b=this.next();return typeof b!="undefined"?b:this.lex()},begin:function(b){this.conditionStack.push(b)},popState:function(){return this.conditionStack.pop()},_currentRules:function(){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules},topState:function(){return this.conditionStack[this.conditionStack.length-2]},pushState:function(b){this.begin(b)}};return a.options={},a.performAction=function(b,c,d,e){var f=e;switch(d){case 0:break;case 1:return 6;case 2:return c.yytext=c.yytext.substr(1,c.yyleng-2),4;case 3:return 17;case 4:return 18;case 5:return 23;case 6:return 24;case 7:return 22;case 8:return 21;case 9:return 10;case 10:return 11;case 11:return 8;case 12:return 14;case 13:return"INVALID"}},a.rules=[/^(?:\s+)/,/^(?:(-?([0-9]|[1-9][0-9]+))(\.[0-9]+)?([eE][-+]?[0-9]+)?\b)/,/^(?:"(?:\\[\\"bfnrt/]|\\u[a-fA-F0-9]{4}|[^\\\0-\x09\x0a-\x1f"])*")/,/^(?:\{)/,/^(?:\})/,/^(?:\[)/,/^(?:\])/,/^(?:,)/,/^(?::)/,/^(?:true\b)/,/^(?:false\b)/,/^(?:null\b)/,/^(?:$)/,/^(?:.)/],a.conditions={INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13],inclusive:!0}},a}();return a.lexer=b,a}();return typeof a!="undefined"&&typeof c!="undefined"&&(c.parser=d,c.parse=function(){return d.parse.apply(d,arguments)},c.main=function(d){if(!d[1])throw new Error("Usage: "+d[0]+" FILE");if(typeof process!="undefined")var e=a("fs").readFileSync(a("path").join(process.cwd(),d[1]),"utf8");else var f=a("file").path(a("file").cwd()),e=f.join(d[1]).read({charset:"utf-8"});return c.parser.parse(e)},typeof b!="undefined"&&a.main===b&&c.main(typeof process!="undefined"?process.argv.slice(1):a("system").args)),c}(); \ No newline at end of file diff --git a/docs/demo/code-editor/section-base.jsx b/docs/demo/code-editor/section-base.jsx new file mode 100755 index 000000000..0ea4bc438 --- /dev/null +++ b/docs/demo/code-editor/section-base.jsx @@ -0,0 +1,224 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import CodeEditor from './code-editor' + +import Select from '../../../components/Select' +import 'codemirror/theme/material.css' +import 'codemirror/mode/xml/xml' +import 'codemirror/mode/javascript/javascript' +import 'codemirror/mode/go/go' +import 'codemirror/mode/css/css' +import 'codemirror/mode/sql/sql' +import 'codemirror/mode/shell/shell' +import 'codemirror/theme/colorforth.css' +import 'codemirror/theme/seti.css' +import 'codemirror/theme/eclipse.css' + +const prefix = 'CodeEditor-base' +const desc = '' +const rightOptions = ['基础用法', '语言切换', '主题切换'] + +const code = [ + { + code: `import React from 'react' +// 正常使用的时候需要将注释代码解开 +// import 'codemirror/theme/material.css' // 主题 +// import 'codemirror/mode/xml/xml' // 高亮代码 +import { UnControlled as CodeEditor } from 'react-codemirror2' + +class Demo extends React.Component { + constructor(props) { + super(props) + } + render () { + return ( + <CodeEditor + value='<h1>I ♥ HiUI CodeEditor</h1>' + options={{ + mode: 'xml', + theme: 'material', + lineNumbers: true + }} + onChange={(editor, data, value) => { + console.log('value',value) + }} + /> + ) + } +}`, + opt: ['基础用法'] + }, + { + code: `import React from 'react' +import { UnControlled as CodeEditor } from 'react-codemirror2' +// 使用某个语言的时候 需要 import 'codemirror/mode/{语言}/{语言}' +// eg: import 'codemirror/mode/xml/xml' + +// 使用某个主题的时候 需要 import 'codemirror/theme/{主题名称}.css' +// eg: import 'codemirror/theme/material.css' + +// 正常使用的时候需要将注释代码解开 +// import 'codemirror/theme/material.css' +// import 'codemirror/mode/xml/xml' // 代码关键词高亮 --> xml、html +// import 'codemirror/mode/javascript/javascript' // 代码关键词高亮 --> js +// import 'codemirror/mode/go/go' // 代码关键词高亮 --> Go +// import 'codemirror/mode/css/css' // 代码关键词高亮 --> css +// import 'codemirror/mode/sql/sql' // 代码关键词高亮 --> sql +// import 'codemirror/mode/shell/shell' // 代码关键词高亮 --> shell + +class Demo extends React.Component { + constructor(props) { + super(props) + this.state = { + mode:'xml', + value:'<h1>I ♥ HiUI CodeEditor</h1>', + modeData:[ + {title:'xml',id:'xml'}, + {title:'javascript',id:'javascript'}, + {title:'css',id:'css'}, + {title:'sql',id:'sql'}, + {title:'go',id:'go'}, + {title:'shell',id:'shell'}, + ] + } + } + defaultCode(mode) { + let value = '' + switch(mode){ + case 'xml': + value = '<h1>I ♥ HiUI CodeEditor</h1>' + break; + case 'javascript': + value = "const codeCallback = () => { console.log('hello CodeEditor') }" + break; + case 'css': + value = \` .hi-code-editor { +width:'500px'; +height:'500px' +} \` + break; + case 'sql': + value = "SELECT LastName,FirstName FROM Persons" + break; + case 'go': + value = \`package main +import "fmt" +func main() { fmt.Println("Hello, World!") } \` + break; + case 'shell': + value = 'echo "Hello World !"' + break; + default: + value = 'pleace select mode' + } + return value + } + render () { + const {mode,value,modeData} = this.state + return ( + <div> + <div style={{marginBottom:'10px'}}> + <Select + type='single' + placeholder='pleace select mode' + style={{ width: 200 }} + data={modeData} + onChange={(mode)=>{ + const _mode = mode[0] + this.setState({ + mode:_mode, + value: this.defaultCode(_mode) + }) + }} + /> + </div> + + <CodeEditor + value={value} + options={{ + mode, + theme: 'material', + lineNumbers: true, + }} + onChange={(editor, data, value) => { + console.log('value',value,editor) + }} + /> + </div> + ) + } +}`, + opt: ['语言切换'] + }, + { + code: `import React from 'react' +// 使用某个语言的时候 需要 import 'codemirror/mode/{语言}/{语言}' +import { UnControlled as CodeEditor } from 'react-codemirror2' +// 正常使用的时候需要将注释代码解开 +// import 'codemirror/theme/material.css' +// import 'codemirror/mode/xml/xml' +// import 'codemirror/theme/colorforth.css' +// import 'codemirror/theme/seti.css' +// import 'codemirror/theme/eclipse.css' + +// 使用某个语言的时候 需要 import 'codemirror/mode/{语言}/{语言}' +// eg: import 'codemirror/mode/xml/xml' + +// 使用某个主题的时候 需要 import 'codemirror/theme/{主题名称}.css' +// eg: import 'codemirror/theme/material.css' + +// 更多请参考 https://codemirror.net/demo/theme.html +class Demo extends React.Component { + constructor(props) { + super(props) + this.state = { + theme:'material', + themeData:[ + {title:'material',id:'material'}, + {title:'seti',id:'seti'}, + {title:'colorforth',id:'colorforth'}, + {title:'eclipse',id:'eclipse'}, + ] + } + } + render () { + const {themeData,theme} = this.state + return ( + <div> + <div style={{marginBottom:'10px'}}> + <Select + type='single' + placeholder='pleace select theme' + style={{ width: 200 }} + data={themeData} + onChange={(theme)=>{ + this.setState({ + theme:theme[0], + }) + }} + /> + </div> + <CodeEditor + value= "const codeCallback = () => { console.log('hello CodeEditor') }" + options={{ + mode: 'javascript', + theme: theme, + lineNumbers: true + }} + onChange={(editor, data, value) => { + console.log('value',value) + }} + /> + </div> + + ) + } +}`, + opt: ['主题切换'] + } +] + +const DemoBase = () => ( + <DocViewer desc={desc} code={code} scope={{ CodeEditor, Select }} prefix={prefix} rightOptions={rightOptions} /> +) +export default DemoBase diff --git a/docs/demo/code-editor/section-json.jsx b/docs/demo/code-editor/section-json.jsx new file mode 100755 index 000000000..dab1cad77 --- /dev/null +++ b/docs/demo/code-editor/section-json.jsx @@ -0,0 +1,115 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import CodeEditor from './code-editor' +import Select from '../../../components/Select' +import 'codemirror/theme/material.css' +import 'codemirror/mode/xml/xml' +import 'codemirror/mode/javascript/javascript' +import 'codemirror/mode/go/go' +import 'codemirror/mode/css/css' +import 'codemirror/mode/sql/sql' +import 'codemirror/mode/shell/shell' +import 'codemirror/theme/colorforth.css' +import 'codemirror/theme/seti.css' +import 'codemirror/theme/eclipse.css' +import 'codemirror/addon/selection/active-line.js' +import 'codemirror/addon/edit/closetag.js' +import 'codemirror/addon/fold/xml-fold.js' +import 'codemirror/mode/htmlmixed/htmlmixed.js' +import 'codemirror/addon/fold/foldgutter.js' +import 'codemirror/addon/fold/foldcode.js' +import 'codemirror/addon/fold/foldgutter.css' +import 'codemirror/addon/fold/brace-fold.js' +import 'codemirror/addon/fold/comment-fold.js' +// 引入代码提示 +// import 'codemirror/addon/hint/show-hint.css' +// import 'codemirror/addon/hint/show-hint.js' +// // 上边两个是定义提示的前提,下边定义自动提示是哪种模式,此处为sql +// import 'codemirror/addon/hint/anyword-hint.js' + +import 'codemirror/addon/lint/lint.js' +import 'codemirror/addon/lint/lint.css' +import 'codemirror/addon/lint/json-lint.js' +import 'codemirror/addon/lint/css-lint.js' + +// lint +const jsonlint = require('jsonlint-mod') +window.jsonlint = jsonlint + +const prefix = 'CodeEditor-json' +const desc = '该示例中添加了jsonlint,示例中有个错误,已经被很明显的标识出来了。' + +const code = `import React from 'react' +import { UnControlled as CodeEditor } from 'react-codemirror2' +// 使用某个语言的时候 需要 import 'codemirror/mode/{语言}/{语言}' +// eg: import 'codemirror/mode/xml/xml' + +// 使用某个主题的时候 需要 import 'codemirror/theme/{主题名称}.css' +// eg: import 'codemirror/theme/material.css' +// 正常使用的时候需要将注释代码解开 +// 折行 +// import 'codemirror/addon/fold/foldgutter.js' +// import 'codemirror/addon/fold/foldcode.js' +// import 'codemirror/addon/fold/foldgutter.css' +// import 'codemirror/addon/fold/brace-fold.js' +// import 'codemirror/addon/fold/comment-fold.js' + +// 引入代码提示 +// import 'codemirror/addon/lint/lint.js' +// import 'codemirror/addon/lint/lint.css' +// import 'codemirror/addon/lint/json-lint.js' +// import 'codemirror/addon/lint/css-lint.js' +// lint 需要安装 npm install jsonlint-mod --save +// const jsonlint = require('jsonlint-mod') +// window.jsonlint = jsonlint + +class Demo extends React.Component { + constructor(props) { + super(props) + this.state = { + mode:'javascript', + value:\`"menu": { +"id": "file", +"value": "File", +"popup": { +"menuitem": [ + {"value": "New", "onclick": "CreateNewDoc()"}, + {"value": "Open", "onclick": "OpenDoc()"}, + {"value": "Close", "onclick": "CloseDoc()"} +] +} +} +} +\`, + } + } + render () { + const {value} = this.state + return ( + <div> + <CodeEditor + value={value} + options={{ + mode: 'application/json', + theme: 'material', + gutters: ["CodeMirror-lint-markers"], + lint: true, + styleActiveLine: true, + //代码折叠 + lineWrapping: true, + foldGutter: true, + gutters: ['CodeMirror-linenumbers', 'CodeMirror-foldgutter'], + lineNumbers: true, + + }} + onChange={(editor, data, value) => { + console.log('value',value,editor) + }} + /> + </div> + ) + } +}` + +const DemoBase = () => <DocViewer desc={desc} code={code} scope={{ CodeEditor, Select }} prefix={prefix} /> +export default DemoBase diff --git a/docs/demo/code-editor/section-markDown.jsx b/docs/demo/code-editor/section-markDown.jsx new file mode 100755 index 000000000..f1c10b2a7 --- /dev/null +++ b/docs/demo/code-editor/section-markDown.jsx @@ -0,0 +1,145 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import CodeEditor from './code-editor' +import Select from '../../../components/Select' +import 'codemirror/theme/material.css' +import 'codemirror/mode/xml/xml' +import 'codemirror/mode/javascript/javascript' +import 'codemirror/mode/go/go' +import 'codemirror/mode/css/css' +import 'codemirror/mode/sql/sql' +import 'codemirror/mode/shell/shell' +import 'codemirror/theme/colorforth.css' +import 'codemirror/theme/seti.css' +import 'codemirror/theme/eclipse.css' +import 'codemirror/addon/selection/active-line.js' +import 'codemirror/addon/edit/closetag.js' +import 'codemirror/addon/fold/xml-fold.js' +import 'codemirror/mode/htmlmixed/htmlmixed.js' +import 'codemirror/addon/fold/foldgutter.js' +import 'codemirror/addon/fold/foldcode.js' +import 'codemirror/addon/fold/foldgutter.css' +import 'codemirror/addon/fold/brace-fold.js' +import 'codemirror/addon/fold/comment-fold.js' +// 引入代码提示 +import 'codemirror/addon/hint/show-hint.css' +import 'codemirror/addon/hint/show-hint.js' +// 上边两个是定义提示的前提,下边定义自动提示是哪种模式,此处为sql +import 'codemirror/addon/hint/anyword-hint.js' + +const prefix = 'CodeEditor-base' +const desc = '' +const rightOptions = ['高亮行+自动补全', '可折叠+自动提醒'] + +const code = [ + { + code: `import React from 'react' + +import * as material from 'codemirror/theme/material.css' +import * as xml from 'codemirror/mode/xml/xml' + import { UnControlled as CodeEditor } from 'react-codemirror2' + +// 使用时, 需要将注释的代码解开 +// 高亮行插件 +// import 'codemirror/addon/selection/active-line.js' +// 自动闭合标签插件 +// import 'codemirror/addon/edit/closetag.js' +// 自动格式化 +// import 'codemirror/addon/fold/xml-fold.js' +// import 'codemirror/mode/htmlmixed/htmlmixed.js' +class Demo extends React.Component { + constructor(props) { + super(props) + } + render () { + return ( + <CodeEditor + value= { \`<h1> +I ♥ HiUI CodeEditor +</h1>\` } + options={{ + mode: 'text/html', + theme: 'material', + lineNumbers: true, + styleActiveLine: true, + autoCloseTags: true + }} + onChange={(editor, data, value) => { + console.log('value',value) + }} + /> + ) + } +}`, + opt: ['高亮行+自动补全'] + }, + { + code: `import React from 'react' + import { UnControlled as CodeEditor } from 'react-codemirror2' + + // 使用某个语言的时候 需要 import 'codemirror/mode/{语言}/{语言}' + // eg: import 'codemirror/mode/xml/xml' + +// 使用某个主题的时候 需要 import 'codemirror/theme/{主题名称}.css' +// eg: import 'codemirror/theme/material.css' +// 折行 +// import 'codemirror/addon/fold/foldgutter.js' +// import 'codemirror/addon/fold/foldcode.js' +// import 'codemirror/addon/fold/foldgutter.css' +// import 'codemirror/addon/fold/brace-fold.js' +// import 'codemirror/addon/fold/comment-fold.js' + +// 引入代码提示 +// import 'codemirror/addon/hint/show-hint.css' +// import 'codemirror/addon/hint/show-hint.js' +// 上边两个是定义提示的前提,下边定义自动提示是哪种模式 +// import 'codemirror/addon/hint/anyword-hint.js' + +class Demo extends React.Component { + constructor(props) { + super(props) + this.state = { + mode:'javascript', + value:\`const codeCallback = () => { +console.log('hello CodeEditor') +} +// 在你开始输入的时候,会默认提醒你原来输入过的关键字 +\`, + } + } + render () { + const {mode,value,modeData} = this.state + return ( + <div> + <CodeEditor + value={value} + options={{ + mode, + theme: 'material', + lineNumbers: true, + //代码折叠 + lineWrapping: true, + foldGutter: true, + gutters: ['CodeMirror-linenumbers', 'CodeMirror-foldgutter'], + }} + onChange={(editor, data, value) => { + console.log('value',value,editor) + // 自动补全的时候,也会触发change事件,所有坐下判断,以免死循环,正则是为了不让空格,换行之类的也提示 + // 通过change对象你可以自定义一些规则去判断是否提示 + if (data.origin !== 'complete' && /\w|\./g.test(data.text[0])) { + editor.showHint() + } + }} + /> + </div> + ) + } +}`, + opt: ['可折叠+自动提醒'] + } +] + +const DemoBase = () => ( + <DocViewer desc={desc} code={code} scope={{ CodeEditor, Select }} prefix={prefix} rightOptions={rightOptions} /> +) +export default DemoBase diff --git a/docs/demo/code-editor/section-merge.jsx b/docs/demo/code-editor/section-merge.jsx new file mode 100755 index 000000000..23a473461 --- /dev/null +++ b/docs/demo/code-editor/section-merge.jsx @@ -0,0 +1,149 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import CodeMirror from 'codemirror' +import Select from '../../../components/Select' +import 'codemirror/theme/material.css' +import 'codemirror/mode/xml/xml' +import 'codemirror/mode/javascript/javascript' +import 'codemirror/mode/htmlmixed/htmlmixed.js' +import 'codemirror/mode/css/css.js' +import 'codemirror/addon/merge/merge.js' +import 'codemirror/addon/merge/merge.css' +import 'codemirror/addon/selection/active-line' +import 'codemirror/addon/fold/foldgutter.css' +import 'codemirror/addon/fold/foldcode' +import 'codemirror/addon/fold/brace-fold' // 折叠js +import 'codemirror/addon/fold/xml-fold' // 折叠xml和html +import 'codemirror/addon/fold/markdown-fold' // 折叠md +import 'codemirror/addon/fold/comment-fold' // 折叠注释,但是测试一下只能折叠html的注释; +import './diff_match_patch.js' +const prefix = 'CodeEditor-merge' +const desc = '' + +const code = `import React from 'react' + import CodeMirror from 'codemirror' +// 正常使用的时候需要将注释代码解开 +// import 'codemirror/theme/material.css' +// import 'codemirror/mode/xml/xml' +// import 'codemirror/mode/javascript/javascript' +// import 'codemirror/mode/htmlmixed/htmlmixed.js' +// import 'codemirror/mode/css/css.js' +// import 'codemirror/addon/merge/merge.js' +// import 'codemirror/addon/merge/merge.css' +// import 'codemirror/addon/selection/active-line' +// import 'codemirror/addon/fold/foldgutter.css' +// import 'codemirror/addon/fold/foldcode' +// import 'codemirror/addon/fold/brace-fold' // 折叠js +// import 'codemirror/addon/fold/xml-fold' // 折叠xml和html +// import 'codemirror/addon/fold/markdown-fold' // 折叠md +// import 'codemirror/addon/fold/comment-fold' // 折叠注释,但是测试一下只能折叠html的注释; +// https://cdnjs.cloudflare.com/ajax/libs/diff_match_patch/20121119/diff_match_patch.js 可以将 diff_match_patch.js 下载到本地 或者放到自己的CDN上面 +// import './diff_match_patch.js' + +class Demo extends React.Component { + constructor(props) { + super(props); + this.state= { + FileContentData: props.FileContentData, + } + this.value = \`<head><title>CodeMirror: merge view demo + + + + + + + + + + + + + + + +\` + this.orig = \`CodeMirror: merge view demo + + + + + + + + + + + + + + + +\` + } + componentDidMount(){ + const {FileContentData} = this.props + this.initUI(FileContentData) + } + componentWillReceiveProps(nextProps){ + this.initUI(nextProps.FileContentData); + } + initUI(data) { + let target = this.refs['react-diff-code-view'];//获取dom元素 + const {value,orig} = this + console.log(target) + target.innerHTML = "";//每次dom元素的内容清空 + CodeMirror.MergeView(target, Object.assign({}, { + readOnly: false,//只读 + lineNumbers: true, // 显示行号 + value: value,//左边的内容(新内容) + orig:orig,//右边的内容(旧内容) + mode: "xml",//代码模式为js模式,这里还可以是xml,python,java,等等,会根据不同代码模式实现代码高亮 + highlightDifferences: "highlight",//有差异的地方是否高亮 + connect: null, + revertButtons: false,//revert按钮设置为true可以回滚 + styleActiveLine: true,//光标所在的位置代码高亮 + lineWrap:true,// 文字过长时,是换行(wrap)还是滚动(scroll),默认是滚动 + smartIndent: true, // 智能缩进 + matchBrackets: true, // 括号匹配 + foldGutter:true,//代码折叠 + gutters: ["CodeMirror-linenumbers", "CodeMirror-foldgutter"] + }, this.props.options || {})); + } + render () { + return ( +
    +
    +
    + ) + } +}` + +const DemoBase = () => +export default DemoBase diff --git a/docs/demo/code-editor/section-other-config.jsx b/docs/demo/code-editor/section-other-config.jsx new file mode 100755 index 000000000..ff97564df --- /dev/null +++ b/docs/demo/code-editor/section-other-config.jsx @@ -0,0 +1,144 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import CodeEditor from './code-editor' +import Select from '../../../components/Select' +import 'codemirror/theme/material.css' +import 'codemirror/mode/xml/xml' +import 'codemirror/mode/javascript/javascript' +import 'codemirror/mode/go/go' +import 'codemirror/mode/css/css' +import 'codemirror/mode/sql/sql' +import 'codemirror/mode/shell/shell' +import 'codemirror/theme/colorforth.css' +import 'codemirror/theme/seti.css' +import 'codemirror/theme/eclipse.css' +import 'codemirror/addon/selection/active-line.js' +import 'codemirror/addon/edit/closetag.js' +import 'codemirror/addon/fold/xml-fold.js' +import 'codemirror/mode/htmlmixed/htmlmixed.js' +import 'codemirror/addon/fold/foldgutter.js' +import 'codemirror/addon/fold/foldcode.js' +import 'codemirror/addon/fold/foldgutter.css' +import 'codemirror/addon/fold/brace-fold.js' +import 'codemirror/addon/fold/comment-fold.js' +// 引入代码提示 +import 'codemirror/addon/hint/show-hint.css' +import 'codemirror/addon/hint/show-hint.js' +// 上边两个是定义提示的前提,下边定义自动提示是哪种模式,此处为sql +import 'codemirror/addon/hint/anyword-hint.js' + +const prefix = 'CodeEditor-otherConfig' +const desc = '' +const rightOptions = ['高亮行+自动补全', '可折叠+自动提醒'] + +const code = [ + { + code: `import React from 'react' + +import * as material from 'codemirror/theme/material.css' +import * as xml from 'codemirror/mode/xml/xml' +import { UnControlled as CodeEditor } from 'react-codemirror2' + +// 使用时, 需要将注释的代码解开 +// 高亮行插件 +// import 'codemirror/addon/selection/active-line.js' +// 自动闭合标签插件 +// import 'codemirror/addon/edit/closetag.js' +// 自动格式化 +// import 'codemirror/addon/fold/xml-fold.js' +// import 'codemirror/mode/htmlmixed/htmlmixed.js' +class Demo extends React.Component { + constructor(props) { + super(props) + } + render () { + return ( + +I ♥ HiUI CodeEditor +\` } + options={{ + mode: 'text/html', + theme: 'material', + lineNumbers: true, + styleActiveLine: true, + autoCloseTags: true + }} + onChange={(editor, data, value) => { + console.log('value',value) + }} + /> + ) + } +}`, + opt: ['高亮行+自动补全'] + }, + { + code: `import React from 'react' +import { UnControlled as CodeEditor } from 'react-codemirror2' +// 使用某个语言的时候 需要 import 'codemirror/mode/{语言}/{语言}' +// eg: import 'codemirror/mode/xml/xml' + +// 使用某个主题的时候 需要 import 'codemirror/theme/{主题名称}.css' +// eg: import 'codemirror/theme/material.css' +// 折行 +// import 'codemirror/addon/fold/foldgutter.js' +// import 'codemirror/addon/fold/foldcode.js' +// import 'codemirror/addon/fold/foldgutter.css' +// import 'codemirror/addon/fold/brace-fold.js' +// import 'codemirror/addon/fold/comment-fold.js' + +// 引入代码提示 +// import 'codemirror/addon/hint/show-hint.css' +// import 'codemirror/addon/hint/show-hint.js' +// 上边两个是定义提示的前提,下边定义自动提示是哪种模式 +// import 'codemirror/addon/hint/anyword-hint.js' + +class Demo extends React.Component { + constructor(props) { + super(props) + this.state = { + mode:'javascript', + value:\`const codeCallback = () => { +console.log('hello CodeEditor') +} +// 在你开始输入的时候,会默认提醒你原来输入过的关键字 +\`, + } + } + render () { + const {mode,value,modeData} = this.state + return ( +
    + { + console.log('value',value,editor) + // 自动补全的时候,也会触发change事件,所有坐下判断,以免死循环,正则是为了不让空格,换行之类的也提示 + // 通过change对象你可以自定义一些规则去判断是否提示 + if (data.origin !== 'complete' && /\w|\./g.test(data.text[0])) { + editor.showHint() + } + }} + /> +
    + ) + } +}`, + opt: ['可折叠+自动提醒'] + } +] + +const DemoBase = () => ( + +) +export default DemoBase diff --git a/docs/demo/code-editor/section-preview.jsx b/docs/demo/code-editor/section-preview.jsx new file mode 100755 index 000000000..fae47fec7 --- /dev/null +++ b/docs/demo/code-editor/section-preview.jsx @@ -0,0 +1,73 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import CodeEditor from './code-editor' +import Select from '../../../components/Select' +import 'codemirror/theme/material.css' +import 'codemirror/mode/xml/xml' +import 'codemirror/mode/javascript/javascript' +import 'codemirror/mode/htmlmixed/htmlmixed.js' +import 'codemirror/mode/css/css.js' + +const prefix = 'CodeEditor-preview' +const desc = '' + +const code = `import React from 'react' +import { UnControlled as CodeEditor } from 'react-codemirror2' +// 正常使用的时候需要将注释代码解开 +// import 'codemirror/theme/material.css' +// import 'codemirror/mode/xml/xml' +// import 'codemirror/mode/javascript/javascript' +// import 'codemirror/mode/htmlmixed/htmlmixed.js' +// import 'codemirror/mode/css/css.js' + +class Demo extends React.Component { + constructor(props) { + super(props) + this.value = \`

    welcome to HiUI

    + \` + this.delay = '' + } + componentDidMount() { + setTimeout(()=>{this.updatePreview()}, 300); + } + updatePreview() { + const {value} = this + const previewFrame = document.getElementById('preview'); + const preview = previewFrame.contentDocument || previewFrame.contentWindow.document; + preview.open(); + preview.write(value); + preview.close(); + } + render () { + const {value} = this + return ( +
    +
    + { + console.log('value',value,editor) + this.value = value + clearTimeout(this.delay) + setTimeout(()=>{this.updatePreview()}, 300) + }} + /> +
    + +
    + ) + } +}` + +const DemoBase = () => +export default DemoBase diff --git a/docs/demo/collapse/section-accordion.jsx b/docs/demo/collapse/section-accordion.jsx index 00bb0eefb..b4d01e468 100644 --- a/docs/demo/collapse/section-accordion.jsx +++ b/docs/demo/collapse/section-accordion.jsx @@ -12,7 +12,7 @@ class Demo extends React.Component { render(){ return( {console.log('切换了!');}} + onChange={(id)=>{console.log('切换了!',id);}} accordion={true} arrowPlacement="right" > @@ -47,6 +47,12 @@ class Demo extends React.Component { ] const DemoBasic = () => ( - + ) export default DemoBasic diff --git a/docs/demo/collapse/section-arrowPlacement.jsx b/docs/demo/collapse/section-arrowPlacement.jsx new file mode 100644 index 000000000..de7fcfbda --- /dev/null +++ b/docs/demo/collapse/section-arrowPlacement.jsx @@ -0,0 +1,98 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import Collapse from '../../../components/collapse' +const prefix = 'section-arrowPlacement' +const rightOptions = ['居右', '居左'] +const desc = '指定箭头放置方式' +const code = [ + { + code: `import React from 'react' +import Collapse from '@hi-ui/hiui/es/collapse'\n +class Demo extends React.Component { + render(){ + return( + {console.log('切换了!');}} + arrowPlacement="left" + > + +

    Collapse Panel Content 1

    +

    Collapse Panel Content 1

    +

    Collapse Panel Content 1

    +
    + +

    Collapse Panel Content 2

    +

    Collapse Panel Content 2

    +

    Collapse Panel Content 2

    +
    + +

    Collapse Panel Content 3

    +

    Collapse Panel Content 3

    +

    Collapse Panel Content 3

    +
    +
    + ) + } +}`, + opt: ['居右'] + }, + { + code: `import React from 'react' +import Collapse from '@hi-ui/hiui/es/collapse'\n +class Demo extends React.Component { + render(){ + return( + {console.log('切换了!');}} + activeId='1' + arrowPlacement="right" + > + +

    Collapse Panel Content 1

    +

    Collapse Panel Content 1

    +

    Collapse Panel Content 1

    +
    + +

    Collapse Panel Content 2

    +

    Collapse Panel Content 2

    +

    Collapse Panel Content 2

    +
    + +

    Collapse Panel Content 3

    +

    Collapse Panel Content 3

    +

    Collapse Panel Content 3

    +
    +
    + ) + } +}`, + opt: ['居左'] + } +] + +const DemoBasic = () => ( + +) +export default DemoBasic diff --git a/docs/demo/collapse/section-basic.jsx b/docs/demo/collapse/section-basic.jsx index 91b80b134..3bed8ef52 100644 --- a/docs/demo/collapse/section-basic.jsx +++ b/docs/demo/collapse/section-basic.jsx @@ -2,7 +2,7 @@ import React from 'react' import DocViewer from '../../../libs/doc-viewer' import Collapse from '../../../components/collapse' const prefix = 'section-basic' -const rightOptions = [] +const rightOptions = ['基础用法', '默认展开', '受控'] const desc = '可以同时展开多个面板,对垂直空间没有特别限制' const code = [ { @@ -12,7 +12,7 @@ class Demo extends React.Component { render(){ return( {console.log('切换了!');}} + onChange={(id)=>{console.log('切换了!',id);}} arrowPlacement="right" > { + console.log('切换了!',activeId); + }} + defaultActiveId={defaultActiveId} + arrowPlacement="right" + > + +

    Collapse Panel Content 1

    +

    Collapse Panel Content 1

    +

    Collapse Panel Content 1

    +
    + +

    Collapse Panel Content 2

    +

    Collapse Panel Content 2

    +

    Collapse Panel Content 2

    +
    + +

    Collapse Panel Content 3

    +

    Collapse Panel Content 3

    +

    Collapse Panel Content 3

    +
    +
    + ) + } +}`, + opt: ['默认展开'] + }, + { + code: `import React from 'react' +import Collapse from '@hi-ui/hiui/es/collapse'\n +class Demo extends React.Component { + constructor(props){ + super(props) + this.state={ + activeId:['1'] + } + } + render(){ + const {activeId} = this.state + return( + { + console.log('切换了!',activeId); + this.setState({ + activeId:activeId + }) + }} + activeId={activeId} + arrowPlacement="right" + > + +

    Collapse Panel Content 1

    +

    Collapse Panel Content 1

    +

    Collapse Panel Content 1

    +
    + +

    Collapse Panel Content 2

    +

    Collapse Panel Content 2

    +

    Collapse Panel Content 2

    +
    + +

    Collapse Panel Content 3

    +

    Collapse Panel Content 3

    +

    Collapse Panel Content 3

    +
    +
    + ) + } +}`, + opt: ['受控'] } ] diff --git a/docs/demo/counter/section-base.jsx b/docs/demo/counter/section-base.jsx index 89dfbe458..337e20ca6 100644 --- a/docs/demo/counter/section-base.jsx +++ b/docs/demo/counter/section-base.jsx @@ -2,41 +2,95 @@ import React from 'react' import DocViewer from '../../../libs/doc-viewer' import Counter from '../../../components/counter' const prefix = 'counter-base' -const code = `import React from 'react' -import Counter from '@hi-ui/hiui/es/counter'\n -class Demo extends React.Component { - constructor(props){ - super(props) - this.state={ - value:4 - } +const leftOptions = ['基础用法', '受控', '步长', '禁用'] +const code = [ + { + code: `import React from 'react' + import Counter from '@hi-ui/hiui/es/counter'\n + class Demo extends React.Component { + constructor(props){ + super(props) + this.state={ + value:4 + } + } + render() { + return ( +
    + +
    + ) + } + }`, + opt: ['基础用法'] + }, + { + code: `import React from 'react' + import Counter from '@hi-ui/hiui/es/counter'\n + class Demo extends React.Component { + constructor(props){ + super(props) + this.state={ + value:2 + } + } + render() { + return ( +
    + {this.setState({value:val})}} + /> +
    + ) + } + }`, + opt: ['受控'] + }, + { + code: `import React from 'react' + import Counter from '@hi-ui/hiui/es/counter'\n + class Demo extends React.Component { + render() { + return ( +
    + {console.log('val:',val)}} + /> +
    + ) + } + }`, + opt: ['步长'] + }, + { + code: `import React from 'react' + import Counter from '@hi-ui/hiui/es/counter'\n + class Demo extends React.Component { + render() { + return ( +
    + +
    + ) + } + }`, + opt: ['禁用'] } - render() { - return ( -
    - -

    - {this.setState({value:val})}} - /> -

    - ) - } -}` +] const DemoBase = () => ( ) diff --git a/docs/demo/date-picker/section-calendar.jsx b/docs/demo/date-picker/section-calendar.jsx index 7bc0f1cd0..07a3e4c7d 100644 --- a/docs/demo/date-picker/section-calendar.jsx +++ b/docs/demo/date-picker/section-calendar.jsx @@ -5,8 +5,7 @@ const prefix = 'date-picker-calendar' const rightOptions = ['预置农历', '自定义日期信息'] const code = [ { - code: - `import React from 'react' + code: `import React from 'react' import DatePicker from '@hi-ui/hiui/es/date-picker'\n class Demo extends React.Component { constructor() { @@ -16,28 +15,26 @@ class Demo extends React.Component { } } render () { + const {value} = this.state return ( -
    - { - console.log('onChange', date, dateStr) - this.setState({ - value: date - }) - }} - /> -
    + { + console.log('onChange', date, dateStr) + this.setState({ + value: date + }) + }} + /> ) } }`, opt: ['预置农历'] }, { - code: - `import React from 'react' + code: `import React from 'react' import DatePicker from '@hi-ui/hiui/es/date-picker'\n class Demo extends React.Component { constructor() { @@ -63,10 +60,10 @@ class Demo extends React.Component { const date = DatePicker.format(currentDate, 'yyyy/M/D') const yesterday = DatePicker.format(today-86400000, 'yyyy/M/D') const currentday = DatePicker.format(this.state.value, 'yyyy/M/D') - + if(date === '2020/4/8'){ return ( - + ) } else if (date === yesterday){ return ( @@ -90,7 +87,13 @@ class Demo extends React.Component { }`, opt: ['自定义日期信息'] } - ] -const DemoCalendar = () => +const DemoCalendar = () => ( + +) export default DemoCalendar diff --git a/docs/demo/date-picker/section-date-time.jsx b/docs/demo/date-picker/section-date-time.jsx index e1c26f431..5785b1437 100644 --- a/docs/demo/date-picker/section-date-time.jsx +++ b/docs/demo/date-picker/section-date-time.jsx @@ -9,16 +9,14 @@ class Demo extends React.Component { render () { return ( {console.log('onChange', date, dateStr)}} + format='YYYY-MM-DD HH:mm:ss' + onChange={(date, dateStr) => { console.log('onChange', date, dateStr) }} /> ) } }` -const DemoDateTime = () => ( - -) +const DemoDateTime = () => export default DemoDateTime diff --git a/docs/demo/date-picker/section-fast-check.jsx b/docs/demo/date-picker/section-fast-check.jsx index e50ed7c29..6842ef229 100644 --- a/docs/demo/date-picker/section-fast-check.jsx +++ b/docs/demo/date-picker/section-fast-check.jsx @@ -2,27 +2,53 @@ import React from 'react' import DocViewer from '../../../libs/doc-viewer' import DatePicker from '../../../components/date-picker' const prefix = 'date-picker-fast-check' +const rightOptions = ['内置', '自定义选择范围'] const desc = '将常用的日期或时间提炼成快捷项,节省操作成本' -const code = `import React from 'react' -import DatePicker from '@hi-ui/hiui/es/date-picker'\n -class Demo extends React.Component { - render () { - return ( - {console.log('onChange', date, dateStr)}} - /> - ) +const code = [ + { + code: `import React from 'react' + import DatePicker from '@hi-ui/hiui/es/date-picker'\n + class Demo extends React.Component { + render () { + return ( + {console.log('onChange', date, dateStr)}} + /> + ) + } + }`, + opt: ['内置'] + }, + { + code: `import React from 'react' + import DatePicker from '@hi-ui/hiui/es/date-picker'\n + class Demo extends React.Component { + render () { + return ( + {console.log('onChange', date, dateStr)}} + /> + ) + } + }`, + opt: ['自定义选择范围'] } -}` +] const DemoFastCheck = () => ( - + ) export default DemoFastCheck diff --git a/docs/demo/date-picker/section-normal.jsx b/docs/demo/date-picker/section-normal.jsx index 6fc2c13b8..a97dd9ae4 100644 --- a/docs/demo/date-picker/section-normal.jsx +++ b/docs/demo/date-picker/section-normal.jsx @@ -11,11 +11,9 @@ import DatePicker from '@hi-ui/hiui/es/date-picker'\n class Demo extends React.Component { render () { return ( -
    - {console.log('onChange', date, dateStr)}} - /> -
    + {console.log('onChange', date, dateStr)}} + /> ) } }`, @@ -25,20 +23,12 @@ class Demo extends React.Component { code: `import React from 'react' import DatePicker from '@hi-ui/hiui/es/date-picker'\n class Demo extends React.Component { - constructor() { - super() - this.state = { - date: new Date(), - } - } render () { return ( -
    - {console.log('onChange', date, dateStr)}} - /> -
    + {console.log('onChange', date, dateStr)}} + /> ) } }`, @@ -50,12 +40,10 @@ import DatePicker from '@hi-ui/hiui/es/date-picker'\n class Demo extends React.Component { render () { return ( -
    - {console.log('onChange', date, dateStr)}} - /> -
    + {console.log('onChange', date, dateStr)}} + /> ) } }`, @@ -67,13 +55,11 @@ import DatePicker from '@hi-ui/hiui/es/date-picker'\n class Demo extends React.Component { render () { return ( -
    - {console.log('onChange', date, dateStr)}} - /> -
    + {console.log('onChange', date, dateStr)}} + /> ) } }`, @@ -81,12 +67,6 @@ class Demo extends React.Component { } ] const DemoNormal = () => ( - + ) export default DemoNormal diff --git a/docs/demo/date-picker/section-scope.jsx b/docs/demo/date-picker/section-scope.jsx index d378c291a..433c3c696 100644 --- a/docs/demo/date-picker/section-scope.jsx +++ b/docs/demo/date-picker/section-scope.jsx @@ -3,7 +3,7 @@ import DocViewer from '../../../libs/doc-viewer' import DatePicker from '../../../components/date-picker' const prefix = 'date-picker-scope' const desc = '以天、周、月、年等粒度展示一个时间的范围' -const rightOptions = ['日期', '年份', '月份', '周', '日期时间'] +const rightOptions = ['日期', '年份', '月份', '周', '日期时间范围', '时间段快速选择'] const code = [ { code: `import React from 'react' @@ -20,7 +20,7 @@ class Demo extends React.Component {
    {console.log('onChange', date, dateStr)}} /> @@ -34,21 +34,13 @@ class Demo extends React.Component { code: `import React from 'react' import DatePicker from '@hi-ui/hiui/es/date-picker'\n class Demo extends React.Component { - constructor() { - super() - this.state = { - rangeDate: {start: new Date('2020'), end: new Date('2030')} // 或 rangeDate: new Date() - } - } render () { return ( -
    - {console.log('onChange', date, dateStr)}} - /> -
    + {console.log('onChange', date, dateStr)}} + /> ) } }`, @@ -58,21 +50,13 @@ class Demo extends React.Component { code: `import React from 'react' import DatePicker from '@hi-ui/hiui/es/date-picker'\n class Demo extends React.Component { - constructor() { - super() - this.state = { - rangeDate: {start: new Date(2020, 9), end: new Date(2030, 10)} // 或 rangeDate: new Date() - } - } render () { return ( -
    - {console.log('onChange', date, dateStr)}} - /> -
    + {console.log('onChange', date, dateStr)}} + /> ) } }`, @@ -82,58 +66,55 @@ class Demo extends React.Component { code: `import React from 'react' import DatePicker from '@hi-ui/hiui/es/date-picker'\n class Demo extends React.Component { - constructor() { - super() - this.state = { - rangeDate: {start: new Date(), end: new Date()} // 或 rangeDate: new Date() - } + render () { + return ( + {console.log('onChange', date, dateStr)}} + /> + ) } +}`, + opt: ['周'] + }, + { + code: `import React from 'react' +import DatePicker from '@hi-ui/hiui/es/date-picker'\n +class Demo extends React.Component { render () { return (
    {console.log('onChange', date, dateStr)}} />
    ) } }`, - opt: ['周'] + opt: ['日期时间范围'] }, { code: `import React from 'react' import DatePicker from '@hi-ui/hiui/es/date-picker'\n class Demo extends React.Component { - constructor() { - super() - this.state = { - rangeDate: {start: new Date(), end: new Date()} // 或 rangeDate: new Date() - } - } render () { return (
    {console.log('onChange', date, dateStr)}} />
    ) } }`, - opt: ['日期时间'] + opt: ['时间段快速选择'] } ] const DemoScopeBan = () => ( - + ) export default DemoScopeBan diff --git a/docs/demo/date-picker/section-week.jsx b/docs/demo/date-picker/section-week.jsx index 0accb4428..b98141fbf 100644 --- a/docs/demo/date-picker/section-week.jsx +++ b/docs/demo/date-picker/section-week.jsx @@ -59,17 +59,14 @@ class Demo extends React.Component { }, { code: `import React from 'react' -import Grid from '@hi-ui/hiui/es/grid' import DatePicker from '@hi-ui/hiui/es/date-picker'\n class Demo extends React.Component { render () { - const Row = Grid.Row - const Col = Grid.Col return ( {console.log('onChange', date, dateStr)}} - /> + type='year' + onChange={(date, dateStr) => {console.log('onChange', date, dateStr)}} + /> ) } }`, diff --git a/docs/demo/drawer/section-base.jsx b/docs/demo/drawer/section-base.jsx new file mode 100644 index 000000000..62705a15a --- /dev/null +++ b/docs/demo/drawer/section-base.jsx @@ -0,0 +1,41 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import Button from '../../../components/button' +import Drawer from '../../../components/drawer' +const prefix = 'drawer-base' +const code = `import React from 'react' +import Button from '@hi-ui/hiui/es/button' +import Drawer from '@hi-ui/hiui/es/drawer'\n +class Demo extends React.Component { + constructor (props) { + super(props) + this.state = { + visible: false + } + } + cancelEvent () { + this.setState({ + visible: false + }) + console.log("自定义关闭事件") + } + render(){ + return( +
    + + + 一些消息....
    + 一些消息...
    + 一些消息... +
    +
    + ) + } +}` + +const DemoBase = () => +export default DemoBase diff --git a/docs/demo/drawer/section-btn.jsx b/docs/demo/drawer/section-btn.jsx new file mode 100644 index 000000000..abe1eab1f --- /dev/null +++ b/docs/demo/drawer/section-btn.jsx @@ -0,0 +1,50 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import Button from '../../../components/button' +import Drawer from '../../../components/drawer' +const prefix = 'drawer-btn' +const desc = '通过 footers 自定义底部的按钮,并执行对应自定义事件,通过 closeBtn 取消右上角关闭按钮' + +const code = `import React from 'react' +import Button from '@hi-ui/hiui/es/button' +import Drawer from '@hi-ui/hiui/es/drawer'\n +class Demo extends React.Component { + constructor (props) { + super(props) + this.state = { + visible: false + } + } + cancelEvent () { + this.setState({ + visible: false + }) + console.log("关闭事件") + } + render(){ + return( +
    + + + + +
    + } + > + 一些消息 + 一些消息 + + +
    + ) + } +}` +const DemoBtn = () => ( + +) +export default DemoBtn diff --git a/docs/demo/drawer/section-placement.jsx b/docs/demo/drawer/section-placement.jsx new file mode 100644 index 000000000..111bb0843 --- /dev/null +++ b/docs/demo/drawer/section-placement.jsx @@ -0,0 +1,45 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import Button from '../../../components/button' +import Drawer from '../../../components/drawer' +import Radio from '../../../components/radio' +const desc = '设置抽屉拉出的方向' +const prefix = 'drawer-placement' +const code = `import React from 'react' +import Button from '@hi-ui/hiui/es/button' +import Drawer from '@hi-ui/hiui/es/drawer'\n +class Demo extends React.Component { + constructor (props) { + super(props) + this.state = { + visible: false + } + } + cancelEvent () { + this.setState({ + visible: false + }) + console.log("自定义关闭事件") + } + render(){ + return( +
    + + + 一些消息....
    + 一些消息...
    + 一些消息... +
    +
    + ) + } +}` +const DemoPlacement = () => ( + +) +export default DemoPlacement diff --git a/docs/demo/dropdown/section-base.jsx b/docs/demo/dropdown/section-base.jsx index 98892a437..8d2ff7b9a 100644 --- a/docs/demo/dropdown/section-base.jsx +++ b/docs/demo/dropdown/section-base.jsx @@ -1,8 +1,7 @@ import React from 'react' import DocViewer from '../../../libs/doc-viewer' import Dropdown from '../../../components/dropdown' -const desc = - '将一组同类的动作收起成为菜单,由一个操作入口展示使用' +const desc = '将一组同类的动作收起成为菜单,由一个操作入口展示使用' const prefix = 'dropdown-base' const rightOptions = ['基础', '禁用'] @@ -16,7 +15,8 @@ class Demo extends React.Component { this.state = { list: [{ id: 0, - title: '菜单一', + title: '小米商城', + href: 'https://www.mi.com', }, { id: 1, title: '菜单二' @@ -38,7 +38,7 @@ class Demo extends React.Component { }, { title: '-', }, { - title: '链接一', + title: '小米商城', href: 'https://www.mi.com', disabled: true }] diff --git a/docs/demo/dropdown/section-multiple.jsx b/docs/demo/dropdown/section-multiple.jsx index ddc94d01b..aeaba3637 100644 --- a/docs/demo/dropdown/section-multiple.jsx +++ b/docs/demo/dropdown/section-multiple.jsx @@ -68,11 +68,6 @@ class Demo extends React.Component { }` const DemoBase = () => ( - + ) export default DemoBase diff --git a/docs/demo/filter/section-base.jsx b/docs/demo/filter/section-base.jsx new file mode 100755 index 000000000..abf5575fd --- /dev/null +++ b/docs/demo/filter/section-base.jsx @@ -0,0 +1,315 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import Filter from '../../../components/filter' +const prefix = 'filter-base' +const desc = '一般作为筛选场景,作为筛选项' +const rightOptions = ['基础', '禁用', '受控'] + +const code = [ + { + code: `import React from 'react' + import Filter from '@hi-ui/hiui/es/filer'\n + class Demo extends React.Component { + constructor(props) { + super(props) + this.state = { + dataStore: [ + { + id:1, + content: '小米商城' + }, + { + id:2, + content: '米家有品' + }, + { + id:3, + content: '京东商城' + }, + { + id:4, + content: '天猫淘宝' + }, + { + id:5, + content: '创新渠道' + }, + { + id:6, + content: '线下KA' + }, + { + id:7, + content: '线下KA1' + }, + { + id:8, + content: '线下KA2' + }, + { + id:9, + content: '线下KA3' + }, + { + id:10, + content: '线下KA4' + } + ], + dataColor: [ + { + id:1, + content: '深空' + }, + { + id:2, + content: '白色' + }, + { + id:3, + content: '亮黑色' + }, + { + id:4, + content: '金色' + }, + ] + } + } + render () { + const {dataStore,dataColor} = this.state + return ( +
    + { + console.log('value', value) + }} + /> + { + console.log('value', value) + }} + /> +
    + ) + } + }`, + opt: ['基础'] + }, + { + code: `import React from 'react' + import Filter from '@hi-ui/hiui/es/filer'\n + class Demo extends React.Component { + constructor(props) { + super(props) + this.state = { + dataStore: [ + { + id:1, + content: '小米商城' + }, + { + id:2, + content: '米家有品' + }, + { + id:3, + content: '京东商城', + disabled:true + }, + { + id:4, + content: '天猫淘宝' + }, + { + id:5, + content: '创新渠道' + }, + { + id:6, + content: '线下KA' + }, + { + id:7, + content: '线下KA1' + }, + { + id:8, + content: '线下KA2' + }, + { + id:9, + content: '线下KA3' + }, + { + id:10, + content: '线下KA4' + } + ], + dataColor: [ + { + id:1, + content: '深空' + }, + { + id:2, + content: '白色' + }, + { + id:3, + content: '亮黑色' + }, + { + id:4, + content: '金色' + }, + ] + } + } + render () { + const {dataStore,dataColor} = this.state + return ( +
    + { + console.log('value', value) + }} + /> + { + console.log('value', value) + }} + /> +
    + ) + } + }`, + opt: ['禁用'] + }, + { + code: `import React from 'react' + import Filter from '@hi-ui/hiui/es/filer'\n + class Demo extends React.Component { + constructor(props) { + super(props) + this.state = { + storeActiveId:[1], + colorActiveId:[2], + dataStore: [ + { + id:1, + content: '小米商城' + }, + { + id:2, + content: '米家有品' + }, + { + id:3, + content: '京东商城', + disable:true + }, + { + id:4, + content: '天猫淘宝' + }, + { + id:5, + content: '创新渠道' + }, + { + id:6, + content: '线下KA' + }, + { + id:7, + content: '线下KA1' + }, + { + id:8, + content: '线下KA2' + }, + { + id:9, + content: '线下KA3' + }, + { + id:10, + content: '线下KA4' + } + ], + dataColor: [ + { + id:1, + content: '深空' + }, + { + id:2, + content: '白色' + }, + { + id:3, + content: '亮黑色' + }, + { + id:4, + content: '金色' + }, + ] + } + } + render () { + const {dataStore,dataColor,storeActiveId,colorActiveId} = this.state + return ( +
    + { + console.log('value', value) + this.setState({ + storeActiveId: value + }) + }} + /> + { + console.log('value', value) + this.setState({ + colorActiveId: value + }) + }} + /> +
    + ) + } + }`, + opt: ['受控'] + } +] + +const DemoBase = () => ( + +) +export default DemoBase diff --git a/docs/demo/filter/section-cascader.jsx b/docs/demo/filter/section-cascader.jsx new file mode 100755 index 000000000..fc219d851 --- /dev/null +++ b/docs/demo/filter/section-cascader.jsx @@ -0,0 +1,104 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import Filter from '../../../components/filter' +const prefix = 'filter-cascader' +const desc = '一般作为筛选场景,作为筛选项组合,每个级别之间有联动' +const code = `import React from 'react' +import Filter from '@hi-ui/hiui/es/filer'\n +class Demo extends React.Component { + constructor(props) { + super(props) + this.state = { + value:[2, 21, '小米MIXS'], + data: [ + { + id: 1, + content: '小米商城', + children: [ + { + id: 11, + content: '小米商城' + }, + { + id: 12, + content: '米家优品', + disabled: true + } + ] + }, + { + id: 2, + content: '米家有品', + children: [ + { + id: 21, + content: '五彩城店', + children: [ + { + id: '小米9', + content: '小米9' + }, + { + id: '小米MIXS', + content: '小米MIXS' + }, + { + id: '小米8', + content: '小米8' + }, + ] + }, + { + id: 22, + content: '清河店' + }, + { + id: 23, + content: '西三旗店' + } + ] + }, + + { + id: 3, + content: '京东商城', + children: [ + { + id: 31, + content: '小米直营', + children: [ + { + id: '线下KA', + content: '线下KA' + } + ] + } + ] + } + ] + } + } + render () { + const {data,value} = this.state + return ( +
    + { + console.log('value', value) + this.setState({ + value:value + }) + }} + /> +
    + ) + } +}` + +const DemoBase = () => +export default DemoBase diff --git a/docs/demo/form/section-align.jsx b/docs/demo/form/section-align.jsx index 396359d53..2448905db 100644 --- a/docs/demo/form/section-align.jsx +++ b/docs/demo/form/section-align.jsx @@ -1,108 +1,344 @@ import React from 'react' import DocViewer from '../../../libs/doc-viewer' -import Form from '../../../components/form/index' +import Form, { LegacyForm } from '../../../components/form' import Input from '../../../components/input' - +import Checkbox from '../../../components/checkbox' import Button from '../../../components/button' +import Grid from '../../../components/grid' +import Radio from '../../../components/radio' +import Select from '../../../components/select' const prefix = 'form-align' const rightOptions = ['左对齐', '右对齐', '顶对齐'] -const desc = [ - '左对齐:表单项较少,对应标题字数易对齐工整', - '右对齐:表单项较多,对填写效率有要求' -] +const desc = ['左对齐:表单项较少,对应标题字数易对齐工整'] const code = [ { code: `import React from 'react' -import { Form, Grid, Radio, Button, Input } from '@hi-ui/hiui'\n -class Demo extends React.Component { - render (){ - const FormItem = Form.Item - return ( -
    - - - - - - - - - - - - + import { Form, Grid, Radio, Button, Input } from '@hi-ui/hiui'\n + class Demo extends React.Component { + constructor(props){ + super(props) + this.state = { + formData : { + phone: '', + password:'', + remember:true, + } + } + this.form = React.createRef() + } + render (){ + const FormItem = Form.Item + const FormSubmit = Form.Submit + const FormReset = Form.Reset + const {formData} = this.state + return ( + + + { + setForm({ + phone: val + }) + }} + /> + + + - - - - - - - - - - -
    - ) - } -}`, + import { Form, Grid, Radio, Button, Input } from '@hi-ui/hiui'\n + class Demo extends React.Component { + constructor(props){ + super(props) + this.state = { + formData : { + email: '', + password:'', + remember:true, + } + } + this.form = React.createRef() + } + render (){ + const FormItem = Form.Item + const FormSubmit = Form.Submit + const FormReset = Form.Reset + const {formData} = this.state + + return ( +
    + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ + } + ] + }> + + + + + + + { + console.log('checkbox remeber me') + }}> 记住我 + + + { + console.log('Get form value:',values,errors)} + } + >提交 + {console.log('reset form')}} + >重置 + +
    + ) + } + }`, opt: ['右对齐'] }, { code: `import React from 'react' -import { Form, Grid, Radio, Button, Input } from '@hi-ui/hiui'\n -class Demo extends React.Component { - render (){ - const FormItem = Form.Item - return ( -
    - - - - - - - - - - - - -
    - ) - } -}`, + import { Form, Grid, Radio, Button, Input } from '@hi-ui/hiui'\n + class Demo extends React.Component { + constructor(props){ + super(props) + this.state = { + formData : { + phone: '', + password:'', + remember:true, + }, + rules:{ + phone:{ + trigger:'onChange', + type:'number', + required:true, + validator: (rule,value,callback) => { + const telReg = /^[1][3|4|5|6|7|8|9][0-9]{9}$/ + if(!value){ + callback("请输入手机号") + } else if (!telReg.test(value)){ + callback("请输入正确的手机号") + } else { + callback() + console.log(rule, value) + } + }, + }, + password:[ + { required: true, message: '请输入密码', trigger: 'onBlur' }, + { min: 5, max: 16, message: '长度在 6 到 16 个字符', trigger: 'onBlur' } + ] + } + } + this.form = React.createRef() + } + render (){ + const FormItem = Form.Item + const FormSubmit = Form.Submit + const FormReset = Form.Reset + const {formData,rules} = this.state + return ( +
    + + + + + + + + { + console.log('checkbox remeber me') + }}> 记住我 + + + { + console.log('Get form value:',values,errors)} + } + >提交 + {console.log('reset form')}} + >重置 + +
    + ) + } + }`, opt: ['顶对齐'] + }, + { + code: `import React from 'react' + import { Grid, Button, Radio, Input, LegacyForm } from '@hi-ui/hiui' + + class Demo extends React.Component { + constructor() { + super() + this.form = React.createRef() + this.state = { + form: { + name: '', + region: '', + count: '' + }, + checkedIndex: -1, + rules: { + name: { + required: true, + message: 请输入名称, + trigger: 'onBlur,onChange' + }, + region: { + required: true, + message: '请选择区域', + trigger: 'onChange' + }, + count: { + required: true, + trigger: 'onChange', + validator: (rule, value, cb) => { + const count = +value + if(isNaN(count)) { + cb('请输入数字') + } else if(count <= 0) { + cb('必须是正数') + } else { + cb() + } + } + } + } + } + } + + handleSubmit() { + this.form.current.validate(valid => { + if(valid) { + console.log(this.state.form) + alert('submit') + } else { + console.log('error') + return false + } + }) + } + + cancelSubmit() { + this.setState({ + form: { + name: '', + region: '', + count: '' + } + }) + this.form.current.resetValidates() + } + + handleChange(key, e, value, index) { + this.setState({ + form: Object.assign({}, this.state.form, {[key]: value}) + }) + + if(index !== undefined) { + this.setState({ + checkedIndex: index + }) + } + } + + render(){ + const Row = Grid.Row + const Col = Grid.Col + const FormItem = LegacyForm.Item + const { form, checkedIndex } = this.state + + return ( + + + + + + + + + + + + + + + + + + + + ) + } + }`, + opt: ['v2'] } ] const DemoAlign = () => ( 请输入名称, - trigger: 'onBlur,onChange' - }, - region: { - required: true, - message: '请选择区域', - trigger: 'onChange' - }, - count: { - required: true, - trigger: 'onChange', - validator: (rule, value, cb) => { - const count = +value - if(isNaN(count)) { - cb('请输入数字') - } else if(count <= 0) { - cb('必须是正数') - } else { - cb() +const leftOptions = [ + '表单验证', + '校验指定表单项', + '填充表单', + '表单验证快捷用法' +] + +const desc = [ + '对表单数据域进行交互', + '控制表单项的值', + '表单项内容的格式、逻辑有特殊要求', + '可在Form中配置全部Item的rules,也可在Form.Item中使用rules校验单个表单项' +] +const code = [ + { + opt: ['表单验证'], + code: `import React from 'react' + import { Grid, Button, Radio, Input, Form } from '@hi-ui/hiui'\n + class Demo extends React.Component { + constructor() { + super() + this.form = React.createRef() + this.state = { + form: { + name: '', + region: '', + count: '' + }, + checkedIndex: -1, + rules: { + name: { + required: true, + message: 请输入名称, + trigger: 'onBlur,onChange' + }, + region: { + required: true, + message: '请选择区域', + trigger: 'onChange' + }, + count: { + required: true, + trigger: 'onChange', + validator: (rule, value, cb) => { + const count = +value + if(isNaN(count)) { + cb('请输入数字') + } else if(count <= 0) { + cb('必须是正数') + } else { + cb() + } + } } } } } - } - } - - handleSubmit() { - this.form.current.validate(valid => { - if(valid) { - console.log(this.state.form) - alert('submit') - } else { - console.log('error') - return false + + handleSubmit() { + this.form.current.validate((valid,error) => { + if(!error) { + console.log(valid) + alert('submit') + } else { + console.log('error',error) + return false + } + }) } - }) - } - - cancelSubmit() { - this.setState({ - form: { - name: '', - region: '', - count: '' + + cancelSubmit() { + this.setState({ + form: { + name: '', + region: '', + count: '' + } + }) + this.form.current.resetValidates() } - }) - this.form.current.resetValidates() - } - - handleChange(key, e, value, index) { - this.setState({ - form: Object.assign({}, this.state.form, {[key]: value}) - }) - - if(index !== undefined) { - this.setState({ - checkedIndex: index - }) - } - } - - render(){ - const Row = Grid.Row - const Col = Grid.Col - const FormItem = Form.Item - const { form, checkedIndex } = this.state - - return ( - - -
    - - + + + render(){ + const Row = Grid.Row + const Col = Grid.Col + const FormItem = Form.Item + const { form, checkedIndex } = this.state + + return ( + + + + + + + + + + + + + + + + + + + + ) + } + }` + }, + { + opt: ['校验指定表单项'], + code: `import React from 'react' + import { Form, Grid, Radio, Button, Input } from '@hi-ui/hiui' + class Demo extends React.Component { + constructor(props) { + super(props) + this.state = { + initialValues: { + phone: '', + select: '3', + }, + formData: '', + countDown: 60, + + codeDisabled: false + } + this.form = React.createRef() + + } + getCode () { + + let countDownTime + + countDownTime = setInterval(()=>{ + const {countDown} = this.state + if(countDown-1 <=0){ + clearInterval(countDownTime) + this.setState({ + countDown: false, + countDown: 60 + }) + return + } + this.setState({ + countDown: countDown-1 + }) + },1000) + } + render() { + const FormItem= Form.Item + const FormSubmit = Form.Submit + const FormReset = Form.Reset + const { initialValues, singleList, codeLoading, formData, codeDisabled, countDown } = this.state + const Row = Grid.Row + const Col = Grid.Col + + return ( +
    { + this.setState({ + formData: allValues, + }) + }} + > + { + const telReg = /^[1][3|4|5|6|7|8|9][0-9]{9}$/ + if (!value) { + callback('请输入手机号') + } else if (!telReg.test(value)) { + callback('请输入正确的手机号') + } else { + callback() + } + } + }} + > + - - + + + { + const telReg = /^[0-9]{6}$/ + if (!value) { + callback('请输入手机号') + } else if (!telReg.test(value)) { + callback('请输入正确的验证码') + } else { + callback() + } + } + }} + > + + + + + + + + { + const telReg = /^(?![^a-zA-Z]+$)(?!\\D+$).{8,16}$/ + if (!value) { + callback('请输入密码') + } else if (!telReg.test(value)) { + callback('请输入包括数字和字母、长度8到16位的密码组合') + } else { + callback() + } + } + }} + > + - - { + const {formData:{passWord}} = this.state + if (value !== passWord) { + callback('两次密码不同') + } else { + callback() + } + } + }} + > + + + + + { + console.log('Get form value:', values, errors) + }} + > + 提交 + + { + console.log('reset form') + }} + > + 重置 + + + + ) + } + }` + }, + { + opt: ['填充表单'], + code: `import React from 'react' + import { Form, Grid, Radio, Button, Input } from '@hi-ui/hiui'\n + class Demo extends React.Component { + constructor(props){ + super(props) + this.state = { + formData : { + phone: '', + select:'3' + }, + singleList: [ + { title:'电视', id:'3', disabled: true }, + { title:'手机', id:'2' }, + { title:'笔记本', id:'4', disabled: true }, + { title:'生活周边', id:'5' }, + { title:'办公', id:'6' }, + ], + + } + this.form = React.createRef() + } + render (){ + const FormItem = Form.Item + const FormSubmit = Form.Submit + const FormReset = Form.Reset + const {formData,singleList} = this.state + const Row = Grid.Row + const Col = Grid.Col + + return ( +
    + + + { + const telReg = /^[1][3|4|5|6|7|8|9][0-9]{9}$/ + if(!value){ + callback("请输入手机号") + } else if (!telReg.test(value)){ + callback("请输入正确的手机号") + } else { + callback() + } + }, + }}> + + + + + + Need Help? + + + + + + + + + + + + + + + + + + - - + { + console.log('Get form value:',values,errors)} + }> + 提交 + + + {console.log('reset form')}} > + 重置 +
    - -
    - ) + ) + } + }` } -}` +] + const DemoCloseable = () => ( { + console.log('changedValues,allValues',changedValues,allValues) + this.setState({ + formData: allValues, + }) + }} + > + + 动态表单 + + + + + ); + } + + return formItems + } + + render (){ + const FormItem = Form.Item + const FormSubmit = Form.Submit + const {filesCount} = this.state + return ( +
    +
    + { + this.renderField() + } +
    +
    + + + +
    +
    + ) + } + }` + } +] + +const DemoRow = () => ( + +) +export default DemoRow diff --git a/docs/demo/form/section-field.jsx b/docs/demo/form/section-field.jsx new file mode 100644 index 000000000..8030a8070 --- /dev/null +++ b/docs/demo/form/section-field.jsx @@ -0,0 +1,101 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import Form from '../../../components/form' +import Input from '../../../components/input' +import Checkbox from '../../../components/checkbox' +import Button from '../../../components/button' +const prefix = 'form-field' +const rightOptions = '字段嵌套输出' +const desc = ['根据field设置Form输出数据的内容格式'] +const code = `import React from 'react' + import { Form, Grid, Radio, Button, Input } from '@hi-ui/hiui'\n + class Demo extends React.Component { + constructor(props){ + super(props) + this.state = { + formData : { + phone: '', + password:'', + remember:true, + } + } + this.form = React.createRef() + } + render (){ + const FormItem = Form.Item + const FormSubmit = Form.Submit + const FormReset = Form.Reset + const {formData} = this.state + + return ( +
    { + console.log("changedValues:",changedValues ,"allValues:",allValues) + }} + > + { + const telReg = /^[1][3|4|5|6|7|8|9][0-9]{9}$/ + if(!value){ + callback("请输入手机号") + } else if (!telReg.test(value)){ + callback("请输入正确的手机号") + } else { + callback() + } + }, + }}> + + + + + + + { + console.log('checkbox remeber me') + }}> 记住我 + + + { + console.log('Get form value:',values,errors)} + } + >提交 + {console.log('reset form')}} + >重置 + +
    + ) + } + }` +const DemoAlign = () => ( + +) +export default DemoAlign diff --git a/docs/demo/form/section-list.jsx b/docs/demo/form/section-list.jsx new file mode 100644 index 000000000..521e94b88 --- /dev/null +++ b/docs/demo/form/section-list.jsx @@ -0,0 +1,391 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import Form from '../../../components/form/index' +import Input from '../../../components/input' +import Grid from '../../../components/grid' +import Radio from '../../../components/radio' +import Button from '../../../components/button' +import Select from '../../../components/select' +import Cascader from '../../../components/cascader' +import Icon from '../../../components/icon' +import DatePicker from '../../../components/date-picker' +const prefix = 'form-list' +const leftOptions = ['单表单项', '嵌套表单项'] +const desc = '动态更改表单项' +const code = [ + { + opt: ['单表单项'], + code: `import React from 'react' + import { Grid, Button, Radio, Input, Form } from '@hi-ui/hiui'\n + class Demo extends React.Component { + constructor() { + super() + this.form = React.createRef() + this.state = { + initialValues:{ + testList:['第一项','第二项'] + }, + rules: { + name: { + required: true, + message: 请输入名称, + trigger: 'onBlur,onChange' + }, + region: { + required: true, + message: '请选择区域', + trigger: 'onChange' + }, + count: { + required: true, + trigger: 'onChange', + validator: (rule, value, cb) => { + const count = +value + if(isNaN(count)) { + cb('请输入数字') + } else if(count <= 0) { + cb('必须是正数') + } else { + cb() + } + } + } + } + } + } + + handleSubmit() { + this.form.current.validate((valid,error) => { + if(!error) { + console.log(valid) + alert('submit') + } else { + console.log('error',error) + return false + } + }) + } + + cancelSubmit() { + this.setState({ + form: { + name: '', + region: '', + count: '' + } + }) + this.form.current.resetValidates() + } + + + render(){ + const Row = Grid.Row + const Col = Grid.Col + const FormItem = Form.Item + const FormList = Form.List + const FormSubmit = Form.Submit + const FormReset = Form.Reset + const {initialValues} = this.state + return ( + + +
    { + console.log( + 'changedValues:', + changedValues, + 'allValues:', + allValues + ) + }} + > + + {(fields, { add, remove }) => { + return ( +
    + {fields.map((field, index) => ( +
    + + + + + { + remove(field) + }} + /> + + +
    + ))} +
    + +
    +
    + ) + }} +
    + + + { + console.log('Get form value:', values, errors) + }} + > + 提交 + + { + console.log('reset form') + }} + > + 重置 + + + +
    + +
    + ) + } + }` + }, + { + opt: ['嵌套表单项'], + code: `import React from 'react' + import { Grid, Button, Radio, Input, Form } from '@hi-ui/hiui'\n + class Demo extends React.Component { + constructor() { + super() + this.form = React.createRef() + this.state = { + rules: { + name: { + required: true, + message: 请输入名称, + trigger: 'onBlur,onChange' + }, + region: { + required: true, + message: '请选择区域', + trigger: 'onChange' + }, + count: { + required: true, + trigger: 'onChange', + validator: (rule, value, cb) => { + const count = +value + if(isNaN(count)) { + cb('请输入数字') + } else if(count <= 0) { + cb('必须是正数') + } else { + cb() + } + } + } + } + } + } + + handleSubmit() { + this.form.current.validate((valid,error) => { + if(!error) { + console.log(valid) + alert('submit') + } else { + console.log('error',error) + return false + } + }) + } + + cancelSubmit() { + this.setState({ + form: { + name: '', + region: '', + count: '' + } + }) + this.form.current.resetValidates() + } + + + render(){ + const Row = Grid.Row + const Col = Grid.Col + const FormItem = Form.Item + const FormList = Form.List + const FormSubmit = Form.Submit + const FormReset = Form.Reset + + return ( + + +
    { + console.log( + 'changedValues:', + changedValues, + 'allValues:', + allValues + ) + }} + > + + {(fields, { add, remove }) => { + return ( +
    + {fields.map((field, index) => ( +
    + + + + + + + { + remove(field) + }} + /> +
    + ))} +
    + +
    +
    + ) + }} +
    + + + { + console.log('Get form value:', values, errors) + }} + > + 提交 + + { + console.log('reset form') + }} + > + 重置 + + + +
    + +
    + ) + } + }` + } +] +const DemoCloseable = () => ( + +) +export default DemoCloseable diff --git a/docs/demo/form/section-schema.jsx b/docs/demo/form/section-schema.jsx new file mode 100644 index 000000000..95598b63f --- /dev/null +++ b/docs/demo/form/section-schema.jsx @@ -0,0 +1,370 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import Form from '../../../components/form/index' +import Input from '../../../components/input' +import Button from '../../../components/button' +import Select from '../../../components/select' +import Counter from '../../../components/counter' +import Cascader from '../../../components/cascader' +import Radio from '../../../components/radio' +import Checkbox from '../../../components/checkbox' +import Switch from '../../../components/switch' +import DatePicker from '../../../components/date-picker' +import Rate from '../../../components/rate' +import Upload from '../../../components/upload' +import Grid from '../../../components/grid' + +const prefix = 'form-schema' +const desc = '通过schema配置表单,现仅支持HiUI组件' +const leftOptions = ['基础用法', '动态表单', '与FormItem混用'] + +const code = [ + { + opt: ['基础用法'], + code: `import React from 'react' + import { Form,Counter} from '@hi-ui/hiui'\n + class Demo extends React.Component { + constructor(props){ + super(props) + this.state = { + initialValues : { + inputField: 'test schema', + selectField: "3", + }, + formSchema:[ + { + label:'输入框', + field:'inputField', + rules:[{ min: 5, max: 16, message: '长度在 6 到 16 个字符', trigger: 'onBlur' }], + component:'Input', + componentProps:{ + placeholder:'schema', + clearable:true, + style:{ width: 300 } + } + }, + { + label:'下拉框', + field:'selectField', + component:'Select', + required:true, + componentProps:{ + placeholder:'schema', + style:{ width: 300 }, + data:[ + { title:'电视', id:'3', disabled: true }, + { title:'手机', id:'2' }, + { title:'笔记本', id:'4', disabled: true }, + { title:'生活周边', id:'5' }, + { title:'办公', id:'6' } + ], + } + }, + { + label:'复选框', + field:'Checkbox', + component:'Checkbox.Group', + required:true, + componentProps:{ + placeholder:'schema', + data:[{ + content: '手机', + id: 'Phone' + },{ + content: '电脑', + id: 'Computer' + },{ + content: '智能', + id: 'Intelli' + },{ + content: '出行', + id: 'Transfer', + disabled: true + }], + onChange:(data) => console.log("Checkbox data",data) + } + }, + { + label:'日期', + field:'datePicker', + component:'DatePicker', + required:true, + componentProps:{ + type:'daterange', + format:'yyyy-MM-dd', + onChange:(date, dateStr) => {console.log('onChange DatePicker', date, dateStr)} + } + } + ] + } + } + render () { + const SchemaForm = Form.SchemaForm + const {initialValues} = this.state + + return ( + {console.log('value,errors', value,errors)} + }} + reset={{ + type:'line', + children:'重置', + onClick:() => {console.log('reset form')} + }} + onValuesChange ={(changedValues,allValues) => { + console.log("formdata",changedValues,allValues) + }} + /> + ) + } + }` + }, + { + opt: ['动态表单'], + code: `import React from 'react' + + import { Form,Counter} from '@hi-ui/hiui'\n + + class Demo extends React.Component { + constructor(props){ + super(props) + this.state = { + initialValues : { + inputField: 'test schema', + selectField: "3", + radio:'show' + }, + formData:{ + inputField: 'test schema', + selectField: "3", + }, + formSchema:[ + { + label:'输入框', + field:'inputField', + rules:[{ min: 5, max: 16, message: '长度在 6 到 16 个字符', trigger: 'onBlur' }], + component:'Input', + componentProps:{ + placeholder:'schema', + clearable:true, + style:{ width: 300 } + } + }, + { + label:'下拉框', + field:'selectField', + component:'Select', + required:true, + componentProps:{ + placeholder:'schema', + style:{ width: 300 }, + data:[ + { title:'电视', id:'3', disabled: true }, + { title:'手机', id:'2' }, + { title:'笔记本', id:'4', disabled: true }, + { title:'生活周边', id:'5' }, + { title:'办公', id:'6' } + ], + } + }, + { + label:'控制日期', + field:'radio', + component:'Radio.Group', + required:true, + componentProps:{ + data:[{ + content: '显示日期', + id: 'show' + },{ + content: '隐藏日期', + id: 'hide' + }], + onChange:(data) => console.log("Radio data",data) + } + }, + { + label:'日期', + field:'datePicker', + component:'DatePicker', + required:true, + componentProps:{ + type:'daterange', + format:'yyyy-MM-dd', + onChange:(date, dateStr) => {console.log('onChange DatePicker', date, dateStr)} + } + } + ] + } + this.initSchemaData = this.state.formSchema + this.form = React.createRef() + } + + render () { + const {initialValues, formData, formSchema} = this.state + const SchemaForm = Form.SchemaForm + + return ( + {console.log('value,errors', value,errors)} + }} + reset={{ + type:'line', + children:'重置', + onClick:() => {console.log('reset form')} + }} + onValuesChange ={(changedValues,allValues) => { + // console.log("formdata",changedValues,allValues,this.form.current.validate()) + this.setState({ + formData: allValues + }) + if(changedValues.radio && changedValues.radio === 'hide'){ + this.setState({ + formSchema: formSchema.filter((item)=>{ + return item.field !== 'datePicker' + }) + }) + } else { + this.setState({ + formSchema: this.initSchemaData + }) + } + }} + /> + ) + } + }` + }, + { + opt: ['与FormItem混用'], + code: `import React from 'react' + import { Form,Counter} from '@hi-ui/hiui'\n + class Demo extends React.Component { + constructor(props){ + super(props) + this.state = { + formData : { + inputField: 'test schema', + selectField: "3", + counter:1, + date:'', + }, + formSchema:[ + { + label:'输入框', + field:'inputField', + rules:[{ min: 5, max: 16, message: '长度在 6 到 16 个字符', trigger: 'onBlur' }], + component:'Input', + componentProps:{ + placeholder:'schema', + clearable:true, + } + }, + { + label:'下拉框', + field:'selectField', + component:'Select', + required:true, + componentProps:{ + placeholder:'schema', + data:[ + { title:'电视', id:'3', disabled: true }, + { title:'手机', id:'2' }, + { title:'笔记本', id:'4', disabled: true }, + { title:'生活周边', id:'5' }, + { title:'办公', id:'6' } + ], + } + } + ] + } + } + render () { + const FormItem = Form.Item + const FormSubmit = Form.Submit + const FormReset = Form.Reset + const SchemaForm = Form.SchemaForm + + const {formData} = this.state + const Row = Grid.Row + const Col = Grid.Col + return ( + { + console.log("formdata",changedValues,allValues) + }} + > + {console.log('onChange DatePicker', date, dateStr)} + }} + /> + + + + + { + console.log('Get form value:',values,errors)} + } + >提交 + {console.log('reset form')}} + >重置 + + + ) + } + }` + } +] + +const DemoRow = () => ( + +) +export default DemoRow diff --git a/docs/demo/form/section-synthetic.jsx b/docs/demo/form/section-synthetic.jsx new file mode 100644 index 000000000..3599013d8 --- /dev/null +++ b/docs/demo/form/section-synthetic.jsx @@ -0,0 +1,331 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import Form from '../../../components/form/index' +import Input from '../../../components/input' +import Button from '../../../components/button' +import Select from '../../../components/select' +import Counter from '../../../components/counter' +import Cascader from '../../../components/cascader' +import Radio from '../../../components/radio' +import Checkbox from '../../../components/checkbox' +import Switch from '../../../components/switch' +import DatePicker from '../../../components/date-picker' +import Rate from '../../../components/rate' +import Upload from '../../../components/upload' +import Grid from '../../../components/grid' + +const prefix = 'form-synthetic' +const desc = '展示和表单相关的其他组件' +const code = `import React from 'react' +import { Form, Grid, Button, Input, Select, Counter, Cascader, Radio, Checkbox, Switch, DatePicker, Rate, Upload } from '@hi-ui/hiui'\n +class Demo extends React.Component { + constructor(props){ + super(props) + this.state = { + formData : { + phone: '', + select:'3', + counter:3, + radio:0, + rate:3, + checkbox:[], + switch:false + }, + singleList: [ + { title:'电视', id:'3', disabled: true }, + { title:'手机', id:'2' }, + { title:'笔记本', id:'4', disabled: true }, + { title:'生活周边', id:'5' }, + { title:'办公', id:'6' }, + ], + radiolist: [{ + id: 0, + content: '手机类' + }, { + id: 1, + content: '电脑类' + }, { + id: 2, + content: '生活类' + }], + checkboxList: [{ + content: '手机', + id: 'Phone' + },{ + content: '电脑', + id: 'Computer' + },{ + content: '智能', + id: 'Intelli' + },{ + content: '出行', + id: 'Transfer', + disabled: true + }], + cascaderList:[ + { + id: '手机', + content: '手机', + children: [ + { + id: '小米', + content: '小米', + children: [ + { + id: '小米3', + content: '小米3' + }, + { + id: '小米4', + content: '小米4' + }, + ] + }, + { + id: '红米', + content: '红米', + children: [ + { + id: '红米3', + content: '红米3' + }, + { + id: '红米4', + content: '红米4' + } + ] + } + ] + }, + { + id: '电视', + content: '电视', + children: [ + { + id: '小米电视4A', + content: '小米电视4A' + }, + { + id: '小米电视4C', + content: '小米电视4C' + } + ] + } + ] + } + this.form = React.createRef() + } + render (){ + const FormItem = Form.Item + const FormSubmit = Form.Submit + const FormReset = Form.Reset + const {formData,singleList,cascaderList,radiolist,checkboxList} = this.state + const Row = Grid.Row + const Col = Grid.Col + return ( +
    + +

    组合表单

    +
    + { + const telReg = /^[1][3|4|5|6|7|8|9][0-9]{9}$/ + if(!value){ + callback("请输入手机号") + } else if (!telReg.test(value)){ + callback("请输入正确的手机号") + } else { + callback() + } + }, + }}> + + + + + + + + { + console.log('Cascader change id', id) + }} + data={cascaderList} + style={{ width: 300 }} + /> + + + console.log("Checkbox data",data)}/> + + + + + { + console.log('select ids',ids) + }} + /> + + + + + + + - - - + - + @@ -87,29 +66,29 @@ class Demo extends React.Component { const Col = Grid.Col const FormItem = Form.Item return ( -
    +
    - + - + - + - + @@ -129,7 +108,7 @@ class Demo extends React.Component { const DemoRow = () => ( { + const { FormWrapper, FormInstance, FormItem } = Form.useForm() + + return ( + <> + + { + const telReg = /^[1][3|4|5|6|7|8|9][0-9]{9}$/ + if (!value) { + callback('请输入手机号') + } else if (!telReg.test(value)) { + callback('请输入正确的手机号') + } else { + callback() + } + } + }} + > + + + +
    + + + + + +
    + + ) +}` + +const DemoRow = () => ( + +) +export default DemoRow diff --git a/docs/demo/icon/section-base.jsx b/docs/demo/icon/section-base.jsx index 842cc2085..311b88b64 100644 --- a/docs/demo/icon/section-base.jsx +++ b/docs/demo/icon/section-base.jsx @@ -1,6 +1,7 @@ import React from 'react' import DocViewer from '../../../libs/doc-viewer' import Icon from '../../../components/icon' + const prefix = 'icon-base' const code = `import React from 'react' import Icon from '@hi-ui/hiui/es/icon'\n @@ -8,9 +9,9 @@ class Demo extends React.Component { render () { return (
    - - - + + +
    ) diff --git a/docs/demo/input/section-keyEvent.jsx b/docs/demo/input/section-keyEvent.jsx new file mode 100644 index 000000000..407861867 --- /dev/null +++ b/docs/demo/input/section-keyEvent.jsx @@ -0,0 +1,40 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import Input from '../../../components/input' +const prefix = 'input-keyEvent' +const desc = '调用键盘事件,方便操作' +const code = `import React from 'react' +import Grid from '@hi-ui/hiui/es/grid' +import Input from '@hi-ui/hiui/es/input'\n +class Demo extends React.Component { + constructor(){ + super() + this.state = { + value:'' + } + } + render() { + const {value} = this.state + return ( + { + const evt = window.event || e + console.log('keyboard key:',evt.key, 'keyCode:',evt.keyCode) + }} + onChange={(e)=>{ + this.setState({ + value: e.target.value + }) + }} + /> + ) + } +}` + +const DemoType = () => ( + +) +export default DemoType diff --git a/docs/demo/input/section-position.jsx b/docs/demo/input/section-position.jsx index 29537c2bf..9e810e5e8 100644 --- a/docs/demo/input/section-position.jsx +++ b/docs/demo/input/section-position.jsx @@ -6,11 +6,13 @@ import Radio from '../../../components/radio' import Select from '../../../components/select' import Button from '../../../components/button' import Message from '../../../components/message' +import Icon from '../../../components/icon' const prefix = 'input-position' const desc = '将输入与其他元素组合使用' -const leftOptions = ['前置', '后置'] -const code = [{ - code: `import React from 'react' +const leftOptions = ['前置', '后置', '前后置'] +const code = [ + { + code: `import React from 'react' import Button from '@hi-ui/hiui/es/button' import Input from '@hi-ui/hiui/es/input'\n class Demo extends React.Component { @@ -27,8 +29,10 @@ class Demo extends React.Component { />) } }`, - opt: ['后置']}, { - code: `import React from 'react' + opt: ['后置'] + }, + { + code: `import React from 'react' import Select from '@hi-ui/hiui/es/select' import Message from '@hi-ui/hiui/es/message' import Input from '@hi-ui/hiui/es/input'\n @@ -59,14 +63,42 @@ class Demo extends React.Component { />) } }`, - opt: ['前置'] -}] + opt: ['前置'] + }, + { + code: `import React from 'react' +import Select from '@hi-ui/hiui/es/select' +import Message from '@hi-ui/hiui/es/message' +import Input from '@hi-ui/hiui/es/input'\n +class Demo extends React.Component { + constructor () { + super() + + } + render() { + return ( +
    + +
    + ) + } +}`, + opt: ['前后置'] + } +] const DemoPosition = () => ( ) diff --git a/docs/demo/input/section-state.jsx b/docs/demo/input/section-state.jsx index 9f76b7a91..b42dd4439 100644 --- a/docs/demo/input/section-state.jsx +++ b/docs/demo/input/section-state.jsx @@ -4,10 +4,12 @@ import Grid from '../../../components/grid' import Input from '../../../components/input' import Radio from '../../../components/radio' import Button from '../../../components/button' -const leftOptions = ['基础', '默认值', '禁用', '可清除','自动聚焦','手动聚焦'] +const leftOptions = ['基础', '默认值', '禁用', '可清除', '自动聚焦', '手动聚焦'] const prefix = 'input-state' const desc = '可获取有限长度的字符串,不折行显示' -const code = [{code: `import React from 'react' +const code = [ + { + code: `import React from 'react' import Grid from '@hi-ui/hiui/es/grid' import Radio from '@hi-ui/hiui/es/radio' import Input from '@hi-ui/hiui/es/input'\n @@ -21,8 +23,10 @@ class Demo extends React.Component { ) } }`, -opt: ['基础']}, -{code: `import React from 'react' + opt: ['基础'] + }, + { + code: `import React from 'react' import Grid from '@hi-ui/hiui/es/grid' import Radio from '@hi-ui/hiui/es/radio' import Input from '@hi-ui/hiui/es/input'\n @@ -37,9 +41,10 @@ class Demo extends React.Component { ) } }`, -opt: ['禁用']}, -{ - code: `import React from 'react' + opt: ['禁用'] + }, + { + code: `import React from 'react' import Grid from '@hi-ui/hiui/es/grid' import Radio from '@hi-ui/hiui/es/radio' import Input from '@hi-ui/hiui/es/input'\n @@ -54,10 +59,10 @@ class Demo extends React.Component { ) } }`, -opt: ['默认值'] -}, -{ - code: `import React from 'react' + opt: ['默认值'] + }, + { + code: `import React from 'react' import Grid from '@hi-ui/hiui/es/grid' import Radio from '@hi-ui/hiui/es/radio' import Input from '@hi-ui/hiui/es/input'\n @@ -73,10 +78,10 @@ class Demo extends React.Component { ) } }`, -opt: ['自动聚焦'] -}, -{ - code: `import React from 'react' + opt: ['自动聚焦'] + }, + { + code: `import React from 'react' import Grid from '@hi-ui/hiui/es/grid' import Radio from '@hi-ui/hiui/es/radio' import Input from '@hi-ui/hiui/es/input'\n @@ -105,9 +110,10 @@ class Demo extends React.Component { ) } }`, -opt: ['手动聚焦'] -}, -{code: `import React from 'react' + opt: ['手动聚焦'] + }, + { + code: `import React from 'react' import Grid from '@hi-ui/hiui/es/grid' import Radio from '@hi-ui/hiui/es/radio' import Input from '@hi-ui/hiui/es/input'\n @@ -122,14 +128,10 @@ class Demo extends React.Component { ) } }`, -opt: ['可清除']}] + opt: ['可清除'] + } +] const DemoState = () => ( - + ) export default DemoState diff --git a/docs/demo/input/section-tooltip.jsx b/docs/demo/input/section-tooltip.jsx new file mode 100644 index 000000000..1bc350020 --- /dev/null +++ b/docs/demo/input/section-tooltip.jsx @@ -0,0 +1,45 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import Input from '../../../components/input' +import Tooltip from '../../../components/tooltip' +const prefix = 'input-tooltip' +const desc = '结合 Tooltip 组件,方便内容超长时的全量展现。' +const code = `import React from 'react' +import Grid from '@hi-ui/hiui/es/grid' +import Input from '@hi-ui/hiui/es/input'\n +import Tooltip from '@hi-ui/hiui/es/tooltip'\n +class Demo extends React.Component { + constructor(){ + super() + this.state = { + value:'' + } + } + render() { + const {value} = this.state + return ( + + { + this.setState({ + value: e.target.value + }) + }} + /> + + ) + } +}` + +const DemoType = () => ( + +) +export default DemoType diff --git a/docs/demo/list/section-base.jsx b/docs/demo/list/section-base.jsx new file mode 100755 index 000000000..3a7272869 --- /dev/null +++ b/docs/demo/list/section-base.jsx @@ -0,0 +1,98 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import List from '../../../components/list' +const prefix = 'list-base' +const desc = '常用在数据管理、信息展示等领域' +const rightOptions = ['基础用法', '不带分割线'] +const code = [ + { + code: `import React from 'react' + import List from '@hi-ui/hiui/es/list'\n + class Demo extends React.Component { + constructor(props) { + super(props) + this.state = { + data: [ + { + title: '设备采购申请', + titleTag: '已通过', + titleTagType: 'success', + extra:['申请编号:YH7290121','申请人:张某某','申请时间:2019-02-11','申请部门:信息部-用户体验组'] + }, + { + title: '2019年第一季度考核统计表', + titleTag: '已驳回', + titleTagType: 'danger', + extra:['申请编号:YH7290121','申请人:张某某','申请时间:2019-02-11'] + } + ] + } + } + render () { + const {data} = this.state + return ( + { + const { Item } = List + return + }} + /> + ) + } + }`, + opt: ['基础用法'] + }, + { + code: `import React from 'react' + import List from '@hi-ui/hiui/es/list'\n + class Demo extends React.Component { + constructor(props) { + super(props) + this.state = { + data: [ + { + title: '设备采购申请', + titleTag: '已通过', + titleTagType: 'success', + extra:['申请编号:YH7290121','申请人:张某某','申请时间:2019-02-11','申请部门:信息部-用户体验组'] + }, + { + title: '2019年第一季度考核统计表', + titleTag: '已驳回', + titleTagType: 'danger', + extra:['申请编号:YH7290121','申请人:张某某','申请时间:2019-02-11'] + } + ] + } + } + render () { + const {data} = this.state + return ( + { + const { Item } = List + return + }} + /> + ) + } + }`, + opt: ['不带分割线'] + } +] + +const DemoBase = () => ( + +) +export default DemoBase diff --git a/docs/demo/list/section-img.jsx b/docs/demo/list/section-img.jsx new file mode 100755 index 000000000..554ef55c8 --- /dev/null +++ b/docs/demo/list/section-img.jsx @@ -0,0 +1,64 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import List, { IconText } from '../../../components/list' +import Button from '../../../components/button' +import Icon from '../../../components/Icon' +const prefix = 'list-img' +const desc = '常用在功能、模块、话题、实体信息等使用' +const code = `import React from 'react' +import List,{ IconText } from '@hi-ui/hiui/es/list' +import Button from '@hi-ui/hiui/es/button' +import Icon from '@hi-ui/hiui/es/icon' +class Demo extends React.Component { + constructor(props) { + super(props) + this.state = { + data: [ + { + title: '设备采购申请', + description: '下单量在交易环节中整体用户下单的数量', + extra: '最新使用:2019.12.23 下午07:07', + avatar: 'http://infra.mioffice.cn/hiui/static/img/logo.png' + }, + { + title: '设备采购申请', + description: '下单量在交易环节中整体用户下单的数量', + extra: '最新使用:2019.12.23 下午07:07', + avatar: 'http://infra.mioffice.cn/hiui/static/img/logo.png' + } + ] + } + } + render () { + const {data} = this.state + return ( + { + const { Item } = List + return + }} + action={() => { + return ( + + ) + }} + /> + ) + } +}` + +const DemoBase = () => ( + +) +export default DemoBase diff --git a/docs/demo/list/section-info-flow.jsx b/docs/demo/list/section-info-flow.jsx new file mode 100755 index 000000000..f1bfc2bd0 --- /dev/null +++ b/docs/demo/list/section-info-flow.jsx @@ -0,0 +1,180 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import List, { IconText } from '../../../components/list' +import Radio from '../../../components/radio' +const prefix = 'list-flow' +const desc = '常用在搜索、动态发布信息流、附件等场景' +const rightOptions = ['基础用法', '带有分页'] + +const code = [ + { + code: `import React from 'react' + import List,{ IconText } from '@hi-ui/hiui/es/list'\n + import Radio from '@hi-ui/hiui/es/radio' + class Demo extends React.Component { + constructor(props) { + super(props) + this.state = { + actionPosition:'bottom', + data: [ + { + title: '下单量-指标', + description: '下单量在交易环节中整体用户下单的数量', + extra: '最新使用:2019.12.23 下午07:07', + + }, + { + title: '下单量-指标', + description: '下单量在交易环节中整体用户下单的数量', + extra: '最新使用:2019.12.23 下午07:07', + }, + ], + list:[{ + id: 'top', + content: '操作居上' + }, { + id: 'center', + content: '操作居中', + }, { + id: 'bottom', + content: '操作居下' + }] + } + + } + render () { + const {data,actionPosition,list} = this.state + return ( +
    + { + this.setState({ + actionPosition:data + }) + }} + /> + { + const { Item } = List + return + }} + action={dataItem => { + return ( +
    + + + +
    + ) + }} + /> +
    + + ) + } + }`, + opt: ['基础用法'] + }, + { + code: `import React from 'react' + import List,{ IconText } from '@hi-ui/hiui/es/list'\n + import Radio from '@hi-ui/hiui/es/radio' + + class Demo extends React.Component { + constructor(props) { + super(props) + this.state = { + position:'right', + data: [ + { + title: '下单量-指标', + description: '下单量在交易环节中整体用户下单的数量', + extra: '最新使用:2019.12.23 下午07:07', + + }, + { + title: '下单量-指标', + description: '下单量在交易环节中整体用户下单的数量', + extra: '最新使用:2019.12.23 下午07:07', + }, + ], + list:[{ + id: 'left', + content: '分页居左' + }, { + id: 'middle', + content: '分页居中', + }, { + id: 'right', + content: '分页居右' + }] + } + } + render () { + const {data,list,position} = this.state + return ( +
    + { + this.setState({ + position:data + }) + }} + /> + { + const { Item } = List + return + }} + pagination={{ + total:200, + pageSize:10, + position:position + }} + action={dataItem => { + return ( +
    + + + +
    + ) + }} + /> +
    + ) + } + }`, + opt: ['带有分页'] + } +] + +const DemoBase = () => ( + +) +export default DemoBase diff --git a/docs/demo/loading/section-api.jsx b/docs/demo/loading/section-api.jsx index 05fbaa252..417b8e1dc 100755 --- a/docs/demo/loading/section-api.jsx +++ b/docs/demo/loading/section-api.jsx @@ -1,7 +1,7 @@ import React from 'react' import DocViewer from '../../../libs/doc-viewer' import Button from '../../../components/button' -import Panel from '../../../components/panel' +import Card from '../../../components/card' import Loading from '../../../components/loading' const prefix = 'loading-api' const code = `import React from 'react' @@ -33,7 +33,7 @@ class Demo extends React.Component {
    {this.el = el}} style={{margin: 20}}> - @@ -42,10 +42,10 @@ class Demo extends React.Component { } >

    Panel content

    -
    +
    } }` -const DemoApi = () => +const DemoApi = () => export default DemoApi diff --git a/docs/demo/menu/section-fat.jsx b/docs/demo/menu/section-fat.jsx index 803d8622c..b4853e09e 100644 --- a/docs/demo/menu/section-fat.jsx +++ b/docs/demo/menu/section-fat.jsx @@ -11,7 +11,7 @@ class Demo extends React.Component { { content: '电视', id: 1, - icon: 'internet' + icon: 'global' }, { content: '小米MIX', diff --git a/docs/demo/menu/section-row.jsx b/docs/demo/menu/section-row.jsx index a58757444..dc2373755 100644 --- a/docs/demo/menu/section-row.jsx +++ b/docs/demo/menu/section-row.jsx @@ -11,7 +11,7 @@ class Demo extends React.Component { { content: '电视', id: 1, - icon: 'internet' + icon: 'global' }, { content: '小米MIX', @@ -106,11 +106,6 @@ class Demo extends React.Component { } }` const DemoRow = () => ( - + ) export default DemoRow diff --git a/docs/demo/menu/section-vertical.jsx b/docs/demo/menu/section-vertical.jsx index e9ad24eb9..cce95ab1a 100644 --- a/docs/demo/menu/section-vertical.jsx +++ b/docs/demo/menu/section-vertical.jsx @@ -230,7 +230,7 @@ class Demo extends React.Component { }, { content: '小米MIX', - icon: 'internet', + icon: 'global', id: 2 }, { diff --git a/docs/demo/message/section-base.jsx b/docs/demo/message/section-base.jsx index f8020b47f..78c0e43f9 100755 --- a/docs/demo/message/section-base.jsx +++ b/docs/demo/message/section-base.jsx @@ -18,17 +18,10 @@ class Demo extends React.Component { open() { Message.open({ - title:'网络错误,清重新连接' + title:'正在加载,请耐心等待' }) } }` -const DemoBase = () => ( - -) +const DemoBase = () => export default DemoBase diff --git a/docs/demo/message/section-delay.jsx b/docs/demo/message/section-delay.jsx index d8072e6a4..9eeec8c92 100755 --- a/docs/demo/message/section-delay.jsx +++ b/docs/demo/message/section-delay.jsx @@ -24,12 +24,5 @@ class Demo extends React.Component { } }` -const DemoDealy = () => ( - -) +const DemoDealy = () => export default DemoDealy diff --git a/docs/demo/message/section-type.jsx b/docs/demo/message/section-type.jsx index b61bc42b0..c28f15acb 100755 --- a/docs/demo/message/section-type.jsx +++ b/docs/demo/message/section-type.jsx @@ -21,13 +21,13 @@ class Demo extends React.Component { openSuccess() { Message.open({ type:'success', - title:'网络错误,清重新连接' + title:'操作成功' }) } openError() { Message.open({ type:'error', - title:'网络错误,清重新连接' + title:'网络错误,请重新连接' }) } openWarning() { @@ -38,12 +38,5 @@ class Demo extends React.Component { } }` -const DemoType = () => ( - -) +const DemoType = () => export default DemoType diff --git a/docs/demo/modal/section-base.jsx b/docs/demo/modal/section-base.jsx index 4634a7e9c..fb15fcd2f 100644 --- a/docs/demo/modal/section-base.jsx +++ b/docs/demo/modal/section-base.jsx @@ -38,5 +38,7 @@ class Demo extends React.Component { } }` -const DemoBase = () => +const DemoBase = () => ( + +) export default DemoBase diff --git a/docs/demo/modal/section-btn.jsx b/docs/demo/modal/section-btn.jsx index 01047a9b3..99a959f6f 100644 --- a/docs/demo/modal/section-btn.jsx +++ b/docs/demo/modal/section-btn.jsx @@ -46,7 +46,5 @@ class Demo extends React.Component { ) } }` -const DemoBtn = () => ( - -) +const DemoBtn = () => export default DemoBtn diff --git a/docs/demo/modal/section-size.jsx b/docs/demo/modal/section-size.jsx index 10fa7820c..c39950148 100644 --- a/docs/demo/modal/section-size.jsx +++ b/docs/demo/modal/section-size.jsx @@ -3,7 +3,8 @@ import DocViewer from '../../../libs/doc-viewer' import Button from '../../../components/button' import Modal from '../../../components/modal' import Radio from '../../../components/radio' -const desc = '通过 size 自定义尺寸,可使用 large、default、small,默认为 default' +const desc = + '通过 size 自定义尺寸,可使用 large、default、small,默认为 default' const prefix = 'modal-size' const code = `import React from 'react' import Button from '@hi-ui/hiui/es/button' @@ -56,7 +57,7 @@ class Demo extends React.Component { 一些消息 @@ -68,6 +69,11 @@ class Demo extends React.Component { } }` const DemoSize = () => ( - + ) export default DemoSize diff --git a/docs/demo/modal/section-tip.jsx b/docs/demo/modal/section-tip.jsx index b55a1c307..93b37bb03 100644 --- a/docs/demo/modal/section-tip.jsx +++ b/docs/demo/modal/section-tip.jsx @@ -43,7 +43,7 @@ class Demo extends React.Component { ]} >
    - +
    错误标题
    错误原因错误原因错误原因错误原因错误原因 @@ -59,7 +59,7 @@ class Demo extends React.Component { ]} >
    - +
    警告标题
    警告具体内容警告具体内容警告具体内容警告具体内容警告具体内容警告具体内容警告具体内容 diff --git a/docs/demo/popover/section-base.jsx b/docs/demo/popover/section-base.jsx index 9758c752d..adbaa1228 100644 --- a/docs/demo/popover/section-base.jsx +++ b/docs/demo/popover/section-base.jsx @@ -13,9 +13,11 @@ class Demo extends React.Component { const content = (

    Vivamus sagittis lacus vel augue laoreet rutrum faucibus.

    +

    Vivamus sagittis lacus vel augue laoreet rutrum faucibus.

    +
    ) - + return (
    diff --git a/docs/demo/popover/section-mix.jsx b/docs/demo/popover/section-mix.jsx new file mode 100644 index 000000000..cc4535414 --- /dev/null +++ b/docs/demo/popover/section-mix.jsx @@ -0,0 +1,88 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import Popover from '../../../components/popover' +import Button from '../../../components/button' +const prefix = 'Popover-mix' +const desc = '显示如何创建可悬停和单击的弹出窗口' +const code = `import React from 'react' +import Button from '@hi-ui/hiui/es/button' +import Popover from '@hi-ui/hiui/es/popover'\n +class Demo extends React.Component { + constructor(props){ + super(props) + this.state={ + hoverVisible: false, + clickVisible: false + } + } + render() { + const {hoverVisible,clickVisible} = this.state + const title = Popover Title + const contentHover = ( +
    +

    This is hover content.

    +
    + ) + const contentClick = ( +
    +

    This is click content

    + { + this.setState({ + clickVisible: false, + }) + }} + > + Close + +
    + ) + + return ( +
    + + + + + + +
    + ) + } +}` + +const DemoBase = () => ( + +) +export default DemoBase diff --git a/docs/demo/progress/section-active.jsx b/docs/demo/progress/section-active.jsx index 61aa252dd..a558c98c1 100644 --- a/docs/demo/progress/section-active.jsx +++ b/docs/demo/progress/section-active.jsx @@ -31,5 +31,12 @@ class Demo extends React.Component { ) } }` -const DemoActive = () => +const DemoActive = () => ( + +) export default DemoActive diff --git a/docs/demo/progress/section-circle.jsx b/docs/demo/progress/section-circle.jsx index 2b69acf14..f7235dc42 100644 --- a/docs/demo/progress/section-circle.jsx +++ b/docs/demo/progress/section-circle.jsx @@ -16,15 +16,15 @@ class Demo extends React.Component { typeList:[ { id:'large', - content:'大号' + content:'大号' }, { id:'default', - content:'中号' + content:'中号' }, { id:'small', - content:'小号' + content:'小号' } ], position:'large', @@ -65,36 +65,28 @@ class Demo extends React.Component { /> - - + +
    - } /> + }/>
    - }/> -
    + }/> +
    - }/> + } />
    - - - + +
    ) } }` -const DemoCircle = () => ( - -) +const DemoCircle = () => export default DemoCircle diff --git a/docs/demo/radio/section-vertical.jsx b/docs/demo/radio/section-vertical.jsx index c2e68964e..cebdacdbf 100644 --- a/docs/demo/radio/section-vertical.jsx +++ b/docs/demo/radio/section-vertical.jsx @@ -31,11 +31,6 @@ class Demo extends React.Component { } }` const DemoVertical = () => ( - + ) export default DemoVertical diff --git a/docs/demo/rate/section-advanced.jsx b/docs/demo/rate/section-advanced.jsx index f058ef170..8c3456421 100644 --- a/docs/demo/rate/section-advanced.jsx +++ b/docs/demo/rate/section-advanced.jsx @@ -1,26 +1,33 @@ import React from 'react' import DocViewer from '../../../libs/doc-viewer' -import Form from '../../../components/form/index' -import FormItem from '../../../components/form/Item' +import { LegacyForm } from '../../../components/form' import Rate from '../../../components/rate' +import Icon from '../../../components/Icon' const prefix = 'rate-advanced' const code = `import React from 'react' import Rate from '@hi-ui/hiui/es/rate' -import Form from '@hi-ui/hiui/es/form/index' +import LegacyForm from '@hi-ui/hiui/es/form' +import Icon from '@hi-ui/hiui/es/icon' import FormItem from '@hi-ui/hiui/es/form/item'\n + class Demo extends React.Component { constructor() { super() this.state = { value: 3 } - this.tooltips = ['terrible', 'bad', 'normal', 'good', 'wonderful'] + this.tooltips = ['极差','失望', '一般', '满意','很满意'] } + descRender (value, index) { + const arr =['极差','失望', '一般', '满意','很满意'] + return {arr[Math.ceil(value)-1]} ; + } render() { const { value } = this.state + const FormItem = LegacyForm.Item return ( - + @@ -32,18 +39,20 @@ class Demo extends React.Component { + + + - + + + + ) } }` const DemoAdvanced = () => ( - + ) export default DemoAdvanced diff --git a/docs/demo/rate/section-base.jsx b/docs/demo/rate/section-base.jsx index 4dc3d265e..e68da83c7 100644 --- a/docs/demo/rate/section-base.jsx +++ b/docs/demo/rate/section-base.jsx @@ -1,35 +1,44 @@ import React from 'react' import DocViewer from '../../../libs/doc-viewer' -import Form from '../../../components/form/index' -import FormItem from '../../../components/form/Item' +import { LegacyForm } from '../../../components/form' import Rate from '../../../components/rate' const prefix = 'rate-base' const desc = '评定业务指标、信用等级、满意度等' const code = `import React from 'react' import Rate from '@hi-ui/hiui/es/rate' -import Form from '@hi-ui/hiui/es/form/index' +import LegacyForm from '@hi-ui/hiui/es/form/index' import FormItem from '@hi-ui/hiui/es/form/item'\n class Demo extends React.Component { + constructor(props){ + super(props) + this.state ={ + value:3 + } + } render() { + const {value} = this.state + const FormItem = LegacyForm.Item return ( -
    + - + + + + { + this.setState({ + value:v + }) + }}/> - +
    ) } }` const DemoBase = () => ( - + ) export default DemoBase diff --git a/docs/demo/rate/section-character.jsx b/docs/demo/rate/section-character.jsx new file mode 100644 index 000000000..15536ea67 --- /dev/null +++ b/docs/demo/rate/section-character.jsx @@ -0,0 +1,46 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import { LegacyForm } from '../../../components/form' +import Icon from '../../../components/Icon' +import Rate from '../../../components/rate' +import logoPng from '../../../site/static/img/docs/mi-logo@2x.png' +const desc = '元素可以是字体图标,文字甚至图片。' +const prefix = 'rate-character' +const code = `import React from 'react' +import Rate from '@hi-ui/hiui/es/rate' +import LegacyForm from '@hi-ui/hiui/es/form' +import Icon from '@hi-ui/hiui/es/icon' + +class Demo extends React.Component { + constructor() { + super() + } + render() { + const FormItem = LegacyForm.Item + return ( + + + } color='#4284f5'/> + + + + + + + + + }/> + + + ) + } +}` +const DemoAdvanced = () => ( + +) +export default DemoAdvanced diff --git a/docs/demo/rate/section-face.jsx b/docs/demo/rate/section-face.jsx index 070ab7c28..5dbce613b 100644 --- a/docs/demo/rate/section-face.jsx +++ b/docs/demo/rate/section-face.jsx @@ -1,25 +1,25 @@ import React from 'react' import DocViewer from '../../../libs/doc-viewer' -import Form from '../../../components/form/index' -import FormItem from '../../../components/form/Item' +import { LegacyForm } from '../../../components/form' import Rate from '../../../components/rate' import Alert from '../../../components/alert' + const prefix = 'rate-face' const desc = '运用图标直观表达评级结果的优劣' const code = `import React from 'react' import Rate from '@hi-ui/hiui/es/rate' -import Form from '@hi-ui/hiui/es/form/index' -import FormItem from '@hi-ui/hiui/es/form/item' +import LegacyForm from '@hi-ui/hiui/es/form' import Alert from '@hi-ui/hiui/es/alert'\n class Demo extends React.Component { constructor() { super() - this.tooltips = ['terrible', 'bad', 'normal', 'good', 'wonderful'] + this.tooltips = ['极差','失望', '一般', '满意','很满意'] } render() { + const FormItem = LegacyForm.Item return ( -
    +
    @@ -31,17 +31,20 @@ class Demo extends React.Component { + + + - +
    ) } }` const DemoBase = () => ( diff --git a/docs/demo/rate/section-renderCharacter.jsx b/docs/demo/rate/section-renderCharacter.jsx new file mode 100644 index 000000000..1df94a10c --- /dev/null +++ b/docs/demo/rate/section-renderCharacter.jsx @@ -0,0 +1,55 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import Rate from '../../../components/rate' +import smile1Png from '../../../site/static/img/docs/logo-1@2x.png' +import smile2Png from '../../../site/static/img/docs/logo-2@2x.png' +import smile3Png from '../../../site/static/img/docs/logo-3@2x.png' +import smile4Png from '../../../site/static/img/docs/logo-4@2x.png' +import smile5Png from '../../../site/static/img/docs/logo-5@2x.png' +const desc = '可以使用 renderCharacter()=>ReactNode 自定义渲染。' +const prefix = 'rate-advanced' +const code = `import React from 'react' +import Rate from '@hi-ui/hiui/es/rate'\n + +class Demo extends React.Component { + + constructor() { + super() + } + + renderCharacter (value, index) { + const Emojis = [ + smile1Png, + smile2Png, + smile3Png, + smile4Png, + smile5Png + ] + + return + } + + render() { + return ( + + ) + } +} + +` +const DemoAdvanced = () => ( + +) +export default DemoAdvanced diff --git a/docs/demo/rich-text-editor/section-base.jsx b/docs/demo/rich-text-editor/section-base.jsx new file mode 100755 index 000000000..2f2541f9c --- /dev/null +++ b/docs/demo/rich-text-editor/section-base.jsx @@ -0,0 +1,60 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import RichTextEditor from '../../../components/rich-text-editor' +import ReactQuill from 'react-quill' +const prefix = 'RichTextEditor-base' +const desc = '' +const code = `import React from 'react' +import RichTextEditor from '@hi-ui/hiui/es/rich-text-editor'\n +class Demo extends React.Component { + constructor(props) { + super(props) + this.modules = { + toolbar: [ + ['bold', 'italic', 'underline', 'strike'], + [('blockquote', 'code-block')], // toggled buttons + ['link', 'image'], + + [{ header: 1 }, { header: 2 }], // custom button values + [{ list: 'ordered' }, { list: 'bullet' }], + [{ script: 'sub' }, { script: 'super' }], // superscript/subscript + [{ indent: '-1' }, { indent: '+1' }], // outdent/indent + [{ direction: 'rtl' }], // text direction + [{ color: [] }, { background: [] }], // dropdown with defaults from theme + + [{ header: [1, 2, 3, 4, 5, 6, false] }], + [{ size: ['small', false, 'large', 'huge'] }], // custom dropdown + + [{ font: [] }], + [{ align: [] }], + + ['clean'] // remove formatting button + ] + } + this.state = { + value: '小米公司正式成立于2010年4月, 是一家以手机 智能硬件和 IoT 平台为核心的互联网公司, 创业仅7年时间,小米的年收入就突破了千亿元人民币。 截止2018年,小米的业务遍及全球80多个国家和地区。 目前,小米是全球第四大智能手机制造商,在30余个国家和地区的手机市场进入了前五名, 特别是在印度,连续5个季度保持手机出货量第一。通过 独特的“生态链模式”, 小米投资、带动了更多志同道合的创业者,同时建成了连接超过1.3亿台智能设备的IoT平台。' + } + + } + onValueChange(value) { + this.setState({ + value + }) + } + render () { + const {value} = this.state + return ( + + ) + } +}` + +const DemoBase = () => ( + +) +export default DemoBase diff --git a/docs/demo/rich-text-editor/section-customToolbar.jsx b/docs/demo/rich-text-editor/section-customToolbar.jsx new file mode 100755 index 000000000..948fe5177 --- /dev/null +++ b/docs/demo/rich-text-editor/section-customToolbar.jsx @@ -0,0 +1,137 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import RichTextEditor, { + QuillBarTooltip +} from '../../../components/rich-text-editor' +import Upload from '../../../components/upload' +import Message from '../../../components/message' +import Icon from '../../../components/icon' +import * as Quill from 'quill' +const Delta = Quill.import('delta') +import ReactQuill from 'react-quill' +const prefix = 'RichTextEditor-customToolbar' +const desc = '自定义工具栏,方便快捷操作' +const code = `import React from 'react' +import * as Quill from 'quill' + +import RichTextEditor, { + QuillBarTooltip +} from '@hi-ui/hiui/es/rich-text-editor'\n +import Upload from '@hi-ui/hiui/es/upload' +import Message from '@hi-ui/hiui/es/message' +import Icon from '@hi-ui/hiui/es/icon' + +class Demo extends React.Component { + constructor(props) { + super(props) + this.modules = { + toolbar: { + container: '#hiui-quill-toolbar_custom', + handlers:{ + redo: value => { + this.quillRef.history.redo() + }, + undo: value => { + this.quillRef.history.undo() + }, + scissor: value => { + const { index, length } = this.quillRef.getSelection() + this.quillRef.deleteText(index, length, 'user') + } + } + } + } + this.state = { + value:'小米的使命是,始终坚持做“感动人心,价格厚道”的好产品,让全球每个人都能享受科技带来的美好生活' + } + this.reactQuillRef = React.createRef() + } + + componentDidMount() { + this.attachQuillRefs() + const Delta = Quill.import('delta') + + this.quillRef.clipboard.addMatcher(Node.ELEMENT_NODE, ( + node, + delta + ) => { + if(node.tagName === 'IMG') { + Message.open({ + type:'warning', + title:'请使用工具栏中按钮插入图片' + }) + return {ops:[]} + } else { + return delta.compose(new Delta().retain(delta.length())) + } + }) + } + + insertImg(url){ + console.log('插入图片',url) + const { value } = this.state + this.quillRef.setContents([ + { insert: '提醒:',attributes: { bold: true, color: "#f63" } }, + { insert: '请将上传接口改为自己可用的接口地址!', attributes: { color: "#f63" } } + ]) + this.quillRef.insertEmbed(value.length, 'image', url, 'user') + } + + attachQuillRefs() { + if (typeof this.reactQuillRef.current.getEditor !== 'function') return + this.quillRef = this.reactQuillRef.current.getEditor() + } + + onValueChange(value) { + this.setState({ + value + }) + } + + render () { + const { value } = this.state + return ( +
    +
    + + + + + + + + + + + + + +
    + +
    + ) + } +}` + +const DemoBase = () => ( + +) +export default DemoBase diff --git a/docs/demo/rich-text-editor/section-tooltip.jsx b/docs/demo/rich-text-editor/section-tooltip.jsx new file mode 100755 index 000000000..a9f32757b --- /dev/null +++ b/docs/demo/rich-text-editor/section-tooltip.jsx @@ -0,0 +1,56 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import RichTextEditor, { + QuillBarTooltip +} from '../../../components/rich-text-editor' +import ReactQuill from 'react-quill' +const prefix = 'RichTextEditor-tooltip' +const desc = '结合Tooltip, 方便理解使用工具栏中选项' +const code = `import React from 'react' +import RichTextEditor, { + QuillBarTooltip +} from '@hi-ui/hiui/es/rich-text-editor'\n +class Demo extends React.Component { + constructor(props) { + super(props) + this.modules = { + toolbar: { + container: '#hiui-quill-toolbar', + } + } + } + render () { + return ( +
    +
    + + + + + +
    + +
    + ) + } +}` + +const DemoBase = () => ( + +) +export default DemoBase diff --git a/docs/demo/rich-text-editor/section-upload.jsx b/docs/demo/rich-text-editor/section-upload.jsx new file mode 100755 index 000000000..478e909f5 --- /dev/null +++ b/docs/demo/rich-text-editor/section-upload.jsx @@ -0,0 +1,145 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import RichTextEditor, { + QuillBarTooltip +} from '../../../components/rich-text-editor' +import Upload from '../../../components/upload' +import Message from '../../../components/message' +import * as Quill from 'quill' +const Delta = Quill.import('delta') +import ReactQuill from 'react-quill' +const prefix = 'RichTextEditor-upload' +const desc = '结合Uplaod组件, 方便进行图片数据的处理' +const code = `import React from 'react' + +import RichTextEditor, { + QuillBarTooltip +} from '@hi-ui/hiui/es/rich-text-editor'\n +import Upload from '@hi-ui/hiui/es/upload' +import Message from '@hi-ui/hiui/es/message' + +import * as Quill from 'quill' +class Demo extends React.Component { + constructor(props) { + super(props) + this.modules = { + toolbar: { + container: '#hiui-quill-toolbar_upload', + } + } + this.state = { + value:'' + } + this.reactQuillRef = React.createRef() + } + + componentDidMount() { + this.attachQuillRefs() + const Delta = Quill.import('delta') + + this.quillRef.clipboard.addMatcher(Node.ELEMENT_NODE, ( + node, + delta + ) => { + if(node.tagName === 'IMG') { + Message.open({ + type:'warning', + title:'请使用工具栏中按钮插入图片' + }) + return {ops:[]} + } else { + return delta.compose(new Delta().retain(delta.length())) + } + }) + } + + insertImg(url){ + console.log('插入图片',url) + const { value } = this.state + this.quillRef.setContents([ + { insert: '提醒:',attributes: { bold: true, color: "#f63" } }, + { insert: '请将上传接口改为自己可用的接口地址!', attributes: { color: "#f63" } } + ]) + this.quillRef.insertEmbed(value.length, 'image', url, 'user') + } + + attachQuillRefs() { + if (typeof this.reactQuillRef.current.getEditor !== 'function') return + this.quillRef = this.reactQuillRef.current.getEditor() + } + + onValueChange(value) { + this.setState({ + value + }) + } + + render () { + const { value } = this.state + return ( +
    + +
    + + + + + { + this.setState({ + loading: true + }) + return true + }} + loading={this.state.loading} + name={'files[]'} + onChange={(file, fileList, response) => { + console.log('upload callback', file, fileList, response) + this.setState( + { + loading: false + }, + () => { + this.insertImg(response.data || 'https://cdn.cnbj0.fds.api.mi-img.com/b2c-shopapi-pms/pms_1560238127.40319869.png') + } + ) + Message.open({ + title: '上传成功' + }) + }} + /> + +
    + +
    + ) + } +}` + +const DemoBase = () => ( + +) +export default DemoBase diff --git a/docs/demo/search/section-base.jsx b/docs/demo/search/section-base.jsx new file mode 100644 index 000000000..a80fe6118 --- /dev/null +++ b/docs/demo/search/section-base.jsx @@ -0,0 +1,86 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import Search from '../../../components/search' +import Button from '../../../components/button' +const prefix = 'search-base' +const leftOptions = ['基础用法', '自定义按钮', '禁用'] +const desc = '按搜索关键字直接请求结果' +const code = [ + { + code: `import React from 'react' +import Search from '@hi-ui/hiui/es/Search' + +class Demo extends React.Component { + render() { + return ( +
    + { + console.log('Input Value', keyword) + keyword && alert('Input Value: '+ keyword) + }} + /> +
    + + ) + } +}`, + opt: ['基础用法'] + }, + { + code: `import React from 'react' +import Search from '@hi-ui/hiui/es/Search' + +class Demo extends React.Component { + render() { + return ( +
    + 搜索} + onSearch = {(keyword) => { + console.log('Input Value', keyword) + keyword && alert('Input Value: '+ keyword) + }} + /> +
    + + ) + } +}`, + opt: ['自定义按钮'] + }, + + { + code: `import React from 'react' +import Search from '@hi-ui/hiui/es/Search' +class Demo extends React.Component { + render() { + return ( + { + console.log('Input Value', title) + }} + /> + ) + } +}`, + opt: ['禁用'] + } +] +const DemoBase = () => ( + +) +export default DemoBase diff --git a/docs/demo/search/section-classic.jsx b/docs/demo/search/section-classic.jsx new file mode 100644 index 000000000..17d7e00f1 --- /dev/null +++ b/docs/demo/search/section-classic.jsx @@ -0,0 +1,50 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import Search from '../../../components/search' +import Select from '../../../components/select' +const prefix = 'search-classic' +const desc = '按不同的类别划分搜索范围;可减少搜索成本' +const code = `import React from 'react' +import Search from '@hi-ui/hiui/es/Search' + +class Demo extends React.Component { + constructor () { + super() + + } + render() { + const prepend = { - console.log('----', res) - return res.list + if(res.code === 200){ + return res.data + } + return [] } }} placeholder='请选择' style={{ width: 200 }} onChange={(item) => { console.log('异步单选结果', item) + this.setState({ + value:item + }) }} /> ) } }`, - opt: ['单选'] + opt: ['异步简易用法'] }, { code: `import React from 'react' import { Select } from '@hi-ui/hiui'\n class Demo extends React.Component { + constructor () { + super() + this.state = { + value:['1','2'] + } + } render () { + const {value} = this.state return ( { + return ({ + type: 'GET', + url: 'https://mife-gallery.test.mi.com/hiui/stores', + params:{id: keyword}, + transformResponse: (res) => { + if(res.code === 200){ + return res.data + } + return [] + } + }) + + }} + onChange={(item) => { + console.log('多选结果', item) + this.setState({ + value:item + }) }} /> ) } }`, - opt: ['多选'] + opt: ['异步受控'] } ] const DemoAsync = () => ( - + ) export default DemoAsync diff --git a/docs/demo/select/section-custom.jsx b/docs/demo/select/section-custom.jsx index 281cf7a1a..b803c5d2d 100644 --- a/docs/demo/select/section-custom.jsx +++ b/docs/demo/select/section-custom.jsx @@ -2,10 +2,7 @@ import React from 'react' import DocViewer from '../../../libs/doc-viewer' import Select from '../../../components/select' const prefix = 'select-custom' -const desc = [ - '选项结构:可自定义选项的信息结构或样式', - '搜索条件:可自定义搜索条件的算法' -] +const desc = ['选项结构:可自定义选项的信息结构或样式', '搜索条件:可自定义搜索条件的算法'] const rightOptions = ['选项结构', '搜索条件'] const code = [ @@ -95,12 +92,6 @@ class Demo extends React.Component { } ] const DemoCustom = () => ( - + ) export default DemoCustom diff --git a/docs/demo/select/section-dataSource-custom.jsx b/docs/demo/select/section-dataSource-custom.jsx new file mode 100644 index 000000000..1d760642b --- /dev/null +++ b/docs/demo/select/section-dataSource-custom.jsx @@ -0,0 +1,46 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import Select from '../../../components/select' +const prefix = 'select-dataSource-custom' +const desc = '当搜索问题比较复杂的时候, 可以自定义搜索' +const code = `import React from 'react' +import Select from '@hi-ui/hiui/es/select'\n +class Demo extends React.Component { + constructor () { + super() + this.state = { + value:['1'] + } + } + render () { + const {value} = this.state + return ( + { + return !!Pinyin.match(item.title, keyword) + }} + onChange={(item) => { + console.log('异步单选结果', item) + this.setState({ + value:item + }) + }} + /> + ) + } +}` + +const DemoAsync = () => ( + +) +export default DemoAsync diff --git a/docs/demo/select/section-type.jsx b/docs/demo/select/section-type.jsx index 654469fbf..c545b62d7 100644 --- a/docs/demo/select/section-type.jsx +++ b/docs/demo/select/section-type.jsx @@ -93,7 +93,6 @@ class Demo extends React.Component { return ( { + console.log('异步单选结果', item) + this.setState({ + value:item + }) + }} + /> + ) + } +}` +const DemoAsync = () => ( + +) +export default DemoAsync diff --git a/docs/demo/select/select-group.jsx b/docs/demo/select/select-group.jsx new file mode 100644 index 000000000..a5fd9ef74 --- /dev/null +++ b/docs/demo/select/select-group.jsx @@ -0,0 +1,65 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import Select from '../../../components/select' +import HiRequest from '../../../components/_util/hi-request' +const prefix = 'select-group' +const desc = '类型分组' +const code = `import React from 'react' +import Select from '@hi-ui/hiui/es/select'\n +class Demo extends React.Component { + constructor () { + super() + this.state = { + value:['1'], + data:[ + { + id:'redmi', + title:'红米手机', + children:[ + { title:'红米 5A', id:'3'}, + { title:'红米 6A', id:'2' }, + { title:'红米 note', id:'4'}, + { title:'红米 note8', id:'5' }, + ] + }, + { + id:'mi', + title:'小米电视', + children:[ + { title:'小米电视4A 60寸', id:'10'}, + { title:'小米电视E55A', id:'11' }, + { title:'小米电视E65A', id:'12'}, + { title:'小米电视4S', id:'13' }, + { title:'小米电视4C', id:'14' }, + ] + } + ] + } + } + render () { + const {value,data} = this.state + return ( + this.onChange(e)} + onBlur={(e)=>this.handleInput(+e.target.value)} + onKeyDown={(e)=>{ + if(e.keyCode == 13){ + this.handleInput(+e.target.value) + } + }} + /> + + + + ) + } +}`, + opt: ['水平'] + }, + { + code: `import React from "react"; + + class Demo extends React.Component { + constructor() { + super() + this.state = { + value: 9, + valueCache:10, + max:90, + min:10 + } + } + + onChange(e){ + let valueCache = e.target.value.replace(/[^0-9]/g, '') + this.setState({ + valueCache + }) + } + componentDidMount(){ + const {min,max,value} = this.state + if(valuemax){ + this.setState({ + value:max + }) + } + } + handleInput(value){ + const {min,max} = this.state + if(valuemax){ + value = max + } + this.setState({ + valueCache:value, + value + }); + } + + render() { + const { value,valueCache,max,min } = this.state; + return ( +
    +
    + this.handleInput(value)} + /> +
    +
    + this.onChange(e)} + onBlur={(e)=>this.handleInput(+e.target.value)} + onKeyDown={(e)=>{ + if(e.keyCode == 13){ + this.handleInput(+e.target.value) + } + }} + /> +
    +
    + ); + } + } + `, + opt: ['垂直'] + } +] + +const DemoBase = () => ( + +) +export default DemoBase diff --git a/docs/demo/slider/slider-step.jsx b/docs/demo/slider/slider-step.jsx new file mode 100644 index 000000000..ab9f85308 --- /dev/null +++ b/docs/demo/slider/slider-step.jsx @@ -0,0 +1,84 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import Slider from '../../../components/slider' +const prefix = 'slider-step' +const rightOptions = ['水平', '竖直'] +const desc = '按定义步长输入离散型数值,可加入特殊位置' + +const code = [ + { + code: `import React from 'react' +import Slider from '@hi-ui/hiui/es/slider'\n +class Demo extends React.Component { + + constructor() { + super() + this.state = { + value: 30, + marks:{ + 0: '0°C', + 26: '26°C', + 37: '37°C', + 100: '100°C', + } + } + } + + render() { + const {value,marks} = this.state + return ( + + ) + } +}`, + opt: ['水平'] + }, + { + code: `import React from 'react' +import Slider from '@hi-ui/hiui/es/slider'\n +class Demo extends React.Component { + + constructor() { + super() + this.state = { + value: 30, + marks:{ + 0: '0°C', + 26: '26°C', + 37: '37°C', + 100: '100°C', + } + } + } + render() { + const {value,marks} = this.state + return ( +
    + +
    + ) + } +}`, + opt: ['竖直'] + } +] + +const DemoBase = () => ( + +) +export default DemoBase diff --git a/docs/demo/slider/slider-tipFormatter.jsx b/docs/demo/slider/slider-tipFormatter.jsx new file mode 100644 index 000000000..253b51eab --- /dev/null +++ b/docs/demo/slider/slider-tipFormatter.jsx @@ -0,0 +1,39 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import Slider from '../../../components/slider' +const prefix = 'slider-tipFormatter' +const desc = + '可自定义提示内容的格式' + +const code = `import React from 'react' +import Slider from '@hi-ui/hiui/es/slider'\n +class Demo extends React.Component { + + constructor() { + super() + this.state = { + value: 80 + } + } + + formatter(value){ + console.log(value) + return value+'英寸' + } + + render() { + return ( + + ) + } +}` + +const DemoBase = () => ( + +) +export default DemoBase diff --git a/docs/demo/stepper/section-desc.jsx b/docs/demo/stepper/section-desc.jsx index 73bb2fda5..d9ae4e14d 100644 --- a/docs/demo/stepper/section-desc.jsx +++ b/docs/demo/stepper/section-desc.jsx @@ -26,7 +26,7 @@ class Demo extends React.Component { { title: '信息登记', content: '请输入个人信息', - icon: + icon: }, ] @@ -63,7 +63,7 @@ class Demo extends React.Component { content: '请输入个人信息', }, ] - + return ( ( - + ) export default DemoUpDownIcon diff --git a/docs/demo/stepper/section-icon.jsx b/docs/demo/stepper/section-icon.jsx index 0c76ffa80..20d1b1a00 100644 --- a/docs/demo/stepper/section-icon.jsx +++ b/docs/demo/stepper/section-icon.jsx @@ -15,15 +15,15 @@ class Demo extends React.Component { const list = [ { title: '账号信息', - icon: 'user', + icon: , }, { title: '邮箱激活', - icon: 'time' + icon: }, { title: '信息登记', - icon: 'list' + icon: }, ] @@ -46,15 +46,15 @@ class Demo extends React.Component { const list = [ { title: '账号信息', - icon: 'user', + icon: , }, { title: '邮箱激活', - icon: 'time' + icon: }, { title: '信息登记', - icon: 'list' + icon: }, ] @@ -71,12 +71,6 @@ class Demo extends React.Component { } ] const DemoIcon = () => ( - + ) export default DemoIcon diff --git a/docs/demo/stepper/section-vertical-icon.jsx b/docs/demo/stepper/section-vertical-icon.jsx index 132ba5947..c0b2ce7a8 100644 --- a/docs/demo/stepper/section-vertical-icon.jsx +++ b/docs/demo/stepper/section-vertical-icon.jsx @@ -23,7 +23,7 @@ class Demo extends React.Component { { title: '信息登记', content: '请输入个人信息', - icon: , + icon: , }, ] @@ -41,7 +41,5 @@ class Demo extends React.Component { } }` -const DemoVerticalIcon = () => ( - -) +const DemoVerticalIcon = () => export default DemoVerticalIcon diff --git a/docs/demo/stepper/section-vertical.jsx b/docs/demo/stepper/section-vertical.jsx index 7d6a7df85..ee1b80b18 100644 --- a/docs/demo/stepper/section-vertical.jsx +++ b/docs/demo/stepper/section-vertical.jsx @@ -62,7 +62,7 @@ class Demo extends React.Component { { title: '信息登记', content: '请输入个人信息', - icon: , + icon: , }, ] diff --git a/docs/demo/switch/section-ban.jsx b/docs/demo/switch/section-ban.jsx index d98deafff..818968a91 100644 --- a/docs/demo/switch/section-ban.jsx +++ b/docs/demo/switch/section-ban.jsx @@ -19,6 +19,7 @@ class Demo extends React.Component { } onChange (status) { console.log(status) + this.setState({checked: status}) } render () { return ( diff --git a/docs/demo/switch/section-base.jsx b/docs/demo/switch/section-base.jsx index a9fba141b..c2d680187 100644 --- a/docs/demo/switch/section-base.jsx +++ b/docs/demo/switch/section-base.jsx @@ -5,8 +5,7 @@ import Switch from '../../../components/switch' import Icon from '../../../components/icon' const desc = '状态识别,常见于功能或模块、板块启用,设置参数等' const prefix = 'switch-base' -const code = ` -import React from 'react' +const code = `import React from 'react' import Switch from '@hi-ui/hiui/es/switch' import Button from '@hi-ui/hiui/es/button'\n class Demo extends React.Component { @@ -23,11 +22,11 @@ class Demo extends React.Component { render () { return (
    -

    默认

    +

    默认

    -

    自定义内容

    +

    自定义内容

    console.log('change')}/> -

    自定义图标

    +

    自定义图标

    , ]}/>
    ) diff --git a/docs/demo/table/section-advance.jsx b/docs/demo/table/section-advance.jsx deleted file mode 100644 index 5b1541620..000000000 --- a/docs/demo/table/section-advance.jsx +++ /dev/null @@ -1,81 +0,0 @@ -import React from 'react' -import DocViewer from '../../../libs/doc-viewer' -import Table from '../../../components/table' -const prefix = 'table-base' -const code = `import React from 'react' -import Table from '@hi-ui/hiui/es/table'\n -class Demo extends React.Component { - constructor(props){ - super(props) - - this.columns = [ - - { title: '姓名', dataIndex: 'name', key: '1'}, - { title: '年龄', dataIndex: 'age', key: '2',type:'number'}, - { title: '地址', dataIndex: 'address', key: '3'}, - { - title: ()=>
    自定义标题
    , - dataIndex: 'address', key: '4', - width: '500px', - render(text,record,index){ - return ( -
    - {text} --- {index} --- 自定义渲染 -
    - ) - }}, - { - title: 'Action', - key: 'operation', - width: 100, - render: () => action, - }, - ] - - this.data = [] - for (let i = 0; i < 5; i++) { - this.data.push({ - // key: i, - name: \`Don Diablo \${i}\`, - age: i, - address: \`EDC Las Vegas no. \${i}\`, - }); - } - } - render() { - return - } - -}` - -const DemoBase = () => ( - -) -export default DemoBase diff --git a/docs/demo/table/section-async.jsx b/docs/demo/table/section-async.jsx new file mode 100644 index 000000000..944b88ee6 --- /dev/null +++ b/docs/demo/table/section-async.jsx @@ -0,0 +1,172 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import Table from '../../../components/table' +import Watermark from '../../../components/Watermark' +const prefix = 'table-async' +const desc = ['异步动态获取表格数据'] +const rightOptions = ['异步请求', '斑马行'] +const code = [ + { + code: `import React from 'react' + import Table from '@hi-ui/hiui/es/table'\n + class Demo extends React.Component { + constructor(props) { + super(props) + this.columns = [ + { title: 'Full Name', width: 100, dataKey: 'name', key: 'name' }, + { title: 'Age', width: 100, dataKey: 'age', key: 'age' }, + { title: 'Column 1', dataKey: 'address', key: '1' }, + { title: 'Column 2', dataKey: 'address2', key: '2' }, + { title: 'Column 3', dataKey: 'address3', key: '3' }, + { title: 'Column 4', dataKey: 'address4', key: '4' } + ] + const data = [] + + for (let i = 0; i < 100; i++) { + data.push({ + key: i, + name: 'Jake White', + age: i, + tel: '0575-22098909', + phone: 18900010002, + address: 'Dublin No. 2 Lake Park' + }) + } + + this.state = { + pageSize: 10, + current: 1, + data: data + } + } + + render() { + return ( +
    { + return { + url:'https://mife-gallery.test.mi.com/hiui/stores', + transformResponse:(res)=>{ + console.log(res) + const arr = [] + for (let i = 0; i < 100; i++) { + arr.push({ + key: i, + name: 'Jake White', + age: i, + tel: '0575-22098909', + phone: 18900010002, + address: 'Dublin No. 2 Lake Park' + }) + } + return arr + } + } + }} + + /> + ) + } + }`, + opt: ['异步请求'] + }, + { + code: `import React from 'react' + import Table from '@hi-ui/hiui/es/table'\n + class Demo extends React.Component { + constructor(props){ + super(props) + this.columns = [ + { + title: '商品名', + dataKey: 'name' + }, + { + title: '品类', + dataKey: 'type' + }, + { + title: '规格', + dataKey: 'size' + }, + { + title: '单价', + dataKey: 'price' + }, + { + title: '门店', + dataKey: 'address' + }, + { + title: '库存', + dataKey: 'stock' + } + ] + + this.data = [ + { + name: '小米9', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '3299.00', + address: '华润五彩城店', + stock: '29,000', + key: 1 + }, + { + name: '小米9 SE', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '1999.00', + address: '清河店', + stock: '10,000', + key: 2 + }, + { + name: '小米8', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '2599.00', + address: '双安店', + stock: '12,000', + key: 3 + }, + { + name: 'Redmi Note7', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '999.00', + address: '华润五彩城店', + stock: '140,000', + key: 4 + }, + { + name: '小米8 SE', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '699.00', + address: '双安店', + stock: '12,000', + key: 5 + } + ] + } + render() { + return
    + } + }`, + opt: ['斑马行'] + } +] + +const DemoBase = () => ( + +) +export default DemoBase diff --git a/docs/demo/table/section-base.jsx b/docs/demo/table/section-base.jsx index 68331d629..4d51ad0f0 100644 --- a/docs/demo/table/section-base.jsx +++ b/docs/demo/table/section-base.jsx @@ -1,58 +1,240 @@ import React from 'react' import DocViewer from '../../../libs/doc-viewer' -import Table from '../../../components/table' +import Table, { LegacyTable } from '../../../components/table' +import Watermark from '../../../components/Watermark' const prefix = 'table-base' -const desc = '基础:展示二维数据' -const code = `import React from 'react' -import Table from '@hi-ui/hiui/es/table'\n -class Demo extends React.Component { - constructor(props){ - super(props) +const desc = ['基础:展示二维数据', '斑马行:优化以行为主的阅读体验'] +const rightOptions = ['基础', '斑马行'] +const code = [ + { + code: `import React from 'react' + import Table from '@hi-ui/hiui/es/table'\n + class Demo extends React.Component { + constructor(props){ + super(props) + this.columns = [ + { + title: '商品名', + dataKey: 'name' + }, + { + title: '品类', + dataKey: 'type' + }, + { + title: '规格', + dataKey: 'size' + }, + { + title: '单价', + dataKey: 'price' + }, + { + title: '门店', + dataKey: 'address' + }, + { + title: '库存', + dataKey: 'stock' + } + ] - this.columns = [ + this.data = [ + { + name: '小米9', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '3299.00', + address: '华润五彩城店', + stock: '29,000', + key: 1 + }, + { + name: '小米9 SE', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '1999.00', + address: '清河店', + stock: '10,000', + key: 2 + }, + { + name: '小米8', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '2599.00', + address: '双安店', + stock: '12,000', + key: 3 + }, + { + name: 'Redmi Note7', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '999.00', + address: '华润五彩城店', + stock: '140,000', + key: 4 + }, + { + name: '小米8 SE', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '699.00', + address: '双安店', + stock: '12,000', + key: 5 + } + ] + } + render() { + return
    + } + }`, + opt: ['基础'] + }, + { + code: `import React from 'react' + import Table from '@hi-ui/hiui/es/table'\n + class Demo extends React.Component { + constructor(props){ + super(props) + this.columns = [ + { + title: '商品名', + dataKey: 'name' + }, + { + title: '品类', + dataKey: 'type' + }, + { + title: '规格', + dataKey: 'size' + }, + { + title: '单价', + dataKey: 'price' + }, + { + title: '门店', + dataKey: 'address' + }, + { + title: '库存', + dataKey: 'stock' + } + ] - { title: 'Column 1', dataIndex: 'name', key: '1'}, - { title: 'Column 1', dataIndex: 'age', key: '2'}, - { title: 'Column 1', dataIndex: 'address', key: '3'}, - { - title: ()=>
    自定义标题
    , - dataIndex: 'address', key: '4', - width: '500px', - render(text,record,index){ - return ( -
    - {text} --- {index} --- 自定义渲染 -
    - ) - }}, - { - title: 'Action', - key: 'operation', - width: 100, - render: () => action, - }, - ] - - this.data = [] - for (let i = 0; i < 10; i++) { - this.data.push({ - // key: i, - name: \`Don Diablo \${i}\`, - age: \`\${i}\${i}\`, - address: \`EDC Las Vegas no. \${i}\`, - }); - } - } - render() { - return
    + this.data = [ + { + name: '小米9', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '3299.00', + address: '华润五彩城店', + stock: '29,000', + key: 1 + }, + { + name: '小米9 SE', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '1999.00', + address: '清河店', + stock: '10,000', + key: 2 + }, + { + name: '小米8', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '2599.00', + address: '双安店', + stock: '12,000', + key: 3 + }, + { + name: 'Redmi Note7', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '999.00', + address: '华润五彩城店', + stock: '140,000', + key: 4 + }, + { + name: '小米8 SE', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '699.00', + address: '双安店', + stock: '12,000', + key: 5 + } + ] + } + render() { + return
    + } + }`, + opt: ['斑马行'] + }, + { + code: `import React from 'react' + import Table from '@hi-ui/hiui/es/table'\n + class Demo extends React.Component { + constructor(props){ + super(props) + + this.columns = [ + + { title: 'Column 1', dataIndex: 'name', key: '1'}, + { title: 'Column 1', dataIndex: 'age', key: '2'}, + { title: 'Column 1', dataIndex: 'address', key: '3'}, + { + title: ()=>
    自定义标题
    , + dataIndex: 'address', key: '4', + width: '500px', + render(text,record,index){ + return ( +
    + {text} --- {index} --- 自定义渲染 +
    + ) + }}, + { + title: 'Action', + key: 'operation', + width: 100, + render: () => action, + }, + ] + + this.data = [] + for (let i = 0; i < 10; i++) { + this.data.push({ + // key: i, + name: \`Don Diablo \${i}\`, + age: \`\${i}\${i}\`, + address: \`EDC Las Vegas no. \${i}\`, + }); + } + } + render() { + return + } + }`, + opt: ['v2'] } -}` +] const DemoBase = () => ( ) diff --git a/docs/demo/table/section-border.jsx b/docs/demo/table/section-border.jsx deleted file mode 100644 index a21fe336b..000000000 --- a/docs/demo/table/section-border.jsx +++ /dev/null @@ -1,57 +0,0 @@ -import React from 'react' -import DocViewer from '../../../libs/doc-viewer' -import Table from '../../../components/table' -const prefix = 'table-border' -const desc = '另一种表格样式,运用分割线让行列关系更清晰明确' -const code = `import React from 'react' -import Table from '@hi-ui/hiui/es/table'\n -class Demo extends React.Component { - constructor(props){ - super(props) - - this.columns = [ - - { title: 'Column 1', dataIndex: 'name', key: '1'}, - { title: 'Column 1', dataIndex: 'age', key: '2'}, - { title: 'Column 1', dataIndex: 'address', key: '3'}, - { - title: ()=>
    自定义标题
    , - dataIndex: 'address', key: '4', - render(text,record,index){ - return ( -
    - {text} --- {index} --- 自定义渲染 -
    - ) - }}, - { - title: 'Action', - key: 'operation', - width: 100, - render: () => action, - }, - ] - - this.data = [] - for (let i = 0; i < 10; i++) { - this.data.push({ - // key: i, - name: \`Don Diablo \${i}\`, - age: \`\${i}\${i}\`, - address: \`EDC Las Vegas no. \${i}\`, - }); - } - } - render() { - return
    item.id === 1 || item.id === 3} /> - } -}` -const DemoBorder = () => ( - -) -export default DemoBorder diff --git a/docs/demo/table/section-column.jsx b/docs/demo/table/section-column.jsx new file mode 100644 index 000000000..398c99f50 --- /dev/null +++ b/docs/demo/table/section-column.jsx @@ -0,0 +1,727 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import Table from '../../../components/table' +const prefix = 'table-column' +const desc = ['列对齐:根据数据形式调整对齐方式'] +const rightOptions = ['列对齐', '列高亮', '列操作', '列冻结', '列调整'] +const code = [ + { + code: `import React from 'react' + import Table from '@hi-ui/hiui/es/table'\n + class Demo extends React.Component { + constructor(props){ + super(props) + this.columns = [ + { + title: '商品名', + dataKey: 'name' + }, + { + title: '品类', + dataKey: 'type' + }, + { + title: '规格', + dataKey: 'size' + }, + { + title: '单价', + dataKey: 'price', + align: 'right' + }, + { + title: '门店', + dataKey: 'address' + }, + { + title: '库存', + dataKey: 'stock', + align: 'right' + } + ] + + this.data = [ + { + name: '小米9', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '3299.00', + address: '华润五彩城店', + stock: '29,000', + key: 1 + }, + { + name: '小米9 SE', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '1999.00', + address: '清河店', + stock: '10,000', + key: 2 + }, + { + name: '小米8', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '2599.00', + address: '双安店', + stock: '12,000', + key: 3 + }, + { + name: 'Redmi Note7', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '999.00', + address: '华润五彩城店', + stock: '140,000', + key: 4 + }, + { + name: '小米8 SE', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '699.00', + address: '双安店', + stock: '12,000', + key: 5 + } + ] + } + render() { + return
    + } + }`, + opt: ['列对齐'] + }, + { + code: `import React from 'react' + import Table from '@hi-ui/hiui/es/table'\n + class Demo extends React.Component { + constructor(props){ + super(props) + this.columns = [ + { + title: '商品名', + dataKey: 'name' + }, + { + title: '品类', + dataKey: 'type' + }, + { + title: '规格', + dataKey: 'size' + }, + { + title: '单价', + dataKey: 'price', + align: 'right' + }, + { + title: '门店', + dataKey: 'address' + }, + { + title: '库存', + dataKey: 'stock', + align: 'right' + } + ] + + this.data = [ + { + name: '小米9', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '3299.00', + address: '华润五彩城店', + stock: '29,000', + key: 1 + }, + { + name: '小米9 SE', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '1999.00', + address: '清河店', + stock: '10,000', + key: 2 + }, + { + name: '小米8', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '2599.00', + address: '双安店', + stock: '12,000', + key: 3 + }, + { + name: 'Redmi Note7', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '999.00', + address: '华润五彩城店', + stock: '140,000', + key: 4 + }, + { + name: '小米8 SE', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '699.00', + address: '双安店', + stock: '12,000', + key: 5 + } + ] + } + render() { + return
    + } + }`, + opt: ['列高亮'] + }, + { + code: `import React from 'react' + import Table from '@hi-ui/hiui/es/table'\n + class Demo extends React.Component { + constructor(props){ + super(props) + this.columns = [ + { + title: 'Name', + dataKey: 'name', + key: 1 + }, + { + title: 'Age', + dataKey: 'age', + key: 2, + sorter (pre, next) { + return pre.age - next.age + } + }, + { + title: 'Home phone', + colSpan: 2, + dataKey: 'tel', + key: 3 + }, + { + title: 'Phone', + dataKey: 'phone', + key: 4, + sorter (pre, next) { + return pre.phone - next.phone + } + }, + { + title: 'Address', + dataKey: 'address', + key: 5 + } + ] + + this.data = [ + { + key: '1', + name: 'John Brown', + age: 32, + tel: '0571-22098909', + phone: 18889898989, + address: 'New York No. 1 Lake Park' + }, + { + key: '2', + name: 'Jim Green', + tel: '0571-22098333', + phone: 18889898888, + age: 42, + address: 'London No. 1 Lake Park' + }, + { + key: '3', + name: 'Joe Black', + age: 32, + tel: '0575-22098909', + phone: 18900010002, + address: 'Sidney No. 1 Lake Park' + }, + { + key: '4', + name: 'Jim Red', + age: 18, + tel: '0575-22098909', + phone: 18900010002, + address: 'London No. 2 Lake Park' + }, + { + key: '5', + name: 'Jake White', + age: 18, + tel: '0575-22098909', + phone: 18900010002, + address: 'Dublin No. 2 Lake Park' + } + ] + } + render() { + return
    + } + }`, + opt: ['列操作'] + }, + { + code: `import React from 'react' + import Table from '@hi-ui/hiui/es/table'\n + class Demo extends React.Component { + constructor(props){ + super(props) + this.columns = [ + // {dataKey: 'goodsCategory', title: '品类'}, + { key: 'source', dataKey: 'source', title: '平台', fixed: 'left', width: 80 }, + { + key: 'storeType', + dataKey: 'storeType', + title: '店铺类型', + fixed: 'left', + width: 150 + }, + { + key: 'storeName', + dataKey: 'storeName', + title: '店铺名称', + fixed: 'left', + width: 150 + }, + { key: 'priceSegment', dataKey: 'priceSegment', title: '价格段', width: 150 }, + { key: 'stBrand', dataKey: 'stBrand', title: '品牌', width: 150 }, + { key: 'stModel', dataKey: 'stModel', title: '机型', width: 150 }, + { key: 'stMemory', dataKey: 'stMemory', title: '配置', width: 350 }, + + { + key: 'receptionPrice', + dataKey: 'receptionPrice', + title: '到手价' + } + ] + + this.data = [ + { + benefitInfo: '促销:满539.0减40.0', + cartPrice: 539, + dt: '2020-02-11 00:00:00', + fdsUrl: + 'http://cnbj1-fds.api.xiaomi.net/pricemonitor/TMALL/2020021120/4176160609724@594387510987.png', + goodsCategory: '手机', + key: 22, + isFlagshipStore: '1', + platformUrl: + 'https://detail.tmall.com/item.htm?id=594387510987&skuId=4176160609724', + priceSegment: '0-1000', + receptionPrice: 499, + skuCnt: '0', + source: '天猫', + stBrand: 'REDMI', + stMemory: '2GB+32GB', + stModel: '7A', + storeName: '小米天猫官方旗舰店', + storeType: '官方旗舰店', + timeSegment: '2020-02-11 20' + }, + { + benefitInfo: '促销:满539.0减40.0', + cartPrice: 549, + dt: '2020-02-11 00:00:00', + fdsUrl: + 'http://cnbj1-fds.api.xiaomi.net/pricemonitor/TMALL/2020021120/4369944479551@594387510987.png', + goodsCategory: '手机', + key: 39, + isFlagshipStore: '1', + platformUrl: + 'https://detail.tmall.com/item.htm?id=594387510987&skuId=4369944479551', + priceSegment: '0-1000', + receptionPrice: 509, + skuCnt: '0', + source: '天猫', + stBrand: 'REDMI', + stMemory: '3GB+32GB', + stModel: '7A', + storeName: '小米天猫官方旗舰店', + storeType: '官方旗舰店', + timeSegment: '2020-02-11 20' + }, + { + benefitInfo: '6期内免息', + cartPrice: 1698.8, + dt: '2020-02-11 00:00:00', + fdsUrl: + 'http://cnbj1-fds.api.xiaomi.net/pricemonitor/JD/2020021120/100003872923.png', + goodsCategory: '手机', + key: 37, + isFlagshipStore: '1', + platformUrl: 'https://item.jd.com/100003872923.html', + priceSegment: '1000-2000', + receptionPrice: 1499, + skuCnt: '0', + source: '京东', + stBrand: '小米', + stMemory: '6GB+128GB', + stModel: 'CC9', + storeName: '小米京东官方旗舰店', + storeType: '官方旗舰店', + timeSegment: '2020-02-11 20' + }, + { + benefitInfo: '6期内免息;促销:满3000.0减50.0', + cartPrice: 3199, + dt: '2020-02-11 00:00:00', + fdsUrl: + 'http://cnbj1-fds.api.xiaomi.net/pricemonitor/JD/2020021120/100009564076.png', + goodsCategory: '手机', + key: 21, + isFlagshipStore: '1', + platformUrl: 'https://item.jd.com/100009564076.html', + priceSegment: '3000-4000', + receptionPrice: 3049, + skuCnt: '0', + source: '京东', + stBrand: '小米', + stMemory: '8GB+256GB', + stModel: 'CC9 PRO', + storeName: '小米京东官方旗舰店', + storeType: '官方旗舰店', + timeSegment: '2020-02-11 20' + }, + { + benefitInfo: '6期内免息;促销:满2799.0减100.0', + cartPrice: 2799, + dt: '2020-02-11 00:00:00', + fdsUrl: + 'http://cnbj1-fds.api.xiaomi.net/pricemonitor/TMALL/2020021120/4259168580074@604775988717.png', + goodsCategory: '手机', + key: 26, + isFlagshipStore: '1', + platformUrl: + 'https://detail.tmall.com/item.htm?id=604775988717&skuId=4259168580074', + priceSegment: '2000-3000', + receptionPrice: 2699, + skuCnt: '0', + source: '天猫', + stBrand: '小米', + stMemory: '8GB+128GB', + stModel: 'CC9 PRO', + storeName: '小米天猫官方旗舰店', + storeType: '官方旗舰店', + timeSegment: '2020-02-11 20' + }, + { + benefitInfo: '6期内免息;促销:满2799.0减100.0', + cartPrice: 3199, + dt: '2020-02-11 00:00:00', + fdsUrl: + 'http://cnbj1-fds.api.xiaomi.net/pricemonitor/TMALL/2020021120/4259168580078@604775988717.png', + goodsCategory: '手机', + key: 28, + isFlagshipStore: '1', + platformUrl: + 'https://detail.tmall.com/item.htm?id=604775988717&skuId=4259168580078', + priceSegment: '3000-4000', + receptionPrice: 3099, + skuCnt: '0', + source: '天猫', + stBrand: '小米', + stMemory: '8GB+256GB', + stModel: 'CC9 PRO', + storeName: '小米天猫官方旗舰店', + storeType: '官方旗舰店', + timeSegment: '2020-02-11 20' + }, + { + benefitInfo: '6期内免息;促销:满1999.0减50.0', + cartPrice: 1999, + dt: '2020-02-11 00:00:00', + fdsUrl: + 'http://cnbj1-fds.api.xiaomi.net/pricemonitor/TMALL/2020021120/4160269812356@597269145005.png', + goodsCategory: '手机', + key: 24, + isFlagshipStore: '1', + platformUrl: + 'https://detail.tmall.com/item.htm?id=597269145005&skuId=4160269812356', + priceSegment: '1000-2000', + receptionPrice: 1949, + skuCnt: '0', + source: '天猫', + stBrand: '小米', + stMemory: '8GB+256GB', + stModel: 'CC9 美图定制版', + storeName: '小米天猫官方旗舰店', + storeType: '官方旗舰店', + timeSegment: '2020-02-11 20' + }, + { + benefitInfo: + '小米 MI (赠品)小米移动电源3 10000mAh USB-C双向快充版 银色;优惠券:满980.0减60.0', + cartPrice: 1999, + dt: '2020-02-11 00:00:00', + fdsUrl: + 'http://cnbj1-fds.api.xiaomi.net/pricemonitor/JD/2020021120/7437712.png', + goodsCategory: '手机', + key: 32, + isFlagshipStore: '1', + platformUrl: 'https://item.jd.com/7437712.html', + priceSegment: '1000-2000', + receptionPrice: 1939, + skuCnt: '0', + source: '京东', + stBrand: '小米', + stMemory: '8GB+256GB', + stModel: 'CC9 美图定制版', + storeName: '小米京东官方旗舰店', + storeType: '官方旗舰店', + timeSegment: '2020-02-11 20' + }, + { + benefitInfo: '6期内免息', + cartPrice: 1099, + dt: '2020-02-11 00:00:00', + fdsUrl: + 'http://cnbj1-fds.api.xiaomi.net/pricemonitor/JD/2020021112/100003884767.png', + goodsCategory: '手机', + key: 38, + isFlagshipStore: '1', + platformUrl: 'https://item.jd.com/100003884767.html', + priceSegment: '1000-2000', + receptionPrice: 1049, + skuCnt: '0', + source: '京东', + stBrand: '小米', + stMemory: '6GB+64GB', + stModel: 'CC9E', + storeName: '小米京东官方旗舰店', + storeType: '官方旗舰店', + timeSegment: '2020-02-11 12' + }, + { + benefitInfo: '优惠券:满980.0减60.0', + cartPrice: 2499, + dt: '2020-02-11 00:00:00', + fdsUrl: + 'http://cnbj1-fds.api.xiaomi.net/pricemonitor/JD/2020021103/100003582699.png', + goodsCategory: '手机', + key: 29, + isFlagshipStore: '1', + platformUrl: 'https://item.jd.com/100003582699.html', + priceSegment: '2000-3000', + receptionPrice: 2039, + skuCnt: '0', + source: '京东', + stBrand: 'REDMI', + stMemory: '6GB+64GB', + stModel: 'K20 PRO', + storeName: '小米京东官方旗舰店', + storeType: '官方旗舰店', + timeSegment: '2020-02-11 03' + } + ] + } + render() { + return
    + } + }`, + opt: ['列冻结'] + }, + { + code: `import React from 'react' + import Table from '@hi-ui/hiui/es/table'\n + class Demo extends React.Component { + constructor(props){ + super(props) + this.columns = [ + { + title: 'Name', + dataKey: 'name', + key: 1 + }, + { + title: 'Age', + dataKey: 'age', + key: 2, + sorter (pre, next) { + return pre.age - next.age + } + }, + { + title: 'Home phone', + colSpan: 2, + dataKey: 'tel', + key: 3 + }, + { + title: 'Phone', + dataKey: 'phone', + key: 4, + sorter (pre, next) { + return pre.phone - next.phone + } + }, + { + title: 'Address', + dataKey: 'address', + key: 5 + } + ] + + this.data = [ + { + key: '1', + name: 'John Brown', + age: 32, + tel: '0571-22098909', + phone: 18889898989, + address: 'New York No. 1 Lake Park' + }, + { + key: '2', + name: 'Jim Green', + tel: '0571-22098333', + phone: 18889898888, + age: 42, + address: 'London No. 1 Lake Park' + }, + { + key: '3', + name: 'Joe Black', + age: 32, + tel: '0575-22098909', + phone: 18900010002, + address: 'Sidney No. 1 Lake Park' + }, + { + key: '4', + name: 'Jim Red', + age: 18, + tel: '0575-22098909', + phone: 18900010002, + address: 'London No. 2 Lake Park' + }, + { + key: '5', + name: 'Jake White', + age: 18, + tel: '0575-22098909', + phone: 18900010002, + address: 'Dublin No. 2 Lake Park' + } + ] + } + render() { + return
    + } + }`, + opt: ['列伸缩'] + }, + { + code: `import React from 'react' + import Table from '@hi-ui/hiui/es/table'\n + class Demo extends React.Component { + constructor(props){ + super(props) + this.columns = [ + { + title: 'Name', + dataKey: 'name', + key: 1 + }, + { + title: 'Age', + dataKey: 'age', + key: 2, + sorter (pre, next) { + return pre.age - next.age + } + }, + { + title: 'Home phone', + colSpan: 2, + dataKey: 'tel', + key: 3 + }, + { + title: 'Phone', + dataKey: 'phone', + key: 4, + sorter (pre, next) { + return pre.phone - next.phone + } + }, + { + title: 'Address', + dataKey: 'address', + key: 5 + } + ] + + this.data = [ + { + key: '1', + name: 'John Brown', + age: 32, + tel: '0571-22098909', + phone: 18889898989, + address: 'New York No. 1 Lake Park' + }, + { + key: '2', + name: 'Jim Green', + tel: '0571-22098333', + phone: 18889898888, + age: 42, + address: 'London No. 1 Lake Park' + }, + { + key: '3', + name: 'Joe Black', + age: 32, + tel: '0575-22098909', + phone: 18900010002, + address: 'Sidney No. 1 Lake Park' + }, + { + key: '4', + name: 'Jim Red', + age: 18, + tel: '0575-22098909', + phone: 18900010002, + address: 'London No. 2 Lake Park' + }, + { + key: '5', + name: 'Jake White', + age: 18, + tel: '0575-22098909', + phone: 18900010002, + address: 'Dublin No. 2 Lake Park' + } + ] + } + render() { + return
    + } + }`, + opt: ['列调整'] + } +] + +const DemoBase = () => ( + +) +export default DemoBase diff --git a/docs/demo/table/section-compact.jsx b/docs/demo/table/section-compact.jsx deleted file mode 100644 index f0e953d98..000000000 --- a/docs/demo/table/section-compact.jsx +++ /dev/null @@ -1,55 +0,0 @@ -import React from 'react' -import DocViewer from '../../../libs/doc-viewer' -import Table from '../../../components/table' -const prefix = 'table-compact' -const code = `import React from 'react' -import Table from '@hi-ui/hiui/es/table'\n -class Demo extends React.Component { - constructor(props){ - super(props) - - this.columns = [ - - { title: 'Column 1', dataIndex: 'name', key: '1'}, - { title: 'Column 1', dataIndex: 'age', key: '2'}, - { title: 'Column 1', dataIndex: 'address', key: '3'}, - { - title: ()=>
    自定义标题
    , - dataIndex: 'address', key: '4', - render(text,record,index){ - return ( -
    - {text} --- {index} --- 自定义渲染 -
    - ) - }}, - { - title: 'Action', - key: 'operation', - width: 100, - render: () => action, - }, - ] - - this.data = [] - for (let i = 0; i < 10; i++) { - this.data.push({ - // key: i, - name: \`Don Diablo \${i}\`, - age: \`\${i}\${i}\`, - address: \`EDC Las Vegas no. \${i}\`, - }); - } - } - render() { - return
    item.id === 1 || item.id === 3} /> - } -}` -const DemoCompact = () => ( - -) -export default DemoCompact diff --git a/docs/demo/table/section-extend.jsx b/docs/demo/table/section-extend.jsx deleted file mode 100644 index d2c827156..000000000 --- a/docs/demo/table/section-extend.jsx +++ /dev/null @@ -1,83 +0,0 @@ -import React from 'react' -import DocViewer from '../../../libs/doc-viewer' -import Table from '../../../components/table' -import Input from '../../../components/input' -import Button from '../../../components/button' -import Form from '../../../components/form/index' -import FormItem from '../../../components/form/Item' -const prefix = 'table-extend' -const code = `import React from 'react' -import Form from '@hi-ui/hiui/es/form/index' -import Button from '@hi-ui/hiui/es/button' -import FormItem from '@hi-ui/hiui/es/form/item' -import Input from '@hi-ui/hiui/es/input' -import Table from '@hi-ui/hiui/es/table'\n -class Demo extends React.Component { - constructor(props){ - super(props) - - this.columns = [ - - - { - type: 'expand', - key:'expand', - width:'50', - fixed: 'left', - render (text, record, index) { - return ( -
    -
    -
    - - - - - - - - - - - - -
    - ) - } - }, - { title: 'Full Name', width: 150, dataIndex: 'name', key: 'name', fixed: 'left' }, - { title: 'Age', width: 150, dataIndex: 'age', key: 'age', fixed: 'left' }, - { title: 'Column 1', dataIndex: 'address', key: '1'}, - { title: 'Column 2', dataIndex: 'address', key: '2' }, - { title: 'Column 3', dataIndex: 'address', key: '3'}, - { title: 'Column 4', dataIndex: 'address', key: '4'}, - { title: 'Column 5', dataIndex: 'address', key: '5'}, - { title: 'Column 6', dataIndex: 'address', key: '6'}, - { title: 'Column 7', dataIndex: 'address', key: '7'}, - // { title: 'Column 8', dataIndex: 'address', key: '8' } - ] - - this.data = [{ - key: '1', - name: 'John Brown', - age: 32, - address: 'New York Park' - }, { - key: '2', - name: 'Jim Green', - age: 40, - address: 'London Park' - }] - } - render() { - return
    - } -}` -const DemoExtend = () => ( - -) -export default DemoExtend diff --git a/docs/demo/table/section-group.jsx b/docs/demo/table/section-group.jsx deleted file mode 100644 index 8e5832037..000000000 --- a/docs/demo/table/section-group.jsx +++ /dev/null @@ -1,119 +0,0 @@ -import React from 'react' -import DocViewer from '../../../libs/doc-viewer' -import Table from '../../../components/table' -const prefix = 'table-group' -const code = `import React from 'react' -import Table from '@hi-ui/hiui/es/table'\n -class Demo extends React.Component { - constructor(props){ - super(props) - - this.state = { - selectedRowKeys: [], // Check here to configure the default column - data - } - this.columns = [{ - title: 'Name', - dataIndex: 'name', - key: '1', - // width: 100, - - filters: [{ - text: 'Joe', - value: 'Joe' - }, { - text: 'John', - value: 'John' - }], - onFilter: (value, record) => record.name.indexOf(value) === 0 - }, { - title: 'Other', - - children: [{ - title: 'Age', - dataIndex: 'age', - // key: 'age', - // width: 200, - key:2, - sorter: (a, b) => a.age - b.age - }, { - title: 'Address', - - children: [{ - title: 'Street', - dataIndex: 'street', - key: '3' - // width: 200, - }, { - title: 'Block', - children: [{ - title: 'Building', - dataIndex: 'building', - key: '4' - // width: 100, - }, { - title: 'Door No.', - dataIndex: 'number', - key: '5' - // width: 100, - }] - }] - }] - }, { - title: 'Company', - key: '6', - children: [{ - title: 'Company Address', - dataIndex: 'companyAddress', - key: '7' - }, { - title: 'Company Name', - dataIndex: 'companyName', - key: '8' - }] - }, { - title: 'Gender', - dataIndex: 'gender', - key: '9' - // width: 60, - - }] - - const data = [] - for (let i = 0; i < 6; i++) { - data.push({ - key: i, - name: 'John Brown', - age: i + 1, - street: 'Lake Park', - building: 'C', - number: 2035, - companyAddress: 'Lake Street 42', - companyName: 'SoftLake Co', - gender: 'M' - }) - } - this.data = data - } - - render() { - const { selectedRowKeys ,data} = this.state - const rowSelection = { - selectedRowKeys, - onChange: (selectedRowKeys,rows)=>{ - this.setState({selectedRowKeys}) - }, - dataName:'age' - } - return
    - } -}` - -const DemoGroup = () => ( - -) -export default DemoGroup diff --git a/docs/demo/table/section-header.jsx b/docs/demo/table/section-header.jsx deleted file mode 100644 index 5946e3cc9..000000000 --- a/docs/demo/table/section-header.jsx +++ /dev/null @@ -1,58 +0,0 @@ -import React from 'react' -import DocViewer from '../../../libs/doc-viewer' -import Table from '../../../components/table' -const prefix = 'table-header' -const desc = '方便与主键数据的有效衔接' -const code = `import React from 'react' -import Table from '@hi-ui/hiui/es/table'\n -class Demo extends React.Component { - constructor(props){ - super(props) - - this.columns = [ - - { title: 'Column 1', dataIndex: 'name', key: '1'}, - { title: 'Column 1', dataIndex: 'age', key: '2'}, - { title: 'Column 1', dataIndex: 'address', key: '3'}, - { - title: ()=>
    自定义标题
    , - dataIndex: 'address', key: '4', - render(text,record,index){ - return ( -
    - {text} --- {index} --- 自定义渲染 -
    - ) - }}, - { - title: 'Action', - key: 'operation', - width: 100, - render: () => action, - }, - ] - - this.data = [] - for (let i = 0; i < 10; i++) { - this.data.push({ - key: i, - name: \`Don Diablo \${i}\`, - age: \`\${i}\${i}\`, - address: \`EDC Las Vegas no. \${i}\`, - }); - } - } - render() { - return
    - } -}` - -const DemoHeader = () => ( - -) -export default DemoHeader diff --git a/docs/demo/table/section-height.jsx b/docs/demo/table/section-height.jsx deleted file mode 100644 index a57c25114..000000000 --- a/docs/demo/table/section-height.jsx +++ /dev/null @@ -1,58 +0,0 @@ -import React from 'react' -import DocViewer from '../../../libs/doc-viewer' -import Table from '../../../components/table' -const prefix = 'table-base' -const code = `import React from 'react' -import Table from '@hi-ui/hiui/es/table'\n - -class Demo extends React.Component { - constructor(props){ - super(props) - - this.columns = [ - - { title: '姓名', dataIndex: 'name', key: '1'}, - { title: '年龄', dataIndex: 'age', key: '2'}, - { title: '地址', dataIndex: 'address', key: '3'}, - { - title: ()=>
    自定义标题
    , - dataIndex: 'address', key: '4', - width: '500px', - render(text,record,index){ - return ( -
    - {text} --- {index} --- 自定义渲染 -
    - ) - }}, - { - title: 'Action', - key: 'operation', - width: 100, - render: () => action, - }, - ] - - this.data = [] - for (let i = 0; i < 10; i++) { - this.data.push({ - // key: i, - name: \`Don Diablo \${i}\`, - age: \`\${i}\${i}\`, - address: \`EDC Las Vegas no. \${i}\`, - }); - } - } - render() { - return
    item.id === 1 || item.id === 3} /> - } -}` - -const DemoBase = () => ( - -) -export default DemoBase diff --git a/docs/demo/table/section-loose.jsx b/docs/demo/table/section-loose.jsx deleted file mode 100644 index 7546ace46..000000000 --- a/docs/demo/table/section-loose.jsx +++ /dev/null @@ -1,56 +0,0 @@ -import React from 'react' -import DocViewer from '../../../libs/doc-viewer' -import Table from '../../../components/table' -const prefix = 'table-loose' - -const code = `import React from 'react' -import Table from '@hi-ui/hiui/es/table'\n -class Demo extends React.Component { - constructor(props){ - super(props) - - this.columns = [ - - { title: 'Column 1', dataIndex: 'name', key: '1'}, - { title: 'Column 1', dataIndex: 'age', key: '2'}, - { title: 'Column 1', dataIndex: 'address', key: '3'}, - { - title: ()=>
    自定义标题
    , - dataIndex: 'address', key: '4', - render(text,record,index){ - return ( -
    - {text} --- {index} --- 自定义渲染 -
    - ) - }}, - { - title: 'Action', - key: 'operation', - width: 100, - render: () => action, - }, - ] - - this.data = [] - for (let i = 0; i < 10; i++) { - this.data.push({ - // key: i, - name: \`Don Diablo \${i}\`, - age: \`\${i}\${i}\`, - address: \`EDC Las Vegas no. \${i}\`, - }); - } - } - render() { - return
    item.id === 1 || item.id === 3} /> - } -}` -const DemoLoose = () => ( - -) -export default DemoLoose diff --git a/docs/demo/table/section-memory.jsx b/docs/demo/table/section-memory.jsx deleted file mode 100644 index c337a628f..000000000 --- a/docs/demo/table/section-memory.jsx +++ /dev/null @@ -1,58 +0,0 @@ -import React from 'react' -import DocViewer from '../../../libs/doc-viewer' -import Table from '../../../components/table' -const prefix = 'table-base' -const code = `import React from 'react' -import Table from '@hi-ui/hiui/es/table'\n -class Demo extends React.Component { - constructor(props){ - super(props) - - this.columns = [ - - { title: 'Column 1', dataIndex: 'name', key: '1'}, - { title: 'Column 1', dataIndex: 'age', key: '2'}, - { title: 'Column 1', dataIndex: 'address', key: '3'}, - { - title: ()=>
    自定义标题
    , - dataIndex: 'address', key: '4', - width: '500px', - render(text,record,index){ - return ( -
    - {text} --- {index} --- 自定义渲染 -
    - ) - }}, - { - title: 'Action', - key: 'operation', - width: 100, - render: () => action, - }, - ] - - this.data = [] - for (let i = 0; i < 10; i++) { - this.data.push({ - // key: i, - name: \`Don Diablo \${i}\`, - age: \`\${i}\${i}\`, - address: \`EDC Las Vegas no. \${i}\`, - }); - } - } - render() { - return
    item.id === 1 || item.id === 3} /> - } -}` - -const DemoBase = () => ( - -) -export default DemoBase diff --git a/docs/demo/table/section-merge.jsx b/docs/demo/table/section-merge.jsx deleted file mode 100644 index 2c1872cc1..000000000 --- a/docs/demo/table/section-merge.jsx +++ /dev/null @@ -1,127 +0,0 @@ -import React from 'react' -import DocViewer from '../../../libs/doc-viewer' -import Table from '../../../components/table' -const prefix = 'table-merge' -const desc = '相邻上下的单元格值相同,减轻数据冗余' -const code = `import React from 'react' -import Table from '@hi-ui/hiui/es/table'\n -class Demo extends React.Component { - constructor(props){ - super(props) - const renderContent = (value, row, index) => { - const obj = { - children: value, - props: {} - } - if (index === 4) { - obj.props.colSpan = 0 - } - return obj - } - - this.columns = [{ - title: 'Name', - dataIndex: 'name', - render: (text, row, index) => { - if (index < 4) { - return {text} - } - return { - children: {text}, - props: { - colSpan: 5 - } - } - }, - key:1 - }, { - title: 'Age', - dataIndex: 'age', - render: renderContent, - key:2 - }, { - title: 'Home phone', - colSpan: 2, - dataIndex: 'tel', - key:3, - render: (value, row, index) => { - const obj = { - children: value, - props: {} - } - if (index === 2) { - obj.props.rowSpan = 2 - } - // These two are merged into above cell - if (index === 3) { - obj.props.rowSpan = 0 - } - if (index === 4) { - obj.props.colSpan = 0 - } - return obj - } - }, { - title: 'Phone', - colSpan: 0, - dataIndex: 'phone', - render: renderContent, - key:4 - }, { - title: 'Address', - dataIndex: 'address', - render: renderContent, - key:5 - }] - - this.data = [{ - key: '1', - name: 'John Brown', - age: 32, - tel: '0571-22098909', - phone: 18889898989, - address: 'New York No. 1 Lake Park' - }, { - key: '2', - name: 'Jim Green', - tel: '0571-22098333', - phone: 18889898888, - age: 42, - address: 'London No. 1 Lake Park' - }, { - key: '3', - name: 'Joe Black', - age: 32, - tel: '0575-22098909', - phone: 18900010002, - address: 'Sidney No. 1 Lake Park' - }, { - key: '4', - name: 'Jim Red', - age: 18, - tel: '0575-22098909', - phone: 18900010002, - address: 'London No. 2 Lake Park' - }, { - key: '5', - name: 'Jake White', - age: 18, - tel: '0575-22098909', - phone: 18900010002, - address: 'Dublin No. 2 Lake Park' - }] - } - render() { - return
    - } -}` - -const DemoMerge = () => ( - -) -export default DemoMerge diff --git a/docs/demo/table/section-multiple.jsx b/docs/demo/table/section-multiple.jsx deleted file mode 100644 index 8eabb0747..000000000 --- a/docs/demo/table/section-multiple.jsx +++ /dev/null @@ -1,82 +0,0 @@ -import React from 'react' -import DocViewer from '../../../libs/doc-viewer' -import Table from '../../../components/table' -const prefix = 'table-multiple' -const code = `import React from 'react' -import Table from '@hi-ui/hiui/es/table'\n -class Demo extends React.Component { - constructor(props){ - super(props) - - this.columns = [ - - { - title: 'name', - dataIndex: 'name', - key: '1', - width: '200px' - }, - { - dataIndex: 'age', - key: '2', - width: '150px', - sorter(pre,next){ - return pre.age - next.age - } - }, - { title: 'Column 1', dataIndex: 'address', key: '3', width: '200px'}, - { - title: ()=>
    自定义标题
    , - dataIndex: 'address', key: '4', - render(text,record,index){ - return ( -
    - {text} --- {index} --- 自定义渲染 -
    - ) - }}, - { - title: 'Action', - key: 'operation', - width: 100, - render: () => action, - }, - ] - - const data = [] - for (let i = 0; i < 10; i++) { - data.push({ - key: i + 1, - name: \`Don Diablo \${i}\`, - age: \`\${i}\`, - address: \`EDC Las Vegas no. \${i}\`, - }); - } - - this.state = { - selectedRowKeys: [], // Check here to configure the default column - data - } - } - - render(){ - const { selectedRowKeys ,data} = this.state - const rowSelection = { - selectedRowKeys, - onChange: (selectedRowKeys,rows)=>{ - this.setState({selectedRowKeys}) - }, - dataName:'age' - } - return
    - } -}` - -const DemoMultiple = () => ( - -) -export default DemoMultiple diff --git a/docs/demo/table/section-paging.jsx b/docs/demo/table/section-paging.jsx deleted file mode 100644 index 4083a5e27..000000000 --- a/docs/demo/table/section-paging.jsx +++ /dev/null @@ -1,107 +0,0 @@ -import React from 'react' -import DocViewer from '../../../libs/doc-viewer' -import Table from '../../../components/table' -import Input from '../../../components/input' -import Button from '../../../components/button' -import Form from '../../../components/form/index' -import FormItem from '../../../components/form/Item' -const prefix = 'table-paging' -const code = `import React from 'react' -import Button from '@hi-ui/hiui/es/button' -import Form from '@hi-ui/hiui/es/form/index' -import FormItem from '@hi-ui/hiui/es/form/item' -import Input from '@hi-ui/hiui/es/input' -import Table from '@hi-ui/hiui/es/table'\n -class Demo extends React.Component { - constructor(props){ - super(props) - - this.columns = [ - - { - type: 'expand', - key:'expand', - fixed: 'left', - render (text, record, index) { - return ( -
    -
    -
    - - - - - - - - - - - - -
    - ) - } - }, - { title: 'Full Name', width: 100, dataIndex: 'name', key: 'name', fixed: 'left' }, - { title: 'Age', width: 100, dataIndex: 'age', key: 'age', fixed: 'left' }, - { title: 'Column 1', dataIndex: 'address', key: '1' ,width:120,}, - { title: 'Column 2', dataIndex: 'address', key: '2' ,width:120,}, - { title: 'Column 3', dataIndex: 'address', key: '3' ,width:120,}, - { title: 'Column 4', dataIndex: 'address', key: '4' ,width:120,}, - { title: 'Column 5', dataIndex: 'address', key: '5' ,width:120,}, - { title: 'Column 6', dataIndex: 'address', key: '6' ,width:120,}, - { title: 'Column 7', dataIndex: 'address', key: '7' ,width:120,}, - { title: 'Column 8', dataIndex: 'address', key: '8' } - ] - this.state = { - pageSize: 10, - total: 100, - current :2, - data: [] - } - } - - set(current){ - let {pageSize} = this.state - let data = [] - for(let i=pageSize*(current-1);i{ - this.set(page) - }, - position : 'center', - - }} - /> - } -}` -const DemoPaging = () => ( - -) -export default DemoPaging diff --git a/docs/demo/table/section-right-hand-row.jsx b/docs/demo/table/section-right-hand-row.jsx deleted file mode 100644 index 092a2d257..000000000 --- a/docs/demo/table/section-right-hand-row.jsx +++ /dev/null @@ -1,53 +0,0 @@ -import React from 'react' -import DocViewer from '../../../libs/doc-viewer' -import Table from '../../../components/table' -const prefix = 'table-right-hand-row' -const code = `import React from 'react' -import Table from '@hi-ui/hiui/es/table'\n -class Demo extends React.Component { - constructor(props){ - super(props) - - this.columns = [ - { title: 'Column 1', dataIndex: 'address', key: '1' }, - { title: 'Column 2', dataIndex: 'address', key: '2', }, - { title: 'Column 3', dataIndex: 'address', key: '3' }, - { title: 'Column 4', dataIndex: 'address', key: '4'}, - { title: 'Column 5', dataIndex: 'address', key: '5'}, - { title: 'Column 6', dataIndex: 'address', key: '6'}, - { title: 'Column 7', dataIndex: 'address', key: '7'}, - { title: 'Column 8', dataIndex: 'address', key: '8'}, - { title: 'Column 9', dataIndex: 'address', key: '9'}, - { title: 'Column 10', dataIndex: 'address', key: '10'}, - { title: 'Column 11', dataIndex: 'address', key: '11'} - ] - - this.data = [{ - key: '1', - name: 'John Brown', - age: 32, - address: 'New York Park' - }, { - key: '2', - name: 'Jim Green', - age: 40, - address: 'London Park' - }] - } - render() { - return ( -
    -
    - - ) - } -}` - -const DemoRightHandRow = () => ( - -) -export default DemoRightHandRow diff --git a/docs/demo/table/section-row.jsx b/docs/demo/table/section-row.jsx index 31da1d51b..badda8fa4 100644 --- a/docs/demo/table/section-row.jsx +++ b/docs/demo/table/section-row.jsx @@ -2,62 +2,206 @@ import React from 'react' import DocViewer from '../../../libs/doc-viewer' import Table from '../../../components/table' const prefix = 'table-row' -const code = `import React from 'react' -import Table from '@hi-ui/hiui/es/table'\n -class Demo extends React.Component { - constructor(props){ - super(props) +const desc = ['行高亮:突出某行数据且方便阅读'] +const rightOptions = ['行高亮', '批量选择'] +const code = [ + { + code: `import React from 'react' + import Table from '@hi-ui/hiui/es/table'\n + class Demo extends React.Component { + constructor(props){ + super(props) + this.columns = [ + { + title: '商品名', + dataKey: 'name' + }, + { + title: '品类', + dataKey: 'type' + }, + { + title: '规格', + dataKey: 'size' + }, + { + title: '单价', + dataKey: 'price', + align: 'right' + }, + { + title: '门店', + dataKey: 'address' + }, + { + title: '库存', + dataKey: 'stock', + align: 'right' + } + ] - this.columns = [ + this.data = [ + { + name: '小米9', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '3299.00', + address: '华润五彩城店', + stock: '29,000', + key: 1 + }, + { + name: '小米9 SE', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '1999.00', + address: '清河店', + stock: '10,000', + key: 2 + }, + { + name: '小米8', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '2599.00', + address: '双安店', + stock: '12,000', + key: 3 + }, + { + name: 'Redmi Note7', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '999.00', + address: '华润五彩城店', + stock: '140,000', + key: 4 + }, + { + name: '小米8 SE', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '699.00', + address: '双安店', + stock: '12,000', + key: 5 + } + ] + } + render() { + return
    + } + }`, + opt: ['行高亮'] + }, + { + code: `import React from 'react' + import Table from '@hi-ui/hiui/es/table'\n + class Demo extends React.Component { + constructor(props){ + super(props) + this.state={selectedRowKeys:[]} + this.columns = [ + { + title: '商品名', + dataKey: 'name' + }, + { + title: '品类', + dataKey: 'type' + }, + { + title: '规格', + dataKey: 'size' + }, + { + title: '单价', + dataKey: 'price', + align: 'right' + }, + { + title: '门店', + dataKey: 'address' + }, + { + title: '库存', + dataKey: 'stock', + align: 'right' + } + ] - { title: 'Column 1', dataIndex: 'address', key: 'a',fixed:'left' }, - { title: 'Column 2', dataIndex: 'address', key: 'b', }, - { title: 'Column 3', dataIndex: 'address', key: 'c', }, - { title: 'Column 4', dataIndex: 'address', key: 'd', }, - { title: 'Column 1', dataIndex: 'address', key: 'e', }, - { title: 'Column 2', dataIndex: 'address', key: 'f', }, - { title: 'Column 1', dataIndex: 'address', key: 'g', }, - { title: 'Column 2', dataIndex: 'address', key: 'h', }, - { - title: 'Action', - key: 'operation', - width: 100, - render: () => action, - }, - ] - - - - this.data = [] - for (let i = 0; i < 10; i++) { - this.data.push({ - key: i+1, - name: \`Don Diablo \${i}\`, - age: \`\${i}\${i}\`, - address: \`EDC Las Vegas no. \${i}\`, - }); - } + this.data = [ + { + name: '小米9', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '3299.00', + address: '华润五彩城店', + stock: '29,000', + key: 1 + }, + { + name: '小米9 SE', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '1999.00', + address: '清河店', + stock: '10,000', + key: 2 + }, + { + name: '小米8', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '2599.00', + address: '双安店', + stock: '12,000', + key: 3 + }, + { + name: 'Redmi Note7', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '999.00', + address: '华润五彩城店', + stock: '140,000', + key: 4 + }, + { + name: '小米8 SE', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '699.00', + address: '双安店', + stock: '12,000', + key: 5 + } + ] + } + render() { + return (
    { + this.setState({selectedRowKeys}) + } + }} + />) + } + }`, + opt: ['批量选择'] } - render() { - return ( -
    -
    - +] - ) - } -}` -const DemoRow = () => ( +const DemoBase = () => ( ) -export default DemoRow +export default DemoBase diff --git a/docs/demo/table/section-server.jsx b/docs/demo/table/section-server.jsx deleted file mode 100644 index 6ea1af899..000000000 --- a/docs/demo/table/section-server.jsx +++ /dev/null @@ -1,115 +0,0 @@ -import React from 'react' -import DocViewer from '../../../libs/doc-viewer' -import Table from '../../../components/table' -import Form from '../../../components/form/index' -import Input from '../../../components/input' -import Button from '../../../components/button' -import FormItem from '../../../components/form/Item' -const prefix = 'table-server' -const desc = '运用搜索方式从服务器端实时请求数据,有效减轻前端显示压力' -const code = `import React from 'react' -import Button from '@hi-ui/hiui/es/button' -import Form from '@hi-ui/hiui/es/form/index' -import FormItem from '@hi-ui/hiui/es/form/item' -import Input from '@hi-ui/hiui/es/input' -import Table from '@hi-ui/hiui/es/table'\n -class Demo extends React.Component { - constructor (props) { - super(props) - this.state = { - from: '', - pageSize:2 - } - - window.selectTable = this - } - - render () { - const { - from, - pageSize - } = this.state - - const rowSelection = { - selectedRowKeys: [], - onChange: (selectedRowKeys, rows) => { - this.setState({selectedRowKeys}) - }, - dataName: 'id' - } - - return ( -
    - 发货工厂 - -
    - - this.setState({from: e.target.value})} /> - - - - - - -
    { - let {data: {list, columns,page: {pageSize, totalNum, pageNum}}} = res - console.log(list, columns) - return { - data: list, - columns, - page: { - pageSize, - total: totalNum, - current: pageNum, - position: 'middle', - showTotal: true, - - pageSizeOptions:[10,20,50,100], - sizeChangeEvent:(pageSize,current) => { - this.setState({ - pageSize - }) - }, - - - } - } - }, - error: (e) => { - console.log('err',e) - } - }} - /> - - ) - } -}` - -const DemoServer = () => ( - -) -export default DemoServer diff --git a/docs/demo/table/section-size.jsx b/docs/demo/table/section-size.jsx new file mode 100644 index 000000000..910f89d4f --- /dev/null +++ b/docs/demo/table/section-size.jsx @@ -0,0 +1,197 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import Table from '../../../components/table' +const prefix = 'table-size' +const desc = ['紧凑:展示空间有限的场景'] +const rightOptions = ['紧凑', '宽松'] +const code = [ + { + code: `import React from 'react' + import Table from '@hi-ui/hiui/es/table'\n + class Demo extends React.Component { + constructor(props){ + super(props) + this.columns = [ + { + title: '商品名', + dataKey: 'name' + }, + { + title: '品类', + dataKey: 'type' + }, + { + title: '规格', + dataKey: 'size' + }, + { + title: '单价', + dataKey: 'price', + align: 'right' + }, + { + title: '门店', + dataKey: 'address' + }, + { + title: '库存', + dataKey: 'stock', + align: 'right' + } + ] + + this.data = [ + { + name: '小米9', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '3299.00', + address: '华润五彩城店', + stock: '29,000', + key: 1 + }, + { + name: '小米9 SE', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '1999.00', + address: '清河店', + stock: '10,000', + key: 2 + }, + { + name: '小米8', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '2599.00', + address: '双安店', + stock: '12,000', + key: 3 + }, + { + name: 'Redmi Note7', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '999.00', + address: '华润五彩城店', + stock: '140,000', + key: 4 + }, + { + name: '小米8 SE', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '699.00', + address: '双安店', + stock: '12,000', + key: 5 + } + ] + } + render() { + return
    + } + }`, + opt: ['紧凑'] + }, + { + code: `import React from 'react' + import Table from '@hi-ui/hiui/es/table'\n + class Demo extends React.Component { + constructor(props){ + super(props) + this.columns = [ + { + title: '商品名', + dataKey: 'name' + }, + { + title: '品类', + dataKey: 'type' + }, + { + title: '规格', + dataKey: 'size' + }, + { + title: '单价', + dataKey: 'price', + align: 'right' + }, + { + title: '门店', + dataKey: 'address' + }, + { + title: '库存', + dataKey: 'stock', + align: 'right' + } + ] + + this.data = [ + { + name: '小米9', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '3299.00', + address: '华润五彩城店', + stock: '29,000', + key: 1 + }, + { + name: '小米9 SE', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '1999.00', + address: '清河店', + stock: '10,000', + key: 2 + }, + { + name: '小米8', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '2599.00', + address: '双安店', + stock: '12,000', + key: 3 + }, + { + name: 'Redmi Note7', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '999.00', + address: '华润五彩城店', + stock: '140,000', + key: 4 + }, + { + name: '小米8 SE', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '699.00', + address: '双安店', + stock: '12,000', + key: 5 + } + ] + } + render() { + return
    + } + }`, + opt: ['宽松'] + } +] + +const DemoSize = () => ( + +) +export default DemoSize diff --git a/docs/demo/table/section-sort.jsx b/docs/demo/table/section-sort.jsx deleted file mode 100644 index cabb8f297..000000000 --- a/docs/demo/table/section-sort.jsx +++ /dev/null @@ -1,71 +0,0 @@ -import React from 'react' -import DocViewer from '../../../libs/doc-viewer' -import Table from '../../../components/table' -import Tooltip from '../../../components/tooltip' -const prefix = 'table-sort' -const code = `import React from 'react' -import Tooltip from '@hi-ui/hiui/es/tooltip' -import Table from '@hi-ui/hiui/es/table'\n -class Demo extends React.Component { - constructor(props){ - super(props) - - this.columns = [ - - { - title: - 短文本 - , - dataIndex: 'name', key: '1', - }, - { - dataIndex: 'age', - key: '2', - sorter(pre,next){ - return pre.age - next.age - } - }, - { title: 'Column 1', dataIndex: 'address', key: '3'}, - { - title: ()=>
    自定义标题
    , - dataIndex: 'address', key: '4', - render(text,record,index){ - return ( -
    - {text} --- {index} --- 自定义渲染 -
    - ) - }}, - { - title: 'Action', - key: 'operation', - width: 100, - render: () => action, - }, - ] - - this.data = [] - for (let i = 0; i < 10; i++) { - this.data.push({ - key: i, - name: \`Don Diablo \${i}\`, - age: \`\${i}\`, - address: \`EDC Las Vegas no. \${i}\`, - }); - } - } - render() { - return
    - } -}` - -const DemoSort = () => ( - -) -export default DemoSort diff --git a/docs/demo/table/section-special.jsx b/docs/demo/table/section-special.jsx new file mode 100644 index 000000000..2ffc14446 --- /dev/null +++ b/docs/demo/table/section-special.jsx @@ -0,0 +1,628 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import Table from '../../../components/table' +const prefix = 'table-special' +const desc = [ + '全边框:运用分割线让行列关系更清晰明确', + '树形表格:首列是树形结构,每个树杈都可共用表头', + '内嵌式:表格每行隐藏部分数据,递进呈现' +] +const rightOptions = [ + '全边框', + '树形表格', + '内嵌式', + '表头分组', + '表头吸顶', + '固定表头', + '合并单元格' +] +const code = [ + { + code: `import React from 'react' + import Table from '@hi-ui/hiui/es/table'\n + class Demo extends React.Component { + constructor(props){ + super(props) + this.columns = [ + { + title: '商品名', + dataKey: 'name' + }, + { + title: '品类', + dataKey: 'type' + }, + { + title: '规格', + dataKey: 'size' + }, + { + title: '单价', + dataKey: 'price', + align: 'right' + }, + { + title: '门店', + dataKey: 'address' + }, + { + title: '库存', + dataKey: 'stock', + align: 'right' + } + ] + + this.data = [ + { + name: '小米9', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '3299.00', + address: '华润五彩城店', + stock: '29,000', + key: 1 + }, + { + name: '小米9 SE', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '1999.00', + address: '清河店', + stock: '10,000', + key: 2 + }, + { + name: '小米8', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '2599.00', + address: '双安店', + stock: '12,000', + key: 3 + }, + { + name: 'Redmi Note7', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '999.00', + address: '华润五彩城店', + stock: '140,000', + key: 4 + }, + { + name: '小米8 SE', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '699.00', + address: '双安店', + stock: '12,000', + key: 5 + } + ] + } + render() { + return
    + } + }`, + opt: ['全边框'] + }, + { + code: `import React from 'react' + import Table from '@hi-ui/hiui/es/table'\n + class Demo extends React.Component { + render() { + return
    + } + }`, + opt: ['树形表格'] + }, + { + code: `import React from 'react' + import Table from '@hi-ui/hiui/es/table'\n + class Demo extends React.Component { + constructor(props){ + super(props) + this.columns = [ + { + title: '商品名', + dataKey: 'name' + }, + { + title: '品类', + dataKey: 'type' + }, + { + title: '规格', + dataKey: 'size' + }, + { + title: '单价', + dataKey: 'price', + align: 'right' + }, + { + title: '门店', + dataKey: 'address' + }, + { + title: '库存', + dataKey: 'stock', + align: 'right' + } + ] + + this.data = [ + { + name: '小米9', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '3299.00', + address: '华润五彩城店', + stock: '29,000', + key: 1 + }, + { + name: '小米9 SE', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '1999.00', + address: '清河店', + stock: '10,000', + key: 2 + }, + { + name: '小米8', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '2599.00', + address: '双安店', + stock: '12,000', + key: 3 + }, + { + name: 'Redmi Note7', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '999.00', + address: '华润五彩城店', + stock: '140,000', + key: 4 + }, + { + name: '小米8 SE', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '699.00', + address: '双安店', + stock: '12,000', + key: 5 + } + ] + } + render() { + return
    { + return
    供应商:小米科技有限公司
    供货日期:2020-08-11
    + }} /> + } + }`, + opt: ['内嵌式'] + }, + { + code: `import React from 'react' + import Table from '@hi-ui/hiui/es/table'\n + class Demo extends React.Component { + constructor(props){ + super(props) + this.state={selectedRowKeys:[]} + this.columns = [ + { + title: 'Name', + dataKey: 'name', + key: '1' + }, + { + title: 'Other', + + children: [ + { + title: 'Age', + dataKey: 'age', + key: 2 + }, + { + title: 'Address', + + children: [ + { + title: 'Street', + dataKey: 'street', + key: '3' + }, + { + title: 'Block', + children: [ + { + title: 'Building', + dataKey: 'building', + key: '4' + }, + { + title: 'Door No.', + dataKey: 'number', + key: '5' + } + ] + } + ] + } + ] + }, + { + title: 'Company', + key: '6', + children: [ + { + title: 'Address', + dataKey: 'companyAddress', + key: '7' + }, + { + title: 'Name', + dataKey: 'companyName', + key: '8' + } + ] + }, + { + title: 'Gender', + dataKey: 'gender', + key: '9' + } + ] + let data = [] + for (let i = 0; i < 6; i++) { + data.push({ + key: i, + name: 'John Brown', + age: i + 1, + street: 'Lake Park', + building: 'C', + number: 2035, + companyAddress: 'Lake Street 42', + companyName: 'SoftLake Co', + gender: 'M' + }) + } + this.data = data + } + render() { + return
    { + this.setState({selectedRowKeys}) + } + }} /> + } + }`, + opt: ['表头分组'] + }, + { + code: `import React from 'react' + import Table from '@hi-ui/hiui/es/table'\n + class Demo extends React.Component { + constructor(props){ + super(props) + this.columns = [ + { + title: '商品名', + dataKey: 'name' + }, + { + title: '品类', + dataKey: 'type' + }, + { + title: '规格', + dataKey: 'size' + }, + { + title: '单价', + dataKey: 'price', + align: 'right' + }, + { + title: '门店', + dataKey: 'address' + }, + { + title: '库存', + dataKey: 'stock', + align: 'right' + } + ] + + this.data = [ + { + name: '小米9', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '3299.00', + address: '华润五彩城店', + stock: '29,000', + key: 1 + }, + { + name: '小米9 SE', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '1999.00', + address: '清河店', + stock: '10,000', + key: 2 + }, + { + name: '小米8', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '2599.00', + address: '双安店', + stock: '12,000', + key: 3 + }, + { + name: 'Redmi Note7', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '999.00', + address: '华润五彩城店', + stock: '140,000', + key: 4 + }, + { + name: '小米8 SE', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '699.00', + address: '双安店', + stock: '12,000', + key: 5 + } + ] + } + render() { + return
    + } + }`, + opt: ['表头吸顶'] + }, + { + code: `import React from 'react' + import Table from '@hi-ui/hiui/es/table'\n + class Demo extends React.Component { + constructor(props){ + super(props) + this.columns = [ + { + title: '商品名', + dataKey: 'name' + }, + { + title: '品类', + dataKey: 'type' + }, + { + title: '规格', + dataKey: 'size' + }, + { + title: '单价', + dataKey: 'price', + align: 'right' + }, + { + title: '门店', + dataKey: 'address' + }, + { + title: '库存', + dataKey: 'stock', + align: 'right' + } + ] + + this.data = [ + { + name: '小米9', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '3299.00', + address: '华润五彩城店', + stock: '29,000', + key: 1 + }, + { + name: '小米9 SE', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '1999.00', + address: '清河店', + stock: '10,000', + key: 2 + }, + { + name: '小米8', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '2599.00', + address: '双安店', + stock: '12,000', + key: 3 + }, + { + name: 'Redmi Note7', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '999.00', + address: '华润五彩城店', + stock: '140,000', + key: 4 + }, + { + name: '小米8 SE', + type: '手机', + size: '6G+64G 全息幻彩蓝', + price: '699.00', + address: '双安店', + stock: '12,000', + key: 5 + } + ] + } + render() { + return
    + } + }`, + opt: ['固定表头'] + }, + { + code: `import React from 'react' + import Table from '@hi-ui/hiui/es/table'\n + class Demo extends React.Component { + constructor(props){ + super(props) + this.renderContent = (value, row, index) => { + const obj = { + children: value, + props: {} + } + if (index === 4) { + obj.props.colSpan = 0 + } + return obj + } + this.columns = [ + { + title: 'Name', + dataKey: 'name', + render: (text, row, index) => { + if (index < 4) { + return {text} + } + return { + children: {text}, + props: { + colSpan: 4 + } + } + }, + key: 1 + }, + { + title: 'Age', + dataKey: 'age', + key: 2, + render: this.renderContent + }, + { + title: 'Home phone', + dataKey: 'tel', + key: 3, + render: this.renderContent + }, + { + title: 'Address', + dataKey: 'address', + render: this.renderContent, + key: 4 + } + ] + + this.data = [ + { + key: '1', + name: 'John Brown', + age: 32, + tel: '0571-22098909', + address: 'New York No. 1 Lake Park' + }, + { + key: '2', + name: 'Jim Green', + tel: '0571-22098333', + age: 42, + address: 'London No. 1 Lake Park' + }, + { + key: '3', + name: 'Joe Black', + age: 32, + tel: '0575-22098909', + address: 'Sidney No. 1 Lake Park' + }, + { + key: '4', + name: 'Jim Red', + age: 18, + tel: '0575-22098909', + address: 'London No. 2 Lake Park' + }, + { + key: '5', + name: 'Jake White', + age: 18, + tel: '0575-22098909', + address: 'Dublin No. 2 Lake Park' + } + ] + } + render() { + return
    + } + }`, + opt: ['合并单元格'] + } +] + +const DemoBase = () => ( + +) +export default DemoBase diff --git a/docs/demo/table/section-unfold.jsx b/docs/demo/table/section-unfold.jsx deleted file mode 100644 index ec02416c5..000000000 --- a/docs/demo/table/section-unfold.jsx +++ /dev/null @@ -1,51 +0,0 @@ -import React from 'react' -import DocViewer from '../../../libs/doc-viewer' -import Table from '../../../components/table' -const prefix = 'table-unfold' -const code = `import React from 'react' -import Table from '@hi-ui/hiui/es/table'\n -class Demo extends React.Component { - constructor(props){ - super(props) - - this.columns = [ - { title: 'Column 1', dataIndex: 'age', key: '0' ,type:'expand',render(text,record,index){ - return ( -
    {text}-{index}
    - ) - }}, - { title: 'Column 1', dataIndex: 'address', key: '1' }, - { title: 'Column 2', dataIndex: 'address', key: '2' }, - { title: 'Column 3', dataIndex: 'address', key: '3' }, - { title: 'Column 4', dataIndex: 'address', key: '4' }, - { title: 'Column 5', dataIndex: 'address', key: '5' }, - { title: 'Column 6', dataIndex: 'address', key: '6' }, - { title: 'Column 7', dataIndex: 'address', key: '7' }, - { title: 'Column 8', dataIndex: 'address', key: '8' } - ] - - this.data = [{ - key: '1', - name: 'John Brown', - age: 32, - address: 'New York Park' - }, { - key: '2', - name: 'Jim Green', - age: 40, - address: 'London Park' - }] - } - render() { - return
    - } -}` - -const DemoUnfold = () => ( - -) -export default DemoUnfold diff --git a/docs/demo/table/section-zebra.jsx b/docs/demo/table/section-zebra.jsx deleted file mode 100644 index 501b5a49c..000000000 --- a/docs/demo/table/section-zebra.jsx +++ /dev/null @@ -1,58 +0,0 @@ -import React from 'react' -import DocViewer from '../../../libs/doc-viewer' -import Table from '../../../components/table' -const prefix = 'table-zebra' -const desc = '优化以行为主的阅读体验' -const code = `import React from 'react' -import Table from '@hi-ui/hiui/es/table'\n -class Demo extends React.Component { - constructor(props){ - super(props) - - this.columns = [ - - { title: 'Column 1', dataIndex: 'name', key: '1'}, - { title: 'Column 1', dataIndex: 'age', key: '2'}, - { title: 'Column 1', dataIndex: 'address', key: '3'}, - { - title: ()=>
    自定义标题
    , - dataIndex: 'address', key: '4', - render(text,record,index){ - return ( -
    - {text} --- {index} --- 自定义渲染 -
    - ) - }}, - { - title: 'Action', - key: 'operation', - width: 100, - render: () => action, - }, - ] - - this.data = [] - for (let i = 0; i < 10; i++) { - this.data.push({ - // key: i, - name: \`Don Diablo \${i}\`, - age: \`\${i}\${i}\`, - address: \`EDC Las Vegas no. \${i}\`, - }); - } - } - render() { - return
    item.id === 1 || item.id === 3} /> - } -}` - -const DemoZebra = () => ( - -) -export default DemoZebra diff --git a/docs/demo/tabs/section-button.jsx b/docs/demo/tabs/section-button.jsx index 8999a9bfe..32348afc1 100644 --- a/docs/demo/tabs/section-button.jsx +++ b/docs/demo/tabs/section-button.jsx @@ -37,7 +37,7 @@ class Demo extends React.Component { } render () { return ( - console.log(tab,e)}> + console.log(tab)}> { this.state.panes.map((pane, index) => { return ( @@ -47,6 +47,7 @@ class Demo extends React.Component { tabId={pane.tabId} closeable={pane.closeable} key={index} + > ) @@ -57,5 +58,7 @@ class Demo extends React.Component { } }` -const Demo = () => +const Demo = () => ( + +) export default Demo diff --git a/docs/demo/tabs/section-capsule.jsx b/docs/demo/tabs/section-capsule.jsx index 6bdecc81d..97b46c63a 100644 --- a/docs/demo/tabs/section-capsule.jsx +++ b/docs/demo/tabs/section-capsule.jsx @@ -37,7 +37,7 @@ class Demo extends React.Component { } render () { return ( - console.log(tab,e)}> + console.log(tab)}> { this.state.panes.map((pane, index) => { return ( @@ -57,5 +57,7 @@ class Demo extends React.Component { } }` -const Demo = () => +const Demo = () => ( + +) export default Demo diff --git a/docs/demo/tabs/section-basic.jsx b/docs/demo/tabs/section-card.jsx similarity index 73% rename from docs/demo/tabs/section-basic.jsx rename to docs/demo/tabs/section-card.jsx index 8437a1490..3065802ce 100644 --- a/docs/demo/tabs/section-basic.jsx +++ b/docs/demo/tabs/section-card.jsx @@ -1,5 +1,5 @@ -import Tabs from '../../../components/tabs' import React from 'react' +import Tabs from '../../../components/tabs' import DocViewer from '../../../libs/doc-viewer' const prefix = 'tabs-basic' const rightOptions = ['水平方向', '垂直方向'] @@ -28,22 +28,24 @@ class Demo extends React.Component { },{ tabTitle: '购买资格', tabId: 'tabId-5' - },] + }] } } render () { return ( - console.log(tab,e)}> + console.log(tab)}> { - this.state.panes.map((pane, index) => { + this.state.panes.map((paneItem, index) => { + const {tabTitle, tabId, closeable} = paneItem + return ( -
    {pane.tabTitle}
    +
    {tabTitle}
    ) }) @@ -81,14 +83,19 @@ class Demo extends React.Component { } render () { return ( - console.log(tab,e)} placement='vertical'> + console.log(tab)} + placement='vertical' + > { - this.state.panes.map((pane, index) => { + this.state.panes.map((paneItem, index) => { + const {tabTitle, tabId, closeable} = paneItem return (
    {pane.tabTitle}
    diff --git a/docs/demo/tabs/section-collapse.jsx b/docs/demo/tabs/section-collapse.jsx index 30e9ba0d6..23d19f3ed 100644 --- a/docs/demo/tabs/section-collapse.jsx +++ b/docs/demo/tabs/section-collapse.jsx @@ -55,7 +55,7 @@ class Demo extends React.Component { } render () { return ( - console.log(tab,e)}> + console.log(tab)}> { this.state.panes.map((pane, index) => { return ( diff --git a/docs/demo/tabs/section-default.jsx b/docs/demo/tabs/section-default.jsx new file mode 100644 index 000000000..4dd2640e5 --- /dev/null +++ b/docs/demo/tabs/section-default.jsx @@ -0,0 +1,159 @@ +import Tabs from '../../../components/tabs' +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' + +const prefix = 'tabs-default' +const desc = '基础标签页' +const rightOptions = ['水平方向', '垂直方向'] + +const code = [ + { + code: `import Tabs from '@hi-ui/hiui/es/tabs' +import React from 'react'\n +class Demo extends React.Component { + constructor() { + super() + this.state = { + panes: [{ + tabTitle: '我的订单', + tabId: 'tabId-1', + disabled:true + }, + { + tabTitle: '团购订单', + tabId: 'tabId-2', + closeable: false + }, + { + tabTitle: '以旧换新订单', + tabId: 'tabId-3' + }, + { + tabTitle: 消息通知, + tabId: 'tabId-4' + }, + { + tabTitle: '购买资格', + tabId: 'tabId-5' + }, + { + tabTitle: '团购通知', + tabId: 'tabId-6' + }, + { + tabTitle: '订单详情', + tabId: 'tabId-7' + }, + { + tabTitle: '订单详情', + tabId: 'tabId-8' + }, + { + tabTitle: '订单详情', + tabId: 'tabId-9' + }, + { + tabTitle: '订单详情', + tabId: 'tabId-10' + }], + activeId:'tabId-10' + } + } + render () { + const {activeId} = this.state + return ( + { + console.log(tab) + this.setState({ + activeId:tab + }) + }} + > + { + this.state.panes.map((pane, index) => { + return ( + +
    {pane.tabTitle}
    +
    + ) + }) + } +
    + ) + } +}`, + opt: ['水平方向'] + }, + { + code: `import Tabs from '@hi-ui/hiui/es/tabs' +import React from 'react'\n +class Demo extends React.Component { + constructor() { + super() + this.state = { + panes: [{ + tabTitle: '我的订单', + tabId: 'tabId-1' + }, + { + tabTitle: '团购订单', + tabId: 'tabId-2', + closeable: false + }, + { + tabTitle: '以旧换新订单', + tabId: 'tabId-3' + },{ + tabTitle: '购买资格', + tabId: 'tabId-5' + },] + } + } + render () { + return ( + console.log(tab)}> + { + this.state.panes.map((pane, index) => { + return ( + +
    {pane.tabTitle}
    +
    + ) + }) + } +
    + ) + } +}`, + opt: ['垂直方向'] + } +] + +const Demo = () => ( + +) +export default Demo diff --git a/docs/demo/tabs/section-description.jsx b/docs/demo/tabs/section-description.jsx index 524450876..5c22d6818 100644 --- a/docs/demo/tabs/section-description.jsx +++ b/docs/demo/tabs/section-description.jsx @@ -37,7 +37,10 @@ class Demo extends React.Component { } render () { return ( - console.log(tab,e)}> + console.log(tab,e)} + > { this.state.panes.map((pane, index) => { return ( @@ -58,5 +61,7 @@ class Demo extends React.Component { } }` -const Demo = () => +const Demo = () => ( + +) export default Demo diff --git a/docs/demo/tabs/section-draggable.jsx b/docs/demo/tabs/section-draggable.jsx new file mode 100644 index 000000000..36b8aa8f3 --- /dev/null +++ b/docs/demo/tabs/section-draggable.jsx @@ -0,0 +1,142 @@ +import Tabs from '../../../components/tabs' +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' + +const prefix = 'tabs-draggable' +const desc = 'Tabs 排序功能' +const rightOptions = ['水平方向', '垂直方向'] + +const code = [ + { + code: `import Tabs from '@hi-ui/hiui/es/tabs' +import React from 'react'\n +class Demo extends React.Component { + constructor() { + super() + this.state = { + panes: [{ + tabTitle: '我的订单', + tabId: 'tabId-1' + }, + { + tabTitle: '团购订单', + tabId: 'tabId-2', + closeable: false + }, + { + tabTitle: '以旧换新订单', + tabId: 'tabId-3' + },{ + tabTitle: '购买资格', + tabId: 'tabId-5' + },] + } + } + dragHandle(dragNode,dropNode) { + console.log(dragNode,dropNode) + } + render () { + return ( + console.log(tab)} + onDragStart={(tab)=>console.log(tab)} + onDropEnd = {this.dragHandle.bind(this)} + onDrop={this.dragHandle.bind(this)} + > + { + this.state.panes.map((pane, index) => { + return ( + +
    {pane.tabTitle}
    +
    + ) + }) + } +
    + + ) + } +}`, + opt: ['水平方向'] + }, + { + code: `import Tabs from '@hi-ui/hiui/es/tabs' +import React from 'react'\n +class Demo extends React.Component { + constructor() { + super() + this.state = { + panes: [{ + tabTitle: '我的订单', + tabId: 'tabId-1' + }, + { + tabTitle: '团购订单', + tabId: 'tabId-2', + closeable: false + }, + { + tabTitle: '以旧换新订单', + tabId: 'tabId-3' + },{ + tabTitle: '购买资格', + tabId: 'tabId-5' + },] + } + } + + dragHandle(dragNode,dropNode) { + console.log(dragNode,dropNode) + } + render () { + return ( + console.log(tab)} + onDragStart={(tab)=>console.log(tab)} + onDropEnd = {this.dragHandle.bind(this)} + onDrop={this.dragHandle.bind(this)} + > + { + this.state.panes.map((pane, index) => { + return ( + +
    {pane.tabTitle}
    +
    + ) + }) + } +
    + ) + } +}`, + opt: ['垂直方向'] + } +] + +const Demo = () => ( + +) +export default Demo diff --git a/docs/demo/tabs/section-duration.jsx b/docs/demo/tabs/section-duration.jsx new file mode 100644 index 000000000..4c86e54ae --- /dev/null +++ b/docs/demo/tabs/section-duration.jsx @@ -0,0 +1,153 @@ +import Tabs from '../../../components/tabs' +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' + +const prefix = 'tabs-duration' +const desc = 'Pane切换动画' +const rightOptions = ['水平方向', '垂直方向'] + +const code = [ + { + code: `import Tabs from '@hi-ui/hiui/es/tabs' +import React from 'react'\n +class Demo extends React.Component { + constructor() { + super() + this.state = { + panes: [{ + tabTitle: '我的订单', + tabId: 'tabId-1' + }, + { + tabTitle: '团购订单', + tabId: 'tabId-2', + closeable: false + }, + { + tabTitle: '以旧换新订单', + tabId: 'tabId-3' + }, + { + tabTitle: 消息通知, + tabId: 'tabId-4' + }, + { + tabTitle: '购买资格', + tabId: 'tabId-5' + }, + { + tabTitle: '团购通知', + tabId: 'tabId-6' + }, + { + tabTitle: '订单详情', + tabId: 'tabId-7' + }, + { + tabTitle: '订单详情', + tabId: 'tabId-8' + }, + { + tabTitle: '订单详情', + tabId: 'tabId-9' + }, + { + tabTitle: '订单详情', + tabId: 'tabId-10' + }] + } + } + render () { + return ( + console.log(tab)} + > + { + this.state.panes.map((pane, index) => { + return ( + +
    {pane.tabTitle}
    +
    + ) + }) + } +
    + ) + } +}`, + opt: ['水平方向'] + }, + { + code: `import Tabs from '@hi-ui/hiui/es/tabs' +import React from 'react'\n +class Demo extends React.Component { + constructor() { + super() + this.state = { + panes: [{ + tabTitle: '我的订单', + tabId: 'tabId-1' + }, + { + tabTitle: '团购订单', + tabId: 'tabId-2', + closeable: false + }, + { + tabTitle: '以旧换新订单', + tabId: 'tabId-3' + },{ + tabTitle: '购买资格', + tabId: 'tabId-5' + },] + } + } + render () { + return ( + console.log(tab)} + placement='vertical' + > + { + this.state.panes.map((pane, index) => { + return ( + +
    {pane.tabTitle}
    +
    + ) + }) + } +
    + ) + } +}`, + opt: ['垂直方向'] + } +] + +const Demo = () => ( + +) +export default Demo diff --git a/docs/demo/tabs/section-editable.jsx b/docs/demo/tabs/section-editable.jsx index f4ab2b78e..94f4de77a 100644 --- a/docs/demo/tabs/section-editable.jsx +++ b/docs/demo/tabs/section-editable.jsx @@ -5,6 +5,7 @@ const prefix = 'tabs-editable' const desc = '可以自定义标签的增加和关闭' const code = `import Tabs from '@hi-ui/hiui/es/tabs' +import Grid from '@hi-ui/hiui/es/grid' import React from 'react'\n class Demo extends React.Component { constructor() { @@ -18,11 +19,12 @@ class Demo extends React.Component { { tabTitle: '团购订单', tabId: 'tabId-2', - closeable: false + disabled:true }, { tabTitle: '以旧换新订单', - tabId: 'tabId-3' + tabId: 'tabId-3', + closeable: false, }, { tabTitle: '消息通知', @@ -31,12 +33,9 @@ class Demo extends React.Component { ] } } - onEdit(action, index, tabId) { - console.log('----------onEdit', action, index, tabId) - this[\`\${action}Tab\`](index, tabId) - } addTab() { const panes = this.state.panes; + this.setState({ panes: panes.concat([{ tabTitle: \`新增标签\${panes.length + 1}\`, @@ -45,7 +44,7 @@ class Demo extends React.Component { }) } - deleteTab(index, tabId) { + deleteTab(item,index) { const panes = this.state.panes.slice() panes.splice(index, 1) @@ -54,17 +53,30 @@ class Demo extends React.Component { }) } + beforeDelete(item){ + console.log(item) + return true + } + render () { - return ( - console.log(tab,e)} editable onEdit={this.onEdit.bind(this)}> + return ( + console.log(tab,e)} + onDelete={this.deleteTab.bind(this)} + onAdd={this.addTab.bind(this)} + onBeforeDelete={this.beforeDelete.bind(this)} + > { this.state.panes.map((pane, index) => { return (
    {pane.tabTitle}
    diff --git a/docs/demo/tabs/section-overSrcoll.jsx b/docs/demo/tabs/section-overSrcoll.jsx new file mode 100644 index 000000000..6e25b6be9 --- /dev/null +++ b/docs/demo/tabs/section-overSrcoll.jsx @@ -0,0 +1,138 @@ +import Tabs from '../../../components/tabs' +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +const prefix = 'tabs-overSrcoll' +const desc = '标签数量增多展示滚动条' + +const code = `import Tabs from '@hi-ui/hiui/es/tabs' +import Grid from '@hi-ui/hiui/es/grid' +import React from 'react'\n +class Demo extends React.Component { + constructor() { + super() + this.state = { + panes: [ + { + tabTitle: '我的订单', + tabId: 'tabId-1' + }, + { + tabTitle: '团购订单', + tabId: 'tabId-2', + closeable: false, + disabled:true + }, + { + tabTitle: '以旧换新订单', + tabId: 'tabId-3' + }, + { + tabTitle: '消息通知', + tabId: 'tabId-4' + }, + { + tabTitle: '新建标签5', + tabId: 'tabId-5' + }, + { + tabTitle: '新建标签6', + tabId: 'tabId-6', + }, + { + tabTitle: '新建标签7', + tabId: 'tabId-7', + }, + { + tabTitle: '新建标签8', + tabId: 'tabId-8', + }, + { + tabTitle: '新建标签9', + tabId: 'tabId-9', + }, + { + tabTitle: '新建标签10', + tabId: 'tabId-10', + }, + { + tabTitle: '新建标签11', + tabId: 'tabId-11', + }, + { + tabTitle: '新建标签12', + tabId: 'tabId-12', + }, + { + tabTitle: '新建标签13', + tabId: 'tabId-13', + }, + { + tabTitle: '新建标签14', + tabId: 'tabId-14', + }, + { + tabTitle: '新建标签15', + tabId: 'tabId-15', + }, + { + tabTitle: '新建标签16', + tabId: 'tabId-16', + }, + { + tabTitle: '新建标签17', + tabId: 'tabId-17', + }, + { + tabTitle: '新建标签18', + tabId: 'tabId-18', + }, + { + tabTitle: '新建标签19', + tabId: 'tabId-19', + }, + { + tabTitle: '新建标签20', + tabId: 'tabId-20', + }, + { + tabTitle: '新建标签21', + tabId: 'tabId-21', + }, + { + tabTitle: '新建标签22', + tabId: 'tabId-22', + } + ] + } + } + + render () { + return ( + console.log(tab)} + > + { + this.state.panes.map((pane, index) => { + return ( + +
    {pane.tabTitle}
    +
    + ) + }) + } +
    + ) + } +}` + +const Demo = () => ( + +) +export default Demo diff --git a/docs/demo/tag/tag-basic.jsx b/docs/demo/tag/tag-basic.jsx index 454c92f16..3348ea97d 100644 --- a/docs/demo/tag/tag-basic.jsx +++ b/docs/demo/tag/tag-basic.jsx @@ -13,15 +13,18 @@ class Demo extends React.Component { } render () { return ( -
    + <> {console.log('待审批')}}>待审批 审批中 已通过 未通过 -
    + 未通过 + ) } }` -const Demo = () => +const Demo = () => ( + +) export default Demo diff --git a/docs/demo/tag/tag-color.jsx b/docs/demo/tag/tag-color.jsx new file mode 100644 index 000000000..6b577c9bf --- /dev/null +++ b/docs/demo/tag/tag-color.jsx @@ -0,0 +1,30 @@ +import Tag from '../../../components/tag/' +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +const prefix = 'tag-basic' +const desc = '标签的信息重要级别高,识别度较高,建议使用HIUI主题色' + +const code = `import Tag from '@hi-ui/hiui/es/tag' +import React from 'react'\n +class Demo extends React.Component { + constructor() { + super() + + } + render () { + return ( + <> + #4285F4 + #46BC99 + #FF5975 + #B450DE + #3DA8F5 + + ) + } +}` + +const Demo = () => ( + +) +export default Demo diff --git a/docs/demo/tag/tag-group.jsx b/docs/demo/tag/tag-group.jsx new file mode 100644 index 000000000..102d5d79b --- /dev/null +++ b/docs/demo/tag/tag-group.jsx @@ -0,0 +1,75 @@ +import Tag from '../../../components/tag/' +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import Icon from '../../../components/icon' +import Input from '../../../components/input' +import Tooltip from '../../../components/tooltip' +const prefix = 'tag-group' +const desc = '以标签为信息实体进行编辑操作,如品类、频道等管理' + +const code = `import Tag from '@hi-ui/hiui/es/tag' +import Icon from '@hi-ui/hiui/es/icon' +import Input from '@hi-ui/hiui/es/input' +import Tootip from '@hi-ui/hiui/es/tootip' +import React from 'react'\n +class Demo extends React.Component { + constructor() { + super() + this.state = { + tags: [{ + title:'电视', + tagId:'1', + editable:false, + closable:false + }, { + title:'智能', + tagId:'2' + },{ + title:'笔记本', + tagId:'3' + },{ + title:'文案超长测试文案超长测试文案超长测试文案超长测试', + tagId:'4' + }], + } + } + onAdd(item,index){ + const {tags} = this.state + this.setState({ + tags:[...tags,item] + }) + } + + onEdit(item,index){ + const {tags} = this.state + const data = [...tags] + if(item){ + data.splice(index,1,item) + }else{ + data.splice(index,1) + } + this.setState({ + tags:data + }) + } + + onDelete(item,index){ + const {tags} = this.state + const data = [...tags] + data.splice(index,1) + this.setState({ + tags:data + }) + } + render () { + const {tags} = this.state + return ( + this.onAdd(item,index)} onDelete={(item,index)=>this.onDelete(item,index)} onEdit={(item,index)=>{this.onEdit(item,index)}}> + + ) + } +}` +const Demo = () => ( + +) +export default Demo diff --git a/docs/demo/tag/tag-line.jsx b/docs/demo/tag/tag-line.jsx index 3673052f0..74370a7de 100644 --- a/docs/demo/tag/tag-line.jsx +++ b/docs/demo/tag/tag-line.jsx @@ -1,5 +1,6 @@ import Tag from '../../../components/tag/' import React from 'react' +import Grid from '../../../components/grid/index' import DocViewer from '../../../libs/doc-viewer' const prefix = 'tag-line' const desc = '一种基础标签,识别度一般,在深色背景里常用' @@ -12,16 +13,20 @@ class Demo extends React.Component { } render () { + const Row = Grid.Row + const Col = Grid.Col return ( -
    - 原创 - 活动 - 聚焦 - 最新 -
    + <> + 原创 + 活动 + 聚焦 + 最新 + 最新 + ) } }` - -const Demo = () => +const Demo = () => ( + +) export default Demo diff --git a/docs/demo/tag/tag-round.jsx b/docs/demo/tag/tag-round.jsx new file mode 100644 index 000000000..99c8db8d2 --- /dev/null +++ b/docs/demo/tag/tag-round.jsx @@ -0,0 +1,30 @@ +import Tag from '../../../components/tag/' +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +const prefix = 'tag-round' +const desc = '标签的信息重要级别高,识别度较高' + +const code = `import Tag from '@hi-ui/hiui/es/tag' +import React from 'react'\n +class Demo extends React.Component { + constructor() { + super() + + } + render () { + return ( + <> + {console.log('待审批')}} shape="square">待审批 + 审批中 + 已通过 + 未通过 + 未通过 + + ) + } +}` + +const Demo = () => ( + +) +export default Demo diff --git a/docs/demo/theme/section-example.jsx b/docs/demo/theme/section-example.jsx index cc0467f5a..a3cbd8f47 100644 --- a/docs/demo/theme/section-example.jsx +++ b/docs/demo/theme/section-example.jsx @@ -31,6 +31,7 @@ class Demo extends React.Component { return (
    +
    @@ -47,6 +48,7 @@ class Demo extends React.Component { /> + @@ -142,15 +144,53 @@ class Demo extends React.Component { + + + + + + + + + + + {console.log('last', d)}} + /> + + + + + + + + + + + + + + {console.log('last', d)}} + /> + + + - - - - - + + + + + + + @@ -207,16 +247,33 @@ class Demo extends React.Component { + + + + + + + + + + + + + + + ) } }` const DemoExample = () => ( - + ) export default DemoExample diff --git a/docs/demo/time-picker/section-base.jsx b/docs/demo/time-picker/section-base.jsx index 892ea0112..bd90ddc42 100644 --- a/docs/demo/time-picker/section-base.jsx +++ b/docs/demo/time-picker/section-base.jsx @@ -2,7 +2,7 @@ import React from 'react' import DocViewer from '../../../libs/doc-viewer' import TimePicker from '../../../components/date-picker/TimePicker' const prefix = 'section-base' -const rightOptions = ['基础', '步长设置','禁用'] +const rightOptions = ['基础', '禁用'] const desc = '选择时间点,可与日期搭配使用,也可用于展示当天时间' const code = [ { @@ -12,24 +12,7 @@ const code = [ render() { return ( { - if (selectedHour > 12) { - const arr = [] - for (let i=0; i<12; i++) { - arr.push(i) - } - return arr - } - }} - disabledSeconds={(selectedHour, selectedMinute) => { - if (selectedHour > 12 && selectedMinute > 12) { - return [30, 31, 32, 33, 34, 35] - } - return [0, 1, 2, 3] - }} + defaultValue={new Date()} onChange={(date, dateString) => console.log(date, dateString)} /> ) @@ -37,23 +20,6 @@ const code = [ }`, opt: ['基础'] }, - { - code: `import React from 'react' - import TimePicker from '@hi-ui/hiui/es/date-picker/TimePicker'\n - class Demo extends React.Component { - render() { - return ( - console.log(date, dateString)} - /> - ) - } - }`, - opt: ['步长设置'] - }, { code: `import React from 'react' import TimePicker from '@hi-ui/hiui/es/date-picker/TimePicker'\n @@ -62,8 +28,6 @@ class Demo extends React.Component { return ( console.log('时间', date, dateString)} /> ) @@ -73,12 +37,6 @@ class Demo extends React.Component { } ] const DemoBase = () => ( - + ) export default DemoBase diff --git a/docs/demo/time-picker/section-disable.jsx b/docs/demo/time-picker/section-disable.jsx new file mode 100644 index 000000000..f9ebf9f88 --- /dev/null +++ b/docs/demo/time-picker/section-disable.jsx @@ -0,0 +1,44 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import TimePicker from '../../../components/date-picker/TimePicker' +const prefix = 'section-disable' +const desc = '自定义禁选的时、分、秒数据' +const code = `import React from 'react' + import TimePicker from '@hi-ui/hiui/es/date-picker/TimePicker'\n + class Demo extends React.Component { + render() { + return ( + { + if (selectedHour > 12) { + const arr = [] + for (let i=0; i<12; i++) { + arr.push(i) + } + return arr + } + }} + disabledSeconds={(selectedHour, selectedMinute) => { + if (selectedHour > 12 && selectedMinute > 12) { + return [30, 31, 32, 33, 34, 35] + } + return [0, 1, 2, 3] + }} + onChange={(date, dateString) => console.log(date, dateString)} + /> + ) + } + }` +const DemoBase = () => ( + +) +export default DemoBase diff --git a/docs/demo/time-picker/section-format.jsx b/docs/demo/time-picker/section-format.jsx index 9dea3a633..73c938233 100644 --- a/docs/demo/time-picker/section-format.jsx +++ b/docs/demo/time-picker/section-format.jsx @@ -12,7 +12,7 @@ class Demo extends React.Component { render() { return ( console.log(date, dateString)} /> @@ -28,7 +28,7 @@ class Demo extends React.Component { render() { return ( console.log(date, dateString)} /> @@ -44,7 +44,7 @@ class Demo extends React.Component { render() { return ( console.log(date, dateString)} /> diff --git a/docs/demo/time-picker/section-range.jsx b/docs/demo/time-picker/section-range.jsx index b3e26e415..bdd800297 100644 --- a/docs/demo/time-picker/section-range.jsx +++ b/docs/demo/time-picker/section-range.jsx @@ -9,10 +9,9 @@ class Demo extends React.Component { render() { return ( console.log('时间范围', date)} + onChange={(date, dateString) => console.log(date, dateString)} /> ) } diff --git a/docs/demo/timeline/section-basic.jsx b/docs/demo/timeline/section-basic.jsx index 15b3eec4c..3c00db7d0 100644 --- a/docs/demo/timeline/section-basic.jsx +++ b/docs/demo/timeline/section-basic.jsx @@ -1,6 +1,7 @@ import React from 'react' import DocViewer from '../../../libs/doc-viewer' import Timeline from '../../../components/timeline' +import Progress from '../../../components/progress' import Grid from '../../../components/grid' import Form from '../../../components/form' import Input from '../../../components/input' @@ -42,7 +43,7 @@ class Demo extends React.Component { data = [{ groupTitle: '上午', children: [{ - title: '管理层例会', + title:
    管理层例会
    , content: '毕加索会议室 B2层 可提前预定预…', timestamp: '10:00', }, { @@ -143,7 +144,7 @@ class Demo extends React.Component { const DemoBasic = () => ( diff --git a/docs/demo/tooltip/section-api.jsx b/docs/demo/tooltip/section-api.jsx index bee20dd8c..c8a36aba7 100644 --- a/docs/demo/tooltip/section-api.jsx +++ b/docs/demo/tooltip/section-api.jsx @@ -29,8 +29,8 @@ class Demo extends React.Component { return (
    -

    - this.node = node}> +
    + this.node = node} style={{marginTop:'10px',display:'inline-block'}}>

    @@ -38,5 +38,7 @@ class Demo extends React.Component { } }` -const DemoApi = () => +const DemoApi = () => ( + +) export default DemoApi diff --git a/docs/demo/tooltip/section-base.jsx b/docs/demo/tooltip/section-base.jsx index f193d7650..82ece10b3 100644 --- a/docs/demo/tooltip/section-base.jsx +++ b/docs/demo/tooltip/section-base.jsx @@ -3,7 +3,8 @@ import DocViewer from '../../../libs/doc-viewer' import Button from '../../../components/button' import Tooltip from '../../../components/tooltip' const prefix = 'tooltip-base' -const desc = '用于解释、描述、引导' +const desc = '用于解释、描述、引导,' + const code = `import React from 'react' import Button from '@hi-ui/hiui/es/button' import Tooltip from '@hi-ui/hiui/es/tooltip'\n @@ -11,7 +12,7 @@ class Demo extends React.Component { render() { return (
    - + diff --git a/docs/demo/transfer/section-area.jsx b/docs/demo/transfer/section-area.jsx index 9361c6117..a11fb8a17 100644 --- a/docs/demo/transfer/section-area.jsx +++ b/docs/demo/transfer/section-area.jsx @@ -3,100 +3,43 @@ import DocViewer from '../../../libs/doc-viewer' import Transfer from '../../../components/transfer' const prefix = 'transfer-area' const desc = '可通过拖拽的形式对目标区域内进行排序' -const rightOptions = ['基础用法', '高级用法'] -const code = [{ - code: `import React from 'react' - import Transfer from '@hi-ui/hiui/es/transfer'\n - class Demo extends React.Component { - constructor () { - super() - this.state = { - datas: this.randomDatas(), - targetIds: [2, 3, 4, 6, 9] - } - } - randomDatas () { - const arr = [] - for (let i=1;i<16; i++) { - arr.push({ - id: i, - content: '选项'+i - }) - } - return arr - } - onChange (movedKeys) { - console.log(movedKeys) - this.setState({ - targetIds: movedKeys - }) - } - render () { - return ( - - ) - } - }`, - opt: ['基础用法'] -}, { - code: `import React from 'react' - import Transfer from '@hi-ui/hiui/es/transfer'\n - class Demo extends React.Component { - constructor () { - super() - this.state = { - datas: this.randomDatas(), - targetIds: [2, 3, 4, 6, 9] - } - } - randomDatas () { - const arr = [] - for (let i=1;i<16; i++) { - arr.push({ - id: i, - content: '选项'+i - }) - } - return arr - } - onChange (movedKeys) { - console.log(movedKeys) - this.setState({ - targetIds: movedKeys +const code = `import React from 'react' +import Transfer from '@hi-ui/hiui/es/transfer'\n +class Demo extends React.Component { + constructor () { + super() + this.state = { + datas: this.randomDatas(), + targetKeys: [2, 3, 4, 6, 9] + } + } + randomDatas () { + const arr = [] + for (let i=1;i<16; i++) { + arr.push({ + id: i, + content: '选项'+i }) } - render () { - return ( - { - console.log(newData) - }} - onDragStart={item => { - return item.id !== 3 - }} - onDrop={(targetItem, sourceItem) => { - return targetItem.id > sourceItem.id - }} - targetIds={this.state.targetIds} - data={this.state.datas} - onChange={this.onChange.bind(this)} - /> - ) - } - }`, - opt: ['高级用法'] -}] -const DemoArea = () => ( - -) + return arr + } + onChange (movedKeys) { + this.setState({ + targetKeys: movedKeys + }) + } + render () { + return ( + + ) + } +}` +const DemoArea = () => export default DemoArea diff --git a/docs/demo/tree/section-async.jsx b/docs/demo/tree/section-async.jsx index a9c594d5c..2ea0fbbc5 100644 --- a/docs/demo/tree/section-async.jsx +++ b/docs/demo/tree/section-async.jsx @@ -38,14 +38,20 @@ class Demo extends React.Component { return (
    { + onLoadChildren={node=>{ const obj = { method:'get', - headers:{'Content-Type': 'application/x-www-form-urlencoded'}, data:{}, - params:{id:id}, - url:'http://yapi.demo.qunar.com/mock/26534/hiui/async-tree', - transformResponse:(res)=>{return res.data} + params:{id:node.id}, + url:'http://my-json-server.typicode.com/hiui-group/db/conditiondata', + transformResponse:(res)=>{ + let data = JSON.parse(res) + if(data[0]) { + data[0].id = Math.random() + } + + return data + } } return obj }} @@ -53,8 +59,7 @@ class Demo extends React.Component { editable={true} data={this.state.treeData} onChange={data => {console.log('Tree data:', data)}} - highlightable - onClick={(item) => console.log('------click node', item)} + onSelect={(item) => console.log('select node', item)} />
    ) diff --git a/docs/demo/tree/section-drag.jsx b/docs/demo/tree/section-drag.jsx index a1190501f..c1c0ccae9 100644 --- a/docs/demo/tree/section-drag.jsx +++ b/docs/demo/tree/section-drag.jsx @@ -56,8 +56,7 @@ class Demo extends React.Component { console.log(dragNode,dropNode) }} onChange={data => {console.log('Tree data:', data)}} - highlightable - onClick={(item) => console.log('------click node', item)} + onSelect={(item) => console.log('select node', item)} />
    ) diff --git a/docs/demo/tree/section-edit.jsx b/docs/demo/tree/section-edit.jsx index f33e0707c..2f13158b2 100644 --- a/docs/demo/tree/section-edit.jsx +++ b/docs/demo/tree/section-edit.jsx @@ -47,15 +47,15 @@ class Demo extends React.Component {
    { console.log(saveNode, data,level) return true }} onSave={(saveNode, data) => { - + console.log(saveNode, data) }} onBeforeDelete={(deleteNode, data, level) => { @@ -66,7 +66,6 @@ class Demo extends React.Component { console.log(deleteNode, data) }} onChange={data => {console.log('Tree data:', data)}} - highlightable />
    ) @@ -100,7 +99,6 @@ class Demo extends React.Component { { @@ -114,9 +112,9 @@ class Demo extends React.Component { return true } console.log(saveNode, data,level) - + }} - + onDelete={(deleteNode, data) => { console.log(deleteNode, data) }} @@ -151,7 +149,6 @@ class Demo extends React.Component { }] }} onChange={data => {console.log('Tree data:', data)}} - highlightable /> ) @@ -161,12 +158,6 @@ class Demo extends React.Component { } ] const DemoEdit = () => ( - + ) export default DemoEdit diff --git a/docs/demo/tree/section-line.jsx b/docs/demo/tree/section-line.jsx index ae36e1f6e..2edccf869 100644 --- a/docs/demo/tree/section-line.jsx +++ b/docs/demo/tree/section-line.jsx @@ -4,7 +4,9 @@ import Tree from '../../../components/tree' const prefix = 'tree-line' const desc = '定义不同样式的树节点,满足多样性的业务场景' const leftOptions = ['线型', '文件夹型'] -const code = [{code: `import React from 'react' +const code = [ + { + code: `import React from 'react' import Tree from '@hi-ui/hiui/es/tree'\n class Demo extends React.Component { constructor(props) { @@ -48,14 +50,16 @@ class Demo extends React.Component { defaultExpandAll data={this.state.treeData} onChange={data => {console.log('Tree data:', data)}} - highlightable - onClick={(item) => console.log('------click node', item)} + onSelect={(item) => console.log('select node', item)} /> ) } }`, -opt: ['线型']}, {code: `import React from 'react' + opt: ['线型'] + }, + { + code: `import React from 'react' import Tree from '@hi-ui/hiui/es/tree'\n class Demo extends React.Component { constructor(props) { @@ -99,13 +103,14 @@ class Demo extends React.Component { defaultExpandAll data={this.state.treeData} onChange={data => {console.log('Tree data:', data)}} - highlightable onClick={(item) => console.log('------click node', item)} /> ) } }`, -opt: ['文件夹型']}] + opt: ['文件夹型'] + } +] const DemoLine = () => export default DemoLine diff --git a/docs/demo/tree/section-multiple.jsx b/docs/demo/tree/section-multiple.jsx index 98b1f65ad..0dfffae5a 100644 --- a/docs/demo/tree/section-multiple.jsx +++ b/docs/demo/tree/section-multiple.jsx @@ -46,15 +46,17 @@ class Demo extends React.Component { checkable editable={true} data={this.treeData} - checkedIds={this.state.checkedKeys} + // checkedIds={this.state.checkedKeys} onChange={(checkedKeys, title, bool, semi) => { console.log('Tree data:', checkedKeys, title, bool ,semi) this.setState({ checkedKeys }) }} - highlightable - onClick={data=>{console.log('tree node click',data)}} + onCheck={(a,b,c)=>{ + console.log('>>>>>',a,b,c) + }} + onSelect={(item) => console.log('select node', item)} /> ) diff --git a/docs/demo/tree/section-normal.jsx b/docs/demo/tree/section-normal.jsx index 51c4bee70..7b038ee3e 100644 --- a/docs/demo/tree/section-normal.jsx +++ b/docs/demo/tree/section-normal.jsx @@ -1,58 +1,121 @@ import React from 'react' import DocViewer from '../../../libs/doc-viewer' -import Tree from '../../../components/tree' +import Tree, { LegacyTree } from '../../../components/tree' const prefix = 'tree-normal' const desc = '二叉树或多叉树的展现形式,常见于组织架构、文件管理、索引目录等应用场景' -const code = `import React from 'react' -import Tree from '@hi-ui/hiui/es/tree'\n -class Demo extends React.Component { - constructor(props) { - super(props) - this.state = { - treeData: [ - { id: 1, title: '小米', - children: [ - { id: 2, title: '技术', disabled: true, +const rightOptions = ['基础单选V3', '基础单选V2'] + +const code = [ + { + code: `import React from 'react' + import Tree from '@hi-ui/hiui/es/tree'\n + class Demo extends React.Component { + constructor(props) { + super(props) + this.state = { + treeData: [ + { id: 1, title: '小米', children: [ - { id: 3, title: '后端', onClick: data => {console.log('后端:', data)} , disabled: true}, - { id: 4, title: '运维' }, - { id: 5, title: '前端' } + { id: 2, title: '技术', disabled: true, + children: [ + { id: 3, title: '后端', onClick: data => {console.log('后端:', data)} , disabled: true}, + { id: 4, title: '运维' }, + { id: 5, title: '前端' } + ] + }, + { id: 6, title: '产品' } + ] + }, + { id: 11, title: '小米', + children: [ + { id: 22, title: '技术', + children: [ + { id: 33, title: '后端' }, + { id: 44, title: '运维' }, + { id: 55, title: '前端' } + ] + }, + { id: 66, title: '产品' } ] }, - { id: 6, title: '产品' } ] - }, - { id: 11, title: '小米', - children: [ - { id: 22, title: '技术', + } + } + + + + render() { + return ( +
    + {console.log('Tree data:', data)}} + defaultSelectedId={1} + onSelect={(item) => console.log('select node', item)} + /> +
    + ) + } + }`, + opt: ['基础单选V3'] + }, + { + code: `import React from 'react' + import {LegacyTree} from '@hi-ui/hiui/es/tree'\n + class Demo extends React.Component { + constructor(props) { + super(props) + this.state = { + treeData: [ + { id: 1, title: '小米', + children: [ + { id: 2, title: '技术', disabled: true, + children: [ + { id: 3, title: '后端', onClick: data => {console.log('后端:', data)} , disabled: true}, + { id: 4, title: '运维' }, + { id: 5, title: '前端' } + ] + }, + { id: 6, title: '产品' } + ] + }, + { id: 11, title: '小米', children: [ - { id: 33, title: '后端' }, - { id: 44, title: '运维' }, - { id: 55, title: '前端' } + { id: 22, title: '技术', + children: [ + { id: 33, title: '后端' }, + { id: 44, title: '运维' }, + { id: 55, title: '前端' } + ] + }, + { id: 66, title: '产品' } ] }, - { id: 66, title: '产品' } ] - }, - ] - } - - } - - render() { - return ( -
    - {console.log('Tree data:', data)}} - highlightable - defaultHighlightId={1} - onClick={(item) => console.log('------click node', item)} - /> -
    - ) + } + + } + + render() { + return ( +
    + {console.log('Tree data:', data)}} + highlightable + defaultHighlightId={1} + onClick={(item) => console.log('------click node', item)} + /> +
    + ) + } + }`, + opt: ['基础单选V2'] } -}` -const DemoNormal = () => +] +const DemoNormal = () => ( + +) export default DemoNormal diff --git a/docs/demo/tree/section-search.jsx b/docs/demo/tree/section-search.jsx index 2e4d85fba..320fdad9e 100644 --- a/docs/demo/tree/section-search.jsx +++ b/docs/demo/tree/section-search.jsx @@ -45,11 +45,9 @@ class Demo extends React.Component {
    {console.log('Tree data:', data)}} - highlightable - onClick={(item) => console.log('------click node', item)} />
    ) diff --git a/docs/demo/upload/section-custom.jsx b/docs/demo/upload/section-custom.jsx index 70fad3cc8..d81435596 100644 --- a/docs/demo/upload/section-custom.jsx +++ b/docs/demo/upload/section-custom.jsx @@ -1,57 +1,136 @@ import React from 'react' import DocViewer from '../../../libs/doc-viewer' import Upload from '../../../components/upload' +import HiRequest from '../../../components/_util/hi-request' const prefix = 'Upload-custom' - -const code = `import React from 'react' -import Upload from '@hi-ui/hiui/es/upload'\n -class Demo extends React.Component { - constructor(props) { - super(props) - this.state={ - fileList: [ - { - name: 'a.png', - fileType: 'img', // 文件类型,可取值img, zip, word, pdf, ppt, excel, other - uploadState: 'success' // 上传状态,可取值success, error - }, - { - name: 'b.png', - fileType: 'img', - uploadState: 'error' +const leftOptions = ['自定义上传', '结合HiRequest'] +const code = [ + { + code: `import React from 'react' + import Upload from '@hi-ui/hiui/es/upload'\n + class Demo extends React.Component { + constructor(props) { + super(props) + this.state={ + fileList: [ + { + name: 'a.png', + fileType: 'img', // 文件类型,可取值img, zip, word, pdf, ppt, excel, other + uploadState: 'success' // 上传状态,可取值success, error + }, + { + name: 'b.png', + fileType: 'img', + uploadState: 'error' + } + ] } - ] - } - } - render () { - const { - fileList - } = this.state - - return ( -
    - { - console.log('---------beforeUpload', files, fileList) - return true - }} - customUpload={files => { - const _fileList = fileList.concat({ - name: files[0].name, - fileType: files[0].name.slice(files[0].name.lastIndexOf('.') + 1).toLowerCase(), - uploadState: 'success' - }) - this.setState({ - fileList: _fileList - }) - }} - content="上传文件" - fileList={fileList} - /> -
    - ) + } + render () { + const { + fileList + } = this.state + + return ( +
    + { + const _fileList = fileList.concat({ + name: files[0].name, + fileType: files[0].name.slice(files[0].name.lastIndexOf('.') + 1).toLowerCase(), + uploadState: 'success' + }) + this.setState({ + fileList: _fileList + }) + }} + content="上传文件" + fileList={fileList} + /> +
    + ) + } + }`, + opt: ['自定义上传'] + }, + { + code: `import React from 'react' + import Upload from '@hi-ui/hiui/es/upload'\n + class Demo extends React.Component { + constructor(props) { + super(props) + this.state={ + fileList: [ + { + name: 'a.png', + fileType: 'img', // 文件类型,可取值img, zip, word, pdf, ppt, excel, other + uploadState: 'success' // 上传状态,可取值success, error + }, + { + name: 'b.png', + fileType: 'img', + uploadState: 'error' + } + ] + } + } + render () { + const { + fileList + } = this.state + + return ( +
    + { + HiRequest.upload({ + url:'https://jsonplaceholder.typicode.com/posts/', + name: 'filename', // 文件参数 + file: '', // 文件 + params: { + id:1 + }, + headers: { + token:'token' + }, + onUploadProgress: (event) => { + // 上传进度 + console.log(event) + } + }).then((res) => { + console.log('res',res) + if (res.status === 200) { + // 返回结果 + const _fileList = fileList.concat({ + name: files[0].name, + fileType: files[0].name.slice(files[0].name.lastIndexOf('.') + 1).toLowerCase(), + uploadState: 'success' + }) + this.setState({ + fileList: _fileList + }) + } else { + onerror(res.response) + } + }).catch(error => { + console.log(error.response) + }); + + + }} + content="上传文件" + fileList={fileList} + /> +
    + ) + } + }`, + opt: ['结合HiRequest'] } -}` -const DemoCustom = () => +] +const DemoCustom = () => ( + +) export default DemoCustom diff --git a/docs/demo/upload/section-upload.jsx b/docs/demo/upload/section-upload.jsx index 37b39e552..60b26207f 100644 --- a/docs/demo/upload/section-upload.jsx +++ b/docs/demo/upload/section-upload.jsx @@ -2,82 +2,45 @@ import React from 'react' import DocViewer from '../../../libs/doc-viewer' import Upload from '../../../components/upload' const prefix = 'upload-upload' -const leftOptions = ['基础','动态上传地址', '禁用', '默认'] +const leftOptions = ['基础', '禁用', '默认'] const desc = '突出上传附件的操作入口,节省页面空间' const code = [ - {code: `import React from 'react' - import Upload from '@hi-ui/hiui/es/upload'\n - import Icon from '@hi-ui/hiui/es/icon'\n - class Demo extends React.Component { - constructor(props) { - super(props) - this.state={param:{id:'uid',channel:'youpin'}} - } - render () { - const param = this.state.param - return ( -
    - { - console.log('upload callback', file, fileList, response) - // if(response&&response.status !== 200) return false // 返回 false 则该文件会从列表里删除 - }} - disabled={false} - /> -
    - ) - } - }`, - opt: ['基础'] - }, - {code: `import React from 'react' - import Upload from '@hi-ui/hiui/es/upload'\n - import Icon from '@hi-ui/hiui/es/icon'\n - class Demo extends React.Component { - constructor(props) { - super(props) - this.state={param:{id:'uid',channel:'youpin'}} - } - getUploadAction(file) { - console.log('file',file) - return new Promise(function(resolve, reject){ - setTimeout(()=>{ - resolve("http://www.mocky.io/v2/5dc3b4413000007600347501?name="+file.name); - }, 200); - }) - } - render () { - const param = this.state.param - return ( -
    - { - console.log('upload callback', file, fileList, response) - // if(response&&response.status !== 200) return false // 返回 false 则该文件会从列表里删除 - }} - disabled={false} - /> -
    - ) - } - }`, - opt: ['动态上传地址'] - }, - {code: `import React from 'react' + { + code: `import React from 'react'\n +import Upload from '@hi-ui/hiui/es/upload' +import Icon from '@hi-ui/hiui/es/icon' +class Demo extends React.Component { + constructor(props) { + super(props) + this.state={param:{id:'uid',channel:'youpin'}} + } + render () { + const param = this.state.param + return ( +
    + { + console.log('upload callback', file, fileList, response) + // if(response&&response.status !== 200) return false // 返回 false 则该文件会从列表里删除 + }} + disabled={false} + /> +
    + ) + } +}`, + opt: ['基础'] + }, + { + code: `import React from 'react' import Upload from '@hi-ui/hiui/es/upload'\n class Demo extends React.Component { render () { @@ -93,8 +56,10 @@ const code = [ ) } }`, - opt: ['禁用']}, - { code: `import React from 'react' + opt: ['禁用'] + }, + { + code: `import React from 'react' import Upload from '@hi-ui/hiui/es/upload'\n class Demo extends React.Component { constructor(props) { @@ -134,7 +99,11 @@ const code = [ ) } }`, - opt: ['默认']}] + opt: ['默认'] + } +] -const DemoUpload = () => +const DemoUpload = () => ( + +) export default DemoUpload diff --git a/docs/demo/watermark/section-base.jsx b/docs/demo/watermark/section-base.jsx index f724f6471..fe19b5447 100755 --- a/docs/demo/watermark/section-base.jsx +++ b/docs/demo/watermark/section-base.jsx @@ -6,7 +6,8 @@ const prefix = 'watermark-base' const desc = '' const code = `import React from 'react' import logo from '本地图片路径或者base64' -import Watermark from '@hi-ui/hiui/es/watermark'\n +import Watermark from '@hi-ui/hiui/es/watermark' + class Demo extends React.Component { constructor(props) { super(props) @@ -28,7 +29,5 @@ class Demo extends React.Component { } }` -const DemoBase = () => ( - -) +const DemoBase = () => export default DemoBase diff --git a/docs/en-US/components/tree.md b/docs/en-US/components/tree.md index f25d4c21e..474fdc974 100644 --- a/docs/en-US/components/tree.md +++ b/docs/en-US/components/tree.md @@ -59,7 +59,6 @@ }) console.log(checkedKeys, title, bool, semi) }} - highlightable onClick={data => { console.log('tree node click', data) }} /> @@ -69,8 +68,8 @@ componentDidMount () { } ``` -::: +::: ### Checkbox @@ -133,7 +132,6 @@ checkbox }) console.log(checkedKeys, title, bool, semi) }} - highlightable onClick={data => { console.log('tree node click', data) }} /> @@ -143,8 +141,8 @@ checkbox componentDidMount () { } ``` -::: +::: ### Attribute @@ -156,7 +154,6 @@ checkbox | defaultExpandAll | whether to expand all tree nodes | boolean | - | false | | checkedKeys | selected checkboxes | array | - | - | - ### Attribute-data | Attribute | Description | Type | Options | Default | diff --git a/docs/zh-CN/components/alert.mdx b/docs/zh-CN/components/alert.mdx index cc1bd8e56..f847ce28c 100755 --- a/docs/zh-CN/components/alert.mdx +++ b/docs/zh-CN/components/alert.mdx @@ -36,11 +36,16 @@ import DemoAutoClose from '../../demo/alert/section-autoClose.jsx' ## Props -| 参数 | 说明 | 类型 | 可选值 | 默认值 | -| --------- | ------------------------ | ----------------------- | ------------------------------------------- | ------ | -| type | 警告提示类型 | string | 'info' \| 'success' \| 'error' \| 'warning' | 'info' | -| title | 警告提示标题 | string | - | - | -| content | 警告提示内容 | string | - | - | -| closeable | 是否可关闭 | boolean | true \| false | false | -| onClose | 关闭事件触发时的回调 | (e: MouseEvent) => void | - | - | -| duration | 自动关闭时间,单位为毫秒 | number \| null | - | null | +| 参数 | 说明 | 类型 | 可选值 | 默认值 | +| --------- | ------------------------ | -------------- | ------------------------------------------- | ------ | +| type | 警告提示类型 | string | 'info' \| 'success' \| 'error' \| 'warning' | 'info' | +| title | 警告提示标题 | string | - | - | +| content | 警告提示内容 | string | - | - | +| closeable | 是否可关闭 | boolean | true \| false | false | +| duration | 自动关闭时间,单位为毫秒 | number \| null | - | null | + +## Events + +| 名称 | 说明 | 类型 | 参数 | 返回值 | +| ------- | -------------------- | ---------- | ---- | ------ | +| onClose | 关闭事件触发时的回调 | () => void | - | - | diff --git a/docs/zh-CN/components/breadcrumb.mdx b/docs/zh-CN/components/breadcrumb.mdx index ce1764aa7..ab52e2c44 100644 --- a/docs/zh-CN/components/breadcrumb.mdx +++ b/docs/zh-CN/components/breadcrumb.mdx @@ -22,13 +22,24 @@ import DemoIcon from '../../demo/breadcrumb/section-icon.jsx' + + ## Props -| 参数 | 说明 | 类型 | 可选值 | 默认值 | -| --------- | ------------ | ----------------------- | ------ | ------ | -| data | 面包屑数据 | DataItem [] | - | - | -| separator | 自定义分隔符 | string | - | ' | ' | -| onClick | 点击回调函数 | (path: string)=> void | - | - | +| 参数 | 说明 | 类型 | 可选值 | 默认值 | +| --------- | ------------ | ----------- | ------ | ------ | +| data | 面包屑数据 | DataItem [] | - | - | +| separator | 自定义分隔符 | string | - | '/' | + +## Events + +| 名称 | 说明 | 类型 | 参数 | 返回值 | +| ------- | ------------ | ----------------------- | ---------------------- | ------ | +| onClick | 点击回调函数 | (path: string)=> void | path: 点击的 path 路径 | - | ## Type diff --git a/docs/zh-CN/components/button.mdx b/docs/zh-CN/components/button.mdx index 2c6d0e7b0..e0c4777e7 100755 --- a/docs/zh-CN/components/button.mdx +++ b/docs/zh-CN/components/button.mdx @@ -52,14 +52,19 @@ import DemoGroup from '../../demo/button/section-group.jsx' ## Props -| 参数 | 说明 | 类型 | 可选值 | 默认值 | -| ---------- | --------------------------------------------- | ----------------------- | --------------------------------------------------------- | --------- | -| type | 设置按钮类型 | string | 'primary' \| 'line' \| 'success' \| 'danger' \| 'default' | 'default' | -| appearance | 设置按钮外观 | string | 'link' \| 'button' | 'button' | -| disabled | 设置按钮是否禁用 | boolean | true \| false | false | -| size | 设置按钮尺寸 | string | 'large' \| 'default' \| 'small' | 'default' | -| icon | 设置按钮图标 | string | 详见 [``](/hiui/zh-CN/docs/icon) 组件 ︎ | - | -| href | 设置按钮链接,设置后将用 a 标签渲染按钮 | string | ︎ | - | -| target | 同 a 标签的 target 属性,仅在设置 href 后有效 | string | ︎'\_self' \| '\_blank' \| '\_parent' \| '\_top' | - | -| loading | 是否显示 loading | boolean | ︎- | false | -| onClick | 点击按钮时的回调 | (e: MouseEvent) => void | - | - | +| 参数 | 说明 | 类型 | 可选值 | 默认值 | +| ---------- | --------------------------------------------- | ------- | --------------------------------------------------------- | --------- | +| type | 设置按钮类型 | string | 'primary' \| 'line' \| 'success' \| 'danger' \| 'default' | 'default' | +| appearance | 设置按钮外观 | string | 'link' \| 'button' | 'button' | +| disabled | 设置按钮是否禁用 | boolean | true \| false | false | +| size | 设置按钮尺寸 | string | 'large' \| 'default' \| 'small' | 'default' | +| icon | 设置按钮图标 | string | 详见 [``](/hiui/zh-CN/docs/icon) 组件 ︎ | - | +| href | 设置按钮链接,设置后将用 a 标签渲染按钮 | string | ︎ | - | +| target | 同 a 标签的 target 属性,仅在设置 href 后有效 | string | ︎'\_self' \| '\_blank' \| '\_parent' \| '\_top' | - | +| loading | 是否显示 loading | boolean | ︎- | false | + +## Events + +| 名称 | 说明 | 类型 | 参数 | 返回值 | +| ------- | ---------------- | --------------------------- | ------------------- | ------ | +| onClick | 点击按钮时的回调 | (event: MouseEvent) => void | event: 鼠标事件对象 | - | diff --git a/docs/zh-CN/components/card.mdx b/docs/zh-CN/components/card.mdx index f78991baf..52b6d36fc 100755 --- a/docs/zh-CN/components/card.mdx +++ b/docs/zh-CN/components/card.mdx @@ -62,10 +62,12 @@ import DemoGridImage from '../../demo/card/section-grid-image.jsx' | 参数 | 说明 | 类型 | 可选值 | 默认值 | | --------- | -------------------------- | ------------------- | ------------------------------- | --------- | | title | 设置卡片标题 | string \| ReactNode | - | - | -| size | 设置卡片大小 | string | 'small' \| 'default' \| 'large' | 'default' | +| size | 设置卡片大小 | string | 'small' \| 'default' \| 'large' | - | | type | 设置卡片类型 | string | 'simple' \| 'default' | 'default' | | hoverable | 鼠标移入卡片时是否显示阴影 | boolean | true \| false | false | -| extra | 卡片右上角的扩展 | ReactNode | - | - | -| extraType | 卡片右上角的扩展显示模式 | string | 'default' \| 'hover' | 'default' | +| extra | 卡片右上角的扩展 (仅在默认类型有效) | ReactNode | - | - | | coverUrl | 卡片的封面图片链接 | string | - | - | -| content | 卡片的描述信息 | string \| ReactNode | - | - | +| content | 卡片的描述信息 (仅在 coverUrl 存在时有效) | string \| ReactNode | - | - | +| className | 卡片的自定义类名 | string | - | - | +| style | 卡片的自定义样式 | CSSProperties | - | - | +| showHeaderDivider | 是否展示卡片头部的分割线(仅在默认类型有效) | boolean | true \| false | false | diff --git a/docs/zh-CN/components/cascader.mdx b/docs/zh-CN/components/cascader.mdx index 42fb00841..802c24636 100644 --- a/docs/zh-CN/components/cascader.mdx +++ b/docs/zh-CN/components/cascader.mdx @@ -16,32 +16,43 @@ import DemoBasic from '../../demo/cascader/section-basic.jsx' +## 可搜索用法 + +import DemoSearch from '../../demo/cascader/section-search.jsx' + + + ## 特殊用法 import DemoAdvanced from '../../demo/cascader/section-advanced.jsx' -import { Badge } from '@libs' - ## Props -| 参数 | 说明 | 类型 | 可选值 | 默认值 | -| -------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------- | ------------- | ------------------------------------------------------- | -| fieldNames | 设置 options 中 label, value, children 对应的 key | object | - | { label: 'label', value: 'value', children: 'children'} | -| data | 设置选择项数据源 | DataItem[] | - | - | -| value | 设置当前选中值 | string[] | - | [] | -| searchable | 是否可搜索 | boolean | true \| false | false | -| filterOption | 第一个参数为输入的关键字,第二个为数据项,返回值为 true 时将出现在结果项。仅在 searchable 为 true 时有效 | (keyword: string, item: DataItem) => boolean | - | - | -| clearable | 是否可清空 | boolean | true \| false | true | -| disabled | 是否禁止使用 | boolean | true \| false | false | -| changeOnSelect | 是否启用选择即改变功能 | boolean | true \| false | false | -| placeholder | 输入框占位 | string | - | '请选择' | -| emptyContent | 设置选项为空时展示的内容 | string \| ReactNode | - | '无匹配数据' | -| displayRender | 自定义选择后展示的内容 | (value: string[]) => string | - | - | -| style | 自定义样式 | object | - | - | -| onChange | 选择后的回调 | (value: string[]) => void | - | - | -| trigger | 展开下一级的触发方式 | string | 'hover' \| 'click' | 'click' | +| 参数 | 说明 | 类型 | 可选值 | 默认值 | +| ---------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------- | ------------------ | ------------------------------------------------------- | +| fieldNames | 设置 options 中 label, value, children 对应的 key | object | - | { label: 'label', value: 'value', children: 'children'} | +| data | 设置选择项数据源 | DataItem[] | - | - | +| value | 设置当前选中值 | string[] | - | [] | +| defaultValue | 设置当前选中值默认值 (3.0 新增) | string[] | - | [] | +| expandTrigger | 次级菜单的展开方式,可选 'click' 和 'hover' | string | 'click' \| 'hover' | 'click' | +| searchable | 是否可搜索 | boolean | true \| false | false | +| filterOption | 第一个参数为输入的关键字,第二个为数据项,返回值为 true 时将出现在结果项。仅在 searchable 为 true 时有效 | (keyword: string, item: DataItem) => boolean | - | - | +| clearable | 是否可清空 | boolean | true \| false | true | +| disabled | 是否禁止使用 | boolean | true \| false | false | +| changeOnSelect | 是否启用选择即改变功能 | boolean | true \| false | false | +| placeholder | 输入框占位 | string | - | '请选择' | +| emptyContent | 设置选项为空时展示的内容 | string \| ReactNode | - | '无匹配数据' | +| displayRender | 自定义选择后展示的内容 | (value: string[]) => string | - | - | +| style | 自定义样式 | object | - | - | +| overlayClassName | 下拉根元素的类名称 | string | - | - | + +## Events + +| 名称 | 说明 | 类型 | 参数 | 返回值 | +| -------- | ------------ | -------------------------- | ------------------ | ------ | +| onChange | 选择后的回调 | (values: string[]) => void | values: 选中项集合 | - | ## Type diff --git a/docs/zh-CN/components/changelog.mdx b/docs/zh-CN/components/changelog.mdx deleted file mode 100644 index 27459bb1b..000000000 --- a/docs/zh-CN/components/changelog.mdx +++ /dev/null @@ -1,599 +0,0 @@ -# 更新日志 - -## 2.14.0 - -- 优化 `` 垂直模式收起后没有配置 icon 的展示效果 [#1167](https://github.com/XiaoMi/hiui/issues/1167) -- 优化 `` 国际化适配 [#1142](https://github.com/XiaoMi/hiui/issues/1142) -- 修复 `` 环形边框颜色问题 [#1165](https://github.com/XiaoMi/hiui/issues/1165) -- 新增 `` onDragStart/onDragEnd/onDrop 回调函数 [#1162](https://github.com/XiaoMi/hiui/issues/1162) -- 修复 `` 设置 maxCount 后导致上传交互异常问题 [#1158](https://github.com/XiaoMi/hiui/issues/1158) -- 修复 `` 设置 clearable 属性控制台警告问题 [#1143](https://github.com/XiaoMi/hiui/issues/1143) -- 修复 `` type 为 amount 类型时的问题 [#1150](https://github.com/XiaoMi/hiui/issues/1150) -- 修复 `` placement 为 inside 内容显示折断问题 [#1146](https://github.com/XiaoMi/hiui/issues/1146) -- 修复 `` 部分图标字号问题 [#1145](https://github.com/XiaoMi/hiui/issues/1145) -- 修复 `` type 非 editable 时,title 属性控制台警告问题 [#1144](https://github.com/XiaoMi/hiui/issues/1144) -- 修复 `` useEmoji 为 true 时,设置 value > 5 报错问题 [#1137](https://github.com/XiaoMi/hiui/issues/1137) -- 修复 `` title 为 nubmer 类型时的问题 [#1077](https://github.com/XiaoMi/hiui/issues/1077) -- 修复 `` 优化弹窗位置计算触发机制 [#1072](https://github.com/XiaoMi/hiui/issues/1072) -- 修复 `` 异步多选受控时,选中项会重复添加的问题 [#1044](https://github.com/XiaoMi/hiui/issues/1044) -- 修复 `` 嵌套使用 type 不生效的问题 [#1046](https://github.com/XiaoMi/hiui/issues/1046) -- 修复 `` activeId 发生改变时展开选中项 [#1029](https://github.com/XiaoMi/hiui/issues/1029) -- 修复 `` 异步获取数据时,activeId 失效的问题 [#1027](https://github.com/XiaoMi/hiui/issues/1027) -- 修复 `` editable 和 searchable 不同同时使用的问题 [#1023](https://github.com/XiaoMi/hiui/issues/1023) -- 优化 `` 展示效果 [#1024](https://github.com/XiaoMi/hiui/issues/1024) -- 优化 `` 展示效果 [#1086](https://github.com/XiaoMi/hiui/issues/1086)[#1048](https://github.com/XiaoMi/hiui/issues/1048) -- 优化 `` 拖拽性能 [#1087](https://github.com/XiaoMi/hiui/issues/1087) -- 新增 `` onBeforeSave onBeforeDelete 函数 [#1093](https://github.com/XiaoMi/hiui/issues/1093) -- 新增 `` 普通模式配色 [#1060](https://github.com/XiaoMi/hiui/issues/1060) -- 新增 `` 线性模式 [#1088](https://github.com/XiaoMi/hiui/issues/1088) -- 新增 `` 支持单独选中父级菜单 [#1038](https://github.com/XiaoMi/hiui/issues/1038) -- 新增 `` confirm 调用方式 [#1090](https://github.com/XiaoMi/hiui/issues/1090) -- 新增 `` 支持宽度调整 [#1033](https://github.com/XiaoMi/hiui/issues/1033) -- 新增 `` 增加月范围选择和年范围选择面板 [#1074](https://github.com/XiaoMi/hiui/issues/1074) -- 新增 `` 快捷方式「近半年」 [#1063](https://github.com/XiaoMi/hiui/issues/1063) -- 新增 `` trigger 属性配置选项展开的触发方式 [#1092](https://github.com/XiaoMi/hiui/issues/1092) -- 新增 `` onPageSizeChange 可通过返回 false 来防止触发 onChange [#1091](https://github.com/XiaoMi/hiui/issues/1091) -- 新增 `` 支持通过 icon 配置 HiUI icon [#1064](https://github.com/XiaoMi/hiui/issues/1064) -- 新增 `` contextMenu 增加层级回调参数 [#1021](https://github.com/XiaoMi/hiui/issues/1021) -- 新增多语言繁体支持 [#1062](https://github.com/XiaoMi/hiui/issues/1062) - -## 2.12.0 - -- 新增 `` 水印组件 [#121](https://github.com/XiaoMi/hiui/issues/121) -- 修复 `` 多选模式下在禁用状态复选框样式异常的问题 [#1014](https://github.com/XiaoMi/hiui/issues/1014) -- 修复 `` 可搜索模式下自动获取输入框焦点 [#925](https://github.com/XiaoMi/hiui/issues/925) -- 优化 `` 轮播定位交互,并新增 showPages 是否显示页码指示器 [#925](https://github.com/XiaoMi/hiui/issues/925) -- 修复 `
    ` withCredentials 属性 [#922](https://github.com/XiaoMi/hiui/issues/922) -- 修复 `` 单选模式下 targetLimit 无效的问题 [#919](https://github.com/XiaoMi/hiui/issues/919) -- 修复 `` 异步单选和异步多选交互模式 [#903](https://github.com/XiaoMi/hiui/issues/903) -- 优化 `` 预览交互 [#893](https://github.com/XiaoMi/hiui/issues/893) -- 优化 `` 可搜索时清除按钮的出现交互 [#890](https://github.com/XiaoMi/hiui/issues/890) -- 优化 `` 编辑节点的交互,输入为空时不可保存 [#889](https://github.com/XiaoMi/hiui/issues/889) -- 优化 `` 多选未选中时的展示效果 [#888](https://github.com/XiaoMi/hiui/issues/888) -- 优化若干视觉还原问题:[#841](https://github.com/XiaoMi/hiui/issues/841) [#842](https://github.com/XiaoMi/hiui/issues/842) [#843](https://github.com/XiaoMi/hiui/issues/843) [#844](https://github.com/XiaoMi/hiui/issues/844) [#845](https://github.com/XiaoMi/hiui/issues/845) [#848](https://github.com/XiaoMi/hiui/issues/848) [#851](https://github.com/XiaoMi/hiui/issues/851) [#852](https://github.com/XiaoMi/hiui/issues/852) [#853](https://github.com/XiaoMi/hiui/issues/853) [#854](https://github.com/XiaoMi/hiui/issues/854) [#855](https://github.com/XiaoMi/hiui/issues/855) [#856](https://github.com/XiaoMi/hiui/issues/856) [#857](https://github.com/XiaoMi/hiui/issues/857) [#858](https://github.com/XiaoMi/hiui/issues/858) [#859](https://github.com/XiaoMi/hiui/issues/859) [#862](https://github.com/XiaoMi/hiui/issues/862) [#869](https://github.com/XiaoMi/hiui/issues/869) [#871](https://github.com/XiaoMi/hiui/issues/871) [#872](https://github.com/XiaoMi/hiui/issues/872) [#873](https://github.com/XiaoMi/hiui/issues/873) [#874](https://github.com/XiaoMi/hiui/issues/874) [#875](https://github.com/XiaoMi/hiui/issues/875) [#876](https://github.com/XiaoMi/hiui/issues/876) [#886](https://github.com/XiaoMi/hiui/issues/886) [#895](https://github.com/XiaoMi/hiui/issues/895) [#896](https://github.com/XiaoMi/hiui/issues/896) [#897](https://github.com/XiaoMi/hiui/issues/897) [#898](https://github.com/XiaoMi/hiui/issues/898) [#899](https://github.com/XiaoMi/hiui/issues/899) [#900](https://github.com/XiaoMi/hiui/issues/900) [#901](https://github.com/XiaoMi/hiui/issues/901) - -## 2.6.4 - -- 修复 `
    ` 多级表头和多选同时使用的问题 [#867](https://github.com/XiaoMi/hiui/issues/867) -- 修复 `` onSave 入参不正确的问题 [#850](https://github.com/XiaoMi/hiui/issues/850) - -## 2.6.3 - -- 修复 `
    ` 多选失效的问题 [#699](https://github.com/XiaoMi/hiui/issues/699) - -## 2.4.0 - -- 修复 `
    ` 多选的显示问题 [#685](https://github.com/XiaoMi/hiui/issues/685) -- 修复 `` 每页大小切换无效的问题 [#691](https://github.com/XiaoMi/hiui/issues/691) -- 新增 `` 增加 loading 状态 [#680](https://github.com/XiaoMi/hiui/issues/680) -- 新增 `` 增加照片墙预览提示 icon [#490](https://github.com/XiaoMi/hiui/issues/490) -- 新增 `` 同等宽度下,多选和单选的 placeholder 和展开箭头没有对齐的问题 [#661](https://github.com/XiaoMi/hiui/issues/661) -- 修复 `
    ` 表头渲染不正确的问题 [#625](https://github.com/XiaoMi/hiui/issues/625) -- 修复 `` 初次 hover 触发时移入气泡框,气泡框会消失的问题 [#650](https://github.com/XiaoMi/hiui/issues/650) -- 修复 `` 部分情况下展示不正确的问题 [#593](https://github.com/XiaoMi/hiui/issues/593) -- 修复 `` 关于 "javascript:void(0)" 的警告 [#656](https://github.com/XiaoMi/hiui/issues/656) -- 修复 `` 层级太低的问题 [#637](https://github.com/XiaoMi/hiui/issues/637) -- 新增 `` 配置支持 [#638](https://github.com/XiaoMi/hiui/issues/638) -- 新增 `` 多级数据支持 [#594](https://github.com/XiaoMi/hiui/issues/594) -- 新增 `` 自定义展开项宽度支持 [#444](https://github.com/XiaoMi/hiui/issues/444) -- 新增 `` Form.Item label 支持 ReactNode [#664](https://github.com/XiaoMi/hiui/issues/664) - -## 2.2.1 - -- 修复 `` 异步用法 params 不生效的问题 [#587](https://github.com/XiaoMi/hiui/issues/587) -- 修复 `` 包裹禁用按钮时不能隐藏的问题 [#583](https://github.com/XiaoMi/hiui/issues/583) -- 修复 `` 中含输入项时失焦造成的问题 [#581](https://github.com/XiaoMi/hiui/issues/581) -- 修复 `` 清空搜索条件后无法收起的问题 [#561](https://github.com/XiaoMi/hiui/issues/561) - -## 2.1.2 - -- 修复 `` clearable 不生效的问题 [#580](https://github.com/XiaoMi/hiui/issues/580) -- 修复 `` 中的自定义上传结合 maxCount 不能上传的问题 [#582](https://github.com/XiaoMi/hiui/issues/582) -- 修复 `` type 为 textarea 时的底部的样式问题 [#584](https://github.com/XiaoMi/hiui/issues/584) - -## 2.1.0 - -- 新增 `` 面包屑组件 [#573](https://github.com/XiaoMi/hiui/issues/573) -- 新增 `` 线型展示模式 [#541](https://github.com/XiaoMi/hiui/issues/541) -- 修复 `` 中的自定义上传同一个文件失败的问题 [#567](https://github.com/XiaoMi/hiui/issues/567) -- 修复 `` 重复渲染问题 [#565](https://github.com/XiaoMi/hiui/issues/565) -- 修复 `` activeId 无效的问题 [#560](https://github.com/XiaoMi/hiui/issues/560) - -## 2.0.5 - -- 修复 `` hover 的闪烁问题 [#522](https://github.com/XiaoMi/hiui/issues/522) -- 修复 `` maxCount 结合 onChange return false 的计算错误问题 [#549](https://github.com/XiaoMi/hiui/issues/549) -- 修复 `` 部分区域点击无效的问题 [#555](https://github.com/XiaoMi/hiui/issues/555) -- 修复 `` 高亮项计算错误的问题 [#556](https://github.com/XiaoMi/hiui/issues/556) - -## 2.0.4 - -- 修复:`DatePicker.format` 方法丢失的问题 [#540](https://github.com/XiaoMi/hiui/issues/540) -- 修复:`` 垂直布局的问题 [#545](https://github.com/XiaoMi/hiui/issues/545) -- 修复:`` 增加默认背景色 [#546](https://github.com/XiaoMi/hiui/issues/546) -- 优化:过滤`` 、 `` 无关属性 [#547](https://github.com/XiaoMi/hiui/issues/547) - -## 2.0.2 - -- 修复:`` 组件未传入图标时收起的显示问题 [#529](https://github.com/XiaoMi/hiui/issues/529) - -## 2.0.1 - -- 修复:`
    ` 组件服务端表格分页和错误请求处理的问题 [#519](https://github.com/XiaoMi/hiui/issues/519) -- 修复:`` 、`` 组件的导出问题 [#516](https://github.com/XiaoMi/hiui/issues/516) -- 修复:`` 组件 onchange 返回 boolean 无效的问题 [#514](https://github.com/XiaoMi/hiui/issues/514) - -## 2.0.0 - -- 修改:`` - - 废弃 `list` 属性,使用 `data` 属性代替 -- 修改:`` 组件 - - 废弃 `mode` 属性,使用 `type` 属性代替 - - 新增 `current` 受控属性 - - 新增 `max` 最大页数属性 - - 废弃`hideOnSinglePage` 属性,使用 `autoHide` 属性代替 - - 废弃`sizeChangeEvent` 属性,使用`onPageSizeChange` 属性代替 - - 废弃`showQuickJumper` 属性,使用`showJumper`属性代替 -- 修改:`` 组件 - - 废弃`id`属性 - - 废弃 `list` 属性,使用`data` 属性代替 - - 废弃`vertical` 属性,使用`placement` 属性代替 - - 废弃`up` 属性,使用`itemLayout` 属性代替 -- 修改:`` 组件 - - 废弃`mode` 属性,使用`placement` 属性代替 - - 废弃`mini` 属性,使用`collapsed` 属性代替 - - 废弃`miniToggle` 属性,使用`showCollpse` 属性代替 - - 废弃`onMiniChange` 属性,使用`onCollapse` 属性代替 -- 修改:`` 组件 - - 废弃`labelPosition` 属性,使用`labelPlacement` 属性代替 - - 废弃`inline` 属性,使用`placement` 属性代替 -- 修改:`
    ` 吸顶后的 bug [#429](https://github.com/XiaoMi/hiui/issues/429) - -## 1.5.3 - -- 新增:`` 组件上传图片后点击展示支持旋转 [#183](https://github.com/XiaoMi/hiui/issues/183) -- 新增:`` 组件上传数量限制 [#249](https://github.com/XiaoMi/hiui/issues/249) -- 新增:`` 组件样式优化,交互调整 [#274](https://github.com/XiaoMi/hiui/issues/274)[#297](https://github.com/XiaoMi/hiui/issues/297) -- 修复:`` 组件 `type = amount` 时显示错误的问题 [#409](https://github.com/XiaoMi/hiui/issues/409) -- 修复:`
    ` 记忆功能 [#420](https://github.com/XiaoMi/hiui/issues/420) - -## 1.5.2 - -- 修复:`` 组件放入 `` 后 `onChange return false` 无效 [#344](https://github.com/XiaoMi/hiui/issues/344) -- 新增:`` 组件 `timeperiod` 模式支持自定义时间间隔 [#349](https://github.com/XiaoMi/hiui/issues/349) - -## 1.5.1 - -- 新增:`` 组件的对齐问题 [#322](https://github.com/XiaoMi/hiui/issues/322) -- 修复:`
    ` 组件功能 - - 可通过 `size`属性指定表格的大小,值:large normal small - - 可通过 `bordered` 属性指定表格是否显示线框 - -## 1.3.0 - -- 新增:`
    ` 组件; - - 分页条位置逻辑; - - 弃用 `scroll` 属性,新增 `scrollX` 属性; - - `fixTop` 吸顶属性同时兼容 `boolean` 及 `number`。 -- 修改:``; - - 重写内部实现逻辑; - - 增加半选状态。 -- 修改:修复 `` 组件在某些情况下无法得到父元素的宽度而引起的页面崩溃问题; -- 修改:修复 `` 组件页岁数过多时的样式问题。 - -## 1.2.0 - -- 新增:`
    ` 组件支持外部设置、求和等操作; -- 新增:`` 组件增加支持前、后缀元素。 -- 修改:修改 `` 为 ``; -- 修改:优化 `` 组件结构; -- 修改:优化 `` 组件结构; -- 修改:优化 `` 组件结构; -- 修改:修改 ``、``、`` 组件挂载到 `` 下; -- 修改:修改 ``、``、``、``、`` 组件类型为 `textarea` 时高度不自适应的 bug; -- 修改:修复 `` 引用大小写的 bug; -- 修改:修复 `` 能低于最小值的 bug; -- 文档:切换 sass-lint 到 style-lint。 -- 文档:增加多语言、配色切换文档。 - -## 1.0.3 - -- 新增:级联选择器 `` 组件; -- 新增:进度条 `` 组件; -- 新增:`` 组件增加点击事件; -- 修改:修正 `` 不动态更新的 bug; -- 修改:修改 `` 依赖 date-fns,修改范围选择结束时间; -- 修改:修正文档语言切换的 bug; -- 文档:工作流优化,增加 sass-lint,所有组件无需单独引用样式。 - -## 1.0.2 - -- 更新:`` 组件,支持主题切换; -- 修改:重构 ` + {copyed && ( + 已复制 + )} + + ) +} +export default CopyIcon diff --git a/docs/zh-CN/components/icon-list/data-icon/config.js b/docs/zh-CN/components/icon-list/data-icon/config.js new file mode 100644 index 000000000..de008707c --- /dev/null +++ b/docs/zh-CN/components/icon-list/data-icon/config.js @@ -0,0 +1,18 @@ +export const outlined = [ + { + name: 'bar-chart', + text: '柱状图' + }, + { + name: 'line-chart', + text: '折线图' + }, + { + name: 'pie-chart', + text: '饼图' + }, + { + name: 'stock', + text: '股票' + } +] diff --git a/docs/zh-CN/components/icon-list/data-icon/index.jsx b/docs/zh-CN/components/icon-list/data-icon/index.jsx new file mode 100644 index 000000000..8d582e68b --- /dev/null +++ b/docs/zh-CN/components/icon-list/data-icon/index.jsx @@ -0,0 +1,18 @@ +import React, { useEffect } from 'react' +import CopyIcon from '../copyIcon' +import { outlined } from './config' + +const Data = () => { + useEffect(() => {}, []) + return ( +
    +

    数据

    +
      + {outlined.map((icon, idx) => ( + + ))} +
    +
    + ) +} +export default Data diff --git a/docs/zh-CN/components/icon-list/direction-icon/config.js b/docs/zh-CN/components/icon-list/direction-icon/config.js new file mode 100644 index 000000000..cb7576571 --- /dev/null +++ b/docs/zh-CN/components/icon-list/direction-icon/config.js @@ -0,0 +1,74 @@ +export const outlined = [ + { + name: 'up', + text: '上' + }, + { + name: 'down', + text: '下' + }, + { + name: 'left', + text: '左' + }, + { + name: 'right', + text: '右' + }, + { + name: 'caret-up', + text: '符号-上' + }, + { + name: 'caret-down', + text: '符号-下' + }, + { + name: 'caret-left', + text: '符号-左' + }, + { + name: 'caret-right', + text: '符号-右' + }, + { + name: 'double-left', + text: '双箭头-左' + }, + { + name: 'double-right', + text: '双箭头-右' + }, + { + name: 'to-top', + text: '置顶' + }, + { + name: 'to-bottom', + text: '置底' + }, + { + name: 'fullscreen', + text: '全屏' + }, + { + name: 'fullscreen-exit', + text: '全屏-退出' + }, + { + name: 'menu-fold', + text: '菜单-收起' + }, + { + name: 'menu-unfold', + text: '菜单-展开' + }, + { + name: 'expand', + text: '展开' + }, + { + name: 'shrink', + text: '收起' + } +] diff --git a/docs/zh-CN/components/icon-list/direction-icon/index.jsx b/docs/zh-CN/components/icon-list/direction-icon/index.jsx new file mode 100644 index 000000000..c930029dc --- /dev/null +++ b/docs/zh-CN/components/icon-list/direction-icon/index.jsx @@ -0,0 +1,16 @@ +import React from 'react' +import { outlined } from './config' +import CopyIcon from '../copyIcon' +const Direction = () => { + return ( +
    +

    方向

    +
      + {outlined.map((icon, idx) => ( + + ))} +
    +
    + ) +} +export default Direction diff --git a/docs/zh-CN/components/icon-list/edit-icon/config.js b/docs/zh-CN/components/icon-list/edit-icon/config.js new file mode 100644 index 000000000..54a770c47 --- /dev/null +++ b/docs/zh-CN/components/icon-list/edit-icon/config.js @@ -0,0 +1,137 @@ +export const outlined = [ + { + name: 'average', + text: '平均值' + }, + { + name: 'columns', + text: '多列' + }, + { + name: 'column-height', + text: '列高' + }, + { + name: 'copy', + text: '拷贝' + }, + { + name: 'equal-proportion', + text: '等比例' + }, + { + name: 'delete', + text: '删除' + }, + { + name: 'drag', + text: '拖拽' + }, + { + name: 'document-search', + text: '文档-查询' + }, + { + name: 'duplicate', + text: '复制' + }, + { + name: 'edit', + text: '编辑' + }, + { + name: 'ellipsis-circle', + text: '省略-圆形' + }, + { + name: 'ellipsis', + text: '省略' + }, + { + name: 'filter', + text: '漏斗' + }, + { + name: 'folder-add', + text: '文件夹-添加' + }, + { + name: 'folder-move', + text: '文件夹-移动' + }, + { + name: 'freeze-column', + text: '列冻结' + }, + { + name: 'paste', + text: '粘贴' + }, + { + name: 'rotate-left', + text: '旋转-左' + }, + { + name: 'rotate-right', + text: '旋转-右' + }, + { + name: 'save', + text: '保存' + }, + { + name: 'scissor', + text: '剪刀' + }, + { + name: 'sort-ascending', + text: '排列-升序序' + }, + { + name: 'sort-descending', + text: '排列-降序' + }, + { + name: 'summation', + text: '求和' + }, + { + name: 'zoom-in', + text: '放大' + }, + { + name: 'zoom-out', + text: '缩小' + } +] + +export const filled = [ + { + name: 'copy', + text: '拷贝' + }, + { + name: 'delete', + text: '删除' + }, + { + name: 'duplicate', + text: '复制' + }, + { + name: 'ellipsis-circle', + text: '省略-圆形' + }, + { + name: 'filter', + text: '漏斗' + }, + { + name: 'folder-move', + text: '文件夹-移动' + }, + { + name: 'paste', + text: '粘贴' + } +] diff --git a/docs/zh-CN/components/icon-list/edit-icon/index.jsx b/docs/zh-CN/components/icon-list/edit-icon/index.jsx new file mode 100644 index 000000000..aa8da3810 --- /dev/null +++ b/docs/zh-CN/components/icon-list/edit-icon/index.jsx @@ -0,0 +1,37 @@ +import React, { useState } from 'react' +import { outlined, filled } from './config' +import Radio from '../../../../../components/radio' +import CopyIcon from '../copyIcon' + +const Edit = () => { + const [currentType, setCurrentType] = useState(0) + const list = currentType === 0 ? outlined : filled + return ( +
    +

    编辑

    +
    + setCurrentType(v)} + /> +
    +
      + {list.map((icon, idx) => ( + + ))} +
    +
    + ) +} +export default Edit diff --git a/docs/zh-CN/components/icon-list/general-icon/config.js b/docs/zh-CN/components/icon-list/general-icon/config.js new file mode 100644 index 000000000..605462028 --- /dev/null +++ b/docs/zh-CN/components/icon-list/general-icon/config.js @@ -0,0 +1,679 @@ +export const outlined = [ + { + name: 'alarm-clock', + text: '闹钟' + }, + { + name: 'alarm', + text: '警报' + }, + { + name: 'app-store', + text: '应用中心' + }, + { + name: 'approve', + text: '审批' + }, + { + name: 'archive', + text: '归档' + }, + { + name: 'asset-monitor', + text: '监视器-资产' + }, + { + name: 'audio', + text: '音频' + }, + { + name: 'bank-card', + text: '银行卡' + }, + { + name: 'bars', + text: '菜单栏' + }, + { + name: 'bell', + text: '铃铛' + }, + { + name: 'block', + text: '区块' + }, + { + name: 'bookmark', + text: '书签' + }, + { + name: 'building', + text: '大楼' + }, + { + name: 'bulb', + text: '灯泡' + }, + { + name: 'calculator', + text: '计算器' + }, + { + name: 'camera', + text: '相机' + }, + { + name: 'chat', + text: '聊天' + }, + { + name: 'close-code', + text: '代码-收起' + }, + { + name: 'cloud-download', + text: '云-下载' + }, + { + name: 'cloud', + text: '云' + }, + { + name: 'cloud-upload', + text: '云-上传' + }, + { + name: 'collection', + text: '收藏集' + }, + { + name: 'date', + text: '日期' + }, + { + name: 'data-monitor', + text: '监视器-数据' + }, + { + name: 'dislike', + text: '不喜欢' + }, + { + name: 'diagram', + text: '图例' + }, + { + name: 'document-exclamation', + text: '文档-感叹' + }, + { + name: 'download', + text: '下载' + }, + { + name: 'end-date', + text: '结束日期' + }, + { + name: 'expression', + text: '表情' + }, + { + name: 'eye-invisible', + text: '眼睛-不可见' + }, + { + name: 'eye', + text: '眼睛' + }, + { + name: 'file', + text: '文件' + }, + { + name: 'fire', + text: '火焰' + }, + { + name: 'flag', + text: '旗帜' + }, + { + name: 'folder', + text: '文件夹' + }, + { + name: 'folder-open', + text: '文件夹-打开' + }, + { + name: 'global', + text: '全球' + }, + { + name: 'heart', + text: '爱心' + }, + { + name: 'home', + text: '家' + }, + { + name: 'import', + text: '导入' + }, + { + name: 'key', + text: '钥匙' + }, + { + name: 'lightning', + text: '闪电' + }, + { + name: 'like', + text: '喜欢' + }, + { + name: 'link', + text: '链接' + }, + { + name: 'location', + text: '定位' + }, + { + name: 'lock', + text: '锁定' + }, + { + name: 'mail', + text: '邮件' + }, + { + name: 'mail-open', + text: '邮件-打开' + }, + { + name: 'mail-send', + text: '邮件-发送' + }, + { + name: 'man', + text: '男性' + }, + { + name: 'menu', + text: '菜单' + }, + { + name: 'message', + text: '消息' + }, + { + name: 'mobile', + text: '手机' + }, + { + name: 'monitor', + text: '监视器' + }, + { + name: 'moon', + text: '月亮' + }, + { + name: 'pad', + text: '平板' + }, + { + name: 'pause', + text: '暂停' + }, + { + name: 'phone', + text: '电话' + }, + { + name: 'picture', + text: '图片' + }, + { + name: 'pin', + text: '图钉' + }, + { + name: 'play', + text: '播放' + }, + { + name: 'power-off', + text: '关机' + }, + { + name: 'printer', + text: '打印机' + }, + { + name: 'qr-code', + text: '二维码' + }, + { + name: 'relation', + text: '关系' + }, + { + name: 'rmb', + text: '人民币' + }, + { + name: 'scan', + text: '扫描' + }, + { + name: 'search', + text: '搜索' + }, + { + name: 'setting', + text: '设置' + }, + { + name: 'share', + text: '分享' + }, + { + name: 'shop', + text: '商店' + }, + { + name: 'shopping', + text: '购物' + }, + { + name: 'show-code', + text: '代码-展示' + }, + { + name: 'skin', + text: '皮肤' + }, + { + name: 'sound', + text: '声音' + }, + { + name: 'star', + text: '星星' + }, + { + name: 'start-date', + text: '开始日期' + }, + { + name: 'sun', + text: '太阳' + }, + { + name: 'tag', + text: '标签' + }, + { + name: 'task', + text: '任务' + }, + { + name: 'template', + text: '模版' + }, + { + name: 'time', + text: '时间' + }, + { + name: 'time-rewind', + text: '时间-回退' + }, + { + name: 'tool', + text: '工具' + }, + { + name: 'travel', + text: '旅行' + }, + { + name: 'truck', + text: '卡车' + }, + { + name: 'umbrella', + text: '雨伞' + }, + { + name: 'unlock', + text: '解锁' + }, + { + name: 'update', + text: '更新' + }, + { + name: 'user-add', + text: '用户-添加' + }, + { + name: 'user', + text: '用户' + }, + { + name: 'users', + text: '用户组' + }, + { + name: 'video-camera', + text: '摄像机' + }, + { + name: 'webpage', + text: '网页' + }, + { + name: 'woman', + text: '女性' + }, + { + name: 'file-excel', + text: 'Excel' + }, + { + name: 'file-exe', + text: 'Exe' + }, + { + name: 'file-jpg', + text: 'JPG' + }, + { + name: 'file-keynote', + text: 'Keynote' + }, + { + name: 'file-music', + text: '音乐文件' + }, + { + name: 'file-pdf', + text: 'PDF' + }, + { + name: 'file-ppt', + text: 'PPT' + }, + { + name: 'file-question', + text: '未知文件' + }, + { + name: 'file-txt', + text: 'Txt' + }, + { + name: 'file-video', + text: '视频文件' + }, + { + name: 'file-word', + text: 'Word' + }, + { + name: 'file-zip', + text: 'Zip' + }, + { + name: 'reset', + text: '重置' + }, + { + name: 'synchronize', + text: '同步' + }, + { + name: 'upload', + text: '上传' + } +] + +export const filled = [ + { + name: 'alarm-clock', + text: '闹钟' + }, + { + name: 'alarm', + text: '警报' + }, + { + name: 'app-store', + text: '应用中心' + }, + { + name: 'asset-monitor', + text: '监视器-资产' + }, + { + name: 'audio', + text: '音频' + }, + { + name: 'bank-card', + text: '银行卡' + }, + { + name: 'bell', + text: '铃铛' + }, + { + name: 'block', + text: '区块' + }, + { + name: 'bookmark', + text: '书签' + }, + { + name: 'building', + text: '大楼' + }, + { + name: 'bulb', + text: '灯泡' + }, + { + name: 'calculator', + text: '计算器' + }, + { + name: 'camera', + text: '相机' + }, + { + name: 'chat', + text: '聊天' + }, + { + name: 'cloud', + text: '云' + }, + { + name: 'data-monitor', + text: '监视器-数据' + }, + { + name: 'end-date', + text: '结束日期' + }, + { + name: 'expression', + text: '表情' + }, + + { + name: 'file', + text: '文件' + }, + { + name: 'fire', + text: '火焰' + }, + { + name: 'flag', + text: '旗帜' + }, + { + name: 'folder-add', + text: '文件夹-打开' + }, + { + name: 'folder-open', + text: '文件夹-打开' + }, + { + name: 'heart', + text: '爱心' + }, + { + name: 'home', + text: '家' + }, + { + name: 'key', + text: '钥匙' + }, + { + name: 'lightning', + text: '闪电' + }, + { + name: 'like', + text: '喜欢' + }, + { + name: 'location', + text: '定位' + }, + { + name: 'lock', + text: '锁定' + }, + { + name: 'message', + text: '消息' + }, + { + name: 'mobile', + text: '手机' + }, + { + name: 'monitor', + text: '监视器' + }, + { + name: 'moon', + text: '月亮' + }, + { + name: 'pad', + text: '平板' + }, + { + name: 'pin', + text: '图钉' + }, + { + name: 'play', + text: '播放' + }, + { + name: 'qr-code', + text: '二维码' + }, + { + name: 'rmb', + text: '人民币' + }, + + { + name: 'setting', + text: '设置' + }, + + { + name: 'shopping', + text: '购物' + }, + + { + name: 'skin', + text: '皮肤' + }, + { + name: 'sound', + text: '声音' + }, + { + name: 'star', + text: '星星' + }, + { + name: 'start-date', + text: '开始日期' + }, + { + name: 'sun', + text: '太阳' + }, + { + name: 'tag', + text: '标签' + }, + { + name: 'task', + text: '任务' + }, + { + name: 'template', + text: '模版' + }, + + { + name: 'tool', + text: '工具' + }, + { + name: 'travel', + text: '旅行' + }, + { + name: 'unlock', + text: '解锁' + }, + + { + name: 'user', + text: '用户' + }, + { + name: 'users', + text: '用户组' + }, + { + name: 'video-camera', + text: '摄像机' + }, + { + name: 'webpage', + text: '网页' + } +] diff --git a/docs/zh-CN/components/icon-list/general-icon/index.jsx b/docs/zh-CN/components/icon-list/general-icon/index.jsx new file mode 100644 index 000000000..b6463f516 --- /dev/null +++ b/docs/zh-CN/components/icon-list/general-icon/index.jsx @@ -0,0 +1,37 @@ +import React, { useState } from 'react' +import { outlined, filled } from './config' +import Radio from '../../../../../components/radio' +import CopyIcon from '../copyIcon' + +const General = () => { + const [currentType, setCurrentType] = useState(0) + const list = currentType === 0 ? outlined : filled + return ( +
    +

    通用

    +
    + setCurrentType(v)} + /> +
    +
      + {list.map((icon, idx) => ( + + ))} +
    +
    + ) +} +export default General diff --git a/docs/zh-CN/components/icon-list/index.jsx b/docs/zh-CN/components/icon-list/index.jsx new file mode 100644 index 000000000..99c1b2e6f --- /dev/null +++ b/docs/zh-CN/components/icon-list/index.jsx @@ -0,0 +1,22 @@ +import React from 'react' +import DirectionIcon from './direction-icon' +import DataIcon from './data-icon' +import GeneralIcon from './general-icon' +import EditIcon from './edit-icon' +import TipIcon from './tip-icon' + +import './style/icon.scss' + +const IconList = () => { + return ( + + + + + + + + ) +} + +export default IconList diff --git a/docs/zh-CN/components/style/icon.scss b/docs/zh-CN/components/icon-list/style/icon.scss similarity index 100% rename from docs/zh-CN/components/style/icon.scss rename to docs/zh-CN/components/icon-list/style/icon.scss diff --git a/docs/zh-CN/components/icon-list/tip-icon/config.js b/docs/zh-CN/components/icon-list/tip-icon/config.js new file mode 100644 index 000000000..ece5544d0 --- /dev/null +++ b/docs/zh-CN/components/icon-list/tip-icon/config.js @@ -0,0 +1,109 @@ +export const outlined = [ + { + name: 'check', + text: '通过' + }, + { + name: 'check-circle', + text: '通过-圆形' + }, + { + name: 'check-square', + text: '通过-方形' + }, + { + name: 'close', + text: '关闭' + }, + { + name: 'close-circle', + text: '关闭-圆形' + }, + { + name: 'exclamation', + text: '感叹' + }, + { + name: 'exclamation-circle', + text: '感叹-圆形' + }, + { + name: 'info', + text: '信息' + }, + { + name: 'info-circle', + text: '信息-圆形' + }, + { + name: 'minus', + text: '减号' + }, + { + name: 'minus-square', + text: '减号-方形' + }, + { + name: 'plus', + text: '加号' + }, + { + name: 'plus-square', + text: '加号-方形' + }, + { + name: 'question', + text: '问号' + }, + { + name: 'question-circle', + text: '问号-圆形' + }, + { + name: 'warning', + text: '警告' + }, + { + name: 'stop', + text: '停止' + } +] + +export const filled = [ + { + name: 'check-circle', + text: '通过-圆形' + }, + { + name: 'check-square', + text: '通过-方形' + }, + { + name: 'close-circle', + text: '关闭-圆形' + }, + { + name: 'exclamation-circle', + text: '感叹-圆形' + }, + { + name: 'info-circle', + text: '信息-圆形' + }, + { + name: 'minus-square', + text: '减号-方形' + }, + { + name: 'plus-square', + text: '加号-方形' + }, + { + name: 'warning', + text: '警告' + }, + { + name: 'stop', + text: '停止' + } +] diff --git a/docs/zh-CN/components/icon-list/tip-icon/index.jsx b/docs/zh-CN/components/icon-list/tip-icon/index.jsx new file mode 100644 index 000000000..f6cc50405 --- /dev/null +++ b/docs/zh-CN/components/icon-list/tip-icon/index.jsx @@ -0,0 +1,37 @@ +import React, { useState } from 'react' +import { outlined, filled } from './config' +import Radio from '../../../../../components/radio' +import CopyIcon from '../copyIcon' + +const Tip = () => { + const [currentType, setCurrentType] = useState(0) + const list = currentType === 0 ? outlined : filled + return ( +
    +

    提示

    +
    + setCurrentType(v)} + /> +
    +
      + {list.map((icon, idx) => ( + + ))} +
    +
    + ) +} +export default Tip diff --git a/docs/zh-CN/components/icon.mdx b/docs/zh-CN/components/icon.mdx index ae834200f..865c04b0b 100755 --- a/docs/zh-CN/components/icon.mdx +++ b/docs/zh-CN/components/icon.mdx @@ -12,729 +12,17 @@ import DemoNest from '../../demo/icon/section-nest.jsx' -## Icon Attributes - -| 参数 | 说明 | 类型 | 可选值 | 默认值 | -| --------- | ------------ | ------ | ------------ | ------ | -| name | 图标名称 | string | 参考图标集合 | - | -| style | 自定义样式 | object | - | - | -| className | 自定义 class | string | - | - | - ## 图标集合 -import './style/icon.scss' - -
    -
      -
    • - - up - -
    • -
    • - - down - -
    • -
    • - - left - -
    • -
    • - - right - -
    • -
    • - - double-left - 双箭头-左 -
    • -
    • - - double-right - 双箭头-右 -
    • -
    • - - arrow-left - 箭头-左 -
    • -
    • - - arrow-right - 箭头-右 -
    • -
    • - - top - 顶部 -
    • -
    • - - bottom - 底部 -
    • -
    • - - plus - 加号 -
    • -
    • - - minus - 减号 -
    • -
    • - - check - 通过/批准 -
    • -
    • - - close - 拒绝/驳回 -
    • -
    • - - check-circle-o - 空心-通过/批准 -
    • -
    • - - close-circle-o - 空心-拒绝/驳回 -
    • -
    • - - check-circle - 实心-通过/批准 -
    • -
    • - - close-circle - 实心-拒绝/驳回 -
    • -
    • - - circle - 空心 -
    • -
    • - - square-selected-not - 方框-未选中 -
    • -
    • - - square-selected - 方框-选中 -
    • -
    • - - alarm - 警告 -
    • -
    • - - alarm-clock - 闹钟 -
    • -
    • - - approve - 批准 -
    • -
    • - - archive - 归档 -
    • -
    • - - application-lock - 权限 -
    • -
    • - - man - 男性 -
    • -
    • - - woman - 女性 -
    • -
    • - - building - 建筑 -
    • -
    • - - chat-group - 聊天/群 -
    • -
    • - - list - 列表 -
    • -
    • - - menu - 菜单 -
    • - -
    • - - collection - 收藏 -
    • -
    • - - comment-circle-o - 空心-信息 -
    • -
    • - - copy - 复制/拷贝 -
    • -
    • - - cut - 剪切 -
    • -
    • - - collection-list - 收藏单 -
    • -
    • - - component - 组件/元件 -
    • -
    • - - data - 数据 -
    • -
    • - - date - 日期 -
    • -
    • - - date-start - 日期-开始 -
    • -
    • - - date-end - 日期-结束 -
    • -
    • - - delete - 删除/垃圾桶 -
    • -
    • - - document - 文档 -
    • - -
    • - - download - 下载 -
    • -
    • - - edit - 编辑 -
    • -
    • - - email - 邮箱/邮件 -
    • -
    • - - email-open - 邮件-打开 -
    • -
    • - - expand-alt - 展开 -
    • -
    • - - shrink - 收缩 -
    • -
    • - - fullscreen - 全屏 -
    • -
    • - - fullscreen-exit - 关闭全屏 -
    • -
    • - - export - 导出 -
    • -
    • - - face - 笑脸 -
    • -
    • - - folder - 文件夹 -
    • -
    • - - eye - 可见 -
    • -
    • - - hide - 隐藏 -
    • -
    • - - home - 主页 -
    • -
    • - - html - XML/代码 -
    • -
    • - - info-circle-o - 警告-空心 -
    • -
    • - - info - 提示 -
    • -
    • - - internet - 网络 -
    • -
    • - - label - 标签 -
    • -
    • - - linechart - 图表 -
    • -
    • - - lock - -
    • - -
    • - - link - 链接 -
    • -
    • - - mail-delivery - 邮件-收到 -
    • -
    • - - mark - 标记 -
    • -
    • - - message - 信息 -
    • - -
    • - - money-circle-o - 人民币-空心 -
    • -
    • - - more-circle-o - 更多-空心 -
    • -
    • - - more - 更多 -
    • -
    • - - move-to - 移动 -
    • -
    • - - paste - 粘贴 -
    • -
    • - - move - 移动 -
    • - -
    • - - play - 播放 -
    • -
    • - - pause - 暂停 -
    • -
    • - - pc - 电脑 -
    • -
    • - - phone - 手机 -
    • -
    • - - pic - 照片/图片 -
    • -
    • - - pie-chart - 饼图 -
    • - -
    • - - polyline - 折线图 -
    • -
    • - - position - 定位 -
    • -
    • - - problem-circle-o - 问题-空心 -
    • -
    • - - process - 流程 -
    • -
    • - - prompt - 提醒 -
    • - -
    • - - power-off - 关闭/电源 -
    • -
    • - - plugin - 复制 -
    • -
    • - - refer - 查找 -
    • -
    • - - qr - 二维码 -
    • -
    • - - repeat - 重复 -
    • - -
    • - - save - 保存 -
    • -
    • - - scan - 扫码 -
    • -
    • - - search - 搜索 -
    • -
    • - - share - 分享 -
    • -
    • - - set - 设置 -
    • -
    • - - sound - 声音 -
    • - -
    • - - stop - 停止 -
    • -
    • - - star - -
    • -
    • - - thumbs-up - -
    • -
    • - - step-on - -
    • - -
    • - - store - 商店 -
    • -
    • - - task - 任务 -
    • -
    • - - synchronize - 同步 -
    • -
    • - - template - 模板 -
    • -
    • - - telephone - 电话 -
    • - -
    • - - time - 时间 -
    • -
    • - - tool - 工具 -
    • - -
    • - - time1 - 时间 -
    • -
    • - - unlock - 解锁 -
    • -
    • - - travel - 行李箱/旅行 -
    • +import IconList from './icon-list' -
    • - - truck - 卡车 -
    • -
    • - - update - 更新 -
    • -
    • - - upload - 上传 -
    • -
    • - - upload-cloud - 云同步 -
    • -
    • - - user - 用户 -
    • + -
    • - - user-add - 增加用户 -
    • -
    • - - usergroup - 用户组 -
    • -
    • - - voice - 语音 -
    • -
    • - - web - 网页 -
    • +## Props -
    • - - reset - 重置 -
    • -
    • - - api - 代码 -
    • -
    • - - noapi - 标签 -
    • -
    • - - columns - -
    • -
    • - - average - 平均 -
    • -
    • - - row-height - 行高 -
    • -
    • - - caveat - 警告 -
    • -
    • - - asc - 升序 -
    • -
    • - - desc - 降序 -
    • -
    • - - import - 导入 -
    • -
    • - - freezing - 冻结 -
    • -
    • - - summation - 合计 -
    • -
    • - - screen - 漏斗 -
    • -
    • - - stattistics - 统计 -
    • -
    • - - zoom-in - 缩小 -
    • -
    • - - zoom-out - 放大 -
    • -
    • - - ratio - 比例 -
    • -
    • - - rotate-left - 左旋转 -
    • -
    • - - rotate-right - 右旋转 -
    • -
    -
    +| 参数 | 说明 | 类型 | 可选值 | 默认值 | +| --------- | ---------------- | ------ | ------------- | ------ | +| name | 图标名称 | string | 参考图标集合 | - | +| style | 自定义样式 | object | - | - | +| className | 自定义 class | string | - | - | +| filled | 是否启用面型图标 | bool | true \| false | false | diff --git a/docs/zh-CN/components/input.mdx b/docs/zh-CN/components/input.mdx index ca0a68599..e5d83590f 100755 --- a/docs/zh-CN/components/input.mdx +++ b/docs/zh-CN/components/input.mdx @@ -26,14 +26,24 @@ import DemoPosition from '../../demo/input/section-position.jsx' +## 结合 Tooltip + +import DemoTooltip from '../../demo/input/section-tooltip.jsx' + + + +## 键盘事件 + +import DemokeyEvent from '../../demo/input/section-keyEvent.jsx' + + + ## 多行文本 import DemoTextarea from '../../demo/input/section-textarea.jsx' -import { Badge } from '@libs' - ## Props | 参数 | 说明 | 类型 | 可选值 | 默认值 | @@ -46,10 +56,15 @@ import { Badge } from '@libs' | disabled | 是否禁用 | boolean | true \| false | false | | clearable | 是否可清空 | boolean | true \| false | false | | placeholder | 输入框占位符 | string \| ReactNode | - | - | -| onFocus | 获得焦点时的回调 | (e: Event) => void | - | - | -| onBlur | 失去焦点时的回调 | (e: Event) => void | - | - | -| onKeyDown | 键盘按下时的回调 | (e: Event) => void | - | - | -| onKeyPress | 字符键按下时的回调 | (e: Event) => void | - | - | -| onInput | 输入字符时的回调 | (e: Event) => void | - | - | -| onChange | 值改变时的回调 | (e: Event, value: string) => void | - | - | -| onKeyUp | 键盘弹起时的回调 | (e: Event) => void | - | - | + +## Events + +| 名称 | 说明 | 类型 | 参数 | 返回值 | +| ---------- | ------------------ | ------------------------------- | --------------------- | ------ | +| onFocus | 获得焦点时的回调 | (event: HTMLInputEvent) => void | event: input 事件对象 | - | +| onBlur | 失去焦点时的回调 | (event: HTMLInputEvent) => void | event: input 事件对象 | - | +| onKeyDown | 键盘按下时的回调 | (event: HTMLInputEvent) => void | event: input 事件对象 | - | +| onKeyPress | 字符键按下时的回调 | (event: HTMLInputEvent) => void | event: input 事件对象 | - | +| onInput | 输入字符时的回调 | (event: HTMLInputEvent) => void | event: input 事件对象 | - | +| onChange | 值改变时的回调 | (event: HTMLInputEvent) => void | event: input 事件对象 | - | +| onKeyUp | 键盘弹起时的回调 | (event: HTMLInputEvent) => void | event: input 事件对象 | - | diff --git a/docs/zh-CN/components/list.mdx b/docs/zh-CN/components/list.mdx new file mode 100755 index 000000000..47abcaf34 --- /dev/null +++ b/docs/zh-CN/components/list.mdx @@ -0,0 +1,64 @@ +# List 列表 + +通用列表 + +## 何时使用 + +最基础的列表展示,可承载文字、列表、图片、段落,常用于后台数据展示页面。 + +## 基础用法 + +import DemoBase from '../../demo/list/section-base.jsx' + + + +## 信息流用法 + +import DemoInfoFlow from '../../demo/list/section-info-flow.jsx' + + + +## 图片用法 + +import DemoImg from '../../demo/list/section-img.jsx' + + + +## Props + +## List + +| 参数 | 说明 | 类型 | 可选值 | 默认值 | +| -------------- | ------------------------------------------------------------- | ------------------ | ---------------------------- | ---------- | +| type | 列表类型 | string | 'default' \| 'card' | 'default' | +| data | 列表展示的数据 | DataItem[] | - | - | +| renderItem | 自定义渲染列表项 | item => ReactNode | - | - | +| action | 列表操作内容 | ReactNode | - | - | +| actionPosition | 指定列表操作显示的位置 | string | 'top' \| 'center' \|'bottom' | 'bottom' | +| split | 是否展示分割线 | boolean \| object | false | true | +| pagination | 对应的 pagination 配置, 设置 false 不显示 | boolean \| object | false | false | +| bordered | 是否展示边框 (仅在 type==='default'时生效) | boolean | - | false | +| hoverable | 鼠标移入时是否显示阴影 (仅在 type==='card'时生效) | boolean | - | false | +| layout | 设置 List.Item 布局, 设置成 vertical 则竖直样式显示, 默认横排 | string | 'vertical' \| 'horizontal' | 'vertical' | +| emptyText | 无数据提示内容 | string \|ReactNode | - | '暂无数据' | + +## DataItem + +List.Item 的配置项 + +| 参数 | 说明 | 类型 | 可选值 | 默认值 | +| ------------ | ---------------------- | -------------------------- | ---------------------------------------------- | --------- | +| title | 列表元素的标题 | string | ReactNode | - | +| titleTag | 列表元素的标题中的标签 | string | - | - | +| titleTagType | 列表展示的数据 | string | 'primary' \| 'success' \|'warning' \| 'danger' | 'primary' | +| description | 列表元素的描述内容 | string \|ReactNode | - | - | +| extra | 额外内容 | string \| Array<string> | - | - | +| avatar | 图片资源地址 | string | - | - | + +## pagination + +分页的配置项 + +| 参数 | 说明 | 类型 | 可选值 | 默认值 | +| -------- | ------------------ | ------ | ---------------------------- | ------- | +| position | 指定分页显示的位置 | string | 'left' \| 'middle' \|'right' | 'right' | diff --git a/docs/zh-CN/components/loading.mdx b/docs/zh-CN/components/loading.mdx index 0bb80fcbc..2924f332f 100755 --- a/docs/zh-CN/components/loading.mdx +++ b/docs/zh-CN/components/loading.mdx @@ -36,7 +36,7 @@ import DemoApi from '../../demo/loading/section-api.jsx' | 参数 | 说明 | 类型 | 可选值 | 默认值 | | ------- | ---------------------- | ------------------- | ------------------------------- | --------- | -| size | loading 大小 | string | 'large' \| 'default' \| 'small' | 'default' | +| size | loading 的尺寸 | string | 'large' \| 'default' \| 'small' | 'default' | | content | 自定义加载中状态的文案 | string \| ReactNode | - | - | | visible | 是否显示 loading | boolean | true \| false | true | | full | 是否全屏 | boolean | true \| false | false | @@ -51,7 +51,7 @@ import DemoApi from '../../demo/loading/section-api.jsx' | target | 需要 `Loading` 遮罩的元素, 当不传时为全屏遮罩 | HTMLElement | - | - | | content | 自定义加载中状态的文案 | string \| ReactNode | - | - | | duration | loading 自动关闭的时间,单位为毫秒 | number | - | - | -| size | loading 大小 | string | 'large' \| 'default' \| 'small' | 'default' | +| size | loading 的尺寸 | string | 'large' \| 'default' \| 'small' | 'default' | `Loading.close(key)` diff --git a/docs/zh-CN/components/menu.mdx b/docs/zh-CN/components/menu.mdx index 9195ddfb5..7e1dd894c 100755 --- a/docs/zh-CN/components/menu.mdx +++ b/docs/zh-CN/components/menu.mdx @@ -26,31 +26,35 @@ import DemoVertical from '../../demo/menu/section-vertical.jsx' -import { Badge } from '@libs' - ## Props -| 参数 | 说明 | 类型 | 可选值 | 默认值 | -| --------------- | ------------------------------------------------------ | -------------------------------- | -------------------------- | ---------- | -| data | 菜单项数据源 | DataItem[] | - | - | -| activeId | 激活的菜单项 id | string | - | - | -| placement | 设置菜单水平或垂直展示 | string | 'horizontal' \| 'vertical' | 'vertical' | -| collapsed | 是否收起子菜单,菜单垂直展示时有效 | boolean | true \| false | false | -| showCollapse | 是否显示收缩开关,菜单垂直展示时有效 | boolean | true \| false | true | -| showAllSubMenus | 是否以胖菜单的形式展开所有子菜单(仅在水平菜单时有效) | boolean | true \| false | false | -| accordion | 手风琴模式,菜单水平展示时有效 | boolean | true \| false | true | -| onClick | 点击菜单选项时的回调 | (activeId, prevActiveId) => void | - | - | -| onClickSubMenu | 点击父菜单项时的回调 | (subMenuIndexs) => void | - | - | -| onCollapse | 点击收缩开关时的回调 | (collapsed: boolean) => void | - | - | +| 参数 | 说明 | 类型 | 可选值 | 默认值 | +| ---------------- | ------------------------------------------------------ | ---------- | -------------------------- | ---------- | +| data | 菜单项数据源 | DataItem[] | - | - | +| activeId | 激活的菜单项 id | string | - | - | +| placement | 设置菜单水平或垂直展示 | string | 'horizontal' \| 'vertical' | 'vertical' | +| collapsed | 是否收起子菜单,菜单垂直展示时有效 | boolean | true \| false | false | +| showCollapse | 是否显示收缩开关,菜单垂直展示时有效 | boolean | true \| false | true | +| showAllSubMenus | 是否以胖菜单的形式展开所有子菜单(仅在水平菜单时有效) | boolean | true \| false | false | +| accordion | 手风琴模式,菜单水平展示时有效 | boolean | true \| false | true | +| overlayClassName | 下拉根元素的类名称 | string | - | - | + +## Events + +| 名称 | 说明 | 类型 | 参数 | 返回值 | +| -------------- | -------------------- | -------------------------------------------------------------------- | ------------------------------------------------------- | ------ | +| onClick | 点击菜单选项时的回调 | (activeId: string \| number, prevActiveId: string \| number) => void | activeId: 激活的 ID
    prevActiveId: 上一次激活的 ID | - | +| onClickSubMenu | 点击父菜单项时的回调 | (subMenuIndexs) => void | subMenuIndexs: 当前点击菜单的索引数组 | - | +| onCollapse | 点击收缩开关时的回调 | (collapsed: boolean) => void | collapsed: 打开状态 | - | ## Type ### DataItem -| 参数 | 说明 | 类型 | 可选值 | 默认值 | -| -------- | ------------------------------------------------- | ------------------- | ------------- | ------ | -| content | 菜单项标题 | string \| ReactNode | - | - | -| icon | 菜单项 icon, 为 string 时为 HIUI Icon 组件的 name | string \| ReactNode | - | - | -| id | 菜单项唯一标识 | string \| number | - | - | -| disabled | 菜单项是否禁止点击 | boolean | true \| false | false | -| children | 子菜单项配置 | DataItem[] | - | - | +| 参数 | 说明 | 类型 | 可选值 | 默认值 | +| -------- | ------------------------------------------------ | ------------------- | ------------- | ------ | +| content | 菜单项标题 | string \| ReactNode | - | - | +| icon | 菜单项 icon,为 string 时会座位 Icon 组件的 name | string \| ReactNode | - | - | +| id | 菜单项唯一标识 | string \| number | - | - | +| disabled | 菜单项是否禁止点击 | boolean | true \| false | false | +| children | 子菜单项配置 | DataItem[] | - | - | diff --git a/docs/zh-CN/components/modal.mdx b/docs/zh-CN/components/modal.mdx index b681f1a07..76f5c4646 100755 --- a/docs/zh-CN/components/modal.mdx +++ b/docs/zh-CN/components/modal.mdx @@ -46,16 +46,29 @@ import DemoTip from '../../demo/modal/section-tip.jsx' ## Props -| 参数 | 说明 | 类型 | 可选值 | 默认值 | -| ------------- | -------------------------- | ----------------------- | -------------------- | --------- | -| title | 模态框标题 | string \| ReactNode | - | - | -| visible | 是否显示模态框 | boolean | true \| false | false | -| closeable | 是否展示右上角关闭按钮 | boolean | true \| false | true | -| maskCloseable | 是否允许点击蒙层关闭模态框 | boolean | true \| false | true | -| cancelText | 取消按钮文案 | string | - | '取消' | -| onCancel | 取消事件触发时的回调 | (e: MouseEvent) => void | - | - | -| confirmText | 确认按钮文案 | string | - | '确定' | -| onConfirm | 确认事件触发时的回调 | (e: MouseEvent) => void | - | - | -| size | 模态框尺寸 | string | 'default' \| 'large' | 'default' | -| style | 自定义模态框样式 | object | - | - | -| footer | 自定义模态框底部 | ReactNode \| null | - | - | +| 参数 | 说明 | 类型 | 可选值 | 默认值 | +| ------------- | -------------------------- | ------------------- | -------------------- | --------- | +| title | 模态框标题 | string \| ReactNode | - | - | +| visible | 是否显示模态框 | boolean | true \| false | false | +| closeable | 是否展示右上角关闭按钮 | boolean | true \| false | true | +| maskCloseable | 是否允许点击蒙层关闭模态框 | boolean | true \| false | true | +| cancelText | 取消按钮文案 | string | - | '取消' | +| confirmText | 确认按钮文案 | string | - | '确定' | +| size | 模态框尺寸 | string | 'default' \| 'large' | 'default' | +| style | 自定义模态框样式 | object | - | - | +| footer | 自定义模态框底部 | ReactNode \| null | - | - | + +## Events + +| 名称 | 说明 | 类型 | 参数 | 返回值 | +| --------- | -------------------- | ---------- | ---- | ------ | +| onConfirm | 确认事件触发时的回调 | () => void | - | - | +| onCancel | 取消事件触发时的回调 | () => void | - | - | + +## FAQ + +> 在由 2.14.x 升级到 HiUI 3.x 之后,对于升级问题我们做了一些问题和答复,在提问之前建议找找有没有类似的问题。 + +#### 输入框中出现日期显示异常 + +如出现选择日期后,在输入框中出现日期显示异常,或者日期格式和原来不同的话,请确认 format 属性的格式是否正确 diff --git a/docs/zh-CN/components/pagination.mdx b/docs/zh-CN/components/pagination.mdx index 3d448564a..768cc3284 100755 --- a/docs/zh-CN/components/pagination.mdx +++ b/docs/zh-CN/components/pagination.mdx @@ -36,17 +36,22 @@ import DemoIntack from '../../demo/pagination/section-intact.jsx' ## Props -| 参数 | 说明 | 类型 | 可选值 | 默认值 | -| ---------------- | ---------------------------------------------------------- | --------------------------------------------------------- | --------------------------------- | --------- | -| type | 分页的类型 | string | 'default' \| 'simple' \| 'shrink' | 'default' | -| defaultCurrent | 默认的当前页数 | number | - | 1 | -| current | 当前页数 | number | - | - | -| max | 最大显示的页数 | number | - | 2 | -| pageSize | 每页条数 | number | - | 10 | -| pageSizeOptions | 指定每页可以显示多少条 | number[] | - | [] | -| total | 数据总数 | number | - | - | -| autoHide | 只有一页时是否隐藏分页器 | boolean | true \| false | false | -| showJumper | 是否显示跳转 | boolean | true \| false | false | -| onJump | 快速跳转时触发,回调值为当前页数 | (current: number) => void | - | - | -| onChange | 页码改变时的回调,回调值为当前页数、之前的页数和每页条数 | (current: number, prev: number, pageSize: number) => void | - | - | - | -| onPageSizeChange | 每页显示条数改变的回调函数,返回改变后的每页条数及当前页数 | (current: number, pageSize: number) => void | - | - | - | +| 参数 | 说明 | 类型 | 可选值 | 默认值 | +| --------------- | ------------------------ | -------- | --------------------------------- | --------- | +| type | 分页的类型 | string | 'default' \| 'simple' \| 'shrink' | 'default' | +| defaultCurrent | 默认的当前页数 | number | - | 1 | +| current | 当前页数 | number | - | - | +| max | 最大显示的页数 | number | - | 2 | +| pageSize | 每页条数 | number | - | 10 | +| pageSizeOptions | 指定每页可以显示多少条 | number[] | - | [] | +| total | 数据总数 | number | - | - | +| autoHide | 只有一页时是否隐藏分页器 | boolean | true \| false | false | +| showJumper | 是否显示跳转 | boolean | true \| false | false | + +## Events + +| 名称 | 说明 | 类型 | 参数 | 返回值 | +| ---------------- | -------------------------- | --------------------------------------------------------- | --------------------------------------------------------------------------- | ------ | +| onJump | 快速跳转时触发 | (current: number) => void | current: 快速跳转页数 | - | +| onChange | 页码改变时的回调 | (current: number, prev: number, pageSize: number) => void | current: 改变后的新页数
    prev: 改变前的页数
    pageSize: 每页记录数 | - | +| onPageSizeChange | 每页显示条数改变的回调函数 | (current: number, pageSize: number) => void | current: 当前页数
    每页记录数 | - | diff --git a/docs/zh-CN/components/popover.mdx b/docs/zh-CN/components/popover.mdx index 08124b726..f70576de9 100755 --- a/docs/zh-CN/components/popover.mdx +++ b/docs/zh-CN/components/popover.mdx @@ -10,9 +10,15 @@ ## 基础 -import DemoBase from '../../demo/popover/section-base.jsx' +import DemoBase from "../../demo/popover/section-base.jsx"; - + + +## 控制popover的显示 + +import DemoMix from "../../demo/popover/section-mix.jsx"; + + ## Props diff --git a/docs/zh-CN/components/radio.mdx b/docs/zh-CN/components/radio.mdx index 17f4a8fe9..92e613dc6 100755 --- a/docs/zh-CN/components/radio.mdx +++ b/docs/zh-CN/components/radio.mdx @@ -30,25 +30,29 @@ import DemoType from '../../demo/radio/section-type' ### Radio.Group -| 参数 | 说明 | 类型 | 可选值 | 默认值 | -| ------------ | ---------------------------------------- | ----------------------- | -------------------------- | ------------ | -| data | 选择项数据源 | DataItem[] | - | - | -| placement | 设置水平或垂直展示 | string | 'vertical' \| 'horizontal' | 'horizontal' | -| value | 选中项的值(受控) | string \| number | - | - | -| defaultValue | 默认选中项的值 | string \| number | - | - | -| onChange | 选中项改变时的回调,回调值为新选中项的值 | (value: string) => void | - | - | -| disabled | 是否禁用 | boolean | - | - | -| type | 单选按展示形状 | string | 'default' \| 'button' | 'default' | +| 参数 | 说明 | 类型 | 可选值 | 默认值 | +| ------------ | ------------------ | ---------------- | -------------------------- | ------------ | +| data | 选择项数据源 | DataItem[] | - | - | +| placement | 设置水平或垂直展示 | string | 'vertical' \| 'horizontal' | 'horizontal' | +| value | 选中项的值(受控) | string \| number | - | - | +| defaultValue | 默认选中项的值 | string \| number | - | - | +| disabled | 是否禁用 | boolean | - | - | +| type | 单选按展示形状 | string | 'default' \| 'button' | 'default' | ### Radio -| 参数 | 说明 | 类型 | 可选值 | 默认值 | -| --------- | ------------------------------------------ | ----------------------- | ------------- | ------ | -| value | 单选对应的值 | string | - | - | -| autoFocus | 页面载入时,是否自动获取焦点 | boolean | true \| false | false | -| checked | 是否选中 | boolean | true \| false | false | -| onChange | 选中项选中时的回调,回调值为选中项对应的值 | (value: string) => void | - | - | -| disabled | 是否禁用 | boolean | - | - | +| 参数 | 说明 | 类型 | 可选值 | 默认值 | +| --------- | ---------------------------- | ------- | ------------- | ------ | +| value | 单选对应的值 | string | - | - | +| autoFocus | 页面载入时,是否自动获取焦点 | boolean | true \| false | false | +| checked | 是否选中 | boolean | true \| false | false | +| disabled | 是否禁用 | boolean | - | - | + +## Events + +| 名称 | 说明 | 类型 | 参数 | 返回值 | +| -------- | ------------------ | ----------------------- | ---------------- | ------ | +| onChange | 选中项改变时的回调 | (value: string) => void | value: 选中项 ID | - | ## Type diff --git a/docs/zh-CN/components/rate.mdx b/docs/zh-CN/components/rate.mdx index c96665047..e191b9eae 100755 --- a/docs/zh-CN/components/rate.mdx +++ b/docs/zh-CN/components/rate.mdx @@ -24,18 +24,38 @@ import DemoFace from '../../demo/rate/section-face.jsx' -import { Badge } from '@libs' +## 其他字符 + +import DemoCharacter from '../../demo/rate/section-character.jsx' + + + +## 自定义渲染 + +import DemoRenderCharacter from '../../demo/rate/section-renderCharacter.jsx' + + ## Props -| 参数 | 说明 | 类型 | 可选值 | 默认值 | -| ------------ | ------------------------- | ----------------------- | ------------- | ------ | -| clearable | 是否允许再次点击后清除 | boolean | true \| false | true | -| allowHalf | 是否允许半选 | boolean | true \| false | true | -| useEmoji | 是否使用表情 | boolean | true \| false | false | -| count | star 数量,Emoji 时不可用 | number | - | 5 | -| defaultValue | 默认值 | number | - | 0 | -| disabled | 只读,无法进行交互 | boolean | true \| false | false | -| tooltips | 自定义每项的提示信息 | string[] | - | - | -| value | 当前数,受控值 | number | - | - | -| onChange | 选择时的回调 | (value: number) => void | - | - | +| 参数 | 说明 | 类型 | 可选值 | 默认值 | +| --------------- | ----------------------------------- | ------------------------------------------ | ------------- | ------ | +| clearable | 是否允许再次点击后清除 | boolean | true \| false | true | +| allowHalf | 是否允许半选 | boolean | true \| false | true | +| useEmoji | 是否使用表情 | boolean | true \| false | false | +| count | star 数量,Emoji 时不可用 | number | - | 5 | +| defaultValue | 默认值 | number | - | 0 | +| disabled | 禁用,无法进行交互,鼠标禁用交互效果 | boolean | true \| false | false | +| readOnly | 只读,无法进行交互 | boolean | true \| false | false | +| tooltips | 自定义每项的提示信息 | string[] | - | - | +| descRender | 自定义辅助文字函数 | (value: number,index: number) => ReactNode | - | - | +| value | 当前数,受控值 | number | - | - | +| character | 自定义字符 | ReactNode \|string | - | - | +| color | 自定义颜色(只对 icon、字体有效) | string | - | - | +| characterRender | 自定义渲染 character 函数 | (value: number,index: number) => ReactNode | - | - | + +## Events + +| 名称 | 说明 | 类型 | 参数 | 返回值 | +| -------- | ------------ | ----------------------- | --------------- | ------ | +| onChange | 选择时的回调 | (value: number) => void | value: 当前分值 | - | diff --git a/docs/zh-CN/components/rich-text-editor.mdx b/docs/zh-CN/components/rich-text-editor.mdx new file mode 100644 index 000000000..99d8f5618 --- /dev/null +++ b/docs/zh-CN/components/rich-text-editor.mdx @@ -0,0 +1,66 @@ +# RichTextEditor 富文本编辑器 + +一种可内嵌于浏览器,所见即所得的文本编辑器 + +- 基于开源库[quill](http://doc.quilljs.cn/)做的二次封装 +- 完全具备开源库 quill 的全功能,请放心大胆的使用 + +## 使用方法 + +1. 安装 react-quill + +```shell +npm install react-quill --save +``` + +2. 引入 RichTextEditor 组件 + +```js +import RichTextEditor from '@hi-ui/hiui/es/rich-text-editor' // 注意引用路径 +``` + +## 基础用法 + +import DemoBase from '../../demo/rich-text-editor/section-base.jsx' + + + +## 工具栏提醒功能 + +import DemoTooltip from '../../demo/rich-text-editor/section-tooltip.jsx' + + + +## 上传图片 + +import DemoUpload from '../../demo/rich-text-editor/section-upload.jsx' + + + +## 自定义功能按钮 + +import DemoCustomToolbar from '../../demo/rich-text-editor/section-customToolbar.jsx' + + + +## RichTextEditor + +### Props + +> 详细信息请参考 [react-quill](https://github.com/zenoamaro/react-quill) + +## QuillBarTooltip + +### props + +| 参数 | 说明 | 类型 | 可选值 | 默认值 | +| ------------ | ---------------------------------------------------- | ------- | ------------- | ------ | +| showTooltip | 是否展示**文字提醒** | boolean | true \| false | true | +| tooltipTitle | 文字提醒内容 | string | - | - | +| toolbarsName | 对应[Quill](http://doc.quilljs.cn/1409378)工具栏名称 | string | - | - | + +### 推荐文档 + +- [quill](https://github.com/quilljs/quill) +- [react-quill](https://github.com/zenoamaro/react-quill) +- [看云-quill 中文文档](http://doc.quilljs.cn/) diff --git a/docs/zh-CN/components/search.mdx b/docs/zh-CN/components/search.mdx new file mode 100755 index 000000000..9f167d7a4 --- /dev/null +++ b/docs/zh-CN/components/search.mdx @@ -0,0 +1,60 @@ +# Search 搜索 + +可以通过关键字从海量数据条目中检索到匹配数据,较大提升数据检索能力 + +## 何时使用 + +- 全栈信息检索 +- 表格数据、信息列表 + +## 基础用法 + +import DemoState from '../../demo/search/section-base.jsx' + + + +## 关键词联想法 + +import DemoRelation from '../../demo/search/section-relation.jsx' + + + +## 类别用法 + +import DemoClassic from '../../demo/search/section-classic.jsx' + + + +## Props + +| 参数 | 说明 | 类型 | 可选值 | 默认值 | +| ---------------- | ------------------ | ------------------- | ------------- | ------ | +| prepend | 输入框前置内容 | string \| ReactNode | - | - | +| disabled | 是否禁用 | boolean | true \| false | false | +| loading | 加载中 | boolean | true \| false | false | +| placeholder | 输入框占位符 | string \| ReactNode | - | - | +| data | 搜索结果的数据 | `Array` | - | - | +| append | 搜索按钮 | ReactNode | - | - | +| overlayClassName | 下拉根元素的类名称 | string | - | - | + +## Events + +| 名称 | 说明 | 类型 | 参数 | 返回值 | +| -------- | ------------------------------------------------------ | ------------------------------------------- | ------------------------------------------------------- | ------ | +| onChange | 值改变时的回调 | (event: HTMLInputEvent) => void | event: input 事件对象 | - | +| onSearch | 当点击搜索按钮时候、输入框内点击回车或者点击下拉选项时 | (inputVal: string, item ?:DataItem) => void | inputVal: 输入的搜索关键字
    item: 选中的搜索关键项 | - | + +## DataItem + +| 参数 | 说明 | 类型 | 可选值 | 默认值 | +| -------- | -------------------------------------------------- | ------------------- | ------ | ------ | +| id | 主键 | string \| number | - | - | +| title | 显示的内容;如果存在 children;就是这个类别的 title | string \| ReactNode | - | - | +| children | 分组内容 | `Array` | - | - | + +## Item + +| 参数 | 说明 | 类型 | 可选值 | 默认值 | +| ----- | ----------------- | ------------------- | ------ | ------ | +| id | 主键 | string \| number | - | - | +| title | 类别的 title 内容 | string \| ReactNode | - | - | diff --git a/docs/zh-CN/components/select-tree.mdx b/docs/zh-CN/components/select-tree.mdx new file mode 100644 index 000000000..d452e5541 --- /dev/null +++ b/docs/zh-CN/components/select-tree.mdx @@ -0,0 +1,84 @@ +# SelectTree 树形选择 + +一种接收树形数据结构的选择器,为用户提供复杂数据展示的能力 + +## 何时使用 + +- 选择部门的组织结构、部门等 +- 选择商品目录等 + +## 类型 + +## 基础单选 + +import DemoSingle from '../../demo/select-tree/section-single' + + + +## 基础多选 + +import DemoMultiple from '../../demo/select-tree/section-multiple' + + + +## 数据过滤 + +import DemoFilter from '../../demo/select-tree/section-filter' + + + +## 异步节点 + +import DemoAsync from '../../demo/select-tree/section-async' + + + +## 面包屑节点 + +import DemoBread from '../../demo/select-tree/section-bread' + + + +## Props + +| 参数 | 说明 | 类型 | 可选值 | 默认值 | +| ---------------- | ----------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ------ | +| data | 展示数据 | DataItem [] | - | - | +| showCheckedMode | 数据回显模式 | string | ALL: 所有被选中节点,不区分父子节点
    PARENT: 当所有子节点被选中时将只保留父节点
    CHILD:仅显示子节点 | CHILD | +| mode | 数据展示形式 | string | normal \| breadcrumb | false | +| type | 数据选择类型 | string | single \| multiple | false | +| defaultExpandAll | 是否默认展开所有树节点 | boolean | true \| false | false | +| defaultExpandIds | 默认高亮的节点(非受控) | string[] | - | - | +| defaultValue | 默认选中项 (非受控) | DataItem[] \| string[] | - | - | +| value | 默认选中项 (受控) | DataItem[] \| string[] | - | - | +| searchMode | 节点搜索模式,仅在*mode=normal*模式下生效 | string | highlight \| filter | - | +| dataSource | 异步加载数据 | (key: string) => DataSource \| DataSource \| Promise | - | - | +| overlayClassName | 下拉根元素的类名称 (3.0 新增) | string | - | - | + + + +## Events + +| 名称 | 说明 | 类型 | 参数 | 返回值 | +| -------- | ---------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | ------ | +| onChange | 选中时触发 | (checkedIds \| checkedId, checkedNodes \| checkedNode, currentNode) => void | checkedIds \| checkedId: 选中项 ID 集合\|ID
    checkedNodes \| checkedNode: 选中项数据项集合\|数据项
    currentNode: 当前操作节点 | - | + +### DataItem + +| 参数 | 说明 | 类型 | 可选值 | 默认值 | +| -------- | --------------- | ---------------- | ------ | ------ | +| title | 下拉选项标题 | string | - | - | +| id | 下拉选项唯一 id | string \| number | - | - | +| children | 子级数据 | DataItem[] | - | - | + +### DataSource + +| 参数 | 说明 | 类型 | 可选值 | 默认值 | +| ----------------- | ---------------------------------- | -------------------------------- | -------------------------------------------------- | ------------- | +| url | 请求的 url | string | - | - | +| type | 请求方法 | string | get \| post | get | +| data | post 请求时请求体参数 | object | - | - | +| params | url 查询参数 | object | - | - | +| headers | 请求头 | object | - | - | +| mode | 请求模式 | string | 'same-origin' \| 'cors' \| 'no-cors' \| 'navigate' | 'same-origin' | +| transformResponse | 成功时的回调,用于对数据进行预处理 | (response: object) => DataItem[] | - | - | diff --git a/docs/zh-CN/components/select.mdx b/docs/zh-CN/components/select.mdx index 9a9241458..8b259ad33 100755 --- a/docs/zh-CN/components/select.mdx +++ b/docs/zh-CN/components/select.mdx @@ -36,48 +36,85 @@ import DemoAsync from '../../demo/select/section-async' +## 自定义异步搜索 + +import DemodataSourcecustom from '../../demo/select/section-dataSource-custom' + + + +## 分组 + +import DemoSelectGroup from '../../demo/select/select-group' + + + +## 数据转换 + +import DemoSelectfieldNames from '../../demo/select/select-fieldNames' + + + +## 拼音搜索 + +import DemoSelectsearchbypinyin from '../../demo/select/section-searchbypinyin' + + + ## Props -| 参数 | 说明 | 类型 | 可选值 | 默认值 | -| ------------ | -------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- | -------------------------------------------- | -------- | -| type | 下拉框类型 | string | 'single' \| 'multiple' | 'single' | -| data | 下拉框选项数据源 | DataItem[] | - | - | -| dataSource | 异步下拉框选项数据源 | DataSource \| (keyword: string) => DataSource | - | - | -| value | 被选中项的值 | string \| string[] | - | - | -| defaultValue | 默认被选中项的值 | string \| string[] | - | - | -| showCheckAll | 是否显示全选,只对多选生效 | boolean | true \| false | false | -| multipleWrap | 多选模式下是否允许选中结果折行,不建议折行因为会变成动态高度 | string | 'wrap' \| 'nowrap' | 'nowrap' | -| searchable | 是否可以筛选 | boolean | true \| false | false | -| filterOption | 第一个参数为输入的关键字,第二个为数据项,返回值为 true 时将出现在结果项。仅在 searchable 为 true 时有效 | (keyword: string, item: DataItem) => boolean | (keyword: string, item: DataItem) => boolean | - | -| clearable | 是否可以清空 | boolean | true \| false | true | -| autoload | origin 从远端获取数据,初始时是否自动加载 | boolean | true \| false | false | -| disabled | 是否禁用 | boolean | true \| false | false | -| placeholder | 输入框占位 | string | - | 请选择 | -| emptyContent | 没有选项时的提示 | string \| ReactNode | - | 无内容 | -| style | 自定义样式 | object | - | | -| optionWidth | 自定义下拉选项宽度 | number | - | | -| onChange | 改变选项时触发函数,回调值为当前所有选中项的 id 和变更项 | (selectedIds:stirng[], changedItem: DataItem) => void | - | 无内容 | -| render | 自定义下拉菜单渲染函数,回调值为选项数据和是否被选中 | (item: DataItem, selected: boolean) => ReactNode | - | 无内容 | +| 参数 | 说明 | 类型 | 可选值 | 默认值 | +| ------------------- | -------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | -------------------------------------------- | --------------------------------------------------------------------- | +| type | 下拉框类型 | string | 'single' \| 'multiple' | 'single' | +| data | 下拉框选项数据源 | DataItem[] | - | - | +| fieldNames | 设置 data 中 id, title, disabled, children 对应的 key (3.0 新增) | object | - | { title: 'title', id: 'id',disabled:'disabled', children: 'children'} | +| dataSource | 异步下拉框选项数据源 | DataSource (keyword: string) => (DataSource \| DataItem \| Promise) | - | - | +| value | 被选中项的值 | string \| string[] | - | - | +| defaultValue | 默认被选中项的值 | string \| string[] | - | - | +| showCheckAll | 是否显示**全选**,只对多选生效 | boolean | true \| false | false | +| showJustSelected | 是否显示**仅看已选**,只对多选生效 (3.0 新增) | boolean | true \| false | false | +| multipleWrap | 多选模式下是否允许选中结果折行,不建议折行因为会变成动态高度 | string | 'wrap' \| 'nowrap' | 'nowrap' | +| searchable | 是否可以筛选 | boolean | true \| false | false | +| filterOption | 第一个参数为输入的关键字,第二个为数据项,返回值为 true 时将出现在结果项。仅在 searchable 为 true 时有效 | (keyword: string, item: DataItem) => boolean | (keyword: string, item: DataItem) => boolean | - | +| clearable | 是否可以清空 | boolean | true \| false | true | +| autoload | origin 从远端获取数据,初始时是否自动加载 | boolean | true \| false | false | +| disabled | 是否禁用 | boolean | true \| false | false | +| placeholder | 输入框占位 | string | - | 请选择 | +| emptyContent | 没有选项时的提示 | string \| ReactNode | - | 无内容 | +| style | 自定义样式 | object | - | | +| optionWidth | 自定义下拉选项宽度 | number | - | | +| render | 自定义下拉菜单渲染函数,回调值为选项数据和是否被选中 | (item: DataItem, selected: boolean) => ReactNode | - | 无内容 | +| overlayClassName | 下拉根元素的类名称 (3.0 新增) | string | - | - | +| setOverlayContainer | 如遇到菜单滚动定位问题,试试修改为滚动的区域,并相对其定位 (3.0 新增) | function(triggerNode) | - | () => document.body | + +> 注意,如果发现下拉菜单跟随页面滚动,或者需要在其他弹层中触发 Select,请尝试使用 setOverlayContainer={triggerNode => triggerNode.parentElement} 将下拉弹层渲染节点固定在触发器的父元素中。 + +## Events + +| 名称 | 说明 | 类型 | 参数 | 返回值 | +| -------- | ------------------ | ----------------------------------------------------- | ---------------------------------------------------------------- | ------ | +| onChange | 改变选项时触发函数 | (selectedIds:stirng[], changedItem: DataItem) => void | selectedIds: 所有选中项的 id 集合
    changedItem: 变更的选项 | - | ## Type ### DataItem -| 参数 | 说明 | 类型 | 可选值 | 默认值 | -| -------- | --------------- | ---------------- | ------ | ------ | -| title | 下拉选项标题 | string | - | - | -| id | 下拉选项唯一 id | string \| number | - | - | -| disabled | 是否禁用 | object | - | - | +| 参数 | 说明 | 类型 | 可选值 | 默认值 | +| -------- | -------------------------- | ---------------- | ------ | ------ | +| title | 下拉选项标题 | string | - | - | +| id | 下拉选项唯一 id | string \| number | - | - | +| children | 分组的时候使用,只支持一级 | DataItem[] | - | - | ### DataSource -| 参数 | 说明 | 类型 | 可选值 | 默认值 | -| ----------------- | ---------------------------------- | -------------------------------- | -------------------------------------------------- | ------------- | -| url | 请求的 url | string | - | - | -| type | 请求方法 | string | get \| post | get | -| data | post 请求时请求体参数 | object | - | - | -| params | url 查询参数 | object | - | - | -| headers | 请求头 | object | - | - | -| mode | 请求模式 | string | 'same-origin' \| 'cors' \| 'no-cors' \| 'navigate' | 'same-origin' | -| withCredentials | 上传请求时是否携带 cookie | boolean | true \| false | false | -| transformResponse | 成功时的回调,用于对数据进行预处理 | (response: object) => DataItem[] | - | - | +> 继承 [Axios](https://www.kancloud.cn/yunye/axios/234845) 的 api + +| 参数 | 说明 | 类型 | 可选值 | 默认值 | +| ----------------- | ---------------------------------- | -------------------------------- | ------------- | ------ | +| url | 请求的 url | string | - | - | +| method | 请求方法 | string | get \| post | get | +| data | post 请求时请求体参数 | object | - | - | +| params | url 查询参数 | object | - | - | +| headers | 请求头 | object | - | - | +| withCredentials | 上传请求时是否携带 cookie | boolean | true \| false | false | +| transformResponse | 成功时的回调,用于对数据进行预处理 | (response: object) => DataItem[] | - | - | +| error | 请求发生异常的回调方法 | (error: object) => void | - | - | diff --git a/docs/zh-CN/components/slider.mdx b/docs/zh-CN/components/slider.mdx new file mode 100644 index 000000000..73d01c8bc --- /dev/null +++ b/docs/zh-CN/components/slider.mdx @@ -0,0 +1,58 @@ +# Slider 滑块 + +通过简单拖拽的交互形式实现数值的设置 + +## 何时使用 + +设置多个参数且要求操作所即见即所得时 + +## 基础用法 + +import DemoBase from '../../demo/slider/slider-base.jsx' + + + +## 输入框用法 + +import DemoInput from '../../demo/slider/slider-input.jsx' + + + +## 自定义提示 + +import DemoTipFormatter from '../../demo/slider/slider-tipFormatter.jsx' + + + +## 可选颜色 + +import DemoColor from '../../demo/slider/slider-color.jsx' + + + +## 自定义步长 + +import DemoStep from '../../demo/slider/slider-step.jsx' + + + +## Props + +| 参数 | 说明 | 类型 | 可选值 | 默认值 | +| ------------ | ------------------------------------------------------------- | ------------------ | ----------------------------------------------- | --------- | +| type | 类型 | string | 'primary' \| 'danger' \| 'success' \| 'warning' | 'primary' | +| defaultValue | 设置初始取值 | number | - | 0 | +| value | 设置当前取值 | number | - | 0 | +| min | 最小值 | number | - | 0 | +| max | 最大值 | number | - | 100 | +| disabled | 值为 true 时,滑块为禁用状态 | boolean | true \| false | false | +| tipFormatter | 自定义 Tooltip 中显示文案 | value => ReactNode | - | - | +| marks | 刻度标记,key 的类型必须为 number 且取值在闭区间 [min, max] 内 | object | - | {} | +| step | 步长 | number | - | 1 | +| vertical | 值为 true 时,Slider 为垂直方向 | boolean | true \| false | false | + +## Events + +| 名称 | 说明 | 类型 | 参数 | 返回值 | +| -------- | ---------------------------- | --------------- | ----------------- | ------ | +| onChange | 当 Slider 的值发生改变时触发 | (value) => void | value: 变化后的值 | - | diff --git a/docs/zh-CN/components/switch.mdx b/docs/zh-CN/components/switch.mdx index 6dfffd5d1..4925a30af 100755 --- a/docs/zh-CN/components/switch.mdx +++ b/docs/zh-CN/components/switch.mdx @@ -25,6 +25,12 @@ import DemoBan from '../../demo/switch/section-ban.jsx' | 参数 | 说明 | 类型 | 可选值 | 默认值 | | -------- | ---------------------------------------------------------------- | ----------------------- | ------------- | ------ | | content | 开关状态内容,数组第一项为关闭时显示的内容,第二项为开启时显示的 | string[] \| ReactNode[] | - | - | -| checked | 设置是否开启开关 | boolean | true \| false | - | +| checked | 设置开关状态(受控) | boolean | true \| false | - | +| defaultChecked | 设置开关状态初始值 | boolean | true \| false | - | | disabled | 是否禁用 | boolean | true \| false | false | -| onChange | 开关选中状态改变时的回调 | ( checked )=> void | - | - | + +## Events + +| 名称 | 说明 | 类型 | 参数 | 返回值 | +| -------- | ------------------------ | ----------------------------- | ----------------- | ------ | +| onChange | 开关选中状态改变时的回调 | ( checked: boolean )=> void | checked: 开关状态 | - | diff --git a/docs/zh-CN/components/table.md b/docs/zh-CN/components/table.md deleted file mode 100644 index b6a3912bc..000000000 --- a/docs/zh-CN/components/table.md +++ /dev/null @@ -1,1233 +0,0 @@ -## Table 表格 - - -### 基础用法 - -:::demo -Table 表格代码说明 -1. 右键菜单 - 1. 高亮 - 2. 列冻结 (需要配置scrollX) - 3. 隐藏列 -2. 表格menu菜单(控制列的显示与隐藏) -3. 操作记忆 需要给每个表格添加name属性来为索引。非常重要 - -data属性的所有字段要加key,columns的每条数据需要添加加key属性 -```js -constructor(props){ - super(props) - - this.columns = [ - - { title: 'Column 1', dataIndex: 'name', key: 'a'}, - { title: 'Column 1', dataIndex: 'age', key: 'b'}, - { title: 'Column 1', dataIndex: 'address', key: 'c'}, - { - title: ()=>
    自定义标题
    , - dataIndex: 'address', key: '4', - width: '500px', - render(text,record,index){ - return ( -
    - {text} --- {index} --- 自定义渲染 -
    - ) - }}, - { - title: 'Action', - key: 'operation', - width: 100, - render: () => action, - }, - ] - - this.data = [] - for (let i = 0; i < 10; i++) { - this.data.push({ - // key: i, - name: `Don Diablo ${i}`, - age: `${i}${i}`, - address: `EDC Las Vegas no. ${i}`, - }); - } -} -render() { - return
    item.id === 1 || item.id === 3} /> -} -``` -::: - - -### 紧凑表格 - -:::demo - -```js -constructor(props){ - super(props) - - this.columns = [ - - { title: 'Column 1', dataIndex: 'name', key: '1'}, - { title: 'Column 1', dataIndex: 'age', key: '2'}, - { title: 'Column 1', dataIndex: 'address', key: '3'}, - { - title: ()=>
    自定义标题
    , - dataIndex: 'address', key: '4', - render(text,record,index){ - return ( -
    - {text} --- {index} --- 自定义渲染 -
    - ) - }}, - { - title: 'Action', - key: 'operation', - width: 100, - render: () => action, - }, - ] - - this.data = [] - for (let i = 0; i < 10; i++) { - this.data.push({ - // key: i, - name: `Don Diablo ${i}`, - age: `${i}${i}`, - address: `EDC Las Vegas no. ${i}`, - }); - } -} -render() { - return
    item.id === 1 || item.id === 3} /> -} -``` -::: - -### 宽松表格 - -:::demo - -```js -constructor(props){ - super(props) - - this.columns = [ - - { title: 'Column 1', dataIndex: 'name', key: '1'}, - { title: 'Column 1', dataIndex: 'age', key: '2'}, - { title: 'Column 1', dataIndex: 'address', key: '3'}, - { - title: ()=>
    自定义标题
    , - dataIndex: 'address', key: '4', - render(text,record,index){ - return ( -
    - {text} --- {index} --- 自定义渲染 -
    - ) - }}, - { - title: 'Action', - key: 'operation', - width: 100, - render: () => action, - }, - ] - - this.data = [] - for (let i = 0; i < 10; i++) { - this.data.push({ - // key: i, - name: `Don Diablo ${i}`, - age: `${i}${i}`, - address: `EDC Las Vegas no. ${i}`, - }); - } -} -render() { - return
    item.id === 1 || item.id === 3} /> -} -``` -::: - -### 带边框的表格 - -:::demo - -```js -constructor(props){ - super(props) - - this.columns = [ - - { title: 'Column 1', dataIndex: 'name', key: '1'}, - { title: 'Column 1', dataIndex: 'age', key: '2'}, - { title: 'Column 1', dataIndex: 'address', key: '3'}, - { - title: ()=>
    自定义标题
    , - dataIndex: 'address', key: '4', - render(text,record,index){ - return ( -
    - {text} --- {index} --- 自定义渲染 -
    - ) - }}, - { - title: 'Action', - key: 'operation', - width: 100, - render: () => action, - }, - ] - - this.data = [] - for (let i = 0; i < 10; i++) { - this.data.push({ - // key: i, - name: `Don Diablo ${i}`, - age: `${i}${i}`, - address: `EDC Las Vegas no. ${i}`, - }); - } -} -render() { - return
    item.id === 1 || item.id === 3} /> -} -``` -::: - -### 斑马纹 - -:::demo - -```js -constructor(props){ - super(props) - - this.columns = [ - - { title: 'Column 1', dataIndex: 'name', key: '1'}, - { title: 'Column 1', dataIndex: 'age', key: '2'}, - { title: 'Column 1', dataIndex: 'address', key: '3'}, - { - title: ()=>
    自定义标题
    , - dataIndex: 'address', key: '4', - render(text,record,index){ - return ( -
    - {text} --- {index} --- 自定义渲染 -
    - ) - }}, - { - title: 'Action', - key: 'operation', - width: 100, - render: () => action, - }, - ] - - this.data = [] - for (let i = 0; i < 10; i++) { - this.data.push({ - // key: i, - name: `Don Diablo ${i}`, - age: `${i}${i}`, - address: `EDC Las Vegas no. ${i}`, - }); - } -} -render() { - return
    item.id === 1 || item.id === 3} /> -} -``` -::: - -### 前端排序 - -:::demo - -```js -constructor(props){ - super(props) - - this.columns = [ - - { - title: - 短文本 - , - dataIndex: 'name', key: '1', - }, - { - dataIndex: 'age', - key: '2', - sorter(next,pre){ - return next.age - pre.age - } - }, - { - dataIndex: 'age', - key: '2', - title:'age2', - sorter(next,pre){ - return pre.age - next.age - } - }, - { title: 'Column 1', dataIndex: 'address', key: '3'}, - { - title: ()=>
    自定义标题
    , - dataIndex: 'address', key: '4', - render(text,record,index){ - return ( -
    - {text} --- {index} --- 自定义渲染 -
    - ) - }}, - { - title: 'Action', - key: 'operation', - width: 100, - render: () => action, - }, - ] - - this.data = [] - for (let i = 0; i < 10; i++) { - this.data.push({ - key: i, - name: `Don Diablo ${i}`, - age: `${i}`, - address: `EDC Las Vegas no. ${i}`, - }); - } -} -render() { - return
    ( -
    头部
    - )} - footer={() => ( -
    底部
    - )} - /> -} -``` -::: - - -### 多选 - -:::demo - -```js - - - -constructor(props){ - super(props) - - this.columns = [ - - { - title: 'name', - dataIndex: 'name', - key: 'a', - width: '200px' - }, - { - dataIndex: 'age', - key: 'b', - width: '150px', - sorter(pre,next){ - return pre.age - next.age - } - }, - { title: 'Column 1', dataIndex: 'address', key: 'c', width: '200px'}, - { - title: ()=>
    自定义标题
    , - dataIndex: 'address', key: '4', - render(text,record,index){ - return ( -
    - {text} --- {index} --- 自定义渲染 -
    - ) - }}, - { - title: 'Action', - key: 'operation', - width: 100, - render: () => action, - }, - ] - - const data = [] - for (let i = 0; i < 10; i++) { - data.push({ - key: i + 1, - name: `Don Diablo ${i}`, - age: `${i}`, - address: `EDC Las Vegas no. ${i}`, - }); - } - - this.state = { - selectedRowKeys: [], // Check here to configure the default column - data - } -} - -render(){ - const { selectedRowKeys ,data} = this.state - const rowSelection = { - selectedRowKeys, - onChange: (selectedRowKeys,rows)=>{ - this.setState({selectedRowKeys}) - }, - dataName:'age' - } - return
    ( -
    表头
    - )} - footer={() => ( -
    abc
    - )} - /> -} - - -``` - -::: - - -### 表头吸顶 - -:::demo -**fixTop : 表头窗口的高度** -```js -constructor(props){ - super(props) - - this.columns = [ - - { title: 'Column 1', dataIndex: 'name', key: '1'}, - { title: 'Column 1', dataIndex: 'age', key: '2'}, - { title: 'Column 1', dataIndex: 'address', key: '3'}, - { - title: ()=>
    自定义标题
    , - dataIndex: 'address', key: '4', - render(text,record,index){ - return ( -
    - {text} --- {index} --- 自定义渲染 -
    - ) - }}, - { - title: 'Action', - key: 'operation', - width: 100, - render: () => action, - }, - ] - - this.data = [] - for (let i = 0; i < 10; i++) { - this.data.push({ - key: i, - name: `Don Diablo ${i}`, - age: `${i}${i}`, - address: `EDC Las Vegas no. ${i}`, - }); - } -} -render() { - return
    -} -``` -::: - -### 列冻结 - -:::demo -**被冻结的列建议传入 width 属性** -```js -constructor(props){ - super(props) - - this.columns = [ - - { title: 'Column 1', dataIndex: 'address', key: '1', }, - { title: 'Column 2', dataIndex: 'address', key: '2', }, - { title: 'Column 3', dataIndex: 'address', key: '3', }, - { title: 'Column 4', dataIndex: 'address', key: '4', }, - { title: 'Column 1', dataIndex: 'address', key: '5', }, - { title: 'Column 2', dataIndex: 'address', key: '6', }, - { title: 'Column 3', dataIndex: 'address', key: '7', }, - { title: 'Column 4', dataIndex: 'address', key: '8', }, - { - title: 'Action', - key: 'operation', - width: 100, - render: () => action, - }, - ] - - - - this.data = [] - for (let i = 0; i < 10; i++) { - this.data.push({ - key: i+1, - name: `Don Diablo ${i}`, - age: `${i}${i}`, - address: `EDC Las Vegas no. ${i}`, - }); - } -} -render() { - return ( -
    -
    - - ) -} -``` -::: - -### 右键列冻结 - -:::demo -```js -constructor(props){ - super(props) - - this.columns = [ - { title: 'Column 1', dataIndex: 'address', key: '1' }, - { title: 'Column 2', dataIndex: 'address', key: '2' }, - { title: 'Column 3', dataIndex: 'address', key: '3' }, - { title: 'Column 4', dataIndex: 'address', key: '4' }, - { title: 'Column 5', dataIndex: 'address', key: '5' }, - { title: 'Column 6', dataIndex: 'address', key: '6' }, - { title: 'Column 7', dataIndex: 'address', key: '7'}, - { title: 'Column 8', dataIndex: 'address', key: '8' } - ] - - this.data = [{ - key: '1', - name: 'John Brown', - age: 32, - address: 'New York Park' - }, { - key: '2', - name: 'Jim Green', - age: 40, - address: 'London Park' - }] -} -render() { - return
    -} -``` -::: - - -### 右键展开加冻结 -:::demo -```js -constructor(props){ - super(props) - - this.columns = [ - { title: 'Column 1', dataIndex: 'age', key: '0' ,type:'expand',render(text,record,index){ - return ( -
    {text}-{index}
    - ) - }}, - { title: 'Column 1', dataIndex: 'address', key: '1' }, - { title: 'Column 2', dataIndex: 'address', key: '2' }, - { title: 'Column 3', dataIndex: 'address', key: '3' }, - { title: 'Column 4', dataIndex: 'address', key: '4' }, - { title: 'Column 5', dataIndex: 'address', key: '5' }, - { title: 'Column 6', dataIndex: 'address', key: '6' }, - { title: 'Column 7', dataIndex: 'address', key: '7' }, - { title: 'Column 8', dataIndex: 'address', key: '8' } - ] - - this.data = [{ - key: '1', - name: 'John Brown', - age: 32, - address: 'New York Park' - }, { - key: '2', - name: 'Jim Green', - age: 40, - address: 'London Park' - }] -} -render() { - return
    -} -``` -::: - - -### 合并单元格 - -:::demo - -```js -constructor(props){ - super(props) - - -const renderContent = (value, row, index) => { - const obj = { - children: value, - props: {} - } - if (index === 4) { - obj.props.colSpan = 0 - } - return obj -} - - this.columns = [{ - title: 'Name', - dataIndex: 'name', - render: (text, row, index) => { - if (index < 4) { - return {text} - } - return { - children: {text}, - props: { - colSpan: 5 - } - } - }, - key:"1" - }, { - title: 'Age', - dataIndex: 'age', - render: renderContent, - key:"2" - }, { - title: 'Home phone', - colSpan: 2, - dataIndex: 'tel', - key:"3", - render: (value, row, index) => { - const obj = { - children: value, - props: {} - } - if (index === 2) { - obj.props.rowSpan = 2 - } - // These two are merged into above cell - if (index === 3) { - obj.props.rowSpan = 0 - } - if (index === 4) { - obj.props.colSpan = 0 - } - return obj - } - }, { - title: 'Phone', - colSpan: 0, - dataIndex: 'phone', - render: renderContent, - key: "4" - }, { - title: 'Address', - dataIndex: 'address', - render: renderContent, - key:"5" - }] - - this.data = [{ - key: '1', - name: 'John Brown', - age: 32, - tel: '0571-22098909', - phone: 18889898989, - address: 'New York No. 1 Lake Park' - }, { - key: '2', - name: 'Jim Green', - tel: '0571-22098333', - phone: 18889898888, - age: 42, - address: 'London No. 1 Lake Park' - }, { - key: '3', - name: 'Joe Black', - age: 32, - tel: '0575-22098909', - phone: 18900010002, - address: 'Sidney No. 1 Lake Park' - }, { - key: '4', - name: 'Jim Red', - age: 18, - tel: '0575-22098909', - phone: 18900010002, - address: 'London No. 2 Lake Park' - }, { - key: '5', - name: 'Jake White', - age: 18, - tel: '0575-22098909', - phone: 18900010002, - address: 'Dublin No. 2 Lake Park' - }] -} -render() { - return
    -} -``` -::: - - -### 表头分组 - -:::demo - -```js -constructor(props){ - super(props) - - - this.columns = [{ - title: 'Name', - dataIndex: 'name', - key: '1', - // width: 100, - - filters: [{ - text: 'Joe', - value: 'Joe' - }, { - text: 'John', - value: 'John' - }], - onFilter: (value, record) => record.name.indexOf(value) === 0 - }, { - title: 'Other', - - children: [{ - title: 'Age', - dataIndex: 'age', - // key: 'age', - // width: 200, - key:2, - sorter: (a, b) => a.age - b.age - }, { - title: 'Address', - - children: [{ - title: 'Street', - dataIndex: 'street', - key: '3' - // width: 200, - }, { - title: 'Block', - children: [{ - title: 'Building', - dataIndex: 'building', - key: '4' - // width: 100, - }, { - title: 'Door No.', - dataIndex: 'number', - key: '5' - // width: 100, - }] - }] - }] - }, { - title: 'Company', - key: '6', - children: [{ - title: 'Company Address', - dataIndex: 'companyAddress', - key: '7' - }, { - title: 'Company Name', - dataIndex: 'companyName', - key: '8' - }] - }, { - title: 'Gender', - dataIndex: 'gender', - key: '9' - // width: 60, - - }] - - const data = [] - for (let i = 0; i < 6; i++) { - data.push({ - key: i, - name: 'John Brown', - age: i + 1, - street: 'Lake Park', - building: 'C', - number: 2035, - companyAddress: 'Lake Street 42', - companyName: 'SoftLake Co', - gender: 'M' - }) - } - this.data = data -} -render() { - return
    -} -``` -::: - - - -### 扩展一行 - -:::demo - -```js -constructor(props){ - super(props) - - this.columns = [ - - - { - type: 'expand', - key:'expand', - width:'50', - fixed: 'left', - render (text, record, index) { - return ( -
    -
    - - - - - - - - - - - - - -
    - ) - } - }, - { title: 'Full Name', width: 150, dataIndex: 'name', key: 'name', fixed: 'left' }, - { title: 'Age', width: 150, dataIndex: 'age', key: 'age', fixed: 'left' }, - { title: 'Column 1', dataIndex: 'address', key: '1'}, - { title: 'Column 2', dataIndex: 'address', key: '2' }, - { title: 'Column 3', dataIndex: 'address', key: '3'}, - { title: 'Column 4', dataIndex: 'address', key: '4'}, - { title: 'Column 5', dataIndex: 'address', key: '5'}, - { title: 'Column 6', dataIndex: 'address', key: '6'}, - { title: 'Column 7', dataIndex: 'address', key: '7'}, - // { title: 'Column 8', dataIndex: 'address', key: '8' } - ] - - this.data = [{ - key: '1', - name: 'John Brown', - age: 32, - address: 'New York Park' - }, { - key: '2', - name: 'Jim Green', - age: 40, - address: 'London Park' - }] -} -render() { - return
    -} -``` -::: - - -### 前端分页 -:::demo -```js -constructor(props){ - super(props) - - this.columns = [ - - { - type: 'expand', - key:'expand', - fixed: 'left', - render (text, record, index) { - return ( -
    -
    -
    - - - - - - - - - - - - -
    - ) - } - }, - { title: 'Full Name', width: 100, dataIndex: 'name', key: 'name', fixed: 'left' }, - { title: 'Age', width: 100, dataIndex: 'age', key: 'age', fixed: 'left' }, - { title: 'Column 1', dataIndex: 'address', key: '1' ,width:120,}, - { title: 'Column 2', dataIndex: 'address', key: '2' ,width:120,}, - { title: 'Column 3', dataIndex: 'address', key: '3' ,width:120,}, - { title: 'Column 4', dataIndex: 'address', key: '4' ,width:120,}, - { title: 'Column 5', dataIndex: 'address', key: '5' ,width:120,}, - { title: 'Column 6', dataIndex: 'address', key: '6' ,width:120,}, - { title: 'Column 7', dataIndex: 'address', key: '7' ,width:120,}, - { title: 'Column 8', dataIndex: 'address', key: '8' } - ] - this.state = { - pageSize: 10, - total: 100, - current :2, - data: [] - } -} - -set(current){ - let {pageSize} = this.state - let data = [] - for(let i=pageSize*(current-1);i{ - this.set(page) - }, - position : 'center', - - }} - /> -} -``` -::: - -### 服务端表格 -:::demo -```js -constructor (props) { - super(props) - this.state = { - from: '', - pageSize:'' - } - - window.selectTable = this - } - - render () { - const { - from, - pageSize - } = this.state - - const rowSelection = { - selectedRowKeys: [], - onChange: (selectedRowKeys, rows) => { - this.setState({selectedRowKeys}) - }, - dataName: 'id' - } - - return ( -
    - 发货工厂 - -
    - - this.setState({from: e.target.value})} /> - - - - - - -
    { - let {data: {data, columns,page: {pageSize, totalNum, pageNum}}} = res - columns.unshift({ - title:'排序demo', - dataIndex:'id', - key:'sort', - serverSort:[{sort:'desc', sort:'adesc'}] //点击排序的箭头图标会将数组中某一项放到请求参数里 - }) - - const pageSizeOptions = [{ - value: 10, - title: '10' - }, { - value: 20, - title: '20' - }, { - value: 50, - title: '50' - }, { - value: 100, - title: '100' - }] - - - - return { - data, - columns, - page: { - pageSize, - total: totalNum, - current: pageNum, - position: 'middle', - showTotal: true, - - pageSizeOptions, - sizeChangeEvent:(pageSize,current) => { - this.setState({ - pageSize - }) - }, - onChange:(current) => { - this.refs.table.fetch(current) - } - - } - } - }, - error: () => { - - } - }} - /> - - ) - } -``` - - -::: - -### 高级用法 - -:::demo -Table 表格代码说明 -1. 右键菜单 - 1. 高亮 - 2. 列冻结 (需要配置scrollX) - 3. 隐藏列 -2. 表格menu菜单(控制列的显示与隐藏) -3. 操作记忆 需要给每个表格添加name属性来为索引。非常重要 - -data属性的所有字段要加key,columns的每条数据需要添加加key属性 -```js -constructor(props){ - super(props) - - this.columns = [ - - { title: 'Column 1', dataIndex: 'name', key: '1'}, - { title: 'Column 1', dataIndex: 'age', key: '2',type: 'number'}, - { title: 'Column 1', dataIndex: 'address', key: '3'}, - { - title: ()=>
    自定义标题
    , - dataIndex: 'address', key: '4', - width: '500px', - render(text,record,index){ - return ( -
    - {text} --- {index} --- 自定义渲染 -
    - ) - }}, - { - title: 'Action', - key: 'operation', - width: 100, - render: () => action, - }, - ] - - this.data = [] - for (let i = 0; i < 10; i++) { - this.data.push({ - // key: i, - name: `Don Diablo ${i}`, - age: `${i}${i}`, - address: `EDC Las Vegas no. ${i}`, - }); - } -} -render() { - return
    item.id === 1 || item.id === 3} - header={() =>
    表格头部
    } - footer={() =>
    表格底部
    } - advance={{ - prefix: [{name:'hiui',age: '1years',address: 'xiaomi'},{name:'hiui2.0',age: '1.5years',address: 'xiaomi'}], - suffix: [{name: 'table',age: '1yeads',address: 'wuhan'},{name: 'table2.0',age: '1.5yeads',address: 'wuhan'}], - avg:true, - sum: true - }} - /> -} -``` -::: - -### origin Attributes - -| 参数 | 说明 | 类型 | 默认值 | -| -------- | ----- | ---- | ---- | -| url | 请求地址 | String| - | -| currentPageName | 请求参数,分页字端名 | Sting | current | -| auto | 当data变化时是不是自动发送请求 | Boolean | false | -| autoDelayTime | 当自动发送请求时,延迟时间 | Number | 300 | -| headers | 请求头 | Object | - | -| data | 请求参数 | Object | - | -| success | 响应解析函数 | Function(record) | - | -| error | 请求错误回调函数 | Function(record) | - | -| method | 请求方法 | String | GET | - - - - - - -### rowSelection - -| 参数 | 说明 | 类型 | 默认值 | -| -------- | ----- | ---- | ---- | -| onChange | 列表项被选中时触发的回调 | Function(selectedRowKeys, selectedRows) | - | -| getCheckboxProps | 选择框的默认属性配置 | Function(record) | - | - - -### Table Attributes - -| 参数 | 说明 | 类型 | 可选值 | 默认值 | -| -------- | ----- | ---- | ---- | ---- | -| size | 表格尺寸 | String | large,small,normal | normal | -| bordered | 是否显示边框 | Bollean | - | false | -| striped | 斑马纹 | Bollean | - | false | -| columns | 表格数据列对应信息 | array | - | - | -| data | 表格数据 | array | - | - | -| emptyText | 数据为空时展示的文案 | string | - | No Data | -| header | 表格头部 | Component | - | Null | -| footer | 表格底部 | Component | - | Null | -| scroll | 设置横向滚动,也可用于指定滚动区域的宽,建议为`x`设置一个数字,如果不设置,默认table宽度为100% | number | true | - | -| fixTop | 吸顶 | Number | true | false | -| pagination | 查看分页组件配置 | Object | - | false | -| advance | 高级功能 | Object | - | - | -| origin | 服务端功能 | Object | - | - | - - -### Origin - -| 参数 | 说明 | 类型 | 可选值 | 默认值 | -| -------- | ----- | ---- | ---- | ---- | -| url | 请求地址 | String | - | normal | -| method | 请求方法 | String | GET,POST | GET | -| data | 在表格第一行插入一条说明性数据 | Object | - | null | -| headers | 请头 | Object | - | null | -| auto | 是否在data发生变化时自动发请求 | Bollean | - | false | -| autoDelayTime | 请求延迟持久 | Number | - | 500 | -| success | 请求解析函数 | Function | - | - | - -### Advance - -| 参数 | 说明 | 类型 | 可选值 | 默认值 | -| -------- | ----- | ---- | ---- | ---- | -| sum | 前端求和(在columns中设置type=number) | Bollean | - | normal | -| avg | 前端求平均(在columns中设置type=number) | Bollean | - | false | -| prefix | 在表格第一行插入一条说明性数据 | Object | - | null | -| suffix | 在表格最后一行插入一条说明性数据 | Object | - | null | - diff --git a/docs/zh-CN/components/table.mdx b/docs/zh-CN/components/table.mdx index e1aef99ce..251fb9e35 100755 --- a/docs/zh-CN/components/table.mdx +++ b/docs/zh-CN/components/table.mdx @@ -1,6 +1,5 @@ -# Table 表格 ( 停止维护 ) +# Table 表格 -> 现 Table 不再 **进行维护** ,我们将 Table 就行了重写并已发布,暂命名为[hi-table](https://github.com/hiui-group/hi-table),已在 HiUI 3.x 进行了集成 可容纳多种数据类型的大型数据容器,并可支持多种数据相关和表格属性设置相关的操作,具有强大的统计功能 @@ -12,189 +11,114 @@ ## 基础用法 -Table 表格代码说明 - -1. 右键菜单 - 1. 高亮 - 2. 列冻结 (需要配置 scrollX) - 3. 隐藏列 -2. 表格 menu 菜单(控制列的显示与隐藏) -3. 操作记忆 需要给每个表格添加 name 属性来为索引。非常重要 - -data 属性的所有字段要加 key,columns 的每条数据需要添加加 key 属性 - import DemoBase from '../../demo/table/section-base.jsx' -## 紧凑表格 - -import DemoCompact from '../../demo/table/section-compact.jsx' - - - -## 宽松表格 - -import DemoLoose from '../../demo/table/section-loose.jsx' - - - -## 带边框的表格 - -import DemoBorder from '../../demo/table/section-border.jsx' - - - -## 斑马纹 - -import DemoZebra from '../../demo/table/section-zebra.jsx' - - - -## 前端排序 - -import DemoSort from '../../demo/table/section-sort.jsx' - - - -## 多选 - -import DemoMultiple from '../../demo/table/section-multiple.jsx' - - - -## 表头吸顶 +## 列操作 -**fixTop : 表头窗口的高度** +import DemoColumn from '../../demo/table/section-column.jsx' -import DemoHeader from '../../demo/table/section-header.jsx' + - - -## 表头冻结 - -**fixTop : 表头窗口的高度** - -import DemoHeight from '../../demo/table/section-height.jsx' - - - -## 列冻结 - -**被冻结的列建议传入 width 属性** +## 行操作 import DemoRow from '../../demo/table/section-row.jsx' -## 右键列冻结 - -import DemoRightHandRow from '../../demo/table/section-right-hand-row.jsx' - - - -## 合并单元格 - -import DemoMerge from '../../demo/table/section-merge.jsx' - - - -## 表头分组 - -import DemoGroup from '../../demo/table/section-group.jsx' - - - -## 扩展一行 - -import DemoExtend from '../../demo/table/section-extend.jsx' - - - -## 前端分页 - -import DemoPaging from '../../demo/table/section-paging.jsx' - - - -## 服务端表格 +## 不同尺寸 -import DemoServer from '../../demo/table/section-server.jsx' +import DemoSize from '../../demo/table/section-size.jsx' - + -## 操作记忆 +## 特殊表格 -import DemoMemory from '../../demo/table/section-memory.jsx' +import DemoSpecial from '../../demo/table/section-special.jsx' - + -## 高级功能 + ## Props -| 参数 | 说明 | 类型 | 可选值 | 默认值 | -| ---------- | ---------------------------- | ------------ | ------------------------------- | --------- | -| size | 表格尺寸 | string | 'small' \| 'large' \| 'default' | 'default' | -| bordered | 是否显示边框 | boolean | true \| false | false | -| striped | 斑马纹 | boolean | true \| false | false | -| columns | 表格数据列对应信息 | ColumnItem[] | - | - | -| data | 表格数据 | object[] | - | - | -| emptyText | 数据为空时展示的文案 | string | - | 'No Data' | -| scrollX | 设置列冻结 | boolean | true \| false | false | -| fixTop | 吸顶 | number | - | 0 | -| height | 表格最大高度(用于冻结表头) | string | - | - | -| pagination | 查看分页组件配置 | Advance | - | - | -| advance | 高级功能 | Origin | - | - | -| origin | 服务端功能 | object | - | - | - -## Type +| 属性名 | 描述 | 类型 | 可选值 | 默认值 | +| ------------------ | ------------------------------------------------------------------------------------------------------- | ---------------------------------------------- | ----------------------------------------- | ---------- | +| data | 表格数据 | object[] | - | - | +| columns | 表格列配置信息 | ColumnItem[] | - | - | +| bordered | 是否显示边框(表头分组模式下,表格自带边框) | boolean | true \| false | false | +| sticky | 是否支持表头吸顶 | boolean | true \| false | false | +| stickyTop | 表头吸顶距离视口顶部距离 | number | - | 0 | +| highlightedColKeys | 高亮列(受控) | string[] | - | [] | +| expandedRender | 表格展开项 | (record: dataItem, index: number) => ReactNode | - | - | +| maxHeight | 表格最大高度,当穿过该高度时,展示滚动条且表头固定 | number | - | - | +| fixedToColumn | 表格列冻结设置,为 string 时仅支持从左侧冻结至某一列 | string \| FixedOption | - | null | +| size | 配置表格尺寸 | string | 'large' \| 'default' \| 'small' \| 'mini' | 'default' | +| pagination | 表格分页配置项 | Pagination | - | null | +| errorRowKeys | 错误列(受控) | string[] | - | [] | +| highlightedRowKeys | 高亮行(受控) | string[] | - | [] | +| rowSelection | 行可选(受控) | RowSelection | - | null | +| dataSource | 异步数据源 | (current: number) => DataSource | - | null | +| showColMenu | 是否支持列操作 | boolean | - | false | +| striped | 是否展示为斑马纹效果 | boolean | - | false | +| setting | 是否集成控制面板功能 | boolean | - | false | +| emptyContent | 数据为空时的展示内容 | string \| () => ReactNode | - | '暂无数据' | +| resizable | 是否能够动态控制列宽 | boolean | true \| false | false | +| standard | 标准模式,默认集成 `showColMenu = true, sticky = true, bordered = true, setting = true, striped = true` | boolean | true \| false | false | + +### Type ### ColumnItem -| 参数 | 说明 | 类型 | 可选值 | 默认值 | -| --------- | ------------ | ------------------------------------------------------- | -------------------- | ------ | -| title | 标题 | string | - | - | -| dataIndex | 数据源索引 | string | - | - | -| key | 唯一 key | string | - | - | -| fixed | 列冻结 | string | 'left' \| 'right' | - | -| width | 列宽 | number | - | - | -| render | 自定义渲染 | (text: string,record: object,index: number)=> ReactNode | \_ | - | -| type | 高级功能配置 | string | 'number' \| 'expand' | - | - | - -## Origin - -| 参数 | 说明 | 类型 | 可选值 | 默认值 | -| --------------- | -------------------------------- | ----------------------- | --------------- | --------- | -| url | 请求地址 | string | - | - | -| currentPageName | 请求参数,分页字段名 | string | - | 'current' | -| auto | 当 data 变化时是不是自动发送请求 | boolean | true \| false | false | -| autoDelayTime | 当自动发送请求时,延迟时间 | number | - | 300 | -| headers | 请求头 | object | - | - | -| data | 请求参数 | object | - | - | - | -| success | 响应解析函数 | (res: object) => object | - | - | -| error | 请求错误回调函数 | (err: object) => void | - | - | -| type | 请求方法 | string | 'GET' \| 'POST' | 'GET' | - | -| withCredentials | 跨域请求时是否携带 cookie | boolean | true \| false | false | - -## RowSelection - -| 参数 | 说明 | 类型 | 可选值 | 默认值 | -| ---------------- | ------------------------ | ---------------------------------------------------------- | ------ | ------ | -| onChange | 列表项被选中时触发的回调 | (selectedRowKeys: number[],selectedRows: object[])=> void | - | - | -| getCheckboxProps | 选择框的默认属性配置 | (record) => void | - | - | - -## Advance - -| 参数 | 说明 | 类型 | 可选值 | 默认值 | -| ------ | ---------------- | --------- | ------------- | ------ | -| sum | 是否前端求合 | boolean | true \| false | false | -| ave | 是否前端求均值 | boolean | true \| false | false | -| header | 表格头部 | ReactNode | - | - | -| footer | 表格底部 | ReactNode | - | - | -| prefix | 表格头部插入多行 | object[] | - | - | -| suffix | 表格底部插入多行 | object[] | - | - | +| 参数 | 说明 | 类型 | 可选值 | 默认值 | +| -------- | ---------------------- | -------------------------------------------------------------------------------- | ----------------- | ------ | +| title | 列标题 | string | - | - | +| dataKey | 列对应数据项的唯一标识 | string \| number | - | - | +| align | 列对齐方式 | string | 'left' \| 'right' | 'left' | +| sorter | 列排序函数 | () => boolean | - | null | +| avg | 该列是否支持平均值 | boolean | - | false | +| total | 该列是否支持合计 | boolean | - | false | +| width | 该列宽度 | number | - | - | +| children | 多级表头 | ColumnItem[] | - | - | +| render | 控制单元格自定义渲染 | (text: DataItem[ColumnItem[dataKey]], row: DataItem, index: number) => ReactNode | - | - | + +### DataSource + +| 参数 | 说明 | 类型 | 可选值 | 默认值 | +| ----------------- | ----------------------------------------- | --------------------------------- | -------------------------------------------------- | ------------- | +| url | 请求的 url | string | - | - | +| type | 请求方法 | string | get \| post | get | +| data | post 请求时请求体参数 | object | - | - | +| params | url 查询参数 | object | - | - | +| headers | 请求头 | object | - | - | +| mode | 请求模式 | string | 'same-origin' \| 'cors' \| 'no-cors' \| 'navigate' | 'same-origin' | +| transformResponse | 成功时的回调,需要返回注入 table 的配置项 | (response: object) => TableConfig | - | - | + +### Pagination + +| 参数 | 说明 | 类型 | 可选值 | 默认值 | +| ---------------- | ---------------------------------------------------------- | --------------------------------------------------------- | --------------------------------- | --------- | +| type | 分页的类型 | string | 'default' \| 'simple' \| 'shrink' | 'default' | +| defaultCurrent | 默认的当前页数 | number | - | 1 | +| current | 当前页数 | number | - | - | +| max | 最大显示的页数 | number | - | 2 | +| pageSize | 每页条数 | number | - | 10 | +| pageSizeOptions | 指定每页可以显示多少条 | number[] | - | [] | +| total | 数据总数 | number | - | - | +| autoHide | 只有一页时是否隐藏分页器 | boolean | true \| false | false | +| showJumper | 是否显示跳转 | boolean | true \| false | false | +| onJump | 快速跳转时触发,回调值为当前页数 | (current: number) => void | - | - | +| onChange | 页码改变时的回调,回调值为当前页数、之前的页数和每页条数 | (current: number, prev: number, pageSize: number) => void | - | - | - | +| onPageSizeChange | 每页显示条数改变的回调函数,返回改变后的每页条数及当前页数 | (current: number, pageSize: number) => void | - | - | - | + +### FixedOption + +| 参数 | 说明 | 类型 | 可选值 | 默认值 | +| ----- | -------------------- | ------ | ------ | ------ | +| left | 表格从左侧冻结至某列 | string | - | - | +| right | 表格从右侧冻结至某列 | string | - | - | diff --git a/docs/zh-CN/components/tabs.mdx b/docs/zh-CN/components/tabs.mdx index f5bf0adc8..d60a7031e 100644 --- a/docs/zh-CN/components/tabs.mdx +++ b/docs/zh-CN/components/tabs.mdx @@ -10,11 +10,17 @@ 无信息间的对比要求,即不同时查看 +## 基础用法 + +import DemoDefault from '../../demo/tabs/section-default.jsx' + + + ## 卡片样式 -import DemoBasic from '../../demo/tabs/section-basic.jsx' +import DemoCard from '../../demo/tabs/section-card.jsx' - + ## 可编辑用法 @@ -40,21 +46,33 @@ import DemoCollapse from '../../demo/tabs/section-collapse.jsx' +## 可扩展用法-滚动条 + +import DemoOverSrcoll from '../../demo/tabs/section-overSrcoll.jsx' + + + +## 排序用法 + +import DemoDraggable from '../../demo/tabs/section-draggable.jsx' + + + ## Props ### Tabs -| 参数 | 说明 | 类型 | 可选值 | 默认值 | -| --------------- | --------------------------------------------------------------------------------------------------------------------------- | ------------------------------- | ------------------------------------------ | ------------ | -| type | 标签类型 | string | 'desc' \| 'card' \| 'button' \| 'editable' | 'card' | -| placement | 水平或竖直展示标签 | string | 'vertical' \| 'horizontal' | 'horizontal' | -| defaultActiveId | 设置默认激活的标签 | string \| number | - | 第一个选项卡 | -| activeId | 设置激活的标签,设置此值后变为受控模式 | string \| number | - | - | -| max | 最多显示的选项卡数,仅在 `type='card'` 并且 `placement='horizonal'` 时生效 | number | - | 6 | -| onTabClick | 点击标签页时触发,回调值为点击点击标签的 key | (tabKey, event) => void | - | - | -| onEdit | 标签新增删减时触发,仅对 type='editable'时触发。参数:action 为事件类型,值为 add 或者 delete;index 为操作选项卡对应的索引 | (action, index, tabKey) => void | - | - | +| 参数 | 说明 | 类型 | 可选值 | 默认值 | +| --------------- | ------------------------------------------------------------------------------------------- | ---------------- | ---------------------------------------------------- | ------------ | +| type | 标签类型 | string | 'desc' \| 'card' \| 'button' \| 'editable' \| 'line' | 'card' | +| placement | 水平或竖直展示标签 | string | 'vertical' \| 'horizontal' | 'horizontal' | +| defaultActiveId | 设置默认激活的标签 | string \| number | - | 第一个选项卡 | +| activeId | 设置激活的标签,设置此值后变为受控模式 | string \| number | - | - | +| max | 最多显示的选项卡数,仅在 `type='card'` 或 `type='line'` 并且 `placement='horizonal'` 时生效 | number | - | 6 | +| canScroll | 选项卡数达到临界展示滚动条 | boolean | true \| false | false | +| draggable | 是否支持拖拽 , 仅在 `type = 'card'` 或 `type = 'line'` 或 `type = 'editable'` 时生效 | boolean | true \| false | false | -### Tabs.Pane +### Tabs. Pane | 参数 | 说明 | 类型 | 可选值 | 默认值 | | --------- | -------------------------------------------- | ------------------- | ------------- | ------ | @@ -62,3 +80,17 @@ import DemoCollapse from '../../demo/tabs/section-collapse.jsx' | tabDesc | 选项卡头描述文字,仅对 type='desc'时生效 | string \| ReactNode | - | - | | tabId | 每个标签的唯一标识 | string \| number | - | - | | closeable | 标签是否可以关闭,仅对 type='editable'时生效 | boolean | true \| false | true | +| disabled | 标签是否禁用 | boolean | true \| false | false | +| animation | 是否支持 Pane 切换动画 (3.0 新增) | boolean | true \| false | false | + +## Events + +| 名称 | 说明 | 类型 | 参数 | 返回值 | +| -------------- | ----------------------------------------------------------- | ------------------------------------ | --------------------------------------------------- | ------------------------------ | +| onTabClick | 点击标签页时触发,回调值为点击点击标签的 key | (tabKey, event) => void | tabKey: 点击的标签 key
    event: MouseEvent | - | +| onDragStart | 节点开始拖拽时触发 | (dragNode: TabNode) => void | dragNode: 拖拽节点 | - | +| onDropEnd | 节点拖拽成功时触发 | (dragNode: TabNode) => void | dragNode: 拖拽节点 | - | +| onDrop | 节点拖拽时触发 | (dragNode: TabNode) => void | dragNode: 拖拽节点 | - | +| onAdd | 节点增加时触发 | () => void | - | - | +| onDelete | 节点删除时触发 | (deletedNode: TabNode,index) => void | deletedNode: 删除的节点
    index: 删除的节点索引 | - | +| onBeforeDelete | 节点删除前触发,返回 false 则节点删除失败,不会触发 onDelete | (deletedNode: TabNode) => boolean | deletedNode: 准备删除的节点 | boolean: 返回 false 将阻止删除 | diff --git a/docs/zh-CN/components/tag.mdx b/docs/zh-CN/components/tag.mdx index 03617e79a..e7c8b6c33 100644 --- a/docs/zh-CN/components/tag.mdx +++ b/docs/zh-CN/components/tag.mdx @@ -14,16 +14,71 @@ import DemoBasic from '../../demo/tag/tag-basic' -## 线型标签 +## 线型圆角标签 import DemoLine from '../../demo/tag/tag-line' +## 方角标签 + +import DemoRound from '../../demo/tag/tag-round' + + + +## 标签组用法 + +import DemoGroup from '../../demo/tag/tag-group' + + + +## 自定义颜色 + +import DemoColor from '../../demo/tag/tag-color' + + + ## Props -| 参数 | 说明 | 类型 | 可选值 | 默认值 | -| ---------- | ---------------- | ----------------------- | ----------------------------------------------- | --------- | -| type | 设置状态 | string | 'primary' \| 'success' \| 'warning' \| 'danger' | 'primary' | -| appearance | 设置样式类型 | string | 'default' \| 'line' | 'default' | -| onClick | 点击按钮时的回调 | (e: MouseEvent) => void | - | - | +### Tag + +| 参数 | 说明 | 类型 | 可选值 | 默认值 | +| ---------- | ------------ | ------ | ----------------------------------------------- | --------- | +| type | 设置状态 | string | 'primary' \| 'success' \| 'warning' \| 'danger' | 'primary' | +| appearance | 设置样式类型 | string | 'default' \| 'line' | 'default' | +| shape | 设置形状 | string | 'round' \| 'square' | 'round' | +| color | 标签色 | string | - | - | + +### Tag.Group + +| 参数 | 说明 | 类型 | 可选值 | 默认值 | +| -------- | ------------------------------ | --------- | ------------- | ------ | +| data | 展示数据 | TagNode[] | - | - | +| editable | 标签组是否可以修改、新增、删除 | boolean | true \| false | false | + +## Events + +### Tag + +| 名称 | 说明 | 类型 | 参数 | 返回值 | +| ------- | ---------------- | --------------------------- | ------------------- | ------ | +| onClick | 点击按钮时的回调 | (event: MouseEvent) => void | event: 鼠标事件对象 | - | + +### Tag.Group + +| 名称 | 说明 | 类型 | 参数 | 返回值 | +| -------- | -------------- | ------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------- | ------ | +| onAdd | 标签新增后触发 | (addNode:TagNode, index:number) => void | addNode: 新增的 Tag 对象 `TagNode`
    index: 新增 Tag 的索引 | - | +| onEdit | 标签修改后触发 | (editNode:TagNode, index:number) => void | editNode: 编辑的 Tag 对象 `TagNode`
    index: 编辑 Tag 的索引 | - | +| onDelete | 标签删除后触发 | (deleteNode:TagNode, index:number) => void | deleteNode: 删除的 Tag 对象 `TagNode`
    index: 删除 Tag 的索引 | - | + +## Type + +### TagNode + +| 参数 | 说明 | 类型 | 可选值 | 默认值 | +| -------- | ---------------- | ---------------- | ------------- | ------ | +| title | 标题 | string | - | - | +| tagId | 标签唯一 id | string \| number | - | - | +| closable | 标签是否可以关闭 | boolean | true \| false | false | +| editable | 标签是否可以修改 | boolean | true \| false | false | diff --git a/docs/zh-CN/components/theme.mdx b/docs/zh-CN/components/theme.mdx deleted file mode 100644 index bbcbb3979..000000000 --- a/docs/zh-CN/components/theme.mdx +++ /dev/null @@ -1,151 +0,0 @@ -# 主题 - -目前 HIUI 提供了两种布局主题供大家使用,分别是上下结构的 `classic` 形态和左右结构的 `genuine`。 - -## 安装与使用 - -```bash -npm i @hi-ui/classic-theme@next --save -``` - -```diff -// package.json -"dependencies": { -+ "@hi-ui/classic-theme": "^2.0.0-rc" - }, -``` - -```jsx -import Layout from '@hi-ui/classic-theme' - -render(, document.getElementById('app')) -``` - -## 示例 - -基于配置化实现主题布局和菜单匹配,数组中元素的层级即代表其在菜单中的层级 - -```jsx -import React, { Component } from 'react' -import { Theme } from '@hi-ui/classic-theme' - -// 路由组件 -const Mi = () =>
    小米手机
    -const RedMi = () =>
    红米手机
    -const BlackShark = () =>
    黑鲨手机
    -const TV = () =>
    小米电视
    -const SoundBox = () =>
    小米音响
    -const Robot = () =>
    米家扫地机器人
    - -// 路由菜单配置项 -const routeConfig = [ - { - name: '手机', // 一级菜单名称 - children: [ - { name: '小米', path: '/mi', component: Mi }, // 二级菜单名称、跳转路径、匹配的路由组件 - { name: '红米', path: '/red-mi', component: RedMi }, - { name: '黑鲨', path: '/black-shark', component: BlackShark } - ] - }, - { name: '电视', path: '/tv', component: TV }, // 不存在 children 属性将不会渲染二级菜单 - { - name: '智能硬件', - children: [ - { name: '音响', path: '/audio', component: SoundBox }, - { name: '扫地机器人', path: '/robot', component: Robot } - ] - } -] - -// 系统 logo 配置项 -const logoConfig = { - logoUrl: 'https://xiaomi.github.io/hiui/static/img/logo.png?241e0618fe55d933c280e38954edea05', // logo 资源地址 - name: 'HIUI Theme', // logo 名称 - url: 'https://xiaomi.github.io/hiui/#/' // 点击 logo 跳转地址 -} - -// 系统登录信息配置项 -const loginConfig = { - name: 'Mi Guest', // 登录用户 - icon: 'user', // 登录用户 icon - children: [ - , -
    - 注销 -
    - ] // 登录项菜单 -} - -class App extends Component { - render() { - return // 传递各配置项供主题使用 - } -} - -export default App -``` - -- 当属性设置为 `type='classic' apperance={{color:'dark'}}` 时,呈上下布局,顶部导航栏为深色 - -

    - -- 当属性设置为 `type='classic' apperance={{color:'light'}}` 时,呈上下布局,顶部导航栏为浅色 - -

    - -- 当属性设置为 `type='genuine' apperance={{color:'dark'}}` 时,呈左右布局,侧边导航栏为深色 - -

    - -- 当属性设置为 `type = 'genuine' apperance={{color:'light'}}` 时,呈左右布局,侧边导航栏为浅色 - -

    - -## Props - -| 属性名 | 描述 | 类型 | 默认值 | -| ----------- | -------------------------- | --------------------------------- | --------------------------- | -| type | 主题类型 | 'classic' \| 'genuine' | 'classic' | -| routes | 路由配置项 | Route[] | - | -| historyType | 路由跳转类型 | 'hashHistory' \| 'browserHistory' | 'browserHistory' | -| header | genuine 类型下的顶部功能栏 | ReactNode \| null | 不传时默认为主题自带 header | -| apperance | 主题外观配置项 | Apperance | {color:'dark'} | -| logo | 主题 logo 配置项 | Logo | - | -| login | 主题登录信息配置项 | Login | - | - -## Type - -### Route - -| 属性名 | 描述 | 类型 | 默认值 | -| --------- | ---------------------------------------- | --------- | ------ | -| name | 菜单名称 | string | - | -| icon | 菜单 icon | string | - | -| children | 子菜单配置项 | Route[] | - | -| path | 菜单跳转路径 | string | - | -| exact | 菜单跳转路径是否严格匹配对应的 component | boolean | true | -| component | 菜单对应页面组件 | ReactNode | - | - -### Apperance - -| 属性名 | 描述 | 类型 | 默认值 | -| ------ | -------- | ----------------- | ------ | -| color | 主题颜色 | 'dark' \| 'light' | 'dark' | - -### Logo - -| 属性名 | 描述 | 类型 | 默认值 | -| ------- | ------------------ | ------ | ------ | -| name | 系统名称 | string | - | -| logoUrl | logo 图片地址 | string | - | -| url | 点击 logo 跳转地址 | string | - | - -### Login - -| 属性名 | 描述 | 类型 | 默认值 | -| -------- | ------------- | ----------- | ------ | -| name | 登录用户姓名 | string | - | -| icon | 登录用户 icon | string | - | -| children | 登录菜单项 | ReactNode[] | - | diff --git a/docs/zh-CN/components/time-picker.mdx b/docs/zh-CN/components/time-picker.mdx index 95209604c..5247e6b1e 100755 --- a/docs/zh-CN/components/time-picker.mdx +++ b/docs/zh-CN/components/time-picker.mdx @@ -6,12 +6,19 @@ import DemoBase from '../../demo/time-picker/section-base.jsx' +## 自定义禁选值 + +import DemoDisable from '../../demo/time-picker/section-disable.jsx' + + + ## 时间范围 import DemoRange from '../../demo/time-picker/section-range.jsx' + ## 不同粒度 import DemoFormat from '../../demo/time-picker/section-format.jsx' @@ -25,13 +32,18 @@ import DemoFormat from '../../demo/time-picker/section-format.jsx' | type | 选择器类型 | string | 'default' \| 'timerange' | 'default' | | value | 显示的日期 | Date \| string \| number \| object \| - | - | - | | format | 格式化时间 | string | - | - | +| inputReadOnly | 设置输入框为只读 | boolean | true \| false | false | | hourStep | 小时选项间隔 | number | - | 1 | | minuteStep | 分钟选项间隔 | number | - | 1 | | secondStep | 秒选项间隔 | number | - | 1 | | disabled | 是否禁用 | boolean | true \| false | false | -| inputReadOnly | 设置输入框为只读 | boolean | true \| false | false | | placeholder | 设置输入框占位 | string \| string[] | - | - | | disabledHours | 禁止选择的小时 | () => number[] \| number[] | - | - | | disabledMinutes | 禁止选择的分钟 | (selectedHour: number) => number[] \| number[] | - | - | | disabledSeconds | 禁止选择的秒数 | (selectedHour: number, selectedMinute: number) => number[] \| number[] | - | - | -| onChange | 值变化时的回调函数 | (date: Date \| DateRange, dateStr: string \| DateRange ) => void | - | - | + +## Events + +| 名称 | 说明 | 类型 | 参数 | 返回值 | +| -------- | ------------ | ---------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------ | +| onChange | 选择后的回调 | (date: Date \| DateRange, dateStr: string \| DateRange ) => void | date: 选中的日期(普通选择) \| 选中的日期范围{start: Date, end: Date}(范围选择)
    dateStr: 选中的日期字符串(普通选择) \| 选中的日期字符串对象{start: string, end: string}(范围选择) | - | diff --git a/docs/zh-CN/components/transfer.mdx b/docs/zh-CN/components/transfer.mdx index 2f06bee2b..692ee6f28 100755 --- a/docs/zh-CN/components/transfer.mdx +++ b/docs/zh-CN/components/transfer.mdx @@ -36,23 +36,24 @@ import DemoArea from '../../demo/transfer/section-area.jsx' ## Props -| 参数 | 说明 | 类型 | 可选值 | 默认值 | -| -------------- | -------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ----------------------- | --------- | -| type | 穿梭框类型 | string | 'default' \| 'multiple' | 'default' | -| showCheckAll | 是否展示全选按钮 | boolean | true \| false | false | -| title | 标题(数组长度为 1 或 2 位,1 位时左右标题将相同,2 位时将使用对应索引标题) | string[] \| ReactNode[] | - | - | -| searchable | 是否可筛选 | boolean | true \| false | false | -| emptyContent | 数据为空时的显示内容 | string[] \| ReactNode[] | - | - | -| disabled | 是否禁用 | boolean | true \| false | false | -| data | 穿梭框数据源 | DataItem[] | - | — | -| targetLimit | 最大可穿梭上限 | number | - | - | -| targetIds | 目标框内的元素 id 集合 | number[] \| string[] | - | - | -| targetSortType | 目标框内的排序方式 | string | 'default' \| 'queue' | 'default' | -| draggable | 是否可拖拽排序(目标框内) | boolean | | false | -| onDragStart | 拖拽开始时的回调函数 | (dragItem: DataItem) => boolean | - | - | -| onDragEnd | 拖拽结束时的回调函数(完成拖拽) | (newData: DataItem[]) => void | - | - | -| onDrop | 放开拖拽元素时的回调函数,可用于条件判断,阻止拖拽到对应位置 | (targetItem: DataItem, sourceItem: DataItem) => boolean | - | - | -| onChange | 选中元素被移动到目标框内后的回调,回调值为目标框的值 | (targetKey: number[] \| string[], direction: 'left' \| 'right', moveDatas: DataItem[]) => void | - | - | +| 参数 | 说明 | 类型 | 可选值 | 默认值 | +| -------------- | -------------------------------------------------------------------------- | ----------------------- | ----------------------- | --------- | +| type | 穿梭框类型 | string | 'default' \| 'multiple' | 'default' | +| showCheckAll | 是否展示全选按钮 | boolean | true \| false | false | +| title | 标题(数组长度为 1 或 2 位,1 位时左右标题将相同,2 位时将使用对应索引标题) | string[] \| ReactNode[] | - | - | +| searchable | 是否可筛选 | boolean | true \| false | false | +| emptyContent | 数据为空时的显示内容 | string[] \| ReactNode[] | - | - | +| disabled | 是否禁用 | boolean | true \| false | false | +| data | 穿梭框数据源 | DataItem[] | - | — | +| targetLimit | 最大可穿梭上限 | number | - | - | +| targetIds | 目标框内的元素 id 集合 | number[] \| string[] | - | - | +| targetSortType | 目标框内的排序方式 | string | 'default' \| 'queue' | 'default' | + +## Events + +| 名称 | 说明 | 类型 | 参数 | 返回值 | +| -------- | -------------------------------- | ----------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ------ | +| onChange | 选中元素被移动到目标框内后的回调 | (targetKeys: number[] \| string[], direction: 'left' \| 'right', moveDatas: DataItem[]) => void | targetKeys: 目标框内的元素 ID 集合
    direction: 移动方向
    moveDatas: 移动的数据项集合 | - | ## Type diff --git a/docs/zh-CN/components/tree.mdx b/docs/zh-CN/components/tree.mdx index 8387b5296..4cbb5e7d5 100755 --- a/docs/zh-CN/components/tree.mdx +++ b/docs/zh-CN/components/tree.mdx @@ -54,37 +54,45 @@ import DemoLine from '../../demo/tree/section-line.jsx' ## Props -| 参数 | 说明 | 类型 | 可选值 | 默认值 | -| ------------------ | ----------------------------------------------------------------------- | ------------------------------------------------------------------------ | ------------------------------- | --------- | -| data | 展示数据 | DataItem [] | - | - | -| checkable | 节点前添加 Checkbox 复选框(暂不支持与 draggable 和 editable 同时使用) | boolean | true \| false | false | -| editable | 节点右键可编辑(添加同级节点、添加子节点、编辑节点、删除节点) | boolean | true \| false | false | -| draggable | 节点可拖拽 | boolean | true \| false | false | -| searchable | 节点可搜索 | boolean | true \| false | false | -| highlightable | 节点高亮 | boolean | true \| false | false | -| loadTreeNode | 点击异步加载子项 | LoadTreeNode \| (id: string) => LoadTreeNode | - | - | -| defaultExpandAll | 是否默认展开所有树节点 | boolean | true \| false | false | -| defaultHighlightId | 默认高亮的节点 | string | - | - | -| checkedIds | 选中的 checkbox | string[] | - | - | -| openIcon | 表示展开的图标 | string | Icon 图标名称 | - | -| closeIcon | 表示闭合的图标 | string | Icon 图标名称 | - | -| apperance | 树形控件的展现形态 | string | 'default' \| 'line' \| 'folder' | 'default' | -| contextMenu | 自定义右键菜单,参考 _示例_ 及 _页面底部自定义右键菜单使用说明_ | ContextMenuOption[] \| (item: DataItem,level: number) => ContextMenuOption[] | | [] | -| onChange | 树组件改变时触发 | (data: TreeNode[]) => void | - | - | -| onExpand | 节点被点击(展开/收起)时触发 | (expanded: boolean, expandIds: string[], expandedNode: TreeNode) => void | - | - | -| onCheck | 点击节点多选框触发 | (checked: boolean, checkedIds: string[], checkedNode: TreeNode) => void | - | - | -| onClick | 点击节点文字时触发 | (clickNode: TreeNode) => void | - | - | -| onDragStart | 节点开始拖拽时触发 | (dragNode: TreeNode) => void | - | - | -| onDrop | 节点拖拽时触发 | (dragNode: TreeNode, dropNode: TreeNode, data: DataStatus, level: Level) => boolean | - | - | -| onDropEnd | 节点拖拽成功时触发 | (dragNode: TreeNode, dropNode: TreeNode) => void | - | - | -| onBeforeDelete | 节点删除前触发,返回 false 或者 返回一个 Promise 对象,Promise 对象 reject 时 则节点删除失败,不会触发 onDelete | (deletedNode: TreeNode, data: DataStatus, level: number) => boolean | - | - | -| onDelete | 节点删除后触发 | (deletedNode: TreeNode, data: TreeNode[]) => void | - | - | -| onBeforeSave | 节点保存新增、编辑状态时触发, 返回 false 或者 返回一个 Promise 对象,Promise 对象 reject 时则保存新增、编辑失败,不会触发 onSave | (savedNode: TreeNode, data: DataStatus, level: number) => boolean | - | - | -| onSave | 节点保存新增、编辑状态后触发 | (savedNode: TreeNode, data: TreeNode[]) => void | - | - | +| 参数 | 说明 | 类型 | 可选值 | 默认值 | +| ------------------ | ----------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ------------------------------- | --------- | +| data | 展示数据 | DataItem [] | - | - | +| checkable | 节点前添加 Checkbox 复选框(暂不支持与 draggable 和 editable 同时使用) | boolean | true \| false | false | +| editable | 节点右键可编辑(添加同级节点、添加子节点、编辑节点、删除节点) | boolean | true \| false | false | +| draggable | 节点可拖拽 | boolean | true \| false | false | +| searchable | 节点可搜索 | boolean | true \| false | false | +| selectable | 节点是否可选中 | boolean | true \| false | true | +| onLoadChildren | 点击异步加载子项 | (treeNode: TreeNode) => LoadChildren | - | - | +| defaultExpandAll | 是否默认展开所有树节点 | boolean | true \| false | false | +| defaultSelectedId | 默认选中的节点 | string | - | - | +| selectedId | 选中的节点 | string | - | - | +| defaultCheckedIds | 默认选中的复选框的节点 | string[] | - | - | +| checkedIds | 选中的复选框的节点 | string[] | - | - | +| defaultExpandedIds | 默认展开的节点 | string[] | - | - | +| expandedIds | 展开的节点 | string[] | - | - | +| openIcon | 表示展开的图标 | string | Icon 图标名称 | - | +| closeIcon | 表示闭合的图标 | string | Icon 图标名称 | - | +| apperance | 树形控件的展现形态 | string | 'default' \| 'line' \| 'folder' | 'default' | +| contextMenu | 自定义右键菜单,参考 _示例_ 及 _页面底部自定义右键菜单使用说明_ | ContextMenuOption[] \| (item: DataItem, level: number) => ContextMenuOption[] | | [] | + +## Events + +| 名称 | 说明 | 类型 | 参数 | 返回值 | +| -------------- | ----------------------------------------------------------- | ----------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| onExpand | 节点被点击(展开/收起)时触发 | (expandedNode: TreeNode, expanded: boolean, expandIds: string[] ) => void | expandedNode: 点击的树节点
    expanded: 点击的节点展开状态
    expandIds: 当前展开的树节点 ID 集合 | - | +| onCheck | 点击节点多选框触发 | (checked: boolean, checkedIds: string[], checkedNode: TreeNode) => void | checked: 点击节点是否被勾选
    checkedIds: 选中/半选节点数据;`{checkedIds: array, semiCheckedIds: array}`
    checkedNode: 操作的节点对象 | - | +| onSelect | 点击节点时触发 | (selectedNode: TreeNode) => void | selectedNode: 选中的树节点 | - | +| onDragStart | 节点开始拖拽时触发 | (dragNode: TreeNode) => void | dragNode: 拖拽的节点对象 | - | +| onDrop | 节点放开时触发 | (dragNode: TreeNode, dropNode: TreeNode, data: DataStatus, level: Level) => boolean | dragNode: 拖拽的节点对象
    dropNode: 目标节点对象
    data:当前结构数据 `DataStatus`
    level:当前级别数据 | - | +| onDropEnd | 节点拖拽成功时触发 | (dragNode: TreeNode, dropNode: TreeNode) => void | dragNode: 拖拽的节点对象
    dropNode: 目标节点对象 | - | +| onBeforeDelete | 节点删除前触发,返回 false 则节点删除失败,不会触发 onDelete | (deletedNode: TreeNode, data: DataStatus, level: number) => boolean | deletedNode: 要删除的节点对象
    data:当前结构数据 `DataStatus`
    level:当前级别数据 | boolean: 返回 false 将阻止删除 | +| onDelete | 节点删除后触发 | (deletedNode: TreeNode, data: TreeNode[]) => void | deletedNode: 删除的节点对象
    data: 删除后的节点数据集合 | - | +| onBeforeSave | 节点保存新增、编辑状态时触发 | (savedNode: TreeNode, data: DataStatus, level: number) => boolean | savedNode: 要保存的数据对象
    data:当前结构数据 `DataStatus`
    level:当前级别数据 | boolean: 返回 false 则保存新增、编辑失败,不会触发 onSave | +| onSave | 节点保存新增、编辑状态后触发 | (savedNode: TreeNode, data: TreeNode[]) => void | savedNode: 保存的数据对象
    data: 保存后的节点数据集合 | - | ## Type -### LoadTreeNode +### LoadChildren | 参数 | 说明 | 类型 | 可选值 | 默认值 | | ----------------- | ---------------------------------------------------------- | -------------------------------- | --------------- | ------ | @@ -103,21 +111,21 @@ import DemoLine from '../../demo/tree/section-line.jsx' | title | 树节点标题 | string \| ReactNode | - | - | | disabled | 是否禁用节点 | boolean | true \| false | false | | children | 该节点的子节点 | TreeNode[] | - | - | +| isLeaf | 是否为叶子节点 | boolean | true \| false | - | ### Level -| 参数 | 说明 | 类型 | 可选值 | 默认值 | -| -------- | -------------- | ------------------- | ------------- | ------ | -| before | 拖拽前在树中的层级 | number | - | - | -| after | 拖拽后在树中的层级 | number | - | - | +| 参数 | 说明 | 类型 | 可选值 | 默认值 | +| ------ | ------------------ | ------ | ------ | ------ | +| before | 拖拽前在树中的层级 | number | - | - | +| after | 拖拽后在树中的层级 | number | - | - | ### DataStatus -| 参数 | 说明 | 类型 | 可选值 | 默认值 | -| -------- | -------------- | ------------------- | ------------- | ------ | -| before | 更新前整个树的数据结构 | []TreeNode | - | - | -| after | 更新后整个树的数据结构 | []TreeNode | - | - | - +| 参数 | 说明 | 类型 | 可选值 | 默认值 | +| ------ | ---------------------- | ---------- | ------ | ------ | +| before | 更新前整个树的数据结构 | []TreeNode | - | - | +| after | 更新后整个树的数据结构 | []TreeNode | - | - | ### ContextMenuOption diff --git a/docs/zh-CN/components/typography.mdx b/docs/zh-CN/components/typography.mdx index 0728689a2..f0d9394ce 100644 --- a/docs/zh-CN/components/typography.mdx +++ b/docs/zh-CN/components/typography.mdx @@ -1,75 +1,125 @@ -# Typography 排版 +### 基本用法 -

    下面是 HIUI 对默认内容标签的排版样式,为文章内容的容器增加名为 `entry` 的 className 即可。

    +# 相信美好的事情即将发生 -## 标题 +

    +小米公司正式成立于2010年4月,是一家以手机、智能硬件和 IoT 平台为核心的互联网公司。创业仅7年时间,小米的年收入就突破了千亿元人民币。 +截止2018年,小米的业务遍及全球80多个国家和地区。 +

    -
    -

    一级标题

    -

    二级标题

    -

    三级标题

    -

    四级标题

    -
    五级标题
    -
    六级标题
    -
    - -## 段落 - -[小米](https://www.mi.com/)公司正式成立于 2010 年 4 月,是一家专注于**高端智能手机**、**互联网电视**以及**智能家居生态链建设**的创新型科技企业。 - -_“让每个人都能享受科技的乐趣”_是小米公司的愿景。小米公司应用了互联网开发模式开发产品的模式,用极客精神做产品,用互联网模式干掉中间环节,致力于让全球每个人,都能享用来自中国的优质科技产品。 +

    +目前,小米是全球第四大智能手机制造商,在30余个国家和地区的手机市场进入了前五名,特别是在印度,连续5个季度保持手机出货量第一。通过 +独特的“生态链模式”,小米投资、带动了更多志同道合的创业者,同时建成了连接超过1.3亿台智能设备的IoT平台。。 +

    -> 小米的 LOGO 是一个“MI”形,是 Mobile Internet 的缩写,代表小米是一家移动互联网公司。 另外,小米的 LOGO 倒过来是一个心字,少一个点,意味着小米要让我们的用户省一点心。 -> -> 小米名字由来 +### 小米的使命愿景 -我们没有森严的等级,每一位员工都是平等的,每一位同事都是自己的伙伴。 +

    小米的使命是,始终坚持做“感动人心,价格厚道”的好产品,让全球每个人都能享受科技带来的美好生活。

    -小米崇尚创新、快速的互联网文化。我们讨厌冗长的会议和流程,在轻松的伙伴式工作氛围中发挥自己的创意。 +## 列表用法 -我们相信用户就是驱动力,我们坚持“为发烧而生”的产品理念。 - -## 列表 +### 符号 - 小米手机 +- 小米平板电脑 +- 小米手环 - 小米电视 - 1. 小米电视 4 - 1. 小米电视 4A - 1. 小米电视 3S -- 小米盒子 - - 小米盒子 1 - - 小米盒子 1S - - 小米盒子 2 - - 小米盒子 3 + - 小米电视5C + - 小米电视5 + - 小米电视5 Pro - 小米路由器 -1. 大陆 -1. 东南亚 -1. 印度 -1. 印尼 -1. 泰国 -1. 韩国 -1. 欧洲 - -- 意大利 -- 法国 -- 俄罗斯 -- 西班牙 +### 数字 + +1. 小米手机 +2. 小米平板电脑 +3. 小米手环 +4. 小米电视 + 1. 小米电视5C + 2. 小米电视5 + 3. 小米电视5 Pro +5. 小米路由器 + +## 属性用法 + +
    +

    + 手机型号 + 小米10青春版 +

    +

    + CPU + 晓龙 765 +

    +

    + 后置摄像头 + 4800万+800万+800万像素 +

    +

    + 前置摄像头 + 1600万像素 +

    +

    + 屏幕分辨率 + 2400*1080 FHD+ +

    +
    -1. 美国 -1. 阿拉伯 +## 标题用法 -
    -
    属性A
    -
    数据A
    -
    属性B
    -
    数据B
    -
    属性C
    -
    数据C
    -
    +
    +

    一级标题

    +

    二级标题

    +

    三级标题

    +

    四级标题

    +
    小标题
    +
    -
    +## 标题用法 + +

    + 目前,小米是全球第四大智能手机制造商,在30余个国家和地区的手机市场进入了前五名,特别是在印度,连续5个季度保持手机出货量第一。通过独特的“生态链模式”,小米投资、带动了更多志同道合的创业者,同时建立成了链接… + 展开 +

    + +

    +目前,小米是全球第四大智能手机制造商,在30余个国家和地区的手机市场进入了前五名,特别是在印度,连续5个季度保持手机出货量第一。通过独特的“生态链模式”,小米投资、带动了更多志同道合的创业者,同时建成了连接超过1.3亿台智能设备的IoT平台。 +

    + +## 操作用法 + +import Icon from '../../../components/icon' +import Tooltip from '../../../components/tooltip' +import Grid from '../../../components/grid' +import Input from '../../../components/input' +import Alert from '../../../components/alert' + + + +

    让每个人都能享受科技的乐趣

    +
    + +

    让每个人都能享受科技的乐趣

    +
    +
    + + +

    让每个人都能享受科技的乐趣

    +
    + +

    让每个人都能享受科技的乐趣

    +
    +
    + + + + + + + + -## 其它 -使用 command + option + i 开启「开发者工具」查看对应代码。 diff --git a/docs/zh-CN/components/upgrade-from-1x.mdx b/docs/zh-CN/components/upgrade-from-1x.mdx deleted file mode 100755 index b12c4b923..000000000 --- a/docs/zh-CN/components/upgrade-from-1x.mdx +++ /dev/null @@ -1,30 +0,0 @@ -# 从 v1.x 升级至 v2.x - -HIUI v2.0.0 是一次大版本更新,在此次迭代中,我们主要对 HIUI 进行了如下升级: - -- 对现有 HIUI 组件的 API 进行了统一的梳理和规范,新的 API 将会更加语义化、一致化,从而提升整体的易用性和开发体验。 -- 新增 Tag 、Message 组件 -- 对一些组件进行了视觉美化和升级 - -**_ 为了保证大家关心的 API 稳定性问题,后续 HIUI 的升级将严格遵循 [Semver](https://semver.org/lang/zh-CN/) 语义化版本规范 _** - -即便大版本升级有诸多 API 变动,我们依旧为 1.x 的用户提供了最大程度的向前支持。如果你的项目正在从 1.x 升级,请参考下面的升级指南。 - -## 从 1.4.x/1.5.x 升级至 2.0.0 - -基于 1.4.x 和 1.5.x 版本开发的功能,可通过为下列组件批量增加 `legacy={true}` 标识来让其保持使用旧版 API,从而让项目无痛过渡到 2.x 版本(即旧代码可以稳定运行,同时可在新功能开发使用 2.x 的新特性)。 - -- `` -- `` -- `` -- `` -- `` -- `
    +
    @@ -52,19 +153,27 @@ HIUI 系统的主题色源自大自然色彩的灵感。从深海、天空、薰 ## 基础色板 -HIUI 系统级色彩体系源自大自然色彩的灵感。基础色板共 42 个颜色,包括 6 个主题色和 36 个衍生色。主题色为色板第 4 个颜色。色板中 1-3 的色值依次增加了 50%、30%、20% 的白(#ffffff);5-7 的色值依次增加了 10%、30%、40% 的黑(#000000)。这些颜色基本可以满足中后台设计中对于颜色的需求(主题色或插画)。 +HiUI 系统级色彩体系源自大自然色彩的灵感。基础色板共 42 个颜色,包括 6 个主题色和 36 个衍生色。主题色为色板第 4 个颜色。色板中 1-3 的色值依次增加了 50%、30%、20% 的白(#ffffff);5-7 的色值依次增加了 10%、30%、40% 的黑(#000000)。这些颜色基本可以满足中后台设计中对于颜色的需求(主题色或插画)。 -
    - 深海蓝 -
    深海蓝 #4285F4
    + 深海蓝 +
    + 深海蓝 #4285F4 +
    - 活力橙 -
    活力橙 #FF6633
    + 活力橙 +
    + 活力橙 #FF6633 +
    - 橘青 -
    橘青 #46BC99
    + 橘青 +
    + 橘青 #46BC99 +
    - 洋红 -
    洋红 #FF5975
    + 洋红 +
    + 洋红 #FF5975 +
    - 薰衣草 -
    薰衣草 #B450DE
    + 薰衣草 +
    + 薰衣草 #B450DE +
    - 天蓝 -
    天蓝 #3DA8F5
    + 天蓝 +
    + 天蓝 #3DA8F5 +
    +
    @@ -72,13 +181,21 @@ HIUI 系统级色彩体系源自大自然色彩的灵感。基础色板共 42 @@ -86,13 +203,21 @@ HIUI 系统级色彩体系源自大自然色彩的灵感。基础色板共 42 @@ -101,18 +226,30 @@ HIUI 系统级色彩体系源自大自然色彩的灵感。基础色板共 42 ## 功能色 -HIUI 功能色代表了明确的信息以及状态,比如成功、失败、提醒、链接等,我们遵循用户对颜色的习惯性认知。建议在同一套产品体系下,功能色尽量 保持一致,不要过分的自定义干扰用户使用体验。 +HiUI 功能色代表了明确的信息以及状态,比如成功、失败、提醒、链接等,我们遵循用户对颜色的习惯性认知。建议在同一套产品体系下,功能色尽量 保持一致,不要过分的自定义干扰用户使用体验。 -功能色 +功能色 ## 辅助色 -HIUI 辅助色主要用于文字部分,以及悬停、分割线、背景、边框等。在 HIUI DESIGN 设计体系中,辅助色是一致的,与所选择的主题无关。 +HiUI 辅助色主要用于文字部分,以及悬停、分割线、背景、边框等。在 HiUI DESIGN 设计体系中,辅助色是一致的,与所选择的主题无关。 -辅助色 +辅助色 ## 字色 -HIUI 字体颜色,共四种。标题颜色、正文颜色、辅助颜色和禁用颜色。在 HIUI 设计体系中,文字颜色是一致的,与所选择的主题无关。 +HiUI 字体颜色,共四种。标题颜色、正文颜色、辅助颜色和禁用颜色。在 HiUI 设计体系中,文字颜色是一致的,与所选择的主题无关。 -字色 +字色 diff --git a/docs/zh-CN/designs/copy.mdx b/docs/zh-CN/designs/copy.mdx index 72579ad91..eb432cdbc 100644 --- a/docs/zh-CN/designs/copy.mdx +++ b/docs/zh-CN/designs/copy.mdx @@ -6,91 +6,95 @@ ### 一致性:同一种含义出现多个地方时,表达的词汇、句式是一致的。 -
    - 深海蓝 + 深海蓝
    深海蓝 - 深邃 / 理性
    - 活力橙 + 活力橙
    活力橙 - 活泼 / 张扬
    - 橘青 + 橘青
    橘青 - 恬淡 / 悠闲
    - 洋红 + 洋红
    洋红 - 热情 / 奔放
    - 薰衣草 + 薰衣草
    薰衣草 - 优雅 / 浪漫
    - 天蓝 + 天蓝
    天蓝 - 辽阔 / 自然
    +
    - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + +
    类型正确示范错误示范
    类型正确示范错误示范
    - 词汇 - -

    量词

    -

    名词

    -

    动词

    -

    称谓

    -

    动宾

    -
    -

    手机的量词是“部”

    -

    核心概念的统一,如晋升

    -

    结合语境统一动词,如发布

    -

    统一称谓,如TA

    -

    统一提示用词,如立即登录

    -
    -

    一部手机,一台手机,一个手机

    -

    晋升、升职、评级

    -

    已发布,已提交,已完成

    -

    TA,他,她,它

    -

    立即登录,马上登录,请登录

    -
    - 句式 - -

    提示语

    -

    语序一致

    -
    -

    同一个意思,句式一致,如“数据未保存 将造成丢失,是否要保存?”

    -

    同一个句式,语序一致,如“图片上传失败”

    -
    -

    “数据未保存将造成丢失,是否要保存?”、 “数据还未保存,确定要退出吗?”

    -

    “图片上传失败”、“上传图片失败”

    -
    - 入口与页面标题 - -

    入口的内容与页面标题一致

    -
    -

    入口:我收藏的
    页面标题:我的收藏、收藏、收藏列表

    -
    - 特殊格式 - -

    日期时间

    -

    数字

    -

    标点符号

    -
    -

    统一格式,如YY年MM月DD月HH:mm

    -

    大写数字和阿拉伯数字不能有,比如: 一台设备

    -

    保持同类信息的符号一致,如“中国/北京”, “小米8,小米9,红米pro”

    -
    -

    2019年10月02日 00:00,
    2019-10-02 00:00:00,09/10/02

    -

    一台设备,1台设备

    -

    “中国/北京”、“中国-北京”
    “小米8;小米9;红米pro”

    -
    词汇 +

    量词

    +

    名词

    +

    动词

    +

    称谓

    +

    动宾

    +
    +

    手机的量词是“部”

    +

    核心概念的统一,如晋升

    +

    结合语境统一动词,如发布

    +

    统一称谓,如TA

    +

    统一提示用词,如立即登录

    +
    +

    一部手机,一台手机,一个手机

    +

    晋升、升职、评级

    +

    已发布,已提交,已完成

    +

    TA,他,她,它

    +

    立即登录,马上登录,请登录

    +
    句式 +

    提示语

    +

    语序一致

    +
    +

    同一个意思,句式一致,如“数据未保存 将造成丢失,是否要保存?”

    +

    同一个句式,语序一致,如“图片上传失败”

    +
    +

    “数据未保存将造成丢失,是否要保存?”、 “数据还未保存,确定要退出吗?”

    +

    “图片上传失败”、“上传图片失败”

    +
    入口与页面标题 +

    入口的内容与页面标题一致

    +
    +

    + 入口:我收藏的 +
    + 页面标题:我的收藏、收藏、收藏列表 +

    +
    特殊格式 +

    日期时间

    +

    数字

    +

    标点符号

    +
    +

    统一格式,如YY年MM月DD月HH:mm

    +

    大写数字和阿拉伯数字不能有,比如: 一台设备

    +

    保持同类信息的符号一致,如“中国/北京”, “小米8,小米9,红米pro”

    +
    +

    + 2019年10月02日 00:00, +
    + 2019-10-02 00:00:00,09/10/02 +

    +

    一台设备,1台设备

    +

    + “中国/北京”、“中国-北京” +
    + “小米8;小米9;红米pro” +

    +
    @@ -103,7 +107,7 @@ ## 语气口吻 -用户和产品交互时的用语标注,传达信息时的态度和方式。HIUI 面向企业环境,应给予用户亲切、友好、专业和热情的交谈体验。 +用户和产品交互时的用语标注,传达信息时的态度和方式。HiUI 面向企业环境,应给予用户亲切、友好、专业和热情的交谈体验。 ### 称谓 diff --git a/docs/zh-CN/designs/design-values.mdx b/docs/zh-CN/designs/design-values.mdx index cd055bc13..6d8d78dbd 100644 --- a/docs/zh-CN/designs/design-values.mdx +++ b/docs/zh-CN/designs/design-values.mdx @@ -2,11 +2,15 @@ 设计价值观,或设计理念,是设计师在设计过程中的主导思想,也是设计作品的灵魂和精髓,好的设计理念可以为设计师提供明晰的设计定位和目标,同时也可以为产品设计人员带来启发和引领。 -HIUI 的设计价值观是以为用户带来舒适美好的用户体验为出发点、以产品体系化为目标而制定并坚持的。 +HiUI 的设计价值观是以为用户带来舒适美好的用户体验为出发点、以产品体系化为目标而制定并坚持的。 ## 组装与拆解 -组装与拆解 +组装与拆解 ### 模块化设计 @@ -18,7 +22,11 @@ HIUI 的设计价值观是以为用户带来舒适美好的用户体验为出发 ## 体系化 -体系化 +体系化 ### 布局 diff --git a/docs/zh-CN/designs/icon.mdx b/docs/zh-CN/designs/icon.mdx index daf60089e..afbc0f8b7 100644 --- a/docs/zh-CN/designs/icon.mdx +++ b/docs/zh-CN/designs/icon.mdx @@ -12,40 +12,65 @@ 请统一在画布大小为 1024x1024px,单元格为 64x64px(1024/16=64) 的画板中绘制。 -基础图标 - - +基础图标 + +
    - 深海蓝 + 深海蓝
    圆形图标
    - 活力橙 + 活力橙
    纵向矩形图标
    - 橘青 + 橘青
    水平矩形图标
    - 洋红 + 洋红
    正方形图标
    -因为 HIUI 基础图标尺寸规定为 16x16px,这里展示一些常用图标样式。更多图标可见:组件 - 图标 > +因为 HiUI 基础图标尺寸规定为 16x16px,这里展示一些常用图标样式。更多图标可见:组件 - 图标 > -更多图标 +更多图标 ### 圆角 @@ -60,6 +85,10 @@ 功能图标作为特殊图标,一般用于首页的功能入口,图标与基础图标不同,活泼、鲜明、清晰是功能图标的特点。 在画布大小为 48 x 48 的画布绘制。 -功能图标 +功能图标 -HIUI 功能图标规定尺寸为 48x48px,这里展示一些功能图标样式。更多可见:组件 - 图标 > +HiUI 功能图标规定尺寸为 48x48px,这里展示一些功能图标样式。更多可见:组件 - 图标 > diff --git a/docs/zh-CN/designs/layout.mdx b/docs/zh-CN/designs/layout.mdx index 47c633d26..9a2ed8f21 100644 --- a/docs/zh-CN/designs/layout.mdx +++ b/docs/zh-CN/designs/layout.mdx @@ -1,12 +1,16 @@ # 布局 -布局是对信息在页面分布的空间规划,友好的布局可以展示给用户清晰的信息结构。目前 HIUI 定义了三种布局。 +布局是对信息在页面分布的空间规划,友好的布局可以展示给用户清晰的信息结构。目前 HiUI 定义了三种布局。 ## 上下结构-顶部导航-定宽居中 适用于门户类网站,一级导航数量在 5-7 个,可支持 3 级以上信息层级。 -上下结构-顶部导航-定宽居中 +上下结构-顶部导航-定宽居中 ## 左右结构-侧导-通栏 @@ -20,4 +24,8 @@ 适用于信息系统或应用系统,信息层级和业务发展中等,内容信息量较大时使用,可收起侧边栏。 -左右结构-通栏 +左右结构-通栏 diff --git a/docs/zh-CN/designs/navigation.mdx b/docs/zh-CN/designs/navigation.mdx index f9db6348c..a50656b0d 100644 --- a/docs/zh-CN/designs/navigation.mdx +++ b/docs/zh-CN/designs/navigation.mdx @@ -6,56 +6,88 @@ 常见的导航模型有以下几种: - +
    - - - - - - + + + + + +
    -
    - 充分连接型 -
    充分连接型
    -

    所有页面彼此连接,每个页面都有全局导航,如顶部导航

    -
    -
    -
    - 多级导航 -
    多级导航
    -

    最低级页面间只能平级连接,通过全局导航到达主页面,如侧边导航

    -
    -
    -
    - 金字塔导航 -
    金字塔导航
    -

    由一个中心页面列出所有子页面, 选择任何一个跳到该页面

    -
    -
    -
    - 渐进导航 -
    渐进导航
    -

    幻灯片放映、过程图、向导模式

    -
    -
    +
    + 充分连接型 +
    充分连接型
    +

    所有页面彼此连接,每个页面都有全局导航,如顶部导航

    +
    +
    +
    + 多级导航 +
    多级导航
    +

    最低级页面间只能平级连接,通过全局导航到达主页面,如侧边导航

    +
    +
    +
    + 金字塔导航 +
    金字塔导航
    +

    由一个中心页面列出所有子页面, 选择任何一个跳到该页面

    +
    +
    +
    + 渐进导航 +
    渐进导航
    +

    幻灯片放映、过程图、向导模式

    +
    +
    -HIUI 的导航结构结合实际业务、布局结构等因素,选用了其中几种模型。 +HiUI 的导航结构结合实际业务、布局结构等因素,选用了其中几种模型。 ## 顶部导航 运用了充分连接型模型,可支持三级以上的导航结构 -导航 +导航 胖菜单 -胖菜单 +胖菜单 -## 顶部导航 +## 侧边导航 运用了充分连接模型,可支持三级以上的导航结构 -导航 -导航 +导航 +导航 diff --git a/docs/zh-CN/designs/overview.mdx b/docs/zh-CN/designs/overview.mdx index f1d38b4da..6b1dc45d6 100644 --- a/docs/zh-CN/designs/overview.mdx +++ b/docs/zh-CN/designs/overview.mdx @@ -2,17 +2,24 @@ 设计模式是从宏观的角度对信息结构、页面关系和界面元素间关系进行定义的抽象框架,可对设计师在设计过程中做出指引,同时提升团队对设计的整体认知,从而节约沟通成本,有序推进项目进度。 -HIUI 的设计模式,基于对现有业务系统的环境和现状和HIUI自身的定位而生成的,目的是形成业务系统的统一性。 +HiUI 的设计模式,基于对现有业务系统的环境和现状和 HiUI 自身的定位而生成的,目的是形成业务系统的统一性。 ## 信息框架 多样组件组合成区块,区块的布局形成模板。 -信息框架 - +信息框架 ## 交互架构 定义页面模板之间的跳转关系,实际业务场景中,可按情况调整。 -交互架构 +交互架构 diff --git a/docs/zh-CN/designs/palette.mdx b/docs/zh-CN/designs/palette.mdx index fc073f707..b0a072fa6 100644 --- a/docs/zh-CN/designs/palette.mdx +++ b/docs/zh-CN/designs/palette.mdx @@ -1,3 +1,3 @@ # 配色主题 -HIUI 设计规范支持一定程度的样式定制,以满足业务和品牌上多样化的视觉需求。包括但不限与主色、圆角、边框和部分组件的样式定制。 +HiUI 设计规范支持一定程度的样式定制,以满足业务和品牌上多样化的视觉需求。包括但不限与主色、圆角、边框和部分组件的样式定制。 diff --git a/docs/zh-CN/designs/summarize.mdx b/docs/zh-CN/designs/summarize.mdx index 6f840b05b..5cac4fb7e 100644 --- a/docs/zh-CN/designs/summarize.mdx +++ b/docs/zh-CN/designs/summarize.mdx @@ -1,21 +1,25 @@ # 概述 -## 为什么做 HIUI +## 为什么做 HiUI 小米信息部的中后台信息系统数量百余个,业务范围覆盖物流、销售、企业办公、数据、供应链等多个领域,而每个系统来源于相互独立的项目团队,在视觉表现和交互行为上呈现出多样化现象,不仅带来了成倍增长的人力成本,低效的项目效率,也导致用户的学习门槛高,培训成本变高,用户体验却不尽人意。 -为此,我们成立了专业的项目团队打造了 HIUI,致力提供丰富的界面组件和模板满足复杂多样的业务需求,HIUI 的出现带来了以下优势。 +为此,我们成立了专业的项目团队打造了 HiUI,致力提供丰富的界面组件和模板满足复杂多样的业务需求,HiUI 的出现带来了以下优势。 - 有效释放前端开发资源,缩短项目的开发周期 - 提供丰富的组件库和模板库,提高产品经理的设计原型效率 - 形成有统一视觉风格和交互一致的系列化的中后台系统 - 拥有美好、高效的用户体验 -## 认识 HIUI +## 认识 HiUI -HIUI 是一个以用户体验一致性为出发点,为研发工程师提供类型全面的组件库和页面模板的 UI 框架。 +HiUI 是一个以用户体验一致性为出发点,为研发工程师提供类型全面的组件库和页面模板的 UI 框架。 -认识 HIUI +认识 HIUI ## 目标 diff --git a/docs/zh-CN/docs/changelog.mdx b/docs/zh-CN/docs/changelog.mdx new file mode 100644 index 000000000..cdb350621 --- /dev/null +++ b/docs/zh-CN/docs/changelog.mdx @@ -0,0 +1,90 @@ +# 更新日志 + +## 3.0.0 + +- 新增:`Slider` 滑块组件 [#1225](https://github.com/XiaoMi/hiui/issues/1225) +- 新增:`SelectTree` 树形选择器组件 [#1231](https://github.com/XiaoMi/hiui/issues/1231) +- 新增:`List` 列表组件 [#1226](https://github.com/XiaoMi/hiui/issues/1226) +- 新增:`Filter` 筛选组件 [#1227](https://github.com/XiaoMi/hiui/issues/1227) +- 新增:`Search` 搜索组件 [#1228](https://github.com/XiaoMi/hiui/issues/1228) +- 新增:`Drawer` 抽屉组件 [#1229](https://github.com/XiaoMi/hiui/issues/1229) +- 新增:`RichTextEditor` 富文本编辑器 [#1236](https://github.com/XiaoMi/hiui/issues/1236) +- 新增:`CodeEditor` 代码编辑器使用示例 +- 新增常见图表样式支持(基于 echarts 封装)[#388](https://github.com/XiaoMi/hiui/issues/388) +- 全新的 `Form` 组件 [#1234](https://github.com/XiaoMi/hiui/issues/1234) + - 新增 `SchemaForm`,可通过 Schema 配置使用 `Form`。 + - 新增 `useForm`,通过 `Form.useForm` 对表单数据域进行交互。 + - 新增 `Form.List`,方便对表单项进行增加删除 + - 新增 `Submit`、`Reset` 等快捷组件,方便用户重置和提交数据 + - 优化表单中的表单项值的管理,不再由用户进行 `setState` + - 优化 `Form` 输出数据的内容格式,用户可通过设置 `field` 进行相关格式的设置 + - 优化表单的校验相关功能 +- 全新的 `DatePicker` 组件 [#1235](https://github.com/XiaoMi/hiui/issues/1234) + - 优化快捷选项功能,允许用户自定义快捷选项 + - 优化选择日期相关交互 + - 优化日期面板相关样式 +- 全新的 `Icon` 组件 [#1224](https://github.com/XiaoMi/hiui/issues/1224) + - 内部改为 svg 实现方式 + - 重新调整视觉效果 + - 新增大量图标 +- 全新的 `Tree` 组件 [#1232](https://github.com/XiaoMi/hiui/issues/1232) + - 调整了 Tree 的内部实现,提升了性能 + - 样式进行了优化 + - 优化了 api +- 全新的 `Table` 组件 [#359](https://github.com/XiaoMi/hiui/issues/359) + - 优化了 api + - 视觉交互重新调整 + - 支持树形表格 + - 支持列对齐 + - 支持动态控制列宽 + - 支持标准模式 + - 支持控制行高亮 + - 支持控制列高亮 + - 优化了列冻结 + - 优化了表头吸顶 + - 优化了列调整,支持调整列的顺序 +- 全新的 `Rate` 组件 [#1237](https://github.com/XiaoMi/hiui/issues/1237) + - 支持自定义字体图标,文字甚至图片以及评分选中颜色 + - 支持根据评分自定义渲染图标 + - 优化辅助文字显示位置 + - 新增只读形态。 +- `Breadcrumb` 组件升级 [#1230](https://github.com/XiaoMi/hiui/issues/1230) + - 修正最后一级的 hover 时的高亮效果 +- `Cascader` 组件升级 + - 修正了受控、非受控模式 +- `Dropdown` 组件升级 [#1238](https://github.com/XiaoMi/hiui/issues/1238) + - 修正选项具有 `href` 属性时点击可跳转 +- `Select` 组件升级 + - 新增 `fieldNames` API,方便根据返回数据显示下拉框的内容 + - 新增 `showJustSelected` API,方便快速对下拉选项进行操作 + - 新增下拉数据的**分组**展示形式 + - 优化 `dataSource`,请求数据方式以及支持返回多种类型 + - 修正多选异步数据回显问题 +- `Switch` 组件升级 + - 修正了 onChange 的触发时机 [#1223](https://github.com/XiaoMi/hiui/issues/1223) + - 修正了受控、非受控模式 [#633](https://github.com/XiaoMi/hiui/issues/633) +- `Rate` 组件升级 [#1083](https://github.com/XiaoMi/hiui/issues/1083) + - 支持自定义辅助文字 + - 支持自定义渲染效果 +- `Tabs` 组件升级 + - 可扩展用法增加滚动条模式 [#1222](https://github.com/XiaoMi/hiui/issues/1222) + - 支持拖拽 [#641](https://github.com/XiaoMi/hiui/issues/641) +- `Card` 组件升级 [#1220](https://github.com/XiaoMi/hiui/issues/1220) + - 样式调整 + - 废弃 extraType 属性 + - 新增 showHeaderDivider 属性展示卡片头部的分割线 +- `Modal` 组件升级 [#1221](https://github.com/XiaoMi/hiui/issues/1221) + - 进行了样式调整,重点优化了 Modal.confirm 的视觉效果 +- `Tag` 组件升级 [#1233](https://github.com/XiaoMi/hiui/issues/1233) + - 新增圆角形态 + - 新增标签组用法 +- 主题配色调整,并使用 css variable 实现主题配色的切换 [#256](https://github.com/XiaoMi/hiui/issues/256) +- 增加 Typescript 类型定义文件 [#181](https://github.com/XiaoMi/hiui/issues/181) + +## 2.x + +[更新日志汇总](https://github.com/XiaoMi/hiui/blob/master/CHANGELOG.md) + +## 1.x + +[更新日志汇总](https://github.com/XiaoMi/hiui/blob/stable/1.x/CHANGELOG.md) diff --git a/docs/zh-CN/docs/code-editor.mdx b/docs/zh-CN/docs/code-editor.mdx new file mode 100644 index 000000000..6bb8c7af1 --- /dev/null +++ b/docs/zh-CN/docs/code-editor.mdx @@ -0,0 +1,53 @@ +# CodeEditor 代码编辑器 + +一种可内嵌于在页面中,进行相关代码编辑 + +- 基于开源库[codemirror](https://codemirror.net/index.html#description) 写的一些示例 + +## 使用方法 + +1. 安装 codemirror && react-codemirror2 + +```shell +npm install react-codemirror2 codemirror --save +``` + +## 基础用法 + +import DemoBase from '../../demo/code-editor/section-base.jsx' + + + +## 其他配置 + +import DemoOtherConfig from '../../demo/code-editor/section-other-config.jsx' + + + +## JSON 编辑器 + +import Demojson from '../../demo/code-editor/section-json.jsx' + + + +## 实时预览 + +import DemoPreview from '../../demo/code-editor/section-preview.jsx' + + + +## 代码对比 + +import DemoMerge from '../../demo/code-editor/section-merge.jsx' + + + +## CodeEditor Prop + +> 详细信息请参考 [CodeMirror](https://codemirror.net/doc/manual.html#config) + +- API [react-codemirror2](https://github.com/scniro/react-codemirror2) + +### 推荐文档 + +- [CodeMirror-Demo](https://codemirror.net/demo/) diff --git a/docs/zh-CN/docs/hi-request.mdx b/docs/zh-CN/docs/hi-request.mdx new file mode 100644 index 000000000..a175ca3b1 --- /dev/null +++ b/docs/zh-CN/docs/hi-request.mdx @@ -0,0 +1,639 @@ +# HiRequest 【hi-got】 + +为了方便以及统一大家对于数据请求的方式,HiUI 特封装请求工具 HiRequest + +### 快速使用 + +```javascript +import HiRequest from '@hi-ui/hiui/es/hi-request' + +HiRequest.get('/user?ID=12345').then((response) => { + // handle success + console.log(response) +}) +``` + +### 支持 AMD/CJS/ESM 模块引入 + +```js + +// ESM +import HiRequest Tool from 'hi-request'; + +//cjs +const HiRequest = require('hi-request'); + +// AMD +require(['hi-request'],function(){ + ... +}) + +// script 脚本 + + +``` + +## Get 请求 + +```javascript +// 简单的 Get 请求示例 +// Make a request for a user with a given ID +HiRequest.get('/user?ID=12345') + .then(function (response) { + // handle success + console.log(response) + }) + .catch(function (error) { + // handle error + console.log(error) + }) + .then(function () { + // always executed + }) + +// 上面的请求也可以这样做 +HiRequest.get('/user', { + params: { + ID: 12345 + } +}) + .then(function (response) { + console.log(response) + }) + .catch(function (error) { + console.log(error) + }) + .then(function () { + // always executed + }) + +// 想要使用 async/await ? 将' async '关键字添加到外部函数/方法中。 +async function getUser() { + try { + const response = await HiRequest.get('/user?ID=12345') + console.log(response) + } catch (error) { + console.error(error) + } +} +``` + +## POST 请求 + +```js +// 一个简单的post请求 +HiRequest({ + method: 'post', + url: '/user/12345', + data: { + firstName: 'Fred', + lastName: 'Flintstone' + } +}) +``` + +```javascript +HiRequest.post('/user', { + firstName: 'Fred', + lastName: 'Flintstone' +}) + .then(function (response) { + console.log(response) + }) + .catch(function (error) { + console.log(error) + }) +``` + +## 执行多个并发请求 + +```js +function getUserAccount() { + return HiRequest.get('/user/12345') +} + +function getUserPermissions() { + return HiRequest.get('/user/12345/permissions') +} + +HiRequest.all([getUserAccount(), getUserPermissions()]).then( + HiRequest.spread(function (acct, perms) { + // Both requests are now complete + }) +) +``` + +## Upload 上传文件 请求方法 + +```js +HiRequest.upload(({ + url: 'https://upload', // 上传地址 + name: 'filename', // 文件参数 + file: '', // 文件 + params: { + id:1 + }, // 其他参数 + withCredentials:true, + headers: { + token:'token' + }, + onUploadProgress: (event) => { + // 上传进度 + } +}).then((res) => { + if (res.status === 200) { + // 返回结果 + } else { + onerror(res.response) + } +}).catch(error => { + onerror(error.response) +}); +``` + +## Download 下载文件 请求方法 + +```js +HiRequest.download({ + url: 'https://download', // 上传地址 + filename: '下载文件名', // 文件 + params: { + id: 1 + }, // 其他参数 + withCredentials: true, + headers: { + token: 'token' + }, + // `onDownloadProgress` 允许为下载处理进度事件 + onDownloadProgress: (progressEvent) => { + // 对原生进度事件的处理 + }, + downloadSuccess: (res) => { + // 下载成功 + }, + downloadFail: (res) => { + // 下载失败 + } +}) +``` + +```js +// 获取远程图片 +HiRequest({ + method: 'get', + url: 'http://bit.ly/2mTM3nY', + responseType: 'stream' +}).then(function (response) { + response.data.pipe(fs.createWriteStream('ada_lovelace.jpg')) +}) +``` + +## HiRequest(url[, config],[host]) + +```js +HiRequest('/user/12345', { method: 'get' }, 'api') +``` + +## 更多快捷使用方式 + +##### HiRequest(config) + +##### HiRequest.get(url[, config]) + +##### HiRequest.delete(url[, config]) + +##### HiRequest.head(url[, config]) + +##### HiRequest.options(url[, config]) + +##### HiRequest.post(url[, data[, config]]) + +##### HiRequest.put(url[, data[, config]]) + +##### HiRequest.patch(url[, data[, config]]) + +##### HiRequest.upload(url[, data[, config]]) + +##### HiRequest.jsonp(url[, data[, config]]) + +## JSONP 请求 + +```js +HiRequest.jsonp('/users.jsonp') + .then(function (response) { + return response.json() + }) + .then(function (json) { + console.log('parsed json', json) + }) + .catch(function (ex) { + console.log('parsing failed', ex) + }) +``` + +## 设置 JSONP 回调参数名称,默认为'callback' + +```js +HiRequest.jsonp('/users.jsonp', { + jsonpCallback: 'custom_callback' +}) + .then(function (response) { + return response.json() + }) + .then(function (json) { + console.log('parsed json', json) + }) + .catch(function (ex) { + console.log('parsing failed', ex) + }) +``` + +## 设置 JSONP 回调函数名称,默认为带 json\_前缀的随机数 + +```javascript +HiRequest.jsonp('/users.jsonp', { + jsonpCallbackFunction: 'function_name_of_jsonp_response' +}) + .then(function (response) { + return response.json() + }) + .then(function (json) { + console.log('parsed json', json) + }) + .catch(function (ex) { + console.log('parsing failed', ex) + }) +``` + +## 设置 JSONP 请求超时,默认为 5000ms + +```javascript +HiRequest.jsonp('/users.jsonp', { + timeout: 3000 +}) + .then(function (response) { + return response.json() + }) + .then(function (json) { + console.log('parsed json', json) + }) + .catch(function (ex) { + console.log('parsing failed', ex) + }) +``` + +### `jsonpCallback`和之间的区别`jsonCallbackFunction` + +这两个功能可以很容易地相互混淆,但是有一个明显的区别。 + +默认值为 + +- `jsonpCallback`,默认值为`callback`。这是回调参数的名称 +- `jsonCallbackFunction`,默认值为`null`。这是回调函数的名称。为了使其与众不同,它是一个`jsonp_`前缀为的随机字符串`jsonp_1497658186785_39551`。如果由服务器设置,则将其保留为空白;如果回调函数名称是固定的,则将其显式设置。 + +##### Case 1: + +```js +HiRequest.jsonp('/users.jsonp', { + jsonpCallback: 'cb' +}) +``` + +请求网址将为`/users.jsonp?cb=jsonp_1497658186785_39551`,并且服务器应使用以下函数进行响应: + +```js +jsonp_1497658186785_39551( + { ...data here... } +) +``` + +##### Case 2: + +```js +HiRequest.jsonp('/users.jsonp', { + jsonpCallbackFunction: 'search_results' +}) +``` + +请求网址将为`/users.jsonp?callback=search_results`,并且服务器应始终使用名为的函数进行响应`search_results` + +```js +search_results( + { ...data here... } +) +``` + +## HiRequestAPI + +```js +{ + // `url` 上传地址必填项 + url: '/user', + + // `method` is the request method to be used when making the request + method: 'get', // default + // 添加上传文件方式 + + type: 'basics', // 如果是上传就使用upload + // 当type: 'upload'的时候;需要指定下面的参数 + file?: any, // 需要上传的文件 + name?: string, // 文件参数名称 + // 发送接口时request拦截器 可以是一个函数 也可以是数组,每个数组项都是函数 + beforeRequest: [function (config){ + // 对config进行自定义处理 + return config + }], + // 获取结果时;返回页面层面数据时候 拦截器 可以是一个函数 也可以是数组,每个数组项都是函数 + beforeResponse: [function (res){ + // 对返回结果进行自定义处理 + return res + }], + // 返回数据异常结果 可以是一个函数 也可以是数组,每个数组项都是函数 + errorResponse: [function (error){ + // 对error进行自定义处理 + console.log(error.response) + }], + // 请求异常结果 可以是一个函数 也可以是数组,每个数组项都是函数 + errorRequest: [function (error){ + // 对config进行自定义处理 + console.log(error.request) + }], + // 异常结果 返回或者其他异常都会走这个 + errorCallback: function (error){ + // 对config进行自定义处理 + console.log(err,error.request || error.response) + }, + // 如果url不是绝对地址,' baseURL '将被加在' url '前面。 + // 为HiRequest的一个实例设置' baseURL '可以方便地将相对url传递给该实例的方法。 + baseURL: 'https://some-domain.com/api/', + // 允许在请求数据被发送到服务器之前对其进行更改 + // 只适用于请求方法 'PUT', 'POST', 'PATCH'和'DELETE' + transformRequest: [function (data, headers) { + // Do whatever you want to transform the data + + return data; + }], + + // 允许之前对响应数据进行更改 + transformResponse: [function (data) { + // Do whatever you want to transform the data + + return data; + }], + + // 自定义headers + headers: {'X-Requested-With': 'XMLHttpRequest'}, + + // `params` 与请求一起发送的URL参数 + // Must be a plain object or a URLSearchParams object + params: { + ID: 12345 + }, + + data: { + firstName: 'Fred' + }, + + // 只有值没有key + data: 'Country=Brasil&City=Belo Horizonte', + + // `timeout` 指定请求超时的毫秒数(0 表示无超时时间) + // 如果请求话费了超过 `timeout` 的时间,请求将被中断 + timeout: 1000, + + // `withCredentials` 表示跨域请求时是否需要使用凭证 + withCredentials: false, // default + + // `adapter` 允许自定义处理请求,以使测试更轻松 + // 返回一个 promise 并应用一个有效的响应 (查阅 [response docs](#response-api)). + adapter: function (config) { + /* ... */ + }, + + // `auth` 表示应该使用 HTTP 基础验证,并提供凭据 + // 这将设置一个 `Authorization` 头,覆写掉现有的任意使用 `headers` 设置的自定义 `Authorization`头 + auth: { + username: 'janedoe', + password: 's00pers3cret' + }, + + // `responseType` 表示服务器响应的数据类型,可以是 'arraybuffer', 'blob', 'document', 'json', 'text', 'stream' + responseType: 'json', // default + + // `responseEncoding` indicates encoding to use for decoding responses + // Note: Ignored for `responseType` of 'stream' or client-side requests + responseEncoding: 'utf8', // default + + // `xsrfCookieName` 是用作 xsrf token 的值的cookie的名称 + xsrfCookieName: 'XSRF-TOKEN', // default + + // `xsrfHeaderName` is the name of the http header that carries the xsrf token value + xsrfHeaderName: 'X-XSRF-TOKEN', // default + + // `onUploadProgress` 允许为上传处理进度事件 + onUploadProgress: function (progressEvent) { + // Do whatever you want with the native progress event + }, + + // `onDownloadProgress` 允许为下载处理进度事件 + onDownloadProgress: function (progressEvent) { + // 对原生进度事件的处理 + }, + + // `maxContentLength` 定义允许的响应内容的最大尺寸 + maxContentLength: 2000, + + // `validateStatus` 定义对于给定的HTTP 响应状态码是 resolve 或 reject promise 。如果 `validateStatus` 返回 `true` (或者设置为 `null` 或 `undefined`),promise 将被 resolve; 否则,promise 将被 rejecte + validateStatus: function (status) { + return status >= 200 && status < 300; // default + }, + + // `maxRedirects` 定义在 node.js 中 follow 的最大重定向数目 + // 如果设置为0,将不会 follow 任何重定向 + maxRedirects: 5, // default + + // `socketPath` defines a UNIX Socket to be used in node.js. + // e.g. '/var/run/docker.sock' to send requests to the docker daemon. + // Only either `socketPath` or `proxy` can be specified. + // If both are specified, `socketPath` is used. + socketPath: null, // default + + // `httpAgent` 和 `httpsAgent` 分别在 node.js 中用于定义在执行 http 和 https 时使用的自定义代理。允许像这样配置选项: + // `keepAlive` 默认没有启用 + httpAgent: new http.Agent({ keepAlive: true }), + httpsAgent: new https.Agent({ keepAlive: true }), + + // 'proxy' 定义代理服务器的主机名称和端口 + // `auth` 表示 HTTP 基础验证应当用于连接代理,并提供凭据 + // 这将会设置一个 `Proxy-Authorization` 头,覆写掉已有的通过使用 `header` 设置的自定义 `Proxy-Authorization` 头。 + proxy: { + host: '127.0.0.1', + port: 9000, + auth: { + username: 'mikeymike', + password: 'rapunz3l' + } + }, + + // `cancelToken` 指定用于取消请求的 cancel token + // (查看后面的 Cancellation 这节了解更多) + cancelToken: new CancelToken(function (cancel) { + }) +} +``` + +## Errors 异常处理 + +```js +HiRequest.get('/user/12345').catch(function (error) { + if (error.response) { + // 请求发出后,服务器使用状态码进行响应,该状态码超出了2xx的范围 + console.log(error.response.data) + console.log(error.response.status) + console.log(error.response.headers) + } else if (error.request) { + // The request was made but no response was received + // `error.request` is an instance of XMLHttpRequest in the browser and an instance of + console.log(error.request) + } else { + // Something happened in setting up the request that triggered an Error + console.log('Error', error.message) + } + console.log(error.config) +}) +``` + +使用' validateStatus '配置选项,您可以定义应该抛出错误的 HTTP 代码。 + +```js +HiRequest.get('/user/12345', { + validateStatus: function (status) { + return status < 500 // 状态码大于或等于500时,不再进行处理 + } +}) +``` + +使用' toJSON '你得到一个对象更多的信息,关于 HTTP 错误。 + +```js +HiRequest.get('/user/12345').catch(function (error) { + console.log(error.toJSON()) +}) +``` + +## 取消请求 + +> [cancelable promises proposal](https://github.com/tc39/proposal-cancelable-promises). + +通过使用 `CancelToken.source` 生成一个标记,用作取消使用 + +```js +const CancelToken = HiRequest.CancelToken +const source = CancelToken.source() + +HiRequest.get('/user/12345', { + cancelToken: source.token +}).catch(function (thrown) { + if (HiRequest.isCancel(thrown)) { + console.log('Request canceled', thrown.message) + } else { + // handle error + } +}) + +HiRequest.post('/user/12345', { + name: 'new name', + cancelToken: source.token +}) + +// 取消这两次请求 + +source.cancel('Operation canceled by the user.') +``` + +你也可以通过传递一个 `executor` 函数给 `CancelToken` 构造函数来创建一个取消令牌: + +```js +const CancelToken = HiRequest.CancelToken +let cancel + +HiRequest.get('/user/12345', { + cancelToken: new CancelToken(function executor(c) { + // An executor function receives a cancel function as a parameter + cancel = c + }) +}) + +// cancel the request +cancel() +``` + +## 使用建议 + +```js +import HiRequest from '@hi-ui/hiui/es/hi-request' + +// 如需在自己项目中使用,一般大家会设置 统一 loading,或者公用的 header 等配置; +// 另外同时也会由 response 的状态码,做一些统一的处理,我们对此提供了一个简单的示例。 + +const HttpClient = (url, options = {}, host = 'api') => { + const { headers, ...restOptions } = options + return HiRequest( + { + url, + headers: { + token: 'user.token', + ...headers + }, + // 发送接口时request拦截器 + beforeRequest: (config) => { + // 对config进行自定义处理 + return config + }, + // 获取结果时;返回页面层面数据时候 拦截器 + beforeResponse: (res) => { + // 对返回结果进行自定义处理 + return res + }, + // 返回数据异常结果 + errorResponse: (error) => { + // 对error进行自定义处理 + console.log(error.response) + }, + // 请求异常结果 + errorRequest: (error) => { + // 对config进行自定义处理 + console.log(error.request) + }, + // 异常结果 返回或者其他异常都会走这个 + errorCallback: (error) => { + // 对config进行自定义处理 + console.log(err, error.request || error.response) + }, + ...restOptions + }, + host + ).then( + (response) => { + // if (loading) { + // closeLoading() + // } + const res = response.data + + if (res.code === 401) { + // 未登录,处理未登录的一些提醒 + return + } + + return res + }, + (error) => { + // if (loading) { + // closeLoading() + // } + throw error + } + ) +} +export default HttpClient +``` diff --git a/docs/zh-CN/components/i18n.mdx b/docs/zh-CN/docs/i18n.mdx similarity index 100% rename from docs/zh-CN/components/i18n.mdx rename to docs/zh-CN/docs/i18n.mdx diff --git a/docs/zh-CN/components/palette.mdx b/docs/zh-CN/docs/palette.mdx similarity index 90% rename from docs/zh-CN/components/palette.mdx rename to docs/zh-CN/docs/palette.mdx index 41df71f17..51c3395f5 100755 --- a/docs/zh-CN/components/palette.mdx +++ b/docs/zh-CN/docs/palette.mdx @@ -57,5 +57,13 @@ import DemoExample from '../../demo/theme/section-example.jsx' 天蓝 blue + + 紫罗兰 + purple + + + 褐石 + ocher + diff --git a/docs/zh-CN/components/quick-start.mdx b/docs/zh-CN/docs/quick-start.mdx similarity index 79% rename from docs/zh-CN/components/quick-start.mdx rename to docs/zh-CN/docs/quick-start.mdx index ba2f396ea..1536c981e 100644 --- a/docs/zh-CN/components/quick-start.mdx +++ b/docs/zh-CN/docs/quick-start.mdx @@ -1,6 +1,6 @@ # 快速上手 -HIUI 是一套适用于中后台系统的设计规范及前端组件化解决方案。 +HiUI 是一套适用于中后台系统的设计规范及前端组件化解决方案。 ## 使用脚手架安装(仅限小米集团用户) @@ -15,6 +15,7 @@ HIUI 是一套适用于中后台系统的设计规范及前端组件化解决方 ### 1. 新项目 环境依赖: + - Node >= 8.10 - Npm >= 5.2 或 Yarn >= 0.25 @@ -49,28 +50,16 @@ npm start yarn start ``` - + 完毕后,将会自动打开新的标签页 `localhost:3000`,至此 React 项目初始化完成 **目录结构** ```html -├── README.md -├── package.json -├── public -│ ├── favicon.ico -│ ├── index.html -│ └── manifest.json -├── src -│ ├── App.css -│ ├── App.js //主模块 -│ ├── App.test.js -│ ├── index.css //主样式文件 -│ ├── index.js //程序主入口 -│ ├── logo.svg -│ └── serviceWorker.js -└── yarn.lock +├── README.md ├── package.json ├── public │ ├── favicon.ico │ ├── index.html │ └── manifest.json ├── src │ ├── App.css │ +├── App.js //主模块 │ ├── App.test.js │ ├── index.css //主样式文件 │ ├── index.js //程序主入口 │ ├── logo.svg │ └── +serviceWorker.js └── yarn.lock ``` #### 1.3 安装 HIUI @@ -113,12 +102,7 @@ class App extends Component {

    Edit src/App.js and save to reload.

    - + Learn React diff --git a/docs/zh-CN/docs/theme.mdx b/docs/zh-CN/docs/theme.mdx new file mode 100644 index 000000000..18c7cb424 --- /dev/null +++ b/docs/zh-CN/docs/theme.mdx @@ -0,0 +1,159 @@ +# 主题 + +目前 HIUI 提供了两种布局主题供大家使用,分别是上下结构的 `classic` 形态和左右结构的 `genuine`。 + +## 安装与使用 + +```bash +npm i @hi-ui/classic-theme --save +``` + +```jsx +import Layout from '@hi-ui/classic-theme' + +render(, document.getElementById('app')) +``` + +## 示例 + +基于配置化实现主题布局和菜单匹配,数组中元素的层级即代表其在菜单中的层级 + +```jsx +import React, { Component } from 'react' +import { Theme } from '@hi-ui/classic-theme' + +// 路由组件 +const Mi = () =>
    小米手机
    +const RedMi = () =>
    红米手机
    +const BlackShark = () =>
    黑鲨手机
    +const TV = () =>
    小米电视
    +const SoundBox = () =>
    小米音响
    +const Robot = () =>
    米家扫地机器人
    + +// 路由菜单配置项 +const routeConfig = [ + { + name: '手机', // 一级菜单名称 + children: [ + { name: '小米', path: '/mi', component: Mi }, // 二级菜单名称、跳转路径、匹配的路由组件 + { name: '红米', path: '/red-mi', component: RedMi }, + { name: '黑鲨', path: '/black-shark', component: BlackShark } + ] + }, + { name: '电视', path: '/tv', component: TV }, // 不存在 children 属性将不会渲染二级菜单 + { + name: '智能硬件', + children: [ + { name: '音响', path: '/audio', component: SoundBox }, + { name: '扫地机器人', path: '/robot', component: Robot } + ] + } +] + +// 系统 logo 配置项 +const logoConfig = { + logoUrl: 'https://xiaomi.github.io/hiui/static/img/logo.png?241e0618fe55d933c280e38954edea05', // logo 资源地址 + name: 'HIUI Theme', // logo 名称 + url: 'https://xiaomi.github.io/hiui/#/' // 点击 logo 跳转地址 +} + +// 系统登录信息配置项 +const loginConfig = { + name: 'Mi Guest', // 登录用户 + icon: 'user', // 登录用户 icon + children: [ + , +
    + 注销 +
    + ] // 登录项菜单 +} +// 工具栏 +const toolbar = [, ] + +class App extends Component { + render() { + return // 传递各配置项供主题使用 + } +} + +export default App +``` + + + +## API + +### Theme + +| 属性名 | 描述 | 类型 | 默认值 | +| ----------------- | ---------------------------------------- | --------------------------------- | --------------------------- | +| type | 主题类型 | 'classic' \| 'genuine' | 'classic' | +| routes | 路由配置项 | Route[] | - | +| logo | 系统 logo | ReactNode | - | +| login | 系统登录配置项 | ReactNode | - | +| historyType | 路由跳转类型 | 'hashHistory' \| 'browserHistory' | 'browserHistory' | +| header | genuine 类型下的顶部功能栏 | ReactNode \| null | 不传时默认为主题自带 header | +| apperance | 主题外观配置项 | Apperance | {color:'dark'} | +| logo | 主题 logo 配置项 | Logo | - | +| login | 主题登录信息配置项 | Login | - | +| toolbar | 顶部工具栏,一般用于放置通知、全局搜索等 | ReactNode | - | +| siderTopRender | 侧边栏自定义顶部渲染区域 | toggle: boolean => ReactNode | - | +| siderBottomRender | 侧边栏自定义底部渲染区域 | toggle: boolean => ReactNode | - | +| accordion | 左侧菜单是否采用手风琴模式 | boolean | true | +| basename | 路由基础路径 | string | '/' | +| fallback | 路由无法匹配时的候补跳转 | string | - | +| onToggle | 侧边栏展开收起触发的回调 | mini: boolean => void | - | + +### type: Route + +| 属性名 | 描述 | 类型 | 默认值 | +| ------------- | ---------------------------------------- | --------- | ------ | +| name | 菜单名称 | string | - | +| icon | 菜单 icon | string | - | +| children | 子菜单配置项 | Route[] | - | +| path | 菜单跳转路径 | string | - | +| exact | 菜单跳转路径是否严格匹配对应的 component | boolean | true | +| component | 菜单对应页面组件 | ReactNode | - | +| withoutLayout | 页面组件渲染时,不显示顶部导航栏和侧边栏 | boolean | false | +| extraData | 向路由匹配的页面组件注入额外的数据 | object | - | + +### type: Apperance + +| 属性名 | 描述 | 类型 | 默认值 | +| ----------------- | -------------- | ----------------- | --------- | +| color | 主题颜色 | 'dark' \| 'light' | 'dark' | +| contentBackground | 内容区域背景色 | string | '#f6f6f6' | +| contentPadding | 内容区域内边距 | number | 0 | + +### tye: Logo + +| 属性名 | 描述 | 类型 | 默认值 | +| ------- | ------------------ | ------ | ------ | +| name | 系统名称 | string | - | +| logoUrl | logo 图片地址 | string | - | +| url | 点击 logo 跳转地址 | string | - | + +### type: Login + +| 属性名 | 描述 | 类型 | 默认值 | +| -------- | ------------- | ----------- | ------ | +| name | 登录用户姓名 | string | - | +| icon | 登录用户 icon | string | - | +| children | 登录菜单项 | ReactNode[] | - | diff --git a/docs/zh-CN/docs/upgrade-from-2x.mdx b/docs/zh-CN/docs/upgrade-from-2x.mdx new file mode 100755 index 000000000..ab3722050 --- /dev/null +++ b/docs/zh-CN/docs/upgrade-from-2x.mdx @@ -0,0 +1,83 @@ +# 从 v2.x 升级至 v3.x + +HIUI v3.0.0 是一次大版本更新,在此次迭代中,我们主要对 HIUI 进行了如下升级: + +- 新增动画效果 +- 新增 SelectTree 、List 、Filter、Search、Drawer 等组件 +- 对一些组件进行了视觉美化和升级 + +**_ 为了保证大家关心的 API 稳定性问题,后续 HIUI 的升级将严格遵循 [Semver](https://semver.org/lang/zh-CN/) 语义化版本规范 _** + +即便大版本升级有诸多 API 变动,我们依旧为 2.x 的用户提供了最大程度的向前支持。如果你的项目正在从 2.x 升级,请参考下面的升级指南。 + +## 升级准备 + +- 升级项目 React 16.12.0 以上。 + - 如果你仍在使用 React 15,请参考 [React 16](https://reactjs.org/blog/2017/09/26/react-v16.0.html#breaking-changes) 升级文档。 + - 其余 React 16 废弃生命周期 API 请参考 [迁移导引](https://reactjs.org/blog/2018/03/27/update-on-async-rendering.html#gradual-migration-path)。 + +## 从 2.15.x 升级至 3.0.0 注意事项 + +3.0.0 是基于 2.14.0 进行开发的,最大限度的对组件已有 API 进行了的兼容,但是有些组件进行的功能升级,带来一些破坏性,需要做一些调整 + +### Dropdown 下拉菜单 + +- 对 DataItem 配置 href 属性后做了优化,渲染为 a 标签,同时也支持 target 属性设置打开方式 + +### Cascader 级联选择 + +- value 由原来的非受控改为了受控 +- trigger 更名为 expandTrigger + +### Form 表单 + +** Form 在 3.0 以后升级改动较大,使用时请[参考示例](https://infra.mioffice.cn/hiui/next/zh-CN/docs/form) ** + +- 通过 `import Form, { LegacyForm } from '@hi-ui/hiui/es/form'`,其中`Form`为 3.x 组件,`LegacyForm` 为 2.x 组件 + +### Table 表格 + +** Table 在 3.0 以后升级改动较大,使用时请[参考示例](https://infra.mioffice.cn/hiui/next/zh-CN/docs/table) ** + +- 通过 `import Table, { LegacyTable } from '@hi-ui/hiui/es/table'`,其中`Table`为 3.x 组件,`LegacyTable` 为 2.x 组件 +- 原引用 hi-table 的使用请 HiUI 中的 Table,即将 `import Table from '@hi-ui/hi-table'` 更换为 `import Table from '@hi-ui/hiui/es/table'` 即可 + +### Tree 表格 + +** Tree 在 3.0 以后升级改动较大,使用时请[参考示例](https://infra.mioffice.cn/hiui/next/zh-CN/docs/tree) ** + +- 通过 `import Tree, { LegacyTree } from '@hi-ui/hiui/es/tree'`,其中`Tree`为 3.x 组件,`LegacyTree` 为 2.x 组件 + +### Switch 表格 + +** Switch 在 3.0 修正了受控功能,使用时请[参考示例](https://infra.mioffice.cn/hiui/next/zh-CN/docs/switch) ** + +- 通过 `import Switch, { LegacySwitch } from '@hi-ui/hiui/es/table'`,其中`Switch`为 3.x 组件,`LegacySwitch` 为 2.x 组件 + +### Progress 进度条 + +- type 中 warning 和 error 颜色做了调整,请注意修改 + +除上述组件以外的其余组件,我们均提供了向前兼容,但是我们建议您使用新的 API 来完成后续的开发。 + +### Modal 模态框 + +- footer 属性 不再对 1.x 进行兼容,原使用 `footers` 的请替换为 `footer` +- 样式方面,对内边距进行了调整,由原来`padding: 16px` 更改为 `padding: 24px` 请大家注意查看 + +除上述组件以外的其余组件,我们均提供了向前兼容,但是我们建议您使用新的 API 来完成后续的开发。 + +#### 组件重构 + +- `` + - Dom 结构变化,如有覆盖样式需要仔细检查。 + +# 主题 从 v2.x 升级至 v3.x + +[classic-theme](https://github.com/hiui-group/classic-theme) v3.x 升级重点解决了侧边的显示问题,优化了交互以及展示等方面,如果你的项目正在从 2.x 升级,请参考下面的升级指南。 + +- 由设计规范方面,主题 v3.x 默认设置了内边距 `24px` 和页面背景颜色 `#f6f6f6` ,为了完美兼容旧版本视觉效果,设置 `apperance={{ contentBackground: '#fff', contentPadding: 0 }}` 即可。 + +## 遇到问题 + +v3 做了非常多的细节改进和重构,我们尽可能收集了已知的所有不兼容变化和相关影响,但是有可能还是有一些场景我们没有考虑到。如果你在升级过程中遇到了问题,请到 [GitHub issues](https://github.com/XiaoMi/hiui/issues/new/choose) 进行反馈。我们会尽快响应和相应改进这篇文档。 diff --git a/gulpfile.js b/gulpfile.js index 6a8653529..96a117557 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -11,7 +11,7 @@ const cwd = process.cwd() const libDir = path.join(cwd, 'lib') const esDir = path.join(cwd, 'es') -const compile = modules => { +const compile = (modules) => { rimraf.sync(modules !== false ? libDir : esDir) const sass = gulp .src(['components/**/*.scss', '!components/**/_*.scss']) @@ -21,13 +21,13 @@ const compile = modules => { if (file.path.match(/\/style\/.*\.scss$/)) { transformSass(file.path) - .then(css => { + .then((css) => { file.contents = Buffer.from(css) file.path = file.path.replace(/\.scss$/, '.css') this.push(file) next() }) - .catch(e => { + .catch((e) => { console.error(e) }) } else { @@ -39,34 +39,40 @@ const compile = modules => { const assets = gulp .src(['components/**/*.@(png|svg|eot|ttf|woff|woff2|otf)']) .pipe(gulp.dest(modules === false ? esDir : libDir)) + const js = gulp .src(['components/**/*.@(js|jsx)']) .pipe( babel({ presets: ['@babel/preset-env', '@babel/preset-react'], - plugins: [ "@babel/plugin-transform-runtime",['transform-remove-console', { exclude: ['error', 'warn'] }]] + plugins: ['@babel/plugin-transform-runtime', ['transform-remove-console', { exclude: ['error', 'warn'] }]] + }) + ) + .pipe( + through2.obj(function (file, encoding, next) { + if (file.path.match(/\/style\/.*\.js$/)) { + const cssContent = file.contents.toString().replace(/\.scss/g, '.css') + file.contents = Buffer.from(cssContent) + this.push(file) + next() + } else { + this.push(file) + next() + } }) ) - .pipe(through2.obj(function (file, encoding, next) { - if (file.path.match(/\/style\/.*\.js$/)) { - const cssContent = file.contents.toString().replace(/\.scss/g, '.css') - file.contents = Buffer.from(cssContent) - this.push(file) - next() - } else { - this.push(file) - next() - } - })) .pipe(gulp.dest(modules === false ? esDir : libDir)) - return merge2([sass, assets, js]) + + const json = gulp.src(['components/**/*.@(json)']).pipe(gulp.dest(modules === false ? esDir : libDir)) + + const ts = gulp.src(['components/**/*.@(d.ts)']).pipe(gulp.dest(modules === false ? esDir : libDir)) + return merge2([sass, assets, js, json, ts]) } gulp.task('compile', () => compile(false)) gulp.task('carry', () => { - gulp.src(['./site/static/**/*.*']) - .pipe(gulp.dest('./dist/static')) + gulp.src(['./site/static/**/*.*']).pipe(gulp.dest('./dist/static')) }) gulp.task('default', () => { diff --git a/libs/doc-components/badge/index.jsx b/libs/doc-components/badge/index.jsx deleted file mode 100644 index 6cfb267f2..000000000 --- a/libs/doc-components/badge/index.jsx +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react' -import classNames from 'classnames' -import './index.scss' - -const prefixCls = 'doc-components-badge' - -/** - * @param {'deperacted' | 'feature' | 'warning'} type - * @param {string} text - * @param {*} {type, children, text} - * @returns - */ -export const Badge = ({ type = 'deperacted', text }) => { - const textCls = classNames(`${prefixCls}-text`, `${prefixCls}-${type}`) - return ( - -
    {text}
    -
    - ) -} diff --git a/libs/doc-components/badge/index.scss b/libs/doc-components/badge/index.scss deleted file mode 100644 index dbce2db87..000000000 --- a/libs/doc-components/badge/index.scss +++ /dev/null @@ -1,30 +0,0 @@ -$prefixCls: '.doc-components-badge' !default; - -#{$prefixCls} { - display: inline; - - &-text { - $h: 1.5em; - - display: inline-block; - transform: translateX(4px) translateY(-30%); - height: $h; - font-size: 0.8em; - border-radius: $h / 2; - color: #fff; - line-height: $h; - padding: 0 0.6em; - } - - &-deperacted { - background: #e19d0c; - } - - &-feature { - background: #4285f4; - } - - &-warning { - background: #e19d0c; - } -} diff --git a/libs/doc-components/index.js b/libs/doc-components/index.js deleted file mode 100644 index 883be942e..000000000 --- a/libs/doc-components/index.js +++ /dev/null @@ -1 +0,0 @@ -export * from './badge' diff --git a/libs/doc-viewer/components/EditorWrapper.jsx b/libs/doc-viewer/components/EditorWrapper.jsx index 042205a99..ec4e8e596 100644 --- a/libs/doc-viewer/components/EditorWrapper.jsx +++ b/libs/doc-viewer/components/EditorWrapper.jsx @@ -10,10 +10,8 @@ export default class EditorWrapper extends React.Component { innerHeight: 0, descBarHeight: 40 } - componentDidMount () { - const descBar = document.getElementsByClassName( - `${this.props.prefix}-desc-bar` - )[0] + componentDidMount() { + const descBar = document.getElementsByClassName(`${this.props.prefix}-desc-bar`)[0] this.setState({ descBarHeight: descBar.clientHeight }) this.setInnerHeight() const clipboard = new Clipboard(`.${this.props.prefix}-copy-btn`) @@ -26,19 +24,17 @@ export default class EditorWrapper extends React.Component { e.clearSelection() }) } - onCodeChange = code => { + onCodeChange = (code) => { this.props.live.onChange(code) this.setInnerHeight() } setInnerHeight = () => { - const codeViewer = document.getElementsByClassName( - `${this.props.prefix}-editor-inner` - )[0] + const codeViewer = document.getElementsByClassName(`${this.props.prefix}-editor-inner`)[0] this.setState({ innerHeight: codeViewer.clientHeight }) } - componentDidUpdate (prevProps) { + componentDidUpdate(prevProps) { if (prevProps.live.code !== this.props.live.code) { this.setInnerHeight() } @@ -50,21 +46,18 @@ export default class EditorWrapper extends React.Component { }) }, 2000) } - render () { + render() { const { copyed, innerHeight, descBarHeight } = this.state const { live: { theme, code, language }, desc, prefix } = this.props - return (
    @@ -80,7 +73,7 @@ export default class EditorWrapper extends React.Component { }} >
    - {Array.isArray(desc) ? desc.map(d =>
    {d}
    ) : desc} + {Array.isArray(desc) ? desc.map((d, index) =>
    {d}
    ) : desc}
    - {this.state.collapse ? ( - - ) : ( - - )} + {this.state.collapse ? : } {copyed ? ( - + ) : ( - + )} - + { this.editor.updateContent(code) }} > - +
    -
    +
    (this.editor = node)} + ref={(node) => (this.editor = node)} theme={theme} code={code} language={language} diff --git a/libs/doc-viewer/index.jsx b/libs/doc-viewer/index.jsx index d8a46de96..43939cb9a 100644 --- a/libs/doc-viewer/index.jsx +++ b/libs/doc-viewer/index.jsx @@ -26,8 +26,14 @@ export default class DocViewer extends React.Component { render () { const { code, scope, desc, leftOptions, rightOptions, prefix } = this.props const { leftOption, rightOption, innerHeight, descBarHeight } = this.state + const codeToShow = Array.isArray(code) - ? code.find(c => isEqual(c.opt, [leftOption, rightOption].filter(item => !!item))).code + ? code.find((c) => + isEqual( + c.opt, + [leftOption, rightOption].filter((item) => !!item) + ) + ).code : code return (
    @@ -80,7 +86,7 @@ export default class DocViewer extends React.Component { code={codeToShow} scope={scope} theme={theme} - transformCode={code => { + transformCode={(code) => { return code.replace(importRegx, '') }} > @@ -95,7 +101,7 @@ export default class DocViewer extends React.Component {
    (this.editorLive = node)} + ref={(node) => (this.editorLive = node)} desc={desc} prefix={prefix} innerHeight={innerHeight} diff --git a/libs/index.js b/libs/index.js deleted file mode 100644 index d6059de2e..000000000 --- a/libs/index.js +++ /dev/null @@ -1,2 +0,0 @@ -// eslint-disable-next-line -export * from './doc-components' diff --git a/libs/markdown/parse2demo.js b/libs/markdown/parse2demo.js index 88a0fa68c..44a48afc5 100644 --- a/libs/markdown/parse2demo.js +++ b/libs/markdown/parse2demo.js @@ -11,7 +11,7 @@ const LANG = { 'en-US': ['Show Code', 'Hide Code', 'Copy Code'] } class Demo extends Component { - constructor (props) { + constructor(props) { super(props) this.playerId = `${parseInt(Math.random() * 1e9).toString(36)}` @@ -39,21 +39,21 @@ class Demo extends Component { locale: PropTypes.string } - componentDidMount () { + componentDidMount() { this.parseType && this.renderSource(this.source[2]) } - componentWillReceiveProps (nextProps) { + componentWillReceiveProps(nextProps) { if (this.props.theme !== nextProps.theme) { setTimeout(() => this.renderSource(this.source[2]), 0) } } - blockControl () { + blockControl() { this.setState({ showBlock: !this.state.showBlock }) } - renderSource (value) { + renderSource(value) { const { locale, theme } = this.props const args = ['context', 'React', 'ReactDOM'] const argv = [this, React, ReactDOM] @@ -85,7 +85,7 @@ class Demo extends Component { new Fn(...args).apply(null, argv) } - render () { + render() { const showCode = this.state.showCode const locale = this.props.locale let ls = LANG[locale] @@ -95,97 +95,106 @@ class Demo extends Component { return (
    - { - this.parseType !== 'run' - ? ( -
    -
    { this.code = arg }}> + {this.parseType !== 'run' ? ( +
    +
    { + this.code = arg + }} + > +
    { + this.desc = arg + }} + > + {this.description && (
    { this.desc = arg }} - > - {this.description && ( -
    - )} - { - var text = this.pre - - if (document.body.createTextRange) { - var range = document.body.createTextRange() - range.moveToElementText(text) - range.select() - } else if (window.getSelection) { - var selection = window.getSelection() - range = document.createRange() - range.selectNodeContents(text) - selection.removeAllRanges() - selection.addRange(range) - } - - document.execCommand('Copy', 'false', null) - }} - > - {ls[2]} - -
    - -
     { this.pre = arg }}
    -                  >
    -                     { this.languages = arg }}
    -                      dangerouslySetInnerHTML={{
    -                        __html: Prism.highlight(
    -                          this.source[2],
    -                          Prism.languages.javascript
    -                        )
    -                      }}
    -                    />
    -                  
    -
    -
    + )} + { - let height = 0 - - if (!showCode) { - if (typeof this.state.height === 'number') { - height = this.state.height - - this.setState({ showCode: !showCode }) - } else { - const preStyles = window.getComputedStyle(this.pre) - const descStyles = window.getComputedStyle(this.desc) - - height = parseInt(preStyles.height) + parseInt(preStyles.paddingTop) * 2 + parseInt(preStyles.marginTop) + parseInt(descStyles.marginTop) * 2 + parseInt(descStyles.paddingTop) * 2 + parseInt(descStyles.height) + 'px' - - this.setState({ showCode: !showCode, height }) - } - } else { - this.setState({ showCode: !showCode }) + var text = this.pre + + if (document.body.createTextRange) { + var range = document.body.createTextRange() + range.moveToElementText(text) + range.select() + } else if (window.getSelection) { + var selection = window.getSelection() + range = document.createRange() + range.selectNodeContents(text) + selection.removeAllRanges() + selection.addRange(range) } - this.code.style.height = height + document.execCommand('Copy', 'false', null) }} > -
    - {showCode ? ls[1] : ls[0]} -
    - -
    + {ls[2]} +
    - ) : '' - } + +
     {
    +                  this.pre = arg
    +                }}
    +              >
    +                 {
    +                    this.languages = arg
    +                  }}
    +                  dangerouslySetInnerHTML={{
    +                    __html: Prism.highlight(this.source[2], Prism.languages.javascript)
    +                  }}
    +                />
    +              
    +
    +
    { + let height = 0 + + if (!showCode) { + if (typeof this.state.height === 'number') { + height = this.state.height + + this.setState({ showCode: !showCode }) + } else { + const preStyles = window.getComputedStyle(this.pre) + const descStyles = window.getComputedStyle(this.desc) + + height = + parseInt(preStyles.height) + + parseInt(preStyles.paddingTop) * 2 + + parseInt(preStyles.marginTop) + + parseInt(descStyles.marginTop) * 2 + + parseInt(descStyles.paddingTop) * 2 + + parseInt(descStyles.height) + + 'px' + + this.setState({ showCode: !showCode, height }) + } + } else { + this.setState({ showCode: !showCode }) + } + + this.code.style.height = height + }} + > +
    {showCode ? ls[1] : ls[0]}
    +
    +
    + ) : ( + '' + )}
    ) } diff --git a/package-lock.json b/package-lock.json index 5b3494beb..eb0d594a3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,2587 +1,1192 @@ { "name": "@hi-ui/hiui", - "version": "2.6.4", + "version": "3.0.0-rc.6", "lockfileVersion": 1, "requires": true, "dependencies": { "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.10.4.tgz", + "integrity": "sha1-Fo2ho26Q2miujUnA8bSMfGJJITo=", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/compat-data": { + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/compat-data/download/@babel/compat-data-7.11.0.tgz", + "integrity": "sha1-6fc+/gmvE1W3I6fzmxG61jfXyZw=", "dev": true, "requires": { - "@babel/highlight": "^7.0.0" + "browserslist": "^4.12.0", + "invariant": "^2.2.4", + "semver": "^5.5.0" } }, "@babel/core": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.7.7.tgz", - "integrity": "sha512-jlSjuj/7z138NLZALxVgrx13AOtqip42ATZP7+kYl53GvDV6+4dCek1mVUo8z8c8Xnw/mx2q3d9HWh3griuesQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.7", - "@babel/helpers": "^7.7.4", - "@babel/parser": "^7.7.7", - "@babel/template": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4", + "version": "7.11.1", + "resolved": "https://registry.npm.taobao.org/@babel/core/download/@babel/core-7.11.1.tgz?cache=0&sync_timestamp=1596578776945&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcore%2Fdownload%2F%40babel%2Fcore-7.11.1.tgz", + "integrity": "sha1-LFW2BOc6QNwhsOUmULEcZc8nZkM=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.11.0", + "@babel/helper-module-transforms": "^7.11.0", + "@babel/helpers": "^7.10.4", + "@babel/parser": "^7.11.1", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.11.0", + "@babel/types": "^7.11.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", - "json5": "^2.1.0", - "lodash": "^4.17.13", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" }, "dependencies": { - "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/generator": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.7.tgz", - "integrity": "sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", - "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", - "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", - "dev": true - }, - "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/traverse": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.4.tgz", - "integrity": "sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.4", - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - } - }, - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, "debug": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "resolved": "http://r.cnpmjs.org/debug/download/debug-4.1.1.tgz", + "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=", "dev": true, "requires": { "ms": "^2.1.1" } }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "json5": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz", - "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, "ms": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "resolved": "http://r.cnpmjs.org/ms/download/ms-2.1.2.tgz", + "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", "dev": true } } }, "@babel/generator": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.3.4.tgz", - "integrity": "sha512-8EXhHRFqlVVWXPezBW5keTiQi/rJMQTg/Y9uVCEZ0CAF3PKtCCaVRnp64Ii1ujhkoDhhF1fVsImoN4yJ2uz4Wg==", + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.11.0.tgz?cache=0&sync_timestamp=1596142927458&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fgenerator%2Fdownload%2F%40babel%2Fgenerator-7.11.0.tgz", + "integrity": "sha1-S5DHjYwSglAkVoy+g+5smvGTWFw=", "dev": true, "requires": { - "@babel/types": "^7.3.4", + "@babel/types": "^7.11.0", "jsesc": "^2.5.1", - "lodash": "^4.17.11", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" - }, - "dependencies": { - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } + "source-map": "^0.5.0" } }, "@babel/helper-annotate-as-pure": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.7.4.tgz", - "integrity": "sha512-2BQmQgECKzYKFPpiycoF9tlb5HA4lrVyAmLLVK177EcQAqjVLciUb2/R+n1boQ9y5ENV3uz2ZqiNw7QMBBw1Og==", + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.10.4.tgz?cache=0&sync_timestamp=1593522826156&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-annotate-as-pure%2Fdownload%2F%40babel%2Fhelper-annotate-as-pure-7.10.4.tgz", + "integrity": "sha1-W/DUlaP3V6w72ki1vzs7ownHK6M=", "dev": true, "requires": { - "@babel/types": "^7.7.4" - }, - "dependencies": { - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "@babel/types": "^7.10.4" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.7.4.tgz", - "integrity": "sha512-Biq/d/WtvfftWZ9Uf39hbPBYDUo986m5Bb4zhkeYDGUllF43D+nUe5M6Vuo6/8JDK/0YX/uBdeoQpyaNhNugZQ==", + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-builder-binary-assignment-operator-visitor/download/@babel/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", + "integrity": "sha1-uwt18xv5jL+f8UPBrleLhydK4aM=", "dev": true, "requires": { - "@babel/helper-explode-assignable-expression": "^7.7.4", - "@babel/types": "^7.7.4" - }, - "dependencies": { - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "@babel/helper-explode-assignable-expression": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-builder-react-jsx": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.3.0.tgz", - "integrity": "sha512-MjA9KgwCuPEkQd9ncSXvSyJ5y+j2sICHyrI0M3L+6fnS4wMSNDc1ARXsbTfbb2cXHn17VisSnU/sHFTCxVxSMw==", + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-builder-react-jsx/download/@babel/helper-builder-react-jsx-7.10.4.tgz?cache=0&sync_timestamp=1593522831822&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-builder-react-jsx%2Fdownload%2F%40babel%2Fhelper-builder-react-jsx-7.10.4.tgz", + "integrity": "sha1-gJXN2/+Fjm+pwyba7lSi8nMsHV0=", "dev": true, "requires": { - "@babel/types": "^7.3.0", - "esutils": "^2.0.0" + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/types": "^7.10.4" } }, - "@babel/helper-call-delegate": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.7.4.tgz", - "integrity": "sha512-8JH9/B7J7tCYJ2PpWVpw9JhPuEVHztagNVuQAFBVFYluRMlpG7F1CgKEgGeL6KFqcsIa92ZYVj6DSc0XwmN1ZA==", + "@babel/helper-builder-react-jsx-experimental": { + "version": "7.10.5", + "resolved": "https://registry.npm.taobao.org/@babel/helper-builder-react-jsx-experimental/download/@babel/helper-builder-react-jsx-experimental-7.10.5.tgz?cache=0&sync_timestamp=1594749282712&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-builder-react-jsx-experimental%2Fdownload%2F%40babel%2Fhelper-builder-react-jsx-experimental-7.10.5.tgz", + "integrity": "sha1-816VahmVX/CMEljkSlFabWJIZGs=", "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/generator": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.7.tgz", - "integrity": "sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", - "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", - "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", - "dev": true - }, - "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/traverse": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.4.tgz", - "integrity": "sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.4", - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - } - }, - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-module-imports": "^7.10.4", + "@babel/types": "^7.10.5" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-compilation-targets/download/@babel/helper-compilation-targets-7.10.4.tgz?cache=0&sync_timestamp=1593522816195&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-compilation-targets%2Fdownload%2F%40babel%2Fhelper-compilation-targets-7.10.4.tgz", + "integrity": "sha1-gEro4/BDdmB8x5G51H1UAnYzK9I=", + "dev": true, + "requires": { + "@babel/compat-data": "^7.10.4", + "browserslist": "^4.12.0", + "invariant": "^2.2.4", + "levenary": "^1.1.1", + "semver": "^5.5.0" } }, "@babel/helper-create-class-features-plugin": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.7.4.tgz", - "integrity": "sha512-l+OnKACG4uiDHQ/aJT8dwpR+LhCJALxL0mJ6nzjB25e5IPwqV1VOsY7ah6UB1DG+VOXAIMtuC54rFJGiHkxjgA==", + "version": "7.10.5", + "resolved": "https://registry.npm.taobao.org/@babel/helper-create-class-features-plugin/download/@babel/helper-create-class-features-plugin-7.10.5.tgz", + "integrity": "sha1-n2FEa6gOgkCwpchcb9rIRZ1vJZ0=", "dev": true, "requires": { - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-member-expression-to-functions": "^7.7.4", - "@babel/helper-optimise-call-expression": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4" - }, - "dependencies": { - "@babel/helper-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", - "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", - "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", - "dev": true - }, - "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-member-expression-to-functions": "^7.10.5", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4" } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.7.4.tgz", - "integrity": "sha512-Mt+jBKaxL0zfOIWrfQpnfYCN7/rS6GKx6CCCfuoqVVd+17R8zNDlzVYmIi9qyb2wOk002NsmSTDymkIygDUH7A==", + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-create-regexp-features-plugin/download/@babel/helper-create-regexp-features-plugin-7.10.4.tgz?cache=0&sync_timestamp=1593522831219&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-create-regexp-features-plugin%2Fdownload%2F%40babel%2Fhelper-create-regexp-features-plugin-7.10.4.tgz", + "integrity": "sha1-/dYNiFJGWaC2lZwFeZJeQlcU87g=", "dev": true, "requires": { - "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.6.0" + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-regex": "^7.10.4", + "regexpu-core": "^4.7.0" } }, "@babel/helper-define-map": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.7.4.tgz", - "integrity": "sha512-v5LorqOa0nVQUvAUTUF3KPastvUt/HzByXNamKQ6RdJRTV7j8rLL+WB5C/MzzWAwOomxDhYFb1wLLxHqox86lg==", + "version": "7.10.5", + "resolved": "https://registry.npm.taobao.org/@babel/helper-define-map/download/@babel/helper-define-map-7.10.5.tgz", + "integrity": "sha1-tTwQ23imQIABUmkrEzkxR6y5uzA=", "dev": true, "requires": { - "@babel/helper-function-name": "^7.7.4", - "@babel/types": "^7.7.4", - "lodash": "^4.17.13" - }, - "dependencies": { - "@babel/helper-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", - "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", - "dev": true - }, - "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "@babel/helper-function-name": "^7.10.4", + "@babel/types": "^7.10.5", + "lodash": "^4.17.19" } }, "@babel/helper-explode-assignable-expression": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.7.4.tgz", - "integrity": "sha512-2/SicuFrNSXsZNBxe5UGdLr+HZg+raWBLE9vC98bdYOKX/U6PY0mdGlYUJdtTDPSU0Lw0PNbKKDpwYHJLn2jLg==", + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-explode-assignable-expression/download/@babel/helper-explode-assignable-expression-7.10.4.tgz", + "integrity": "sha1-QKHNkXv/Eoj2malKdbN6Gi29jHw=", "dev": true, "requires": { - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/generator": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.7.tgz", - "integrity": "sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", - "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", - "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", - "dev": true - }, - "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/traverse": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.4.tgz", - "integrity": "sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.4", - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - } - }, - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-function-name": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", - "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-function-name/download/@babel/helper-function-name-7.10.4.tgz", + "integrity": "sha1-0tOyDFmtjEcRL6fSqUvAnV74Lxo=", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-get-function-arity": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", - "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.10.4.tgz?cache=0&sync_timestamp=1593522827189&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-get-function-arity%2Fdownload%2F%40babel%2Fhelper-get-function-arity-7.10.4.tgz", + "integrity": "sha1-mMHL6g4jMvM/mkZhuM4VBbLBm6I=", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.10.4" } }, "@babel/helper-hoist-variables": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.7.4.tgz", - "integrity": "sha512-wQC4xyvc1Jo/FnLirL6CEgPgPCa8M74tOdjWpRhQYapz5JC7u3NYU1zCVoVAGCE3EaIP9T1A3iW0WLJ+reZlpQ==", + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-hoist-variables/download/@babel/helper-hoist-variables-7.10.4.tgz?cache=0&sync_timestamp=1593521209226&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-hoist-variables%2Fdownload%2F%40babel%2Fhelper-hoist-variables-7.10.4.tgz", + "integrity": "sha1-1JsAHR1aaMpeZgTdoBpil/fJOB4=", "dev": true, "requires": { - "@babel/types": "^7.7.4" - }, - "dependencies": { - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "@babel/types": "^7.10.4" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.7.4.tgz", - "integrity": "sha512-9KcA1X2E3OjXl/ykfMMInBK+uVdfIVakVe7W7Lg3wfXUNyS3Q1HWLFRwZIjhqiCGbslummPDnmb7vIekS0C1vw==", + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/helper-member-expression-to-functions/download/@babel/helper-member-expression-to-functions-7.11.0.tgz?cache=0&sync_timestamp=1596144651395&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-member-expression-to-functions%2Fdownload%2F%40babel%2Fhelper-member-expression-to-functions-7.11.0.tgz", + "integrity": "sha1-rmnIPYTugvS0L5bioJQQk1qPJt8=", "dev": true, "requires": { - "@babel/types": "^7.7.4" - }, - "dependencies": { - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "@babel/types": "^7.11.0" } }, "@babel/helper-module-imports": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.7.4.tgz", - "integrity": "sha512-dGcrX6K9l8258WFjyDLJwuVKxR4XZfU0/vTUgOQYWEnRD8mgr+p4d6fCUMq/ys0h4CCt/S5JhbvtyErjWouAUQ==", + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-module-imports/download/@babel/helper-module-imports-7.10.4.tgz", + "integrity": "sha1-TFxUvgS9MWcKc4J5fXW5+i5bViA=", "dev": true, "requires": { - "@babel/types": "^7.7.4" - }, - "dependencies": { - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "@babel/types": "^7.10.4" } }, "@babel/helper-module-transforms": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.7.5.tgz", - "integrity": "sha512-A7pSxyJf1gN5qXVcidwLWydjftUN878VkalhXX5iQDuGyiGK3sOrrKKHF4/A4fwHtnsotv/NipwAeLzY4KQPvw==", + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.11.0.tgz?cache=0&sync_timestamp=1596142927697&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-module-transforms%2Fdownload%2F%40babel%2Fhelper-module-transforms-7.11.0.tgz", + "integrity": "sha1-sW8lAinkchGr3YSzS2RzfCqy01k=", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.7.4", - "@babel/helper-simple-access": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4", - "lodash": "^4.17.13" - }, - "dependencies": { - "@babel/helper-split-export-declaration": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", - "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", - "dev": true - }, - "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-simple-access": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/template": "^7.10.4", + "@babel/types": "^7.11.0", + "lodash": "^4.17.19" } }, "@babel/helper-optimise-call-expression": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.7.4.tgz", - "integrity": "sha512-VB7gWZ2fDkSuqW6b1AKXkJWO5NyNI3bFL/kK79/30moK57blr6NbH8xcl2XcKCwOmJosftWunZqfO84IGq3ZZg==", + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-optimise-call-expression/download/@babel/helper-optimise-call-expression-7.10.4.tgz?cache=0&sync_timestamp=1593522827576&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-optimise-call-expression%2Fdownload%2F%40babel%2Fhelper-optimise-call-expression-7.10.4.tgz", + "integrity": "sha1-UNyWQT1ZT5lad5BZBbBYk813lnM=", "dev": true, "requires": { - "@babel/types": "^7.7.4" - }, - "dependencies": { - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "@babel/types": "^7.10.4" } }, "@babel/helper-plugin-utils": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", - "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==", + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.10.4.tgz?cache=0&sync_timestamp=1593521148758&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-plugin-utils%2Fdownload%2F%40babel%2Fhelper-plugin-utils-7.10.4.tgz", + "integrity": "sha1-L3WoMSadT2d95JmG3/WZJ1M883U=", "dev": true }, "@babel/helper-regex": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.5.5.tgz", - "integrity": "sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw==", + "version": "7.10.5", + "resolved": "https://registry.npm.taobao.org/@babel/helper-regex/download/@babel/helper-regex-7.10.5.tgz?cache=0&sync_timestamp=1594749174690&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-regex%2Fdownload%2F%40babel%2Fhelper-regex-7.10.5.tgz", + "integrity": "sha1-Mt+7eYmQc8QVVXBToZvQVarlCuA=", "dev": true, "requires": { - "lodash": "^4.17.13" - }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - } + "lodash": "^4.17.19" } }, "@babel/helper-remap-async-to-generator": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.7.4.tgz", - "integrity": "sha512-Sk4xmtVdM9sA/jCI80f+KS+Md+ZHIpjuqmYPk1M7F/upHou5e4ReYmExAiu6PVe65BhJPZA2CY9x9k4BqE5klw==", + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-remap-async-to-generator/download/@babel/helper-remap-async-to-generator-7.10.4.tgz?cache=0&sync_timestamp=1593522846310&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-remap-async-to-generator%2Fdownload%2F%40babel%2Fhelper-remap-async-to-generator-7.10.4.tgz", + "integrity": "sha1-/Oi+pOlpC76SMFbe0h5UtOi2jtU=", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.7.4", - "@babel/helper-wrap-function": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4" - }, - "dependencies": { - "@babel/generator": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.7.tgz", - "integrity": "sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", - "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", - "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", - "dev": true - }, - "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/traverse": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.4.tgz", - "integrity": "sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.4", - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - } - } - }, - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-wrap-function": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-replace-supers": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.7.4.tgz", - "integrity": "sha512-pP0tfgg9hsZWo5ZboYGuBn/bbYT/hdLPVSS4NMmiRJdwWhP0IznPwN9AE1JwyGsjSPLC364I0Qh5p+EPkGPNpg==", + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-replace-supers/download/@babel/helper-replace-supers-7.10.4.tgz", + "integrity": "sha1-1YXNk4jqBuYDHkzUS2cTy+rZ5s8=", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.7.4", - "@babel/helper-optimise-call-expression": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/generator": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.7.tgz", - "integrity": "sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", - "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", - "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", - "dev": true - }, - "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/traverse": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.4.tgz", - "integrity": "sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.4", - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - } - }, - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "@babel/helper-member-expression-to-functions": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-simple-access": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.7.4.tgz", - "integrity": "sha512-zK7THeEXfan7UlWsG2A6CI/L9jVnI5+xxKZOdej39Y0YtDYKx9raHk5F2EtK9K8DHRTihYwg20ADt9S36GR78A==", + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-simple-access/download/@babel/helper-simple-access-7.10.4.tgz", + "integrity": "sha1-D1zNopRSd6KnotOoIeFTle3PNGE=", "dev": true, "requires": { - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" - }, - "dependencies": { - "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", - "dev": true - }, - "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/helper-skip-transparent-expression-wrappers/download/@babel/helper-skip-transparent-expression-wrappers-7.11.0.tgz?cache=0&sync_timestamp=1596142927780&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-skip-transparent-expression-wrappers%2Fdownload%2F%40babel%2Fhelper-skip-transparent-expression-wrappers-7.11.0.tgz", + "integrity": "sha1-7sFi8RLC9Y068K8SXju1dmUUZyk=", + "dev": true, + "requires": { + "@babel/types": "^7.11.0" } }, "@babel/helper-split-export-declaration": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz", - "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==", + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.11.0.tgz?cache=0&sync_timestamp=1596142927868&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-split-export-declaration%2Fdownload%2F%40babel%2Fhelper-split-export-declaration-7.11.0.tgz", + "integrity": "sha1-+KSRJErPamdhWKxCBykRuoOtCZ8=", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.11.0" } }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha1-p4x6clHgH2FlEtMbEK3PUq2l4NI=", + "dev": true + }, "@babel/helper-wrap-function": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.7.4.tgz", - "integrity": "sha512-VsfzZt6wmsocOaVU0OokwrIytHND55yvyT4BPB9AIIgwr8+x7617hetdJTsuGwygN5RC6mxA9EJztTjuwm2ofg==", + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-wrap-function/download/@babel/helper-wrap-function-7.10.4.tgz?cache=0&sync_timestamp=1593522846867&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-wrap-function%2Fdownload%2F%40babel%2Fhelper-wrap-function-7.10.4.tgz", + "integrity": "sha1-im9wHqsP8592W1oc/vQJmQ5iS4c=", "dev": true, "requires": { - "@babel/helper-function-name": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4" - }, - "dependencies": { - "@babel/generator": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.7.tgz", - "integrity": "sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", - "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", - "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", - "dev": true - }, - "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/traverse": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.4.tgz", - "integrity": "sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.4", - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - } - } - }, - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "@babel/helper-function-name": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helpers": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.7.4.tgz", - "integrity": "sha512-ak5NGZGJ6LV85Q1Zc9gn2n+ayXOizryhjSUBTdu5ih1tlVCJeuQENzc4ItyCVhINVXvIT/ZQ4mheGIsfBkpskg==", + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helpers/download/@babel/helpers-7.10.4.tgz", + "integrity": "sha1-Kr6w1yGv98Cpc3a54fb2XXpHUEQ=", "dev": true, "requires": { - "@babel/template": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4" - }, - "dependencies": { - "@babel/generator": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.7.tgz", - "integrity": "sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", - "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", - "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", - "dev": true - }, - "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/traverse": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.4.tgz", - "integrity": "sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.4", - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - } - } - }, - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.10.4.tgz?cache=0&sync_timestamp=1593522818552&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhighlight%2Fdownload%2F%40babel%2Fhighlight-7.10.4.tgz", + "integrity": "sha1-fRvf1ldTU4+r5sOFls23bZrGAUM=", "dev": true, "requires": { + "@babel/helper-validator-identifier": "^7.10.4", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.3.4.tgz", - "integrity": "sha512-tXZCqWtlOOP4wgCp6RjRvLmfuhnqTLy9VHwRochJBCP2nDm27JnnuFEnXFASVyQNHk36jD1tAammsCEEqgscIQ==", + "version": "7.11.3", + "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.11.3.tgz?cache=0&sync_timestamp=1596916267193&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fparser%2Fdownload%2F%40babel%2Fparser-7.11.3.tgz", + "integrity": "sha1-nh6uRnOLzQjiPoZ7q0PnuVKZqPk=", "dev": true }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.7.4.tgz", - "integrity": "sha512-1ypyZvGRXriY/QP668+s8sFr2mqinhkRDMPSQLNghCQE+GAkFtp+wkHVvg2+Hdki8gwP+NFzJBJ/N1BfzCCDEw==", + "version": "7.10.5", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-async-generator-functions/download/@babel/plugin-proposal-async-generator-functions-7.10.5.tgz", + "integrity": "sha1-NJHKvy98F5q4IGBs7Cf+0V4OhVg=", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.7.4", - "@babel/plugin-syntax-async-generators": "^7.7.4" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.10.4", + "@babel/plugin-syntax-async-generators": "^7.8.0" } }, "@babel/plugin-proposal-class-properties": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.7.4.tgz", - "integrity": "sha512-EcuXeV4Hv1X3+Q1TsuOmyyxeTRiSqurGJ26+I/FW1WbymmRRapVORm6x1Zl3iDIHyRxEs+VXWp6qnlcfcJSbbw==", + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-class-properties/download/@babel/plugin-proposal-class-properties-7.10.4.tgz?cache=0&sync_timestamp=1593522946305&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-class-properties%2Fdownload%2F%40babel%2Fplugin-proposal-class-properties-7.10.4.tgz", + "integrity": "sha1-ozv2Mto5ClnHqMVwBF0RFc13iAc=", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-create-class-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-proposal-dynamic-import": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.7.4.tgz", - "integrity": "sha512-StH+nGAdO6qDB1l8sZ5UBV8AC3F2VW2I8Vfld73TMKyptMU9DY5YsJAS8U81+vEtxcH3Y/La0wG0btDrhpnhjQ==", + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-dynamic-import/download/@babel/plugin-proposal-dynamic-import-7.10.4.tgz?cache=0&sync_timestamp=1593521117836&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-dynamic-import%2Fdownload%2F%40babel%2Fplugin-proposal-dynamic-import-7.10.4.tgz", + "integrity": "sha1-uleibLmLN3QenVvKG4sN34KR8X4=", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-dynamic-import": "^7.7.4" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-dynamic-import": "^7.8.0" } }, - "@babel/plugin-proposal-json-strings": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.7.4.tgz", - "integrity": "sha512-wQvt3akcBTfLU/wYoqm/ws7YOAQKu8EVJEvHip/mzkNtjaclQoCCIqKXFP5/eyfnfbQCDV3OLRIK3mIVyXuZlw==", + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-export-namespace-from/download/@babel/plugin-proposal-export-namespace-from-7.10.4.tgz", + "integrity": "sha1-Vw2IO5EDFjez4pWO6jxDjmLAX1Q=", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-json-strings": "^7.7.4" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" } }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.7.7.tgz", - "integrity": "sha512-3qp9I8lelgzNedI3hrhkvhaEYree6+WHnyA/q4Dza9z7iEIs1eyhWyJnetk3jJ69RT0AT4G0UhEGwyGFJ7GUuQ==", + "@babel/plugin-proposal-json-strings": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-json-strings/download/@babel/plugin-proposal-json-strings-7.10.4.tgz?cache=0&sync_timestamp=1593521072686&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-json-strings%2Fdownload%2F%40babel%2Fplugin-proposal-json-strings-7.10.4.tgz", + "integrity": "sha1-WT5ZxjUoFgIzvTIbGuvgggwjQds=", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.7.4" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.0" } }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.7.4.tgz", - "integrity": "sha512-DyM7U2bnsQerCQ+sejcTNZh8KQEUuC3ufzdnVnSiUv/qoGJp2Z3hanKL18KDhsBT5Wj6a7CMT5mdyCNJsEaA9w==", + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-logical-assignment-operators/download/@babel/plugin-proposal-logical-assignment-operators-7.11.0.tgz", + "integrity": "sha1-n4DkgsAwg8hxJd7hACa1hSfqIMg=", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.7.4" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" } }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.7.tgz", - "integrity": "sha512-80PbkKyORBUVm1fbTLrHpYdJxMThzM1UqFGh0ALEhO9TYbG86Ah9zQYAB/84axz2vcxefDLdZwWwZNlYARlu9w==", + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-nullish-coalescing-operator/download/@babel/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz?cache=0&sync_timestamp=1593521118939&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-nullish-coalescing-operator%2Fdownload%2F%40babel%2Fplugin-proposal-nullish-coalescing-operator-7.10.4.tgz", + "integrity": "sha1-AqfpYfwy5tWy2wZJ4Bv4Dd7n4Eo=", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" } }, - "@babel/plugin-syntax-async-generators": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.7.4.tgz", - "integrity": "sha512-Li4+EjSpBgxcsmeEF8IFcfV/+yJGxHXDirDkEoyFjumuwbmfCVHUt0HuowD/iGM7OhIRyXJH9YXxqiH6N815+g==", + "@babel/plugin-proposal-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-numeric-separator/download/@babel/plugin-proposal-numeric-separator-7.10.4.tgz?cache=0&sync_timestamp=1593522949557&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-numeric-separator%2Fdownload%2F%40babel%2Fplugin-proposal-numeric-separator-7.10.4.tgz", + "integrity": "sha1-zhWQ/wplrRKXCmCdeIVemkwa7wY=", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.7.4.tgz", - "integrity": "sha512-jHQW0vbRGvwQNgyVxwDh4yuXu4bH1f5/EICJLAhl1SblLs2CDhrsmCk+v5XLdE9wxtAFRyxx+P//Iw+a5L/tTg==", + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-object-rest-spread/download/@babel/plugin-proposal-object-rest-spread-7.11.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-object-rest-spread%2Fdownload%2F%40babel%2Fplugin-proposal-object-rest-spread-7.11.0.tgz", + "integrity": "sha1-vYH5Wh90Z2DqQ7bC09YrEXkK0K8=", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.10.4" } }, - "@babel/plugin-syntax-json-strings": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.7.4.tgz", - "integrity": "sha512-QpGupahTQW1mHRXddMG5srgpHWqRLwJnJZKXTigB9RPFCCGbDGCgBeM/iC82ICXp414WeYx/tD54w7M2qRqTMg==", + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-optional-catch-binding/download/@babel/plugin-proposal-optional-catch-binding-7.10.4.tgz?cache=0&sync_timestamp=1593522756062&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-optional-catch-binding%2Fdownload%2F%40babel%2Fplugin-proposal-optional-catch-binding-7.10.4.tgz", + "integrity": "sha1-Mck4MJ0kp4pJ1o/av/qoY3WFVN0=", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" } }, - "@babel/plugin-syntax-jsx": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz", - "integrity": "sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw==", + "@babel/plugin-proposal-optional-chaining": { + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-optional-chaining/download/@babel/plugin-proposal-optional-chaining-7.11.0.tgz?cache=0&sync_timestamp=1596142928022&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-optional-chaining%2Fdownload%2F%40babel%2Fplugin-proposal-optional-chaining-7.11.0.tgz", + "integrity": "sha1-3lhm0GRvav2quKVmOC/joiF1UHY=", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "^7.11.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.0" } }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.7.4.tgz", - "integrity": "sha512-mObR+r+KZq0XhRVS2BrBKBpr5jqrqzlPvS9C9vuOf5ilSwzloAl7RPWLrgKdWS6IreaVrjHxTjtyqFiOisaCwg==", + "@babel/plugin-proposal-private-methods": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-private-methods/download/@babel/plugin-proposal-private-methods-7.10.4.tgz?cache=0&sync_timestamp=1593521310990&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-private-methods%2Fdownload%2F%40babel%2Fplugin-proposal-private-methods-7.10.4.tgz", + "integrity": "sha1-sWDZcrj9ulx9ERoUX8jEIfwqaQk=", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-create-class-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.7.4.tgz", - "integrity": "sha512-4ZSuzWgFxqHRE31Glu+fEr/MirNZOMYmD/0BhBWyLyOOQz/gTAl7QmWm2hX1QxEIXsr2vkdlwxIzTyiYRC4xcQ==", + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-unicode-property-regex/download/@babel/plugin-proposal-unicode-property-regex-7.10.4.tgz", + "integrity": "sha1-RIPNpTBBzjQTt/4vAAImZd36p10=", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.7.4.tgz", - "integrity": "sha512-wdsOw0MvkL1UIgiQ/IFr3ETcfv1xb8RMM0H9wbiDyLaJFyiDg5oZvDLCXosIXmFeIlweML5iOBXAkqddkYNizg==", + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "http://r.cnpmjs.org/@babel/plugin-syntax-async-generators/download/@babel/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha1-qYP7Gusuw/btBCohD2QOkOeG/g0=", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.7.4.tgz", - "integrity": "sha512-zUXy3e8jBNPiffmqkHRNDdZM2r8DWhCB7HhcoyZjiK1TxYEluLHAvQuYnTT+ARqRpabWqy/NHkO6e3MsYB5YfA==", + "@babel/plugin-syntax-class-properties": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-class-properties/download/@babel/plugin-syntax-class-properties-7.10.4.tgz?cache=0&sync_timestamp=1593522817483&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-class-properties%2Fdownload%2F%40babel%2Fplugin-syntax-class-properties-7.10.4.tgz", + "integrity": "sha1-ZkTmoLqlWmH54yMfbJ7rbuRsEkw=", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.7.4.tgz", - "integrity": "sha512-zpUTZphp5nHokuy8yLlyafxCJ0rSlFoSHypTUWgpdwoDXWQcseaect7cJ8Ppk6nunOM6+5rPMkod4OYKPR5MUg==", + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "http://r.cnpmjs.org/@babel/plugin-syntax-dynamic-import/download/@babel/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha1-Yr+Ysto80h1iYVT8lu5bPLaOrLM=", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.7.4" + "@babel/helper-plugin-utils": "^7.8.0" } }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.7.4.tgz", - "integrity": "sha512-kqtQzwtKcpPclHYjLK//3lH8OFsCDuDJBaFhVwf8kqdnF6MN4l618UDlcA7TfRs3FayrHj+svYnSX8MC9zmUyQ==", + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-export-namespace-from/download/@babel/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha1-AolkqbqA28CUyRXEh618TnpmRlo=", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, - "@babel/plugin-transform-block-scoping": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.7.4.tgz", - "integrity": "sha512-2VBe9u0G+fDt9B5OV5DQH4KBf5DoiNkwFKOz0TCvBWvdAN2rOykCTkrL+jTLxfCAm76l9Qo5OqL7HBOx2dWggg==", + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "http://r.cnpmjs.org/@babel/plugin-syntax-json-strings/download/@babel/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha1-AcohtmjNghjJ5kDLbdiMVBKyyWo=", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "lodash": "^4.17.13" - }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - } + "@babel/helper-plugin-utils": "^7.8.0" } }, - "@babel/plugin-transform-classes": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.7.4.tgz", - "integrity": "sha512-sK1mjWat7K+buWRuImEzjNf68qrKcrddtpQo3swi9j7dUcG6y6R6+Di039QN2bD1dykeswlagupEmpOatFHHUg==", + "@babel/plugin-syntax-jsx": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-jsx/download/@babel/plugin-syntax-jsx-7.10.4.tgz", + "integrity": "sha1-Oauq48v3EMQ3PYQpSE5rohNAFmw=", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.7.4", - "@babel/helper-define-map": "^7.7.4", - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-optimise-call-expression": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4", - "globals": "^11.1.0" - }, - "dependencies": { - "@babel/helper-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", - "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", - "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", - "dev": true - }, - "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "@babel/helper-plugin-utils": "^7.10.4" } }, - "@babel/plugin-transform-computed-properties": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.7.4.tgz", - "integrity": "sha512-bSNsOsZnlpLLyQew35rl4Fma3yKWqK3ImWMSC/Nc+6nGjC9s5NFWAer1YQ899/6s9HxO2zQC1WoFNfkOqRkqRQ==", + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-logical-assignment-operators/download/@babel/plugin-syntax-logical-assignment-operators-7.10.4.tgz?cache=0&sync_timestamp=1593522984333&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-logical-assignment-operators%2Fdownload%2F%40babel%2Fplugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha1-ypHvRjA1MESLkGZSusLp/plB9pk=", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, - "@babel/plugin-transform-destructuring": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.7.4.tgz", - "integrity": "sha512-4jFMXI1Cu2aXbcXXl8Lr6YubCn6Oc7k9lLsu8v61TZh+1jny2BWmdtvY9zSUlLdGUvcy9DMAWyZEOqjsbeg/wA==", + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "http://r.cnpmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/download/@babel/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha1-Fn7XA2iIYIH3S1w2xlqIwDtm0ak=", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.7.tgz", - "integrity": "sha512-b4in+YlTeE/QmTgrllnb3bHA0HntYvjz8O3Mcbx75UBPJA2xhb5A8nle498VhxSXJHQefjtQxpnLPehDJ4TRlg==", + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-numeric-separator/download/@babel/plugin-syntax-numeric-separator-7.10.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-numeric-separator%2Fdownload%2F%40babel%2Fplugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha1-ubBws+M1cM2f0Hun+pHA3Te5r5c=", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.7.4.tgz", - "integrity": "sha512-g1y4/G6xGWMD85Tlft5XedGaZBCIVN+/P0bs6eabmcPP9egFleMAo65OOjlhcz1njpwagyY3t0nsQC9oTFegJA==", + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "http://r.cnpmjs.org/@babel/plugin-syntax-object-rest-spread/download/@babel/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha1-YOIl7cvZimQDMqLnLdPmbxr1WHE=", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.7.4.tgz", - "integrity": "sha512-MCqiLfCKm6KEA1dglf6Uqq1ElDIZwFuzz1WH5mTf8k2uQSxEJMbOIEh7IZv7uichr7PMfi5YVSrr1vz+ipp7AQ==", + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "http://r.cnpmjs.org/@babel/plugin-syntax-optional-catch-binding/download/@babel/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha1-YRGiZbz7Ag6579D9/X0mQCue1sE=", "dev": true, "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, - "@babel/plugin-transform-for-of": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.7.4.tgz", - "integrity": "sha512-zZ1fD1B8keYtEcKF+M1TROfeHTKnijcVQm0yO/Yu1f7qoDoxEIc/+GX6Go430Bg84eM/xwPFp0+h4EbZg7epAA==", + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "http://r.cnpmjs.org/@babel/plugin-syntax-optional-chaining/download/@babel/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha1-T2nCq5UWfgGAzVM2YT+MV4j31Io=", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-top-level-await/download/@babel/plugin-syntax-top-level-await-7.10.4.tgz?cache=0&sync_timestamp=1593522992017&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-top-level-await%2Fdownload%2F%40babel%2Fplugin-syntax-top-level-await-7.10.4.tgz", + "integrity": "sha1-S764kXtU/PdoNk4KgfVg4zo+9X0=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-arrow-functions/download/@babel/plugin-transform-arrow-functions-7.10.4.tgz", + "integrity": "sha1-4ilg135pfHT0HFAdRNc9v4pqZM0=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-async-to-generator/download/@babel/plugin-transform-async-to-generator-7.10.4.tgz?cache=0&sync_timestamp=1593522851748&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-async-to-generator%2Fdownload%2F%40babel%2Fplugin-transform-async-to-generator-7.10.4.tgz", + "integrity": "sha1-QaUBfknrbzzak5KlHu8pQFskWjc=", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.10.4" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-block-scoped-functions/download/@babel/plugin-transform-block-scoped-functions-7.10.4.tgz?cache=0&sync_timestamp=1593521990101&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-block-scoped-functions%2Fdownload%2F%40babel%2Fplugin-transform-block-scoped-functions-7.10.4.tgz", + "integrity": "sha1-GvpZV0T3XkOpGvc7DZmOz+Trwug=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.11.1", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-block-scoping/download/@babel/plugin-transform-block-scoping-7.11.1.tgz?cache=0&sync_timestamp=1596578803980&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-block-scoping%2Fdownload%2F%40babel%2Fplugin-transform-block-scoping-7.11.1.tgz", + "integrity": "sha1-W37+mIUr741lLAsoFEzZOp5LUhU=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-classes/download/@babel/plugin-transform-classes-7.10.4.tgz?cache=0&sync_timestamp=1593522856487&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-classes%2Fdownload%2F%40babel%2Fplugin-transform-classes-7.10.4.tgz", + "integrity": "sha1-QFE2rys+IYvEoZJiKLyRerGgrcc=", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-define-map": "^7.10.4", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-computed-properties/download/@babel/plugin-transform-computed-properties-7.10.4.tgz", + "integrity": "sha1-ne2DqBboLe0o1S1LTsvdgQzfwOs=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-destructuring/download/@babel/plugin-transform-destructuring-7.10.4.tgz", + "integrity": "sha1-cN3Ss9G+qD0BUJ6bsl3bOnT8heU=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-dotall-regex/download/@babel/plugin-transform-dotall-regex-7.10.4.tgz", + "integrity": "sha1-RpwgYhBcHragQOr0+sS0iAeDle4=", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-duplicate-keys/download/@babel/plugin-transform-duplicate-keys-7.10.4.tgz", + "integrity": "sha1-aX5Qyf7hQ4D+hD0fMGspVhdDHkc=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-exponentiation-operator/download/@babel/plugin-transform-exponentiation-operator-7.10.4.tgz?cache=0&sync_timestamp=1593522967206&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-exponentiation-operator%2Fdownload%2F%40babel%2Fplugin-transform-exponentiation-operator-7.10.4.tgz", + "integrity": "sha1-WuM4xX+M9AAb2zVgeuZrktZlry4=", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-for-of/download/@babel/plugin-transform-for-of-7.10.4.tgz?cache=0&sync_timestamp=1593521205142&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-for-of%2Fdownload%2F%40babel%2Fplugin-transform-for-of-7.10.4.tgz", + "integrity": "sha1-wIiS6IGdOl2ykDGxFa9RHbv+uuk=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.7.4.tgz", - "integrity": "sha512-E/x09TvjHNhsULs2IusN+aJNRV5zKwxu1cpirZyRPw+FyyIKEHPXTsadj48bVpc1R5Qq1B5ZkzumuFLytnbT6g==", + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-function-name/download/@babel/plugin-transform-function-name-7.10.4.tgz", + "integrity": "sha1-akZ4gOD8ljhRS6NpERgR3b4mRLc=", "dev": true, "requires": { - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0" - }, - "dependencies": { - "@babel/helper-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", - "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", - "dev": true - }, - "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-literals": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.7.4.tgz", - "integrity": "sha512-X2MSV7LfJFm4aZfxd0yLVFrEXAgPqYoDG53Br/tCKiKYfX0MjVjQeWPIhPHHsCqzwQANq+FLN786fF5rgLS+gw==", + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-literals/download/@babel/plugin-transform-literals-7.10.4.tgz?cache=0&sync_timestamp=1593521205335&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-literals%2Fdownload%2F%40babel%2Fplugin-transform-literals-7.10.4.tgz", + "integrity": "sha1-n0K6CEEQChNfInEtDjkcRi9XHzw=", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.7.4.tgz", - "integrity": "sha512-9VMwMO7i69LHTesL0RdGy93JU6a+qOPuvB4F4d0kR0zyVjJRVJRaoaGjhtki6SzQUu8yen/vxPKN6CWnCUw6bA==", + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-member-expression-literals/download/@babel/plugin-transform-member-expression-literals-7.10.4.tgz?cache=0&sync_timestamp=1593521257832&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-member-expression-literals%2Fdownload%2F%40babel%2Fplugin-transform-member-expression-literals-7.10.4.tgz", + "integrity": "sha1-sexE/PGVr8uNssYs2OVRyIG6+Lc=", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.7.5.tgz", - "integrity": "sha512-CT57FG4A2ZUNU1v+HdvDSDrjNWBrtCmSH6YbbgN3Lrf0Di/q/lWRxZrE72p3+HCCz9UjfZOEBdphgC0nzOS6DQ==", + "version": "7.10.5", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-amd/download/@babel/plugin-transform-modules-amd-7.10.5.tgz?cache=0&sync_timestamp=1594749164106&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-modules-amd%2Fdownload%2F%40babel%2Fplugin-transform-modules-amd-7.10.5.tgz", + "integrity": "sha1-G5zdrwXZ6Is6rTOcs+RFxPAgqbE=", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.7.5", - "@babel/helper-plugin-utils": "^7.0.0", - "babel-plugin-dynamic-import-node": "^2.3.0" + "@babel/helper-module-transforms": "^7.10.5", + "@babel/helper-plugin-utils": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.7.5.tgz", - "integrity": "sha512-9Cq4zTFExwFhQI6MT1aFxgqhIsMWQWDVwOgLzl7PTWJHsNaqFvklAU+Oz6AQLAS0dJKTwZSOCo20INwktxpi3Q==", + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-commonjs/download/@babel/plugin-transform-modules-commonjs-7.10.4.tgz?cache=0&sync_timestamp=1593522846595&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-modules-commonjs%2Fdownload%2F%40babel%2Fplugin-transform-modules-commonjs-7.10.4.tgz", + "integrity": "sha1-ZmZ8Pu2h6/eJbUHx8WsXEFovvKA=", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.7.5", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-simple-access": "^7.7.4", - "babel-plugin-dynamic-import-node": "^2.3.0" + "@babel/helper-module-transforms": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-simple-access": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.7.4.tgz", - "integrity": "sha512-y2c96hmcsUi6LrMqvmNDPBBiGCiQu0aYqpHatVVu6kD4mFEXKjyNxd/drc18XXAf9dv7UXjrZwBVmTTGaGP8iw==", + "version": "7.10.5", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-systemjs/download/@babel/plugin-transform-modules-systemjs-7.10.5.tgz?cache=0&sync_timestamp=1594749163311&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-modules-systemjs%2Fdownload%2F%40babel%2Fplugin-transform-modules-systemjs-7.10.5.tgz", + "integrity": "sha1-YnAJnIVAZmgbrp4F+H4bnK2+jIU=", "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0", - "babel-plugin-dynamic-import-node": "^2.3.0" + "@babel/helper-hoist-variables": "^7.10.4", + "@babel/helper-module-transforms": "^7.10.5", + "@babel/helper-plugin-utils": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.7.4.tgz", - "integrity": "sha512-u2B8TIi0qZI4j8q4C51ktfO7E3cQ0qnaXFI1/OXITordD40tt17g/sXqgNNCcMTcBFKrUPcGDx+TBJuZxLx7tw==", + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-umd/download/@babel/plugin-transform-modules-umd-7.10.4.tgz?cache=0&sync_timestamp=1593522846765&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-modules-umd%2Fdownload%2F%40babel%2Fplugin-transform-modules-umd-7.10.4.tgz", + "integrity": "sha1-moSB/oG4JGVLOgtl2j34nz0hg54=", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-module-transforms": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.7.4.tgz", - "integrity": "sha512-jBUkiqLKvUWpv9GLSuHUFYdmHg0ujC1JEYoZUfeOOfNydZXp1sXObgyPatpcwjWgsdBGsagWW0cdJpX/DO2jMw==", + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-named-capturing-groups-regex/download/@babel/plugin-transform-named-capturing-groups-regex-7.10.4.tgz", + "integrity": "sha1-eLTZeIELbzvPA/njGPL8DtQa7LY=", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.7.4" + "@babel/helper-create-regexp-features-plugin": "^7.10.4" } }, "@babel/plugin-transform-new-target": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.7.4.tgz", - "integrity": "sha512-CnPRiNtOG1vRodnsyGX37bHQleHE14B9dnnlgSeEs3ek3fHN1A1SScglTCg1sfbe7sRQ2BUcpgpTpWSfMKz3gg==", + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-new-target/download/@babel/plugin-transform-new-target-7.10.4.tgz?cache=0&sync_timestamp=1593521205540&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-new-target%2Fdownload%2F%40babel%2Fplugin-transform-new-target-7.10.4.tgz", + "integrity": "sha1-kJfXU8t7Aky3OBo7LlLpUTqcaIg=", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-object-super": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.7.4.tgz", - "integrity": "sha512-ho+dAEhC2aRnff2JCA0SAK7V2R62zJd/7dmtoe7MHcso4C2mS+vZjn1Pb1pCVZvJs1mgsvv5+7sT+m3Bysb6eg==", + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-object-super/download/@babel/plugin-transform-object-super-7.10.4.tgz?cache=0&sync_timestamp=1593522848107&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-object-super%2Fdownload%2F%40babel%2Fplugin-transform-object-super-7.10.4.tgz", + "integrity": "sha1-1xRsTROUM+emUm+IjGZ+MUoJOJQ=", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.7.4" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4" } }, "@babel/plugin-transform-parameters": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.7.7.tgz", - "integrity": "sha512-OhGSrf9ZBrr1fw84oFXj5hgi8Nmg+E2w5L7NhnG0lPvpDtqd7dbyilM2/vR8CKbJ907RyxPh2kj6sBCSSfI9Ew==", + "version": "7.10.5", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-parameters/download/@babel/plugin-transform-parameters-7.10.5.tgz", + "integrity": "sha1-WdM51Y0LGVBDX0BD504lEABeLEo=", "dev": true, "requires": { - "@babel/helper-call-delegate": "^7.7.4", - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0" - }, - "dependencies": { - "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-property-literals": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.7.4.tgz", - "integrity": "sha512-MatJhlC4iHsIskWYyawl53KuHrt+kALSADLQQ/HkhTjX954fkxIEh4q5slL4oRAnsm/eDoZ4q0CIZpcqBuxhJQ==", + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-property-literals/download/@babel/plugin-transform-property-literals-7.10.4.tgz?cache=0&sync_timestamp=1593521258372&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-property-literals%2Fdownload%2F%40babel%2Fplugin-transform-property-literals-7.10.4.tgz", + "integrity": "sha1-9v5UtlkDUimHhbg+3YFdIUxC48A=", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-react-display-name": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz", - "integrity": "sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A==", + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-react-display-name/download/@babel/plugin-transform-react-display-name-7.10.4.tgz?cache=0&sync_timestamp=1593522821324&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-react-display-name%2Fdownload%2F%40babel%2Fplugin-transform-react-display-name-7.10.4.tgz", + "integrity": "sha1-tXlfTj4xQEGcNhG3oqODK5rvMo0=", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-react-jsx": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz", - "integrity": "sha512-a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg==", + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-react-jsx/download/@babel/plugin-transform-react-jsx-7.10.4.tgz", + "integrity": "sha1-ZzyfkTlIdkpEIWg7K+8pNpaP3fI=", "dev": true, "requires": { - "@babel/helper-builder-react-jsx": "^7.3.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.2.0" + "@babel/helper-builder-react-jsx": "^7.10.4", + "@babel/helper-builder-react-jsx-experimental": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-jsx": "^7.10.4" + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-react-jsx-development/download/@babel/plugin-transform-react-jsx-development-7.10.4.tgz", + "integrity": "sha1-bskPJEOUYEYjiA4V68PDTDViWLo=", + "dev": true, + "requires": { + "@babel/helper-builder-react-jsx-experimental": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-jsx": "^7.10.4" } }, "@babel/plugin-transform-react-jsx-self": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.2.0.tgz", - "integrity": "sha512-v6S5L/myicZEy+jr6ielB0OR8h+EH/1QFx/YJ7c7Ua+7lqsjj/vW6fD5FR9hB/6y7mGbfT4vAURn3xqBxsUcdg==", + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-react-jsx-self/download/@babel/plugin-transform-react-jsx-self-7.10.4.tgz", + "integrity": "sha1-zTAaX+2JiMGC7QudVem9bbC9k2k=", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.2.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-jsx": "^7.10.4" } }, "@babel/plugin-transform-react-jsx-source": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.2.0.tgz", - "integrity": "sha512-A32OkKTp4i5U6aE88GwwcuV4HAprUgHcTq0sSafLxjr6AW0QahrCRCjxogkbbcdtpbXkuTOlgpjophCxb6sh5g==", + "version": "7.10.5", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-react-jsx-source/download/@babel/plugin-transform-react-jsx-source-7.10.5.tgz?cache=0&sync_timestamp=1594749281295&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-react-jsx-source%2Fdownload%2F%40babel%2Fplugin-transform-react-jsx-source-7.10.5.tgz", + "integrity": "sha1-NPF3kRdSCnecBU8s3ZaAQ1uSIrQ=", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.2.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-jsx": "^7.10.4" + } + }, + "@babel/plugin-transform-react-pure-annotations": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-react-pure-annotations/download/@babel/plugin-transform-react-pure-annotations-7.10.4.tgz?cache=0&sync_timestamp=1593522831272&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-react-pure-annotations%2Fdownload%2F%40babel%2Fplugin-transform-react-pure-annotations-7.10.4.tgz", + "integrity": "sha1-Pu+7c9uUr7wHXwl1I+RFNUocZQE=", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-regenerator": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.7.5.tgz", - "integrity": "sha512-/8I8tPvX2FkuEyWbjRCt4qTAgZK0DVy8QRguhA524UH48RfGJy94On2ri+dCuwOpcerPRl9O4ebQkRcVzIaGBw==", + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-regenerator/download/@babel/plugin-transform-regenerator-7.10.4.tgz?cache=0&sync_timestamp=1593521070883&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-regenerator%2Fdownload%2F%40babel%2Fplugin-transform-regenerator-7.10.4.tgz", + "integrity": "sha1-IBXlnYOQdOdoON4hWdtCGWb9i2M=", "dev": true, "requires": { - "regenerator-transform": "^0.14.0" + "regenerator-transform": "^0.14.2" } }, "@babel/plugin-transform-reserved-words": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.7.4.tgz", - "integrity": "sha512-OrPiUB5s5XvkCO1lS7D8ZtHcswIC57j62acAnJZKqGGnHP+TIc/ljQSrgdX/QyOTdEK5COAhuc820Hi1q2UgLQ==", + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-reserved-words/download/@babel/plugin-transform-reserved-words-7.10.4.tgz?cache=0&sync_timestamp=1593522816859&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-reserved-words%2Fdownload%2F%40babel%2Fplugin-transform-reserved-words-7.10.4.tgz", + "integrity": "sha1-jyaCvNzvntMn4bCGFYXXAT+KVN0=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.11.5", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-runtime/download/@babel/plugin-transform-runtime-7.11.5.tgz", + "integrity": "sha1-8Qi8jgzzPDfaAxwJfR30cLOik/w=", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "resolve": "^1.8.1", + "semver": "^5.5.1" } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.7.4.tgz", - "integrity": "sha512-q+suddWRfIcnyG5YiDP58sT65AJDZSUhXQDZE3r04AuqD6d/XLaQPPXSBzP2zGerkgBivqtQm9XKGLuHqBID6Q==", + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-shorthand-properties/download/@babel/plugin-transform-shorthand-properties-7.10.4.tgz?cache=0&sync_timestamp=1593521207009&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-shorthand-properties%2Fdownload%2F%40babel%2Fplugin-transform-shorthand-properties-7.10.4.tgz", + "integrity": "sha1-n9Jexc3VVbt/Rz5ebuHJce7eTdY=", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-spread": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.7.4.tgz", - "integrity": "sha512-8OSs0FLe5/80cndziPlg4R0K6HcWSM0zyNhHhLsmw/Nc5MaA49cAsnoJ/t/YZf8qkG7fD+UjTRaApVDB526d7Q==", + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-spread/download/@babel/plugin-transform-spread-7.11.0.tgz?cache=0&sync_timestamp=1596142928262&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-spread%2Fdownload%2F%40babel%2Fplugin-transform-spread-7.11.0.tgz", + "integrity": "sha1-+oTTAPXk9XdS/kGm0bPFVPE/F8w=", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "^7.11.0" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.7.4.tgz", - "integrity": "sha512-Ls2NASyL6qtVe1H1hXts9yuEeONV2TJZmplLONkMPUG158CtmnrzW5Q5teibM5UVOFjG0D3IC5mzXR6pPpUY7A==", + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-sticky-regex/download/@babel/plugin-transform-sticky-regex-7.10.4.tgz", + "integrity": "sha1-jziJ7oZXWBEwop2cyR18c7fEoo0=", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-regex": "^7.10.4" } }, "@babel/plugin-transform-template-literals": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.7.4.tgz", - "integrity": "sha512-sA+KxLwF3QwGj5abMHkHgshp9+rRz+oY9uoRil4CyLtgEuE/88dpkeWgNk5qKVsJE9iSfly3nvHapdRiIS2wnQ==", + "version": "7.10.5", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-template-literals/download/@babel/plugin-transform-template-literals-7.10.5.tgz", + "integrity": "sha1-eLxdYmpmQtszEtnQ8AH152Of3ow=", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.7.4.tgz", - "integrity": "sha512-KQPUQ/7mqe2m0B8VecdyaW5XcQYaePyl9R7IsKd+irzj6jvbhoGnRE+M0aNkyAzI07VfUQ9266L5xMARitV3wg==", + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-typeof-symbol/download/@babel/plugin-transform-typeof-symbol-7.10.4.tgz", + "integrity": "sha1-lQnxp+7DHE7b/+E3wWzDP/C8W/w=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-unicode-escapes/download/@babel/plugin-transform-unicode-escapes-7.10.4.tgz?cache=0&sync_timestamp=1593521262862&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-unicode-escapes%2Fdownload%2F%40babel%2Fplugin-transform-unicode-escapes-7.10.4.tgz", + "integrity": "sha1-/q5SM5HHZR3awRXa4KnQaFeJIAc=", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.4.tgz", - "integrity": "sha512-N77UUIV+WCvE+5yHw+oks3m18/umd7y392Zv7mYTpFqHtkpcc+QUz+gLJNTWVlWROIWeLqY0f3OjZxV5TcXnRw==", + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-unicode-regex/download/@babel/plugin-transform-unicode-regex-7.10.4.tgz", + "integrity": "sha1-5W1x+SgvrG2wnIJ0IFVXbV5tgKg=", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/polyfill": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.7.0.tgz", - "integrity": "sha512-/TS23MVvo34dFmf8mwCisCbWGrfhbiWZSwBo6HkADTBhUa2Q/jWltyY/tpofz/b6/RIhqaqQcquptCirqIhOaQ==", + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/polyfill/download/@babel/polyfill-7.10.4.tgz?cache=0&sync_timestamp=1593521103741&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fpolyfill%2Fdownload%2F%40babel%2Fpolyfill-7.10.4.tgz", + "integrity": "sha1-kV5b/mFJCsAZkAjjXKnX0VGo5Fo=", "dev": true, "requires": { "core-js": "^2.6.5", - "regenerator-runtime": "^0.13.2" - }, - "dependencies": { - "core-js": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", - "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==", - "dev": true - }, - "regenerator-runtime": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", - "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==", - "dev": true - } + "regenerator-runtime": "^0.13.4" } }, "@babel/preset-env": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.7.7.tgz", - "integrity": "sha512-pCu0hrSSDVI7kCVUOdcMNQEbOPJ52E+LrQ14sN8uL2ALfSqePZQlKrOy+tM4uhEdYlCHi4imr8Zz2cZe9oSdIg==", + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/preset-env/download/@babel/preset-env-7.11.0.tgz?cache=0&sync_timestamp=1596144649889&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fpreset-env%2Fdownload%2F%40babel%2Fpreset-env-7.11.0.tgz", + "integrity": "sha1-hg7jjyzhetYEgMICG6lok5Pvt5Y=", + "dev": true, + "requires": { + "@babel/compat-data": "^7.11.0", + "@babel/helper-compilation-targets": "^7.10.4", + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-proposal-async-generator-functions": "^7.10.4", + "@babel/plugin-proposal-class-properties": "^7.10.4", + "@babel/plugin-proposal-dynamic-import": "^7.10.4", + "@babel/plugin-proposal-export-namespace-from": "^7.10.4", + "@babel/plugin-proposal-json-strings": "^7.10.4", + "@babel/plugin-proposal-logical-assignment-operators": "^7.11.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4", + "@babel/plugin-proposal-numeric-separator": "^7.10.4", + "@babel/plugin-proposal-object-rest-spread": "^7.11.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.10.4", + "@babel/plugin-proposal-optional-chaining": "^7.11.0", + "@babel/plugin-proposal-private-methods": "^7.10.4", + "@babel/plugin-proposal-unicode-property-regex": "^7.10.4", + "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/plugin-syntax-class-properties": "^7.10.4", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.0", + "@babel/plugin-syntax-top-level-await": "^7.10.4", + "@babel/plugin-transform-arrow-functions": "^7.10.4", + "@babel/plugin-transform-async-to-generator": "^7.10.4", + "@babel/plugin-transform-block-scoped-functions": "^7.10.4", + "@babel/plugin-transform-block-scoping": "^7.10.4", + "@babel/plugin-transform-classes": "^7.10.4", + "@babel/plugin-transform-computed-properties": "^7.10.4", + "@babel/plugin-transform-destructuring": "^7.10.4", + "@babel/plugin-transform-dotall-regex": "^7.10.4", + "@babel/plugin-transform-duplicate-keys": "^7.10.4", + "@babel/plugin-transform-exponentiation-operator": "^7.10.4", + "@babel/plugin-transform-for-of": "^7.10.4", + "@babel/plugin-transform-function-name": "^7.10.4", + "@babel/plugin-transform-literals": "^7.10.4", + "@babel/plugin-transform-member-expression-literals": "^7.10.4", + "@babel/plugin-transform-modules-amd": "^7.10.4", + "@babel/plugin-transform-modules-commonjs": "^7.10.4", + "@babel/plugin-transform-modules-systemjs": "^7.10.4", + "@babel/plugin-transform-modules-umd": "^7.10.4", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.10.4", + "@babel/plugin-transform-new-target": "^7.10.4", + "@babel/plugin-transform-object-super": "^7.10.4", + "@babel/plugin-transform-parameters": "^7.10.4", + "@babel/plugin-transform-property-literals": "^7.10.4", + "@babel/plugin-transform-regenerator": "^7.10.4", + "@babel/plugin-transform-reserved-words": "^7.10.4", + "@babel/plugin-transform-shorthand-properties": "^7.10.4", + "@babel/plugin-transform-spread": "^7.11.0", + "@babel/plugin-transform-sticky-regex": "^7.10.4", + "@babel/plugin-transform-template-literals": "^7.10.4", + "@babel/plugin-transform-typeof-symbol": "^7.10.4", + "@babel/plugin-transform-unicode-escapes": "^7.10.4", + "@babel/plugin-transform-unicode-regex": "^7.10.4", + "@babel/preset-modules": "^0.1.3", + "@babel/types": "^7.11.0", + "browserslist": "^4.12.0", + "core-js-compat": "^3.6.2", + "invariant": "^2.2.2", + "levenary": "^1.1.1", + "semver": "^5.5.0" + } + }, + "@babel/preset-modules": { + "version": "0.1.3", + "resolved": "http://r.cnpmjs.org/@babel/preset-modules/download/@babel/preset-modules-0.1.3.tgz", + "integrity": "sha1-EyQrU7XvjIg8PPfd3VWzbOgPvHI=", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.7.4", "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-async-generator-functions": "^7.7.4", - "@babel/plugin-proposal-dynamic-import": "^7.7.4", - "@babel/plugin-proposal-json-strings": "^7.7.4", - "@babel/plugin-proposal-object-rest-spread": "^7.7.7", - "@babel/plugin-proposal-optional-catch-binding": "^7.7.4", - "@babel/plugin-proposal-unicode-property-regex": "^7.7.7", - "@babel/plugin-syntax-async-generators": "^7.7.4", - "@babel/plugin-syntax-dynamic-import": "^7.7.4", - "@babel/plugin-syntax-json-strings": "^7.7.4", - "@babel/plugin-syntax-object-rest-spread": "^7.7.4", - "@babel/plugin-syntax-optional-catch-binding": "^7.7.4", - "@babel/plugin-syntax-top-level-await": "^7.7.4", - "@babel/plugin-transform-arrow-functions": "^7.7.4", - "@babel/plugin-transform-async-to-generator": "^7.7.4", - "@babel/plugin-transform-block-scoped-functions": "^7.7.4", - "@babel/plugin-transform-block-scoping": "^7.7.4", - "@babel/plugin-transform-classes": "^7.7.4", - "@babel/plugin-transform-computed-properties": "^7.7.4", - "@babel/plugin-transform-destructuring": "^7.7.4", - "@babel/plugin-transform-dotall-regex": "^7.7.7", - "@babel/plugin-transform-duplicate-keys": "^7.7.4", - "@babel/plugin-transform-exponentiation-operator": "^7.7.4", - "@babel/plugin-transform-for-of": "^7.7.4", - "@babel/plugin-transform-function-name": "^7.7.4", - "@babel/plugin-transform-literals": "^7.7.4", - "@babel/plugin-transform-member-expression-literals": "^7.7.4", - "@babel/plugin-transform-modules-amd": "^7.7.5", - "@babel/plugin-transform-modules-commonjs": "^7.7.5", - "@babel/plugin-transform-modules-systemjs": "^7.7.4", - "@babel/plugin-transform-modules-umd": "^7.7.4", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.7.4", - "@babel/plugin-transform-new-target": "^7.7.4", - "@babel/plugin-transform-object-super": "^7.7.4", - "@babel/plugin-transform-parameters": "^7.7.7", - "@babel/plugin-transform-property-literals": "^7.7.4", - "@babel/plugin-transform-regenerator": "^7.7.5", - "@babel/plugin-transform-reserved-words": "^7.7.4", - "@babel/plugin-transform-shorthand-properties": "^7.7.4", - "@babel/plugin-transform-spread": "^7.7.4", - "@babel/plugin-transform-sticky-regex": "^7.7.4", - "@babel/plugin-transform-template-literals": "^7.7.4", - "@babel/plugin-transform-typeof-symbol": "^7.7.4", - "@babel/plugin-transform-unicode-regex": "^7.7.4", - "@babel/types": "^7.7.4", - "browserslist": "^4.6.0", - "core-js-compat": "^3.6.0", - "invariant": "^2.2.2", - "js-levenshtein": "^1.1.3", - "semver": "^5.5.0" - }, - "dependencies": { - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "browserslist": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.2.tgz", - "integrity": "sha512-+M4oeaTplPm/f1pXDw84YohEv7B1i/2Aisei8s4s6k3QsoSHa7i5sz8u/cGQkkatCPxMASKxPualR4wwYgVboA==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001015", - "electron-to-chromium": "^1.3.322", - "node-releases": "^1.1.42" - } - }, - "caniuse-lite": { - "version": "1.0.30001017", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001017.tgz", - "integrity": "sha512-EDnZyOJ6eYh6lHmCvCdHAFbfV4KJ9lSdfv4h/ppEhrU/Yudkl7jujwMZ1we6RX7DXqBfT04pVMQ4J+1wcTlsKA==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.322", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.322.tgz", - "integrity": "sha512-Tc8JQEfGQ1MzfSzI/bTlSr7btJv/FFO7Yh6tanqVmIWOuNCu6/D1MilIEgLtmWqIrsv+o4IjpLAhgMBr/ncNAA==", - "dev": true - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" } }, "@babel/preset-react": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.0.0.tgz", - "integrity": "sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w==", + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/preset-react/download/@babel/preset-react-7.10.4.tgz", + "integrity": "sha1-kuimbYFvmRHRHUzJNb5nrfyC288=", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-react-jsx-self": "^7.0.0", - "@babel/plugin-transform-react-jsx-source": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-transform-react-display-name": "^7.10.4", + "@babel/plugin-transform-react-jsx": "^7.10.4", + "@babel/plugin-transform-react-jsx-development": "^7.10.4", + "@babel/plugin-transform-react-jsx-self": "^7.10.4", + "@babel/plugin-transform-react-jsx-source": "^7.10.4", + "@babel/plugin-transform-react-pure-annotations": "^7.10.4" } }, "@babel/runtime": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.7.7.tgz", - "integrity": "sha512-uCnC2JEVAu8AKB5do1WRIsvrdJ0flYx/A/9f/6chdacnEZ7LmavjdsDXr5ksYBegxtuTPR5Va9/+13QF/kFkCA==", + "version": "7.11.2", + "resolved": "https://registry.npm.taobao.org/@babel/runtime/download/@babel/runtime-7.11.2.tgz?cache=0&sync_timestamp=1596637803941&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.11.2.tgz", + "integrity": "sha1-9UnBPHVMxAuHZEufqfCaapX+BzY=", "requires": { - "regenerator-runtime": "^0.13.2" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", - "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==" - } + "regenerator-runtime": "^0.13.4" } }, "@babel/standalone": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/standalone/-/standalone-7.7.7.tgz", - "integrity": "sha512-nlhwSzfCVWFxIfY0wL1DJkHyyDbqHNTldCAaAljzPHJ/ppYziziSoM0HJn919e54uUxtO3AAdp8CWqOn8CON/w==", + "version": "7.11.3", + "resolved": "https://registry.npm.taobao.org/@babel/standalone/download/@babel/standalone-7.11.3.tgz", + "integrity": "sha1-BD5v87EiJuQe0gE0GLmkwFXZwh4=", "dev": true }, "@babel/template": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz", - "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==", + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.10.4.tgz", + "integrity": "sha1-MlGZbEIA68cdGo/EBfupQPNrong=", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.2.2", - "@babel/types": "^7.2.2" + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/traverse": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.3.4.tgz", - "integrity": "sha512-TvTHKp6471OYEcE/91uWmhR6PrrYywQntCHSaZ8CM8Vmp+pjAusal4nGB2WCCQd0rvI7nOMKn9GnbcvTUz3/ZQ==", + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.11.0.tgz?cache=0&sync_timestamp=1596144653000&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftraverse%2Fdownload%2F%40babel%2Ftraverse-7.11.0.tgz", + "integrity": "sha1-m5ls4bmPU/fD5BdRFWBdVu0H3SQ=", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.3.4", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.0.0", - "@babel/parser": "^7.3.4", - "@babel/types": "^7.3.4", + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.11.0", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/parser": "^7.11.0", + "@babel/types": "^7.11.0", "debug": "^4.1.0", "globals": "^11.1.0", - "lodash": "^4.17.11" + "lodash": "^4.17.19" }, "dependencies": { "debug": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "resolved": "http://r.cnpmjs.org/debug/download/debug-4.1.1.tgz", + "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=", "dev": true, "requires": { "ms": "^2.1.1" } }, - "globals": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz", - "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==", - "dev": true - }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "version": "2.1.2", + "resolved": "http://r.cnpmjs.org/ms/download/ms-2.1.2.tgz", + "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", "dev": true } } }, "@babel/types": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.4.tgz", - "integrity": "sha512-WEkp8MsLftM7O/ty580wAmZzN1nDmCACc5+jFzUt+GUFNNIi3LdRlueYz0YIlmJhlZx1QYDMZL5vdWCL0fNjFQ==", + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.11.0.tgz?cache=0&sync_timestamp=1596142926693&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftypes%2Fdownload%2F%40babel%2Ftypes-7.11.0.tgz", + "integrity": "sha1-Kua/G6mujDxDgk5YYSaYcbIG6Q0=", "dev": true, "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.11", + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" - }, - "dependencies": { - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } } }, "@bougiel/puppeteer-prerenderer": { "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@bougiel/puppeteer-prerenderer/-/puppeteer-prerenderer-0.0.3.tgz", - "integrity": "sha512-WRQkCtsYLs6FAFzUxdTtRQiVA//9sRtgwBjLQgME4N34yNUyPirSCCDuLH2qMPrrOebgiIizW3JK2HTJsfmtXA==", + "resolved": "https://r.cnpmjs.org/@bougiel/puppeteer-prerenderer/download/@bougiel/puppeteer-prerenderer-0.0.3.tgz", + "integrity": "sha1-CaK+U+FfXdIrknUkr+5ObgweEy8=", "dev": true, "requires": { "@oclif/command": "^1.5.13", @@ -2597,81 +1202,117 @@ "express": "^4.17.1", "fs-extra": "^8.0.1", "puppeteer": "^1.17.0" + } + }, + "@cnakazawa/watch": { + "version": "1.0.4", + "resolved": "http://r.cnpmjs.org/@cnakazawa/watch/download/@cnakazawa/watch-1.0.4.tgz", + "integrity": "sha1-+GSuhQBND8q29QvpFBxNo2jRZWo=", + "dev": true, + "requires": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + } + }, + "@eslint/eslintrc": { + "version": "0.1.3", + "resolved": "https://registry.npm.taobao.org/@eslint/eslintrc/download/@eslint/eslintrc-0.1.3.tgz?cache=0&sync_timestamp=1598987645723&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40eslint%2Feslintrc%2Fdownload%2F%40eslint%2Feslintrc-0.1.3.tgz", + "integrity": "sha1-fRorI1hVLMBINMCXm9QnU2LjcIU=", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" }, "dependencies": { - "async": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/async/-/async-3.1.0.tgz", - "integrity": "sha512-4vx/aaY6j/j3Lw3fbCHNWP0pPaTCew3F6F3hYyl/tHs/ndmV1q7NW9T5yuJ2XAGwdQrP+6Wu20x06U4APo/iQQ==", - "dev": true + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npm.taobao.org/ajv/download/ajv-6.12.6.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.6.tgz", + "integrity": "sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "debug": { + "version": "4.2.0", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.2.0.tgz?cache=0&sync_timestamp=1600502873540&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz", + "integrity": "sha1-fxUPk5IOlMWPVXTC/QGjEQ7/5/E=", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ms": "2.1.2" } }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npm.taobao.org/globals/download/globals-12.4.0.tgz?cache=0&sync_timestamp=1596709302233&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobals%2Fdownload%2Fglobals-12.4.0.tgz", + "integrity": "sha1-oYgTV2pBsAokqX5/gVkYwuGZJfg=", "dev": true, "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "type-fest": "^0.8.1" } }, - "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npm.taobao.org/ignore/download/ignore-4.0.6.tgz?cache=0&sync_timestamp=1590809380232&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fignore%2Fdownload%2Fignore-4.0.6.tgz", + "integrity": "sha1-dQ49tYYgh7RzfrrIIH/9HvJ7Jfw=", "dev": true }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true + "import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npm.taobao.org/import-fresh/download/import-fresh-3.2.1.tgz", + "integrity": "sha1-Yz/2GFBueTr1rJG/SLcmd+FcvmY=", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "js-yaml": { + "version": "3.14.0", + "resolved": "https://registry.npm.taobao.org/js-yaml/download/js-yaml-3.14.0.tgz?cache=0&sync_timestamp=1590172281856&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-yaml%2Fdownload%2Fjs-yaml-3.14.0.tgz", + "integrity": "sha1-p6NBcPJqIbsWJCTYray0ETpp5II=", "dev": true, "requires": { - "has-flag": "^3.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz", + "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", + "dev": true + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/resolve-from/download/resolve-from-4.0.0.tgz", + "integrity": "sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY=", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-3.1.1.tgz?cache=0&sync_timestamp=1594567582667&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-json-comments%2Fdownload%2Fstrip-json-comments-3.1.1.tgz", + "integrity": "sha1-MfEoGzgyYwQ0gxwxDAHMzajL4AY=", + "dev": true } } }, - "@cnakazawa/watch": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz", - "integrity": "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==", + "@hi-ui/classic-theme": { + "version": "1.2.5", + "resolved": "https://r.cnpmjs.org/@hi-ui/classic-theme/download/@hi-ui/classic-theme-1.2.5.tgz", + "integrity": "sha1-noWDOUmML9hB7bqMl1DEfwZzOxw=", "dev": true, - "requires": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "@hi-ui/classic-theme": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@hi-ui/classic-theme/-/classic-theme-1.2.5.tgz", - "integrity": "sha512-ULppuhun48QKT4YSyUPHbep3PrngTvWy6jnJZuA1fEMfzzAkgwrbaYB1PJQ43IbdmEne+gfWaIug6YHYSRqxbA==", "requires": { "@hi-ui/core-css": "^1.0.0", "classnames": "^2.2.6", @@ -2687,168 +1328,427 @@ "dependencies": { "@hi-ui/core-css": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@hi-ui/core-css/-/core-css-1.0.0.tgz", - "integrity": "sha512-thsMNnm/Wk6TcB003dKqyr7y+Bg3JhdxAmZ3vrBxRO8q5L3x5SvHssFmTP2EEJ/fu5udAOEo46w9+L0he94H7g==" + "resolved": "http://r.cnpmjs.org/@hi-ui/core-css/download/@hi-ui/core-css-1.0.0.tgz", + "integrity": "sha1-j30bchFmalocg3GL6VFaEZAk2Ps=", + "dev": true } } }, "@hi-ui/core-css": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@hi-ui/core-css/-/core-css-2.0.1.tgz", - "integrity": "sha512-r9Upmf27iN0A9hEcgcNxEWNDqMHjmtbGBhq/imqe44B01PmiHQkVlyjhGWJxHNJ78J2pQOAzd9yPO6s4K5AKIw==" + "resolved": "http://r.cnpmjs.org/@hi-ui/core-css/download/@hi-ui/core-css-2.0.1.tgz", + "integrity": "sha1-y6BwL5LGPYSldV+zeNqtKzpgaNM=" }, "@jest/console": { - "version": "24.7.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.7.1.tgz", - "integrity": "sha512-iNhtIy2M8bXlAOULWVTUxmnelTLFneTNEkHCgPmgd+zNwy9zVddJ6oS5rZ9iwoscNdT5mMwUd0C51v/fSlzItg==", + "version": "24.9.0", + "resolved": "http://r.cnpmjs.org/@jest/console/download/@jest/console-24.9.0.tgz", + "integrity": "sha1-ebG8Bvt0qM+wHL3t+UVYSxuXB/A=", "dev": true, "requires": { - "@jest/source-map": "^24.3.0", + "@jest/source-map": "^24.9.0", "chalk": "^2.0.1", "slash": "^2.0.0" + }, + "dependencies": { + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/slash/download/slash-2.0.0.tgz", + "integrity": "sha1-3lUoUaF1nfOo8gZTVEL17E3eq0Q=", + "dev": true + } } }, "@jest/core": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.8.0.tgz", - "integrity": "sha512-R9rhAJwCBQzaRnrRgAdVfnglUuATXdwTRsYqs6NMdVcAl5euG8LtWDe+fVkN27YfKVBW61IojVsXKaOmSnqd/A==", + "version": "24.9.0", + "resolved": "http://r.cnpmjs.org/@jest/core/download/@jest/core-24.9.0.tgz", + "integrity": "sha1-LOzNC5MYH5xIUOdPKprUPTUTacQ=", "dev": true, "requires": { "@jest/console": "^24.7.1", - "@jest/reporters": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", + "@jest/reporters": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", "ansi-escapes": "^3.0.0", "chalk": "^2.0.1", "exit": "^0.1.2", "graceful-fs": "^4.1.15", - "jest-changed-files": "^24.8.0", - "jest-config": "^24.8.0", - "jest-haste-map": "^24.8.0", - "jest-message-util": "^24.8.0", + "jest-changed-files": "^24.9.0", + "jest-config": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-message-util": "^24.9.0", "jest-regex-util": "^24.3.0", - "jest-resolve-dependencies": "^24.8.0", - "jest-runner": "^24.8.0", - "jest-runtime": "^24.8.0", - "jest-snapshot": "^24.8.0", - "jest-util": "^24.8.0", - "jest-validate": "^24.8.0", - "jest-watcher": "^24.8.0", + "jest-resolve": "^24.9.0", + "jest-resolve-dependencies": "^24.9.0", + "jest-runner": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "jest-watcher": "^24.9.0", "micromatch": "^3.1.10", "p-each-series": "^1.0.0", - "pirates": "^4.0.1", "realpath-native": "^1.1.0", "rimraf": "^2.5.4", + "slash": "^2.0.0", "strip-ansi": "^5.0.0" }, "dependencies": { - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - }, "ansi-regex": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz", + "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=", "dev": true }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "arr-diff": { + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/arr-diff/download/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", "dev": true }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "array-unique": { + "version": "0.3.2", + "resolved": "http://r.cnpmjs.org/array-unique/download/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, - "jest-get-type": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.8.0.tgz", - "integrity": "sha512-RR4fo8jEmMD9zSz2nLbs2j0zvPpk/KCEz3a62jJWbd2ayNo0cb+KFRxPHVhE4ZmgGJEQp0fosmNz84IfqM8cMQ==", + "braces": { + "version": "2.3.2", + "resolved": "http://r.cnpmjs.org/braces/download/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "debug": { + "version": "2.6.9", + "resolved": "http://r.cnpmjs.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "http://r.cnpmjs.org/expand-brackets/download/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "http://r.cnpmjs.org/extglob/download/extglob-2.0.4.tgz", + "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/fill-range/download/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "http://r.cnpmjs.org/is-buffer/download/is-buffer-1.1.6.tgz", + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", "dev": true }, - "jest-validate": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.8.0.tgz", - "integrity": "sha512-+/N7VOEMW1Vzsrk3UWBDYTExTPwf68tavEPKDnJzrC6UlHtUDU/fuEdXqFoHzv9XnQ+zW6X3qMZhJ3YexfeLDA==", + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "dev": true, "requires": { - "@jest/types": "^24.8.0", - "camelcase": "^5.0.0", - "chalk": "^2.0.1", - "jest-get-type": "^24.8.0", - "leven": "^2.1.0", - "pretty-format": "^24.8.0" + "kind-of": "^6.0.0" } }, - "pretty-format": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.8.0.tgz", - "integrity": "sha512-P952T7dkrDEplsR+TuY7q3VXDae5Sr7zmQb12JU/NDQa/3CH7/QW0yvqLcGN6jL+zQFKaoJcPc+yJxMTGmosqw==", + "is-descriptor": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "dev": true, "requires": { - "@jest/types": "^24.8.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-6.0.3.tgz", + "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "http://r.cnpmjs.org/micromatch/download/micromatch-3.1.10.tgz", + "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" } }, - "react-is": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", - "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==", + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/slash/download/slash-2.0.0.tgz", + "integrity": "sha1-3lUoUaF1nfOo8gZTVEL17E3eq0Q=", "dev": true }, "strip-ansi": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1573280549549&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", "dev": true, "requires": { "ansi-regex": "^4.1.0" } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } } } }, "@jest/environment": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.8.0.tgz", - "integrity": "sha512-vlGt2HLg7qM+vtBrSkjDxk9K0YtRBi7HfRFaDxoRtyi+DyVChzhF20duvpdAnKVBV6W5tym8jm0U9EfXbDk1tw==", + "version": "24.9.0", + "resolved": "http://r.cnpmjs.org/@jest/environment/download/@jest/environment-24.9.0.tgz", + "integrity": "sha1-IeOvotZcBYbL1svv4gi6+t5Eqxg=", "dev": true, "requires": { - "@jest/fake-timers": "^24.8.0", - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", - "jest-mock": "^24.8.0" + "@jest/fake-timers": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0" } }, "@jest/fake-timers": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.8.0.tgz", - "integrity": "sha512-2M4d5MufVXwi6VzZhJ9f5S/wU4ud2ck0kxPof1Iz3zWx6Y+V2eJrES9jEktB6O3o/oEyk+il/uNu9PvASjWXQw==", + "version": "24.9.0", + "resolved": "http://r.cnpmjs.org/@jest/fake-timers/download/@jest/fake-timers-24.9.0.tgz", + "integrity": "sha1-uj5r8O7NCaY2BJiWQ00wZjZUDJM=", "dev": true, "requires": { - "@jest/types": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-mock": "^24.8.0" + "@jest/types": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0" } }, "@jest/reporters": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.8.0.tgz", - "integrity": "sha512-eZ9TyUYpyIIXfYCrw0UHUWUvE35vx5I92HGMgS93Pv7du+GHIzl+/vh8Qj9MCWFK/4TqyttVBPakWMOfZRIfxw==", + "version": "24.9.0", + "resolved": "http://r.cnpmjs.org/@jest/reporters/download/@jest/reporters-24.9.0.tgz", + "integrity": "sha1-hmYO/44rlmHQQqjpigKLjWMaW0M=", "dev": true, "requires": { - "@jest/environment": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", "chalk": "^2.0.1", "exit": "^0.1.2", "glob": "^7.1.2", @@ -2856,22 +1756,63 @@ "istanbul-lib-instrument": "^3.0.1", "istanbul-lib-report": "^2.0.4", "istanbul-lib-source-maps": "^3.0.1", - "istanbul-reports": "^2.1.1", - "jest-haste-map": "^24.8.0", - "jest-resolve": "^24.8.0", - "jest-runtime": "^24.8.0", - "jest-util": "^24.8.0", + "istanbul-reports": "^2.2.6", + "jest-haste-map": "^24.9.0", + "jest-resolve": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-util": "^24.9.0", "jest-worker": "^24.6.0", - "node-notifier": "^5.2.1", + "node-notifier": "^5.4.2", "slash": "^2.0.0", "source-map": "^0.6.0", "string-length": "^2.0.0" + }, + "dependencies": { + "istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "http://r.cnpmjs.org/istanbul-lib-coverage/download/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha1-Z18KtpUD+tSx2En3NrqsqAM0T0k=", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "3.3.0", + "resolved": "http://r.cnpmjs.org/istanbul-lib-instrument/download/istanbul-lib-instrument-3.3.0.tgz", + "integrity": "sha1-pfY9kfC7wMPkee9MXeAnM17G1jA=", + "dev": true, + "requires": { + "@babel/generator": "^7.4.0", + "@babel/parser": "^7.4.3", + "@babel/template": "^7.4.0", + "@babel/traverse": "^7.4.3", + "@babel/types": "^7.4.0", + "istanbul-lib-coverage": "^2.0.5", + "semver": "^6.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "http://r.cnpmjs.org/semver/download/semver-6.3.0.tgz", + "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", + "dev": true + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/slash/download/slash-2.0.0.tgz", + "integrity": "sha1-3lUoUaF1nfOo8gZTVEL17E3eq0Q=", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "http://r.cnpmjs.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } } }, "@jest/source-map": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.3.0.tgz", - "integrity": "sha512-zALZt1t2ou8le/crCeeiRYzvdnTzaIlpOWaet45lNSqNJUnXbppUUFR4ZUAlzgDmKee4Q5P/tKXypI1RiHwgag==", + "version": "24.9.0", + "resolved": "http://r.cnpmjs.org/@jest/source-map/download/@jest/source-map-24.9.0.tgz", + "integrity": "sha1-DiY6lEML5LQdpoPMwea//ioZFxQ=", "dev": true, "requires": { "callsites": "^3.0.0", @@ -2881,422 +1822,633 @@ "dependencies": { "callsites": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "resolved": "http://r.cnpmjs.org/callsites/download/callsites-3.1.0.tgz", + "integrity": "sha1-s2MKvYlDQy9Us/BRkjjjPNffL3M=", "dev": true }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "source-map": { + "version": "0.6.1", + "resolved": "http://r.cnpmjs.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", "dev": true } } }, "@jest/test-result": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.8.0.tgz", - "integrity": "sha512-+YdLlxwizlfqkFDh7Mc7ONPQAhA4YylU1s529vVM1rsf67vGZH/2GGm5uO8QzPeVyaVMobCQ7FTxl38QrKRlng==", + "version": "24.9.0", + "resolved": "http://r.cnpmjs.org/@jest/test-result/download/@jest/test-result-24.9.0.tgz", + "integrity": "sha1-EXluiqnb+I6gJXV7MVJZWtBroMo=", "dev": true, "requires": { - "@jest/console": "^24.7.1", - "@jest/types": "^24.8.0", + "@jest/console": "^24.9.0", + "@jest/types": "^24.9.0", "@types/istanbul-lib-coverage": "^2.0.0" } }, "@jest/test-sequencer": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.8.0.tgz", - "integrity": "sha512-OzL/2yHyPdCHXEzhoBuq37CE99nkme15eHkAzXRVqthreWZamEMA0WoetwstsQBCXABhczpK03JNbc4L01vvLg==", + "version": "24.9.0", + "resolved": "http://r.cnpmjs.org/@jest/test-sequencer/download/@jest/test-sequencer-24.9.0.tgz", + "integrity": "sha1-+PM081tiWk8vNV8v5+YDba0uazE=", "dev": true, "requires": { - "@jest/test-result": "^24.8.0", - "jest-haste-map": "^24.8.0", - "jest-runner": "^24.8.0", - "jest-runtime": "^24.8.0" + "@jest/test-result": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-runner": "^24.9.0", + "jest-runtime": "^24.9.0" } }, "@jest/transform": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.8.0.tgz", - "integrity": "sha512-xBMfFUP7TortCs0O+Xtez2W7Zu1PLH9bvJgtraN1CDST6LBM/eTOZ9SfwS/lvV8yOfcDpFmwf9bq5cYbXvqsvA==", + "version": "24.9.0", + "resolved": "http://r.cnpmjs.org/@jest/transform/download/@jest/transform-24.9.0.tgz", + "integrity": "sha1-SuJ2iyllU/rasJ6ewRlUPJCxbFY=", "dev": true, "requires": { "@babel/core": "^7.1.0", - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "babel-plugin-istanbul": "^5.1.0", "chalk": "^2.0.1", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.1.15", - "jest-haste-map": "^24.8.0", - "jest-regex-util": "^24.3.0", - "jest-util": "^24.8.0", + "jest-haste-map": "^24.9.0", + "jest-regex-util": "^24.9.0", + "jest-util": "^24.9.0", "micromatch": "^3.1.10", + "pirates": "^4.0.1", "realpath-native": "^1.1.0", "slash": "^2.0.0", "source-map": "^0.6.1", "write-file-atomic": "2.4.1" }, "dependencies": { - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "arr-diff": { + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/arr-diff/download/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", "dev": true - } - } - }, - "@jest/types": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.8.0.tgz", - "integrity": "sha512-g17UxVr2YfBtaMUxn9u/4+siG1ptg9IGYAYwvpwn61nBg779RXnjE/m7CxYcIzEt0AbHZZAHSEZNhkE2WxURVg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^12.0.9" - } - }, - "@mapbox/rehype-prism": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@mapbox/rehype-prism/-/rehype-prism-0.3.1.tgz", - "integrity": "sha512-3LVcYjRoyn13yRyAxGdHEOA9k2litvxJU60IbaOlPWStUiNA2GspgwiDSVHzhF+nLOu8Wed6SWFFLh18U/KEQw==", - "requires": { - "hast-util-to-string": "^1.0.0", - "refractor": "^2.3.0", - "unist-util-visit": "^1.1.3" - } - }, - "@mdx-js/loader": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@mdx-js/loader/-/loader-1.5.3.tgz", - "integrity": "sha512-m3bT9b9xY8wU1sQwHhSuFiIwFm0LP7onDpm2rb3xikHzXNY7yfL1/lV9XF4iecSmd86/4I1L6RKE61Dq1jLqjA==", - "dev": true, - "requires": { - "@mdx-js/mdx": "^1.5.3", - "@mdx-js/react": "^1.5.3", - "loader-utils": "1.2.3" - } - }, - "@mdx-js/mdx": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.5.3.tgz", - "integrity": "sha512-XxnOvyCQKri52tgaCXbV5NWnZGqgRsRifa/yJrxwWa6QG3vdFiEi/xokBHBf/62RCKRK4+QmbM4dSl0fgWIRNA==", - "dev": true, - "requires": { - "@babel/core": "7.7.4", - "@babel/plugin-syntax-jsx": "7.7.4", - "@babel/plugin-syntax-object-rest-spread": "7.7.4", - "@mdx-js/util": "^1.5.3", - "babel-plugin-apply-mdx-type-prop": "^1.5.3", - "babel-plugin-extract-import-names": "^1.5.3", - "camelcase-css": "2.0.1", - "detab": "2.0.2", - "hast-util-raw": "5.0.1", - "lodash.uniq": "4.5.0", - "mdast-util-to-hast": "6.0.2", - "remark-mdx": "^1.5.3", - "remark-parse": "7.0.2", - "remark-squeeze-paragraphs": "3.0.4", - "style-to-object": "0.3.0", - "unified": "8.4.2", - "unist-builder": "1.0.4", - "unist-util-visit": "2.0.1" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } }, - "@babel/core": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.7.4.tgz", - "integrity": "sha512-+bYbx56j4nYBmpsWtnPUsKW3NdnYxbqyfrP2w9wILBuHzdfIKz9prieZK0DFPyIzkjYVUe4QkusGL07r5pXznQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.4", - "@babel/helpers": "^7.7.4", - "@babel/parser": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "json5": "^2.1.0", - "lodash": "^4.17.13", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - } + "array-unique": { + "version": "0.3.2", + "resolved": "http://r.cnpmjs.org/array-unique/download/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true }, - "@babel/generator": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.7.tgz", - "integrity": "sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==", + "babel-plugin-istanbul": { + "version": "5.2.0", + "resolved": "http://r.cnpmjs.org/babel-plugin-istanbul/download/babel-plugin-istanbul-5.2.0.tgz", + "integrity": "sha1-30reg9iXqS3wacTZolzyZxKTyFQ=", "dev": true, "requires": { - "@babel/types": "^7.7.4", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" + "@babel/helper-plugin-utils": "^7.0.0", + "find-up": "^3.0.0", + "istanbul-lib-instrument": "^3.3.0", + "test-exclude": "^5.2.3" } }, - "@babel/helper-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", - "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", + "braces": { + "version": "2.3.2", + "resolved": "http://r.cnpmjs.org/braces/download/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } }, - "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", + "debug": { + "version": "2.6.9", + "resolved": "http://r.cnpmjs.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", "dev": true, "requires": { - "@babel/types": "^7.7.4" + "ms": "2.0.0" } }, - "@babel/helper-split-export-declaration": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", - "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", + "expand-brackets": { + "version": "2.1.4", + "resolved": "http://r.cnpmjs.org/expand-brackets/download/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "@babel/types": "^7.7.4" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true + } } }, - "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", - "dev": true + "extglob": { + "version": "2.0.4", + "resolved": "http://r.cnpmjs.org/extglob/download/extglob-2.0.4.tgz", + "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } }, - "@babel/plugin-syntax-jsx": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.7.4.tgz", - "integrity": "sha512-wuy6fiMe9y7HeZBWXYCGt2RGxZOj0BImZ9EyXJVnVGBKO/Br592rbR3rtIQn0eQhAk9vqaKP5n8tVqEFBQMfLg==", + "fill-range": { + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/fill-range/download/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } }, - "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", + "find-up": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/find-up/download/find-up-3.0.0.tgz", + "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" + "locate-path": "^3.0.0" } }, - "@babel/traverse": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.4.tgz", - "integrity": "sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==", + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", "dev": true, "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.4", - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" + "kind-of": "^6.0.0" } }, - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "is-buffer": { + "version": "1.1.6", + "resolved": "http://r.cnpmjs.org/is-buffer/download/is-buffer-1.1.6.tgz", + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", + "dev": true + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "dev": true, "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" + "kind-of": "^6.0.0" } }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "is-descriptor": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "dev": true, "requires": { - "safe-buffer": "~5.1.1" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "is-number": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "ms": "^2.1.1" + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "isobject": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, - "json5": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz", - "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==", + "istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "http://r.cnpmjs.org/istanbul-lib-coverage/download/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha1-Z18KtpUD+tSx2En3NrqsqAM0T0k=", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "3.3.0", + "resolved": "http://r.cnpmjs.org/istanbul-lib-instrument/download/istanbul-lib-instrument-3.3.0.tgz", + "integrity": "sha1-pfY9kfC7wMPkee9MXeAnM17G1jA=", "dev": true, "requires": { - "minimist": "^1.2.0" + "@babel/generator": "^7.4.0", + "@babel/parser": "^7.4.3", + "@babel/template": "^7.4.0", + "@babel/traverse": "^7.4.3", + "@babel/types": "^7.4.0", + "istanbul-lib-coverage": "^2.0.5", + "semver": "^6.0.0" } }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "kind-of": { + "version": "6.0.3", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-6.0.3.tgz", + "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", "dev": true }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "load-json-file": { + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/load-json-file/download/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/locate-path/download/locate-path-3.0.0.tgz", + "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "http://r.cnpmjs.org/micromatch/download/micromatch-3.1.10.tgz", + "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://r.cnpmjs.org/p-limit/download/p-limit-2.3.0.tgz", + "integrity": "sha1-PdM8ZHohT9//2DWTPrCG2g3CHbE=", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/p-locate/download/p-locate-3.0.0.tgz", + "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "http://r.cnpmjs.org/p-try/download/p-try-2.2.0.tgz", + "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=", "dev": true }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "path-type": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/path-type/download/path-type-3.0.0.tgz", + "integrity": "sha1-zvMdyOCho7sNEFwM2Xzzv0f0428=", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/pify/download/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "read-pkg": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/read-pkg/download/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "read-pkg-up": { + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/read-pkg-up/download/read-pkg-up-4.0.0.tgz", + "integrity": "sha1-GyIcYIi6d5lgHICPkRYcZuWPiXg=", + "dev": true, + "requires": { + "find-up": "^3.0.0", + "read-pkg": "^3.0.0" + } + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/require-main-filename/download/require-main-filename-2.0.0.tgz", + "integrity": "sha1-0LMp7MfMD2Fkn2IhW+aa9UqomJs=", "dev": true }, - "to-fast-properties": { + "semver": { + "version": "6.3.0", + "resolved": "http://r.cnpmjs.org/semver/download/semver-6.3.0.tgz", + "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", + "dev": true + }, + "slash": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "resolved": "https://registry.npm.taobao.org/slash/download/slash-2.0.0.tgz", + "integrity": "sha1-3lUoUaF1nfOo8gZTVEL17E3eq0Q=", "dev": true }, - "unist-util-is": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.1.tgz", - "integrity": "sha512-7NYjErP4LJtkEptPR22wO5RsCPnHZZrop7t2SoQzjvpFedCFer4WW8ujj9GI5DkUX7yVcffXLjoURf6h2QUv6Q==", + "source-map": { + "version": "0.6.1", + "resolved": "http://r.cnpmjs.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", "dev": true }, - "unist-util-visit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.1.tgz", - "integrity": "sha512-bEDa5S/O8WRDeI1mLaMoKuFFi89AjF+UAoMNxO+bbVdo06q+53Vhq4iiv1PenL6Rx1ZxIpXIzqZoc5HD2I1oMA==", + "strip-bom": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/strip-bom/download/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "test-exclude": { + "version": "5.2.3", + "resolved": "http://r.cnpmjs.org/test-exclude/download/test-exclude-5.2.3.tgz", + "integrity": "sha1-w9Ph4xHrfuQF4JLawQrv0JCR6sA=", "dev": true, "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" + "glob": "^7.1.3", + "minimatch": "^3.0.4", + "read-pkg-up": "^4.0.0", + "require-main-filename": "^2.0.0" } }, - "unist-util-visit-parents": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.1.tgz", - "integrity": "sha512-umEOTkm6/y1gIqPrqet55mYqlvGXCia/v1FSc5AveLAI7jFmOAIbqiwcHcviLcusAkEQt1bq2hixCKO9ltMb2Q==", + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } } } }, - "@mdx-js/react": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.5.3.tgz", - "integrity": "sha512-5bVLUsZybjmeYL8l4Uh/ysE8vMn0Vb0GKzki/LicaDHJvXr/N4Tjj0gT4tk1OzhcC5nGQAQGIyQMW5pvIjp9XQ==", - "dev": true - }, - "@mdx-js/util": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.5.3.tgz", - "integrity": "sha512-OXeOtHO+eN50QlIkm4Vj4vqNGtowv4FH9L21WvcbEM0eeZrb7aANiFTN70lBQEXcucxCMRkd/6IA9LxhotZEQw==", - "dev": true - }, - "@mrmlnc/readdir-enhanced": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", - "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", + "@jest/types": { + "version": "24.9.0", + "resolved": "http://r.cnpmjs.org/@jest/types/download/@jest/types-24.9.0.tgz", + "integrity": "sha1-Y8smy3UA0Gnlo4lEGnxqtekJ/Fk=", "dev": true, "requires": { - "call-me-maybe": "^1.0.1", - "glob-to-regexp": "^0.3.0" + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^13.0.0" } }, - "@nodelib/fs.stat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", - "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", - "dev": true + "@mapbox/rehype-prism": { + "version": "0.3.1", + "resolved": "https://r.cnpmjs.org/@mapbox/rehype-prism/download/@mapbox/rehype-prism-0.3.1.tgz", + "integrity": "sha1-U444c33w0NFGK+q/nOroj85ANaU=", + "dev": true, + "requires": { + "hast-util-to-string": "^1.0.0", + "refractor": "^2.3.0", + "unist-util-visit": "^1.1.3" + } }, - "@oclif/color": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/@oclif/color/-/color-0.0.0.tgz", - "integrity": "sha512-KKd3W7eNwfNF061tr663oUNdt8EMnfuyf5Xv55SGWA1a0rjhWqS/32P7OeB7CbXcJUBdfVrPyR//1afaW12AWw==", + "@mdx-js/loader": { + "version": "1.6.16", + "resolved": "https://registry.npm.taobao.org/@mdx-js/loader/download/@mdx-js/loader-1.6.16.tgz", + "integrity": "sha1-Wpw7CrQYhc0t+FvPNgZEymPkTog=", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "supports-color": "^5.4.0", - "tslib": "^1" + "@mdx-js/mdx": "1.6.16", + "@mdx-js/react": "1.6.16", + "loader-utils": "2.0.0" }, "dependencies": { - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "loader-utils": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/loader-utils/download/loader-utils-2.0.0.tgz", + "integrity": "sha1-5MrOW4FtQloWa18JfhDNErNgZLA=", "dev": true, "requires": { - "has-flag": "^3.0.0" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" } } } }, - "@oclif/command": { - "version": "1.5.19", - "resolved": "https://registry.npmjs.org/@oclif/command/-/command-1.5.19.tgz", - "integrity": "sha512-6+iaCMh/JXJaB2QWikqvGE9//wLEVYYwZd5sud8aLoLKog1Q75naZh2vlGVtg5Mq/NqpqGQvdIjJb3Bm+64AUQ==", + "@mdx-js/mdx": { + "version": "1.6.16", + "resolved": "https://registry.npm.taobao.org/@mdx-js/mdx/download/@mdx-js/mdx-1.6.16.tgz", + "integrity": "sha1-8BrwFAU5wc4EPSRiWdi+zSFTsrs=", "dev": true, "requires": { - "@oclif/config": "^1", - "@oclif/errors": "^1.2.2", - "@oclif/parser": "^3.8.3", - "@oclif/plugin-help": "^2", - "debug": "^4.1.1", - "semver": "^5.6.0" + "@babel/core": "7.10.5", + "@babel/plugin-syntax-jsx": "7.10.4", + "@babel/plugin-syntax-object-rest-spread": "7.8.3", + "@mdx-js/util": "1.6.16", + "babel-plugin-apply-mdx-type-prop": "1.6.16", + "babel-plugin-extract-import-names": "1.6.16", + "camelcase-css": "2.0.1", + "detab": "2.0.3", + "hast-util-raw": "6.0.0", + "lodash.uniq": "4.5.0", + "mdast-util-to-hast": "9.1.0", + "remark-footnotes": "1.0.0", + "remark-mdx": "1.6.16", + "remark-parse": "8.0.3", + "remark-squeeze-paragraphs": "4.0.0", + "style-to-object": "0.3.0", + "unified": "9.1.0", + "unist-builder": "2.0.3", + "unist-util-visit": "2.0.3" }, "dependencies": { + "@babel/core": { + "version": "7.10.5", + "resolved": "https://registry.npm.taobao.org/@babel/core/download/@babel/core-7.10.5.tgz?cache=0&sync_timestamp=1596578776945&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcore%2Fdownload%2F%40babel%2Fcore-7.10.5.tgz", + "integrity": "sha1-HxXizKitmh14o43bphL158270zA=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.10.5", + "@babel/helper-module-transforms": "^7.10.5", + "@babel/helpers": "^7.10.4", + "@babel/parser": "^7.10.5", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.5", + "@babel/types": "^7.10.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + } + }, "debug": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "resolved": "http://r.cnpmjs.org/debug/download/debug-4.1.1.tgz", + "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=", "dev": true, "requires": { "ms": "^2.1.1" @@ -3304,96 +2456,254 @@ }, "ms": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "resolved": "http://r.cnpmjs.org/ms/download/ms-2.1.2.tgz", + "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", + "dev": true + }, + "unist-util-is": { + "version": "4.0.2", + "resolved": "http://r.cnpmjs.org/unist-util-is/download/unist-util-is-4.0.2.tgz", + "integrity": "sha1-x9E0EYiqnOWzz/U4lY3piV8Upd4=", "dev": true + }, + "unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/unist-util-visit/download/unist-util-visit-2.0.3.tgz?cache=0&sync_timestamp=1594459248879&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funist-util-visit%2Fdownload%2Funist-util-visit-2.0.3.tgz", + "integrity": "sha1-w3A4kxRt9HIDu4qXla9H17lxIIw=", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/unist-util-visit-parents/download/unist-util-visit-parents-3.1.0.tgz?cache=0&sync_timestamp=1594553631380&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funist-util-visit-parents%2Fdownload%2Funist-util-visit-parents-3.1.0.tgz", + "integrity": "sha1-TdJi+53P5E8pfVPogvxv80IRc9U=", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + } } } }, - "@oclif/config": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/@oclif/config/-/config-1.13.3.tgz", - "integrity": "sha512-qs5XvGRw+1M41abOKCjd0uoeHCgsMxa2MurD2g2K8CtQlzlMXl0rW5idVeimIg5208LLuxkfzQo8TKAhhRCWLg==", + "@mdx-js/react": { + "version": "1.6.16", + "resolved": "https://registry.npm.taobao.org/@mdx-js/react/download/@mdx-js/react-1.6.16.tgz", + "integrity": "sha1-U46xRHMZTQs8VAIMsjDkJhdDFc0=", + "dev": true + }, + "@mdx-js/util": { + "version": "1.6.16", + "resolved": "https://registry.npm.taobao.org/@mdx-js/util/download/@mdx-js/util-1.6.16.tgz", + "integrity": "sha1-B6c0L2th6h7L+zHm4jv3qMebm1c=", + "dev": true + }, + "@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "http://r.cnpmjs.org/@mrmlnc/readdir-enhanced/download/@mrmlnc/readdir-enhanced-2.2.1.tgz", + "integrity": "sha1-UkryQNGjYFJ7cwR17PoTRKpUDd4=", "dev": true, "requires": { - "@oclif/parser": "^3.8.0", - "debug": "^4.1.1", - "tslib": "^1.9.3" + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.3", + "resolved": "https://registry.npm.taobao.org/@nodelib/fs.scandir/download/@nodelib/fs.scandir-2.1.3.tgz", + "integrity": "sha1-Olgr21OATGum0UZXnEblITDPSjs=", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.3", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/@nodelib/fs.stat/download/@nodelib/fs.stat-2.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40nodelib%2Ffs.stat%2Fdownload%2F%40nodelib%2Ffs.stat-2.0.3.tgz", + "integrity": "sha1-NNxfTKu8cg9OYPdadH5+zWwXW9M=", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.4", + "resolved": "https://registry.npm.taobao.org/@nodelib/fs.walk/download/@nodelib/fs.walk-1.2.4.tgz", + "integrity": "sha1-ARuSAqcKY2bkNspcBlhEUoqwSXY=", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.3", + "fastq": "^1.6.0" + } + }, + "@oclif/color": { + "version": "0.1.2", + "resolved": "https://r.cnpmjs.org/@oclif/color/download/@oclif/color-0.1.2.tgz", + "integrity": "sha1-KLB+KFDZzoFNC1h840A7etj32Yc=", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "chalk": "^3.0.0", + "strip-ansi": "^5.2.0", + "supports-color": "^5.4.0", + "tslib": "^1" }, "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz", + "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=", + "dev": true + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://r.cnpmjs.org/chalk/download/chalk-3.0.0.tgz", + "integrity": "sha1-P3PCv1JlkfV0zEksUeJFY0n4ROQ=", "dev": true, "requires": { - "ms": "^2.1.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "http://r.cnpmjs.org/ansi-styles/download/ansi-styles-4.2.1.tgz", + "integrity": "sha1-kK51xCTQCNJiTFvynq0xd+v881k=", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "supports-color": { + "version": "7.1.0", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-7.1.0.tgz", + "integrity": "sha1-aOMlkd9z4lrRxLSRCKLsUHliv9E=", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "color-convert": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/color-convert/download/color-convert-2.0.1.tgz", + "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "http://r.cnpmjs.org/color-name/download/color-name-1.1.4.tgz", + "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/has-flag/download/has-flag-4.0.0.tgz", + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1573280549549&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } } } }, - "@oclif/errors": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@oclif/errors/-/errors-1.2.2.tgz", - "integrity": "sha512-Eq8BFuJUQcbAPVofDxwdE0bL14inIiwt5EaKRVY9ZDIG11jwdXZqiQEECJx0VfnLyUZdYfRd/znDI/MytdJoKg==", + "@oclif/command": { + "version": "1.8.0", + "resolved": "https://registry.npm.taobao.org/@oclif/command/download/@oclif/command-1.8.0.tgz", + "integrity": "sha1-waSZsQ0m6dGmERkKgQBViazLszk=", "dev": true, "requires": { - "clean-stack": "^1.3.0", - "fs-extra": "^7.0.0", - "indent-string": "^3.2.0", - "strip-ansi": "^5.0.0", - "wrap-ansi": "^4.0.0" + "@oclif/config": "^1.15.1", + "@oclif/errors": "^1.3.3", + "@oclif/parser": "^3.8.3", + "@oclif/plugin-help": "^3", + "debug": "^4.1.1", + "semver": "^7.3.2" }, "dependencies": { + "@oclif/plugin-help": { + "version": "3.1.0", + "resolved": "https://r.cnpmjs.org/@oclif/plugin-help/download/@oclif/plugin-help-3.1.0.tgz", + "integrity": "sha1-UH/46cq+c0ZysS0ewLeYEtGMWKg=", + "dev": true, + "requires": { + "@oclif/command": "^1.5.20", + "@oclif/config": "^1.15.1", + "chalk": "^2.4.1", + "indent-string": "^4.0.0", + "lodash.template": "^4.4.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0", + "widest-line": "^2.0.1", + "wrap-ansi": "^4.0.0" + } + }, "ansi-regex": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz", + "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=", + "dev": true + }, + "debug": { + "version": "4.1.1", + "resolved": "http://r.cnpmjs.org/debug/download/debug-4.1.1.tgz", + "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz", + "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=", "dev": true }, "is-fullwidth-code-point": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, + "ms": { + "version": "2.1.2", + "resolved": "http://r.cnpmjs.org/ms/download/ms-2.1.2.tgz", + "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", + "dev": true + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-7.3.2.tgz?cache=0&sync_timestamp=1586886301819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.2.tgz", + "integrity": "sha1-YElisFK4HtB4aq6EOJ/7pw/9OTg=", + "dev": true + }, "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "version": "3.1.0", + "resolved": "http://r.cnpmjs.org/string-width/download/string-width-3.1.0.tgz", + "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", "dev": true, "requires": { + "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } + "strip-ansi": "^5.1.0" } }, "strip-ansi": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1573280549549&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", "dev": true, "requires": { "ansi-regex": "^4.1.0" @@ -3401,8 +2711,8 @@ }, "wrap-ansi": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-4.0.0.tgz", - "integrity": "sha512-uMTsj9rDb0/7kk1PbcbCcwvHUxp60fGDB/NNXpVa0Q+ic/e7y5+BwTxKfQ33VYgDppSwi/FBzpetYzo8s6tfbg==", + "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-4.0.0.tgz", + "integrity": "sha1-s1cNfHAVYVmi1CvlzJQulX97ETE=", "dev": true, "requires": { "ansi-styles": "^3.2.0", @@ -3412,13 +2722,23 @@ "dependencies": { "ansi-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz", + "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, "strip-ansi": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz?cache=0&sync_timestamp=1573280549549&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { @@ -3429,55 +2749,86 @@ } } }, - "@oclif/linewrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@oclif/linewrap/-/linewrap-1.0.0.tgz", - "integrity": "sha512-Ups2dShK52xXa8w6iBWLgcjPJWjais6KPJQq3gQ/88AY6BXoTX+MIGFPrWQO1KLMiQfoTpcLnUwloN4brrVUHw==", - "dev": true - }, - "@oclif/parser": { - "version": "3.8.4", - "resolved": "https://registry.npmjs.org/@oclif/parser/-/parser-3.8.4.tgz", - "integrity": "sha512-cyP1at3l42kQHZtqDS3KfTeyMvxITGwXwH1qk9ktBYvqgMp5h4vHT+cOD74ld3RqJUOZY/+Zi9lb4Tbza3BtuA==", + "@oclif/config": { + "version": "1.16.0", + "resolved": "https://registry.npm.taobao.org/@oclif/config/download/@oclif/config-1.16.0.tgz", + "integrity": "sha1-//6ZOfGn+sHkXlMrXHhTgSV/iqY=", "dev": true, "requires": { - "@oclif/linewrap": "^1.0.0", - "chalk": "^2.4.2", + "@oclif/errors": "^1.3.3", + "@oclif/parser": "^3.8.0", + "debug": "^4.1.1", + "globby": "^11.0.1", + "is-wsl": "^2.1.1", "tslib": "^1.9.3" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "debug": { + "version": "4.1.1", + "resolved": "http://r.cnpmjs.org/debug/download/debug-4.1.1.tgz", + "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ms": "^2.1.1" } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "ms": { + "version": "2.1.2", + "resolved": "http://r.cnpmjs.org/ms/download/ms-2.1.2.tgz", + "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + } + } + }, + "@oclif/errors": { + "version": "1.3.3", + "resolved": "https://registry.npm.taobao.org/@oclif/errors/download/@oclif/errors-1.3.3.tgz?cache=0&sync_timestamp=1593453811390&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40oclif%2Ferrors%2Fdownload%2F%40oclif%2Ferrors-1.3.3.tgz", + "integrity": "sha1-+1l9+8WMa4YJ3Asv35Gi1IeBioI=", + "dev": true, + "requires": { + "clean-stack": "^3.0.0", + "fs-extra": "^9.0.1", + "indent-string": "^4.0.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "fs-extra": { + "version": "9.0.1", + "resolved": "https://registry.npm.taobao.org/fs-extra/download/fs-extra-9.0.1.tgz?cache=0&sync_timestamp=1591231538901&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffs-extra%2Fdownload%2Ffs-extra-9.0.1.tgz", + "integrity": "sha1-kQ2gBiQ3ukw5/t2GPxZ1zP78ufw=", "dev": true, "requires": { - "has-flag": "^3.0.0" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" } } } }, + "@oclif/linewrap": { + "version": "1.0.0", + "resolved": "https://r.cnpmjs.org/@oclif/linewrap/download/@oclif/linewrap-1.0.0.tgz", + "integrity": "sha1-rty2S0edTbe+JBljhIl7UACQHZE=", + "dev": true + }, + "@oclif/parser": { + "version": "3.8.5", + "resolved": "https://r.cnpmjs.org/@oclif/parser/download/@oclif/parser-3.8.5.tgz", + "integrity": "sha1-xRYXZqHvynND4fJddp777+CfY5s=", + "dev": true, + "requires": { + "@oclif/errors": "^1.2.2", + "@oclif/linewrap": "^1.0.0", + "chalk": "^2.4.2", + "tslib": "^1.9.3" + } + }, "@oclif/plugin-autocomplete": { "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@oclif/plugin-autocomplete/-/plugin-autocomplete-0.1.5.tgz", - "integrity": "sha512-Afchpdd8FNfx9GaU/1D9IzyfiXvjfGybgzQ6G4GTFvPO0/hLdkXX3YyYq+SnxE6/bCrhg4pleiB+GuJACmmkEA==", + "resolved": "https://r.cnpmjs.org/@oclif/plugin-autocomplete/download/@oclif/plugin-autocomplete-0.1.5.tgz", + "integrity": "sha1-sCG1DbbWsNnn0iJ8WPQ5BleK4XU=", "dev": true, "requires": { "@oclif/command": "^1.4.31", @@ -3491,8 +2842,8 @@ "dependencies": { "fs-extra": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz", - "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==", + "resolved": "https://r.cnpmjs.org/fs-extra/download/fs-extra-6.0.1.tgz", + "integrity": "sha1-irwSj3lG4xATXdyTuYvdtBDno0s=", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -3500,18 +2851,27 @@ "universalify": "^0.1.0" } }, - "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/jsonfile/download/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/universalify/download/universalify-0.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funiversalify%2Fdownload%2Funiversalify-0.1.2.tgz", + "integrity": "sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY=", "dev": true } } }, "@oclif/plugin-help": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-2.2.3.tgz", - "integrity": "sha512-bGHUdo5e7DjPJ0vTeRBMIrfqTRDBfyR5w0MP41u0n3r7YG5p14lvMmiCXxi6WDaP2Hw5nqx3PnkAIntCKZZN7g==", + "resolved": "https://r.cnpmjs.org/@oclif/plugin-help/download/@oclif/plugin-help-2.2.3.tgz", + "integrity": "sha1-uZMEHpIEfw4XYmaKqwTWc4rAZ2c=", "dev": true, "requires": { "@oclif/command": "^1.5.13", @@ -3526,14 +2886,14 @@ "dependencies": { "ansi-regex": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz", + "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=", "dev": true }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz", + "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=", "dev": true }, "is-fullwidth-code-point": { @@ -3542,29 +2902,10 @@ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, - "lodash.template": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", - "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", - "dev": true, - "requires": { - "lodash._reinterpolate": "^3.0.0", - "lodash.templatesettings": "^4.0.0" - } - }, - "lodash.templatesettings": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", - "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", - "dev": true, - "requires": { - "lodash._reinterpolate": "^3.0.0" - } - }, "string-width": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "resolved": "http://r.cnpmjs.org/string-width/download/string-width-3.1.0.tgz", + "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", "dev": true, "requires": { "emoji-regex": "^7.0.1", @@ -3574,8 +2915,8 @@ }, "strip-ansi": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1573280549549&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", "dev": true, "requires": { "ansi-regex": "^4.1.0" @@ -3583,8 +2924,8 @@ }, "wrap-ansi": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-4.0.0.tgz", - "integrity": "sha512-uMTsj9rDb0/7kk1PbcbCcwvHUxp60fGDB/NNXpVa0Q+ic/e7y5+BwTxKfQ33VYgDppSwi/FBzpetYzo8s6tfbg==", + "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-4.0.0.tgz", + "integrity": "sha1-s1cNfHAVYVmi1CvlzJQulX97ETE=", "dev": true, "requires": { "ansi-styles": "^3.2.0", @@ -3600,8 +2941,8 @@ }, "string-width": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz", + "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", "dev": true, "requires": { "is-fullwidth-code-point": "^2.0.0", @@ -3622,34 +2963,26 @@ } }, "@oclif/plugin-not-found": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@oclif/plugin-not-found/-/plugin-not-found-1.2.3.tgz", - "integrity": "sha512-Igbw2T4gLrb/f28Llr730FeMXBSI2PXdky2YvQfsZeQGDsyBZmC4gprJJtmrMWQcjz0B51IInRBnZYERvwfIpw==", + "version": "1.2.4", + "resolved": "https://r.cnpmjs.org/@oclif/plugin-not-found/download/@oclif/plugin-not-found-1.2.4.tgz", + "integrity": "sha1-FgEIyC8KoQ9PtSzuTgE1rzS3Igs=", "dev": true, "requires": { - "@oclif/color": "^0.0.0", - "@oclif/command": "^1.5.3", + "@oclif/color": "^0.x", + "@oclif/command": "^1.6.0", "cli-ux": "^4.9.0", "fast-levenshtein": "^2.0.6", "lodash": "^4.17.13" - }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - } } }, "@oclif/plugin-update": { - "version": "1.3.9", - "resolved": "https://registry.npmjs.org/@oclif/plugin-update/-/plugin-update-1.3.9.tgz", - "integrity": "sha512-rEMsKT7VlCNnfAF7gxHcY9FtQw+w3ZMvxzoRqafMRCz6+Lt94r3PRulBI4M7IkIQwE+dqW/GPUlkDj86Os9Njg==", + "version": "1.3.10", + "resolved": "https://r.cnpmjs.org/@oclif/plugin-update/download/@oclif/plugin-update-1.3.10.tgz", + "integrity": "sha1-2wrEOS0mTxePmPwI10Wnh4vMH7M=", "dev": true, "requires": { - "@oclif/color": "^0.0.0", - "@oclif/command": "^1.5.4", + "@oclif/color": "^0.1.0", + "@oclif/command": "^1.6.0", "@oclif/config": "^1.9.0", "@oclif/errors": "^1.2.2", "@types/semver": "^5.5.0", @@ -3659,7 +2992,7 @@ "filesize": "^3.6.1", "fs-extra": "^7.0.1", "http-call": "^5.2.2", - "lodash": "^4.17.11", + "lodash": "^4.17.13", "log-chopper": "^1.0.2", "semver": "^5.6.0", "tar-fs": "^1.16.3" @@ -3667,25 +3000,51 @@ "dependencies": { "debug": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "resolved": "http://r.cnpmjs.org/debug/download/debug-4.1.1.tgz", + "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=", "dev": true, "requires": { "ms": "^2.1.1" } }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://r.cnpmjs.org/fs-extra/download/fs-extra-7.0.1.tgz", + "integrity": "sha1-TxicRKoSO4lfcigE9V6iPq3DSOk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/jsonfile/download/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, "ms": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "resolved": "http://r.cnpmjs.org/ms/download/ms-2.1.2.tgz", + "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", + "dev": true + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/universalify/download/universalify-0.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funiversalify%2Fdownload%2Funiversalify-0.1.2.tgz", + "integrity": "sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY=", "dev": true } } }, "@oclif/plugin-warn-if-update-available": { "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@oclif/plugin-warn-if-update-available/-/plugin-warn-if-update-available-1.7.0.tgz", - "integrity": "sha512-Nwyz3BJ8RhsfQ+OmFSsJSPIfn5YJqMrCzPh72Zgo2jqIjKIBWD8N9vTTe4kZlpeUUn77SyXFfwlBQbNCL5OEuQ==", + "resolved": "https://r.cnpmjs.org/@oclif/plugin-warn-if-update-available/download/@oclif/plugin-warn-if-update-available-1.7.0.tgz", + "integrity": "sha1-WnKr45zguDHrSugctk60ufPqQko=", "dev": true, "requires": { "@oclif/command": "^1.5.10", @@ -3701,59 +3060,66 @@ "dependencies": { "debug": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "resolved": "http://r.cnpmjs.org/debug/download/debug-4.1.1.tgz", + "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=", "dev": true, "requires": { "ms": "^2.1.1" } }, - "lodash.template": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", - "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "fs-extra": { + "version": "7.0.1", + "resolved": "https://r.cnpmjs.org/fs-extra/download/fs-extra-7.0.1.tgz", + "integrity": "sha1-TxicRKoSO4lfcigE9V6iPq3DSOk=", "dev": true, "requires": { - "lodash._reinterpolate": "^3.0.0", - "lodash.templatesettings": "^4.0.0" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } }, - "lodash.templatesettings": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", - "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/jsonfile/download/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "dev": true, "requires": { - "lodash._reinterpolate": "^3.0.0" + "graceful-fs": "^4.1.6" } }, "ms": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "resolved": "http://r.cnpmjs.org/ms/download/ms-2.1.2.tgz", + "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", + "dev": true + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/universalify/download/universalify-0.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funiversalify%2Fdownload%2Funiversalify-0.1.2.tgz", + "integrity": "sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY=", "dev": true } } }, "@oclif/screen": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@oclif/screen/-/screen-1.0.4.tgz", - "integrity": "sha512-60CHpq+eqnTxLZQ4PGHYNwUX572hgpMHGPtTWMjdTMsAvlm69lZV/4ly6O3sAYkomo4NggGcomrDpBe34rxUqw==", + "resolved": "https://r.cnpmjs.org/@oclif/screen/download/@oclif/screen-1.0.4.tgz", + "integrity": "sha1-t0D2hgnfroqnHDpsqxXYFkB7pJM=", "dev": true }, "@samverschueren/stream-to-observable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz", - "integrity": "sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg==", + "version": "0.3.1", + "resolved": "https://registry.npm.taobao.org/@samverschueren/stream-to-observable/download/@samverschueren/stream-to-observable-0.3.1.tgz", + "integrity": "sha1-ohEXsZ7pvnDDeewYd1N+8uHGMwE=", "dev": true, "requires": { "any-observable": "^0.3.0" } }, "@sinonjs/commons": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.7.0.tgz", - "integrity": "sha512-qbk9AP+cZUsKdW1GJsBpxPKFmCJ0T8swwzVje3qFd+AkQb74Q/tiuzrdfFg8AD2g5HH/XbE/I8Uc1KYHVYWfhg==", + "version": "1.8.1", + "resolved": "https://registry.npm.taobao.org/@sinonjs/commons/download/@sinonjs/commons-1.8.1.tgz?cache=0&sync_timestamp=1594975859460&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40sinonjs%2Fcommons%2Fdownload%2F%40sinonjs%2Fcommons-1.8.1.tgz", + "integrity": "sha1-598A+YogMyT23HzGBsrZ1KirIhc=", "dev": true, "requires": { "type-detect": "4.0.8" @@ -3761,8 +3127,8 @@ }, "@sinonjs/formatio": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.2.2.tgz", - "integrity": "sha512-B8SEsgd8gArBLMD6zpRw3juQ2FVSsmdd7qlevyDqzS9WTCtvF55/gAL+h6gue8ZvPYcdiPdvueM/qm//9XzyTQ==", + "resolved": "https://r.cnpmjs.org/@sinonjs/formatio/download/@sinonjs/formatio-3.2.2.tgz", + "integrity": "sha1-dxxg36dep/LWjjuUx+iIp4eBNyw=", "dev": true, "requires": { "@sinonjs/commons": "^1", @@ -3771,33 +3137,25 @@ }, "@sinonjs/samsam": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.3.3.tgz", - "integrity": "sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ==", + "resolved": "https://r.cnpmjs.org/@sinonjs/samsam/download/@sinonjs/samsam-3.3.3.tgz", + "integrity": "sha1-Rmgu/Zlnslm4ETa58SD9VFhf60o=", "dev": true, "requires": { "@sinonjs/commons": "^1.3.0", "array-from": "^2.1.1", "lodash": "^4.17.15" - }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - } } }, "@sinonjs/text-encoding": { "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz", - "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", + "resolved": "https://r.cnpmjs.org/@sinonjs/text-encoding/download/@sinonjs/text-encoding-0.7.1.tgz", + "integrity": "sha1-jaXGUwkVZT86Hzj9XxAdjD+AecU=", "dev": true }, "@types/babel__core": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.3.tgz", - "integrity": "sha512-8fBo0UR2CcwWxeX7WIIgJ7lXjasFxoYgRnFHUj+hRvKkpiBJbxhdAPTCY6/ZKM0uxANFVzt4yObSLuTiTnazDA==", + "version": "7.1.9", + "resolved": "https://registry.npm.taobao.org/@types/babel__core/download/@types/babel__core-7.1.9.tgz?cache=0&sync_timestamp=1596838924083&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fbabel__core%2Fdownload%2F%40types%2Fbabel__core-7.1.9.tgz", + "integrity": "sha1-d+WdQ4UipvuJj6Q9w0VcbnLzlj0=", "dev": true, "requires": { "@babel/parser": "^7.1.0", @@ -3809,8 +3167,8 @@ }, "@types/babel__generator": { "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.1.tgz", - "integrity": "sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew==", + "resolved": "http://r.cnpmjs.org/@types/babel__generator/download/@types/babel__generator-7.6.1.tgz", + "integrity": "sha1-SQF2ezl+hxGuuZ3405bXunt/DgQ=", "dev": true, "requires": { "@babel/types": "^7.0.0" @@ -3818,8 +3176,8 @@ }, "@types/babel__template": { "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz", - "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==", + "resolved": "http://r.cnpmjs.org/@types/babel__template/download/@types/babel__template-7.0.2.tgz", + "integrity": "sha1-T/Y9a1Lt2sHee5daUiPtMuzqkwc=", "dev": true, "requires": { "@babel/parser": "^7.1.0", @@ -3827,44 +3185,52 @@ } }, "@types/babel__traverse": { - "version": "7.0.8", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.8.tgz", - "integrity": "sha512-yGeB2dHEdvxjP0y4UbRtQaSkXJ9649fYCmIdRoul5kfAoGCwxuCbMhag0k3RPfnuh9kPGm8x89btcfDEXdVWGw==", + "version": "7.0.13", + "resolved": "https://registry.npm.taobao.org/@types/babel__traverse/download/@types/babel__traverse-7.0.13.tgz?cache=0&sync_timestamp=1596838924292&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fbabel__traverse%2Fdownload%2F%40types%2Fbabel__traverse-7.0.13.tgz", + "integrity": "sha1-GHSRS+l0pJLhtMsAWFyrsnTouhg=", "dev": true, "requires": { "@babel/types": "^7.3.0" } }, - "@types/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://r.cnpmjs.org/@types/color-name/download/@types/color-name-1.1.1.tgz", + "integrity": "sha1-HBJhu+qhCoBVu8XYq4S3sq/IRqA=", "dev": true }, "@types/glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", - "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", + "version": "7.1.3", + "resolved": "https://registry.npm.taobao.org/@types/glob/download/@types/glob-7.1.3.tgz", + "integrity": "sha1-5rqA82t9qtLGhazZJmOC5omFwYM=", "dev": true, "requires": { - "@types/events": "*", "@types/minimatch": "*", "@types/node": "*" } }, + "@types/hast": { + "version": "2.3.1", + "resolved": "https://registry.npm.taobao.org/@types/hast/download/@types/hast-2.3.1.tgz", + "integrity": "sha1-sWhy8qYUTHAl8pb7ljamZ+u3nNk=", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, "@types/hoist-non-react-statics": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", - "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", + "resolved": "https://registry.npm.taobao.org/@types/hoist-non-react-statics/download/@types/hoist-non-react-statics-3.3.1.tgz?cache=0&sync_timestamp=1596841579065&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fhoist-non-react-statics%2Fdownload%2F%40types%2Fhoist-non-react-statics-3.3.1.tgz", + "integrity": "sha1-ESSq/lEYy1kZd66xzqrtEHDrA58=", "requires": { "@types/react": "*", "hoist-non-react-statics": "^3.3.0" }, "dependencies": { "hoist-non-react-statics": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", - "integrity": "sha512-wbg3bpgA/ZqWrZuMOeJi8+SKMhr7X9TesL/rXMjTzh0p0JUBo3II8DHboYbuIXWRlttrUFxwcu/5kygrCw8fJw==", + "version": "3.3.2", + "resolved": "https://registry.npm.taobao.org/hoist-non-react-statics/download/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha1-7OCsr3HWLClpwuxZ/v9CpLGoW0U=", "requires": { "react-is": "^16.7.0" } @@ -3872,84 +3238,119 @@ } }, "@types/istanbul-lib-coverage": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", - "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==", + "version": "2.0.3", + "resolved": "https://r.cnpmjs.org/@types/istanbul-lib-coverage/download/@types/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha1-S6jdtyAiH0MuRDvV+RF/0iz9R2I=", "dev": true }, "@types/istanbul-lib-report": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz", - "integrity": "sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg==", + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/@types/istanbul-lib-report/download/@types/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha1-wUwk8Y6oGQwRjudWK3/5mjZVJoY=", "dev": true, "requires": { "@types/istanbul-lib-coverage": "*" } }, "@types/istanbul-reports": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz", - "integrity": "sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==", + "version": "1.1.2", + "resolved": "http://r.cnpmjs.org/@types/istanbul-reports/download/@types/istanbul-reports-1.1.2.tgz", + "integrity": "sha1-6HXMaJ5HvOVJ7IHz315vbxHPrrI=", "dev": true, "requires": { "@types/istanbul-lib-coverage": "*", "@types/istanbul-lib-report": "*" } }, + "@types/json-schema": { + "version": "7.0.5", + "resolved": "https://r.cnpmjs.org/@types/json-schema/download/@types/json-schema-7.0.5.tgz", + "integrity": "sha1-3M5EMOZLRDuolF8CkPtWStW6xt0=", + "dev": true + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npm.taobao.org/@types/json5/download/@types/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, + "@types/mdast": { + "version": "3.0.3", + "resolved": "https://r.cnpmjs.org/@types/mdast/download/@types/mdast-3.0.3.tgz", + "integrity": "sha1-LX1nGxzR6j3rMG6nUDbCoEB9Les=", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, "@types/minimatch": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "resolved": "https://r.cnpmjs.org/@types/minimatch/download/@types/minimatch-3.0.3.tgz", + "integrity": "sha1-PcoOPzOyAPx9ETnAzZbBJoyt/Z0=", "dev": true }, "@types/node": { - "version": "11.13.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.13.0.tgz", - "integrity": "sha512-rx29MMkRdVmzunmiA4lzBYJNnXsW/PhG4kMBy2ATsYaDjGGR75dCFEVVROKpNwlVdcUX3xxlghKQOeDPBJobng==", + "version": "14.0.27", + "resolved": "https://registry.npm.taobao.org/@types/node/download/@types/node-14.0.27.tgz?cache=0&sync_timestamp=1596839227404&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-14.0.27.tgz", + "integrity": "sha1-oVGHOvWl6FG1GzsGXJ5jOQqeDrE=", + "dev": true + }, + "@types/parse5": { + "version": "5.0.3", + "resolved": "https://registry.npm.taobao.org/@types/parse5/download/@types/parse5-5.0.3.tgz", + "integrity": "sha1-57Wuu6wVD4tf3UpG5/C9jmXhkQk=", "dev": true }, "@types/prop-types": { "version": "15.7.3", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", - "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==" + "resolved": "https://registry.npm.taobao.org/@types/prop-types/download/@types/prop-types-15.7.3.tgz?cache=0&sync_timestamp=1596840119683&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fprop-types%2Fdownload%2F%40types%2Fprop-types-15.7.3.tgz", + "integrity": "sha1-KrDV2i5YFflLC51LldHl8kOrLKc=" }, "@types/q": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz", - "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==", + "version": "1.5.4", + "resolved": "http://r.cnpmjs.org/@types/q/download/@types/q-1.5.4.tgz", + "integrity": "sha1-FZJUFOCtLNdlv+9YhC9+JqesyyQ=", "dev": true }, + "@types/quill": { + "version": "1.3.10", + "resolved": "https://registry.npm.taobao.org/@types/quill/download/@types/quill-1.3.10.tgz", + "integrity": "sha1-3B97ZYf37pS99SkbySKJ9vBJdhM=", + "requires": { + "parchment": "^1.1.2" + } + }, "@types/react": { - "version": "16.9.17", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.17.tgz", - "integrity": "sha512-UP27In4fp4sWF5JgyV6pwVPAQM83Fj76JOcg02X5BZcpSu5Wx+fP9RMqc2v0ssBoQIFvD5JdKY41gjJJKmw6Bg==", + "version": "16.9.49", + "resolved": "https://registry.npm.taobao.org/@types/react/download/@types/react-16.9.49.tgz", + "integrity": "sha1-CdsCHPgImroM2xKkn4AhppzOSHI=", "requires": { "@types/prop-types": "*", - "csstype": "^2.2.0" + "csstype": "^3.0.2" } }, "@types/semver": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==", + "resolved": "http://r.cnpmjs.org/@types/semver/download/@types/semver-5.5.0.tgz", + "integrity": "sha1-FGwqKe59O65L8vyydGNuJkyBPEU=", "dev": true }, "@types/stack-utils": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", - "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", + "resolved": "http://r.cnpmjs.org/@types/stack-utils/download/@types/stack-utils-1.0.1.tgz", + "integrity": "sha1-CoUdO9lkmPolwzq3J47TvWXwbD4=", "dev": true }, "@types/unist": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", - "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==", + "resolved": "https://r.cnpmjs.org/@types/unist/download/@types/unist-2.0.3.tgz", + "integrity": "sha1-nAiGeYdvN061mD8VDUeHqm+zLX4=", "dev": true }, "@types/vfile": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/vfile/-/vfile-3.0.2.tgz", - "integrity": "sha512-b3nLFGaGkJ9rzOcuXRfHkZMdjsawuDD0ENL9fzTophtBg8FJHSGbH7daXkEpcwy3v7Xol3pAvsmlYyFhR4pqJw==", + "resolved": "https://r.cnpmjs.org/@types/vfile/download/@types/vfile-3.0.2.tgz", + "integrity": "sha1-GcGM0jLfEc5vpq2AJZvIbDZrCbk=", "dev": true, "requires": { "@types/node": "*", @@ -3959,262 +3360,253 @@ }, "@types/vfile-message": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/vfile-message/-/vfile-message-2.0.0.tgz", - "integrity": "sha512-GpTIuDpb9u4zIO165fUy9+fXcULdD8HFRNli04GehoMVbeNq7D6OBnqSmg3lxZnC+UvgUhEWKxdKiwYUkGltIw==", + "resolved": "https://r.cnpmjs.org/@types/vfile-message/download/@types/vfile-message-2.0.0.tgz", + "integrity": "sha1-aQ5Grw/fwfn6rgDNBJzIiJV5J9U=", "dev": true, "requires": { "vfile-message": "*" } }, "@types/yargs": { - "version": "12.0.12", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-12.0.12.tgz", - "integrity": "sha512-SOhuU4wNBxhhTHxYaiG5NY4HBhDIDnJF60GU+2LqHAdKKer86//e4yg69aENCtQ04n0ovz+tq2YPME5t5yp4pw==", - "dev": true + "version": "13.0.10", + "resolved": "https://registry.npm.taobao.org/@types/yargs/download/@types/yargs-13.0.10.tgz?cache=0&sync_timestamp=1596841764780&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fyargs%2Fdownload%2F%40types%2Fyargs-13.0.10.tgz", + "integrity": "sha1-53vz/HPHgdSMLrVB+HxFPjIeX0s=", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } }, "@types/yargs-parser": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-13.1.0.tgz", - "integrity": "sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg==", + "version": "15.0.0", + "resolved": "http://r.cnpmjs.org/@types/yargs-parser/download/@types/yargs-parser-15.0.0.tgz", + "integrity": "sha1-yz+fdBhp4gzOMw/765JxWQSDiC0=", "dev": true }, "@webassemblyjs/ast": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", - "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", + "version": "1.9.0", + "resolved": "http://r.cnpmjs.org/@webassemblyjs/ast/download/@webassemblyjs/ast-1.9.0.tgz", + "integrity": "sha1-vYUGBLQEJFmlpBzX0zjL7Wle2WQ=", "dev": true, "requires": { - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5" + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", - "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==", + "version": "1.9.0", + "resolved": "http://r.cnpmjs.org/@webassemblyjs/floating-point-hex-parser/download/@webassemblyjs/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha1-PD07Jxvd/ITesA9xNEQ4MR1S/7Q=", "dev": true }, "@webassemblyjs/helper-api-error": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", - "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==", + "version": "1.9.0", + "resolved": "http://r.cnpmjs.org/@webassemblyjs/helper-api-error/download/@webassemblyjs/helper-api-error-1.9.0.tgz", + "integrity": "sha1-ID9nbjM7lsnaLuqzzO8zxFkotqI=", "dev": true }, "@webassemblyjs/helper-buffer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", - "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==", + "version": "1.9.0", + "resolved": "http://r.cnpmjs.org/@webassemblyjs/helper-buffer/download/@webassemblyjs/helper-buffer-1.9.0.tgz", + "integrity": "sha1-oUQtJpxf6yP8vJ73WdrDVH8p3gA=", "dev": true }, "@webassemblyjs/helper-code-frame": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", - "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", + "version": "1.9.0", + "resolved": "http://r.cnpmjs.org/@webassemblyjs/helper-code-frame/download/@webassemblyjs/helper-code-frame-1.9.0.tgz", + "integrity": "sha1-ZH+Iks0gQ6gqwMjF51w28dkVnyc=", "dev": true, "requires": { - "@webassemblyjs/wast-printer": "1.8.5" + "@webassemblyjs/wast-printer": "1.9.0" } }, "@webassemblyjs/helper-fsm": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", - "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==", + "version": "1.9.0", + "resolved": "http://r.cnpmjs.org/@webassemblyjs/helper-fsm/download/@webassemblyjs/helper-fsm-1.9.0.tgz", + "integrity": "sha1-wFJWtxJEIUZx9LCOwQitY7cO3bg=", "dev": true }, "@webassemblyjs/helper-module-context": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", - "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", + "version": "1.9.0", + "resolved": "http://r.cnpmjs.org/@webassemblyjs/helper-module-context/download/@webassemblyjs/helper-module-context-1.9.0.tgz", + "integrity": "sha1-JdiIS3aDmHGgimxvgGw5ee9xLwc=", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "mamacro": "^0.0.3" + "@webassemblyjs/ast": "1.9.0" } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", - "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==", + "version": "1.9.0", + "resolved": "http://r.cnpmjs.org/@webassemblyjs/helper-wasm-bytecode/download/@webassemblyjs/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha1-T+2L6sm4wU+MWLcNEk1UndH+V5A=", "dev": true }, "@webassemblyjs/helper-wasm-section": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", - "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", + "version": "1.9.0", + "resolved": "http://r.cnpmjs.org/@webassemblyjs/helper-wasm-section/download/@webassemblyjs/helper-wasm-section-1.9.0.tgz", + "integrity": "sha1-WkE41aYpK6GLBMWuSXF+QWeWU0Y=", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" } }, "@webassemblyjs/ieee754": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", - "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", + "version": "1.9.0", + "resolved": "http://r.cnpmjs.org/@webassemblyjs/ieee754/download/@webassemblyjs/ieee754-1.9.0.tgz", + "integrity": "sha1-Fceg+6roP7JhQ7us9tbfFwKtOeQ=", "dev": true, "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", - "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", + "version": "1.9.0", + "resolved": "http://r.cnpmjs.org/@webassemblyjs/leb128/download/@webassemblyjs/leb128-1.9.0.tgz", + "integrity": "sha1-8Zygt2ptxVYjoJz/p2noOPoeHJU=", "dev": true, "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", - "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==", + "version": "1.9.0", + "resolved": "http://r.cnpmjs.org/@webassemblyjs/utf8/download/@webassemblyjs/utf8-1.9.0.tgz", + "integrity": "sha1-BNM7Y2945qaBMifoJAL3Y3tiKas=", "dev": true }, "@webassemblyjs/wasm-edit": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", - "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", + "version": "1.9.0", + "resolved": "http://r.cnpmjs.org/@webassemblyjs/wasm-edit/download/@webassemblyjs/wasm-edit-1.9.0.tgz", + "integrity": "sha1-P+bXnT8PkiGDqoYALELdJWz+6c8=", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/helper-wasm-section": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-opt": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", - "@webassemblyjs/wast-printer": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" } }, "@webassemblyjs/wasm-gen": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", - "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", + "version": "1.9.0", + "resolved": "http://r.cnpmjs.org/@webassemblyjs/wasm-gen/download/@webassemblyjs/wasm-gen-1.9.0.tgz", + "integrity": "sha1-ULxw7Gje2OJ2OwGhQYv0NJGnpJw=", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" } }, "@webassemblyjs/wasm-opt": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", - "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", + "version": "1.9.0", + "resolved": "http://r.cnpmjs.org/@webassemblyjs/wasm-opt/download/@webassemblyjs/wasm-opt-1.9.0.tgz", + "integrity": "sha1-IhEYHlsxMmRDzIES658LkChyGmE=", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" } }, "@webassemblyjs/wasm-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", - "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", + "version": "1.9.0", + "resolved": "http://r.cnpmjs.org/@webassemblyjs/wasm-parser/download/@webassemblyjs/wasm-parser-1.9.0.tgz", + "integrity": "sha1-nUjkSCbfSmWYKUqmyHRp1kL/9l4=", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" } }, "@webassemblyjs/wast-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", - "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", + "version": "1.9.0", + "resolved": "http://r.cnpmjs.org/@webassemblyjs/wast-parser/download/@webassemblyjs/wast-parser-1.9.0.tgz", + "integrity": "sha1-MDERXXmsW9JhVWzsw/qQo+9FGRQ=", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/floating-point-hex-parser": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-code-frame": "1.8.5", - "@webassemblyjs/helper-fsm": "1.8.5", + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", "@xtuc/long": "4.2.2" } }, "@webassemblyjs/wast-printer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", - "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", + "version": "1.9.0", + "resolved": "http://r.cnpmjs.org/@webassemblyjs/wast-printer/download/@webassemblyjs/wast-printer-1.9.0.tgz", + "integrity": "sha1-STXVTIX+9jewDOn1I3dFHQDUeJk=", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5", + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", "@xtuc/long": "4.2.2" } }, "@xtuc/ieee754": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "resolved": "http://r.cnpmjs.org/@xtuc/ieee754/download/@xtuc/ieee754-1.2.0.tgz", + "integrity": "sha1-7vAUoxRa5Hehy8AM0eVSM23Ot5A=", "dev": true }, "@xtuc/long": { "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "resolved": "http://r.cnpmjs.org/@xtuc/long/download/@xtuc/long-4.2.2.tgz", + "integrity": "sha1-0pHGpOl5ibXGHZrPOWrk/hM6cY0=", + "dev": true + }, + "JSV": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/JSV/download/JSV-4.0.2.tgz", + "integrity": "sha1-0Hf2glVx+CEy+d/67Vh7QCn+/1c=", "dev": true }, "abab": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz", - "integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w==", + "version": "2.0.4", + "resolved": "https://registry.npm.taobao.org/abab/download/abab-2.0.4.tgz?cache=0&sync_timestamp=1596258006101&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fabab%2Fdownload%2Fabab-2.0.4.tgz", + "integrity": "sha1-bfpXtBfKBtIbJHjw5jgwL5nCQFw=", "dev": true }, "abbrev": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "resolved": "https://r.cnpmjs.org/abbrev/download/abbrev-1.1.1.tgz", + "integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg=", "dev": true }, "accepts": { "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "resolved": "http://r.cnpmjs.org/accepts/download/accepts-1.3.7.tgz", + "integrity": "sha1-UxvHJlF6OytB+FACHGzBXqq1B80=", "dev": true, "requires": { "mime-types": "~2.1.24", "negotiator": "0.6.2" - }, - "dependencies": { - "mime-db": { - "version": "1.42.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", - "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==", - "dev": true - }, - "mime-types": { - "version": "2.1.25", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz", - "integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==", - "dev": true, - "requires": { - "mime-db": "1.42.0" - } - } } }, "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "version": "5.7.4", + "resolved": "https://r.cnpmjs.org/acorn/download/acorn-5.7.4.tgz", + "integrity": "sha1-Po2KmUfQWZoXltECJddDL0pKz14=", "dev": true }, "acorn-globals": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.2.tgz", - "integrity": "sha512-BbzvZhVtZP+Bs1J1HcwrQe8ycfO0wStkSGxuul3He3GkHOIZ6eTqOkPuw9IP1X3+IkOo4wiJmwkobzXYz4wewQ==", + "version": "4.3.4", + "resolved": "http://r.cnpmjs.org/acorn-globals/download/acorn-globals-4.3.4.tgz", + "integrity": "sha1-n6GSat3BHJcwjE5m163Q1Awycuc=", "dev": true, "requires": { "acorn": "^6.0.1", @@ -4222,34 +3614,23 @@ }, "dependencies": { "acorn": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", - "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", + "version": "6.4.1", + "resolved": "https://r.cnpmjs.org/acorn/download/acorn-6.4.1.tgz", + "integrity": "sha1-Ux5Yuj9RudrLmmZGyk3r9bFMpHQ=", "dev": true } } }, "acorn-jsx": { - "version": "3.0.1", - "resolved": "http://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", - "dev": true, - "requires": { - "acorn": "^3.0.4" - }, - "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "http://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", - "dev": true - } - } + "version": "5.3.1", + "resolved": "https://registry.npm.taobao.org/acorn-jsx/download/acorn-jsx-5.3.1.tgz?cache=0&sync_timestamp=1599499085730&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn-jsx%2Fdownload%2Facorn-jsx-5.3.1.tgz", + "integrity": "sha1-/IZh4Rt6wVOcR9v+oucrOvNNJns=", + "dev": true }, "acorn-walk": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz", - "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==", + "version": "6.2.0", + "resolved": "https://r.cnpmjs.org/acorn-walk/download/acorn-walk-6.2.0.tgz", + "integrity": "sha1-Ejy487hMIXHx9/slJhWxx4prGow=", "dev": true }, "add-px-to-style": { @@ -4260,142 +3641,52 @@ }, "agent-base": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "resolved": "https://r.cnpmjs.org/agent-base/download/agent-base-4.3.0.tgz", + "integrity": "sha1-gWXwHENgCbzK0LHRIvBe13Dvxu4=", "dev": true, "requires": { "es6-promisify": "^5.0.0" } }, "airbnb-prop-types": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/airbnb-prop-types/-/airbnb-prop-types-2.15.0.tgz", - "integrity": "sha512-jUh2/hfKsRjNFC4XONQrxo/n/3GG4Tn6Hl0WlFQN5PY9OMC9loSCoAYKnZsWaP8wEfd5xcrPloK0Zg6iS1xwVA==", + "version": "2.16.0", + "resolved": "https://registry.npm.taobao.org/airbnb-prop-types/download/airbnb-prop-types-2.16.0.tgz?cache=0&sync_timestamp=1595845294915&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fairbnb-prop-types%2Fdownload%2Fairbnb-prop-types-2.16.0.tgz", + "integrity": "sha1-uWJ0zvoauxT2I/gEFz7pfBOXHcI=", "dev": true, "requires": { - "array.prototype.find": "^2.1.0", - "function.prototype.name": "^1.1.1", - "has": "^1.0.3", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", + "array.prototype.find": "^2.1.1", + "function.prototype.name": "^1.1.2", + "is-regex": "^1.1.0", + "object-is": "^1.1.2", "object.assign": "^4.1.0", - "object.entries": "^1.1.0", + "object.entries": "^1.1.2", "prop-types": "^15.7.2", "prop-types-exact": "^1.2.0", - "react-is": "^16.9.0" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0.tgz", - "integrity": "sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.1.5", - "is-regex": "^1.0.5", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" - }, - "dependencies": { - "is-regex": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", - "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - } - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "function.prototype.name": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.2.tgz", - "integrity": "sha512-C8A+LlHBJjB2AdcRPorc5JvJ5VUoWlXdEHLOJdCI7kjHEtGTpHQUiqMvCIKUwIsGwZX2jZJy761AXsn356bJQg==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "functions-have-names": "^1.2.0" - } - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "is-callable": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", - "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", - "dev": true - }, - "object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - } + "react-is": "^16.13.1" } }, "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "version": "6.12.3", + "resolved": "https://registry.npm.taobao.org/ajv/download/ajv-6.12.3.tgz?cache=0&sync_timestamp=1593876887263&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.3.tgz", + "integrity": "sha1-GMWvOKER3etPJpe9eNaKvByr1wY=", "dev": true, "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", + "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, "ajv-errors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.0.tgz", - "integrity": "sha1-7PAh+hCP0X37Xms4Py3SM+Mf/Fk=", + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/ajv-errors/download/ajv-errors-1.0.1.tgz", + "integrity": "sha1-81mGrOuRr63sQQL72FAUlQzvpk0=", "dev": true }, "ajv-keywords": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", - "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", + "version": "3.5.2", + "resolved": "https://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-3.5.2.tgz?cache=0&sync_timestamp=1595907014086&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv-keywords%2Fdownload%2Fajv-keywords-3.5.2.tgz", + "integrity": "sha1-MfKdpatuANHC0yms97WSlhTVAU0=", "dev": true }, "alphanum-sort": { @@ -4412,8 +3703,8 @@ }, "ansi-colors": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", - "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "resolved": "http://r.cnpmjs.org/ansi-colors/download/ansi-colors-1.1.0.tgz", + "integrity": "sha1-Y3S03V1HGP884npnGjscrQdxMqk=", "dev": true, "requires": { "ansi-wrap": "^0.1.0" @@ -4429,9 +3720,9 @@ } }, "ansi-escapes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", - "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", + "version": "3.2.0", + "resolved": "http://r.cnpmjs.org/ansi-escapes/download/ansi-escapes-3.2.0.tgz", + "integrity": "sha1-h4C5j/nb9WOBUtHx/lwde0RCl2s=", "dev": true }, "ansi-gray": { @@ -4459,15 +3750,16 @@ } }, "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "version": "5.0.0", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-5.0.0.tgz", + "integrity": "sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U=", "dev": true }, "ansi-styles": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "resolved": "http://r.cnpmjs.org/ansi-styles/download/ansi-styles-3.2.1.tgz", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", + "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -4486,110 +3778,371 @@ }, "any-observable": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz", - "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==", + "resolved": "https://r.cnpmjs.org/any-observable/download/any-observable-0.3.0.tgz", + "integrity": "sha1-r5M0deWAamfQ198JDdXovvZdEZs=", "dev": true }, "anymatch": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "resolved": "http://r.cnpmjs.org/anymatch/download/anymatch-2.0.0.tgz", + "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=", "dev": true, "requires": { "micromatch": "^3.1.4", "normalize-path": "^2.1.1" }, "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "arr-diff": { + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/arr-diff/download/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "http://r.cnpmjs.org/array-unique/download/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "http://r.cnpmjs.org/braces/download/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", "dev": true, "requires": { - "remove-trailing-separator": "^1.0.1" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } - } - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", - "dev": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "debug": { + "version": "2.6.9", + "resolved": "http://r.cnpmjs.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "ms": "2.0.0" } }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "expand-brackets": { + "version": "2.1.4", + "resolved": "http://r.cnpmjs.org/expand-brackets/download/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "http://r.cnpmjs.org/extglob/download/extglob-2.0.4.tgz", + "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/fill-range/download/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "http://r.cnpmjs.org/is-buffer/download/is-buffer-1.1.6.tgz", + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", + "dev": true + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-6.0.3.tgz", + "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "http://r.cnpmjs.org/micromatch/download/micromatch-3.1.10.tgz", + "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "http://r.cnpmjs.org/aproba/download/aproba-1.2.0.tgz", + "integrity": "sha1-aALmJk79GMeQobDVF/DyYnvyyUo=", + "dev": true + }, + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://r.cnpmjs.org/are-we-there-yet/download/are-we-there-yet-1.1.5.tgz", + "integrity": "sha1-SzXClE8GKov82mZBB2A1D+nd/CE=", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "http://r.cnpmjs.org/argparse/download/argparse-1.0.10.tgz", + "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/arr-diff/download/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "http://r.cnpmjs.org/arr-flatten/download/arr-flatten-1.1.0.tgz", + "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true }, "array-differ": { @@ -4635,29 +4188,27 @@ "dev": true }, "array-includes": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", - "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/array-includes/download/array-includes-3.1.1.tgz", + "integrity": "sha1-zdZ+aFK9+cEhVGB4ZzIlXtJFk0g=", "dev": true, "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.7.0" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0", + "is-string": "^1.0.5" } }, "array-slice": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", - "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", + "resolved": "https://r.cnpmjs.org/array-slice/download/array-slice-1.1.0.tgz", + "integrity": "sha1-42jqFfibxwaff/uJrsOmx9SsItQ=", "dev": true }, "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/array-union/download/array-union-2.1.0.tgz", + "integrity": "sha1-t5hCCtvrHego2ErNii4j0+/oXo0=", + "dev": true }, "array-uniq": { "version": "1.0.3", @@ -4666,94 +4217,39 @@ "dev": true }, "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "version": "0.2.1", + "resolved": "http://r.cnpmjs.org/array-unique/download/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", "dev": true }, "array.prototype.find": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.1.0.tgz", - "integrity": "sha512-Wn41+K1yuO5p7wRZDl7890c3xvv5UBrfVXTVIe28rSQb6LS0fZMDrQB6PAcxQFRFy6vJTLDc3A2+3CjQdzVKRg==", + "version": "2.1.1", + "resolved": "https://r.cnpmjs.org/array.prototype.find/download/array.prototype.find-2.1.1.tgz", + "integrity": "sha1-O6yiYQjKev+wjbBr8L5ssxFalpw=", "dev": true, "requires": { "define-properties": "^1.1.3", - "es-abstract": "^1.13.0" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0.tgz", - "integrity": "sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.1.5", - "is-regex": "^1.0.5", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "is-callable": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", - "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", - "dev": true - }, - "is-regex": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", - "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } + "es-abstract": "^1.17.4" } }, "array.prototype.flat": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.1.tgz", - "integrity": "sha512-rVqIs330nLJvfC7JqYvEWwqVr5QjYF1ib02i3YJtR/fICO6527Tjpc/e4Mvmxh3GIePPreRXMdaGyC99YphWEw==", + "version": "1.2.3", + "resolved": "https://r.cnpmjs.org/array.prototype.flat/download/array.prototype.flat-1.2.3.tgz", + "integrity": "sha1-DegrQmsDGNv9uUAInjiwQ9N/bHs=", "dev": true, "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.10.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, + "array.prototype.flatmap": { + "version": "1.2.3", + "resolved": "https://registry.npm.taobao.org/array.prototype.flatmap/download/array.prototype.flatmap-1.2.3.tgz", + "integrity": "sha1-HBP4SheFZgQt1j3kQURA25Ii5EM=", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", "function-bind": "^1.1.1" } }, @@ -4770,8 +4266,8 @@ }, "asn1": { "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "resolved": "http://r.cnpmjs.org/asn1/download/asn1-0.2.4.tgz", + "integrity": "sha1-jSR136tVO7M+d7VOWeiAu4ziMTY=", "dev": true, "requires": { "safer-buffer": "~2.1.0" @@ -4779,19 +4275,27 @@ }, "asn1.js": { "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "resolved": "http://r.cnpmjs.org/asn1.js/download/asn1.js-4.10.1.tgz", + "integrity": "sha1-ucK/WAXx5kqt7tbfOiv6+1pz9aA=", "dev": true, "requires": { "bn.js": "^4.0.0", "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "http://r.cnpmjs.org/bn.js/download/bn.js-4.11.9.tgz", + "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=", + "dev": true + } } }, "assert": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "resolved": "http://r.cnpmjs.org/assert/download/assert-1.5.0.tgz", + "integrity": "sha1-VcEJqvbgrv2z3EtxJAxwv1dLGOs=", "dev": true, "requires": { "object-assign": "^4.1.1", @@ -4835,23 +4339,20 @@ }, "astral-regex": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "resolved": "http://r.cnpmjs.org/astral-regex/download/astral-regex-1.0.0.tgz", + "integrity": "sha1-bIw/uCfdQ+45GPJ7gngqt2WKb9k=", "dev": true }, "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", - "dev": true, - "requires": { - "lodash": "^4.17.10" - } + "version": "3.2.0", + "resolved": "http://r.cnpmjs.org/async/download/async-3.2.0.tgz", + "integrity": "sha1-s6JoXF67ZB094C0WEALGD8n4VyA=", + "dev": true }, "async-each": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "resolved": "http://r.cnpmjs.org/async-each/download/async-each-1.0.3.tgz", + "integrity": "sha1-tyfb+H12UWAvBvTUrDh/R9kbDL8=", "dev": true }, "async-foreach": { @@ -4861,15 +4362,15 @@ "dev": true }, "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/async-limiter/download/async-limiter-1.0.1.tgz", + "integrity": "sha1-3TeelPDbgxCwgpH51kwyCXZmF/0=", "dev": true }, "async-validator": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-1.12.2.tgz", - "integrity": "sha512-57EETfCPFiB7M4QscvQzWSGNsmtkjjzZv318SK1CBlstk+hycV72ocjriMOOM48HjvmoAoJGpJNjC7Z76RlnZA==" + "version": "3.4.0", + "resolved": "https://r.cnpmjs.org/async-validator/download/async-validator-3.4.0.tgz", + "integrity": "sha1-hxs+WUEkv0xOt7zRqeeLRPOwnK4=" }, "asynckit": { "version": "0.4.0", @@ -4877,16 +4378,22 @@ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/at-least-node/download/at-least-node-1.0.0.tgz", + "integrity": "sha1-YCzUtG6EStTv/JKoARo8RuAjjcI=", + "dev": true + }, "atob": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "resolved": "http://r.cnpmjs.org/atob/download/atob-2.1.2.tgz", + "integrity": "sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k=", "dev": true }, "autoprefixer": { "version": "8.6.5", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-8.6.5.tgz", - "integrity": "sha512-PLWJN3Xo/rycNkx+mp8iBDMTm3FeWe4VmYaZDSqL5QQB9sLsQkG5k8n+LNDFnhh9kdq2K+egL/icpctOmDHwig==", + "resolved": "http://r.cnpmjs.org/autoprefixer/download/autoprefixer-8.6.5.tgz", + "integrity": "sha1-ND89GT7VaLMgjgARehuW62kdTuk=", "dev": true, "requires": { "browserslist": "^3.2.8", @@ -4895,6 +4402,18 @@ "num2fraction": "^1.2.2", "postcss": "^6.0.23", "postcss-value-parser": "^3.2.3" + }, + "dependencies": { + "browserslist": { + "version": "3.2.8", + "resolved": "http://r.cnpmjs.org/browserslist/download/browserslist-3.2.8.tgz", + "integrity": "sha1-sABTYdZHHw9ZUnl6dvyYXx+Xj8Y=", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30000844", + "electron-to-chromium": "^1.3.47" + } + } } }, "aws-sign2": { @@ -4904,18 +4423,18 @@ "dev": true }, "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "version": "1.10.0", + "resolved": "http://r.cnpmjs.org/aws4/download/aws4-1.10.0.tgz", + "integrity": "sha1-oXs6jqgRBg501H0wYSJACtRJeuI=", "dev": true }, "axios": { - "version": "0.18.0", - "resolved": "http://registry.npmjs.org/axios/-/axios-0.18.0.tgz", - "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=", + "version": "0.18.1", + "resolved": "http://r.cnpmjs.org/axios/download/axios-0.18.1.tgz", + "integrity": "sha1-/z8N4ue10YDnV62YAA8Qgbh7zqM=", "requires": { - "follow-redirects": "^1.3.0", - "is-buffer": "^1.1.5" + "follow-redirects": "1.5.10", + "is-buffer": "^2.0.2" } }, "babel-code-frame": { @@ -4929,6 +4448,12 @@ "js-tokens": "^3.0.2" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", @@ -4954,7 +4479,16 @@ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", "dev": true }, - "supports-color": { + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", @@ -4964,162 +4498,13 @@ }, "babel-core": { "version": "7.0.0-bridge.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", - "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==" - }, - "babel-eslint": { - "version": "8.2.6", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-8.2.6.tgz", - "integrity": "sha512-aCdHjhzcILdP8c9lej7hvXKvQieyRt20SF102SIGyY4cUIiw6UaAtK4j2o3dXX74jEmy0TJ0CEhv4fTIM3SzcA==", - "dev": true, - "requires": { - "@babel/code-frame": "7.0.0-beta.44", - "@babel/traverse": "7.0.0-beta.44", - "@babel/types": "7.0.0-beta.44", - "babylon": "7.0.0-beta.44", - "eslint-scope": "3.7.1", - "eslint-visitor-keys": "^1.0.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz", - "integrity": "sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g==", - "dev": true, - "requires": { - "@babel/highlight": "7.0.0-beta.44" - } - }, - "@babel/generator": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.44.tgz", - "integrity": "sha512-5xVb7hlhjGcdkKpMXgicAVgx8syK5VJz193k0i/0sLP6DzE6lRrU1K3B/rFefgdo9LPGMAOOOAWW4jycj07ShQ==", - "dev": true, - "requires": { - "@babel/types": "7.0.0-beta.44", - "jsesc": "^2.5.1", - "lodash": "^4.2.0", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" - } - }, - "@babel/helper-function-name": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz", - "integrity": "sha512-MHRG2qZMKMFaBavX0LWpfZ2e+hLloT++N7rfM3DYOMUOGCD8cVjqZpwiL8a0bOX3IYcQev1ruciT0gdFFRTxzg==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "7.0.0-beta.44", - "@babel/template": "7.0.0-beta.44", - "@babel/types": "7.0.0-beta.44" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz", - "integrity": "sha512-w0YjWVwrM2HwP6/H3sEgrSQdkCaxppqFeJtAnB23pRiJB5E/O9Yp7JAAeWBl+gGEgmBFinnTyOv2RN7rcSmMiw==", - "dev": true, - "requires": { - "@babel/types": "7.0.0-beta.44" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz", - "integrity": "sha512-aQ7QowtkgKKzPGf0j6u77kBMdUFVBKNHw2p/3HX/POt5/oz8ec5cs0GwlgM8Hz7ui5EwJnzyfRmkNF1Nx1N7aA==", - "dev": true, - "requires": { - "@babel/types": "7.0.0-beta.44" - } - }, - "@babel/highlight": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.44.tgz", - "integrity": "sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ==", - "dev": true, - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^3.0.0" - } - }, - "@babel/template": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.44.tgz", - "integrity": "sha512-w750Sloq0UNifLx1rUqwfbnC6uSUk0mfwwgGRfdLiaUzfAOiH0tHJE6ILQIUi3KYkjiCDTskoIsnfqZvWLBDng==", - "dev": true, - "requires": { - "@babel/code-frame": "7.0.0-beta.44", - "@babel/types": "7.0.0-beta.44", - "babylon": "7.0.0-beta.44", - "lodash": "^4.2.0" - } - }, - "@babel/traverse": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.44.tgz", - "integrity": "sha512-UHuDz8ukQkJCDASKHf+oDt3FVUzFd+QYfuBIsiNu/4+/ix6pP/C+uQZJ6K1oEfbCMv/IKWbgDEh7fcsnIE5AtA==", - "dev": true, - "requires": { - "@babel/code-frame": "7.0.0-beta.44", - "@babel/generator": "7.0.0-beta.44", - "@babel/helper-function-name": "7.0.0-beta.44", - "@babel/helper-split-export-declaration": "7.0.0-beta.44", - "@babel/types": "7.0.0-beta.44", - "babylon": "7.0.0-beta.44", - "debug": "^3.1.0", - "globals": "^11.1.0", - "invariant": "^2.2.0", - "lodash": "^4.2.0" - } - }, - "@babel/types": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.44.tgz", - "integrity": "sha512-5eTV4WRmqbaFM3v9gHAIljEQJU4Ssc6fxL61JN+Oe2ga/BwyjzjamwkCVVAQjHGuAX8i0BWo42dshL8eO5KfLQ==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.2.0", - "to-fast-properties": "^2.0.0" - } - }, - "babylon": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz", - "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==", - "dev": true - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } - } + "resolved": "http://r.cnpmjs.org/babel-core/download/babel-core-7.0.0-bridge.0.tgz", + "integrity": "sha1-laSS3dkPm06aSh2hTrM1uHtjTs4=" }, "babel-generator": { "version": "6.26.1", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", - "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "resolved": "https://r.cnpmjs.org/babel-generator/download/babel-generator-6.26.1.tgz", + "integrity": "sha1-GERAjTuPDTWkBOp6wYDwh6YBvZA=", "dev": true, "requires": { "babel-messages": "^6.23.0", @@ -5137,187 +4522,36 @@ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true } } }, "babel-jest": { "version": "22.4.4", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-22.4.4.tgz", - "integrity": "sha512-A9NB6/lZhYyypR9ATryOSDcqBaqNdzq4U+CN+/wcMsLcmKkPxQEoTKLajGfd3IkxNyVBT8NewUK2nWyGbSzHEQ==", + "resolved": "http://r.cnpmjs.org/babel-jest/download/babel-jest-22.4.4.tgz", + "integrity": "sha1-l3JZJAQg4idETr5J4iamHknqZZ0=", "dev": true, "requires": { "babel-plugin-istanbul": "^4.1.5", "babel-preset-jest": "^22.4.4" - }, - "dependencies": { - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "^1.0.1" - } - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, - "babel-plugin-istanbul": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz", - "integrity": "sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ==", - "dev": true, - "requires": { - "babel-plugin-syntax-object-rest-spread": "^6.13.0", - "find-up": "^2.1.0", - "istanbul-lib-instrument": "^1.10.1", - "test-exclude": "^4.2.1" - } - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "requires": { - "is-posix-bracket": "^0.1.0" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "istanbul-lib-coverage": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz", - "integrity": "sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz", - "integrity": "sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==", - "dev": true, - "requires": { - "babel-generator": "^6.18.0", - "babel-template": "^6.16.0", - "babel-traverse": "^6.18.0", - "babel-types": "^6.18.0", - "babylon": "^6.18.0", - "istanbul-lib-coverage": "^1.2.1", - "semver": "^5.3.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "test-exclude": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.2.3.tgz", - "integrity": "sha512-SYbXgY64PT+4GAL2ocI3HwPa4Q4TBKm0cwAVeKOt/Aoc0gSpNRjJX8w0pA1LMKZ3LBmd8pYBqApFNQLII9kavA==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "micromatch": "^2.3.11", - "object-assign": "^4.1.0", - "read-pkg-up": "^1.0.1", - "require-main-filename": "^1.0.1" - } - } } }, "babel-loader": { - "version": "8.0.6", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz", - "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==", + "version": "8.1.0", + "resolved": "http://r.cnpmjs.org/babel-loader/download/babel-loader-8.1.0.tgz", + "integrity": "sha1-xhHVESvVIJq+i5+oTD5NolJ18cM=", "dev": true, "requires": { - "find-cache-dir": "^2.0.0", - "loader-utils": "^1.0.2", - "mkdirp": "^0.5.1", - "pify": "^4.0.1" + "find-cache-dir": "^2.1.0", + "loader-utils": "^1.4.0", + "mkdirp": "^0.5.3", + "pify": "^4.0.1", + "schema-utils": "^2.6.5" }, "dependencies": { "pify": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "resolved": "http://r.cnpmjs.org/pify/download/pify-4.0.1.tgz", + "integrity": "sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE=", "dev": true } } @@ -5332,93 +4566,49 @@ } }, "babel-plugin-apply-mdx-type-prop": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.5.3.tgz", - "integrity": "sha512-9G+V0R8Jx56nHdEnWvRmSN//rFXMDiBZynu9JPuu3KVUhZhaJMgx5CTiXcdR2P//c85Q/IuwPbH0vIGrjdSq8A==", + "version": "1.6.16", + "resolved": "https://registry.npm.taobao.org/babel-plugin-apply-mdx-type-prop/download/babel-plugin-apply-mdx-type-prop-1.6.16.tgz", + "integrity": "sha1-S+zWWzqhCPFcUkoLElynyB80Q9g=", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0", - "@mdx-js/util": "^1.5.3" + "@babel/helper-plugin-utils": "7.10.4", + "@mdx-js/util": "1.6.16" } }, "babel-plugin-dynamic-import-node": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", - "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", + "version": "2.3.3", + "resolved": "http://r.cnpmjs.org/babel-plugin-dynamic-import-node/download/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha1-hP2hnJduxcbe/vV/lCez3vZuF6M=", "dev": true, "requires": { "object.assign": "^4.1.0" } }, "babel-plugin-extract-import-names": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.5.3.tgz", - "integrity": "sha512-UPgDHjNb4hr2xYRWO8C8JPX7GO+q3gluKd3pkcmVcd1gn9bdO7/yE5FKnYe1UkCPY7PhEUOpEzHCSuIy3GMpsQ==", + "version": "1.6.16", + "resolved": "https://registry.npm.taobao.org/babel-plugin-extract-import-names/download/babel-plugin-extract-import-names-1.6.16.tgz", + "integrity": "sha1-uWQATnlL3WJTTFJdtn2eiQ1cwHk=", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "7.10.4" } }, "babel-plugin-istanbul": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.1.4.tgz", - "integrity": "sha512-dySz4VJMH+dpndj0wjJ8JPs/7i1TdSPb1nRrn56/92pKOF9VKC1FMFJmMXjzlGGusnCAqujP6PBCiKq0sVA+YQ==", + "version": "4.1.6", + "resolved": "http://r.cnpmjs.org/babel-plugin-istanbul/download/babel-plugin-istanbul-4.1.6.tgz", + "integrity": "sha1-NsWbIZLvzoHFs3gyG3QXWt0cmkU=", "dev": true, "requires": { - "find-up": "^3.0.0", - "istanbul-lib-instrument": "^3.3.0", - "test-exclude": "^5.2.3" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - } + "babel-plugin-syntax-object-rest-spread": "^6.13.0", + "find-up": "^2.1.0", + "istanbul-lib-instrument": "^1.10.1", + "test-exclude": "^4.2.1" } }, "babel-plugin-jest-hoist": { "version": "22.4.4", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.4.4.tgz", - "integrity": "sha512-DUvGfYaAIlkdnygVIEl0O4Av69NtuQWcrjMOv6DODPuhuGLDnbsARz3AwiiI/EkIMMlxQDUcrZ9yoyJvTNjcVQ==", + "resolved": "http://r.cnpmjs.org/babel-plugin-jest-hoist/download/babel-plugin-jest-hoist-22.4.4.tgz", + "integrity": "sha1-uYUZBuqzTHv2+MiVorCL6hqETAs=", "dev": true }, "babel-plugin-syntax-decorators": { @@ -5435,8 +4625,8 @@ }, "babel-plugin-transform-decorators-legacy": { "version": "1.3.5", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators-legacy/-/babel-plugin-transform-decorators-legacy-1.3.5.tgz", - "integrity": "sha512-jYHwjzRXRelYQ1uGm353zNzf3QmtdCfvJbuYTZ4gKveK7M9H1fs3a5AKdY1JUDl0z97E30ukORW1dzhWvsabtA==", + "resolved": "https://r.cnpmjs.org/babel-plugin-transform-decorators-legacy/download/babel-plugin-transform-decorators-legacy-1.3.5.tgz", + "integrity": "sha1-Dkkt/6Dt1wUpByiH+KqG1N2LQKE=", "dev": true, "requires": { "babel-plugin-syntax-decorators": "^6.1.18", @@ -5452,8 +4642,8 @@ }, "babel-preset-jest": { "version": "22.4.4", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-22.4.4.tgz", - "integrity": "sha512-+dxMtOFwnSYWfum0NaEc0O03oSdwBsjx4tMSChRDPGwu/4wSY6Q6ANW3wkjKpJzzguaovRs/DODcT4hbSN8yiA==", + "resolved": "http://r.cnpmjs.org/babel-preset-jest/download/babel-preset-jest-22.4.4.tgz", + "integrity": "sha1-7J+9i819/SS4tTIODmiAEyNbfDk=", "dev": true, "requires": { "babel-plugin-jest-hoist": "^22.4.4", @@ -5468,6 +4658,14 @@ "requires": { "core-js": "^2.4.0", "regenerator-runtime": "^0.11.0" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "http://r.cnpmjs.org/regenerator-runtime/download/regenerator-runtime-0.11.1.tgz", + "integrity": "sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk=", + "dev": true + } } }, "babel-template": { @@ -5481,6 +4679,14 @@ "babel-types": "^6.26.0", "babylon": "^6.18.0", "lodash": "^4.17.4" + }, + "dependencies": { + "babylon": { + "version": "6.18.0", + "resolved": "http://r.cnpmjs.org/babylon/download/babylon-6.18.0.tgz", + "integrity": "sha1-ry87iPpvXB5MY00aD46sT1WzleM=", + "dev": true + } } }, "babel-traverse": { @@ -5500,14 +4706,26 @@ "lodash": "^4.17.4" }, "dependencies": { + "babylon": { + "version": "6.18.0", + "resolved": "http://r.cnpmjs.org/babylon/download/babylon-6.18.0.tgz", + "integrity": "sha1-ry87iPpvXB5MY00aD46sT1WzleM=", + "dev": true + }, "debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "resolved": "http://r.cnpmjs.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", "dev": true, "requires": { "ms": "2.0.0" } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://r.cnpmjs.org/globals/download/globals-9.18.0.tgz", + "integrity": "sha1-qjiWs+abSH8X4x7SFD1pqOMMLYo=", + "dev": true } } }, @@ -5521,18 +4739,20 @@ "esutils": "^2.0.2", "lodash": "^4.17.4", "to-fast-properties": "^1.0.3" + }, + "dependencies": { + "to-fast-properties": { + "version": "1.0.3", + "resolved": "http://r.cnpmjs.org/to-fast-properties/download/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + } } }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true - }, "bail": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.4.tgz", - "integrity": "sha512-S8vuDB4w6YpRhICUDET3guPlQpaJl7od94tpZ0Fvnyp+MKW/HyDTcRDck+29C9g+d/qQHnddRH3+94kZdrW0Ww==", + "version": "1.0.5", + "resolved": "https://r.cnpmjs.org/bail/download/bail-1.0.5.tgz", + "integrity": "sha1-tvoTNASjksvB+MS/Y/WVM1Hnp3Y=", "dev": true }, "balanced-match": { @@ -5543,8 +4763,8 @@ }, "base": { "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "resolved": "http://r.cnpmjs.org/base/download/base-0.11.2.tgz", + "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=", "dev": true, "requires": { "cache-base": "^1.0.1", @@ -5567,8 +4787,8 @@ }, "is-accessor-descriptor": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "resolved": "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", "dev": true, "requires": { "kind-of": "^6.0.0" @@ -5576,8 +4796,8 @@ }, "is-data-descriptor": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "resolved": "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "dev": true, "requires": { "kind-of": "^6.0.0" @@ -5585,27 +4805,39 @@ }, "is-descriptor": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "resolved": "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" } + }, + "isobject": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-6.0.3.tgz", + "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", + "dev": true } } }, "base62": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/base62/-/base62-1.2.8.tgz", - "integrity": "sha512-V6YHUbjLxN1ymqNLb1DPHoU1CpfdL7d2YTIp5W3U4hhoG4hhxNmsFDs66M9EXxBiSEke5Bt5dwdfMwwZF70iLA==", + "resolved": "https://r.cnpmjs.org/base62/download/base62-1.2.8.tgz", + "integrity": "sha1-EmTLD7hI2HV5KHdHnb6LrmuuNCg=", "dev": true }, "base64-js": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", + "resolved": "http://r.cnpmjs.org/base64-js/download/base64-js-1.3.1.tgz", + "integrity": "sha1-WOzoy3XdB+ce0IxzarxfrE2/jfE=", "dev": true }, "batch": { @@ -5630,57 +4862,36 @@ "dev": true }, "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "version": "5.2.2", + "resolved": "http://r.cnpmjs.org/big.js/download/big.js-5.2.2.tgz", + "integrity": "sha1-ZfCvOC9Xi83HQr2cKB6cstd2gyg=", "dev": true }, "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-2.1.0.tgz?cache=0&sync_timestamp=1593261283449&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-2.1.0.tgz", + "integrity": "sha1-MPpAyef+B9vIlWeM0ocCTeokHdk=", + "dev": true, + "optional": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "http://r.cnpmjs.org/bindings/download/bindings-1.5.0.tgz", + "integrity": "sha1-EDU8npRTNLwFEabZCzj7x8nFBN8=", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } }, "bl": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", - "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", + "resolved": "https://r.cnpmjs.org/bl/download/bl-1.2.2.tgz", + "integrity": "sha1-oWCRFxcQPAdBDO9j71Gzl8Alr5w=", "dev": true, "requires": { "readable-stream": "^2.3.5", "safe-buffer": "^5.1.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, "block-stream": { @@ -5694,20 +4905,20 @@ }, "bluebird": { "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "resolved": "http://r.cnpmjs.org/bluebird/download/bluebird-3.7.2.tgz", + "integrity": "sha1-nyKcFb4nJFT/qXOs4NvueaGww28=", "dev": true }, "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "version": "5.1.2", + "resolved": "http://r.cnpmjs.org/bn.js/download/bn.js-5.1.2.tgz", + "integrity": "sha1-yWhpAtPJoncp9DqxD515wgBNp7A=", "dev": true }, "body-parser": { "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "resolved": "http://r.cnpmjs.org/body-parser/download/body-parser-1.19.0.tgz", + "integrity": "sha1-lrJwnlfJxOCab9Zqj9l5hE9p8Io=", "dev": true, "requires": { "bytes": "3.1.0", @@ -5724,8 +4935,8 @@ "dependencies": { "debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "resolved": "http://r.cnpmjs.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", "dev": true, "requires": { "ms": "2.0.0" @@ -5733,8 +4944,8 @@ }, "qs": { "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "resolved": "http://r.cnpmjs.org/qs/download/qs-6.7.0.tgz", + "integrity": "sha1-QdwaAV49WB8WIXdr4xr7KHapsbw=", "dev": true } } @@ -5755,8 +4966,8 @@ "dependencies": { "array-flatten": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "resolved": "http://r.cnpmjs.org/array-flatten/download/array-flatten-2.1.2.tgz", + "integrity": "sha1-JO+AoowaiTYX4hSbDG0NeIKTsJk=", "dev": true } } @@ -5769,8 +4980,8 @@ }, "brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "resolved": "http://r.cnpmjs.org/brace-expansion/download/brace-expansion-1.1.11.tgz", + "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", "dev": true, "requires": { "balanced-match": "^1.0.0", @@ -5778,32 +4989,12 @@ } }, "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "version": "3.0.2", + "resolved": "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz", + "integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=", "dev": true, "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "fill-range": "^7.0.1" } }, "brorand": { @@ -5813,15 +5004,15 @@ "dev": true }, "browser-process-hrtime": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz", - "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==", + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/browser-process-hrtime/download/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha1-PJtLfXgsgSHlbxAQbYTA0P/JRiY=", "dev": true }, "browser-resolve": { "version": "1.11.3", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", - "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "resolved": "http://r.cnpmjs.org/browser-resolve/download/browser-resolve-1.11.3.tgz", + "integrity": "sha1-m3y7PQ9RDky4a9vXlhJNKLWJCvY=", "dev": true, "requires": { "resolve": "1.1.7" @@ -5837,8 +5028,8 @@ }, "browserify-aes": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "resolved": "http://r.cnpmjs.org/browserify-aes/download/browserify-aes-1.2.0.tgz", + "integrity": "sha1-Mmc0ZC9APavDADIJhTu3CtQo70g=", "dev": true, "requires": { "buffer-xor": "^1.0.3", @@ -5851,8 +5042,8 @@ }, "browserify-cipher": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "resolved": "http://r.cnpmjs.org/browserify-cipher/download/browserify-cipher-1.0.1.tgz", + "integrity": "sha1-jWR0wbhwv9q807z8wZNKEOlPFfA=", "dev": true, "requires": { "browserify-aes": "^1.0.4", @@ -5862,8 +5053,8 @@ }, "browserify-des": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "resolved": "http://r.cnpmjs.org/browserify-des/download/browserify-des-1.0.2.tgz", + "integrity": "sha1-OvTx9Zg5QDVy8cZiBDdfen9wPpw=", "dev": true, "requires": { "cipher-base": "^1.0.1", @@ -5880,46 +5071,77 @@ "requires": { "bn.js": "^4.1.0", "randombytes": "^2.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "http://r.cnpmjs.org/bn.js/download/bn.js-4.11.9.tgz", + "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=", + "dev": true + } } }, "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "version": "4.2.1", + "resolved": "https://registry.npm.taobao.org/browserify-sign/download/browserify-sign-4.2.1.tgz?cache=0&sync_timestamp=1596557809886&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbrowserify-sign%2Fdownload%2Fbrowserify-sign-4.2.1.tgz", + "integrity": "sha1-6vSt1G3VS+O7OzbAzxWrvrp5VsM=", "dev": true, "requires": { - "bn.js": "^4.1.1", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.2", - "elliptic": "^6.0.0", - "inherits": "^2.0.1", - "parse-asn1": "^5.0.0" + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "http://r.cnpmjs.org/readable-stream/download/readable-stream-3.6.0.tgz", + "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "http://r.cnpmjs.org/safe-buffer/download/safe-buffer-5.2.1.tgz", + "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=", + "dev": true + } } }, "browserify-zlib": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "resolved": "http://r.cnpmjs.org/browserify-zlib/download/browserify-zlib-0.2.0.tgz", + "integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=", "dev": true, "requires": { "pako": "~1.0.5" } }, "browserslist": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", - "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", + "version": "4.14.0", + "resolved": "https://registry.npm.taobao.org/browserslist/download/browserslist-4.14.0.tgz?cache=0&sync_timestamp=1596754358006&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbrowserslist%2Fdownload%2Fbrowserslist-4.14.0.tgz", + "integrity": "sha1-KQiVGr/k7Jhze3LzTDvO3I1DsAA=", "dev": true, "requires": { - "caniuse-lite": "^1.0.30000844", - "electron-to-chromium": "^1.3.47" + "caniuse-lite": "^1.0.30001111", + "electron-to-chromium": "^1.3.523", + "escalade": "^3.0.2", + "node-releases": "^1.1.60" } }, "bser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.0.0.tgz", - "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=", + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/bser/download/bser-2.1.1.tgz", + "integrity": "sha1-5nh9og7OnQeZhTPP2d5vXDj0vAU=", "dev": true, "requires": { "node-int64": "^0.4.0" @@ -5927,8 +5149,9 @@ }, "buble": { "version": "0.19.6", - "resolved": "https://registry.npmjs.org/buble/-/buble-0.19.6.tgz", - "integrity": "sha512-9kViM6nJA1Q548Jrd06x0geh+BG2ru2+RMDkIHHgJY/8AcyCs34lTHwra9BX7YdPrZXd5aarkpr/SY8bmPgPdg==", + "resolved": "http://r.cnpmjs.org/buble/download/buble-0.19.6.tgz", + "integrity": "sha1-kVkJtr1bEe4DsciF7JFKi5dNNNM=", + "dev": true, "requires": { "chalk": "^2.4.1", "magic-string": "^0.25.1", @@ -5936,38 +5159,23 @@ "os-homedir": "^1.0.1", "regexpu-core": "^4.2.0", "vlq": "^1.0.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - } } }, "buffer": { "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "resolved": "http://r.cnpmjs.org/buffer/download/buffer-4.9.2.tgz", + "integrity": "sha1-Iw6tNEACmIZEhBqwJEr4xEu+Pvg=", "dev": true, "requires": { "base64-js": "^1.0.2", "ieee754": "^1.1.4", "isarray": "^1.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - } } }, "buffer-alloc": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "resolved": "https://r.cnpmjs.org/buffer-alloc/download/buffer-alloc-1.2.0.tgz", + "integrity": "sha1-iQ3ZDZI6hz4I4Q5f1RpX5bfM4Ow=", "dev": true, "requires": { "buffer-alloc-unsafe": "^1.1.0", @@ -5976,8 +5184,14 @@ }, "buffer-alloc-unsafe": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "resolved": "https://r.cnpmjs.org/buffer-alloc-unsafe/download/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha1-vX3CauKXLQ7aJTvgYdupkjScGfA=", + "dev": true + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://r.cnpmjs.org/buffer-crc32/download/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", "dev": true }, "buffer-fill": { @@ -5988,14 +5202,14 @@ }, "buffer-from": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "resolved": "http://r.cnpmjs.org/buffer-from/download/buffer-from-1.1.1.tgz", + "integrity": "sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8=", "dev": true }, "buffer-indexof": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "resolved": "http://r.cnpmjs.org/buffer-indexof/download/buffer-indexof-1.1.1.tgz", + "integrity": "sha1-Uvq8xqYG0aADAoAmSO9o9jnaJow=", "dev": true }, "buffer-xor": { @@ -6004,12 +5218,6 @@ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", "dev": true }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, "builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", @@ -6024,14 +5232,14 @@ }, "bytes": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "resolved": "http://r.cnpmjs.org/bytes/download/bytes-3.1.0.tgz", + "integrity": "sha1-9s95M6Ng4FiPqf3oVlHNx/gF0fY=", "dev": true }, "cacache": { - "version": "12.0.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", - "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", + "version": "12.0.4", + "resolved": "https://r.cnpmjs.org/cacache/download/cacache-12.0.4.tgz", + "integrity": "sha1-ZovL0QWutfHZL+JVcOyVJcj6pAw=", "dev": true, "requires": { "bluebird": "^3.5.5", @@ -6051,53 +5259,21 @@ "y18n": "^4.0.0" }, "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", - "dev": true - }, "lru-cache": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "resolved": "http://r.cnpmjs.org/lru-cache/download/lru-cache-5.1.1.tgz", + "integrity": "sha1-HaJ+ZxAnGUdpXa9oSOhH8B2EuSA=", "dev": true, "requires": { "yallist": "^3.0.2" } - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true } } }, "cache-base": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "resolved": "http://r.cnpmjs.org/cache-base/download/cache-base-1.0.1.tgz", + "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=", "dev": true, "requires": { "collection-visit": "^1.0.0", @@ -6109,6 +5285,14 @@ "to-object-path": "^0.3.0", "union-value": "^1.0.0", "unset-value": "^1.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } } }, "call-me-maybe": { @@ -6117,19 +5301,28 @@ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", "dev": true }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/caller-callsite/download/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "dev": true, + "requires": { + "callsites": "^2.0.0" + } + }, "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/caller-path/download/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", "dev": true, "requires": { - "callsites": "^0.2.0" + "caller-callsite": "^2.0.0" } }, "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/callsites/download/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", "dev": true }, "camel-case": { @@ -6143,15 +5336,15 @@ } }, "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "version": "5.3.1", + "resolved": "http://r.cnpmjs.org/camelcase/download/camelcase-5.3.1.tgz", + "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=", "dev": true }, "camelcase-css": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "resolved": "https://r.cnpmjs.org/camelcase-css/download/camelcase-css-2.0.1.tgz", + "integrity": "sha1-7pePaUeRTMMMa0R0G27R338EP9U=", "dev": true }, "camelcase-keys": { @@ -6162,6 +5355,14 @@ "requires": { "camelcase": "^2.0.0", "map-obj": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/camelcase/download/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + } } }, "caniuse-api": { @@ -6189,40 +5390,32 @@ } }, "caniuse-db": { - "version": "1.0.30000902", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000902.tgz", - "integrity": "sha512-G+NHJS11ARwUcE4nscvOrY/ztTBdW4Fw0/MlhjlKQiqimrGqG/K3RGW9Sm2ZWyWFp96VvKubSmn6ER7Wc6PlpA==", + "version": "1.0.30001112", + "resolved": "https://registry.npm.taobao.org/caniuse-db/download/caniuse-db-1.0.30001112.tgz?cache=0&sync_timestamp=1596772350264&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcaniuse-db%2Fdownload%2Fcaniuse-db-1.0.30001112.tgz", + "integrity": "sha1-icsklAKvLr8sI6VYXRvXjLXjhzI=", "dev": true }, "caniuse-lite": { - "version": "1.0.30000902", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000902.tgz", - "integrity": "sha512-EZG6qrRHkW715hOFjOrshH2JygbLfhaC8NjjkE5EdGJZhCYbtnJMaRdicB+2AP8xKX3QzW9g3mkDUTHUoBG5rQ==", + "version": "1.0.30001112", + "resolved": "https://registry.npm.taobao.org/caniuse-lite/download/caniuse-lite-1.0.30001112.tgz?cache=0&sync_timestamp=1596774941033&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcaniuse-lite%2Fdownload%2Fcaniuse-lite-1.0.30001112.tgz", + "integrity": "sha1-D//DuTT/Vv8FSMN7ydrX2IK89nI=", "dev": true }, "canvas": { "version": "2.6.1", - "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.6.1.tgz", - "integrity": "sha512-S98rKsPcuhfTcYbtF53UIJhcbgIAK533d1kJKMwsMwAIFgfd58MOyxRud3kktlzWiEkFliaJtvyZCBtud/XVEA==", + "resolved": "https://r.cnpmjs.org/canvas/download/canvas-2.6.1.tgz", + "integrity": "sha1-DQh91NYPWlqe+iAnVycKvqi++J4=", "dev": true, "requires": { "nan": "^2.14.0", "node-pre-gyp": "^0.11.0", "simple-get": "^3.0.3" - }, - "dependencies": { - "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", - "dev": true - } } }, "capture-exit": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "resolved": "http://r.cnpmjs.org/capture-exit/download/capture-exit-2.0.0.tgz", + "integrity": "sha1-+5U7+uvreB9iiYI52rtCbQilCaQ=", "dev": true, "requires": { "rsvp": "^4.8.4" @@ -6245,72 +5438,55 @@ "dev": true }, "ccount": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.4.tgz", - "integrity": "sha512-fpZ81yYfzentuieinmGnphk0pLkOTMm6MZdVqwd77ROvhko6iujLNGrHH5E7utq3ygWklwfmwuG+A7P+NpqT6w==", + "version": "1.0.5", + "resolved": "https://r.cnpmjs.org/ccount/download/ccount-1.0.5.tgz", + "integrity": "sha1-rIKpRJBaZc4gTrAwIxV+3ylCXBc=", "dev": true }, "chain-function": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/chain-function/-/chain-function-1.0.1.tgz", - "integrity": "sha512-SxltgMwL9uCko5/ZCLiyG2B7R9fY4pDZUw7hJ4MhirdjBLosoDqkWABi3XMucddHdLiFJMb7PD2MZifZriuMTg==" + "resolved": "http://r.cnpmjs.org/chain-function/download/chain-function-1.0.1.tgz", + "integrity": "sha1-xjBF5bS2Y/uG8cbhhq2vHeQCocw=" }, "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "version": "2.4.2", + "resolved": "https://r.cnpmjs.org/chalk/download/chalk-2.4.2.tgz", + "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", + "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" - }, - "dependencies": { - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "character-entities": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.2.tgz", - "integrity": "sha512-sMoHX6/nBiy3KKfC78dnEalnpn0Az0oSNvqUWYTtYrhRI5iUIYsROU48G+E+kMFQzqXaJ8kHJZ85n7y6/PHgwQ==" + "version": "1.2.4", + "resolved": "http://r.cnpmjs.org/character-entities/download/character-entities-1.2.4.tgz", + "integrity": "sha1-4Sw5Obfq9OWxXnrUxeKOHUjFsWs=", + "dev": true }, "character-entities-html4": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.3.tgz", - "integrity": "sha512-SwnyZ7jQBCRHELk9zf2CN5AnGEc2nA+uKMZLHvcqhpPprjkYhiLn0DywMHgN5ttFZuITMATbh68M6VIVKwJbcg==", + "version": "1.1.4", + "resolved": "https://r.cnpmjs.org/character-entities-html4/download/character-entities-html4-1.1.4.tgz", + "integrity": "sha1-DmSwo3U92/H9wETF/QHQGZoC4SU=", "dev": true }, "character-entities-legacy": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.2.tgz", - "integrity": "sha512-9NB2VbXtXYWdXzqrvAHykE/f0QJxzaKIpZ5QzNZrrgQ7Iyxr2vnfS8fCBNVW9nUEZE0lo57nxKRqnzY/dKrwlA==" + "version": "1.1.4", + "resolved": "http://r.cnpmjs.org/character-entities-legacy/download/character-entities-legacy-1.1.4.tgz", + "integrity": "sha1-lLwYRdznClu50uzHSHJWYSk9j8E=", + "dev": true }, "character-reference-invalid": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.2.tgz", - "integrity": "sha512-7I/xceXfKyUJmSAn/jw8ve/9DyOP7XxufNYLI9Px7CmsKgEUaZLUTax6nZxGQtaoiZCjpu6cHPj20xC/vqRReQ==" - }, - "chardet": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "version": "1.1.4", + "resolved": "http://r.cnpmjs.org/character-reference-invalid/download/character-reference-invalid-1.1.4.tgz", + "integrity": "sha1-CDMpzaDq4nKrPbvzfpo4LBOvFWA=", "dev": true }, "cheerio": { "version": "1.0.0-rc.3", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz", - "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==", + "resolved": "https://r.cnpmjs.org/cheerio/download/cheerio-1.0.0-rc.3.tgz", + "integrity": "sha1-CUY21CWy6cD065GkbAVjDJoai/Y=", "dev": true, "requires": { "css-select": "~1.2.0", @@ -6333,31 +5509,20 @@ "nth-check": "~1.0.1" } }, + "css-what": { + "version": "2.1.3", + "resolved": "https://r.cnpmjs.org/css-what/download/css-what-2.1.3.tgz", + "integrity": "sha1-ptdgRXM2X+dGhsPzEcVlE9iChfI=", + "dev": true + }, "dom-serializer": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "resolved": "http://r.cnpmjs.org/dom-serializer/download/dom-serializer-0.1.1.tgz", + "integrity": "sha1-HsQFnihLq+027sKUHUqXChic58A=", "dev": true, "requires": { "domelementtype": "^1.3.0", "entities": "^1.1.1" - }, - "dependencies": { - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - } - } - }, - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dev": true, - "requires": { - "domelementtype": "1" } }, "domutils": { @@ -6370,118 +5535,77 @@ "domelementtype": "1" } }, - "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "dev": true, - "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - } - } - }, - "readable-stream": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.3.0.tgz", - "integrity": "sha512-EsI+s3k3XsW+fU8fQACLN59ky34AZ14LoeVZpYwmZvldCFo0r0gnelwF2TcMjLor/BTL5aDJVBMkss0dthToPw==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } + "entities": { + "version": "1.1.2", + "resolved": "https://r.cnpmjs.org/entities/download/entities-1.1.2.tgz", + "integrity": "sha1-vfpzUplmTfr9NFKe1PhSKidf6lY=", + "dev": true }, - "string_decoder": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", - "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", + "parse5": { + "version": "3.0.3", + "resolved": "http://r.cnpmjs.org/parse5/download/parse5-3.0.3.tgz", + "integrity": "sha1-BC95L/3TaFFVHPTp4Gazh0q0W1w=", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "@types/node": "*" } } } }, "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "version": "3.4.2", + "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-3.4.2.tgz?cache=0&sync_timestamp=1596728935229&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-3.4.2.tgz", + "integrity": "sha1-ONyOZY3sOAl0HrPve7Ckf+QkIy0=", "dev": true, + "optional": true, "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.4.0" }, "dependencies": { - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "anymatch": { + "version": "3.1.1", + "resolved": "http://r.cnpmjs.org/anymatch/download/anymatch-3.1.1.tgz", + "integrity": "sha1-xV7PAhheJGklk5kxDBc84xIzsUI=", "dev": true, + "optional": true, "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" } }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "fsevents": { + "version": "2.1.3", + "resolved": "http://r.cnpmjs.org/fsevents/download/fsevents-2.1.3.tgz", + "integrity": "sha1-+3OHA66NL5/pAMM4Nt3r7ouX8j4=", "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } + "optional": true }, "normalize-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true + "resolved": "http://r.cnpmjs.org/normalize-path/download/normalize-path-3.0.0.tgz", + "integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=", + "dev": true, + "optional": true } } }, "chownr": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz", - "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==", + "version": "1.1.4", + "resolved": "http://r.cnpmjs.org/chownr/download/chownr-1.1.4.tgz", + "integrity": "sha1-b8nXtC0ypYNZYzdmbn0ICE2izGs=", "dev": true }, "chrome-trace-event": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "resolved": "http://r.cnpmjs.org/chrome-trace-event/download/chrome-trace-event-1.0.2.tgz", + "integrity": "sha1-I0CQ7pfH1K0aLEvq4nUF3v/GCKQ=", "dev": true, "requires": { "tslib": "^1.9.0" @@ -6489,35 +5613,35 @@ }, "ci-info": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", + "resolved": "http://r.cnpmjs.org/ci-info/download/ci-info-1.6.0.tgz", + "integrity": "sha1-LKINu5zrMtRSSmgzAzE/AwSx5Jc=", "dev": true }, "cipher-base": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "resolved": "http://r.cnpmjs.org/cipher-base/download/cipher-base-1.0.4.tgz", + "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=", "dev": true, "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" } }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "dev": true - }, "clap": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", - "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", + "resolved": "https://r.cnpmjs.org/clap/download/clap-1.2.3.tgz", + "integrity": "sha1-TzZ0WzIAhJJVf0ZBLWbVDLmbzlE=", "dev": true, "requires": { "chalk": "^1.1.3" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", @@ -6537,6 +5661,15 @@ "supports-color": "^2.0.0" } }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", @@ -6547,8 +5680,8 @@ }, "class-utils": { "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "resolved": "http://r.cnpmjs.org/class-utils/download/class-utils-0.3.6.tgz", + "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=", "dev": true, "requires": { "arr-union": "^3.1.0", @@ -6565,45 +5698,70 @@ "requires": { "is-descriptor": "^0.1.0" } + }, + "isobject": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true } } }, "classnames": { "version": "2.2.6", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", - "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" + "resolved": "http://r.cnpmjs.org/classnames/download/classnames-2.2.6.tgz", + "integrity": "sha1-Q5Nb/90pHzJtrQogUwmzjQD2UM4=" }, "clean-css": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", - "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", + "version": "4.2.3", + "resolved": "http://r.cnpmjs.org/clean-css/download/clean-css-4.2.3.tgz", + "integrity": "sha1-UHtd59l7SO5T2ErbAWD/YhY4D3g=", "dev": true, "requires": { "source-map": "~0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "http://r.cnpmjs.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } } }, "clean-stack": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-1.3.0.tgz", - "integrity": "sha1-noIVAa6XmYbEax1m0tQy2y/UrjE=", - "dev": true - }, - "clean-webpack-plugin": { - "version": "0.1.19", - "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-0.1.19.tgz", - "integrity": "sha512-M1Li5yLHECcN2MahoreuODul5LkjohJGFxLPTjl3j1ttKrF5rgjZET1SJduuqxLAuT1gAPOdkhg03qcaaU1KeA==", + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/clean-stack/download/clean-stack-3.0.0.tgz?cache=0&sync_timestamp=1592035220754&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fclean-stack%2Fdownload%2Fclean-stack-3.0.0.tgz", + "integrity": "sha1-p8JJNp/PDzPHiIwg6j89x5YgIR8=", + "dev": true, + "requires": { + "escape-string-regexp": "4.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-4.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescape-string-regexp%2Fdownload%2Fescape-string-regexp-4.0.0.tgz", + "integrity": "sha1-FLqDpdNz49MR5a/KKc9b+tllvzQ=", + "dev": true + } + } + }, + "clean-webpack-plugin": { + "version": "0.1.19", + "resolved": "https://r.cnpmjs.org/clean-webpack-plugin/download/clean-webpack-plugin-0.1.19.tgz", + "integrity": "sha1-ztqLuWsA/haOmwgCcpYNIP3K3W0=", "dev": true, "requires": { "rimraf": "^2.6.1" } }, "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "version": "2.1.0", + "resolved": "http://r.cnpmjs.org/cli-cursor/download/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "dev": true, "requires": { - "restore-cursor": "^1.0.1" + "restore-cursor": "^2.0.0" } }, "cli-truncate": { @@ -6614,12 +5772,49 @@ "requires": { "slice-ansi": "0.0.4", "string-width": "^1.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/string-width/download/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } } }, "cli-ux": { "version": "4.9.3", - "resolved": "https://registry.npmjs.org/cli-ux/-/cli-ux-4.9.3.tgz", - "integrity": "sha512-/1owvF0SZ5Gn54cgrikJ0QskgTzeg30HGjkmjFoaHDJzAqFpuX1DBpFR8aLvsE1J5s9MgeYRENQK4BFwOag5VA==", + "resolved": "https://r.cnpmjs.org/cli-ux/download/cli-ux-4.9.3.tgz", + "integrity": "sha1-TD4HDB6iPu8BC72wQRkuBmG+hM4=", "dev": true, "requires": { "@oclif/errors": "^1.2.2", @@ -6645,60 +5840,72 @@ "tslib": "^1.9.3" }, "dependencies": { - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - }, "ansi-regex": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz", + "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=", "dev": true }, "clean-stack": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "resolved": "https://r.cnpmjs.org/clean-stack/download/clean-stack-2.2.0.tgz", + "integrity": "sha1-7oRy27Ep5yezHooQpCfe6d/kAIs=", "dev": true }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "fs-extra": { + "version": "7.0.1", + "resolved": "https://r.cnpmjs.org/fs-extra/download/fs-extra-7.0.1.tgz", + "integrity": "sha1-TxicRKoSO4lfcigE9V6iPq3DSOk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npm.taobao.org/indent-string/download/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", "dev": true }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/is-wsl/download/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/jsonfile/download/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "dev": true, "requires": { - "ansi-regex": "^4.1.0" + "graceful-fs": "^4.1.6" } }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1573280549549&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", "dev": true, "requires": { - "has-flag": "^3.0.0" + "ansi-regex": "^4.1.0" } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/universalify/download/universalify-0.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funiversalify%2Fdownload%2Funiversalify-0.1.2.tgz", + "integrity": "sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY=", + "dev": true } } }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true - }, "clipboard": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.4.tgz", - "integrity": "sha512-Vw26VSLRpJfBofiVaFb/I8PVfdI1OxKcYShe6fm0sP/DtmiWQNCjhM/okTvdCo0G+lMMm1rMYbk4IK4x1X+kgQ==", + "version": "2.0.6", + "resolved": "http://r.cnpmjs.org/clipboard/download/clipboard-2.0.6.tgz", + "integrity": "sha1-UpISlu7A/fd+rRdJQhshyWhkc3Y=", + "dev": true, "requires": { "good-listener": "^1.2.2", "select": "^1.1.2", @@ -6706,14 +5913,65 @@ } }, "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "version": "5.0.0", + "resolved": "http://r.cnpmjs.org/cliui/download/cliui-5.0.0.tgz", + "integrity": "sha1-3u/P2y6AB4SqNPRvoI4GhRx7u8U=", "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz", + "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz", + "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "http://r.cnpmjs.org/string-width/download/string-width-3.1.0.tgz", + "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1573280549549&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "http://r.cnpmjs.org/wrap-ansi/download/wrap-ansi-5.1.0.tgz", + "integrity": "sha1-H9H2cjXVttD+54EFYAG/tpTAOwk=", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + } } }, "clone": { @@ -6723,21 +5981,28 @@ "dev": true }, "clone-deep": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-2.0.2.tgz", - "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==", + "version": "4.0.1", + "resolved": "http://r.cnpmjs.org/clone-deep/download/clone-deep-4.0.1.tgz", + "integrity": "sha1-wZ/Zvbv4WUK0/ZechNz31fB8I4c=", "dev": true, "requires": { - "for-own": "^1.0.0", "is-plain-object": "^2.0.4", - "kind-of": "^6.0.0", - "shallow-clone": "^1.0.0" + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "dependencies": { + "kind-of": { + "version": "6.0.3", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-6.0.3.tgz", + "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", + "dev": true + } } }, "clone-regexp": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-1.0.1.tgz", - "integrity": "sha512-Fcij9IwRW27XedRIJnSOEupS7RVcXtObJXbcUOX93UCLqqOdRpkvzKywOOSizmEK/Is3S/RHX9dLdfo6R1Q1mw==", + "resolved": "https://r.cnpmjs.org/clone-regexp/download/clone-regexp-1.0.1.tgz", + "integrity": "sha1-BRgFzTMXM3XYIRj8CRhgbaOf1g8=", "dev": true, "requires": { "is-regexp": "^1.0.0", @@ -6771,10 +6036,16 @@ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true }, + "codemirror": { + "version": "5.58.1", + "resolved": "https://registry.npm.taobao.org/codemirror/download/codemirror-5.58.1.tgz?cache=0&sync_timestamp=1600861309968&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcodemirror%2Fdownload%2Fcodemirror-5.58.1.tgz", + "integrity": "sha1-7GvzitKhf3TGG9AMxtxaab0WeFQ=", + "dev": true + }, "collapse-white-space": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.5.tgz", - "integrity": "sha512-703bOOmytCYAX9cXYqoikYIx6twmFCXsnzRQheBcTG3nzKYBR4P/+wkYeH+Mvj7qUz8zZDtdyzbxfnEi/kYzRQ==", + "version": "1.0.6", + "resolved": "https://r.cnpmjs.org/collapse-white-space/download/collapse-white-space-1.0.6.tgz", + "integrity": "sha1-5jYpwAFmZXkgYNu+t5xCI50sUoc=", "dev": true }, "collection-visit": { @@ -6800,8 +6071,9 @@ }, "color-convert": { "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "resolved": "http://r.cnpmjs.org/color-convert/download/color-convert-1.9.3.tgz", + "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=", + "dev": true, "requires": { "color-name": "1.1.3" } @@ -6809,7 +6081,8 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true }, "color-string": { "version": "0.3.0", @@ -6822,8 +6095,14 @@ }, "color-support": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "resolved": "https://r.cnpmjs.org/color-support/download/color-support-1.1.3.tgz", + "integrity": "sha1-k4NDeaHMmgxh+C9S8NBDIiUb1aI=", + "dev": true + }, + "colorette": { + "version": "1.2.1", + "resolved": "https://registry.npm.taobao.org/colorette/download/colorette-1.2.1.tgz?cache=0&sync_timestamp=1593955783467&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcolorette%2Fdownload%2Fcolorette-1.2.1.tgz", + "integrity": "sha1-TQuSEyXBT6+SYzCGpTbbbolWSxs=", "dev": true }, "colormin": { @@ -6844,23 +6123,24 @@ "dev": true }, "combined-stream": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", - "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "version": "1.0.8", + "resolved": "http://r.cnpmjs.org/combined-stream/download/combined-stream-1.0.8.tgz", + "integrity": "sha1-w9RaizT9cwYxoRCoolIGgrMdWn8=", "dev": true, "requires": { "delayed-stream": "~1.0.0" } }, "comma-separated-tokens": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.7.tgz", - "integrity": "sha512-Jrx3xsP4pPv4AwJUDWY9wOXGtwPXARej6Xd99h4TUGotmf8APuquKMpK+dnD3UgyxK7OEWaisjZz+3b5jtL6xQ==" + "version": "1.0.8", + "resolved": "http://r.cnpmjs.org/comma-separated-tokens/download/comma-separated-tokens-1.0.8.tgz", + "integrity": "sha1-YyuAthF4Z6FY8QgK1Jiy++fj9eo=", + "dev": true }, "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "version": "2.20.3", + "resolved": "http://r.cnpmjs.org/commander/download/commander-2.20.3.tgz", + "integrity": "sha1-/UhehMA+tIgcIHIrpIA16FMa6zM=", "dev": true }, "commondir": { @@ -6898,52 +6178,40 @@ "once": "^1.3.0", "path-is-absolute": "^1.0.0" } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true } } }, "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "version": "1.3.0", + "resolved": "http://r.cnpmjs.org/component-emitter/download/component-emitter-1.3.0.tgz", + "integrity": "sha1-FuQHD7qK4ptnnyIVhT7hgasuq8A=", "dev": true }, "component-props": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/component-props/-/component-props-1.1.1.tgz", - "integrity": "sha1-+bffm5kntubZfJvScqqGdnDzSUQ=" + "integrity": "sha1-+bffm5kntubZfJvScqqGdnDzSUQ=", + "dev": true }, "component-xor": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/component-xor/-/component-xor-0.0.4.tgz", - "integrity": "sha1-xV2DzMG5TNUImk6T+niRxyY+Wao=" + "integrity": "sha1-xV2DzMG5TNUImk6T+niRxyY+Wao=", + "dev": true }, "compressible": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz", - "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==", + "version": "2.0.18", + "resolved": "http://r.cnpmjs.org/compressible/download/compressible-2.0.18.tgz", + "integrity": "sha1-r1PMprBw1MPAdQ+9dyhqbXzEb7o=", "dev": true, "requires": { - "mime-db": ">= 1.40.0 < 2" - }, - "dependencies": { - "mime-db": { - "version": "1.42.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", - "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==", - "dev": true - } + "mime-db": ">= 1.43.0 < 2" } }, "compression": { "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "resolved": "http://r.cnpmjs.org/compression/download/compression-1.7.4.tgz", + "integrity": "sha1-lVI+/xcMpXwpoMpB5v4TH0Hlu48=", "dev": true, "requires": { "accepts": "~1.3.5", @@ -6963,8 +6231,8 @@ }, "debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "resolved": "http://r.cnpmjs.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", "dev": true, "requires": { "ms": "2.0.0" @@ -6980,58 +6248,26 @@ }, "concat-stream": { "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "resolved": "http://r.cnpmjs.org/concat-stream/download/concat-stream-1.6.2.tgz", + "integrity": "sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=", "dev": true, "requires": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^2.2.2", "typedarray": "^0.0.6" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, "connect-history-api-fallback": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "resolved": "http://r.cnpmjs.org/connect-history-api-fallback/download/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha1-izIIk1kwjRERFdgcrT/Oq4iPl7w=", "dev": true }, "console-browserify": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "resolved": "http://r.cnpmjs.org/console-browserify/download/console-browserify-1.2.0.tgz", + "integrity": "sha1-ZwY871fOts9Jk6KrOlWECujEkzY=", "dev": true }, "console-control-strings": { @@ -7048,14 +6284,14 @@ }, "contains-path": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "resolved": "https://registry.npm.taobao.org/contains-path/download/contains-path-0.1.0.tgz", "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", "dev": true }, "content-disposition": { "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "resolved": "http://r.cnpmjs.org/content-disposition/download/content-disposition-0.5.3.tgz", + "integrity": "sha1-4TDK9+cnkIfFYWwgB9BIVpiYT70=", "dev": true, "requires": { "safe-buffer": "5.1.2" @@ -7063,14 +6299,14 @@ }, "content-type": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "resolved": "http://r.cnpmjs.org/content-type/download/content-type-1.0.4.tgz", + "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=", "dev": true }, "convert-source-map": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", - "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", + "version": "1.7.0", + "resolved": "http://r.cnpmjs.org/convert-source-map/download/convert-source-map-1.7.0.tgz", + "integrity": "sha1-F6LLiC1/d9NJBYXizmxSRCSjpEI=", "dev": true, "requires": { "safe-buffer": "~5.1.1" @@ -7078,8 +6314,8 @@ }, "cookie": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "resolved": "http://r.cnpmjs.org/cookie/download/cookie-0.4.0.tgz", + "integrity": "sha1-vrQ35wIrO21JAZ0IhmUwPr6cFLo=", "dev": true }, "cookie-signature": { @@ -7090,8 +6326,8 @@ }, "copy-concurrently": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "resolved": "http://r.cnpmjs.org/copy-concurrently/download/copy-concurrently-1.0.5.tgz", + "integrity": "sha1-kilzmMrjSTf8r9bsgTnBgFHwteA=", "dev": true, "requires": { "aproba": "^1.1.1", @@ -7109,47 +6345,25 @@ "dev": true }, "core-js": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", - "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==" + "version": "2.6.11", + "resolved": "http://r.cnpmjs.org/core-js/download/core-js-2.6.11.tgz", + "integrity": "sha1-OIMUafmSK97Y7iHJ3EaYXgOZMIw=", + "dev": true }, "core-js-compat": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.1.tgz", - "integrity": "sha512-2Tl1EuxZo94QS2VeH28Ebf5g3xbPZG/hj/N5HDDy4XMP/ImR0JIer/nggQRiMN91Q54JVkGbytf42wO29oXVHg==", + "version": "3.6.5", + "resolved": "http://r.cnpmjs.org/core-js-compat/download/core-js-compat-3.6.5.tgz", + "integrity": "sha1-KlHZpOJd/W5pAlGqgfmePAVIHxw=", "dev": true, "requires": { - "browserslist": "^4.8.2", + "browserslist": "^4.8.5", "semver": "7.0.0" }, "dependencies": { - "browserslist": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.2.tgz", - "integrity": "sha512-+M4oeaTplPm/f1pXDw84YohEv7B1i/2Aisei8s4s6k3QsoSHa7i5sz8u/cGQkkatCPxMASKxPualR4wwYgVboA==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001015", - "electron-to-chromium": "^1.3.322", - "node-releases": "^1.1.42" - } - }, - "caniuse-lite": { - "version": "1.0.30001017", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001017.tgz", - "integrity": "sha512-EDnZyOJ6eYh6lHmCvCdHAFbfV4KJ9lSdfv4h/ppEhrU/Yudkl7jujwMZ1we6RX7DXqBfT04pVMQ4J+1wcTlsKA==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.322", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.322.tgz", - "integrity": "sha512-Tc8JQEfGQ1MzfSzI/bTlSr7btJv/FFO7Yh6tanqVmIWOuNCu6/D1MilIEgLtmWqIrsv+o4IjpLAhgMBr/ncNAA==", - "dev": true - }, "semver": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "resolved": "http://r.cnpmjs.org/semver/download/semver-7.0.0.tgz", + "integrity": "sha1-XzyjV2HkfgWyBsba/yz4FPAxa44=", "dev": true } } @@ -7161,26 +6375,21 @@ "dev": true }, "cosmiconfig": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.0.6.tgz", - "integrity": "sha512-6DWfizHriCrFWURP1/qyhsiFvYdlJzbCzmtFWh744+KyWsJo5+kPzUZZaMRSSItoYc0pxFX7gEO7ZC1/gN/7AQ==", + "version": "5.2.1", + "resolved": "http://r.cnpmjs.org/cosmiconfig/download/cosmiconfig-5.2.1.tgz", + "integrity": "sha1-BA9yaAnFked6F8CjYmykW08Wixo=", "dev": true, "requires": { + "import-fresh": "^2.0.0", "is-directory": "^0.3.1", - "js-yaml": "^3.9.0", + "js-yaml": "^3.13.1", "parse-json": "^4.0.0" }, "dependencies": { - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, "js-yaml": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", - "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", + "version": "3.14.0", + "resolved": "http://r.cnpmjs.org/js-yaml/download/js-yaml-3.14.0.tgz", + "integrity": "sha1-p6NBcPJqIbsWJCTYray0ETpp5II=", "dev": true, "requires": { "argparse": "^1.0.7", @@ -7190,19 +6399,27 @@ } }, "create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "version": "4.0.4", + "resolved": "https://registry.npm.taobao.org/create-ecdh/download/create-ecdh-4.0.4.tgz?cache=0&sync_timestamp=1596557441827&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcreate-ecdh%2Fdownload%2Fcreate-ecdh-4.0.4.tgz", + "integrity": "sha1-1uf0v/pmc2CFoHYv06YyaE2rzE4=", "dev": true, "requires": { "bn.js": "^4.1.0", - "elliptic": "^6.0.0" + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "http://r.cnpmjs.org/bn.js/download/bn.js-4.11.9.tgz", + "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=", + "dev": true + } } }, "create-hash": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "resolved": "http://r.cnpmjs.org/create-hash/download/create-hash-1.2.0.tgz", + "integrity": "sha1-iJB4rxGmN1a8+1m9IhmWvjqe8ZY=", "dev": true, "requires": { "cipher-base": "^1.0.1", @@ -7214,8 +6431,8 @@ }, "create-hmac": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "resolved": "http://r.cnpmjs.org/create-hmac/download/create-hmac-1.1.7.tgz", + "integrity": "sha1-aRcMeLOrlXFHsriwRXLkfq0iQ/8=", "dev": true, "requires": { "cipher-base": "^1.0.3", @@ -7226,10 +6443,21 @@ "sha.js": "^2.4.8" } }, + "create-react-class": { + "version": "15.6.3", + "resolved": "https://registry.npm.taobao.org/create-react-class/download/create-react-class-15.6.3.tgz", + "integrity": "sha1-LXMjf7P5cK5uvgEanmb0bbyoADY=", + "requires": { + "fbjs": "^0.8.9", + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" + } + }, "create-react-context": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/create-react-context/-/create-react-context-0.2.2.tgz", - "integrity": "sha512-KkpaLARMhsTsgp0d2NA/R94F/eDLbhXERdIq3LvX2biCAXcDvHYoOqHfWCHf1+OLj+HKBotLG3KqaOOf+C1C+A==", + "resolved": "http://r.cnpmjs.org/create-react-context/download/create-react-context-0.2.2.tgz", + "integrity": "sha1-mDZUL5qqIoaM19Sm+CZn3zgBnco=", + "dev": true, "requires": { "fbjs": "^0.8.0", "gud": "^1.0.0" @@ -7237,23 +6465,22 @@ }, "cropperjs": { "version": "1.0.0-rc.3", - "resolved": "https://registry.npmjs.org/cropperjs/-/cropperjs-1.0.0-rc.3.tgz", - "integrity": "sha512-3w3Rg95zHeVSAidvsoCzkYo9IycuTkU7pdP+lckQg2PY72HnFjj4JtS1L4sPumVzOU++e14BYp20ZbVczvVN1Q==" + "resolved": "http://r.cnpmjs.org/cropperjs/download/cropperjs-1.0.0-rc.3.tgz", + "integrity": "sha1-UKfHYRvvxEJwL4Re3nfX30Vy6Cs=" }, "cross-env": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.0.tgz", - "integrity": "sha512-jtdNFfFW1hB7sMhr/H6rW1Z45LFqyI431m3qU6bFXcQ3Eh7LtBuG3h74o7ohHZ3crrRkkqHlo4jYHFPcjroANg==", + "version": "5.2.1", + "resolved": "https://r.cnpmjs.org/cross-env/download/cross-env-5.2.1.tgz", + "integrity": "sha1-ssdsHKet1m3IdNEXmEZglPVRs00=", "dev": true, "requires": { - "cross-spawn": "^6.0.5", - "is-windows": "^1.0.0" + "cross-spawn": "^6.0.5" } }, "cross-fetch": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.3.tgz", - "integrity": "sha512-PrWWNH3yL2NYIb/7WF/5vFG3DCQiXDOVf8k3ijatbrtnwNuhMWLC7YF7uqf53tbTFDzHIUD8oITw4Bxt8ST3Nw==", + "resolved": "https://r.cnpmjs.org/cross-fetch/download/cross-fetch-2.2.3.tgz", + "integrity": "sha1-6KCzxUWYE24Df4ZQ+OgjzN+sGY4=", "dev": true, "requires": { "node-fetch": "2.1.2", @@ -7262,8 +6489,8 @@ }, "cross-spawn": { "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "resolved": "http://r.cnpmjs.org/cross-spawn/download/cross-spawn-6.0.5.tgz", + "integrity": "sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q=", "dev": true, "requires": { "nice-try": "^1.0.4", @@ -7275,8 +6502,8 @@ }, "crypto-browserify": { "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "resolved": "http://r.cnpmjs.org/crypto-browserify/download/crypto-browserify-3.12.0.tgz", + "integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=", "dev": true, "requires": { "browserify-cipher": "^1.0.0", @@ -7292,6 +6519,14 @@ "randomfill": "^1.0.3" } }, + "css-box-model": { + "version": "1.2.1", + "resolved": "https://r.cnpmjs.org/css-box-model/download/css-box-model-1.2.1.tgz", + "integrity": "sha1-WZUdO4H9ayB0pi1JREQVsNK018E=", + "requires": { + "tiny-invariant": "^1.0.6" + } + }, "css-color-names": { "version": "0.0.4", "resolved": "http://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", @@ -7300,46 +6535,18 @@ }, "css-declaration-sorter": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", - "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "resolved": "http://r.cnpmjs.org/css-declaration-sorter/download/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha1-wZiUD2OnbX42wecQGLABchBUyyI=", "dev": true, "requires": { "postcss": "^7.0.1", "timsort": "^0.3.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.32", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-7.0.32.tgz", + "integrity": "sha1-QxDW7jRwU9o0M9sr5JKIPWLOxZ0=", "dev": true, "requires": { "chalk": "^2.4.2", @@ -7347,10 +6554,16 @@ "supports-color": "^6.1.0" } }, + "source-map": { + "version": "0.6.1", + "resolved": "http://r.cnpmjs.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + }, "supports-color": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -7360,8 +6573,8 @@ }, "css-loader": { "version": "0.28.11", - "resolved": "http://registry.npmjs.org/css-loader/-/css-loader-0.28.11.tgz", - "integrity": "sha512-wovHgjAx8ZIMGSL8pTys7edA1ClmzxHeY6n/d97gg5odgsxEgKjULPR0viqyC+FWMCL9sfqoC/QCUBo62tLvPg==", + "resolved": "https://r.cnpmjs.org/css-loader/download/css-loader-0.28.11.tgz", + "integrity": "sha1-w/mGSnAL4nEbtaJGKyOJsaOS2rc=", "dev": true, "requires": { "babel-code-frame": "^6.26.0", @@ -7380,6 +6593,12 @@ "source-list-map": "^2.0.0" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", @@ -7471,10 +6690,16 @@ "postcss-zindex": "^2.0.1" } }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, "postcss": { "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", "dev": true, "requires": { "chalk": "^1.1.3", @@ -7483,90 +6708,82 @@ "supports-color": "^3.2.3" } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } } } }, "css-select": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "resolved": "http://r.cnpmjs.org/css-select/download/css-select-2.1.0.tgz", + "integrity": "sha1-ajRlM1ZjWTSoG6ymjQJVQyEF2+8=", "dev": true, "requires": { "boolbase": "^1.0.0", "css-what": "^3.2.1", "domutils": "^1.7.0", "nth-check": "^1.0.2" - }, - "dependencies": { - "css-what": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.2.1.tgz", - "integrity": "sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw==", - "dev": true - } } }, "css-select-base-adapter": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", + "resolved": "http://r.cnpmjs.org/css-select-base-adapter/download/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha1-Oy/0lyzDYquIVhUHqVQIoUMhNdc=", "dev": true }, "css-selector-tokenizer": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz", - "integrity": "sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==", + "version": "0.7.3", + "resolved": "https://registry.npm.taobao.org/css-selector-tokenizer/download/css-selector-tokenizer-0.7.3.tgz?cache=0&sync_timestamp=1595335280942&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-selector-tokenizer%2Fdownload%2Fcss-selector-tokenizer-0.7.3.tgz", + "integrity": "sha1-c18mGG5nx0mq8nV4NAXPBmH66PE=", "dev": true, "requires": { - "cssesc": "^0.1.0", - "fastparse": "^1.1.1", - "regexpu-core": "^1.0.0" - }, - "dependencies": { - "regexpu-core": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", - "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", - "dev": true, - "requires": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" - } - } + "cssesc": "^3.0.0", + "fastparse": "^1.1.2" } }, "css-tree": { "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "resolved": "http://r.cnpmjs.org/css-tree/download/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha1-mL69YsTB2flg7DQM+fdSLjBwmiI=", "dev": true, "requires": { "mdn-data": "2.0.4", "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "http://r.cnpmjs.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } } }, - "css-unit-converter": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.1.tgz", - "integrity": "sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=", - "dev": true - }, "css-what": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.2.tgz", - "integrity": "sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ==", + "version": "3.3.0", + "resolved": "https://r.cnpmjs.org/css-what/download/css-what-3.3.0.tgz", + "integrity": "sha1-EP7Glqns4uWRrHctdZqsq6w4zTk=", "dev": true }, "cssesc": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", - "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/cssesc/download/cssesc-3.0.0.tgz", + "integrity": "sha1-N3QZGZA7hoVl4cCep0dEXNGJg+4=", "dev": true }, "cssfontparser": { @@ -7577,8 +6794,8 @@ }, "cssnano": { "version": "4.1.10", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", - "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", + "resolved": "http://r.cnpmjs.org/cssnano/download/cssnano-4.1.10.tgz", + "integrity": "sha1-CsQfCxPRPUZUh+ERt3jULaYxuLI=", "dev": true, "requires": { "cosmiconfig": "^5.0.0", @@ -7587,38 +6804,10 @@ "postcss": "^7.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.32", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-7.0.32.tgz", + "integrity": "sha1-QxDW7jRwU9o0M9sr5JKIPWLOxZ0=", "dev": true, "requires": { "chalk": "^2.4.2", @@ -7626,10 +6815,16 @@ "supports-color": "^6.1.0" } }, + "source-map": { + "version": "0.6.1", + "resolved": "http://r.cnpmjs.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + }, "supports-color": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -7639,8 +6834,8 @@ }, "cssnano-preset-default": { "version": "4.0.7", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", - "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", + "resolved": "http://r.cnpmjs.org/cssnano-preset-default/download/cssnano-preset-default-4.0.7.tgz", + "integrity": "sha1-UexmLM/KD4izltzZZ5zbkxvhf3Y=", "dev": true, "requires": { "css-declaration-sorter": "^4.0.1", @@ -7675,21 +6870,10 @@ "postcss-unique-selectors": "^4.0.1" }, "dependencies": { - "browserslist": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.2.tgz", - "integrity": "sha512-+M4oeaTplPm/f1pXDw84YohEv7B1i/2Aisei8s4s6k3QsoSHa7i5sz8u/cGQkkatCPxMASKxPualR4wwYgVboA==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001015", - "electron-to-chromium": "^1.3.322", - "node-releases": "^1.1.42" - } - }, "caniuse-api": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "resolved": "http://r.cnpmjs.org/caniuse-api/download/caniuse-api-3.0.0.tgz", + "integrity": "sha1-Xk2Q4idJYdRikZl99Znj7QCO5MA=", "dev": true, "requires": { "browserslist": "^4.0.0", @@ -7698,38 +6882,10 @@ "lodash.uniq": "^4.5.0" } }, - "caniuse-lite": { - "version": "1.0.30001017", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001017.tgz", - "integrity": "sha512-EDnZyOJ6eYh6lHmCvCdHAFbfV4KJ9lSdfv4h/ppEhrU/Yudkl7jujwMZ1we6RX7DXqBfT04pVMQ4J+1wcTlsKA==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "coa": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "resolved": "http://r.cnpmjs.org/coa/download/coa-2.0.2.tgz", + "integrity": "sha1-Q/bCEVG07yv1cYfbDXPeIp4+fsM=", "dev": true, "requires": { "@types/q": "^1.5.1", @@ -7739,8 +6895,8 @@ }, "color": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", - "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", + "resolved": "http://r.cnpmjs.org/color/download/color-3.1.2.tgz", + "integrity": "sha1-aBSOf4XUGtdknF+oyBBvCY0inhA=", "dev": true, "requires": { "color-convert": "^1.9.1", @@ -7749,151 +6905,70 @@ }, "color-string": { "version": "1.5.3", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", - "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", + "resolved": "http://r.cnpmjs.org/color-string/download/color-string-1.5.3.tgz", + "integrity": "sha1-ybvF8BtYtUkvPWhXRZy2WQziBMw=", "dev": true, "requires": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" } }, - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", - "dev": true - }, "csso": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.2.tgz", - "integrity": "sha512-kS7/oeNVXkHWxby5tHVxlhjizRCSv8QdU7hB2FpdAibDU8FjTAolhNjKNTiLzXtUrKT6HwClE81yXwEk1309wg==", - "dev": true, - "requires": { - "css-tree": "1.0.0-alpha.37" - } - }, - "electron-to-chromium": { - "version": "1.3.322", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.322.tgz", - "integrity": "sha512-Tc8JQEfGQ1MzfSzI/bTlSr7btJv/FFO7Yh6tanqVmIWOuNCu6/D1MilIEgLtmWqIrsv+o4IjpLAhgMBr/ncNAA==", - "dev": true - }, - "es-abstract": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0.tgz", - "integrity": "sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.1.5", - "is-regex": "^1.0.5", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "is-callable": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", - "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", - "dev": true - }, - "is-regex": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", - "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "version": "4.0.3", + "resolved": "http://r.cnpmjs.org/csso/download/csso-4.0.3.tgz", + "integrity": "sha1-DZmF3IUsfMKyys+74QeQFNGo6QM=", "dev": true, "requires": { - "has": "^1.0.3" + "css-tree": "1.0.0-alpha.39" + }, + "dependencies": { + "css-tree": { + "version": "1.0.0-alpha.39", + "resolved": "http://r.cnpmjs.org/css-tree/download/css-tree-1.0.0-alpha.39.tgz", + "integrity": "sha1-K/8//huz93bPfu/ZHuXLp3oUnus=", + "dev": true, + "requires": { + "mdn-data": "2.0.6", + "source-map": "^0.6.1" + } + } } }, "is-svg": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", - "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", + "resolved": "http://r.cnpmjs.org/is-svg/download/is-svg-3.0.0.tgz", + "integrity": "sha1-kyHb0pwhLlypnE+peUxxS8r6L3U=", "dev": true, "requires": { "html-comment-regex": "^1.1.0" } }, "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "version": "3.14.0", + "resolved": "http://r.cnpmjs.org/js-yaml/download/js-yaml-3.14.0.tgz", + "integrity": "sha1-p6NBcPJqIbsWJCTYray0ETpp5II=", "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" } }, - "normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", - "dev": true - }, - "object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", + "mdn-data": { + "version": "2.0.6", + "resolved": "https://r.cnpmjs.org/mdn-data/download/mdn-data-2.0.6.tgz", + "integrity": "sha1-hS3GD8ql2qLoz2yRicRA7T4EKXg=", "dev": true }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "normalize-url": { + "version": "3.3.0", + "resolved": "http://r.cnpmjs.org/normalize-url/download/normalize-url-3.3.0.tgz", + "integrity": "sha1-suHE3E98bVd0PfczpPWXjRhlBVk=", "dev": true }, - "object.values": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", - "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", - "has": "^1.0.3" - } - }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.32", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-7.0.32.tgz", + "integrity": "sha1-QxDW7jRwU9o0M9sr5JKIPWLOxZ0=", "dev": true, "requires": { "chalk": "^2.4.2", @@ -7902,21 +6977,20 @@ } }, "postcss-calc": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.1.tgz", - "integrity": "sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ==", + "version": "7.0.3", + "resolved": "https://registry.npm.taobao.org/postcss-calc/download/postcss-calc-7.0.3.tgz?cache=0&sync_timestamp=1596805629948&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-calc%2Fdownload%2Fpostcss-calc-7.0.3.tgz", + "integrity": "sha1-1lzKkqPFK/J603pfcy4Fh7dPFiM=", "dev": true, "requires": { - "css-unit-converter": "^1.1.1", - "postcss": "^7.0.5", - "postcss-selector-parser": "^5.0.0-rc.4", - "postcss-value-parser": "^3.3.1" + "postcss": "^7.0.27", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" } }, "postcss-colormin": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", - "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "resolved": "http://r.cnpmjs.org/postcss-colormin/download/postcss-colormin-4.0.3.tgz", + "integrity": "sha1-rgYLzpPteUrHEmTwgTLVUJVr04E=", "dev": true, "requires": { "browserslist": "^4.0.0", @@ -7924,22 +6998,38 @@ "has": "^1.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "http://r.cnpmjs.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } } }, "postcss-convert-values": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", - "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "resolved": "http://r.cnpmjs.org/postcss-convert-values/download/postcss-convert-values-4.0.1.tgz", + "integrity": "sha1-yjgT7U2g+BL51DcDWE5Enr4Ymn8=", "dev": true, "requires": { "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "http://r.cnpmjs.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } } }, "postcss-discard-comments": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", - "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "resolved": "http://r.cnpmjs.org/postcss-discard-comments/download/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha1-H7q9LCRr/2qq15l7KwkY9NevQDM=", "dev": true, "requires": { "postcss": "^7.0.0" @@ -7947,8 +7037,8 @@ }, "postcss-discard-duplicates": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", - "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "resolved": "http://r.cnpmjs.org/postcss-discard-duplicates/download/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha1-P+EzzTyCKC5VD8myORdqkge3hOs=", "dev": true, "requires": { "postcss": "^7.0.0" @@ -7956,8 +7046,8 @@ }, "postcss-discard-empty": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", - "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "resolved": "http://r.cnpmjs.org/postcss-discard-empty/download/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha1-yMlR6fc+2UKAGUWERKAq2Qu592U=", "dev": true, "requires": { "postcss": "^7.0.0" @@ -7965,8 +7055,8 @@ }, "postcss-discard-overridden": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", - "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "resolved": "http://r.cnpmjs.org/postcss-discard-overridden/download/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha1-ZSrvipZybwKfXj4AFG7npOdV/1c=", "dev": true, "requires": { "postcss": "^7.0.0" @@ -7974,20 +7064,28 @@ }, "postcss-merge-longhand": { "version": "4.0.11", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", - "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "resolved": "http://r.cnpmjs.org/postcss-merge-longhand/download/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha1-YvSaE+Sg7gTnuY9CuxYGLKJUniQ=", "dev": true, "requires": { "css-color-names": "0.0.4", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0", "stylehacks": "^4.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "http://r.cnpmjs.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } } }, "postcss-merge-rules": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", - "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "resolved": "http://r.cnpmjs.org/postcss-merge-rules/download/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha1-NivqT/Wh+Y5AdacTxsslrv75plA=", "dev": true, "requires": { "browserslist": "^4.0.0", @@ -7999,12 +7097,12 @@ }, "dependencies": { "postcss-selector-parser": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", - "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "version": "3.1.2", + "resolved": "http://r.cnpmjs.org/postcss-selector-parser/download/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha1-sxD1xMD9r3b5SQK7qjDbaqhPUnA=", "dev": true, "requires": { - "dot-prop": "^4.1.1", + "dot-prop": "^5.2.0", "indexes-of": "^1.0.1", "uniq": "^1.0.1" } @@ -8013,30 +7111,46 @@ }, "postcss-minify-font-values": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", - "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "resolved": "http://r.cnpmjs.org/postcss-minify-font-values/download/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha1-zUw0TM5HQ0P6xdgiBqssvLiv1aY=", "dev": true, "requires": { "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "http://r.cnpmjs.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } } }, "postcss-minify-gradients": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", - "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "resolved": "http://r.cnpmjs.org/postcss-minify-gradients/download/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha1-k7KcL/UJnFNe7NpWxKpuZlpmNHE=", "dev": true, "requires": { "cssnano-util-get-arguments": "^4.0.0", "is-color-stop": "^1.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "http://r.cnpmjs.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } } }, "postcss-minify-params": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", - "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "resolved": "http://r.cnpmjs.org/postcss-minify-params/download/postcss-minify-params-4.0.2.tgz", + "integrity": "sha1-a5zvAwwR41Jh+V9hjJADbWgNuHQ=", "dev": true, "requires": { "alphanum-sort": "^1.0.0", @@ -8045,12 +7159,20 @@ "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0", "uniqs": "^2.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "http://r.cnpmjs.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } } }, "postcss-minify-selectors": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", - "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "resolved": "http://r.cnpmjs.org/postcss-minify-selectors/download/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha1-4uXrQL/uUA0M2SQ1APX46kJi+9g=", "dev": true, "requires": { "alphanum-sort": "^1.0.0", @@ -8060,12 +7182,12 @@ }, "dependencies": { "postcss-selector-parser": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", - "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "version": "3.1.2", + "resolved": "http://r.cnpmjs.org/postcss-selector-parser/download/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha1-sxD1xMD9r3b5SQK7qjDbaqhPUnA=", "dev": true, "requires": { - "dot-prop": "^4.1.1", + "dot-prop": "^5.2.0", "indexes-of": "^1.0.1", "uniq": "^1.0.1" } @@ -8074,8 +7196,8 @@ }, "postcss-normalize-charset": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", - "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "resolved": "http://r.cnpmjs.org/postcss-normalize-charset/download/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha1-izWt067oOhNrBHHg1ZvlilAoXdQ=", "dev": true, "requires": { "postcss": "^7.0.0" @@ -8083,31 +7205,47 @@ }, "postcss-normalize-url": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", - "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "resolved": "http://r.cnpmjs.org/postcss-normalize-url/download/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha1-EOQ3+GvHx+WPe5ZS7YeNqqlfquE=", "dev": true, "requires": { "is-absolute-url": "^2.0.0", "normalize-url": "^3.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "http://r.cnpmjs.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } } }, "postcss-ordered-values": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", - "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "resolved": "http://r.cnpmjs.org/postcss-ordered-values/download/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha1-DPdcgg7H1cTSgBiVWeC1ceusDu4=", "dev": true, "requires": { "cssnano-util-get-arguments": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "http://r.cnpmjs.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } } }, "postcss-reduce-initial": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", - "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "resolved": "http://r.cnpmjs.org/postcss-reduce-initial/download/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha1-f9QuvqXpyBRgljniwuhK4nC6SN8=", "dev": true, "requires": { "browserslist": "^4.0.0", @@ -8118,43 +7256,59 @@ }, "postcss-reduce-transforms": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", - "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "resolved": "http://r.cnpmjs.org/postcss-reduce-transforms/download/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha1-F++kBerMbge+NBSlyi0QdGgdTik=", "dev": true, "requires": { "cssnano-util-get-match": "^4.0.0", "has": "^1.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "http://r.cnpmjs.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } } }, "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "version": "6.0.2", + "resolved": "http://r.cnpmjs.org/postcss-selector-parser/download/postcss-selector-parser-6.0.2.tgz", + "integrity": "sha1-k0z3mdAWyDQRhZ4J3Oyt4BKG7Fw=", "dev": true, "requires": { - "cssesc": "^2.0.0", + "cssesc": "^3.0.0", "indexes-of": "^1.0.1", "uniq": "^1.0.1" } }, "postcss-svgo": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", - "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", + "resolved": "http://r.cnpmjs.org/postcss-svgo/download/postcss-svgo-4.0.2.tgz", + "integrity": "sha1-F7mXvHEbMzurFDqu07jT1uPTglg=", "dev": true, "requires": { "is-svg": "^3.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0", "svgo": "^1.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "http://r.cnpmjs.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } } }, "postcss-unique-selectors": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", - "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "resolved": "http://r.cnpmjs.org/postcss-unique-selectors/download/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha1-lEaRHzKJv9ZMbWgPBzwDsfnuS6w=", "dev": true, "requires": { "alphanum-sort": "^1.0.0", @@ -8162,10 +7316,22 @@ "uniqs": "^2.0.0" } }, + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "http://r.cnpmjs.org/postcss-value-parser/download/postcss-value-parser-4.1.0.tgz", + "integrity": "sha1-RD9qIM7WSBor2k+oUypuVdeJoss=", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "http://r.cnpmjs.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + }, "supports-color": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -8173,8 +7339,8 @@ }, "svgo": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "resolved": "http://r.cnpmjs.org/svgo/download/svgo-1.3.2.tgz", + "integrity": "sha1-ttxRHAYzRsnkFbgeQ0ARRbltQWc=", "dev": true, "requires": { "chalk": "^2.4.1", @@ -8208,45 +7374,17 @@ }, "cssnano-util-raw-cache": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", - "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "resolved": "http://r.cnpmjs.org/cssnano-util-raw-cache/download/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha1-sm1f1fcqEd/np4RvtMZyYPlr8oI=", "dev": true, "requires": { "postcss": "^7.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.32", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-7.0.32.tgz", + "integrity": "sha1-QxDW7jRwU9o0M9sr5JKIPWLOxZ0=", "dev": true, "requires": { "chalk": "^2.4.2", @@ -8254,10 +7392,16 @@ "supports-color": "^6.1.0" } }, + "source-map": { + "version": "0.6.1", + "resolved": "http://r.cnpmjs.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + }, "supports-color": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -8267,8 +7411,8 @@ }, "cssnano-util-same-parent": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", - "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", + "resolved": "http://r.cnpmjs.org/cssnano-util-same-parent/download/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha1-V0CC+yhZ0ttDOFWDXZqEVuoYu/M=", "dev": true }, "csso": { @@ -8279,35 +7423,27 @@ "requires": { "clap": "^1.0.9", "source-map": "^0.5.3" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } } }, "cssom": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.6.tgz", - "integrity": "sha512-DtUeseGk9/GBW0hl0vVPpU22iHL6YB5BUX7ml1hB+GMpo0NX5G4voX3kdWiMSEguFtcW3Vh3djqNF4aIe6ne0A==", + "version": "0.3.8", + "resolved": "http://r.cnpmjs.org/cssom/download/cssom-0.3.8.tgz", + "integrity": "sha1-nxJ29bK0Y/IRTT8sdSUK+MGjb0o=", "dev": true }, "cssstyle": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.2.2.tgz", - "integrity": "sha512-43wY3kl1CVQSvL7wUY1qXkxVGkStjpkDmVjiIKX8R97uhajy8Bybay78uOtqvh7Q5GK75dNPfW0geWjE6qQQow==", + "version": "1.4.0", + "resolved": "http://r.cnpmjs.org/cssstyle/download/cssstyle-1.4.0.tgz", + "integrity": "sha1-nTEyginTxWXGHlhrAgQaKPzNzPE=", "dev": true, "requires": { "cssom": "0.3.x" } }, "csstype": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.8.tgz", - "integrity": "sha512-msVS9qTuMT5zwAGCVm4mxfrZ18BNc6Csd0oJAtiFMZ1FAx1CCvy2+5MDmYoix63LM/6NDbNtodCiGYGmFgO0dA==" + "version": "3.0.2", + "resolved": "https://registry.npm.taobao.org/csstype/download/csstype-3.0.2.tgz?cache=0&sync_timestamp=1596103383177&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcsstype%2Fdownload%2Fcsstype-3.0.2.tgz", + "integrity": "sha1-7l/48gjIzWE7OJ97IiyYAcpis/c=" }, "currently-unhandled": { "version": "0.4.1", @@ -8335,8 +7471,8 @@ }, "data-urls": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", - "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", + "resolved": "http://r.cnpmjs.org/data-urls/download/data-urls-1.1.0.tgz", + "integrity": "sha1-Fe4Fgrql4iu1nHcUDaj5x2lju/4=", "dev": true, "requires": { "abab": "^2.0.0", @@ -8345,9 +7481,9 @@ }, "dependencies": { "whatwg-url": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz", - "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==", + "version": "7.1.0", + "resolved": "http://r.cnpmjs.org/whatwg-url/download/whatwg-url-7.1.0.tgz", + "integrity": "sha1-wsSS8eymEpiO/T0iZr4bn8YXDQY=", "dev": true, "requires": { "lodash.sortby": "^4.7.0", @@ -8357,11 +7493,6 @@ } } }, - "date-fns": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.8.1.tgz", - "integrity": "sha512-EL/C8IHvYRwAHYgFRse4MGAPSqlJVlOrhVYZ75iQBKrnv+ZedmYsgwH3t+BCDuZDXpoo07+q9j4qgSSOa7irJg==" - }, "dateformat": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", @@ -8370,18 +7501,12 @@ }, "debug": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "resolved": "http://r.cnpmjs.org/debug/download/debug-3.1.0.tgz", + "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", "requires": { "ms": "2.0.0" } }, - "debug-log": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz", - "integrity": "sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8=", - "dev": true - }, "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", @@ -8400,8 +7525,8 @@ }, "decimal.js": { "version": "10.2.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.0.tgz", - "integrity": "sha512-vDPw+rDgn3bZe1+F/pyEwb1oMG2XTlRVgAa6B4KccTEpYgF8w6eQllVbQcfIJnZyvzFtFpxnpGtx8dd7DJp/Rw==" + "resolved": "http://r.cnpmjs.org/decimal.js/download/decimal.js-10.2.0.tgz", + "integrity": "sha1-OUZhE6ngNhEdAvgkibX9awte0jE=" }, "decode-uri-component": { "version": "0.2.0", @@ -8411,8 +7536,8 @@ }, "decompress-response": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "resolved": "https://r.cnpmjs.org/decompress-response/download/decompress-response-4.2.1.tgz", + "integrity": "sha1-QUAjzHowLaJc4uyC0NUjjMr9iYY=", "dev": true, "requires": { "mimic-response": "^2.0.0" @@ -8426,9 +7551,8 @@ }, "deep-equal": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "dev": true, + "resolved": "http://r.cnpmjs.org/deep-equal/download/deep-equal-1.1.1.tgz", + "integrity": "sha1-tcmMlCzv+vfLBR4k4UNKJaLmB2o=", "requires": { "is-arguments": "^1.0.4", "is-date-object": "^1.0.1", @@ -8436,20 +7560,12 @@ "object-is": "^1.0.1", "object-keys": "^1.1.1", "regexp.prototype.flags": "^1.2.0" - }, - "dependencies": { - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } } }, "deep-extend": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "resolved": "https://r.cnpmjs.org/deep-extend/download/deep-extend-0.6.0.tgz", + "integrity": "sha1-xPp8lUBKF6nD6Mp+FTcxK3NjMKw=", "dev": true }, "deep-is": { @@ -8460,38 +7576,12 @@ }, "default-gateway": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "resolved": "http://r.cnpmjs.org/default-gateway/download/default-gateway-4.2.0.tgz", + "integrity": "sha1-FnEEx1AMIRX23WmwpTa7jtcgVSs=", "dev": true, "requires": { "execa": "^1.0.0", "ip-regex": "^2.1.0" - }, - "dependencies": { - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - } } }, "defaults": { @@ -8505,17 +7595,16 @@ }, "define-properties": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, + "resolved": "http://r.cnpmjs.org/define-properties/download/define-properties-1.1.3.tgz", + "integrity": "sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE=", "requires": { "object-keys": "^1.0.12" } }, "define-property": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-2.0.2.tgz", + "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=", "dev": true, "requires": { "is-descriptor": "^1.0.2", @@ -8524,8 +7613,8 @@ "dependencies": { "is-accessor-descriptor": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "resolved": "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", "dev": true, "requires": { "kind-of": "^6.0.0" @@ -8533,8 +7622,8 @@ }, "is-data-descriptor": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "resolved": "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "dev": true, "requires": { "kind-of": "^6.0.0" @@ -8542,14 +7631,26 @@ }, "is-descriptor": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "resolved": "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" } + }, + "isobject": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-6.0.3.tgz", + "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", + "dev": true } } }, @@ -8559,39 +7660,61 @@ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", "dev": true }, - "deglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/deglob/-/deglob-2.1.1.tgz", - "integrity": "sha512-2kjwuGGonL7gWE1XU4Fv79+vVzpoQCl0V+boMwWtOQJV2AGDabCwez++nB1Nli/8BabAfZQ/UuHPlp6AymKdWw==", + "del": { + "version": "4.1.1", + "resolved": "http://r.cnpmjs.org/del/download/del-4.1.1.tgz", + "integrity": "sha1-no8RciLqRKMf86FWwEm5kFKp8LQ=", "dev": true, "requires": { - "find-root": "^1.0.0", - "glob": "^7.0.5", - "ignore": "^3.0.9", - "pkg-config": "^1.1.0", - "run-parallel": "^1.1.2", - "uniq": "^1.0.1" - } - }, - "del": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", - "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", - "dev": true, - "requires": { - "globby": "^5.0.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "rimraf": "^2.2.8" + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" }, "dependencies": { + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/array-union/download/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/globby/download/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "p-map": { + "version": "2.1.0", + "resolved": "http://r.cnpmjs.org/p-map/download/p-map-2.1.0.tgz", + "integrity": "sha1-MQko/u+cnsxltosXaTAYpmXOoXU=", + "dev": true + }, "pify": { - "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "version": "4.0.1", + "resolved": "http://r.cnpmjs.org/pify/download/pify-4.0.1.tgz", + "integrity": "sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE=", "dev": true } } @@ -8604,8 +7727,9 @@ }, "delegate": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", - "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==" + "resolved": "http://r.cnpmjs.org/delegate/download/delegate-3.2.0.tgz", + "integrity": "sha1-tmtxwxWFIuirV0T3INjKDCr1kWY=", + "dev": true }, "delegates": { "version": "1.0.0", @@ -8627,8 +7751,8 @@ }, "des.js": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "resolved": "http://r.cnpmjs.org/des.js/download/des.js-1.0.1.tgz", + "integrity": "sha1-U4IULhvcU/hdhtU+X0qn3rkeCEM=", "dev": true, "requires": { "inherits": "^2.0.1", @@ -8642,9 +7766,9 @@ "dev": true }, "detab": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.2.tgz", - "integrity": "sha512-Q57yPrxScy816TTE1P/uLRXLDKjXhvYTbfxS/e6lPD+YrqghbsMlGB9nQzj/zVtSPaF0DFPSdO916EWO4sQUyQ==", + "version": "2.0.3", + "resolved": "https://r.cnpmjs.org/detab/download/detab-2.0.3.tgz", + "integrity": "sha1-M+XddNIwUBvWmYWg0rmjOCaZoTA=", "dev": true, "requires": { "repeat-string": "^1.5.4" @@ -8679,14 +7803,14 @@ }, "detect-node": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", - "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", + "resolved": "http://r.cnpmjs.org/detect-node/download/detect-node-2.0.4.tgz", + "integrity": "sha1-AU7o+PZpxcWAI9pkuBecCDooxGw=", "dev": true }, "detective": { "version": "4.7.1", - "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.1.tgz", - "integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==", + "resolved": "https://r.cnpmjs.org/detective/download/detective-4.7.1.tgz", + "integrity": "sha1-DspzFDOEQv67bWXaVMELscgrJG4=", "dev": true, "requires": { "acorn": "^5.2.1", @@ -8695,45 +7819,42 @@ }, "diff": { "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "resolved": "https://r.cnpmjs.org/diff/download/diff-3.5.0.tgz", + "integrity": "sha1-gAwN0eCov7yVg1wgKtIg/jF+WhI=", "dev": true }, "diff-sequences": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.3.0.tgz", - "integrity": "sha512-xLqpez+Zj9GKSnPWS0WZw1igGocZ+uua8+y+5dDNTT934N3QuY1sp2LkHzwiaYQGz60hMq0pjAshdeXm5VUOEw==", + "version": "24.9.0", + "resolved": "http://r.cnpmjs.org/diff-sequences/download/diff-sequences-24.9.0.tgz", + "integrity": "sha1-VxXWJE4qpl9Iu6C8ly2wsLEelbU=", "dev": true }, "diffie-hellman": { "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "resolved": "http://r.cnpmjs.org/diffie-hellman/download/diffie-hellman-5.0.3.tgz", + "integrity": "sha1-QOjumPVaIUlgcUaSHGPhrl89KHU=", "dev": true, "requires": { "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "http://r.cnpmjs.org/bn.js/download/bn.js-4.11.9.tgz", + "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=", + "dev": true + } } }, "dir-glob": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", - "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/dir-glob/download/dir-glob-3.0.1.tgz", + "integrity": "sha1-Vtv3PZkqSpO6FYT0U0Bj/S5BcX8=", "dev": true, "requires": { - "path-type": "^3.0.0" - }, - "dependencies": { - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - } + "path-type": "^4.0.0" } }, "discontinuous-range": { @@ -8743,9 +7864,9 @@ "dev": true }, "dnd-core": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/dnd-core/-/dnd-core-7.4.4.tgz", - "integrity": "sha512-xR8SINDCJG9AmKSjXUMJ1PEl8ih1+xSHH8x4DgBtzScXnEtpCnV1ibDZNV0uyps9VgkXTTbYYzJdF04y0v0e3Q==", + "version": "7.7.0", + "resolved": "https://registry.npm.taobao.org/dnd-core/download/dnd-core-7.7.0.tgz", + "integrity": "sha1-MWau/IxbhcpK3kroNnEqMQiXX6s=", "requires": { "asap": "^2.0.6", "invariant": "^2.2.4", @@ -8760,8 +7881,8 @@ }, "dns-packet": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", - "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "resolved": "http://r.cnpmjs.org/dns-packet/download/dns-packet-1.3.1.tgz", + "integrity": "sha1-EqpCaYEHW+UAuRDu3NC0fdfe2lo=", "dev": true, "requires": { "ip": "^1.1.0", @@ -8778,9 +7899,9 @@ } }, "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/doctrine/download/doctrine-3.0.0.tgz", + "integrity": "sha1-rd6+rXKmV023g2OdyHoSF3OXOWE=", "dev": true, "requires": { "esutils": "^2.0.2" @@ -8788,8 +7909,8 @@ }, "dom-converter": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "resolved": "http://r.cnpmjs.org/dom-converter/download/dom-converter-0.2.0.tgz", + "integrity": "sha1-ZyGp2u4uKTaClVtq/kFncWJ7t2g=", "dev": true, "requires": { "utila": "~0.4" @@ -8808,70 +7929,71 @@ }, "dom-helpers": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", - "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", + "resolved": "http://r.cnpmjs.org/dom-helpers/download/dom-helpers-3.4.0.tgz", + "integrity": "sha1-6bNpcA+Vn2Ls3lprq95LzNkWmvg=", "requires": { "@babel/runtime": "^7.1.2" } }, "dom-iterator": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dom-iterator/-/dom-iterator-1.0.0.tgz", - "integrity": "sha512-7dsMOQI07EMU98gQM8NSB3GsAiIeBYIPKpnxR3c9xOvdvBjChAcOM0iJ222I3p5xyiZO9e5oggkNaCusuTdYig==", + "resolved": "http://r.cnpmjs.org/dom-iterator/download/dom-iterator-1.0.0.tgz", + "integrity": "sha1-nAmJmEbsQcLSV63E1gFeR1nvBa0=", + "dev": true, "requires": { "component-props": "1.1.1", "component-xor": "0.0.4" } }, "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "version": "0.2.2", + "resolved": "http://r.cnpmjs.org/dom-serializer/download/dom-serializer-0.2.2.tgz", + "integrity": "sha1-GvuB9TNxcXXUeGVd68XjMtn5u1E=", "dev": true, "requires": { - "domelementtype": "~1.1.1", - "entities": "~1.1.1" + "domelementtype": "^2.0.1", + "entities": "^2.0.0" }, "dependencies": { "domelementtype": { - "version": "1.1.3", - "resolved": "http://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/domelementtype/download/domelementtype-2.0.1.tgz", + "integrity": "sha1-H4vf6R9aeAYydOgDtL3O326U+U0=", "dev": true } } }, "dom-walk": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", - "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=", + "version": "0.1.2", + "resolved": "https://r.cnpmjs.org/dom-walk/download/dom-walk-0.1.2.tgz", + "integrity": "sha1-DFSL7wSPTR8qlySQAiNgYNqj/YQ=", "dev": true }, "domain-browser": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "resolved": "https://r.cnpmjs.org/domain-browser/download/domain-browser-1.2.0.tgz", + "integrity": "sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto=", "dev": true }, "domelementtype": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.2.1.tgz", - "integrity": "sha512-SQVCLFS2E7G5CRCMdn6K9bIhRj1bS6QBWZfF0TUPh4V/BbqrQ619IdSS3/izn0FZ+9l+uODzaZjb08fjOfablA==", + "version": "1.3.1", + "resolved": "http://r.cnpmjs.org/domelementtype/download/domelementtype-1.3.1.tgz", + "integrity": "sha1-0EjESzew0Qp/Kj1f7j9DM9eQSB8=", "dev": true }, "domexception": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", - "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "resolved": "http://r.cnpmjs.org/domexception/download/domexception-1.0.1.tgz", + "integrity": "sha1-k3RCZEymoxJh7zbj7Gd/6AVYLJA=", "dev": true, "requires": { "webidl-conversions": "^4.0.2" } }, "domhandler": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz", - "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", + "version": "2.4.2", + "resolved": "http://r.cnpmjs.org/domhandler/download/domhandler-2.4.2.tgz", + "integrity": "sha1-iAUJfpM9ZehVRvcm1g9euItE+AM=", "dev": true, "requires": { "domelementtype": "1" @@ -8879,8 +8001,8 @@ }, "domutils": { "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "resolved": "http://r.cnpmjs.org/domutils/download/domutils-1.7.0.tgz", + "integrity": "sha1-Vuo0HoNOBuZ0ivehyyXaZ+qfjCo=", "dev": true, "requires": { "dom-serializer": "0", @@ -8888,12 +8010,12 @@ } }, "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "version": "5.2.0", + "resolved": "http://r.cnpmjs.org/dot-prop/download/dot-prop-5.2.0.tgz", + "integrity": "sha1-w07MKVVtxF8fTCJpe29JBODMT8s=", "dev": true, "requires": { - "is-obj": "^1.0.0" + "is-obj": "^2.0.0" } }, "duplexer2": { @@ -8903,61 +8025,46 @@ "dev": true, "requires": { "readable-stream": "~1.1.9" - } - }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" }, "dependencies": { - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "version": "0.0.1", + "resolved": "http://r.cnpmjs.org/isarray/download/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", "dev": true }, "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "version": "1.1.14", + "resolved": "http://r.cnpmjs.org/readable-stream/download/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" } }, "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } + "version": "0.10.31", + "resolved": "http://r.cnpmjs.org/string_decoder/download/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true } } }, + "duplexify": { + "version": "3.7.1", + "resolved": "http://r.cnpmjs.org/duplexify/download/duplexify-3.7.1.tgz", + "integrity": "sha1-Kk31MX9sz9kfhtb9JdjYoQO4gwk=", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -8968,6 +8075,30 @@ "safer-buffer": "^2.1.0" } }, + "echarts": { + "version": "4.7.0", + "resolved": "https://r.cnpmjs.org/echarts/download/echarts-4.7.0.tgz", + "integrity": "sha1-Wzh1pML5HjkpQl+rq56s5+QJiz8=", + "requires": { + "zrender": "4.3.0" + } + }, + "echarts-for-react": { + "version": "2.0.16", + "resolved": "http://r.cnpmjs.org/echarts-for-react/download/echarts-for-react-2.0.16.tgz", + "integrity": "sha1-gTSlPf+QiCweapXEXOqyHgD2yfU=", + "requires": { + "fast-deep-equal": "^2.0.1", + "size-sensor": "^1.0.0" + }, + "dependencies": { + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://r.cnpmjs.org/fast-deep-equal/download/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + } + } + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -8975,9 +8106,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.82", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.82.tgz", - "integrity": "sha512-NI4nB2IWGcU4JVT1AE8kBb/dFor4zjLHMLsOROPahppeHrR0FG5uslxMmkp/thO1MvPjM2xhlKoY29/I60s0ew==", + "version": "1.3.526", + "resolved": "https://registry.npm.taobao.org/electron-to-chromium/download/electron-to-chromium-1.3.526.tgz?cache=0&sync_timestamp=1596857675304&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Felectron-to-chromium%2Fdownload%2Felectron-to-chromium-1.3.526.tgz", + "integrity": "sha1-DgBIme33WvwXLM4bgYmqxdymRqo=", "dev": true }, "elegant-spinner": { @@ -8987,9 +8118,9 @@ "dev": true }, "elliptic": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", - "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==", + "version": "6.5.3", + "resolved": "https://registry.npm.taobao.org/elliptic/download/elliptic-6.5.3.tgz?cache=0&sync_timestamp=1592492844326&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Felliptic%2Fdownload%2Felliptic-6.5.3.tgz", + "integrity": "sha1-y1nrLv2vc6C9eMzXAVpirW4Pk9Y=", "dev": true, "requires": { "bn.js": "^4.4.0", @@ -8999,24 +8130,32 @@ "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "http://r.cnpmjs.org/bn.js/download/bn.js-4.11.9.tgz", + "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=", + "dev": true + } } }, "email-addresses": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-3.0.3.tgz", - "integrity": "sha512-kUlSC06PVvvjlMRpNIl3kR1NRXLEe86VQ7N0bQeaCZb2g+InShCeHQp/JvyYNTugMnRN2NvJhHlc3q12MWbbpg==", + "version": "3.1.0", + "resolved": "https://r.cnpmjs.org/email-addresses/download/email-addresses-3.1.0.tgz", + "integrity": "sha1-yr9+CFy9tjAIpwMZp05hNhiIEvs=", "dev": true }, "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "version": "8.0.0", + "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-8.0.0.tgz", + "integrity": "sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc=", "dev": true }, "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/emojis-list/download/emojis-list-3.0.0.tgz", + "integrity": "sha1-VXBmIEatKeLpFucariYKvf9Pang=", "dev": true }, "encodeurl": { @@ -9026,37 +8165,36 @@ "dev": true }, "encoding": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "requires": { - "iconv-lite": "~0.4.13" - } - }, - "end-of-stream": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz", - "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=", - "dev": true, + "version": "0.1.13", + "resolved": "https://registry.npm.taobao.org/encoding/download/encoding-0.1.13.tgz?cache=0&sync_timestamp=1594363018558&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fencoding%2Fdownload%2Fencoding-0.1.13.tgz", + "integrity": "sha1-VldK/deR9UqOmyeFwFgqLSYhD6k=", "requires": { - "once": "~1.3.0" + "iconv-lite": "^0.6.2" }, "dependencies": { - "once": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", - "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", - "dev": true, + "iconv-lite": { + "version": "0.6.2", + "resolved": "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.6.2.tgz?cache=0&sync_timestamp=1594184325364&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.6.2.tgz", + "integrity": "sha1-zhPRh1sMOmdL1qBLf3awGxtt7QE=", "requires": { - "wrappy": "1" + "safer-buffer": ">= 2.1.2 < 3.0.0" } } } }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "http://r.cnpmjs.org/end-of-stream/download/end-of-stream-1.4.4.tgz", + "integrity": "sha1-WuZKX0UFe682JuwU2gyl5LJDHrA=", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, "enhanced-resolve": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz", - "integrity": "sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==", + "version": "4.3.0", + "resolved": "https://registry.npm.taobao.org/enhanced-resolve/download/enhanced-resolve-4.3.0.tgz?cache=0&sync_timestamp=1594972228508&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fenhanced-resolve%2Fdownload%2Fenhanced-resolve-4.3.0.tgz", + "integrity": "sha1-O4BvO/r8HsfeaVUe+TzKRsFwQSY=", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -9064,337 +8202,116 @@ "tapable": "^1.0.0" }, "dependencies": { - "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, "memory-fs": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "resolved": "http://r.cnpmjs.org/memory-fs/download/memory-fs-0.5.0.tgz", + "integrity": "sha1-MkwBKIuIZSlm0WHbd4OHIIRajjw=", "dev": true, "requires": { "errno": "^0.1.3", "readable-stream": "^2.0.1" } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } + } + } + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npm.taobao.org/enquirer/download/enquirer-2.3.6.tgz?cache=0&sync_timestamp=1593693195602&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fenquirer%2Fdownload%2Fenquirer-2.3.6.tgz", + "integrity": "sha1-Kn/l3WNKHkElqXXsmU/1RW3Dc00=", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + }, + "dependencies": { + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npm.taobao.org/ansi-colors/download/ansi-colors-4.1.1.tgz?cache=0&sync_timestamp=1594334943016&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-colors%2Fdownload%2Fansi-colors-4.1.1.tgz", + "integrity": "sha1-y7muJWv3UK8eqzRPIpqif+lLo0g=", + "dev": true } } }, "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "version": "2.0.3", + "resolved": "https://r.cnpmjs.org/entities/download/entities-2.0.3.tgz", + "integrity": "sha1-XEh+V0Krk8Fau12iJ1m4WQ7AO38=", "dev": true }, "enzyme": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.9.0.tgz", - "integrity": "sha512-JqxI2BRFHbmiP7/UFqvsjxTirWoM1HfeaJrmVSZ9a1EADKkZgdPcAuISPMpoUiHlac9J4dYt81MC5BBIrbJGMg==", + "version": "3.11.0", + "resolved": "https://r.cnpmjs.org/enzyme/download/enzyme-3.11.0.tgz", + "integrity": "sha1-cdaAxYD+k0n29axsd1vD5rennCg=", "dev": true, "requires": { - "array.prototype.flat": "^1.2.1", - "cheerio": "^1.0.0-rc.2", - "function.prototype.name": "^1.1.0", + "array.prototype.flat": "^1.2.3", + "cheerio": "^1.0.0-rc.3", + "enzyme-shallow-equal": "^1.0.1", + "function.prototype.name": "^1.1.2", "has": "^1.0.3", - "html-element-map": "^1.0.0", - "is-boolean-object": "^1.0.0", - "is-callable": "^1.1.4", - "is-number-object": "^1.0.3", - "is-regex": "^1.0.4", - "is-string": "^1.0.4", + "html-element-map": "^1.2.0", + "is-boolean-object": "^1.0.1", + "is-callable": "^1.1.5", + "is-number-object": "^1.0.4", + "is-regex": "^1.0.5", + "is-string": "^1.0.5", "is-subset": "^0.1.1", "lodash.escape": "^4.0.1", "lodash.isequal": "^4.5.0", - "object-inspect": "^1.6.0", - "object-is": "^1.0.1", + "object-inspect": "^1.7.0", + "object-is": "^1.0.2", "object.assign": "^4.1.0", - "object.entries": "^1.0.4", - "object.values": "^1.0.4", - "raf": "^3.4.0", + "object.entries": "^1.1.1", + "object.values": "^1.1.1", + "raf": "^3.4.1", "rst-selector-parser": "^2.2.3", - "string.prototype.trim": "^1.1.2" - }, - "dependencies": { - "lodash.escape": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", - "integrity": "sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg=", - "dev": true - } + "string.prototype.trim": "^1.2.1" } }, "enzyme-adapter-react-16": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.2.tgz", - "integrity": "sha512-SkvDrb8xU3lSxID8Qic9rB8pvevDbLybxPK6D/vW7PrT0s2Cl/zJYuXvsd1EBTz0q4o3iqG3FJhpYz3nUNpM2Q==", + "version": "1.15.3", + "resolved": "https://registry.npm.taobao.org/enzyme-adapter-react-16/download/enzyme-adapter-react-16-1.15.3.tgz", + "integrity": "sha1-kBVAVb4zGNcKUd9hrInPoi49X2A=", "dev": true, "requires": { - "enzyme-adapter-utils": "^1.13.0", - "enzyme-shallow-equal": "^1.0.1", + "enzyme-adapter-utils": "^1.13.1", + "enzyme-shallow-equal": "^1.0.4", "has": "^1.0.3", "object.assign": "^4.1.0", "object.values": "^1.1.1", "prop-types": "^15.7.2", - "react-is": "^16.12.0", + "react-is": "^16.13.1", "react-test-renderer": "^16.0.0-0", "semver": "^5.7.0" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0.tgz", - "integrity": "sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.1.5", - "is-regex": "^1.0.5", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "is-callable": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", - "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", - "dev": true - }, - "is-regex": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", - "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object.values": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", - "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", - "has": "^1.0.3" - } - }, - "prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } } }, "enzyme-adapter-utils": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.13.0.tgz", - "integrity": "sha512-YuEtfQp76Lj5TG1NvtP2eGJnFKogk/zT70fyYHXK2j3v6CtuHqc8YmgH/vaiBfL8K1SgVVbQXtTcgQZFwzTVyQ==", + "version": "1.13.1", + "resolved": "https://registry.npm.taobao.org/enzyme-adapter-utils/download/enzyme-adapter-utils-1.13.1.tgz?cache=0&sync_timestamp=1596782046837&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fenzyme-adapter-utils%2Fdownload%2Fenzyme-adapter-utils-1.13.1.tgz", + "integrity": "sha1-WcG3NLCSdUPj2NxHcpnslX/rMS0=", "dev": true, "requires": { - "airbnb-prop-types": "^2.15.0", + "airbnb-prop-types": "^2.16.0", "function.prototype.name": "^1.1.2", "object.assign": "^4.1.0", "object.fromentries": "^2.0.2", "prop-types": "^15.7.2", "semver": "^5.7.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0.tgz", - "integrity": "sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.1.5", - "is-regex": "^1.0.5", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "function.prototype.name": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.2.tgz", - "integrity": "sha512-C8A+LlHBJjB2AdcRPorc5JvJ5VUoWlXdEHLOJdCI7kjHEtGTpHQUiqMvCIKUwIsGwZX2jZJy761AXsn356bJQg==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "functions-have-names": "^1.2.0" - } - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "is-callable": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", - "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", - "dev": true - }, - "is-regex": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", - "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } } }, "enzyme-shallow-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.1.tgz", - "integrity": "sha512-hGA3i1so8OrYOZSM9whlkNmVHOicJpsjgTzC+wn2JMJXhq1oO4kA4bJ5MsfzSIcC71aLDKzJ6gZpIxrqt3QTAQ==", + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/enzyme-shallow-equal/download/enzyme-shallow-equal-1.0.4.tgz?cache=0&sync_timestamp=1596759618140&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fenzyme-shallow-equal%2Fdownload%2Fenzyme-shallow-equal-1.0.4.tgz", + "integrity": "sha1-uSVsslpfQw+b/gc6hICMHXT87S4=", "dev": true, "requires": { "has": "^1.0.3", - "object-is": "^1.0.2" - }, - "dependencies": { - "object-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.2.tgz", - "integrity": "sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ==", - "dev": true - } + "object-is": "^1.1.2" } }, "errno": { "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "resolved": "http://r.cnpmjs.org/errno/download/errno-0.1.7.tgz", + "integrity": "sha1-RoTXF3mtOa8Xfj8AeZb3xnyFJhg=", "dev": true, "requires": { "prr": "~1.0.1" @@ -9402,31 +8319,35 @@ }, "error-ex": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "resolved": "http://r.cnpmjs.org/error-ex/download/error-ex-1.3.2.tgz", + "integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=", "dev": true, "requires": { "is-arrayish": "^0.2.1" } }, "es-abstract": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", - "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", - "dev": true, + "version": "1.17.6", + "resolved": "https://r.cnpmjs.org/es-abstract/download/es-abstract-1.17.6.tgz", + "integrity": "sha1-kUIHFweFeyysx7iey2cDFsPi1So=", "requires": { - "es-to-primitive": "^1.1.1", + "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", - "has": "^1.0.1", - "is-callable": "^1.1.3", - "is-regex": "^1.0.4" + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.0", + "is-regex": "^1.1.0", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" } }, "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", - "dev": true, + "version": "1.2.1", + "resolved": "http://r.cnpmjs.org/es-to-primitive/download/es-to-primitive-1.2.1.tgz", + "integrity": "sha1-5VzUyc3BiLzvsDs2bHNjI/xciYo=", "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -9435,8 +8356,8 @@ }, "es6-promise": { "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "resolved": "https://r.cnpmjs.org/es6-promise/download/es6-promise-4.2.8.tgz", + "integrity": "sha1-TrIVlMlyvEBVPSduUQU5FD21Pgo=", "dev": true }, "es6-promisify": { @@ -9448,6 +8369,12 @@ "es6-promise": "^4.0.3" } }, + "escalade": { + "version": "3.0.2", + "resolved": "https://registry.npm.taobao.org/escalade/download/escalade-3.0.2.tgz?cache=0&sync_timestamp=1594742944513&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescalade%2Fdownload%2Fescalade-3.0.2.tgz", + "integrity": "sha1-algNcO24eIDyK0yR0NVgeN9pYsQ=", + "dev": true + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -9457,160 +8384,312 @@ "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true }, "escodegen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz", - "integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==", + "version": "1.14.3", + "resolved": "https://registry.npm.taobao.org/escodegen/download/escodegen-1.14.3.tgz", + "integrity": "sha1-TnuB+6YVgdyXWC7XjKt/Do1j9QM=", "dev": true, "requires": { - "esprima": "^3.1.3", + "esprima": "^4.0.1", "estraverse": "^4.2.0", "esutils": "^2.0.2", "optionator": "^0.8.1", "source-map": "~0.6.1" }, "dependencies": { - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", - "dev": true + "source-map": { + "version": "0.6.1", + "resolved": "http://r.cnpmjs.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true, + "optional": true } } }, "eslint": { - "version": "4.18.2", - "resolved": "http://registry.npmjs.org/eslint/-/eslint-4.18.2.tgz", - "integrity": "sha512-qy4i3wODqKMYfz9LUI8N2qYDkHkoieTbiHpMrYUI/WbjhXJQr7lI4VngixTgaG+yHX+NBCv7nW4hA0ShbvaNKw==", + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/eslint/download/eslint-7.11.0.tgz", + "integrity": "sha1-qvLSOgtfHWUqCO2s6gwZ9/rcCzs=", "dev": true, "requires": { - "ajv": "^5.3.0", - "babel-code-frame": "^6.22.0", - "chalk": "^2.1.0", - "concat-stream": "^1.6.0", - "cross-spawn": "^5.1.0", - "debug": "^3.1.0", - "doctrine": "^2.1.0", - "eslint-scope": "^3.7.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^3.5.2", - "esquery": "^1.0.0", + "@babel/code-frame": "^7.0.0", + "@eslint/eslintrc": "^0.1.3", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.0", + "esquery": "^1.2.0", "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", + "file-entry-cache": "^5.0.1", "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.0.1", - "ignore": "^3.3.3", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", - "inquirer": "^3.0.6", - "is-resolvable": "^1.0.0", - "js-yaml": "^3.9.1", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.4", - "minimatch": "^3.0.2", - "mkdirp": "^0.5.1", + "levn": "^0.4.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "pluralize": "^7.0.0", + "optionator": "^0.9.1", "progress": "^2.0.0", - "require-uncached": "^1.0.3", - "semver": "^5.3.0", - "strip-ansi": "^4.0.0", - "strip-json-comments": "~2.0.1", - "table": "4.0.2", - "text-table": "~0.2.0" + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-4.3.0.tgz", + "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-4.1.0.tgz?cache=0&sync_timestamp=1591687042638&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-4.1.0.tgz", + "integrity": "sha1-ThSHCmGNni7dl92DRf2dncMVZGo=", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz", + "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz", + "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", "dev": true }, "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "version": "7.0.3", + "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-7.0.3.tgz", + "integrity": "sha1-9zqFudXUHQRVUcF34ogtSshXKKY=", "dev": true, "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" } }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true + "debug": { + "version": "4.2.0", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.2.0.tgz?cache=0&sync_timestamp=1600502873540&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz", + "integrity": "sha1-fxUPk5IOlMWPVXTC/QGjEQ7/5/E=", + "dev": true, + "requires": { + "ms": "2.1.2" + } }, "globals": { - "version": "11.8.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.8.0.tgz", - "integrity": "sha512-io6LkyPVuzCHBSQV9fmOwxZkUk6nIaGmxheLDgmuFv89j0fm2aqDbIXKAGfzCMHqz3HLF2Zf8WSG6VqMh2qFmA==", + "version": "12.4.0", + "resolved": "https://registry.npm.taobao.org/globals/download/globals-12.4.0.tgz?cache=0&sync_timestamp=1596709302233&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobals%2Fdownload%2Fglobals-12.4.0.tgz", + "integrity": "sha1-oYgTV2pBsAokqX5/gVkYwuGZJfg=", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz", + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", + "dev": true + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npm.taobao.org/ignore/download/ignore-4.0.6.tgz?cache=0&sync_timestamp=1590809380232&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fignore%2Fdownload%2Fignore-4.0.6.tgz", + "integrity": "sha1-dQ49tYYgh7RzfrrIIH/9HvJ7Jfw=", "dev": true }, + "import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npm.taobao.org/import-fresh/download/import-fresh-3.2.1.tgz", + "integrity": "sha1-Yz/2GFBueTr1rJG/SLcmd+FcvmY=", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, "js-yaml": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", - "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", + "version": "3.14.0", + "resolved": "https://registry.npm.taobao.org/js-yaml/download/js-yaml-3.14.0.tgz?cache=0&sync_timestamp=1590172281856&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-yaml%2Fdownload%2Fjs-yaml-3.14.0.tgz", + "integrity": "sha1-p6NBcPJqIbsWJCTYray0ETpp5II=", "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" } }, - "lru-cache": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", - "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npm.taobao.org/levn/download/levn-0.4.1.tgz", + "integrity": "sha1-rkViwAdHO5MqYgDUAyaN0v/8at4=", "dev": true, "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" } }, - "strip-ansi": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz", + "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", + "dev": true + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npm.taobao.org/optionator/download/optionator-0.9.1.tgz", + "integrity": "sha1-TyNqY3Pa4FZqbUPhMmZ09QwpFJk=", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/path-key/download/path-key-3.1.1.tgz", + "integrity": "sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U=", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.2.1.tgz", + "integrity": "sha1-3rxkidem5rDnYRiIzsiAM30xY5Y=", + "dev": true + }, + "resolve-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "resolved": "https://registry.npm.taobao.org/resolve-from/download/resolve-from-4.0.0.tgz", + "integrity": "sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY=", + "dev": true + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-7.3.2.tgz?cache=0&sync_timestamp=1586886301819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.2.tgz", + "integrity": "sha1-YElisFK4HtB4aq6EOJ/7pw/9OTg=", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/shebang-command/download/shebang-command-2.0.0.tgz?cache=0&sync_timestamp=1590294659008&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fshebang-command%2Fdownload%2Fshebang-command-2.0.0.tgz", + "integrity": "sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo=", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-3.0.0.tgz", + "integrity": "sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI=", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-3.1.1.tgz?cache=0&sync_timestamp=1594567582667&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-json-comments%2Fdownload%2Fstrip-json-comments-3.1.1.tgz", + "integrity": "sha1-MfEoGzgyYwQ0gxwxDAHMzajL4AY=", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz", + "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npm.taobao.org/type-check/download/type-check-0.4.0.tgz", + "integrity": "sha1-B7ggO/pwVsBlcFDjzNLDdzC6uPE=", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/which/download/which-2.0.2.tgz", + "integrity": "sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=", + "dev": true, + "requires": { + "isexe": "^2.0.0" } } } }, - "eslint-config-standard": { - "version": "11.0.0", - "resolved": "http://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-11.0.0.tgz", - "integrity": "sha512-oDdENzpViEe5fwuRCWla7AXQd++/oyIp8zP+iP9jiUPG6NBj3SHgdgtl/kTn00AjeN+1HNvavTKmYbMo+xMOlw==", - "dev": true + "eslint-config-prettier": { + "version": "6.12.0", + "resolved": "https://registry.npm.taobao.org/eslint-config-prettier/download/eslint-config-prettier-6.12.0.tgz?cache=0&sync_timestamp=1601055269887&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-config-prettier%2Fdownload%2Feslint-config-prettier-6.12.0.tgz", + "integrity": "sha1-nrK8z/cn2xxSEE8LSeh+pGYFoNI=", + "dev": true, + "requires": { + "get-stdin": "^6.0.0" + }, + "dependencies": { + "get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npm.taobao.org/get-stdin/download/get-stdin-6.0.0.tgz", + "integrity": "sha1-ngm/cSs2CrkiXoEgSPcf3pyJZXs=", + "dev": true + } + } }, - "eslint-config-standard-jsx": { - "version": "5.0.0", - "resolved": "http://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-5.0.0.tgz", - "integrity": "sha512-rLToPAEqLMPBfWnYTu6xRhm2OWziS2n40QFqJ8jAM8NSVzeVKTa3nclhsU4DpPJQRY60F34Oo1wi/71PN/eITg==", + "eslint-config-standard": { + "version": "14.1.1", + "resolved": "https://registry.npm.taobao.org/eslint-config-standard/download/eslint-config-standard-14.1.1.tgz", + "integrity": "sha1-gwqOROeu995nRkl5rQa0BgJsVuo=", "dev": true }, "eslint-import-resolver-node": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", - "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", + "version": "0.3.4", + "resolved": "https://registry.npm.taobao.org/eslint-import-resolver-node/download/eslint-import-resolver-node-0.3.4.tgz", + "integrity": "sha1-hf+oGULCUBLYIxCW3fZ5wDBCxxc=", "dev": true, "requires": { "debug": "^2.6.9", - "resolve": "^1.5.0" + "resolve": "^1.13.1" }, "dependencies": { "debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1600502873540&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", "dev": true, "requires": { "ms": "2.0.0" @@ -9619,76 +8698,70 @@ } }, "eslint-module-utils": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz", - "integrity": "sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=", + "version": "2.6.0", + "resolved": "https://registry.npm.taobao.org/eslint-module-utils/download/eslint-module-utils-2.6.0.tgz", + "integrity": "sha1-V569CU9Wr3eX0ZyYZsnJSGYpv6Y=", "dev": true, "requires": { - "debug": "^2.6.8", - "pkg-dir": "^1.0.0" + "debug": "^2.6.9", + "pkg-dir": "^2.0.0" }, "dependencies": { "debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1600502873540&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", "dev": true, "requires": { "ms": "2.0.0" } }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, "pkg-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "dev": true, "requires": { - "find-up": "^1.0.0" + "find-up": "^2.1.0" } } } }, + "eslint-plugin-es": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/eslint-plugin-es/download/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha1-dafN/czdwFiZNK7rOEF18iHFeJM=", + "dev": true, + "requires": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + } + }, "eslint-plugin-import": { - "version": "2.9.0", - "resolved": "http://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.9.0.tgz", - "integrity": "sha1-JgAu+/ylmJtyiKwEdQi9JPIXsWk=", + "version": "2.22.1", + "resolved": "https://registry.npm.taobao.org/eslint-plugin-import/download/eslint-plugin-import-2.22.1.tgz?cache=0&sync_timestamp=1601248228092&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-plugin-import%2Fdownload%2Feslint-plugin-import-2.22.1.tgz", + "integrity": "sha1-CJbH5qDPRBCaLZe5WQPCu2iddwI=", "dev": true, "requires": { - "builtin-modules": "^1.1.1", + "array-includes": "^3.1.1", + "array.prototype.flat": "^1.2.3", "contains-path": "^0.1.0", - "debug": "^2.6.8", + "debug": "^2.6.9", "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.1", - "eslint-module-utils": "^2.1.1", - "has": "^1.0.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.3", - "read-pkg-up": "^2.0.0" + "eslint-import-resolver-node": "^0.3.4", + "eslint-module-utils": "^2.6.0", + "has": "^1.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.1", + "read-pkg-up": "^2.0.0", + "resolve": "^1.17.0", + "tsconfig-paths": "^3.9.0" }, "dependencies": { "debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1600502873540&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", "dev": true, "requires": { "ms": "2.0.0" @@ -9696,7 +8769,7 @@ }, "doctrine": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "resolved": "https://registry.npm.taobao.org/doctrine/download/doctrine-1.5.0.tgz", "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", "dev": true, "requires": { @@ -9704,21 +8777,9 @@ "isarray": "^1.0.0" } }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, "load-json-file": { "version": "2.0.0", - "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "resolved": "https://registry.npm.taobao.org/load-json-file/download/load-json-file-2.0.0.tgz", "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", "dev": true, "requires": { @@ -9730,7 +8791,7 @@ }, "parse-json": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-2.2.0.tgz?cache=0&sync_timestamp=1598129273895&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-json%2Fdownload%2Fparse-json-2.2.0.tgz", "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { @@ -9739,22 +8800,16 @@ }, "path-type": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "resolved": "https://registry.npm.taobao.org/path-type/download/path-type-2.0.0.tgz", "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", "dev": true, "requires": { "pify": "^2.0.0" } }, - "pify": { - "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, "read-pkg": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "resolved": "https://registry.npm.taobao.org/read-pkg/download/read-pkg-2.0.0.tgz", "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", "dev": true, "requires": { @@ -9765,7 +8820,7 @@ }, "read-pkg-up": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "resolved": "https://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-2.0.0.tgz", "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", "dev": true, "requires": { @@ -9775,108 +8830,204 @@ }, "strip-bom": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "resolved": "https://registry.npm.taobao.org/strip-bom/download/strip-bom-3.0.0.tgz", "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true } } }, "eslint-plugin-node": { - "version": "6.0.1", - "resolved": "http://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-6.0.1.tgz", - "integrity": "sha512-Q/Cc2sW1OAISDS+Ji6lZS2KV4b7ueA/WydVWd1BECTQwVvfQy5JAi3glhINoKzoMnfnuRgNP+ZWKrGAbp3QDxw==", + "version": "11.1.0", + "resolved": "https://registry.npm.taobao.org/eslint-plugin-node/download/eslint-plugin-node-11.1.0.tgz?cache=0&sync_timestamp=1589682720295&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-plugin-node%2Fdownload%2Feslint-plugin-node-11.1.0.tgz", + "integrity": "sha1-yVVEQW7kraJnQKMEdO78VALcZx0=", "dev": true, "requires": { - "ignore": "^3.3.6", + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", "minimatch": "^3.0.4", - "resolve": "^1.3.3", - "semver": "^5.4.1" + "resolve": "^1.10.1", + "semver": "^6.1.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1586886301819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz", + "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", + "dev": true + } } }, - "eslint-plugin-promise": { - "version": "3.7.0", - "resolved": "http://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.7.0.tgz", - "integrity": "sha512-2WO+ZFh7vxUKRfR0cOIMrWgYKdR6S1AlOezw6pC52B6oYpd5WFghN+QHxvrRdZMtbo8h3dfUZ2o1rWb0UPbKtg==", - "dev": true - }, - "eslint-plugin-react": { - "version": "7.7.0", - "resolved": "http://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.7.0.tgz", - "integrity": "sha512-KC7Snr4YsWZD5flu6A5c0AcIZidzW3Exbqp7OT67OaD2AppJtlBr/GuPrW/vaQM/yfZotEvKAdrxrO+v8vwYJA==", + "eslint-plugin-prettier": { + "version": "3.1.4", + "resolved": "https://registry.npm.taobao.org/eslint-plugin-prettier/download/eslint-plugin-prettier-3.1.4.tgz", + "integrity": "sha1-Foq0MVTi6lfbmSos0JfIKBcfdcI=", "dev": true, "requires": { - "doctrine": "^2.0.2", - "has": "^1.0.1", - "jsx-ast-utils": "^2.0.1", - "prop-types": "^15.6.0" + "prettier-linter-helpers": "^1.0.0" } }, - "eslint-plugin-standard": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-3.0.1.tgz", - "integrity": "sha1-NNDJFbRe3G8BA5PH7vOCOwhWXPI=", + "eslint-plugin-promise": { + "version": "4.2.1", + "resolved": "https://registry.npm.taobao.org/eslint-plugin-promise/download/eslint-plugin-promise-4.2.1.tgz", + "integrity": "sha1-hF/YsiYK2PglZMEiL85ErXHZQYo=", "dev": true }, - "eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "eslint-plugin-react": { + "version": "7.21.4", + "resolved": "https://registry.npm.taobao.org/eslint-plugin-react/download/eslint-plugin-react-7.21.4.tgz?cache=0&sync_timestamp=1602284467559&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-plugin-react%2Fdownload%2Feslint-plugin-react-7.21.4.tgz", + "integrity": "sha1-MQYLLl/4KxLiSjzDPtt9EvkEd1w=", + "dev": true, + "requires": { + "array-includes": "^3.1.1", + "array.prototype.flatmap": "^1.2.3", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "object.entries": "^1.1.2", + "object.fromentries": "^2.0.2", + "object.values": "^1.1.1", + "prop-types": "^15.7.2", + "resolve": "^1.17.0", + "string.prototype.matchall": "^4.0.2" + }, + "dependencies": { + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/doctrine/download/doctrine-2.1.0.tgz", + "integrity": "sha1-XNAfwQFiG0LEzX9dGmYkNxbT850=", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + } + } + }, + "eslint-plugin-standard": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/eslint-plugin-standard/download/eslint-plugin-standard-4.0.1.tgz", + "integrity": "sha1-/wUZ9/+v8RT3bRvXw5lu7w9uILQ=", + "dev": true + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-5.1.1.tgz?cache=0&sync_timestamp=1599933677754&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-scope%2Fdownload%2Feslint-scope-5.1.1.tgz", + "integrity": "sha1-54blmmbLkrP2wfsNUIqrF0hI9Iw=", "dev": true, "requires": { - "esrecurse": "^4.1.0", + "esrecurse": "^4.3.0", "estraverse": "^4.1.1" + }, + "dependencies": { + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npm.taobao.org/esrecurse/download/esrecurse-4.3.0.tgz", + "integrity": "sha1-eteWTWeauyi+5yzsY3WLHF0smSE=", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-5.2.0.tgz?cache=0&sync_timestamp=1596642941915&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-5.2.0.tgz", + "integrity": "sha1-MH30JUfmzHMk088DwVXVzbjFOIA=", + "dev": true + } + } + } + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/eslint-utils/download/eslint-utils-2.1.0.tgz?cache=0&sync_timestamp=1592222030474&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-utils%2Fdownload%2Feslint-utils-2.1.0.tgz", + "integrity": "sha1-0t5eA0JOcH3BDHQGjd7a5wh0Gyc=", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npm.taobao.org/eslint-visitor-keys/download/eslint-visitor-keys-1.3.0.tgz?cache=0&sync_timestamp=1597435545176&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-visitor-keys%2Fdownload%2Feslint-visitor-keys-1.3.0.tgz", + "integrity": "sha1-MOvR73wv3/AcOk8VEESvJfqwUj4=", + "dev": true + } } }, "eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/eslint-visitor-keys/download/eslint-visitor-keys-2.0.0.tgz?cache=0&sync_timestamp=1597435545176&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-visitor-keys%2Fdownload%2Feslint-visitor-keys-2.0.0.tgz", + "integrity": "sha1-If3I+82ceVzAMh8FY3AglXUVEag=", "dev": true }, "espree": { - "version": "3.5.4", - "resolved": "http://registry.npmjs.org/espree/-/espree-3.5.4.tgz", - "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", + "version": "7.3.0", + "resolved": "https://registry.npm.taobao.org/espree/download/espree-7.3.0.tgz?cache=0&sync_timestamp=1598127498738&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fespree%2Fdownload%2Fespree-7.3.0.tgz", + "integrity": "sha1-3DBDfPZ5R89XYSHr14DxXurHI0g=", "dev": true, "requires": { - "acorn": "^5.5.0", - "acorn-jsx": "^3.0.0" + "acorn": "^7.4.0", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-7.4.1.tgz?cache=0&sync_timestamp=1602534280466&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-7.4.1.tgz", + "integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=", + "dev": true + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npm.taobao.org/eslint-visitor-keys/download/eslint-visitor-keys-1.3.0.tgz?cache=0&sync_timestamp=1597435545176&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-visitor-keys%2Fdownload%2Feslint-visitor-keys-1.3.0.tgz", + "integrity": "sha1-MOvR73wv3/AcOk8VEESvJfqwUj4=", + "dev": true + } } }, "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "version": "4.0.1", + "resolved": "http://r.cnpmjs.org/esprima/download/esprima-4.0.1.tgz", + "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=", "dev": true }, "esquery": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", - "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "version": "1.3.1", + "resolved": "https://registry.npm.taobao.org/esquery/download/esquery-1.3.1.tgz", + "integrity": "sha1-t4tYKKqOIU4p+3TE1bdS4cAz2lc=", "dev": true, "requires": { - "estraverse": "^4.0.0" + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-5.2.0.tgz?cache=0&sync_timestamp=1596642941915&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-5.2.0.tgz", + "integrity": "sha1-MH30JUfmzHMk088DwVXVzbjFOIA=", + "dev": true + } } }, "esrecurse": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "resolved": "http://r.cnpmjs.org/esrecurse/download/esrecurse-4.2.1.tgz", + "integrity": "sha1-AHo7n9vCs7uH5IeeoZyS/b05Qs8=", "dev": true, "requires": { "estraverse": "^4.1.0" } }, "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "version": "4.3.0", + "resolved": "http://r.cnpmjs.org/estraverse/download/estraverse-4.3.0.tgz", + "integrity": "sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0=", "dev": true }, "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "version": "2.0.3", + "resolved": "http://r.cnpmjs.org/esutils/download/esutils-2.0.3.tgz", + "integrity": "sha1-dNLrTeC42hKTcRkQ1Qd1ubcQ72Q=", "dev": true }, "etag": { @@ -9886,21 +9037,21 @@ "dev": true }, "eventemitter3": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz", - "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==", + "version": "4.0.4", + "resolved": "http://r.cnpmjs.org/eventemitter3/download/eventemitter3-4.0.4.tgz", + "integrity": "sha1-tUY6zmNaCD0Bi9x8kXtMXxCoU4Q=", "dev": true }, "events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", - "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==", + "version": "3.2.0", + "resolved": "https://registry.npm.taobao.org/events/download/events-3.2.0.tgz?cache=0&sync_timestamp=1595422608991&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fevents%2Fdownload%2Fevents-3.2.0.tgz", + "integrity": "sha1-k7h8GPjvzUICpGGuxN/AVWtjk3k=", "dev": true }, "eventsource": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", - "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", + "resolved": "http://r.cnpmjs.org/eventsource/download/eventsource-1.0.7.tgz", + "integrity": "sha1-j7xyyT/NNAiAkLwKTmT0tc7m2NA=", "dev": true, "requires": { "original": "^1.0.0" @@ -9908,8 +9059,8 @@ }, "evp_bytestokey": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "resolved": "http://r.cnpmjs.org/evp_bytestokey/download/evp_bytestokey-1.0.3.tgz", + "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=", "dev": true, "requires": { "md5.js": "^1.3.4", @@ -9917,19 +9068,19 @@ } }, "exec-sh": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.2.tgz", - "integrity": "sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg==", + "version": "0.3.4", + "resolved": "http://r.cnpmjs.org/exec-sh/download/exec-sh-0.3.4.tgz", + "integrity": "sha1-OgGM61JsxvbfK7UEsr/o46STTsU=", "dev": true }, "execa": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.9.0.tgz", - "integrity": "sha512-BbUMBiX4hqiHZUA5+JujIjNb6TyAlp2D5KLheMjMluwOuzcnylDL4AxZYLLn1n2AGB49eSWwyKvvEQoRpnAtmA==", + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/execa/download/execa-1.0.0.tgz", + "integrity": "sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg=", "dev": true, "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", "is-stream": "^1.1.0", "npm-run-path": "^2.0.0", "p-finally": "^1.0.0", @@ -9937,26 +9088,11 @@ "strip-eof": "^1.0.0" }, "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "lru-cache": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", - "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } + "is-stream": { + "version": "1.1.0", + "resolved": "http://r.cnpmjs.org/is-stream/download/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true } } }, @@ -9975,54 +9111,13 @@ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", "dev": true }, - "exit-hook": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", - "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", - "dev": true - }, "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "version": "0.1.5", + "resolved": "http://r.cnpmjs.org/expand-brackets/download/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "dev": true, "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "is-posix-bracket": "^0.1.0" } }, "expand-range": { @@ -10036,8 +9131,8 @@ "dependencies": { "fill-range": { "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-2.2.4.tgz", + "integrity": "sha1-6x53OrsFbc2N8r/favWbizqTZWU=", "dev": true, "requires": { "is-number": "^2.1.0", @@ -10055,30 +9150,6 @@ "requires": { "kind-of": "^3.0.2" } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } } } }, @@ -10092,31 +9163,23 @@ } }, "expect": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-24.8.0.tgz", - "integrity": "sha512-/zYvP8iMDrzaaxHVa724eJBCKqSHmO0FA7EDkBiRHxg6OipmMn1fN+C8T9L9K8yr7UONkOifu6+LLH+z76CnaA==", + "version": "24.9.0", + "resolved": "http://r.cnpmjs.org/expect/download/expect-24.9.0.tgz", + "integrity": "sha1-t1FltIFwdPpKFXeU9G/p8boVtso=", "dev": true, "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "ansi-styles": "^3.2.0", - "jest-get-type": "^24.8.0", - "jest-matcher-utils": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-regex-util": "^24.3.0" - }, - "dependencies": { - "jest-get-type": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.8.0.tgz", - "integrity": "sha512-RR4fo8jEmMD9zSz2nLbs2j0zvPpk/KCEz3a62jJWbd2ayNo0cb+KFRxPHVhE4ZmgGJEQp0fosmNz84IfqM8cMQ==", - "dev": true - } + "jest-get-type": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-regex-util": "^24.9.0" } }, "express": { "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "resolved": "http://r.cnpmjs.org/express/download/express-4.17.1.tgz", + "integrity": "sha1-RJH8OGBc9R+GKdOcK10Cb5ikwTQ=", "dev": true, "requires": { "accepts": "~1.3.7", @@ -10153,32 +9216,25 @@ "dependencies": { "debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "resolved": "http://r.cnpmjs.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", "dev": true, "requires": { "ms": "2.0.0" } }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true - }, "qs": { "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "resolved": "http://r.cnpmjs.org/qs/download/qs-6.7.0.tgz", + "integrity": "sha1-QdwaAV49WB8WIXdr4xr7KHapsbw=", "dev": true } } }, "extend": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true + "resolved": "http://r.cnpmjs.org/extend/download/extend-3.0.2.tgz", + "integrity": "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo=" }, "extend-shallow": { "version": "3.0.2", @@ -10192,8 +9248,8 @@ "dependencies": { "is-extendable": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "resolved": "http://r.cnpmjs.org/is-extendable/download/is-extendable-1.0.1.tgz", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", "dev": true, "requires": { "is-plain-object": "^2.0.4" @@ -10201,79 +9257,20 @@ } } }, - "external-editor": { - "version": "2.2.0", - "resolved": "http://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", - "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", - "dev": true, - "requires": { - "chardet": "^0.4.0", - "iconv-lite": "^0.4.17", - "tmp": "^0.0.33" - } - }, "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "version": "0.3.2", + "resolved": "http://r.cnpmjs.org/extglob/download/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "dev": true, "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "is-extglob": "^1.0.0" }, "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { + "is-extglob": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } + "resolved": "https://registry.npm.taobao.org/is-extglob/download/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true } } }, @@ -10284,21 +9281,21 @@ "dev": true }, "extract-zip": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz", - "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=", + "version": "1.7.0", + "resolved": "https://r.cnpmjs.org/extract-zip/download/extract-zip-1.7.0.tgz", + "integrity": "sha1-VWzDrp339FLEk6DPtRzDAneUCSc=", "dev": true, "requires": { - "concat-stream": "1.6.2", - "debug": "2.6.9", - "mkdirp": "0.5.1", - "yauzl": "2.4.1" + "concat-stream": "^1.6.2", + "debug": "^2.6.9", + "mkdirp": "^0.5.4", + "yauzl": "^2.10.0" }, "dependencies": { "debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "resolved": "http://r.cnpmjs.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", "dev": true, "requires": { "ms": "2.0.0" @@ -10313,72 +9310,46 @@ "dev": true }, "fancy-log": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz", - "integrity": "sha1-9BEl49hPLn2JpD0G2VjI94vha+E=", + "version": "1.3.3", + "resolved": "https://r.cnpmjs.org/fancy-log/download/fancy-log-1.3.3.tgz", + "integrity": "sha1-28GRVPVYaQFQojlToK29A1vkX8c=", "dev": true, "requires": { "ansi-gray": "^0.1.1", "color-support": "^1.1.3", + "parse-node-version": "^1.0.0", "time-stamp": "^1.0.0" } }, "fast-deep-equal": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "version": "3.1.3", + "resolved": "https://r.cnpmjs.org/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz", + "integrity": "sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU=", "dev": true }, + "fast-diff": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/fast-diff/download/fast-diff-1.1.2.tgz", + "integrity": "sha1-S2LEK44D3j+EhGC2OQeZIGldAVQ=" + }, "fast-glob": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", - "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "version": "3.2.4", + "resolved": "https://registry.npm.taobao.org/fast-glob/download/fast-glob-3.2.4.tgz?cache=0&sync_timestamp=1592290280465&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-glob%2Fdownload%2Ffast-glob-3.2.4.tgz", + "integrity": "sha1-0grvv5lXk4Pn88xmUpFYybmFVNM=", "dev": true, "requires": { - "@mrmlnc/readdir-enhanced": "^2.2.1", - "@nodelib/fs.stat": "^1.1.2", - "glob-parent": "^3.1.0", - "is-glob": "^4.0.0", - "merge2": "^1.2.3", - "micromatch": "^3.1.10" - }, - "dependencies": { - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - } + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" } }, "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "version": "2.1.0", + "resolved": "http://r.cnpmjs.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM=", "dev": true }, "fast-levenshtein": { @@ -10388,13 +9359,22 @@ "dev": true }, "fastparse": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz", - "integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=", + "version": "1.1.2", + "resolved": "https://r.cnpmjs.org/fastparse/download/fastparse-1.1.2.tgz", + "integrity": "sha1-kXKMWllC7O2FMSg8eUQe5BIsNak=", "dev": true }, - "faye-websocket": { - "version": "0.10.0", + "fastq": { + "version": "1.8.0", + "resolved": "https://registry.npm.taobao.org/fastq/download/fastq-1.8.0.tgz?cache=0&sync_timestamp=1589280275762&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffastq%2Fdownload%2Ffastq-1.8.0.tgz", + "integrity": "sha1-VQ4fn1m7xl/hhctqm02VNXEH9IE=", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "faye-websocket": { + "version": "0.10.0", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", "dev": true, @@ -10403,12 +9383,12 @@ } }, "fb-watchman": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", - "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/fb-watchman/download/fb-watchman-2.0.1.tgz", + "integrity": "sha1-/IT7OdJwnPP/bXQ3BhV7tXCKioU=", "dev": true, "requires": { - "bser": "^2.0.0" + "bser": "2.1.1" } }, "fbjs": { @@ -10433,9 +9413,9 @@ } }, "fd-slicer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", - "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "version": "1.1.0", + "resolved": "https://r.cnpmjs.org/fd-slicer/download/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", "dev": true, "requires": { "pend": "~1.2.0" @@ -10447,9 +9427,9 @@ "integrity": "sha1-nrnlhboIqvcAVjU40Xu+u81aPbI=" }, "figgy-pudding": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", - "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", + "version": "3.5.2", + "resolved": "http://r.cnpmjs.org/figgy-pudding/download/figgy-pudding-3.5.2.tgz", + "integrity": "sha1-tO7oFIq7Adzx0aw0Nn1Z4S+mHW4=", "dev": true }, "figures": { @@ -10463,53 +9443,28 @@ } }, "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "version": "5.0.1", + "resolved": "https://registry.npm.taobao.org/file-entry-cache/download/file-entry-cache-5.0.1.tgz", + "integrity": "sha1-yg9u+m3T1WEzP7FFFQZcL6/fQ5w=", "dev": true, "requires": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" + "flat-cache": "^2.0.1" } }, "file-loader": { "version": "1.1.11", - "resolved": "http://registry.npmjs.org/file-loader/-/file-loader-1.1.11.tgz", - "integrity": "sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg==", + "resolved": "http://r.cnpmjs.org/file-loader/download/file-loader-1.1.11.tgz", + "integrity": "sha1-b+iGRJsPKpNuQ8q6rAzb+zaVBvg=", "dev": true, "requires": { "loader-utils": "^1.0.2", "schema-utils": "^0.4.5" }, "dependencies": { - "ajv": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.4.tgz", - "integrity": "sha512-4Wyjt8+t6YszqaXnLDfMmG/8AlO5Zbcsy3ATHncCzjW/NoPzAId8AK6749Ybjmdt+kUY1gP60fCu46oDxPv/mg==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, "schema-utils": { "version": "0.4.7", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", - "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", + "resolved": "https://r.cnpmjs.org/schema-utils/download/schema-utils-0.4.7.tgz", + "integrity": "sha1-unT1l9K+LqiAExdG7hfQoJPGgYc=", "dev": true, "requires": { "ajv": "^6.1.0", @@ -10518,6 +9473,13 @@ } } }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/file-uri-to-path/download/file-uri-to-path-1.0.0.tgz", + "integrity": "sha1-VTp7hEb/b2hDWcRF8eN6BdrMM90=", + "dev": true, + "optional": true + }, "filename-regex": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", @@ -10553,37 +9515,23 @@ }, "filesize": { "version": "3.6.1", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", - "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", + "resolved": "http://r.cnpmjs.org/filesize/download/filesize-3.6.1.tgz", + "integrity": "sha1-CQuz7gG2+AGoqL6Z0xcQs0Irsxc=", "dev": true }, "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "version": "7.0.1", + "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz", + "integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "to-regex-range": "^5.0.1" } }, "finalhandler": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "resolved": "http://r.cnpmjs.org/finalhandler/download/finalhandler-1.1.2.tgz", + "integrity": "sha1-t+fQAP/RGTjQ/bBTUG9uur6fWH0=", "dev": true, "requires": { "debug": "2.6.9", @@ -10597,8 +9545,8 @@ "dependencies": { "debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "resolved": "http://r.cnpmjs.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", "dev": true, "requires": { "ms": "2.0.0" @@ -10608,8 +9556,8 @@ }, "find-cache-dir": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "resolved": "http://r.cnpmjs.org/find-cache-dir/download/find-cache-dir-2.1.0.tgz", + "integrity": "sha1-jQ+UzRP+Q8bHwmGg2GEVypGMBfc=", "dev": true, "requires": { "commondir": "^1.0.1", @@ -10629,12 +9577,6 @@ "integrity": "sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ=", "dev": true }, - "find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", - "dev": true - }, "find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", @@ -10654,12 +9596,322 @@ "is-glob": "^3.1.0", "micromatch": "^3.0.4", "resolve-dir": "^1.0.1" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/arr-diff/download/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "http://r.cnpmjs.org/array-unique/download/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "http://r.cnpmjs.org/braces/download/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "debug": { + "version": "2.6.9", + "resolved": "http://r.cnpmjs.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "http://r.cnpmjs.org/expand-brackets/download/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "http://r.cnpmjs.org/extglob/download/extglob-2.0.4.tgz", + "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/fill-range/download/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "http://r.cnpmjs.org/is-buffer/download/is-buffer-1.1.6.tgz", + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", + "dev": true + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-glob": { + "version": "3.1.0", + "resolved": "http://r.cnpmjs.org/is-glob/download/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-6.0.3.tgz", + "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "http://r.cnpmjs.org/micromatch/download/micromatch-3.1.10.tgz", + "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } } }, "fined": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.1.0.tgz", - "integrity": "sha1-s33IRLdqL15wgeiE98CuNE8VNHY=", + "version": "1.2.0", + "resolved": "https://r.cnpmjs.org/fined/download/fined-1.2.0.tgz", + "integrity": "sha1-0AvszxqitHXRbUI7Aji3E6LEo3s=", "dev": true, "requires": { "expand-tilde": "^2.0.2", @@ -10676,89 +9928,59 @@ "dev": true }, "flagged-respawn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.0.tgz", - "integrity": "sha1-Tnmumy6zi/hrO7Vr8+ClaqX8q9c=", + "version": "1.0.1", + "resolved": "https://r.cnpmjs.org/flagged-respawn/download/flagged-respawn-1.0.1.tgz", + "integrity": "sha1-595vEnnd2cqarIpZcdYYYGs6q0E=", "dev": true }, "flat-cache": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", - "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/flat-cache/download/flat-cache-2.0.1.tgz", + "integrity": "sha1-XSltbwS9pEpGMKMBQTvbwuwIXsA=", "dev": true, "requires": { - "circular-json": "^0.3.1", - "del": "^2.0.2", - "graceful-fs": "^4.1.2", - "write": "^0.2.1" + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" }, "dependencies": { - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-2.6.3.tgz", + "integrity": "sha1-stEE/g2Psnz54KHNqCYt04M8bKs=", + "dev": true, + "requires": { + "glob": "^7.1.3" + } } } }, "flatted": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", - "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", + "version": "2.0.2", + "resolved": "https://r.cnpmjs.org/flatted/download/flatted-2.0.2.tgz", + "integrity": "sha1-RXWyHivO50NKqb5mL0t7X5wrUTg=", "dev": true }, "flatten": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", - "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=", + "version": "1.0.3", + "resolved": "http://r.cnpmjs.org/flatten/download/flatten-1.0.3.tgz", + "integrity": "sha1-wSg6yfJ7Noq8HjbR/3sEUBowNWs=", "dev": true }, "flush-write-stream": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "resolved": "http://r.cnpmjs.org/flush-write-stream/download/flush-write-stream-1.1.1.tgz", + "integrity": "sha1-jdfYc6G6vCB9lOrQwuDkQnbr8ug=", "dev": true, "requires": { "inherits": "^2.0.3", "readable-stream": "^2.3.6" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, "follow-redirects": { - "version": "1.5.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.9.tgz", - "integrity": "sha512-Bh65EZI/RU8nx0wbYF9shkFZlqLP+6WT/5FnA3cE/djNSuKNHJEinGGZgu/cQEkeeb2GdFOgenAmn8qaqYke2w==", + "version": "1.5.10", + "resolved": "https://r.cnpmjs.org/follow-redirects/download/follow-redirects-1.5.10.tgz", + "integrity": "sha1-e3qfmuov3/NnhqlP9kPtB/T/Xio=", "requires": { "debug": "=3.1.0" } @@ -10770,9 +9992,9 @@ "dev": true }, "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "version": "0.1.5", + "resolved": "http://r.cnpmjs.org/for-own/download/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", "dev": true, "requires": { "for-in": "^1.0.1" @@ -10786,8 +10008,8 @@ }, "form-data": { "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "resolved": "http://r.cnpmjs.org/form-data/download/form-data-2.3.3.tgz", + "integrity": "sha1-3M5SwF9kTymManq5Nr1yTO/786Y=", "dev": true, "requires": { "asynckit": "^0.4.0", @@ -10824,69 +10046,46 @@ "requires": { "inherits": "^2.0.1", "readable-stream": "^2.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, "fs-constants": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "resolved": "https://r.cnpmjs.org/fs-constants/download/fs-constants-1.0.0.tgz", + "integrity": "sha1-a+Dem+mYzhavivwkSXue6bfM2a0=", "dev": true }, "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "version": "8.1.0", + "resolved": "https://r.cnpmjs.org/fs-extra/download/fs-extra-8.1.0.tgz", + "integrity": "sha1-SdQ8RaiM2Wd2aMt74bRu/bjS4cA=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", + "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" }, "dependencies": { - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/jsonfile/download/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/universalify/download/universalify-0.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funiversalify%2Fdownload%2Funiversalify-0.1.2.tgz", + "integrity": "sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY=", "dev": true } } }, "fs-minipass": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "resolved": "https://r.cnpmjs.org/fs-minipass/download/fs-minipass-1.2.7.tgz", + "integrity": "sha1-zP+FcIQef+QmVpPaiJNsVa7X98c=", "dev": true, "requires": { "minipass": "^2.6.0" @@ -10902,14 +10101,6 @@ "iferr": "^0.1.5", "imurmurhash": "^0.1.4", "readable-stream": "1 || 2" - }, - "dependencies": { - "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", - "dev": true - } } }, "fs.realpath": { @@ -10919,3022 +10110,3003 @@ "dev": true }, "fsevents": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", - "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", + "version": "1.2.13", + "resolved": "http://r.cnpmjs.org/fsevents/download/fsevents-1.2.13.tgz", + "integrity": "sha1-8yXLBFVZJCi88Rs4M3DvcOO/zDg=", "dev": true, "optional": true, "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "fstream": { + "version": "1.0.12", + "resolved": "https://r.cnpmjs.org/fstream/download/fstream-1.0.12.tgz", + "integrity": "sha1-Touo7i1Ivk99DeUFRVVI6uWTIEU=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "http://r.cnpmjs.org/function-bind/download/function-bind-1.1.1.tgz", + "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=" + }, + "function.prototype.name": { + "version": "1.1.2", + "resolved": "http://r.cnpmjs.org/function.prototype.name/download/function.prototype.name-1.1.2.tgz", + "integrity": "sha1-XN9518BdtAFZHf3oPjtwxRI+mkU=", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "functions-have-names": "^1.2.0" + } + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/functional-red-black-tree/download/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "functions-have-names": { + "version": "1.2.1", + "resolved": "https://r.cnpmjs.org/functions-have-names/download/functions-have-names-1.2.1.tgz", + "integrity": "sha1-qYGsOX+gyZZFUUAs3FUz16TVL5E=", + "dev": true + }, + "gather-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gather-stream/-/gather-stream-1.0.0.tgz", + "integrity": "sha1-szmUr0V6gRVwDUEPMXczy+egkEs=", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" }, "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, "ansi-regex": { "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } + "resolved": "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true }, - "balanced-match": { + "is-fullwidth-code-point": { "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, + "resolved": "http://r.cnpmjs.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, - "optional": true, "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "number-is-nan": "^1.0.0" } }, - "chownr": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "core-util-is": { + "string-width": { "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "2.6.9", - "bundled": true, + "resolved": "http://r.cnpmjs.org/string-width/download/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, - "optional": true, "requires": { - "ms": "2.0.0" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, - "optional": true, "requires": { - "minipass": "^2.2.1" + "ansi-regex": "^2.0.0" } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, + } + } + }, + "gaze": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz", + "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=", + "dev": true, + "requires": { + "globule": "~0.1.0" + } + }, + "gensync": { + "version": "1.0.0-beta.1", + "resolved": "http://r.cnpmjs.org/gensync/download/gensync-1.0.0-beta.1.tgz", + "integrity": "sha1-WPQ2H/mH5f9uHnohCCeqNx6qwmk=", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "http://r.cnpmjs.org/get-caller-file/download/get-caller-file-2.0.5.tgz", + "integrity": "sha1-T5RBKoLbMvNuOwuXQfipf+sDH34=", + "dev": true + }, + "get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "http://r.cnpmjs.org/get-own-enumerable-property-symbols/download/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha1-tf3nfyLL4185C04ImSLFC85u9mQ=", + "dev": true + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "get-stream": { + "version": "4.1.0", + "resolved": "http://r.cnpmjs.org/get-stream/download/get-stream-4.1.0.tgz", + "integrity": "sha1-wbJVV189wh1Zv8ec09K0axw6VLU=", + "dev": true, + "requires": { + "pump": "^3.0.0" + }, + "dependencies": { + "pump": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/pump/download/pump-3.0.0.tgz", + "integrity": "sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=", "dev": true, - "optional": true, "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } - }, - "glob": { - "version": "7.1.3", - "bundled": true, + } + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "gh-pages": { + "version": "2.2.0", + "resolved": "https://r.cnpmjs.org/gh-pages/download/gh-pages-2.2.0.tgz", + "integrity": "sha1-dOvqyo0rmhEnncvUo53f/z5sqiQ=", + "dev": true, + "requires": { + "async": "^2.6.1", + "commander": "^2.18.0", + "email-addresses": "^3.0.1", + "filenamify-url": "^1.0.0", + "fs-extra": "^8.1.0", + "globby": "^6.1.0" + }, + "dependencies": { + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/array-union/download/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, - "optional": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "array-uniq": "^1.0.1" } }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, + "async": { + "version": "2.6.3", + "resolved": "http://r.cnpmjs.org/async/download/async-2.6.3.tgz", + "integrity": "sha1-1yYl4jRKNlbjo61Pp0n6gymdgv8=", "dev": true, - "optional": true, "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "lodash": "^4.17.14" } }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, + "globby": { + "version": "6.1.0", + "resolved": "http://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, - "optional": true, "requires": { - "minimatch": "^3.0.4" + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, + } + } + }, + "github-markdown-css": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/github-markdown-css/download/github-markdown-css-3.0.1.tgz", + "integrity": "sha1-0I2xBg0uGCAl4NB9VHz+Kv7TAgU=", + "dev": true + }, + "glob": { + "version": "7.1.6", + "resolved": "http://r.cnpmjs.org/glob/download/glob-7.1.6.tgz", + "integrity": "sha1-FB8zuBp8JJLhJVlDB0gMRmeSeKY=", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" + }, + "dependencies": { + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "dev": true, - "optional": true, "requires": { - "number-is-nan": "^1.0.0" + "is-glob": "^2.0.0" } }, - "isarray": { + "is-extglob": { "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true }, - "minimatch": { - "version": "3.0.4", - "bundled": true, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, - "optional": true, "requires": { - "brace-expansion": "^1.1.7" + "is-extglob": "^1.0.0" } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true, - "optional": true - }, - "minipass": { - "version": "2.3.5", - "bundled": true, + } + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-5.1.1.tgz", + "integrity": "sha1-tsHvQXxOVmPqSY8cRa+saRa7wik=", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-stream": { + "version": "3.1.18", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz", + "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=", + "dev": true, + "requires": { + "glob": "^4.3.1", + "glob2base": "^0.0.12", + "minimatch": "^2.0.1", + "ordered-read-streams": "^0.1.0", + "through2": "^0.6.1", + "unique-stream": "^1.0.0" + }, + "dependencies": { + "glob": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", + "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", "dev": true, - "optional": true, "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^2.0.1", + "once": "^1.3.0" } }, - "minizlib": { - "version": "1.2.1", - "bundled": true, + "isarray": { + "version": "0.0.1", + "resolved": "http://r.cnpmjs.org/isarray/download/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "minimatch": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", + "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", "dev": true, - "optional": true, "requires": { - "minipass": "^2.2.1" + "brace-expansion": "^1.0.0" } }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, + "readable-stream": { + "version": "1.0.34", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, - "optional": true, "requires": { - "minimist": "0.0.8" + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" } }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true + "string_decoder": { + "version": "0.10.31", + "resolved": "http://r.cnpmjs.org/string_decoder/download/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true }, - "needle": { - "version": "2.2.4", - "bundled": true, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", "dev": true, - "optional": true, "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" } - }, - "node-pre-gyp": { - "version": "0.10.3", - "bundled": true, + } + } + }, + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", + "dev": true + }, + "glob-watcher": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz", + "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=", + "dev": true, + "requires": { + "gaze": "^0.5.1" + } + }, + "glob2base": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz", + "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=", + "dev": true, + "requires": { + "find-index": "^0.1.1" + } + }, + "global": { + "version": "4.4.0", + "resolved": "https://r.cnpmjs.org/global/download/global-4.4.0.tgz", + "integrity": "sha1-PnsQUXkAajI+1xqvyj6cV6XMZAY=", + "dev": true, + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "global-modules": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/global-modules/download/global-modules-1.0.0.tgz", + "integrity": "sha1-bXcPDrUjrHgWTXK15xqIdyZcw+o=", + "dev": true, + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://r.cnpmjs.org/globals/download/globals-11.12.0.tgz", + "integrity": "sha1-q4eVM4hooLq9hSV1gBjCp+uVxC4=", + "dev": true + }, + "globby": { + "version": "11.0.1", + "resolved": "https://registry.npm.taobao.org/globby/download/globby-11.0.1.tgz", + "integrity": "sha1-mivxB6Bo8//qvEmtcCx57ejP01c=", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "globjoin": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=", + "dev": true + }, + "globule": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", + "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=", + "dev": true, + "requires": { + "glob": "~3.1.21", + "lodash": "~1.0.1", + "minimatch": "~0.2.11" + }, + "dependencies": { + "glob": { + "version": "3.1.21", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", + "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", "dev": true, - "optional": true, "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" + "graceful-fs": "~1.2.0", + "inherits": "1", + "minimatch": "~0.2.11" } }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } + "graceful-fs": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", + "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=", + "dev": true }, - "npm-bundled": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true + "inherits": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", + "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", + "dev": true }, - "npm-packlist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } + "lodash": { + "version": "1.0.2", + "resolved": "http://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz", + "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=", + "dev": true }, - "npmlog": { - "version": "4.1.2", - "bundled": true, + "minimatch": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", + "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", "dev": true, - "optional": true, "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "lru-cache": "2", + "sigmund": "~1.0.0" } + } + } + }, + "glogg": { + "version": "1.0.2", + "resolved": "https://r.cnpmjs.org/glogg/download/glogg-1.0.2.tgz", + "integrity": "sha1-LX3XAr7aIus7/634gGltpthGMT8=", + "dev": true, + "requires": { + "sparkles": "^1.0.0" + } + }, + "gonzales-pe": { + "version": "4.3.0", + "resolved": "https://r.cnpmjs.org/gonzales-pe/download/gonzales-pe-4.3.0.tgz", + "integrity": "sha1-/p3sXzxVfurQn/hoxlgmvlTQZ7M=", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", + "dev": true, + "requires": { + "delegate": "^3.1.2" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "http://r.cnpmjs.org/graceful-fs/download/graceful-fs-4.2.4.tgz", + "integrity": "sha1-Ila94U02MpWMRl68ltxGfKB6Kfs=", + "dev": true + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true + }, + "gud": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/gud/download/gud-1.0.0.tgz", + "integrity": "sha1-pIlYGxfmpwvsqavjrlfeekmYUsA=", + "dev": true + }, + "gulp": { + "version": "3.9.1", + "resolved": "http://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz", + "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=", + "dev": true, + "requires": { + "archy": "^1.0.0", + "chalk": "^1.0.0", + "deprecated": "^0.0.1", + "gulp-util": "^3.0.0", + "interpret": "^1.0.0", + "liftoff": "^2.1.0", + "minimist": "^1.1.0", + "orchestrator": "^0.3.0", + "pretty-hrtime": "^1.0.0", + "semver": "^4.1.0", + "tildify": "^1.0.0", + "v8flags": "^2.0.2", + "vinyl-fs": "^0.3.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true }, - "once": { - "version": "1.4.0", - "bundled": true, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, - "optional": true, "requires": { - "wrappy": "1" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true + "semver": { + "version": "4.3.6", + "resolved": "http://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", + "dev": true }, - "osenv": { - "version": "0.1.5", - "bundled": true, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, - "optional": true, "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" + "ansi-regex": "^2.0.0" } }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { + "supports-color": { "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "gulp-babel": { + "version": "8.0.0", + "resolved": "https://r.cnpmjs.org/gulp-babel/download/gulp-babel-8.0.0.tgz", + "integrity": "sha1-4NqW9PLsSojdOjAw9HbjirISbYc=", + "dev": true, + "requires": { + "plugin-error": "^1.0.1", + "replace-ext": "^1.0.0", + "through2": "^2.0.0", + "vinyl-sourcemaps-apply": "^0.2.0" + } + }, + "gulp-util": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", + "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", + "dev": true, + "requires": { + "array-differ": "^1.0.0", + "array-uniq": "^1.0.2", + "beeper": "^1.0.0", + "chalk": "^1.0.0", + "dateformat": "^2.0.0", + "fancy-log": "^1.1.0", + "gulplog": "^1.0.0", + "has-gulplog": "^0.1.0", + "lodash._reescape": "^3.0.0", + "lodash._reevaluate": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.template": "^3.0.0", + "minimist": "^1.1.0", + "multipipe": "^0.1.2", + "object-assign": "^3.0.0", + "replace-ext": "0.0.1", + "through2": "^2.0.0", + "vinyl": "^0.5.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true }, - "rc": { - "version": "1.2.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, - "optional": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, - "rimraf": { - "version": "2.6.3", - "bundled": true, + "lodash.escape": { + "version": "3.2.0", + "resolved": "https://r.cnpmjs.org/lodash.escape/download/lodash.escape-3.2.0.tgz", + "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", "dev": true, - "optional": true, "requires": { - "glob": "^7.1.3" + "lodash._root": "^3.0.0" } }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, + "lodash.template": { + "version": "3.6.2", + "resolved": "http://r.cnpmjs.org/lodash.template/download/lodash.template-3.6.2.tgz", + "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", "dev": true, - "optional": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "lodash._basecopy": "^3.0.0", + "lodash._basetostring": "^3.0.0", + "lodash._basevalues": "^3.0.0", + "lodash._isiterateecall": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.escape": "^3.0.0", + "lodash.keys": "^3.0.0", + "lodash.restparam": "^3.0.0", + "lodash.templatesettings": "^3.0.0" } }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, + "lodash.templatesettings": { + "version": "3.1.1", + "resolved": "http://r.cnpmjs.org/lodash.templatesettings/download/lodash.templatesettings-3.1.1.tgz", + "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", "dev": true, - "optional": true, "requires": { - "safe-buffer": "~5.1.0" + "lodash._reinterpolate": "^3.0.0", + "lodash.escape": "^3.0.0" } }, + "object-assign": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", + "dev": true + }, + "replace-ext": { + "version": "0.0.1", + "resolved": "https://r.cnpmjs.org/replace-ext/download/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", + "dev": true + }, "strip-ansi": { "version": "3.0.1", - "bundled": true, + "resolved": "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, - "optional": true, "requires": { "ansi-regex": "^2.0.0" } }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - }, - "dependencies": { - "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "dev": true } } }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "function.prototype.name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.0.tgz", - "integrity": "sha512-Bs0VRrTz4ghD8pTmbJQD1mZ8A/mN0ur/jGz+A6FBxPDUPkm1tNfF6bhTYPA7i7aF4lZJVr+OXTNNrnnIl58Wfg==", + "gulplog": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", + "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", "dev": true, "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "is-callable": "^1.1.3" + "glogg": "^1.0.0" } }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "functions-have-names": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.0.tgz", - "integrity": "sha512-zKXyzksTeaCSw5wIX79iCA40YAa6CJMJgNg9wdkU/ERBrIdPSimPICYiLp65lRbSBqtiHql/HZfS2DyI/AH6tQ==", + "handle-thing": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/handle-thing/download/handle-thing-2.0.1.tgz", + "integrity": "sha1-hX95zjWVgMNA1DCBzGSJcNC7I04=", "dev": true }, - "gather-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gather-stream/-/gather-stream-1.0.0.tgz", - "integrity": "sha1-szmUr0V6gRVwDUEPMXczy+egkEs=", + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", "dev": true }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/har-validator/download/har-validator-5.1.5.tgz?cache=0&sync_timestamp=1596084327526&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhar-validator%2Fdownload%2Fhar-validator-5.1.5.tgz", + "integrity": "sha1-HwgDufjLIMD6E4It8ezds2veHv0=", "dev": true, "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" + "ajv": "^6.12.3", + "har-schema": "^2.0.0" } }, - "gaze": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz", - "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=", - "dev": true, + "has": { + "version": "1.0.3", + "resolved": "http://r.cnpmjs.org/has/download/has-1.0.3.tgz", + "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=", "requires": { - "globule": "~0.1.0" + "function-bind": "^1.1.1" } }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + } + } }, - "get-own-enumerable-property-symbols": { + "has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz", - "integrity": "sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg==", + "resolved": "http://r.cnpmjs.org/has-flag/download/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true + "has-gulplog": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", + "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", + "dev": true, + "requires": { + "sparkles": "^1.0.0" + } }, - "get-stream": { - "version": "3.0.0", - "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true + "has-symbols": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/has-symbols/download/has-symbols-1.0.1.tgz", + "integrity": "sha1-n1IUdYpEGWxAbZvXbOv4HsLdMeg=" }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", "dev": true }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "requires": { - "assert-plus": "^1.0.0" + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } } }, - "gh-pages": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-2.0.1.tgz", - "integrity": "sha512-uFlk3bukljeiWKQ2XvPfjcSi/ou7IfoDf2p+Fj672saLAr8bnOdFVqI/JSgrSgInKpCg5BksxEwGUl++dbg8Dg==", + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "requires": { - "async": "^2.6.1", - "commander": "^2.18.0", - "email-addresses": "^3.0.1", - "filenamify-url": "^1.0.0", - "fs-extra": "^7.0.0", - "globby": "^6.1.0", - "graceful-fs": "^4.1.11", - "rimraf": "^2.6.2" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { - "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", + "is-buffer": { + "version": "1.1.6", + "resolved": "http://r.cnpmjs.org/is-buffer/download/is-buffer-1.1.6.tgz", + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", "dev": true }, - "globby": { - "version": "6.1.0", - "resolved": "http://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "is-number": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, - "pify": { - "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } } } }, - "github-markdown-css": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/github-markdown-css/-/github-markdown-css-3.0.1.tgz", - "integrity": "sha512-9G5CIPsHoyk5ObDsb/H4KTi23J8KE1oDd4KYU51qwqeM+lKWAiO7abpSgCkyWswgmSKBiuE7/4f8xUz7f2qAiQ==" - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "hash-base": { + "version": "3.1.0", + "resolved": "http://r.cnpmjs.org/hash-base/download/hash-base-3.1.0.tgz", + "integrity": "sha1-VcOB2eBuHSmXqIO0o/3f5/DTrzM=", "dev": true, "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" }, "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "readable-stream": { + "version": "3.6.0", + "resolved": "http://r.cnpmjs.org/readable-stream/download/readable-stream-3.6.0.tgz", + "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=", "dev": true, "requires": { - "is-extglob": "^1.0.0" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "http://r.cnpmjs.org/safe-buffer/download/safe-buffer-5.2.1.tgz", + "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=", + "dev": true } } }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "hash.js": { + "version": "1.1.7", + "resolved": "http://r.cnpmjs.org/hash.js/download/hash.js-1.1.7.tgz", + "integrity": "sha1-C6vKU46NTuSg+JiNaIZlN6ADz0I=", "dev": true, "requires": { - "is-glob": "^2.0.0" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - } + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, - "glob-stream": { - "version": "3.1.18", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz", - "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=", + "hast-to-hyperscript": { + "version": "9.0.0", + "resolved": "https://registry.npm.taobao.org/hast-to-hyperscript/download/hast-to-hyperscript-9.0.0.tgz?cache=0&sync_timestamp=1591606620266&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhast-to-hyperscript%2Fdownload%2Fhast-to-hyperscript-9.0.0.tgz", + "integrity": "sha1-do+1V3Zf4odJFpyIUFZBc0LXHoM=", "dev": true, "requires": { - "glob": "^4.3.1", - "glob2base": "^0.0.12", - "minimatch": "^2.0.1", - "ordered-read-streams": "^0.1.0", - "through2": "^0.6.1", - "unique-stream": "^1.0.0" + "@types/unist": "^2.0.3", + "comma-separated-tokens": "^1.0.0", + "property-information": "^5.3.0", + "space-separated-tokens": "^1.0.0", + "style-to-object": "^0.3.0", + "unist-util-is": "^4.0.0", + "web-namespaces": "^1.0.0" }, "dependencies": { - "glob": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", - "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^2.0.1", - "once": "^1.3.0" - } - }, - "minimatch": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", - "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", - "dev": true, - "requires": { - "brace-expansion": "^1.0.0" - } - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } + "unist-util-is": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/unist-util-is/download/unist-util-is-4.0.2.tgz", + "integrity": "sha1-x9E0EYiqnOWzz/U4lY3piV8Upd4=", + "dev": true } } }, - "glob-to-regexp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", - "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", - "dev": true - }, - "glob-watcher": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz", - "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=", - "dev": true, - "requires": { - "gaze": "^0.5.1" - } - }, - "glob2base": { - "version": "0.0.12", - "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz", - "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=", + "hast-util-from-parse5": { + "version": "6.0.0", + "resolved": "https://registry.npm.taobao.org/hast-util-from-parse5/download/hast-util-from-parse5-6.0.0.tgz?cache=0&sync_timestamp=1590078074130&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhast-util-from-parse5%2Fdownload%2Fhast-util-from-parse5-6.0.0.tgz", + "integrity": "sha1-s4eTyB4amfX9WSpKiPwnMdzNDzA=", "dev": true, "requires": { - "find-index": "^0.1.1" + "@types/parse5": "^5.0.0", + "ccount": "^1.0.0", + "hastscript": "^5.0.0", + "property-information": "^5.0.0", + "vfile": "^4.0.0", + "web-namespaces": "^1.0.0" } }, - "global": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", - "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", - "dev": true, - "requires": { - "min-document": "^2.19.0", - "process": "~0.5.1" - } + "hast-util-parse-selector": { + "version": "2.2.4", + "resolved": "http://r.cnpmjs.org/hast-util-parse-selector/download/hast-util-parse-selector-2.2.4.tgz", + "integrity": "sha1-YMmdC1GeEqtO0y5Y8VDsP2HtGXQ=", + "dev": true }, - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "hast-util-raw": { + "version": "6.0.0", + "resolved": "https://registry.npm.taobao.org/hast-util-raw/download/hast-util-raw-6.0.0.tgz?cache=0&sync_timestamp=1594029426995&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhast-util-raw%2Fdownload%2Fhast-util-raw-6.0.0.tgz", + "integrity": "sha1-SaOPUQfUg/g6E5cJ8vcF8i5+fTI=", "dev": true, "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" + "@types/hast": "^2.0.0", + "hast-util-from-parse5": "^6.0.0", + "hast-util-to-parse5": "^6.0.0", + "html-void-elements": "^1.0.0", + "parse5": "^6.0.0", + "unist-util-position": "^3.0.0", + "vfile": "^4.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" } }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "hast-util-to-parse5": { + "version": "6.0.0", + "resolved": "https://registry.npm.taobao.org/hast-util-to-parse5/download/hast-util-to-parse5-6.0.0.tgz?cache=0&sync_timestamp=1594105277710&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhast-util-to-parse5%2Fdownload%2Fhast-util-to-parse5-6.0.0.tgz", + "integrity": "sha1-HsRGULYx1ylSBmzqmxRF32mfhHk=", "dev": true, "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" + "hast-to-hyperscript": "^9.0.0", + "property-information": "^5.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" } }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "hast-util-to-string": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/hast-util-to-string/download/hast-util-to-string-1.0.4.tgz?cache=0&sync_timestamp=1593686920473&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhast-util-to-string%2Fdownload%2Fhast-util-to-string-1.0.4.tgz", + "integrity": "sha1-myTBFIZr25R4kn1+nDakhaxyg3g=", "dev": true }, - "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "hastscript": { + "version": "5.1.2", + "resolved": "http://r.cnpmjs.org/hastscript/download/hastscript-5.1.2.tgz", + "integrity": "sha1-veLC5W0Exi3SToxd8ojQUKNV+4o=", "dev": true, "requires": { - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0" } }, - "globjoin": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", - "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=", + "he": { + "version": "1.2.0", + "resolved": "http://r.cnpmjs.org/he/download/he-1.2.0.tgz", + "integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8=", "dev": true }, - "globule": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", - "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=", + "hex-color-regex": { + "version": "1.1.0", + "resolved": "http://r.cnpmjs.org/hex-color-regex/download/hex-color-regex-1.1.0.tgz", + "integrity": "sha1-TAb8y0YC/iYCs8k9+C1+fb8aio4=", + "dev": true + }, + "history": { + "version": "4.10.1", + "resolved": "https://r.cnpmjs.org/history/download/history-4.10.1.tgz", + "integrity": "sha1-MzcaZeOoOyZ0NOKz87G0xYqtTPM=", "dev": true, "requires": { - "glob": "~3.1.21", - "lodash": "~1.0.1", - "minimatch": "~0.2.11" - }, - "dependencies": { - "glob": { - "version": "3.1.21", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", - "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", - "dev": true, - "requires": { - "graceful-fs": "~1.2.0", - "inherits": "1", - "minimatch": "~0.2.11" - } - }, - "graceful-fs": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", - "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=", - "dev": true - }, - "inherits": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", - "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", - "dev": true - }, - "lodash": { - "version": "1.0.2", - "resolved": "http://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz", - "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=", - "dev": true - }, - "minimatch": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", - "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", - "dev": true, - "requires": { - "lru-cache": "2", - "sigmund": "~1.0.0" - } - } + "@babel/runtime": "^7.1.2", + "loose-envify": "^1.2.0", + "resolve-pathname": "^3.0.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0", + "value-equal": "^1.0.1" } }, - "glogg": { + "hmac-drbg": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.1.tgz", - "integrity": "sha512-ynYqXLoluBKf9XGR1gA59yEJisIL7YHEH4xr3ZziHB5/yl4qWfaK8Js9jGe6gBGCSCKVqiyO30WnRZADvemUNw==", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "requires": { - "sparkles": "^1.0.0" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, - "gonzales-pe": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.2.4.tgz", - "integrity": "sha512-v0Ts/8IsSbh9n1OJRnSfa7Nlxi4AkXIsWB6vPept8FDbL4bXn3FNuxjYtO/nmBGu7GDkL9MFeGebeSu6l55EPQ==", + "hoist-non-react-statics": { + "version": "2.5.5", + "resolved": "http://r.cnpmjs.org/hoist-non-react-statics/download/hoist-non-react-statics-2.5.5.tgz", + "integrity": "sha1-xZA89AnA39kI84jmGdhrnBF0y0c=", + "dev": true + }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://r.cnpmjs.org/homedir-polyfill/download/homedir-polyfill-1.0.3.tgz", + "integrity": "sha1-dDKYzvTlrz4ZQWH7rcwhUdOgWOg=", "dev": true, "requires": { - "minimist": "1.1.x" - }, - "dependencies": { - "minimist": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.1.3.tgz", - "integrity": "sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag=", - "dev": true - } + "parse-passwd": "^1.0.0" } }, - "good-listener": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", - "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", - "requires": { - "delegate": "^3.1.2" - } + "hosted-git-info": { + "version": "2.8.8", + "resolved": "http://r.cnpmjs.org/hosted-git-info/download/hosted-git-info-2.8.8.tgz", + "integrity": "sha1-dTm9S8Hg4KiVgVouAmJCCxKFhIg=", + "dev": true }, - "graceful-fs": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz", - "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=", + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", "dev": true, "requires": { - "natives": "^1.1.0" + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" } }, - "growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", "dev": true }, - "gud": { + "hsla-regex": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz", - "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==" + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", + "dev": true }, - "gulp": { - "version": "3.9.1", - "resolved": "http://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz", - "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=", + "html-comment-regex": { + "version": "1.1.2", + "resolved": "http://r.cnpmjs.org/html-comment-regex/download/html-comment-regex-1.1.2.tgz", + "integrity": "sha1-l9RoiutcgYhqNk+qDK0d2hTUM6c=", + "dev": true + }, + "html-element-map": { + "version": "1.2.0", + "resolved": "https://r.cnpmjs.org/html-element-map/download/html-element-map-1.2.0.tgz", + "integrity": "sha1-37sJ7+iCgGr2PZkM9ts3mT8JnyI=", "dev": true, "requires": { - "archy": "^1.0.0", - "chalk": "^1.0.0", - "deprecated": "^0.0.1", - "gulp-util": "^3.0.0", - "interpret": "^1.0.0", - "liftoff": "^2.1.0", - "minimist": "^1.1.0", - "orchestrator": "^0.3.0", - "pretty-hrtime": "^1.0.0", - "semver": "^4.1.0", - "tildify": "^1.0.0", - "v8flags": "^2.0.2", - "vinyl-fs": "^0.3.0" + "array-filter": "^1.0.0" + } + }, + "html-encoding-sniffer": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/html-encoding-sniffer/download/html-encoding-sniffer-1.0.2.tgz", + "integrity": "sha1-5w2EuU2lOqN14R/jo1G+ZkLKRvg=", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.1" + } + }, + "html-entities": { + "version": "1.3.1", + "resolved": "http://r.cnpmjs.org/html-entities/download/html-entities-1.3.1.tgz", + "integrity": "sha1-+5oaS1sUxdq6gtPjTGrk/nAaDkQ=", + "dev": true + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "http://r.cnpmjs.org/html-escaper/download/html-escaper-2.0.2.tgz", + "integrity": "sha1-39YAJ9o2o238viNiYsAKWCJoFFM=", + "dev": true + }, + "html-minifier": { + "version": "3.5.21", + "resolved": "http://r.cnpmjs.org/html-minifier/download/html-minifier-3.5.21.tgz", + "integrity": "sha1-0AQOBUcw41TbAIRjWTGUAVIS0gw=", + "dev": true, + "requires": { + "camel-case": "3.0.x", + "clean-css": "4.2.x", + "commander": "2.17.x", + "he": "1.2.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.4.x" }, "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "commander": { + "version": "2.17.1", + "resolved": "http://r.cnpmjs.org/commander/download/commander-2.17.1.tgz", + "integrity": "sha1-vXerfebelCBc6sxy8XFtKfIKd78=", "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + } + } + }, + "html-tags": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz", + "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=", + "dev": true + }, + "html-void-elements": { + "version": "1.0.5", + "resolved": "https://r.cnpmjs.org/html-void-elements/download/html-void-elements-1.0.5.tgz", + "integrity": "sha1-zpFZSU6G2V5FeVsWbCAhws/KRIM=", + "dev": true + }, + "html-webpack-plugin": { + "version": "3.2.0", + "resolved": "http://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz", + "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=", + "dev": true, + "requires": { + "html-minifier": "^3.2.3", + "loader-utils": "^0.2.16", + "lodash": "^4.17.3", + "pretty-error": "^2.0.2", + "tapable": "^1.0.0", + "toposort": "^1.0.0", + "util.promisify": "1.0.0" + }, + "dependencies": { + "big.js": { + "version": "3.2.0", + "resolved": "http://r.cnpmjs.org/big.js/download/big.js-3.2.0.tgz", + "integrity": "sha1-pfwpi4G54Nyi5FiCR4S2XFK6WI4=", "dev": true }, - "semver": { - "version": "4.3.6", - "resolved": "http://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", + "emojis-list": { + "version": "2.1.0", + "resolved": "http://r.cnpmjs.org/emojis-list/download/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", "dev": true }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "json5": { + "version": "0.5.1", + "resolved": "http://r.cnpmjs.org/json5/download/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", "dev": true + }, + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" + } + }, + "util.promisify": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/util.promisify/download/util.promisify-1.0.0.tgz", + "integrity": "sha1-RA9xZaRZyaFtwUXrjnLzVocJcDA=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } } } }, - "gulp-babel": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/gulp-babel/-/gulp-babel-8.0.0.tgz", - "integrity": "sha512-oomaIqDXxFkg7lbpBou/gnUkX51/Y/M2ZfSjL2hdqXTAlSWZcgZtd2o0cOH0r/eE8LWD0+Q/PsLsr2DKOoqToQ==", + "htmlparser2": { + "version": "3.10.1", + "resolved": "http://r.cnpmjs.org/htmlparser2/download/htmlparser2-3.10.1.tgz", + "integrity": "sha1-vWedw/WYl7ajS7EHSchVu1OpOS8=", "dev": true, "requires": { - "plugin-error": "^1.0.1", - "replace-ext": "^1.0.0", - "through2": "^2.0.0", - "vinyl-sourcemaps-apply": "^0.2.0" + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" }, "dependencies": { - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "entities": { + "version": "1.1.2", + "resolved": "https://r.cnpmjs.org/entities/download/entities-1.1.2.tgz", + "integrity": "sha1-vfpzUplmTfr9NFKe1PhSKidf6lY=", "dev": true + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "http://r.cnpmjs.org/readable-stream/download/readable-stream-3.6.0.tgz", + "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } } } }, - "gulp-util": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", - "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", + "http-call": { + "version": "5.3.0", + "resolved": "https://r.cnpmjs.org/http-call/download/http-call-5.3.0.tgz", + "integrity": "sha1-Te2BWxP0I94XbrCULWnEOyWxSNs=", "dev": true, "requires": { - "array-differ": "^1.0.0", - "array-uniq": "^1.0.2", - "beeper": "^1.0.0", - "chalk": "^1.0.0", - "dateformat": "^2.0.0", - "fancy-log": "^1.1.0", - "gulplog": "^1.0.0", - "has-gulplog": "^0.1.0", - "lodash._reescape": "^3.0.0", - "lodash._reevaluate": "^3.0.0", - "lodash._reinterpolate": "^3.0.0", - "lodash.template": "^3.0.0", - "minimist": "^1.1.0", - "multipipe": "^0.1.2", - "object-assign": "^3.0.0", - "replace-ext": "0.0.1", - "through2": "^2.0.0", - "vinyl": "^0.5.0" + "content-type": "^1.0.4", + "debug": "^4.1.1", + "is-retry-allowed": "^1.1.0", + "is-stream": "^2.0.0", + "parse-json": "^4.0.0", + "tunnel-agent": "^0.6.0" }, "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "debug": { + "version": "4.1.1", + "resolved": "http://r.cnpmjs.org/debug/download/debug-4.1.1.tgz", + "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=", "dev": true, "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "ms": "^2.1.1" } }, - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "object-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", - "dev": true - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "ms": { + "version": "2.1.2", + "resolved": "http://r.cnpmjs.org/ms/download/ms-2.1.2.tgz", + "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", "dev": true } } }, - "gulplog": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", - "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", - "dev": true, - "requires": { - "glogg": "^1.0.0" - } - }, - "handle-thing": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", - "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==", + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", "dev": true }, - "handlebars": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz", - "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==", + "http-errors": { + "version": "1.7.2", + "resolved": "http://r.cnpmjs.org/http-errors/download/http-errors-1.7.2.tgz", + "integrity": "sha1-T1ApzxMjnzEDblsuVSkrz7zIXI8=", "dev": true, "requires": { - "neo-async": "^2.6.0", - "optimist": "^0.6.1", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4" + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "http://r.cnpmjs.org/inherits/download/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } } }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz", - "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==", + "http-proxy": { + "version": "1.18.1", + "resolved": "http://r.cnpmjs.org/http-proxy/download/http-proxy-1.18.1.tgz", + "integrity": "sha1-QBVB8FNIhLv5UmAzTnL4juOXZUk=", "dev": true, "requires": { - "ajv": "^5.3.0", - "har-schema": "^2.0.0" + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" } }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "http-proxy-middleware": { + "version": "0.19.1", + "resolved": "http://r.cnpmjs.org/http-proxy-middleware/download/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha1-GDx9xKoUeRUDBkmMIQza+WCApDo=", "dev": true, "requires": { - "function-bind": "^1.1.1" + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/arr-diff/download/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "http://r.cnpmjs.org/array-unique/download/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "http://r.cnpmjs.org/braces/download/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "debug": { + "version": "2.6.9", + "resolved": "http://r.cnpmjs.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "http://r.cnpmjs.org/expand-brackets/download/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "http://r.cnpmjs.org/extglob/download/extglob-2.0.4.tgz", + "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/fill-range/download/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "http://r.cnpmjs.org/is-buffer/download/is-buffer-1.1.6.tgz", + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", + "dev": true + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-6.0.3.tgz", + "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "http://r.cnpmjs.org/micromatch/download/micromatch-3.1.10.tgz", + "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } } }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" } }, - "has-flag": { + "https-browserify": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", "dev": true }, - "has-gulplog": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", - "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", + "https-proxy-agent": { + "version": "2.2.4", + "resolved": "https://r.cnpmjs.org/https-proxy-agent/download/https-proxy-agent-2.2.4.tgz", + "integrity": "sha1-TuenN6vZJniik9mzShr00NCMeHs=", "dev": true, "requires": { - "sparkles": "^1.0.0" + "agent-base": "^4.3.0", + "debug": "^3.1.0" } }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", - "dev": true - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "humanize-url": { + "version": "1.0.1", + "resolved": "http://registry.npmjs.org/humanize-url/-/humanize-url-1.0.1.tgz", + "integrity": "sha1-9KuZ4NKIF0yk4eUEB8VfuuRk7/8=", "dev": true, "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" + "normalize-url": "^1.0.0", + "strip-url-auth": "^1.0.0" } }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "husky": { + "version": "0.14.3", + "resolved": "https://r.cnpmjs.org/husky/download/husky-0.14.3.tgz", + "integrity": "sha1-xp7XTi0neXaaF7qDmbVM4LY8EsM=", "dev": true, "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" + "is-ci": "^1.0.10", + "normalize-path": "^1.0.0", + "strip-indent": "^2.0.0" }, "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } + "normalize-path": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/normalize-path/download/normalize-path-1.0.0.tgz", + "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=", + "dev": true } } }, - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } + "hyperlinker": { + "version": "1.0.0", + "resolved": "https://r.cnpmjs.org/hyperlinker/download/hyperlinker-1.0.0.tgz", + "integrity": "sha1-I9yeOKIGsgjuSbwtbI70cCffDA4=", + "dev": true }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://r.cnpmjs.org/iconv-lite/download/iconv-lite-0.4.24.tgz", + "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=", "dev": true, "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + "safer-buffer": ">= 2.1.2 < 3" } }, - "hast-to-hyperscript": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-7.0.4.tgz", - "integrity": "sha512-vmwriQ2H0RPS9ho4Kkbf3n3lY436QKLq6VaGA1pzBh36hBi3tm1DO9bR+kaJIbpT10UqaANDkMjxvjVfr+cnOA==", + "icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", + "dev": true + }, + "icss-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", + "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", "dev": true, "requires": { - "comma-separated-tokens": "^1.0.0", - "property-information": "^5.3.0", - "space-separated-tokens": "^1.0.0", - "style-to-object": "^0.2.1", - "unist-util-is": "^3.0.0", - "web-namespaces": "^1.1.2" - }, - "dependencies": { - "style-to-object": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.2.3.tgz", - "integrity": "sha512-1d/k4EY2N7jVLOqf2j04dTc37TPOv/hHxZmvpg8Pdh8UYydxeu/C1W1U4vD8alzf5V2Gt7rLsmkr4dxAlDm9ng==", - "dev": true, - "requires": { - "inline-style-parser": "0.1.1" - } - }, - "unist-util-is": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", - "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", - "dev": true - } + "postcss": "^6.0.1" } }, - "hast-util-from-parse5": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-5.0.2.tgz", - "integrity": "sha512-YXFjoRS7ES7PEoLx6uihtSfKTO1s3z/tzGiV5cVpsUiihduogFXubNRCzTIW3yOOGO1nws9CxPq4MbwD39Uo+w==", + "ieee754": { + "version": "1.1.13", + "resolved": "http://r.cnpmjs.org/ieee754/download/ieee754-1.1.13.tgz", + "integrity": "sha1-7BaFWOlaoYH9h9N/VcMrvLZwi4Q=", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npm.taobao.org/ignore/download/ignore-5.1.8.tgz?cache=0&sync_timestamp=1590809380232&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fignore%2Fdownload%2Fignore-5.1.8.tgz", + "integrity": "sha1-8VCotQo0KJsz4i9YiavU2AFvDlc=", + "dev": true + }, + "ignore-walk": { + "version": "3.0.3", + "resolved": "https://r.cnpmjs.org/ignore-walk/download/ignore-walk-3.0.3.tgz", + "integrity": "sha1-AX4kRxhL/q3nwjjkrv3R6PlbHjc=", "dev": true, "requires": { - "ccount": "^1.0.3", - "hastscript": "^5.0.0", - "property-information": "^5.0.0", - "web-namespaces": "^1.1.2", - "xtend": "^4.0.1" + "minimatch": "^3.0.4" } }, - "hast-util-parse-selector": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.3.tgz", - "integrity": "sha512-nxbeqjQNxsvo/uYYAw9kij6td05YVUlf1qti09rVfbWSLT5H6wo3c+USIwX6nzXWk5kFZzXnEqO82856r0aM2Q==" - }, - "hast-util-raw": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-5.0.1.tgz", - "integrity": "sha512-iHo7G6BjRc/GU1Yun5CIEXjil0wVnIbz11C6k0JdDichSDMtYi2+NNtk6YN7EOP0JfPstX30d3pRLfaJv5CkdA==", + "import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", "dev": true, "requires": { - "hast-util-from-parse5": "^5.0.0", - "hast-util-to-parse5": "^5.0.0", - "html-void-elements": "^1.0.1", - "parse5": "^5.0.0", - "unist-util-position": "^3.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.1", - "zwitch": "^1.0.0" - }, - "dependencies": { - "parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", - "dev": true - } + "import-from": "^2.1.0" } }, - "hast-util-to-parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-5.1.1.tgz", - "integrity": "sha512-ivCeAd5FCXr7bapJIVsWMnx/EmbjkkW2TU2hd1prq+jGwiaUoK+FcpjyPNwsC5ogzCwWO669tOqIovGeLc/ntg==", + "import-fresh": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/import-fresh/download/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", "dev": true, "requires": { - "hast-to-hyperscript": "^7.0.0", - "property-information": "^5.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.1", - "zwitch": "^1.0.0" + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" } }, - "hast-util-to-string": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-1.0.2.tgz", - "integrity": "sha512-fQNr0n5KJmZW1TmBfXbc4DO0ucZmseUw3T6K4PDsUUTMtTGGLZMUYRB8mOKgPgtw7rtICdxxpRQZmWwo8KxlOA==" - }, - "hastscript": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-5.1.1.tgz", - "integrity": "sha512-xHo1Hkcqd0LlWNuDL3/BxwhgAGp3d7uEvCMgCTrBY+zsOooPPH+8KAvW8PCgl+GB8H3H44nfSaF0A4BQ+4xlYg==", + "import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "dev": true, "requires": { - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0" + "resolve-from": "^3.0.0" } }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "hex-color-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", + "import-lazy": { + "version": "3.1.0", + "resolved": "https://r.cnpmjs.org/import-lazy/download/import-lazy-3.1.0.tgz", + "integrity": "sha1-iRJ5ICyKIoD9vWZ029jaGh38Z8w=", "dev": true }, - "history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "requires": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "import-local": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/import-local/download/import-local-2.0.0.tgz", + "integrity": "sha1-VQcL44pZk88Y72236WH1vuXFoJ0=", "dev": true, "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" } }, - "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==" + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true }, - "homedir-polyfill": { + "in-publish": { + "version": "2.0.1", + "resolved": "https://r.cnpmjs.org/in-publish/download/in-publish-2.0.1.tgz", + "integrity": "sha1-lIsaU1yAMFYc6lIvc/ePS+NX4Aw=", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/indent-string/download/indent-string-4.0.0.tgz", + "integrity": "sha1-Yk+PRJfWGbLZdoUx1Y9BIoVNclE=", + "dev": true + }, + "indexes-of": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", - "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", - "dev": true, - "requires": { - "parse-passwd": "^1.0.0" - } + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true }, - "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "infer-owner": { + "version": "1.0.4", + "resolved": "https://r.cnpmjs.org/infer-owner/download/infer-owner-1.0.4.tgz", + "integrity": "sha1-xM78qo5RBRwqQLos6KPScpWvlGc=", "dev": true }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } + "once": "^1.3.0", + "wrappy": "1" } }, - "hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", + "inherits": { + "version": "2.0.4", + "resolved": "http://r.cnpmjs.org/inherits/download/inherits-2.0.4.tgz", + "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=", "dev": true }, - "hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", + "ini": { + "version": "1.3.5", + "resolved": "http://r.cnpmjs.org/ini/download/ini-1.3.5.tgz", + "integrity": "sha1-7uJfVtscnsYIXgwid4CD9Zar+Sc=", "dev": true }, - "html-comment-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", - "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", + "inline-style-parser": { + "version": "0.1.1", + "resolved": "https://r.cnpmjs.org/inline-style-parser/download/inline-style-parser-0.1.1.tgz", + "integrity": "sha1-7Io7QpJ06cCh8cT/qUU6f+9yzqE=", "dev": true }, - "html-element-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/html-element-map/-/html-element-map-1.0.1.tgz", - "integrity": "sha512-BZSfdEm6n706/lBfXKWa4frZRZcT5k1cOusw95ijZsHlI+GdgY0v95h6IzO3iIDf2ROwq570YTwqNPqHcNMozw==", + "internal-ip": { + "version": "4.3.0", + "resolved": "http://r.cnpmjs.org/internal-ip/download/internal-ip-4.3.0.tgz", + "integrity": "sha1-hFRSuq2dLKO2nGNaE3rLmg2tCQc=", "dev": true, "requires": { - "array-filter": "^1.0.0" + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" } }, - "html-encoding-sniffer": { + "internal-slot": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", - "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "resolved": "https://registry.npm.taobao.org/internal-slot/download/internal-slot-1.0.2.tgz", + "integrity": "sha1-nC6fs82OXkJWxvRf4xAGf8+jeKM=", "dev": true, "requires": { - "whatwg-encoding": "^1.0.1" + "es-abstract": "^1.17.0-next.1", + "has": "^1.0.3", + "side-channel": "^1.0.2" } }, - "html-entities": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", - "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", + "interpret": { + "version": "1.4.0", + "resolved": "https://r.cnpmjs.org/interpret/download/interpret-1.4.0.tgz", + "integrity": "sha1-Zlq4vE2iendKQFhOgS4+D6RbGh4=", "dev": true }, - "html-minifier": { - "version": "3.5.21", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", - "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", - "dev": true, + "invariant": { + "version": "2.2.4", + "resolved": "http://r.cnpmjs.org/invariant/download/invariant-2.2.4.tgz", + "integrity": "sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY=", "requires": { - "camel-case": "3.0.x", - "clean-css": "4.2.x", - "commander": "2.17.x", - "he": "1.2.x", - "param-case": "2.1.x", - "relateurl": "0.2.x", - "uglify-js": "3.4.x" + "loose-envify": "^1.0.0" } }, - "html-tags": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz", - "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=", + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", "dev": true }, - "html-void-elements": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.4.tgz", - "integrity": "sha512-yMk3naGPLrfvUV9TdDbuYXngh/TpHbA6TrOw3HL9kS8yhwx7i309BReNg7CbAJXGE+UMJ6je5OqJ7lC63o6YuQ==", + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", "dev": true }, - "html-webpack-plugin": { - "version": "3.2.0", - "resolved": "http://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz", - "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=", + "ipaddr.js": { + "version": "1.9.1", + "resolved": "http://r.cnpmjs.org/ipaddr.js/download/ipaddr.js-1.9.1.tgz", + "integrity": "sha1-v/OFQ+64mEglB5/zoqjmy9RngbM=", + "dev": true + }, + "is-absolute": { + "version": "1.0.0", + "resolved": "https://r.cnpmjs.org/is-absolute/download/is-absolute-1.0.0.tgz", + "integrity": "sha1-OV4a6EsR8mrReV5zwXN45IowFXY=", "dev": true, "requires": { - "html-minifier": "^3.2.3", - "loader-utils": "^0.2.16", - "lodash": "^4.17.3", - "pretty-error": "^2.0.2", - "tapable": "^1.0.0", - "toposort": "^1.0.0", - "util.promisify": "1.0.0" - }, - "dependencies": { - "loader-utils": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", - "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", - "dev": true, - "requires": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0", - "object-assign": "^4.0.1" - } - } + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" } }, - "htmlparser2": { - "version": "3.3.0", - "resolved": "http://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz", - "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", - "dev": true, - "requires": { - "domelementtype": "1", - "domhandler": "2.1", - "domutils": "1.1", - "readable-stream": "1.0" - }, - "dependencies": { - "domutils": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.1.6.tgz", - "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=", - "dev": true, - "requires": { - "domelementtype": "1" - } - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - } - } + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true }, - "http-call": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/http-call/-/http-call-5.3.0.tgz", - "integrity": "sha512-ahwimsC23ICE4kPl9xTBjKB4inbRaeLyZeRunC/1Jy/Z6X8tv22MEAjK+KBOMSVLaqXPTTmd8638waVIKLGx2w==", + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "content-type": "^1.0.4", - "debug": "^4.1.1", - "is-retry-allowed": "^1.1.0", - "is-stream": "^2.0.0", - "parse-json": "^4.0.0", - "tunnel-agent": "^0.6.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "kind-of": "^3.0.2" } }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "is-alphabetical": { + "version": "1.0.4", + "resolved": "http://r.cnpmjs.org/is-alphabetical/download/is-alphabetical-1.0.4.tgz", + "integrity": "sha1-nn1rlJFr4iFTdF0YTCmMv5hqaG0=", "dev": true }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "is-alphanumeric": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz", + "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=", + "dev": true + }, + "is-alphanumerical": { + "version": "1.0.4", + "resolved": "http://r.cnpmjs.org/is-alphanumerical/download/is-alphanumerical-1.0.4.tgz", + "integrity": "sha1-frmiQx+FX2se8aeOMm31FWlsTb8=", "dev": true, "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" } }, - "http-parser-js": { - "version": "0.4.10", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz", - "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=", + "is-arguments": { + "version": "1.0.4", + "resolved": "http://r.cnpmjs.org/is-arguments/download/is-arguments-1.0.4.tgz", + "integrity": "sha1-P6+WbHy6D/Q3+zH2JQCC/PBEjPM=" + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, - "http-proxy": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.0.tgz", - "integrity": "sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ==", + "is-binary-path": { + "version": "2.1.0", + "resolved": "http://r.cnpmjs.org/is-binary-path/download/is-binary-path-2.1.0.tgz", + "integrity": "sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk=", "dev": true, + "optional": true, "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" + "binary-extensions": "^2.0.0" } }, - "http-proxy-middleware": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", - "dev": true, - "requires": { - "http-proxy": "^1.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" - }, - "dependencies": { - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - } - } + "is-boolean-object": { + "version": "1.0.1", + "resolved": "https://r.cnpmjs.org/is-boolean-object/download/is-boolean-object-1.0.1.tgz", + "integrity": "sha1-EO3AkA3RJ2l6kvb5gHx2F9aKxI4=", + "dev": true }, - "http-signature": { + "is-buffer": { + "version": "2.0.4", + "resolved": "http://r.cnpmjs.org/is-buffer/download/is-buffer-2.0.4.tgz", + "integrity": "sha1-PlcvI8hBGlz9lVfISeNmXgspBiM=" + }, + "is-callable": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "resolved": "https://r.cnpmjs.org/is-callable/download/is-callable-1.2.0.tgz", + "integrity": "sha1-gzNlYLVKOONeOi33r9BFTWkUaLs=" + }, + "is-ci": { + "version": "1.2.1", + "resolved": "http://r.cnpmjs.org/is-ci/download/is-ci-1.2.1.tgz", + "integrity": "sha1-43ecjuF/zPQoSI9uKBGH8uYyhBw=", "dev": true, "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "ci-info": "^1.5.0" } }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", - "dev": true - }, - "https-proxy-agent": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", - "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", + "is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", "dev": true, "requires": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" } }, - "humanize-url": { - "version": "1.0.1", - "resolved": "http://registry.npmjs.org/humanize-url/-/humanize-url-1.0.1.tgz", - "integrity": "sha1-9KuZ4NKIF0yk4eUEB8VfuuRk7/8=", + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "normalize-url": "^1.0.0", - "strip-url-auth": "^1.0.0" + "kind-of": "^3.0.2" } }, - "husky": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/husky/-/husky-0.14.3.tgz", - "integrity": "sha512-e21wivqHpstpoiWA/Yi8eFti8E+sQDSS53cpJsPptPs295QTOQR0ZwnHo2TXy1XOpZFD9rPOd3NpmqTK6uMLJA==", + "is-date-object": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/is-date-object/download/is-date-object-1.0.2.tgz", + "integrity": "sha1-vac28s2P0G0yhE53Q7+nSUw7/X4=" + }, + "is-decimal": { + "version": "1.0.4", + "resolved": "http://r.cnpmjs.org/is-decimal/download/is-decimal-1.0.4.tgz", + "integrity": "sha1-ZaOllYocW2OnBuGzM9fNn2MNP6U=", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", "dev": true, "requires": { - "is-ci": "^1.0.10", - "normalize-path": "^1.0.0", - "strip-indent": "^2.0.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true + } } }, - "hyperlinker": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hyperlinker/-/hyperlinker-1.0.0.tgz", - "integrity": "sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==", + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", "dev": true }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } + "is-docker": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/is-docker/download/is-docker-2.1.1.tgz?cache=0&sync_timestamp=1596559351223&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-docker%2Fdownload%2Fis-docker-2.1.1.tgz", + "integrity": "sha1-QSWojkTkUNOE4JBH7eca3C0UQVY=", + "dev": true }, - "icss-replace-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", - "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", "dev": true }, - "icss-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", - "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", "dev": true, "requires": { - "postcss": "^6.0.1" + "is-primitive": "^2.0.0" } }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "dev": true }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true }, - "ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "is-finite": { + "version": "1.1.0", + "resolved": "https://r.cnpmjs.org/is-finite/download/is-finite-1.1.0.tgz", + "integrity": "sha1-kEE1x3+0LAZB1qobzbxNqo2ggvM=", "dev": true }, - "ignore-walk": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", - "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=", + "dev": true + }, + "is-generator-fn": { + "version": "2.1.0", + "resolved": "http://r.cnpmjs.org/is-generator-fn/download/is-generator-fn-2.1.0.tgz", + "integrity": "sha1-fRQK3DiarzARqPKipM+m+q3/sRg=", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-4.0.1.tgz", + "integrity": "sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=", "dev": true, "requires": { - "minimatch": "^3.0.4" + "is-extglob": "^2.1.1" } }, - "import-cwd": { + "is-hexadecimal": { + "version": "1.0.4", + "resolved": "http://r.cnpmjs.org/is-hexadecimal/download/is-hexadecimal-1.0.4.tgz", + "integrity": "sha1-zDXJdYjaS9Saju3WvECC1E3LI6c=", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/is-negative-zero/download/is-negative-zero-2.0.0.tgz", + "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz", + "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=", + "dev": true + }, + "is-number-object": { + "version": "1.0.4", + "resolved": "https://r.cnpmjs.org/is-number-object/download/is-number-object-1.0.4.tgz", + "integrity": "sha1-NqyV50HPGLKD/B3fXoPaeY4+wZc=", + "dev": true + }, + "is-obj": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/is-obj/download/is-obj-2.0.0.tgz", + "integrity": "sha1-Rz+wXZc3BeP9liBUUBjKjiLvSYI=", + "dev": true + }, + "is-observable": { + "version": "1.1.0", + "resolved": "https://r.cnpmjs.org/is-observable/download/is-observable-1.1.0.tgz", + "integrity": "sha1-s+mGyPRN6VCGfKtUA/WjRlAFl14=", + "dev": true, + "requires": { + "symbol-observable": "^1.1.0" + } + }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "http://r.cnpmjs.org/is-path-cwd/download/is-path-cwd-2.2.0.tgz", + "integrity": "sha1-Z9Q7gmZKe1GR/ZEZEn6zAASKn9s=", + "dev": true + }, + "is-path-in-cwd": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", - "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "resolved": "http://r.cnpmjs.org/is-path-in-cwd/download/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha1-v+Lcomxp85cmWkAJljYCk1oFOss=", "dev": true, "requires": { - "import-from": "^2.1.0" + "is-path-inside": "^2.1.0" } }, - "import-from": { + "is-path-inside": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", - "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "resolved": "http://r.cnpmjs.org/is-path-inside/download/is-path-inside-2.1.0.tgz", + "integrity": "sha1-fJgQWH1lmkDSe8201WFuqwWUlLI=", "dev": true, "requires": { - "resolve-from": "^3.0.0" + "path-is-inside": "^1.0.2" } }, - "import-lazy": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-3.1.0.tgz", - "integrity": "sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==", + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://r.cnpmjs.org/is-plain-obj/download/is-plain-obj-2.1.0.tgz", + "integrity": "sha1-ReQuN/zPH0Dajl927iFRWEDAkoc=", "dev": true }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "is-plain-object": { + "version": "2.0.4", + "resolved": "http://r.cnpmjs.org/is-plain-object/download/is-plain-object-2.0.4.tgz", + "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", "dev": true, "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" + "isobject": "^3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } } }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", "dev": true }, - "in-publish": { + "is-primitive": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", - "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", "dev": true }, - "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "is-promise": { + "version": "2.2.2", + "resolved": "http://r.cnpmjs.org/is-promise/download/is-promise-2.2.2.tgz", + "integrity": "sha1-OauVnMv5p3TPB597QMeib3YxNfE=", "dev": true }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", - "dev": true + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/is-regex/download/is-regex-1.1.1.tgz?cache=0&sync_timestamp=1596555762356&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-regex%2Fdownload%2Fis-regex-1.1.1.tgz", + "integrity": "sha1-xvmKrMVG9s7FRooHt7FTq1ZKV7k=", + "requires": { + "has-symbols": "^1.0.1" + } }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", "dev": true }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "is-relative": { + "version": "1.0.0", + "resolved": "https://r.cnpmjs.org/is-relative/download/is-relative-1.0.0.tgz", + "integrity": "sha1-obtpNc6MXboei5dUubLcwCDiJg0=", "dev": true, "requires": { - "once": "^1.3.0", - "wrappy": "1" + "is-unc-path": "^1.0.0" } }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "is-resolvable": { + "version": "1.1.0", + "resolved": "http://r.cnpmjs.org/is-resolvable/download/is-resolvable-1.1.0.tgz", + "integrity": "sha1-+xj4fOH+uSUWnJpAfBkxijIG7Yg=", "dev": true }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://r.cnpmjs.org/is-retry-allowed/download/is-retry-allowed-1.2.0.tgz", + "integrity": "sha1-13hIi9CkZmo76KFIK58rqv7eqLQ=", "dev": true }, - "inline-style-parser": { + "is-stream": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/is-stream/download/is-stream-2.0.0.tgz", + "integrity": "sha1-venDJoDW+uBBKdasnZIc54FfeOM=", + "dev": true + }, + "is-string": { + "version": "1.0.5", + "resolved": "http://r.cnpmjs.org/is-string/download/is-string-1.0.5.tgz", + "integrity": "sha1-QEk+0ZjvP/R3uMf5L2ROyCpc06Y=", + "dev": true + }, + "is-subset": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", - "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==", + "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", + "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=", "dev": true }, - "inquirer": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", - "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "is-supported-regexp-flag": { + "version": "1.0.1", + "resolved": "https://r.cnpmjs.org/is-supported-regexp-flag/download/is-supported-regexp-flag-1.0.1.tgz", + "integrity": "sha1-Ie4WUY0sHdPt0+mg1X5QIHrDZMo=", + "dev": true + }, + "is-svg": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", + "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", "dev": true, "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^2.0.4", - "figures": "^2.0.0", - "lodash": "^4.3.0", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rx-lite": "^4.0.8", - "rx-lite-aggregates": "^4.0.8", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-escapes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", - "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", - "dev": true - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } + "html-comment-regex": "^1.1.0" } }, - "internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", - "dev": true, + "is-symbol": { + "version": "1.0.3", + "resolved": "http://r.cnpmjs.org/is-symbol/download/is-symbol-1.0.3.tgz", + "integrity": "sha1-OOEBS55jKb4N6dJKQU/XRB7GGTc=", "requires": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" + "has-symbols": "^1.0.1" } }, - "interpret": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "is-unc-path": { + "version": "1.0.0", + "resolved": "https://r.cnpmjs.org/is-unc-path/download/is-unc-path-1.0.0.tgz", + "integrity": "sha1-1zHoiY7QkKEsNSrS6u1Qla0yLJ0=", + "dev": true, "requires": { - "loose-envify": "^1.0.0" + "unc-path-regex": "^0.1.2" } }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", "dev": true }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "is-whitespace-character": { + "version": "1.0.4", + "resolved": "https://r.cnpmjs.org/is-whitespace-character/download/is-whitespace-character-1.0.4.tgz", + "integrity": "sha1-CFjt2UqVWUx8ndC1wXTsbkXuSqc=", "dev": true }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "is-windows": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/is-windows/download/is-windows-1.0.2.tgz", + "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=", "dev": true }, - "ipaddr.js": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", - "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==", + "is-word-character": { + "version": "1.0.4", + "resolved": "https://r.cnpmjs.org/is-word-character/download/is-word-character-1.0.4.tgz", + "integrity": "sha1-zg5zIW+YWZBgWS9i/zE1TdvrAjA=", "dev": true }, - "is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/is-wsl/download/is-wsl-2.2.0.tgz", + "integrity": "sha1-dKTHbnfKn9P5MvKQwX6jJs0VcnE=", "dev": true, "requires": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" + "is-docker": "^2.0.0" } }, - "is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "isarray": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/isarray/download/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-alphabetical": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.2.tgz", - "integrity": "sha512-V0xN4BYezDHcBSKb1QHUFMlR4as/XEuCZBzMJUU4n7+Cbt33SmUnSol+pnXFvLxSHNq2CemUXNdaXV6Flg7+xg==" - }, - "is-alphanumeric": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz", - "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=", - "dev": true - }, - "is-alphanumerical": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.2.tgz", - "integrity": "sha512-pyfU/0kHdISIgslFfZN9nfY1Gk3MquQgUm1mJTjdkEPpkAKNWuBTSqFwewOpR7N351VkErCiyV71zX7mlQQqsg==", - "requires": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - } - }, - "is-arguments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", - "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", - "dev": true - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "isobject": { + "version": "2.1.0", + "resolved": "http://r.cnpmjs.org/isobject/download/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", "dev": true, "requires": { - "binary-extensions": "^1.0.0" + "isarray": "1.0.0" } }, - "is-boolean-object": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.0.tgz", - "integrity": "sha1-mPiygDBoQhmpXzdc+9iM40Bd/5M=", - "dev": true - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", "requires": { - "builtin-modules": "^1.0.0" + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + }, + "dependencies": { + "is-stream": { + "version": "1.1.0", + "resolved": "http://r.cnpmjs.org/is-stream/download/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "node-fetch": { + "version": "1.7.3", + "resolved": "https://r.cnpmjs.org/node-fetch/download/node-fetch-1.7.3.tgz", + "integrity": "sha1-mA9vcthSEaU0fGsrwYxbhMPrR+8=", + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + } } }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true }, - "is-ci": { + "istanbul-lib-coverage": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", - "dev": true, - "requires": { - "ci-info": "^1.5.0" - } + "resolved": "http://r.cnpmjs.org/istanbul-lib-coverage/download/istanbul-lib-coverage-1.2.1.tgz", + "integrity": "sha1-zPftzQoLubj3Kf7rCTBHD5r2ZPA=", + "dev": true }, - "is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "istanbul-lib-instrument": { + "version": "1.10.2", + "resolved": "http://r.cnpmjs.org/istanbul-lib-instrument/download/istanbul-lib-instrument-1.10.2.tgz", + "integrity": "sha1-H1XtEKw8R/K93dUweTUSZ1TQqco=", "dev": true, "requires": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" + "babel-generator": "^6.18.0", + "babel-template": "^6.16.0", + "babel-traverse": "^6.18.0", + "babel-types": "^6.18.0", + "babylon": "^6.18.0", + "istanbul-lib-coverage": "^1.2.1", + "semver": "^5.3.0" + }, + "dependencies": { + "babylon": { + "version": "6.18.0", + "resolved": "http://r.cnpmjs.org/babylon/download/babylon-6.18.0.tgz", + "integrity": "sha1-ry87iPpvXB5MY00aD46sT1WzleM=", + "dev": true + } } }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "istanbul-lib-report": { + "version": "2.0.8", + "resolved": "http://r.cnpmjs.org/istanbul-lib-report/download/istanbul-lib-report-2.0.8.tgz", + "integrity": "sha1-WoETzXRtQ8SInro2qxDn1QybTzM=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "supports-color": "^6.1.0" }, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "http://r.cnpmjs.org/istanbul-lib-coverage/download/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha1-Z18KtpUD+tSx2En3NrqsqAM0T0k=", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "has-flag": "^3.0.0" } } } }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true - }, - "is-decimal": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.2.tgz", - "integrity": "sha512-TRzl7mOCchnhchN+f3ICUCzYvL9ul7R+TYOsZ8xia++knyZAJfv/uA1FvQXsAnYIl1T3B2X5E/J7Wb1QXiIBXg==" - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "istanbul-lib-source-maps": { + "version": "3.0.6", + "resolved": "http://r.cnpmjs.org/istanbul-lib-source-maps/download/istanbul-lib-source-maps-3.0.6.tgz", + "integrity": "sha1-KEmXxIIRdS7EhiU9qX44ed77qMg=", "dev": true, "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "debug": "^4.1.1", + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "rimraf": "^2.6.3", + "source-map": "^0.6.1" }, "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "debug": { + "version": "4.1.1", + "resolved": "http://r.cnpmjs.org/debug/download/debug-4.1.1.tgz", + "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "http://r.cnpmjs.org/istanbul-lib-coverage/download/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha1-Z18KtpUD+tSx2En3NrqsqAM0T0k=", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "http://r.cnpmjs.org/ms/download/ms-2.1.2.tgz", + "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "http://r.cnpmjs.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", "dev": true } } }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true - }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "istanbul-reports": { + "version": "2.2.7", + "resolved": "http://r.cnpmjs.org/istanbul-reports/download/istanbul-reports-2.2.7.tgz", + "integrity": "sha1-XZOfYjfXtIOTzAlZ6rQM1P0FaTE=", "dev": true, "requires": { - "is-primitive": "^2.0.0" + "html-escaper": "^2.0.0" } }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "jest": { + "version": "24.9.0", + "resolved": "http://r.cnpmjs.org/jest/download/jest-24.9.0.tgz", + "integrity": "sha1-mH0pDAWgi1LFYYjBAC42jtsAcXE=", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "import-local": "^2.0.0", + "jest-cli": "^24.9.0" + }, + "dependencies": { + "ci-info": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/ci-info/download/ci-info-2.0.0.tgz", + "integrity": "sha1-Z6npZL4xpR4V5QENWObxKDQAL0Y=", + "dev": true + }, + "is-ci": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/is-ci/download/is-ci-2.0.0.tgz", + "integrity": "sha1-a8YzQYGBDgS1wis9WJ/cpVAmQEw=", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "jest-cli": { + "version": "24.9.0", + "resolved": "http://r.cnpmjs.org/jest-cli/download/jest-cli-24.9.0.tgz", + "integrity": "sha1-rS3mLQdHLUGcarwwH8QyuYsQ0q8=", + "dev": true, + "requires": { + "@jest/core": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "import-local": "^2.0.0", + "is-ci": "^2.0.0", + "jest-config": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "prompts": "^2.0.1", + "realpath-native": "^1.1.0", + "yargs": "^13.3.0" + } + } } }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "jest-canvas-mock": { + "version": "2.2.0", + "resolved": "https://r.cnpmjs.org/jest-canvas-mock/download/jest-canvas-mock-2.2.0.tgz", + "integrity": "sha1-RfvFhYnGzp31DckL2K3OdHy9rac=", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "cssfontparser": "^1.2.1", + "parse-color": "^1.0.0" } }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true - }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "jest-changed-files": { + "version": "24.9.0", + "resolved": "http://r.cnpmjs.org/jest-changed-files/download/jest-changed-files-24.9.0.tgz", + "integrity": "sha1-CNjBXreaf6P8mCabwUtFHugvgDk=", "dev": true, "requires": { - "is-extglob": "^2.1.0" + "@jest/types": "^24.9.0", + "execa": "^1.0.0", + "throat": "^4.0.0" } }, - "is-hexadecimal": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.2.tgz", - "integrity": "sha512-but/G3sapV3MNyqiDBLrOi4x8uCIw0RY3o/Vb5GT0sMFHrVV7731wFSVy41T5FO1og7G0gXLJh0MkgPRouko/A==" - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "jest-config": { + "version": "24.9.0", + "resolved": "http://r.cnpmjs.org/jest-config/download/jest-config-24.9.0.tgz", + "integrity": "sha1-+xu8YMc6Rq8DWQcZ76SCXm5N0bU=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^24.9.0", + "@jest/types": "^24.9.0", + "babel-jest": "^24.9.0", + "chalk": "^2.0.1", + "glob": "^7.1.1", + "jest-environment-jsdom": "^24.9.0", + "jest-environment-node": "^24.9.0", + "jest-get-type": "^24.9.0", + "jest-jasmine2": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "micromatch": "^3.1.10", + "pretty-format": "^24.9.0", + "realpath-native": "^1.1.0" }, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "arr-diff": { + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/arr-diff/download/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "http://r.cnpmjs.org/array-unique/download/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "babel-jest": { + "version": "24.9.0", + "resolved": "http://r.cnpmjs.org/babel-jest/download/babel-jest-24.9.0.tgz", + "integrity": "sha1-P8Mny4RnuJ0U17xw4xUQSng8zVQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-number-object": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.3.tgz", - "integrity": "sha1-8mWrian0RQNO9q/xWo8AsA9VF5k=", - "dev": true - }, - "is-obj": { - "version": "1.0.1", - "resolved": "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - }, - "is-observable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz", - "integrity": "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==", - "dev": true, - "requires": { - "symbol-observable": "^1.1.0" - } - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true - }, - "is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", - "dev": true, - "requires": { - "is-path-inside": "^1.0.0" - } - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "dev": true, - "requires": { - "path-is-inside": "^1.0.1" - } - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true - }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "dev": true, - "requires": { - "has": "^1.0.1" - } - }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", - "dev": true - }, - "is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", - "dev": true, - "requires": { - "is-unc-path": "^1.0.0" - } - }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true - }, - "is-retry-allowed": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "is-string": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.4.tgz", - "integrity": "sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ=", - "dev": true - }, - "is-subset": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", - "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=", - "dev": true - }, - "is-supported-regexp-flag": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-supported-regexp-flag/-/is-supported-regexp-flag-1.0.1.tgz", - "integrity": "sha512-3vcJecUUrpgCqc/ca0aWeNu64UGgxcvO60K/Fkr1N6RSvfGCTU60UKN68JDmKokgba0rFFJs12EnzOQa14ubKQ==", - "dev": true - }, - "is-svg": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", - "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", - "dev": true, - "requires": { - "html-comment-regex": "^1.1.0" - } - }, - "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", - "dev": true, - "requires": { - "has-symbols": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", - "dev": true, - "requires": { - "unc-path-regex": "^0.1.2" - } - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "is-whitespace-character": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.3.tgz", - "integrity": "sha512-SNPgMLz9JzPccD3nPctcj8sZlX9DAMJSKH8bP7Z6bohCwuNgX8xbWr1eTAYXX9Vpi/aSn8Y1akL9WgM3t43YNQ==", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-word-character": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.3.tgz", - "integrity": "sha512-0wfcrFgOOOBdgRNT9H33xe6Zi6yhX/uoc4U8NBZGeQQB0ctU1dnlNTyL9JM2646bHDTpsDm1Brb3VPoCIMrd/A==", - "dev": true - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - }, - "dependencies": { - "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - } - } - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", - "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", - "dev": true, - "requires": { - "@babel/generator": "^7.4.0", - "@babel/parser": "^7.4.3", - "@babel/template": "^7.4.0", - "@babel/traverse": "^7.4.3", - "@babel/types": "^7.4.0", - "istanbul-lib-coverage": "^2.0.5", - "semver": "^6.0.0" - }, - "dependencies": { - "@babel/generator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz", - "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==", - "dev": true, - "requires": { - "@babel/types": "^7.4.4", - "jsesc": "^2.5.1", - "lodash": "^4.17.11", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", - "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", - "dev": true, - "requires": { - "@babel/types": "^7.4.4" - } - }, - "@babel/parser": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.4.tgz", - "integrity": "sha512-5pCS4mOsL+ANsFZGdvNLybx4wtqAZJ0MJjMHxvzI3bvIsz6sQvzW8XX92EYIkiPtIvcfG3Aj+Ir5VNyjnZhP7w==", - "dev": true - }, - "@babel/template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz", - "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.4.4", - "@babel/types": "^7.4.4" - } - }, - "@babel/traverse": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.4.tgz", - "integrity": "sha512-Gw6qqkw/e6AGzlyj9KnkabJX7VcubqPtkUQVAwkc0wUMldr3A/hezNB3Rc5eIvId95iSGkGIOe5hh1kMKf951A==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.4", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/parser": "^7.4.4", - "@babel/types": "^7.4.4", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.11" - } - }, - "@babel/types": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz", - "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.11", - "to-fast-properties": "^2.0.0" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "semver": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz", - "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } - } - }, - "istanbul-lib-report": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", - "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "supports-color": "^6.1.0" - }, - "dependencies": { - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", - "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "rimraf": "^2.6.3", - "source-map": "^0.6.1" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/babel__core": "^7.1.0", + "babel-plugin-istanbul": "^5.1.0", + "babel-preset-jest": "^24.9.0", + "chalk": "^2.4.2", + "slash": "^2.0.0" + } + }, + "babel-plugin-istanbul": { + "version": "5.2.0", + "resolved": "http://r.cnpmjs.org/babel-plugin-istanbul/download/babel-plugin-istanbul-5.2.0.tgz", + "integrity": "sha1-30reg9iXqS3wacTZolzyZxKTyFQ=", "dev": true, "requires": { - "ms": "^2.1.1" + "@babel/helper-plugin-utils": "^7.0.0", + "find-up": "^3.0.0", + "istanbul-lib-instrument": "^3.3.0", + "test-exclude": "^5.2.3" } }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "babel-plugin-jest-hoist": { + "version": "24.9.0", + "resolved": "http://r.cnpmjs.org/babel-plugin-jest-hoist/download/babel-plugin-jest-hoist-24.9.0.tgz", + "integrity": "sha1-T4NwketAfgFEfIhDy+xUbQAC11Y=", "dev": true, "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" + "@types/babel__traverse": "^7.0.6" } }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true + "babel-preset-jest": { + "version": "24.9.0", + "resolved": "http://r.cnpmjs.org/babel-preset-jest/download/babel-preset-jest-24.9.0.tgz", + "integrity": "sha1-GStSHiIX+x0fZ89z9wwzZlCtPNw=", + "dev": true, + "requires": { + "@babel/plugin-syntax-object-rest-spread": "^7.0.0", + "babel-plugin-jest-hoist": "^24.9.0" + } }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "braces": { + "version": "2.3.2", + "resolved": "http://r.cnpmjs.org/braces/download/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", "dev": true, "requires": { - "glob": "^7.1.3" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } - } - } - }, - "istanbul-reports": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz", - "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==", - "dev": true, - "requires": { - "handlebars": "^4.1.2" - } - }, - "jest": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-24.8.0.tgz", - "integrity": "sha512-o0HM90RKFRNWmAWvlyV8i5jGZ97pFwkeVoGvPW1EtLTgJc2+jcuqcbbqcSZLE/3f2S5pt0y2ZBETuhpWNl1Reg==", - "dev": true, - "requires": { - "import-local": "^2.0.0", - "jest-cli": "^24.8.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true + "debug": { + "version": "2.6.9", + "resolved": "http://r.cnpmjs.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true + "expand-brackets": { + "version": "2.1.4", + "resolved": "http://r.cnpmjs.org/expand-brackets/download/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true + } + } }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "extglob": { + "version": "2.0.4", + "resolved": "http://r.cnpmjs.org/extglob/download/extglob-2.0.4.tgz", + "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", "dev": true, "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "fill-range": { + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/fill-range/download/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } }, "find-up": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "resolved": "http://r.cnpmjs.org/find-up/download/find-up-3.0.0.tgz", + "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=", "dev": true, "requires": { "locate-path": "^3.0.0" } }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", "dev": true, "requires": { - "pump": "^3.0.0" + "kind-of": "^6.0.0" } }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "is-buffer": { + "version": "1.1.6", + "resolved": "http://r.cnpmjs.org/is-buffer/download/is-buffer-1.1.6.tgz", + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", "dev": true }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "dev": true, "requires": { - "ci-info": "^2.0.0" + "kind-of": "^6.0.0" } }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true + "is-descriptor": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } }, - "jest-cli": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.8.0.tgz", - "integrity": "sha512-+p6J00jSMPQ116ZLlHJJvdf8wbjNbZdeSX9ptfHX06/MSNaXmKihQzx5vQcw0q2G6JsdVkUIdWbOWtSnaYs3yA==", + "is-number": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "@jest/core": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "import-local": "^2.0.0", - "is-ci": "^2.0.0", - "jest-config": "^24.8.0", - "jest-util": "^24.8.0", - "jest-validate": "^24.8.0", - "prompts": "^2.0.1", - "realpath-native": "^1.1.0", - "yargs": "^12.0.2" + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, - "jest-get-type": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.8.0.tgz", - "integrity": "sha512-RR4fo8jEmMD9zSz2nLbs2j0zvPpk/KCEz3a62jJWbd2ayNo0cb+KFRxPHVhE4ZmgGJEQp0fosmNz84IfqM8cMQ==", + "isobject": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, - "jest-validate": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.8.0.tgz", - "integrity": "sha512-+/N7VOEMW1Vzsrk3UWBDYTExTPwf68tavEPKDnJzrC6UlHtUDU/fuEdXqFoHzv9XnQ+zW6X3qMZhJ3YexfeLDA==", + "istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "http://r.cnpmjs.org/istanbul-lib-coverage/download/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha1-Z18KtpUD+tSx2En3NrqsqAM0T0k=", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "3.3.0", + "resolved": "http://r.cnpmjs.org/istanbul-lib-instrument/download/istanbul-lib-instrument-3.3.0.tgz", + "integrity": "sha1-pfY9kfC7wMPkee9MXeAnM17G1jA=", "dev": true, "requires": { - "@jest/types": "^24.8.0", - "camelcase": "^5.0.0", - "chalk": "^2.0.1", - "jest-get-type": "^24.8.0", - "leven": "^2.1.0", - "pretty-format": "^24.8.0" + "@babel/generator": "^7.4.0", + "@babel/parser": "^7.4.3", + "@babel/template": "^7.4.0", + "@babel/traverse": "^7.4.3", + "@babel/types": "^7.4.0", + "istanbul-lib-coverage": "^2.0.5", + "semver": "^6.0.0" } }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "kind-of": { + "version": "6.0.3", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-6.0.3.tgz", + "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", + "dev": true + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/load-json-file/download/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "dev": true, "requires": { - "invert-kv": "^2.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" } }, "locate-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "resolved": "http://r.cnpmjs.org/locate-path/download/locate-path-3.0.0.tgz", + "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=", "dev": true, "requires": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" } }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" + "micromatch": { + "version": "3.1.10", + "resolved": "http://r.cnpmjs.org/micromatch/download/micromatch-3.1.10.tgz", + "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" } }, "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "version": "2.3.0", + "resolved": "https://r.cnpmjs.org/p-limit/download/p-limit-2.3.0.tgz", + "integrity": "sha1-PdM8ZHohT9//2DWTPrCG2g3CHbE=", "dev": true, "requires": { "p-try": "^2.0.0" @@ -13942,8 +13114,8 @@ }, "p-locate": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "resolved": "http://r.cnpmjs.org/p-locate/download/p-locate-3.0.0.tgz", + "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=", "dev": true, "requires": { "p-limit": "^2.0.0" @@ -13951,951 +13123,921 @@ }, "p-try": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "resolved": "http://r.cnpmjs.org/p-try/download/p-try-2.2.0.tgz", + "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=", "dev": true }, - "pretty-format": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.8.0.tgz", - "integrity": "sha512-P952T7dkrDEplsR+TuY7q3VXDae5Sr7zmQb12JU/NDQa/3CH7/QW0yvqLcGN6jL+zQFKaoJcPc+yJxMTGmosqw==", + "path-type": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/path-type/download/path-type-3.0.0.tgz", + "integrity": "sha1-zvMdyOCho7sNEFwM2Xzzv0f0428=", "dev": true, "requires": { - "@jest/types": "^24.8.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" + "pify": "^3.0.0" } }, - "react-is": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", - "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==", + "pify": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/pify/download/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "read-pkg": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/read-pkg/download/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" } }, - "strip-ansi": { + "read-pkg-up": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "resolved": "http://r.cnpmjs.org/read-pkg-up/download/read-pkg-up-4.0.0.tgz", + "integrity": "sha1-GyIcYIi6d5lgHICPkRYcZuWPiXg=", "dev": true, "requires": { - "ansi-regex": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - } + "find-up": "^3.0.0", + "read-pkg": "^3.0.0" } }, - "which-module": { + "require-main-filename": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/require-main-filename/download/require-main-filename-2.0.0.tgz", + "integrity": "sha1-0LMp7MfMD2Fkn2IhW+aa9UqomJs=", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "http://r.cnpmjs.org/semver/download/semver-6.3.0.tgz", + "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", + "dev": true + }, + "slash": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "resolved": "https://registry.npm.taobao.org/slash/download/slash-2.0.0.tgz", + "integrity": "sha1-3lUoUaF1nfOo8gZTVEL17E3eq0Q=", "dev": true }, - "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "strip-bom": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/strip-bom/download/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "test-exclude": { + "version": "5.2.3", + "resolved": "http://r.cnpmjs.org/test-exclude/download/test-exclude-5.2.3.tgz", + "integrity": "sha1-w9Ph4xHrfuQF4JLawQrv0JCR6sA=", "dev": true, "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" + "glob": "^7.1.3", + "minimatch": "^3.0.4", + "read-pkg-up": "^4.0.0", + "require-main-filename": "^2.0.0" } }, - "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } } } }, - "jest-canvas-mock": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/jest-canvas-mock/-/jest-canvas-mock-2.2.0.tgz", - "integrity": "sha512-DcJdchb7eWFZkt6pvyceWWnu3lsp5QWbUeXiKgEMhwB3sMm5qHM1GQhDajvJgBeiYpgKcojbzZ53d/nz6tXvJw==", - "dev": true, - "requires": { - "cssfontparser": "^1.2.1", - "parse-color": "^1.0.0" - } - }, - "jest-changed-files": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.8.0.tgz", - "integrity": "sha512-qgANC1Yrivsq+UrLXsvJefBKVoCsKB0Hv+mBb6NMjjZ90wwxCDmU3hsCXBya30cH+LnPYjwgcU65i6yJ5Nfuug==", + "jest-coverage-badges": { + "version": "1.1.2", + "resolved": "https://r.cnpmjs.org/jest-coverage-badges/download/jest-coverage-badges-1.1.2.tgz", + "integrity": "sha1-pweGsTn9j7aF23MuHi2RbYpHKH4=", "dev": true, "requires": { - "@jest/types": "^24.8.0", - "execa": "^1.0.0", - "throat": "^4.0.0" + "mkdirp": "0.5.1" }, "dependencies": { - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } + "minimist": { + "version": "0.0.8", + "resolved": "http://r.cnpmjs.org/minimist/download/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "mkdirp": { + "version": "0.5.1", + "resolved": "http://r.cnpmjs.org/mkdirp/download/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, "requires": { - "pump": "^3.0.0" + "minimist": "0.0.8" } } } }, - "jest-config": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.8.0.tgz", - "integrity": "sha512-Czl3Nn2uEzVGsOeaewGWoDPD8GStxCpAe0zOYs2x2l0fZAgPbCr3uwUkgNKV3LwE13VXythM946cd5rdGkkBZw==", + "jest-diff": { + "version": "24.9.0", + "resolved": "http://r.cnpmjs.org/jest-diff/download/jest-diff-24.9.0.tgz", + "integrity": "sha1-kxt9DVd4obr3RSy4FuMl43JAVdo=", "dev": true, "requires": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^24.8.0", - "@jest/types": "^24.8.0", - "babel-jest": "^24.8.0", "chalk": "^2.0.1", - "glob": "^7.1.1", - "jest-environment-jsdom": "^24.8.0", - "jest-environment-node": "^24.8.0", - "jest-get-type": "^24.8.0", - "jest-jasmine2": "^24.8.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.8.0", - "jest-util": "^24.8.0", - "jest-validate": "^24.8.0", + "diff-sequences": "^24.9.0", + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" + } + }, + "jest-docblock": { + "version": "24.9.0", + "resolved": "http://r.cnpmjs.org/jest-docblock/download/jest-docblock-24.9.0.tgz", + "integrity": "sha1-eXAgGAK6Vg4cQJLMJcvt9a9ajOI=", + "dev": true, + "requires": { + "detect-newline": "^2.1.0" + } + }, + "jest-each": { + "version": "24.9.0", + "resolved": "http://r.cnpmjs.org/jest-each/download/jest-each-24.9.0.tgz", + "integrity": "sha1-6y2mAuKmEImNvF8fbfO6hrVfiwU=", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "jest-get-type": "^24.9.0", + "jest-util": "^24.9.0", + "pretty-format": "^24.9.0" + } + }, + "jest-environment-jsdom": { + "version": "24.9.0", + "resolved": "http://r.cnpmjs.org/jest-environment-jsdom/download/jest-environment-jsdom-24.9.0.tgz", + "integrity": "sha1-SwgGx/yU+V7bNpppzCd47sK3N1s=", + "dev": true, + "requires": { + "@jest/environment": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-util": "^24.9.0", + "jsdom": "^11.5.1" + } + }, + "jest-environment-jsdom-global": { + "version": "1.2.1", + "resolved": "https://r.cnpmjs.org/jest-environment-jsdom-global/download/jest-environment-jsdom-global-1.2.1.tgz", + "integrity": "sha1-OSBS1NI65vraiLBRMUbi6Xmmqq8=", + "dev": true + }, + "jest-environment-node": { + "version": "24.9.0", + "resolved": "http://r.cnpmjs.org/jest-environment-node/download/jest-environment-node-24.9.0.tgz", + "integrity": "sha1-Mz0tJ5b5aH8q7r8HQrUZ8zwcv9M=", + "dev": true, + "requires": { + "@jest/environment": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-util": "^24.9.0" + } + }, + "jest-fetch-mock": { + "version": "2.1.2", + "resolved": "https://r.cnpmjs.org/jest-fetch-mock/download/jest-fetch-mock-2.1.2.tgz", + "integrity": "sha1-EmCzR5GOOTHE7HQ86vYEM9pmG9A=", + "dev": true, + "requires": { + "cross-fetch": "^2.2.2", + "promise-polyfill": "^7.1.1" + } + }, + "jest-get-type": { + "version": "24.9.0", + "resolved": "http://r.cnpmjs.org/jest-get-type/download/jest-get-type-24.9.0.tgz", + "integrity": "sha1-FoSgyKUPLkkBtmRK6GH1ee7S7w4=", + "dev": true + }, + "jest-haste-map": { + "version": "24.9.0", + "resolved": "http://r.cnpmjs.org/jest-haste-map/download/jest-haste-map-24.9.0.tgz", + "integrity": "sha1-s4pdZCdJNOIfpBeump++t3zqrH0=", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "anymatch": "^2.0.0", + "fb-watchman": "^2.0.0", + "fsevents": "^1.2.7", + "graceful-fs": "^4.1.15", + "invariant": "^2.2.4", + "jest-serializer": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.9.0", "micromatch": "^3.1.10", - "pretty-format": "^24.8.0", - "realpath-native": "^1.1.0" + "sane": "^4.0.3", + "walker": "^1.0.7" }, "dependencies": { - "@jest/console": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", - "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", - "dev": true, - "requires": { - "@jest/source-map": "^24.9.0", - "chalk": "^2.0.1", - "slash": "^2.0.0" - } + "arr-diff": { + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/arr-diff/download/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true }, - "@jest/fake-timers": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz", - "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==", + "array-unique": { + "version": "0.3.2", + "resolved": "http://r.cnpmjs.org/array-unique/download/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "http://r.cnpmjs.org/braces/download/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", "dev": true, "requires": { - "@jest/types": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-mock": "^24.9.0" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" }, "dependencies": { - "@jest/types": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", - "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^13.0.0" + "is-extendable": "^0.1.0" } } } }, - "@jest/source-map": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz", - "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.1.15", - "source-map": "^0.6.0" - } - }, - "@jest/test-result": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz", - "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==", + "debug": { + "version": "2.6.9", + "resolved": "http://r.cnpmjs.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", "dev": true, "requires": { - "@jest/console": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/istanbul-lib-coverage": "^2.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", - "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^13.0.0" - } - } + "ms": "2.0.0" } }, - "@jest/transform": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz", - "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==", + "expand-brackets": { + "version": "2.1.4", + "resolved": "http://r.cnpmjs.org/expand-brackets/download/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^24.9.0", - "babel-plugin-istanbul": "^5.1.0", - "chalk": "^2.0.1", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.1.15", - "jest-haste-map": "^24.9.0", - "jest-regex-util": "^24.9.0", - "jest-util": "^24.9.0", - "micromatch": "^3.1.10", - "pirates": "^4.0.1", - "realpath-native": "^1.1.0", - "slash": "^2.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "2.4.1" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { - "@jest/types": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", - "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", + "define-property": { + "version": "0.2.5", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^13.0.0" + "is-descriptor": "^0.1.0" } }, - "jest-regex-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz", - "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==", - "dev": true - }, - "jest-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz", - "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==", + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "@jest/console": "^24.9.0", - "@jest/fake-timers": "^24.9.0", - "@jest/source-map": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "callsites": "^3.0.0", - "chalk": "^2.0.1", - "graceful-fs": "^4.1.15", - "is-ci": "^2.0.0", - "mkdirp": "^0.5.1", - "slash": "^2.0.0", - "source-map": "^0.6.0" + "is-extendable": "^0.1.0" } - } - } - }, - "@types/yargs": { - "version": "13.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.4.tgz", - "integrity": "sha512-Ke1WmBbIkVM8bpvsNEcGgQM70XcEh/nbpxQhW7FhrsbCsXSY9BmLB1+LHtD7r9zrsOcFlLiF+a/UeJsdfw3C5A==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "babel-jest": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz", - "integrity": "sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==", - "dev": true, - "requires": { - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/babel__core": "^7.1.0", - "babel-plugin-istanbul": "^5.1.0", - "babel-preset-jest": "^24.9.0", - "chalk": "^2.4.2", - "slash": "^2.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", - "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^13.0.0" + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "is-descriptor": { + "version": "0.1.6", + "resolved": "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", "dev": true, "requires": { - "has-flag": "^3.0.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true } } }, - "babel-plugin-jest-hoist": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz", - "integrity": "sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==", - "dev": true, - "requires": { - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-preset-jest": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz", - "integrity": "sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==", - "dev": true, - "requires": { - "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "babel-plugin-jest-hoist": "^24.9.0" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, - "jest-get-type": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.8.0.tgz", - "integrity": "sha512-RR4fo8jEmMD9zSz2nLbs2j0zvPpk/KCEz3a62jJWbd2ayNo0cb+KFRxPHVhE4ZmgGJEQp0fosmNz84IfqM8cMQ==", - "dev": true - }, - "jest-haste-map": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz", - "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==", + "extglob": { + "version": "2.0.4", + "resolved": "http://r.cnpmjs.org/extglob/download/extglob-2.0.4.tgz", + "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", "dev": true, "requires": { - "@jest/types": "^24.9.0", - "anymatch": "^2.0.0", - "fb-watchman": "^2.0.0", - "fsevents": "^1.2.7", - "graceful-fs": "^4.1.15", - "invariant": "^2.2.4", - "jest-serializer": "^24.9.0", - "jest-util": "^24.9.0", - "jest-worker": "^24.9.0", - "micromatch": "^3.1.10", - "sane": "^4.0.3", - "walker": "^1.0.7" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { - "@jest/types": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", - "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", + "define-property": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^13.0.0" + "is-descriptor": "^1.0.0" } }, - "jest-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz", - "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==", - "dev": true, - "requires": { - "@jest/console": "^24.9.0", - "@jest/fake-timers": "^24.9.0", - "@jest/source-map": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "callsites": "^3.0.0", - "chalk": "^2.0.1", - "graceful-fs": "^4.1.15", - "is-ci": "^2.0.0", - "mkdirp": "^0.5.1", - "slash": "^2.0.0", - "source-map": "^0.6.0" - } - } - } - }, - "jest-message-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz", - "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/stack-utils": "^1.0.1", - "chalk": "^2.0.1", - "micromatch": "^3.1.10", - "slash": "^2.0.0", - "stack-utils": "^1.0.1" - }, - "dependencies": { - "@jest/types": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", - "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^13.0.0" + "is-extendable": "^0.1.0" } } } }, - "jest-mock": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz", - "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==", + "fill-range": { + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/fill-range/download/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "@jest/types": "^24.9.0" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "dependencies": { - "@jest/types": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", - "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^13.0.0" + "is-extendable": "^0.1.0" } } } }, - "jest-serializer": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", - "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==", + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "http://r.cnpmjs.org/is-buffer/download/is-buffer-1.1.6.tgz", + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", "dev": true }, - "jest-validate": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.8.0.tgz", - "integrity": "sha512-+/N7VOEMW1Vzsrk3UWBDYTExTPwf68tavEPKDnJzrC6UlHtUDU/fuEdXqFoHzv9XnQ+zW6X3qMZhJ3YexfeLDA==", + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "dev": true, "requires": { - "@jest/types": "^24.8.0", - "camelcase": "^5.0.0", - "chalk": "^2.0.1", - "jest-get-type": "^24.8.0", - "leven": "^2.1.0", - "pretty-format": "^24.8.0" + "kind-of": "^6.0.0" } }, - "jest-worker": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", - "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", + "is-descriptor": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "dev": true, "requires": { - "merge-stream": "^2.0.0", - "supports-color": "^6.1.0" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "pretty-format": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.8.0.tgz", - "integrity": "sha512-P952T7dkrDEplsR+TuY7q3VXDae5Sr7zmQb12JU/NDQa/3CH7/QW0yvqLcGN6jL+zQFKaoJcPc+yJxMTGmosqw==", + "is-number": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "@jest/types": "^24.8.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, - "react-is": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", - "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==", + "isobject": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-6.0.3.tgz", + "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", "dev": true }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "micromatch": { + "version": "3.1.10", + "resolved": "http://r.cnpmjs.org/micromatch/download/micromatch-3.1.10.tgz", + "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "has-flag": "^3.0.0" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } } } }, - "jest-coverage-badges": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/jest-coverage-badges/-/jest-coverage-badges-1.1.2.tgz", - "integrity": "sha512-44A7i2xR6os8+fWk8ZRM6W4fKiD2jwKOLU9eB3iTIIWACd9RbdvmiCNpQZTOsUBhKvz7aQ/ASFhu5JOEhWUOlg==", + "jest-jasmine2": { + "version": "24.9.0", + "resolved": "http://r.cnpmjs.org/jest-jasmine2/download/jest-jasmine2-24.9.0.tgz", + "integrity": "sha1-H3sb0yQsF3TmKsq7NkbZavw75qA=", "dev": true, "requires": { - "mkdirp": "0.5.1" + "@babel/traverse": "^7.1.0", + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "co": "^4.6.0", + "expect": "^24.9.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "pretty-format": "^24.9.0", + "throat": "^4.0.0" } }, - "jest-diff": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.8.0.tgz", - "integrity": "sha512-wxetCEl49zUpJ/bvUmIFjd/o52J+yWcoc5ZyPq4/W1LUKGEhRYDIbP1KcF6t+PvqNrGAFk4/JhtxDq/Nnzs66g==", + "jest-leak-detector": { + "version": "24.9.0", + "resolved": "http://r.cnpmjs.org/jest-leak-detector/download/jest-leak-detector-24.9.0.tgz", + "integrity": "sha1-tmXep8dxAMXE99/LFTtlzwfc+Wo=", "dev": true, "requires": { - "chalk": "^2.0.1", - "diff-sequences": "^24.3.0", - "jest-get-type": "^24.8.0", - "pretty-format": "^24.8.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "jest-get-type": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.8.0.tgz", - "integrity": "sha512-RR4fo8jEmMD9zSz2nLbs2j0zvPpk/KCEz3a62jJWbd2ayNo0cb+KFRxPHVhE4ZmgGJEQp0fosmNz84IfqM8cMQ==", - "dev": true - }, - "pretty-format": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.8.0.tgz", - "integrity": "sha512-P952T7dkrDEplsR+TuY7q3VXDae5Sr7zmQb12JU/NDQa/3CH7/QW0yvqLcGN6jL+zQFKaoJcPc+yJxMTGmosqw==", - "dev": true, - "requires": { - "@jest/types": "^24.8.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" - } - }, - "react-is": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", - "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==", - "dev": true - } + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" } }, - "jest-docblock": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.3.0.tgz", - "integrity": "sha512-nlANmF9Yq1dufhFlKG9rasfQlrY7wINJbo3q01tu56Jv5eBU5jirylhF2O5ZBnLxzOVBGRDz/9NAwNyBtG4Nyg==", + "jest-matcher-utils": { + "version": "24.9.0", + "resolved": "http://r.cnpmjs.org/jest-matcher-utils/download/jest-matcher-utils-24.9.0.tgz", + "integrity": "sha1-9bNmHV5ijf/m3WUlHf2uDofDoHM=", "dev": true, "requires": { - "detect-newline": "^2.1.0" + "chalk": "^2.0.1", + "jest-diff": "^24.9.0", + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" } }, - "jest-each": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.8.0.tgz", - "integrity": "sha512-NrwK9gaL5+XgrgoCsd9svsoWdVkK4gnvyhcpzd6m487tXHqIdYeykgq3MKI1u4I+5Zf0tofr70at9dWJDeb+BA==", + "jest-message-util": { + "version": "24.9.0", + "resolved": "http://r.cnpmjs.org/jest-message-util/download/jest-message-util-24.9.0.tgz", + "integrity": "sha1-Un9UoeOA9eICqNEUmw7IcvQxGeM=", "dev": true, "requires": { - "@jest/types": "^24.8.0", + "@babel/code-frame": "^7.0.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/stack-utils": "^1.0.1", "chalk": "^2.0.1", - "jest-get-type": "^24.8.0", - "jest-util": "^24.8.0", - "pretty-format": "^24.8.0" + "micromatch": "^3.1.10", + "slash": "^2.0.0", + "stack-utils": "^1.0.1" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "arr-diff": { + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/arr-diff/download/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", "dev": true }, - "jest-get-type": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.8.0.tgz", - "integrity": "sha512-RR4fo8jEmMD9zSz2nLbs2j0zvPpk/KCEz3a62jJWbd2ayNo0cb+KFRxPHVhE4ZmgGJEQp0fosmNz84IfqM8cMQ==", + "array-unique": { + "version": "0.3.2", + "resolved": "http://r.cnpmjs.org/array-unique/download/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, - "pretty-format": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.8.0.tgz", - "integrity": "sha512-P952T7dkrDEplsR+TuY7q3VXDae5Sr7zmQb12JU/NDQa/3CH7/QW0yvqLcGN6jL+zQFKaoJcPc+yJxMTGmosqw==", + "braces": { + "version": "2.3.2", + "resolved": "http://r.cnpmjs.org/braces/download/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", "dev": true, "requires": { - "@jest/types": "^24.8.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } }, - "react-is": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", - "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==", - "dev": true - } - } - }, - "jest-environment-jsdom": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.8.0.tgz", - "integrity": "sha512-qbvgLmR7PpwjoFjM/sbuqHJt/NCkviuq9vus9NBn/76hhSidO+Z6Bn9tU8friecegbJL8gzZQEMZBQlFWDCwAQ==", - "dev": true, - "requires": { - "@jest/environment": "^24.8.0", - "@jest/fake-timers": "^24.8.0", - "@jest/types": "^24.8.0", - "jest-mock": "^24.8.0", - "jest-util": "^24.8.0", - "jsdom": "^11.5.1" - } - }, - "jest-environment-jsdom-global": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom-global/-/jest-environment-jsdom-global-1.2.0.tgz", - "integrity": "sha512-41cDl0OxzmFY/cnW0COUN+lnt2N2ks1r3V4fAKOnlZ9xIrGy0PNPan+Bz8HP+uQy/8bGV6T7J4Oi7X+h43It6g==", - "dev": true - }, - "jest-environment-node": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.8.0.tgz", - "integrity": "sha512-vIGUEScd1cdDgR6sqn2M08sJTRLQp6Dk/eIkCeO4PFHxZMOgy+uYLPMC4ix3PEfM5Au/x3uQ/5Tl0DpXXZsJ/Q==", - "dev": true, - "requires": { - "@jest/environment": "^24.8.0", - "@jest/fake-timers": "^24.8.0", - "@jest/types": "^24.8.0", - "jest-mock": "^24.8.0", - "jest-util": "^24.8.0" - } - }, - "jest-fetch-mock": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/jest-fetch-mock/-/jest-fetch-mock-2.1.2.tgz", - "integrity": "sha512-tcSR4Lh2bWLe1+0w/IwvNxeDocMI/6yIA2bijZ0fyWxC4kQ18lckQ1n7Yd40NKuisGmcGBRFPandRXrW/ti/Bw==", - "dev": true, - "requires": { - "cross-fetch": "^2.2.2", - "promise-polyfill": "^7.1.1" - } - }, - "jest-get-type": { - "version": "22.4.3", - "resolved": "http://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz", - "integrity": "sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==", - "dev": true - }, - "jest-haste-map": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.8.0.tgz", - "integrity": "sha512-ZBPRGHdPt1rHajWelXdqygIDpJx8u3xOoLyUBWRW28r3tagrgoepPrzAozW7kW9HrQfhvmiv1tncsxqHJO1onQ==", - "dev": true, - "requires": { - "@jest/types": "^24.8.0", - "anymatch": "^2.0.0", - "fb-watchman": "^2.0.0", - "fsevents": "^1.2.7", - "graceful-fs": "^4.1.15", - "invariant": "^2.2.4", - "jest-serializer": "^24.4.0", - "jest-util": "^24.8.0", - "jest-worker": "^24.6.0", - "micromatch": "^3.1.10", - "sane": "^4.0.3", - "walker": "^1.0.7" - }, - "dependencies": { - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - } - } - }, - "jest-jasmine2": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.8.0.tgz", - "integrity": "sha512-cEky88npEE5LKd5jPpTdDCLvKkdyklnaRycBXL6GNmpxe41F0WN44+i7lpQKa/hcbXaQ+rc9RMaM4dsebrYong==", - "dev": true, - "requires": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", - "chalk": "^2.0.1", - "co": "^4.6.0", - "expect": "^24.8.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^24.8.0", - "jest-matcher-utils": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-runtime": "^24.8.0", - "jest-snapshot": "^24.8.0", - "jest-util": "^24.8.0", - "pretty-format": "^24.8.0", - "throat": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "debug": { + "version": "2.6.9", + "resolved": "http://r.cnpmjs.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "http://r.cnpmjs.org/expand-brackets/download/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "http://r.cnpmjs.org/extglob/download/extglob-2.0.4.tgz", + "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/fill-range/download/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "http://r.cnpmjs.org/is-buffer/download/is-buffer-1.1.6.tgz", + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", "dev": true }, - "pretty-format": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.8.0.tgz", - "integrity": "sha512-P952T7dkrDEplsR+TuY7q3VXDae5Sr7zmQb12JU/NDQa/3CH7/QW0yvqLcGN6jL+zQFKaoJcPc+yJxMTGmosqw==", + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "dev": true, "requires": { - "@jest/types": "^24.8.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" + "kind-of": "^6.0.0" } }, - "react-is": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", - "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==", - "dev": true - } - } - }, - "jest-leak-detector": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.8.0.tgz", - "integrity": "sha512-cG0yRSK8A831LN8lIHxI3AblB40uhv0z+SsQdW3GoMMVcK+sJwrIIyax5tu3eHHNJ8Fu6IMDpnLda2jhn2pD/g==", - "dev": true, - "requires": { - "pretty-format": "^24.8.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true + "is-descriptor": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } }, - "pretty-format": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.8.0.tgz", - "integrity": "sha512-P952T7dkrDEplsR+TuY7q3VXDae5Sr7zmQb12JU/NDQa/3CH7/QW0yvqLcGN6jL+zQFKaoJcPc+yJxMTGmosqw==", + "is-number": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "@jest/types": "^24.8.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, - "react-is": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", - "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==", + "isobject": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true - } - } - }, - "jest-matcher-utils": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.8.0.tgz", - "integrity": "sha512-lex1yASY51FvUuHgm0GOVj7DCYEouWSlIYmCW7APSqB9v8mXmKSn5+sWVF0MhuASG0bnYY106/49JU1FZNl5hw==", - "dev": true, - "requires": { - "chalk": "^2.0.1", - "jest-diff": "^24.8.0", - "jest-get-type": "^24.8.0", - "pretty-format": "^24.8.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + }, + "kind-of": { + "version": "6.0.3", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-6.0.3.tgz", + "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", "dev": true }, - "jest-get-type": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.8.0.tgz", - "integrity": "sha512-RR4fo8jEmMD9zSz2nLbs2j0zvPpk/KCEz3a62jJWbd2ayNo0cb+KFRxPHVhE4ZmgGJEQp0fosmNz84IfqM8cMQ==", + "micromatch": { + "version": "3.1.10", + "resolved": "http://r.cnpmjs.org/micromatch/download/micromatch-3.1.10.tgz", + "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/slash/download/slash-2.0.0.tgz", + "integrity": "sha1-3lUoUaF1nfOo8gZTVEL17E3eq0Q=", "dev": true }, - "pretty-format": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.8.0.tgz", - "integrity": "sha512-P952T7dkrDEplsR+TuY7q3VXDae5Sr7zmQb12JU/NDQa/3CH7/QW0yvqLcGN6jL+zQFKaoJcPc+yJxMTGmosqw==", + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "@jest/types": "^24.8.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } - }, - "react-is": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", - "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==", - "dev": true } } }, - "jest-message-util": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.8.0.tgz", - "integrity": "sha512-p2k71rf/b6ns8btdB0uVdljWo9h0ovpnEe05ZKWceQGfXYr4KkzgKo3PBi8wdnd9OtNh46VpNIJynUn/3MKm1g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", - "@types/stack-utils": "^1.0.1", - "chalk": "^2.0.1", - "micromatch": "^3.1.10", - "slash": "^2.0.0", - "stack-utils": "^1.0.1" - } - }, "jest-mock": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.8.0.tgz", - "integrity": "sha512-6kWugwjGjJw+ZkK4mDa0Df3sDlUTsV47MSrT0nGQ0RBWJbpODDQ8MHDVtGtUYBne3IwZUhtB7elxHspU79WH3A==", + "version": "24.9.0", + "resolved": "http://r.cnpmjs.org/jest-mock/download/jest-mock-24.9.0.tgz", + "integrity": "sha1-wig1VB7jebkIZzrVEIeiGFwT8cY=", "dev": true, "requires": { - "@jest/types": "^24.8.0" + "@jest/types": "^24.9.0" } }, "jest-pnp-resolver": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz", - "integrity": "sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==", + "version": "1.2.2", + "resolved": "https://registry.npm.taobao.org/jest-pnp-resolver/download/jest-pnp-resolver-1.2.2.tgz?cache=0&sync_timestamp=1592991657938&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-pnp-resolver%2Fdownload%2Fjest-pnp-resolver-1.2.2.tgz", + "integrity": "sha1-twSsCuAoqJEIpNBAs/kZ393I4zw=", "dev": true }, "jest-regex-util": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.3.0.tgz", - "integrity": "sha512-tXQR1NEOyGlfylyEjg1ImtScwMq8Oh3iJbGTjN7p0J23EuVX1MA8rwU69K4sLbCmwzgCUbVkm0FkSF9TdzOhtg==", + "version": "24.9.0", + "resolved": "http://r.cnpmjs.org/jest-regex-util/download/jest-regex-util-24.9.0.tgz", + "integrity": "sha1-wT+zOAveIr9ldUMsST6o/jeWVjY=", "dev": true }, "jest-resolve": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.8.0.tgz", - "integrity": "sha512-+hjSzi1PoRvnuOICoYd5V/KpIQmkAsfjFO71458hQ2Whi/yf1GDeBOFj8Gxw4LrApHsVJvn5fmjcPdmoUHaVKw==", + "version": "24.9.0", + "resolved": "http://r.cnpmjs.org/jest-resolve/download/jest-resolve-24.9.0.tgz", + "integrity": "sha1-3/BMdoevNMTdflJIktnPd+XRcyE=", "dev": true, "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "browser-resolve": "^1.11.3", "chalk": "^2.0.1", "jest-pnp-resolver": "^1.2.1", @@ -14903,408 +14045,134 @@ } }, "jest-resolve-dependencies": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.8.0.tgz", - "integrity": "sha512-hyK1qfIf/krV+fSNyhyJeq3elVMhK9Eijlwy+j5jqmZ9QsxwKBiP6qukQxaHtK8k6zql/KYWwCTQ+fDGTIJauw==", + "version": "24.9.0", + "resolved": "http://r.cnpmjs.org/jest-resolve-dependencies/download/jest-resolve-dependencies-24.9.0.tgz", + "integrity": "sha1-rQVRmJWcTPuopPBmxnOj8HhlB6s=", "dev": true, "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "jest-regex-util": "^24.3.0", - "jest-snapshot": "^24.8.0" + "jest-snapshot": "^24.9.0" } }, "jest-runner": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.8.0.tgz", - "integrity": "sha512-utFqC5BaA3JmznbissSs95X1ZF+d+4WuOWwpM9+Ak356YtMhHE/GXUondZdcyAAOTBEsRGAgH/0TwLzfI9h7ow==", + "version": "24.9.0", + "resolved": "http://r.cnpmjs.org/jest-runner/download/jest-runner-24.9.0.tgz", + "integrity": "sha1-V0+v29VEVcKzS0vfQ2WiOFf830I=", "dev": true, "requires": { "@jest/console": "^24.7.1", - "@jest/environment": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", "chalk": "^2.4.2", "exit": "^0.1.2", "graceful-fs": "^4.1.15", - "jest-config": "^24.8.0", + "jest-config": "^24.9.0", "jest-docblock": "^24.3.0", - "jest-haste-map": "^24.8.0", - "jest-jasmine2": "^24.8.0", - "jest-leak-detector": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-resolve": "^24.8.0", - "jest-runtime": "^24.8.0", - "jest-util": "^24.8.0", + "jest-haste-map": "^24.9.0", + "jest-jasmine2": "^24.9.0", + "jest-leak-detector": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-resolve": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-util": "^24.9.0", "jest-worker": "^24.6.0", "source-map-support": "^0.5.6", "throat": "^4.0.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "jest-runtime": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.8.0.tgz", - "integrity": "sha512-Mq0aIXhvO/3bX44ccT+czU1/57IgOMyy80oM0XR/nyD5zgBcesF84BPabZi39pJVA6UXw+fY2Q1N+4BiVUBWOA==", + "version": "24.9.0", + "resolved": "http://r.cnpmjs.org/jest-runtime/download/jest-runtime-24.9.0.tgz", + "integrity": "sha1-nxRYOvak9zFKap2fAibhp4HI5Kw=", "dev": true, "requires": { "@jest/console": "^24.7.1", - "@jest/environment": "^24.8.0", + "@jest/environment": "^24.9.0", "@jest/source-map": "^24.3.0", - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", - "@types/yargs": "^12.0.2", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/yargs": "^13.0.0", "chalk": "^2.0.1", "exit": "^0.1.2", "glob": "^7.1.3", "graceful-fs": "^4.1.15", - "jest-config": "^24.8.0", - "jest-haste-map": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-mock": "^24.8.0", + "jest-config": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0", "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.8.0", - "jest-snapshot": "^24.8.0", - "jest-util": "^24.8.0", - "jest-validate": "^24.8.0", + "jest-resolve": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", "realpath-native": "^1.1.0", "slash": "^2.0.0", "strip-bom": "^3.0.0", - "yargs": "^12.0.2" + "yargs": "^13.3.0" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true - }, - "is-fullwidth-code-point": { + "slash": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "jest-get-type": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.8.0.tgz", - "integrity": "sha512-RR4fo8jEmMD9zSz2nLbs2j0zvPpk/KCEz3a62jJWbd2ayNo0cb+KFRxPHVhE4ZmgGJEQp0fosmNz84IfqM8cMQ==", - "dev": true - }, - "jest-validate": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.8.0.tgz", - "integrity": "sha512-+/N7VOEMW1Vzsrk3UWBDYTExTPwf68tavEPKDnJzrC6UlHtUDU/fuEdXqFoHzv9XnQ+zW6X3qMZhJ3YexfeLDA==", - "dev": true, - "requires": { - "@jest/types": "^24.8.0", - "camelcase": "^5.0.0", - "chalk": "^2.0.1", - "jest-get-type": "^24.8.0", - "leven": "^2.1.0", - "pretty-format": "^24.8.0" - } - }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "dev": true, - "requires": { - "invert-kv": "^2.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, - "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "resolved": "https://registry.npm.taobao.org/slash/download/slash-2.0.0.tgz", + "integrity": "sha1-3lUoUaF1nfOo8gZTVEL17E3eq0Q=", "dev": true }, - "pretty-format": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.8.0.tgz", - "integrity": "sha512-P952T7dkrDEplsR+TuY7q3VXDae5Sr7zmQb12JU/NDQa/3CH7/QW0yvqLcGN6jL+zQFKaoJcPc+yJxMTGmosqw==", - "dev": true, - "requires": { - "@jest/types": "^24.8.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" - } - }, - "react-is": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", - "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - } - } - }, "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", - "dev": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" - } - }, - "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } } } }, "jest-serializer": { - "version": "24.4.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.4.0.tgz", - "integrity": "sha512-k//0DtglVstc1fv+GY/VHDIjrtNjdYvYjMlbLUed4kxrE92sIUewOi5Hj3vrpB8CXfkJntRPDRjCrCvUhBdL8Q==", + "version": "24.9.0", + "resolved": "http://r.cnpmjs.org/jest-serializer/download/jest-serializer-24.9.0.tgz", + "integrity": "sha1-5tfX75bTHouQeacUdUxdXFgojnM=", "dev": true }, "jest-snapshot": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.8.0.tgz", - "integrity": "sha512-5ehtWoc8oU9/cAPe6fez6QofVJLBKyqkY2+TlKTOf0VllBB/mqUNdARdcjlZrs9F1Cv+/HKoCS/BknT0+tmfPg==", + "version": "24.9.0", + "resolved": "http://r.cnpmjs.org/jest-snapshot/download/jest-snapshot-24.9.0.tgz", + "integrity": "sha1-7I6cpPLsDFyHro+SXPl0l7DpUbo=", "dev": true, "requires": { "@babel/types": "^7.0.0", - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "chalk": "^2.0.1", - "expect": "^24.8.0", - "jest-diff": "^24.8.0", - "jest-matcher-utils": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-resolve": "^24.8.0", + "expect": "^24.9.0", + "jest-diff": "^24.9.0", + "jest-get-type": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-resolve": "^24.9.0", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", - "pretty-format": "^24.8.0", - "semver": "^5.5.0" + "pretty-format": "^24.9.0", + "semver": "^6.2.0" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "pretty-format": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.8.0.tgz", - "integrity": "sha512-P952T7dkrDEplsR+TuY7q3VXDae5Sr7zmQb12JU/NDQa/3CH7/QW0yvqLcGN6jL+zQFKaoJcPc+yJxMTGmosqw==", - "dev": true, - "requires": { - "@jest/types": "^24.8.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" - } - }, - "react-is": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", - "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==", + "semver": { + "version": "6.3.0", + "resolved": "http://r.cnpmjs.org/semver/download/semver-6.3.0.tgz", + "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", "dev": true } } }, "jest-util": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.8.0.tgz", - "integrity": "sha512-DYZeE+XyAnbNt0BG1OQqKy/4GVLPtzwGx5tsnDrFcax36rVE3lTA5fbvgmbVPUZf9w77AJ8otqR4VBbfFJkUZA==", + "version": "24.9.0", + "resolved": "http://r.cnpmjs.org/jest-util/download/jest-util-24.9.0.tgz", + "integrity": "sha1-c5aBTkhTbS6Fo33j5MQx18sUAWI=", "dev": true, "requires": { - "@jest/console": "^24.7.1", - "@jest/fake-timers": "^24.8.0", - "@jest/source-map": "^24.3.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", + "@jest/console": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/source-map": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", "callsites": "^3.0.0", "chalk": "^2.0.1", "graceful-fs": "^4.1.15", @@ -15316,88 +14184,82 @@ "dependencies": { "callsites": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "resolved": "http://r.cnpmjs.org/callsites/download/callsites-3.1.0.tgz", + "integrity": "sha1-s2MKvYlDQy9Us/BRkjjjPNffL3M=", "dev": true }, "ci-info": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "resolved": "http://r.cnpmjs.org/ci-info/download/ci-info-2.0.0.tgz", + "integrity": "sha1-Z6npZL4xpR4V5QENWObxKDQAL0Y=", "dev": true }, "is-ci": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "resolved": "http://r.cnpmjs.org/is-ci/download/is-ci-2.0.0.tgz", + "integrity": "sha1-a8YzQYGBDgS1wis9WJ/cpVAmQEw=", "dev": true, "requires": { "ci-info": "^2.0.0" } + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/slash/download/slash-2.0.0.tgz", + "integrity": "sha1-3lUoUaF1nfOo8gZTVEL17E3eq0Q=", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "http://r.cnpmjs.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true } } }, "jest-validate": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-23.6.0.tgz", - "integrity": "sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A==", + "version": "24.9.0", + "resolved": "http://r.cnpmjs.org/jest-validate/download/jest-validate-24.9.0.tgz", + "integrity": "sha1-B3XFU2DRc82FTkAYB1bU/1Le+Ks=", "dev": true, "requires": { + "@jest/types": "^24.9.0", + "camelcase": "^5.3.1", "chalk": "^2.0.1", - "jest-get-type": "^22.1.0", - "leven": "^2.1.0", - "pretty-format": "^23.6.0" + "jest-get-type": "^24.9.0", + "leven": "^3.1.0", + "pretty-format": "^24.9.0" } }, "jest-watcher": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.8.0.tgz", - "integrity": "sha512-SBjwHt5NedQoVu54M5GEx7cl7IGEFFznvd/HNT8ier7cCAx/Qgu9ZMlaTQkvK22G1YOpcWBLQPFSImmxdn3DAw==", + "version": "24.9.0", + "resolved": "http://r.cnpmjs.org/jest-watcher/download/jest-watcher-24.9.0.tgz", + "integrity": "sha1-S1bl0c7/AF9biOUo3Jr8jdTtKzs=", "dev": true, "requires": { - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", - "@types/yargs": "^12.0.9", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/yargs": "^13.0.0", "ansi-escapes": "^3.0.0", "chalk": "^2.0.1", - "jest-util": "^24.8.0", + "jest-util": "^24.9.0", "string-length": "^2.0.0" - }, - "dependencies": { - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - } } }, "jest-worker": { - "version": "24.6.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.6.0.tgz", - "integrity": "sha512-jDwgW5W9qGNvpI1tNnvajh0a5IE/PuGLFmHk6aR/BZFz8tSgGw17GsDPXAJ6p91IvYDjOw8GpFbvvZGAK+DPQQ==", + "version": "24.9.0", + "resolved": "http://r.cnpmjs.org/jest-worker/download/jest-worker-24.9.0.tgz", + "integrity": "sha1-Xb/bWy0yLphWeJgjipaXvM5ns+U=", "dev": true, "requires": { - "merge-stream": "^1.0.1", + "merge-stream": "^2.0.0", "supports-color": "^6.1.0" }, "dependencies": { - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "supports-color": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -15406,26 +14268,21 @@ } }, "js-base64": { - "version": "2.4.9", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.9.tgz", - "integrity": "sha512-xcinL3AuDJk7VSzsHgb9DvvIXayBbadtMZ4HFPx8rUszbW1MuNMlwYVC4zzCZ6e1sqZpnNS5ZFYOhXqA39T7LQ==", + "version": "2.6.4", + "resolved": "https://registry.npm.taobao.org/js-base64/download/js-base64-2.6.4.tgz", + "integrity": "sha1-9OaGxd4eofhn28rT1G2WlCjfmMQ=", "dev": true }, "js-cookie": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", - "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==" - }, - "js-levenshtein": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", - "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", + "resolved": "http://r.cnpmjs.org/js-cookie/download/js-cookie-2.2.1.tgz", + "integrity": "sha1-aeEG3F1YBolFYpAqpbrsN0Tpsrg=", "dev": true }, "js-tokens": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "resolved": "http://r.cnpmjs.org/js-tokens/download/js-tokens-4.0.0.tgz", + "integrity": "sha1-GSA/tZmR35jjoocFDUZHzerzJJk=" }, "js-yaml": { "version": "3.7.0", @@ -15435,6 +14292,14 @@ "requires": { "argparse": "^1.0.7", "esprima": "^2.6.0" + }, + "dependencies": { + "esprima": { + "version": "2.7.3", + "resolved": "http://r.cnpmjs.org/esprima/download/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + } } }, "jsbn": { @@ -15445,8 +14310,8 @@ }, "jsdom": { "version": "11.12.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", - "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", + "resolved": "http://r.cnpmjs.org/jsdom/download/jsdom-11.12.0.tgz", + "integrity": "sha1-GoDUDd03ih3lllbp5txaO6hle8g=", "dev": true, "requires": { "abab": "^2.0.0", @@ -15479,22 +14344,31 @@ "dependencies": { "parse5": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "resolved": "http://r.cnpmjs.org/parse5/download/parse5-4.0.0.tgz", + "integrity": "sha1-bXhlbj2o14tOwLkG98CO8d/j9gg=", "dev": true + }, + "ws": { + "version": "5.2.2", + "resolved": "http://r.cnpmjs.org/ws/download/ws-5.2.2.tgz", + "integrity": "sha1-3/7xSGa46NyRM1glFNG++vlumA8=", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } } } }, "jsesc": { "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "resolved": "http://r.cnpmjs.org/jsesc/download/jsesc-2.5.2.tgz", + "integrity": "sha1-gFZNLkg9rPbo7yCWUKZ98/DCg6Q=", "dev": true }, "json-parse-better-errors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "resolved": "http://r.cnpmjs.org/json-parse-better-errors/download/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk=", "dev": true }, "json-schema": { @@ -15504,14 +14378,14 @@ "dev": true }, "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "version": "0.4.1", + "resolved": "http://r.cnpmjs.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz", + "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=", "dev": true }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "resolved": "https://registry.npm.taobao.org/json-stable-stringify-without-jsonify/download/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, @@ -15523,32 +14397,38 @@ }, "json3": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", - "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", + "resolved": "http://r.cnpmjs.org/json3/download/json3-3.3.3.tgz", + "integrity": "sha1-f8EON1/FrkLEcFpcwKpvYr4wW4E=", "dev": true }, "json5": { - "version": "0.5.1", - "resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true + "version": "2.1.3", + "resolved": "http://r.cnpmjs.org/json5/download/json5-2.1.3.tgz", + "integrity": "sha1-ybD3+pIzv+WAf+ZvzzpWF+1ZfUM=", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } }, "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "version": "6.0.1", + "resolved": "https://registry.npm.taobao.org/jsonfile/download/jsonfile-6.0.1.tgz", + "integrity": "sha1-mJZsuiFDeMjIS4LghZB7QL9hQXk=", "dev": true, "requires": { - "graceful-fs": "^4.1.6" - }, - "dependencies": { - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true, - "optional": true - } + "graceful-fs": "^4.1.6", + "universalify": "^1.0.0" + } + }, + "jsonlint-mod": { + "version": "1.7.6", + "resolved": "https://registry.npm.taobao.org/jsonlint-mod/download/jsonlint-mod-1.7.6.tgz", + "integrity": "sha1-bxxMUf21wgAkiaBmXj4ZoxZ0Mxk=", + "dev": true, + "requires": { + "JSV": "^4.0.2", + "chalk": "^2.4.2", + "underscore": "^1.9.1" } }, "jsprim": { @@ -15600,12 +14480,53 @@ } }, "jsx-ast-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz", - "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=", + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/jsx-ast-utils/download/jsx-ast-utils-3.0.0.tgz?cache=0&sync_timestamp=1602054195048&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjsx-ast-utils%2Fdownload%2Fjsx-ast-utils-3.0.0.tgz", + "integrity": "sha1-D0nVCTuvpLRdP+AhR9i0D/xsdDg=", "dev": true, "requires": { - "array-includes": "^3.0.3" + "array-includes": "^3.1.1", + "object.assign": "^4.1.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.0-next.1", + "resolved": "https://registry.npm.taobao.org/es-abstract/download/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha1-bjoKS9pxflAjqzuOkL7DYQjSLGg=", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npm.taobao.org/is-callable/download/is-callable-1.2.2.tgz", + "integrity": "sha1-x8ZxXNItTdtI0+GZcCI6zquwgNk=", + "dev": true + }, + "object.assign": { + "version": "4.1.1", + "resolved": "https://registry.npm.taobao.org/object.assign/download/object.assign-4.1.1.tgz", + "integrity": "sha1-MDhnpmbN1Bk27N7fsfjz4ypHjN0=", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.0", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + } } }, "jsx-loader": { @@ -15618,6 +14539,24 @@ "loader-utils": "^0.2.2" }, "dependencies": { + "big.js": { + "version": "3.2.0", + "resolved": "http://r.cnpmjs.org/big.js/download/big.js-3.2.0.tgz", + "integrity": "sha1-pfwpi4G54Nyi5FiCR4S2XFK6WI4=", + "dev": true + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "http://r.cnpmjs.org/emojis-list/download/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "http://r.cnpmjs.org/json5/download/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, "loader-utils": { "version": "0.2.17", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", @@ -15633,39 +14572,50 @@ } }, "just-extend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.0.2.tgz", - "integrity": "sha512-FrLwOgm+iXrPV+5zDU6Jqu4gCRXbWEQg2O3SKONsWE4w7AXFRkryS53bpWdaL9cNol+AmR3AEYz6kn+o0fCPnw==", + "version": "4.1.0", + "resolved": "https://r.cnpmjs.org/just-extend/download/just-extend-4.1.0.tgz", + "integrity": "sha1-cnikAn2IlgFkDuDODloAuZJGfaQ=", "dev": true }, "killable": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", + "resolved": "http://r.cnpmjs.org/killable/download/killable-1.0.1.tgz", + "integrity": "sha1-TIzkQRh6Bhx0dPuHygjipjgZSJI=", "dev": true }, "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "http://r.cnpmjs.org/is-buffer/download/is-buffer-1.1.6.tgz", + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", + "dev": true + } + } }, "kleur": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "resolved": "https://r.cnpmjs.org/kleur/download/kleur-3.0.3.tgz", + "integrity": "sha1-p5yezIbuHOP6YgbRIWxQHxR/wH4=", "dev": true }, "known-css-properties": { "version": "0.11.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.11.0.tgz", - "integrity": "sha512-bEZlJzXo5V/ApNNa5z375mJC6Nrz4vG43UgcSCrg2OHC+yuB6j0iDSrY7RQ/+PRofFB03wNIIt9iXIVLr4wc7w==", + "resolved": "https://r.cnpmjs.org/known-css-properties/download/known-css-properties-0.11.0.tgz", + "integrity": "sha1-DaeE8RXqd8drgVNtcFLpDubIaoo=", "dev": true }, "laggard": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/laggard/-/laggard-2.0.1.tgz", - "integrity": "sha512-XCUGeE3r3VWxM8CV9aw+GjG3v3vTInyCf3p9YUo1SCTkM4N93/JaRH/4Lpz0hDZnaEQsArtAbp+rYic3PdTpbg==", + "resolved": "https://r.cnpmjs.org/laggard/download/laggard-2.0.1.tgz", + "integrity": "sha1-s06HpWh3iLlTfjTBsFYP7Y+MDNk=", "dev": true, "requires": { "minimist": "^1.2.0", @@ -15679,37 +14629,29 @@ "postcss-will-change": "^2.0.0", "read-file-stdin": "^0.2.0", "write-file-stdout": "0.0.2" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "^1.0.0" } }, "left-pad": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", - "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", + "resolved": "http://r.cnpmjs.org/left-pad/download/left-pad-1.3.0.tgz", + "integrity": "sha1-W4o6d2Xf4AEmHd6RVYnngvjJTR4=", "dev": true }, "leven": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", - "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", + "version": "3.1.0", + "resolved": "http://r.cnpmjs.org/leven/download/leven-3.1.0.tgz", + "integrity": "sha1-d4kd6DQGTMy6gq54QrtrFKE+1/I=", "dev": true }, + "levenary": { + "version": "1.1.1", + "resolved": "http://r.cnpmjs.org/levenary/download/levenary-1.1.1.tgz", + "integrity": "sha1-hCqe6Y0gdap/ru2+MmeekgX0b3c=", + "dev": true, + "requires": { + "leven": "^3.1.0" + } + }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -15738,8 +14680,8 @@ }, "lint-staged": { "version": "7.3.0", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-7.3.0.tgz", - "integrity": "sha512-AXk40M9DAiPi7f4tdJggwuKIViUplYtVj1os1MVEteW7qOkU50EOehayCfO9TsoGK24o/EsWb41yrEgfJDDjCw==", + "resolved": "https://r.cnpmjs.org/lint-staged/download/lint-staged-7.3.0.tgz", + "integrity": "sha1-kP8z5cph7T26w1tvZQLb79wNtY0=", "dev": true, "requires": { "chalk": "^2.3.1", @@ -15766,21 +14708,411 @@ "stringify-object": "^3.2.2" }, "dependencies": { - "is-glob": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/arr-diff/download/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "http://r.cnpmjs.org/array-unique/download/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "http://r.cnpmjs.org/braces/download/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "http://r.cnpmjs.org/cross-spawn/download/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.9.0", + "resolved": "http://r.cnpmjs.org/execa/download/execa-0.9.0.tgz", + "integrity": "sha1-rbfOYs+YUHH2BYDetKiLnjRxLQE=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "http://r.cnpmjs.org/expand-brackets/download/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "http://r.cnpmjs.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "http://r.cnpmjs.org/extglob/download/extglob-2.0.4.tgz", + "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "resolved": "http://r.cnpmjs.org/fill-range/download/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/get-stream/download/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "http://r.cnpmjs.org/is-buffer/download/is-buffer-1.1.6.tgz", + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", + "dev": true + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "dev": true, "requires": { - "is-extglob": "^2.1.1" + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "http://r.cnpmjs.org/is-stream/download/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "jest-get-type": { + "version": "22.4.3", + "resolved": "http://r.cnpmjs.org/jest-get-type/download/jest-get-type-22.4.3.tgz", + "integrity": "sha1-46hQTYR5NC3UQgI2syKGnxiQDOQ=", + "dev": true + }, + "jest-validate": { + "version": "23.6.0", + "resolved": "http://r.cnpmjs.org/jest-validate/download/jest-validate-23.6.0.tgz", + "integrity": "sha1-NnYfmdHtM/zUJbTkxVldYrZZdHQ=", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "jest-get-type": "^22.1.0", + "leven": "^2.1.0", + "pretty-format": "^23.6.0" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-6.0.3.tgz", + "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", + "dev": true + }, + "leven": { + "version": "2.1.0", + "resolved": "http://r.cnpmjs.org/leven/download/leven-2.1.0.tgz", + "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", + "dev": true + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "http://r.cnpmjs.org/lru-cache/download/lru-cache-4.1.5.tgz", + "integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "http://r.cnpmjs.org/micromatch/download/micromatch-3.1.10.tgz", + "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/pify/download/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "pretty-format": { + "version": "23.6.0", + "resolved": "http://r.cnpmjs.org/pretty-format/download/pretty-format-23.6.0.tgz", + "integrity": "sha1-XqrI7razO5h7f+YJfqaooUarV2A=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0", + "ansi-styles": "^3.2.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } + }, + "yallist": { + "version": "2.1.2", + "resolved": "http://r.cnpmjs.org/yallist/download/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true } } }, "listr": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.2.tgz", - "integrity": "sha512-vmaNJ1KlGuGWShHI35X/F8r9xxS0VTHh9GejVXwSN20fG5xpq3Jh4bJbnumoT6q5EDM/8/YP1z3YMtQbFmhuXw==", + "version": "0.14.3", + "resolved": "https://r.cnpmjs.org/listr/download/listr-0.14.3.tgz", + "integrity": "sha1-L+qQlgTkNL5GTFC926DUlpKPpYY=", "dev": true, "requires": { "@samverschueren/stream-to-observable": "^0.3.0", @@ -15788,10 +15120,24 @@ "is-promise": "^2.1.0", "is-stream": "^1.1.0", "listr-silent-renderer": "^1.1.1", - "listr-update-renderer": "^0.4.0", - "listr-verbose-renderer": "^0.4.0", - "p-map": "^1.1.1", - "rxjs": "^6.1.0" + "listr-update-renderer": "^0.5.0", + "listr-verbose-renderer": "^0.5.0", + "p-map": "^2.0.0", + "rxjs": "^6.3.3" + }, + "dependencies": { + "is-stream": { + "version": "1.1.0", + "resolved": "http://r.cnpmjs.org/is-stream/download/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "p-map": { + "version": "2.1.0", + "resolved": "http://r.cnpmjs.org/p-map/download/p-map-2.1.0.tgz", + "integrity": "sha1-MQko/u+cnsxltosXaTAYpmXOoXU=", + "dev": true + } } }, "listr-silent-renderer": { @@ -15801,9 +15147,9 @@ "dev": true }, "listr-update-renderer": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.4.0.tgz", - "integrity": "sha1-NE2YDaLKLosUW6MFkI8yrj9MyKc=", + "version": "0.5.0", + "resolved": "https://r.cnpmjs.org/listr-update-renderer/download/listr-update-renderer-0.5.0.tgz", + "integrity": "sha1-Tqg2hUinuK7LfgbYyVy0WuLt5qI=", "dev": true, "requires": { "chalk": "^1.1.3", @@ -15812,10 +15158,16 @@ "figures": "^1.7.0", "indent-string": "^3.0.0", "log-symbols": "^1.0.2", - "log-update": "^1.0.2", + "log-update": "^2.3.0", "strip-ansi": "^3.0.1" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", @@ -15835,6 +15187,12 @@ "supports-color": "^2.0.0" } }, + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npm.taobao.org/indent-string/download/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "dev": true + }, "log-symbols": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", @@ -15844,6 +15202,15 @@ "chalk": "^1.0.0" } }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", @@ -15853,47 +15220,31 @@ } }, "listr-verbose-renderer": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz", - "integrity": "sha1-ggb0z21S3cWCfl/RSYng6WWTOjU=", + "version": "0.5.0", + "resolved": "https://r.cnpmjs.org/listr-verbose-renderer/download/listr-verbose-renderer-0.5.0.tgz", + "integrity": "sha1-8RMhZ1NepMEmEQK58o2sfLoeA9s=", "dev": true, "requires": { - "chalk": "^1.1.3", - "cli-cursor": "^1.0.2", + "chalk": "^2.4.1", + "cli-cursor": "^2.1.0", "date-fns": "^1.27.2", - "figures": "^1.7.0" + "figures": "^2.0.0" }, "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, "date-fns": { "version": "1.30.1", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", - "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==", + "resolved": "http://r.cnpmjs.org/date-fns/download/date-fns-1.30.1.tgz", + "integrity": "sha1-LnG/CxGRU9u0zE6I2epaz7UNwFw=", "dev": true }, - "supports-color": { + "figures": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true + "resolved": "http://r.cnpmjs.org/figures/download/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } } } }, @@ -15910,12 +15261,6 @@ "strip-bom": "^2.0.0" }, "dependencies": { - "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", - "dev": true - }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", @@ -15924,61 +15269,34 @@ "requires": { "error-ex": "^1.2.0" } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } } } }, "loader-runner": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "resolved": "http://r.cnpmjs.org/loader-runner/download/loader-runner-2.4.0.tgz", + "integrity": "sha1-7UcGa/5TTX6ExMe5mYwqdWB9k1c=", "dev": true }, "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "version": "1.4.0", + "resolved": "http://r.cnpmjs.org/loader-utils/download/loader-utils-1.4.0.tgz", + "integrity": "sha1-xXm140yzSxp07cbB+za/o3HVphM=", "dev": true, "requires": { "big.js": "^5.2.2", - "emojis-list": "^2.0.0", + "emojis-list": "^3.0.0", "json5": "^1.0.1" }, "dependencies": { - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, "json5": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "resolved": "http://r.cnpmjs.org/json5/download/json5-1.0.1.tgz", + "integrity": "sha1-d5+wAYYE+oVOrL9iUhgNg1Q+Pb4=", "dev": true, "requires": { "minimist": "^1.2.0" } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true } } }, @@ -15993,9 +15311,9 @@ } }, "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + "version": "4.17.19", + "resolved": "https://registry.npm.taobao.org/lodash/download/lodash-4.17.19.tgz?cache=0&sync_timestamp=1594336698346&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.19.tgz", + "integrity": "sha1-5I3e2+MLMyF4PFtDAfvTU7weSks=" }, "lodash._basecopy": { "version": "3.0.1", @@ -16058,13 +15376,10 @@ "dev": true }, "lodash.escape": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", - "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", - "dev": true, - "requires": { - "lodash._root": "^3.0.0" - } + "version": "4.0.1", + "resolved": "https://r.cnpmjs.org/lodash.escape/download/lodash.escape-4.0.1.tgz", + "integrity": "sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg=", + "dev": true }, "lodash.flattendeep": { "version": "4.4.0", @@ -16084,30 +15399,12 @@ "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", "dev": true }, - "lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=", - "dev": true - }, "lodash.isequal": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", "dev": true }, - "lodash.isregexp": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isregexp/-/lodash.isregexp-4.0.1.tgz", - "integrity": "sha1-4T5kezDNVZdSoEzZEghvr32hwws=", - "dev": true - }, - "lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", - "dev": true - }, "lodash.keys": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", @@ -16137,37 +15434,23 @@ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", "dev": true }, - "lodash.tail": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz", - "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=", - "dev": true - }, "lodash.template": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", - "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", + "version": "4.5.0", + "resolved": "http://r.cnpmjs.org/lodash.template/download/lodash.template-4.5.0.tgz", + "integrity": "sha1-+XYZXPPzR9DV9SSDVp/oAxzM6Ks=", "dev": true, "requires": { - "lodash._basecopy": "^3.0.0", - "lodash._basetostring": "^3.0.0", - "lodash._basevalues": "^3.0.0", - "lodash._isiterateecall": "^3.0.0", "lodash._reinterpolate": "^3.0.0", - "lodash.escape": "^3.0.0", - "lodash.keys": "^3.0.0", - "lodash.restparam": "^3.0.0", - "lodash.templatesettings": "^3.0.0" + "lodash.templatesettings": "^4.0.0" } }, "lodash.templatesettings": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", - "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", + "version": "4.2.0", + "resolved": "http://r.cnpmjs.org/lodash.templatesettings/download/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha1-5IExDwSdPPbUfpEq0JMTsVTw+zM=", "dev": true, "requires": { - "lodash._reinterpolate": "^3.0.0", - "lodash.escape": "^3.0.0" + "lodash._reinterpolate": "^3.0.0" } }, "lodash.uniq": { @@ -16178,8 +15461,8 @@ }, "log-chopper": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-chopper/-/log-chopper-1.0.2.tgz", - "integrity": "sha512-tEWS6Fb+Xv0yLChJ6saA1DP3H1yPL0PfiIN7SDJ+U/CyP+fD4G/dhKfow+P5UuJWi6BdE4mUcPkJclGXCWxDrg==", + "resolved": "https://r.cnpmjs.org/log-chopper/download/log-chopper-1.0.2.tgz", + "integrity": "sha1-qI2npHqfDlEe2k1eHchA4Or0VHo=", "dev": true, "requires": { "byline": "5.x" @@ -16187,45 +15470,89 @@ }, "log-symbols": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "resolved": "https://r.cnpmjs.org/log-symbols/download/log-symbols-2.2.0.tgz", + "integrity": "sha1-V0Dhxdbw39pK2TI7UzIQfva0xAo=", "dev": true, "requires": { "chalk": "^2.0.1" } }, "log-update": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-1.0.2.tgz", - "integrity": "sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE=", + "version": "2.3.0", + "resolved": "https://r.cnpmjs.org/log-update/download/log-update-2.3.0.tgz", + "integrity": "sha1-iDKP19HOeTiykoN0bwsbwSayRwg=", "dev": true, "requires": { - "ansi-escapes": "^1.0.0", - "cli-cursor": "^1.0.2" + "ansi-escapes": "^3.0.0", + "cli-cursor": "^2.0.0", + "wrap-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz", + "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/wrap-ansi/download/wrap-ansi-3.0.1.tgz", + "integrity": "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0" + } + } } }, "loglevel": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.6.tgz", - "integrity": "sha512-Sgr5lbboAUBo3eXCSPL4/KoVz3ROKquOjcctxmHIt+vol2DrqTQe3SwkKKuYhEiWB5kYa13YyopJ69deJ1irzQ==", + "version": "1.6.8", + "resolved": "http://r.cnpmjs.org/loglevel/download/loglevel-1.6.8.tgz", + "integrity": "sha1-iiX7ddCSIw7NRFcnDYC1TigBEXE=", "dev": true }, "lolex": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-4.2.0.tgz", - "integrity": "sha512-gKO5uExCXvSm6zbF562EvM+rd1kQDnB9AZBbiQVzf1ZmdDpxUSvpnAaVOP83N/31mRK8Ml8/VE8DMvsAZQ+7wg==", + "resolved": "https://r.cnpmjs.org/lolex/download/lolex-4.2.0.tgz", + "integrity": "sha1-3b1/YhPKHqWCaQGrEiK2XXFLPNc=", "dev": true }, "longest-streak": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.3.tgz", - "integrity": "sha512-9lz5IVdpwsKLMzQi0MQ+oD9EA0mIGcWYP7jXMTZVXP8D42PwuAk+M/HBFYQoxt1G5OR8m7aSIgb1UymfWGBWEw==", + "version": "2.0.4", + "resolved": "https://r.cnpmjs.org/longest-streak/download/longest-streak-2.0.4.tgz", + "integrity": "sha1-uFmZV9pbXatk3uP+MW+ndFl9kOQ=", "dev": true }, "loose-envify": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "resolved": "http://r.cnpmjs.org/loose-envify/download/loose-envify-1.4.0.tgz", + "integrity": "sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8=", "requires": { "js-tokens": "^3.0.0 || ^4.0.0" } @@ -16253,17 +15580,18 @@ "dev": true }, "magic-string": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.4.tgz", - "integrity": "sha512-oycWO9nEVAP2RVPbIoDoA4Y7LFIJ3xRYov93gAyJhZkET1tNuB0u7uWkZS2LpBWTJUWnmau/To8ECWRC+jKNfw==", + "version": "0.25.7", + "resolved": "http://r.cnpmjs.org/magic-string/download/magic-string-0.25.7.tgz", + "integrity": "sha1-P0l9b9NMZpxnmNy4IfLvMfVEUFE=", + "dev": true, "requires": { "sourcemap-codec": "^1.4.4" } }, "make-dir": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "resolved": "http://r.cnpmjs.org/make-dir/download/make-dir-2.1.0.tgz", + "integrity": "sha1-XwMQ4YuL6JjMBwCSlaMK5B6R5vU=", "dev": true, "requires": { "pify": "^4.0.1", @@ -16272,19 +15600,27 @@ "dependencies": { "pify": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "resolved": "http://r.cnpmjs.org/pify/download/pify-4.0.1.tgz", + "integrity": "sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE=", "dev": true } } }, "make-iterator": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", - "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "resolved": "https://r.cnpmjs.org/make-iterator/download/make-iterator-1.0.1.tgz", + "integrity": "sha1-KbM/MSqo9UfEpeSQ9Wr87JkTOtY=", "dev": true, "requires": { "kind-of": "^6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.3", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-6.0.3.tgz", + "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", + "dev": true + } } }, "makeerror": { @@ -16296,21 +15632,6 @@ "tmpl": "1.0.x" } }, - "mamacro": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", - "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==", - "dev": true - }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -16333,45 +15654,45 @@ } }, "markdown-escapes": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.3.tgz", - "integrity": "sha512-XUi5HJhhV5R74k8/0H2oCbCiYf/u4cO/rX8tnGkRvrqhsr5BRNU6Mg0yt/8UIx1iIS8220BNJsDb7XnILhLepw==", + "version": "1.0.4", + "resolved": "https://r.cnpmjs.org/markdown-escapes/download/markdown-escapes-1.0.4.tgz", + "integrity": "sha1-yVQV70UUmddgK5EJXzyOiXX3hTU=", "dev": true }, "markdown-table": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", - "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==", + "resolved": "https://r.cnpmjs.org/markdown-table/download/markdown-table-1.1.3.tgz", + "integrity": "sha1-n8tpvP24cXv9A5jG7C2TA2743mA=", "dev": true }, "marked": { "version": "0.7.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.7.0.tgz", - "integrity": "sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg==", + "resolved": "https://r.cnpmjs.org/marked/download/marked-0.7.0.tgz", + "integrity": "sha1-tkIB8FHScbHtwQoE0a6bdLuOXA4=", "dev": true }, "math-expression-evaluator": { - "version": "1.2.17", - "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz", - "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=", + "version": "1.2.22", + "resolved": "https://r.cnpmjs.org/math-expression-evaluator/download/math-expression-evaluator-1.2.22.tgz", + "integrity": "sha1-wU3LPYtNFQ5dzqnGjI2tgDCbDV4=", "dev": true }, "math-random": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", - "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", + "resolved": "https://r.cnpmjs.org/math-random/download/math-random-1.0.4.tgz", + "integrity": "sha1-XdaUPJOFSCZwFtTjTwV1gwgMUUw=", "dev": true }, "mathml-tag-names": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.1.tgz", - "integrity": "sha512-pWB896KPGSGkp1XtyzRBftpTzwSOL0Gfk0wLvxt4f2mgzjY19o0LxJ3U25vNWTzsh7da+KTbuXQoQ3lOJZ8WHw==", + "version": "2.1.3", + "resolved": "https://r.cnpmjs.org/mathml-tag-names/download/mathml-tag-names-2.1.3.tgz", + "integrity": "sha1-TdrdZzCOeAzxakdoWHjuJ7c2oKM=", "dev": true }, "md5.js": { "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "resolved": "http://r.cnpmjs.org/md5.js/download/md5.js-1.3.5.tgz", + "integrity": "sha1-tdB7jjIW4+J81yjXL3DR5qNCAF8=", "dev": true, "requires": { "hash-base": "^3.0.0", @@ -16380,55 +15701,113 @@ } }, "mdast-squeeze-paragraphs": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-3.0.5.tgz", - "integrity": "sha512-xX6Vbe348Y/rukQlG4W3xH+7v4ZlzUbSY4HUIQCuYrF2DrkcHx584mCaFxkWoDZKNUfyLZItHC9VAqX3kIP7XA==", + "version": "4.0.0", + "resolved": "https://r.cnpmjs.org/mdast-squeeze-paragraphs/download/mdast-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha1-fEwRRnnDvuJ+8QtY4uAVvnnx75c=", "dev": true, "requires": { - "unist-util-remove": "^1.0.0" + "unist-util-remove": "^2.0.0" } }, "mdast-util-compact": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-1.0.4.tgz", - "integrity": "sha512-3YDMQHI5vRiS2uygEFYaqckibpJtKq5Sj2c8JioeOQBU6INpKbdWzfyLqFFnDwEcEnRFIdMsguzs5pC1Jp4Isg==", + "resolved": "https://r.cnpmjs.org/mdast-util-compact/download/mdast-util-compact-1.0.4.tgz", + "integrity": "sha1-1TG7dme1Ejq/IIWb4IbE0GyJRZM=", "dev": true, "requires": { "unist-util-visit": "^1.1.0" } }, "mdast-util-definitions": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-1.2.5.tgz", - "integrity": "sha512-CJXEdoLfiISCDc2JB6QLb79pYfI6+GcIH+W2ox9nMc7od0Pz+bovcHsiq29xAQY6ayqe/9CsK2VzkSJdg1pFYA==", + "version": "3.0.1", + "resolved": "https://r.cnpmjs.org/mdast-util-definitions/download/mdast-util-definitions-3.0.1.tgz", + "integrity": "sha1-Bq9sSYZfxj1tfTASVWni9649CoY=", "dev": true, "requires": { - "unist-util-visit": "^1.0.0" + "unist-util-visit": "^2.0.0" + }, + "dependencies": { + "unist-util-is": { + "version": "4.0.2", + "resolved": "http://r.cnpmjs.org/unist-util-is/download/unist-util-is-4.0.2.tgz", + "integrity": "sha1-x9E0EYiqnOWzz/U4lY3piV8Upd4=", + "dev": true + }, + "unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/unist-util-visit/download/unist-util-visit-2.0.3.tgz?cache=0&sync_timestamp=1594459248879&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funist-util-visit%2Fdownload%2Funist-util-visit-2.0.3.tgz", + "integrity": "sha1-w3A4kxRt9HIDu4qXla9H17lxIIw=", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/unist-util-visit-parents/download/unist-util-visit-parents-3.1.0.tgz?cache=0&sync_timestamp=1594553631380&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funist-util-visit-parents%2Fdownload%2Funist-util-visit-parents-3.1.0.tgz", + "integrity": "sha1-TdJi+53P5E8pfVPogvxv80IRc9U=", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + } + } } }, "mdast-util-to-hast": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-6.0.2.tgz", - "integrity": "sha512-GjcOimC9qHI0yNFAQdBesrZXzUkRdFleQlcoU8+TVNfDW6oLUazUx8MgUoTaUyCJzBOnE5AOgqhpURrSlf0QwQ==", + "version": "9.1.0", + "resolved": "https://r.cnpmjs.org/mdast-util-to-hast/download/mdast-util-to-hast-9.1.0.tgz", + "integrity": "sha1-bvEh3TzTsAa/hlCxuUVNoPr3n/4=", "dev": true, "requires": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.3", "collapse-white-space": "^1.0.0", "detab": "^2.0.0", - "mdast-util-definitions": "^1.2.0", - "mdurl": "^1.0.1", - "trim": "0.0.1", + "mdast-util-definitions": "^3.0.0", + "mdurl": "^1.0.0", "trim-lines": "^1.0.0", - "unist-builder": "^1.0.1", - "unist-util-generated": "^1.1.0", + "unist-builder": "^2.0.0", + "unist-util-generated": "^1.0.0", "unist-util-position": "^3.0.0", - "unist-util-visit": "^1.1.0", - "xtend": "^4.0.1" + "unist-util-visit": "^2.0.0" + }, + "dependencies": { + "unist-util-is": { + "version": "4.0.2", + "resolved": "http://r.cnpmjs.org/unist-util-is/download/unist-util-is-4.0.2.tgz", + "integrity": "sha1-x9E0EYiqnOWzz/U4lY3piV8Upd4=", + "dev": true + }, + "unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/unist-util-visit/download/unist-util-visit-2.0.3.tgz?cache=0&sync_timestamp=1594459248879&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funist-util-visit%2Fdownload%2Funist-util-visit-2.0.3.tgz", + "integrity": "sha1-w3A4kxRt9HIDu4qXla9H17lxIIw=", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/unist-util-visit-parents/download/unist-util-visit-parents-3.1.0.tgz?cache=0&sync_timestamp=1594553631380&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funist-util-visit-parents%2Fdownload%2Funist-util-visit-parents-3.1.0.tgz", + "integrity": "sha1-TdJi+53P5E8pfVPogvxv80IRc9U=", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + } + } } }, "mdn-data": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "resolved": "https://r.cnpmjs.org/mdn-data/download/mdn-data-2.0.4.tgz", + "integrity": "sha1-aZs8OKxvHXKAkaZGULZdOIUC/Vs=", "dev": true }, "mdurl": { @@ -16443,16 +15822,10 @@ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "dev": true }, - "mem": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.1.0.tgz", - "integrity": "sha512-I5u6Q1x7wxO0kdOpYBB28xueHADYps5uty/zg936CiG8NTe5sJL8EjrCuLneuDW3PlMdZBGDIn8BirEVdovZvg==", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^1.0.0", - "p-is-promise": "^2.0.0" - } + "memoize-one": { + "version": "5.1.1", + "resolved": "https://r.cnpmjs.org/memoize-one/download/memoize-one-5.1.1.tgz", + "integrity": "sha1-BHtuMZm1COrsA1BN5xIpuOsddcA=" }, "memory-fs": { "version": "0.4.1", @@ -16462,38 +15835,6 @@ "requires": { "errno": "^0.1.3", "readable-stream": "^2.0.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, "meow": { @@ -16512,14 +15853,6 @@ "read-pkg-up": "^1.0.1", "redent": "^1.0.0", "trim-newlines": "^1.0.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } } }, "merge-descriptors": { @@ -16529,50 +15862,15 @@ "dev": true }, "merge-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", - "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", - "dev": true, - "requires": { - "readable-stream": "^2.0.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/merge-stream/download/merge-stream-2.0.0.tgz", + "integrity": "sha1-UoI2KaFN0AyXcPtq1H3GMQ8sH2A=", + "dev": true }, "merge2": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz", - "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==", + "version": "1.4.1", + "resolved": "https://r.cnpmjs.org/merge2/download/merge2-1.4.1.tgz", + "integrity": "sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4=", "dev": true }, "methods": { @@ -16582,67 +15880,64 @@ "dev": true }, "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/micromatch/download/micromatch-4.0.2.tgz", + "integrity": "sha1-T8sJmb+fvC/L3SEvbWKbmlbDklk=", "dev": true, "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "braces": "^3.0.1", + "picomatch": "^2.0.5" } }, "miller-rabin": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "resolved": "http://r.cnpmjs.org/miller-rabin/download/miller-rabin-4.0.1.tgz", + "integrity": "sha1-8IA1HIZbDcViqEYpZtqlNUPHik0=", "dev": true, "requires": { "bn.js": "^4.0.0", "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "http://r.cnpmjs.org/bn.js/download/bn.js-4.11.9.tgz", + "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=", + "dev": true + } } }, "mime": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz", - "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==", + "version": "1.6.0", + "resolved": "https://r.cnpmjs.org/mime/download/mime-1.6.0.tgz", + "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=", "dev": true }, "mime-db": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", - "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==", + "version": "1.44.0", + "resolved": "http://r.cnpmjs.org/mime-db/download/mime-db-1.44.0.tgz", + "integrity": "sha1-+hHF6wrKEzS0Izy01S8QxaYnL5I=", "dev": true }, "mime-types": { - "version": "2.1.21", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", - "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", + "version": "2.1.27", + "resolved": "http://r.cnpmjs.org/mime-types/download/mime-types-2.1.27.tgz", + "integrity": "sha1-R5SfmOJ56lMRn1ci4PNOUpvsAJ8=", "dev": true, "requires": { - "mime-db": "~1.37.0" + "mime-db": "1.44.0" } }, "mimic-fn": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "resolved": "http://r.cnpmjs.org/mimic-fn/download/mimic-fn-1.2.0.tgz", + "integrity": "sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI=", "dev": true }, "mimic-response": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.0.0.tgz", - "integrity": "sha512-8ilDoEapqA4uQ3TwS0jakGONKXVJqpy+RpM+3b7pLdOjghCrEiGp9SRkFbUHAmZW9vdnrENWHjaweIoTIJExSQ==", + "version": "2.1.0", + "resolved": "https://r.cnpmjs.org/mimic-response/download/mimic-response-2.1.0.tgz", + "integrity": "sha1-0Tdj019hPQnsN+uzC6wEacDuj0M=", "dev": true }, "min-document": { @@ -16656,8 +15951,8 @@ }, "mini-css-extract-plugin": { "version": "0.7.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.7.0.tgz", - "integrity": "sha512-RQIw6+7utTYn8DBGsf/LpRgZCJMpZt+kuawJ/fju0KiOL6nAaTBNmCJwS7HtwSCXfS47gCkmtBFS7HdsquhdxQ==", + "resolved": "http://r.cnpmjs.org/mini-css-extract-plugin/download/mini-css-extract-plugin-0.7.0.tgz", + "integrity": "sha1-W6gpD7tBeaQ90nzKREuhUL7nQ6A=", "dev": true, "requires": { "loader-utils": "^1.1.0", @@ -16666,34 +15961,10 @@ "webpack-sources": "^1.1.0" }, "dependencies": { - "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, "schema-utils": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "resolved": "https://r.cnpmjs.org/schema-utils/download/schema-utils-1.0.0.tgz", + "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=", "dev": true, "requires": { "ajv": "^6.1.0", @@ -16705,8 +15976,8 @@ }, "minimalistic-assert": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "resolved": "http://r.cnpmjs.org/minimalistic-assert/download/minimalistic-assert-1.0.1.tgz", + "integrity": "sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc=", "dev": true }, "minimalistic-crypto-utils": { @@ -16717,51 +15988,51 @@ }, "minimatch": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "resolved": "http://r.cnpmjs.org/minimatch/download/minimatch-3.0.4.tgz", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { - "version": "0.0.8", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "version": "1.2.5", + "resolved": "http://r.cnpmjs.org/minimist/download/minimist-1.2.5.tgz", + "integrity": "sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI=", "dev": true }, "minimist-options": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz", - "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", + "resolved": "https://r.cnpmjs.org/minimist-options/download/minimist-options-3.0.2.tgz", + "integrity": "sha1-+6TIGRM54T7PTWG+sD8HAQPz2VQ=", "dev": true, "requires": { "arrify": "^1.0.1", "is-plain-obj": "^1.1.0" + }, + "dependencies": { + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://r.cnpmjs.org/is-plain-obj/download/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + } } }, "minipass": { "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "resolved": "https://r.cnpmjs.org/minipass/download/minipass-2.9.0.tgz", + "integrity": "sha1-5xN2Ln0+Mv7YAxFc+T4EvKn8yaY=", "dev": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" - }, - "dependencies": { - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } } }, "minizlib": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "resolved": "https://r.cnpmjs.org/minizlib/download/minizlib-1.3.3.tgz", + "integrity": "sha1-IpDeloGKNMKVUcio0wEha9Zahh0=", "dev": true, "requires": { "minipass": "^2.9.0" @@ -16769,8 +16040,8 @@ }, "mississippi": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "resolved": "http://r.cnpmjs.org/mississippi/download/mississippi-3.0.0.tgz", + "integrity": "sha1-6goykfl+C16HdrNj1fChLZTGcCI=", "dev": true, "requires": { "concat-stream": "^1.5.0", @@ -16785,21 +16056,22 @@ "through2": "^2.0.0" }, "dependencies": { - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "pump": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/pump/download/pump-3.0.0.tgz", + "integrity": "sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=", "dev": true, "requires": { - "once": "^1.4.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } } } }, "mixin-deep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "version": "1.3.2", + "resolved": "http://r.cnpmjs.org/mixin-deep/download/mixin-deep-1.3.2.tgz", + "integrity": "sha1-ESC0PcNZp4Xc5ltVuC4lfM9HlWY=", "dev": true, "requires": { "for-in": "^1.0.2", @@ -16808,8 +16080,8 @@ "dependencies": { "is-extendable": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "resolved": "http://r.cnpmjs.org/is-extendable/download/is-extendable-1.0.1.tgz", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", "dev": true, "requires": { "is-plain-object": "^2.0.4" @@ -16817,52 +16089,33 @@ } } }, - "mixin-object": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", - "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", - "dev": true, - "requires": { - "for-in": "^0.1.3", - "is-extendable": "^0.1.1" - }, - "dependencies": { - "for-in": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", - "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=", - "dev": true - } - } - }, "mkdirp": { - "version": "0.5.1", - "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "version": "0.5.5", + "resolved": "http://r.cnpmjs.org/mkdirp/download/mkdirp-0.5.5.tgz", + "integrity": "sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8=", "dev": true, "requires": { - "minimist": "0.0.8" + "minimist": "^1.2.5" } }, "mockjs": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mockjs/-/mockjs-1.1.0.tgz", - "integrity": "sha512-eQsKcWzIaZzEZ07NuEyO4Nw65g0hdWAyurVol1IPl1gahRwY+svqzfgfey8U8dahLwG44d6/RwEzuK52rSa/JQ==", + "resolved": "https://r.cnpmjs.org/mockjs/download/mockjs-1.1.0.tgz", + "integrity": "sha1-5qDDeOkZBtuv8gkRzAJzs8fXWwY=", "dev": true, "requires": { "commander": "*" } }, "moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==", - "dev": true + "version": "2.27.0", + "resolved": "https://registry.npm.taobao.org/moment/download/moment-2.27.0.tgz?cache=0&sync_timestamp=1592516084857&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmoment%2Fdownload%2Fmoment-2.27.0.tgz", + "integrity": "sha1-i/9OPiaiNiIN/j423nVrbrqgEF0=" }, "moo": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/moo/-/moo-0.4.3.tgz", - "integrity": "sha512-gFD2xGCl8YFgGHsqJ9NKRVdwlioeW3mI1iqfLNYQOv0+6JRwG58Zk9DIGQgyIaffSYaO1xsKnMaYzzNr1KyIAw==", + "version": "0.5.1", + "resolved": "https://r.cnpmjs.org/moo/download/moo-0.5.1.tgz", + "integrity": "sha1-eq5/OEubCfYgtqv29067zRtl28Q=", "dev": true }, "move-concurrently": { @@ -16886,8 +16139,8 @@ }, "multicast-dns": { "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "resolved": "http://r.cnpmjs.org/multicast-dns/download/multicast-dns-6.2.3.tgz", + "integrity": "sha1-oOx72QVcQoL3kMPIL04o2zsxsik=", "dev": true, "requires": { "dns-packet": "^1.3.1", @@ -16909,23 +16162,16 @@ "duplexer2": "0.0.2" } }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, "nan": { - "version": "2.11.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz", - "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==", - "dev": true, - "optional": true + "version": "2.14.1", + "resolved": "http://r.cnpmjs.org/nan/download/nan-2.14.1.tgz", + "integrity": "sha1-174036MQW5FJTDFHCJMV7/iHSwE=", + "dev": true }, "nanomatch": { "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "resolved": "http://r.cnpmjs.org/nanomatch/download/nanomatch-1.2.13.tgz", + "integrity": "sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=", "dev": true, "requires": { "arr-diff": "^4.0.0", @@ -16939,12 +16185,32 @@ "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.1" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/arr-diff/download/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "http://r.cnpmjs.org/array-unique/download/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-6.0.3.tgz", + "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", + "dev": true + } } }, "natives": { "version": "1.1.6", - "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.6.tgz", - "integrity": "sha512-6+TDFewD4yxY14ptjKaS63GVdtKiES1pTPyxn9Jb0rBqPMZ7VcCiooEhPNsr+mqHtMGxa/5c/HhcC4uPEUw/nA==", + "resolved": "https://r.cnpmjs.org/natives/download/natives-1.1.6.tgz", + "integrity": "sha1-pgO0pJirdxc2ErnqGs3sTZgPALs=", "dev": true }, "natural-compare": { @@ -16954,30 +16220,22 @@ "dev": true }, "nearley": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.16.0.tgz", - "integrity": "sha512-Tr9XD3Vt/EujXbZBv6UAHYoLUSMQAxSsTnm9K3koXzjzNWY195NqALeyrzLZBKzAkL3gl92BcSogqrHjD8QuUg==", + "version": "2.19.5", + "resolved": "https://registry.npm.taobao.org/nearley/download/nearley-2.19.5.tgz?cache=0&sync_timestamp=1594786132813&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnearley%2Fdownload%2Fnearley-2.19.5.tgz", + "integrity": "sha1-a+eOSULuuaBDsXxWNBMRHUrYSbc=", "dev": true, "requires": { "commander": "^2.19.0", - "moo": "^0.4.3", + "moo": "^0.5.0", "railroad-diagrams": "^1.0.0", "randexp": "0.4.6", "semver": "^5.4.1" - }, - "dependencies": { - "commander": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", - "dev": true - } } }, "needle": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.4.0.tgz", - "integrity": "sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==", + "version": "2.5.0", + "resolved": "https://r.cnpmjs.org/needle/download/needle-2.5.0.tgz", + "integrity": "sha1-5vxLPMbCXK7XVUvWE6XPC6yMMcA=", "dev": true, "requires": { "debug": "^3.2.6", @@ -16987,8 +16245,8 @@ "dependencies": { "debug": { "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "resolved": "http://r.cnpmjs.org/debug/download/debug-3.2.6.tgz", + "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=", "dev": true, "requires": { "ms": "^2.1.1" @@ -16996,34 +16254,34 @@ }, "ms": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "resolved": "http://r.cnpmjs.org/ms/download/ms-2.1.2.tgz", + "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", "dev": true } } }, "negotiator": { "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "resolved": "http://r.cnpmjs.org/negotiator/download/negotiator-0.6.2.tgz", + "integrity": "sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs=", "dev": true }, "neo-async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz", - "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==", + "version": "2.6.2", + "resolved": "https://registry.npm.taobao.org/neo-async/download/neo-async-2.6.2.tgz", + "integrity": "sha1-tKr7k+OustgXTKU88WOrfXMIMF8=", "dev": true }, "nice-try": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "resolved": "http://r.cnpmjs.org/nice-try/download/nice-try-1.0.5.tgz", + "integrity": "sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y=", "dev": true }, "nise": { "version": "1.5.3", - "resolved": "https://registry.npmjs.org/nise/-/nise-1.5.3.tgz", - "integrity": "sha512-Ymbac/94xeIrMf59REBPOv0thr+CJVFMhrlAkW/gjCIE58BGQdCj0x7KRCb3yz+Ga2Rz3E9XXSvUyyxqqhjQAQ==", + "resolved": "https://r.cnpmjs.org/nise/download/nise-1.5.3.tgz", + "integrity": "sha1-nSz+N9RPVzF3ZsbpQIo1nF06wfc=", "dev": true, "requires": { "@sinonjs/formatio": "^3.2.1", @@ -17033,21 +16291,36 @@ "path-to-regexp": "^1.7.0" }, "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "http://r.cnpmjs.org/isarray/download/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, "lolex": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-5.1.2.tgz", - "integrity": "sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==", + "resolved": "https://r.cnpmjs.org/lolex/download/lolex-5.1.2.tgz", + "integrity": "sha1-lTaU0JjOfAe8XtbQ5CvGwMbVo2c=", "dev": true, "requires": { "@sinonjs/commons": "^1.7.0" } + }, + "path-to-regexp": { + "version": "1.8.0", + "resolved": "http://r.cnpmjs.org/path-to-regexp/download/path-to-regexp-1.8.0.tgz", + "integrity": "sha1-iHs7qdhDk+h6CgufTLdWGYtTVIo=", + "dev": true, + "requires": { + "isarray": "0.0.1" + } } } }, "no-case": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "resolved": "http://r.cnpmjs.org/no-case/download/no-case-2.3.2.tgz", + "integrity": "sha1-YLgTOWvjmz8SiKTB7V0efSi0ZKw=", "dev": true, "requires": { "lower-case": "^1.1.1" @@ -17061,14 +16334,14 @@ }, "node-forge": { "version": "0.9.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz", - "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==", + "resolved": "http://r.cnpmjs.org/node-forge/download/node-forge-0.9.0.tgz", + "integrity": "sha1-1iQFDtu0SHStyhK7mlLsY8t4JXk=", "dev": true }, "node-gyp": { "version": "3.8.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", - "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", + "resolved": "https://r.cnpmjs.org/node-gyp/download/node-gyp-3.8.0.tgz", + "integrity": "sha1-VAMEJhwzDoDQ1e3OJTpoyzlkIYw=", "dev": true, "requires": { "fstream": "^1.0.0", @@ -17085,12 +16358,6 @@ "which": "1" }, "dependencies": { - "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", - "dev": true - }, "nopt": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", @@ -17108,8 +16375,8 @@ }, "tar": { "version": "2.2.2", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", - "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", + "resolved": "https://r.cnpmjs.org/tar/download/tar-2.2.2.tgz", + "integrity": "sha1-DKiEhWLHKZuLRG/2pNYM27I+3EA=", "dev": true, "requires": { "block-stream": "*", @@ -17127,8 +16394,8 @@ }, "node-libs-browser": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "resolved": "http://r.cnpmjs.org/node-libs-browser/download/node-libs-browser-2.2.1.tgz", + "integrity": "sha1-tk9RPRgzhiX5A0bSew0jXmMfZCU=", "dev": true, "requires": { "assert": "^1.1.1", @@ -17156,66 +16423,11 @@ "vm-browserify": "^1.0.1" }, "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - }, "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", - "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", - "dev": true - } - } } } }, @@ -17226,9 +16438,9 @@ "dev": true }, "node-notifier": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.0.tgz", - "integrity": "sha512-SUDEb+o71XR5lXSTyivXd9J7fCloE3SyP4lSgt3lU2oSANiox+SxlNRGPjDKrwU1YN3ix2KN/VGGCg0t01rttQ==", + "version": "5.4.3", + "resolved": "http://r.cnpmjs.org/node-notifier/download/node-notifier-5.4.3.tgz", + "integrity": "sha1-y3La+UyTkECY4oucWQ/YZuRkvVA=", "dev": true, "requires": { "growly": "^1.3.0", @@ -17236,12 +16448,20 @@ "semver": "^5.5.0", "shellwords": "^0.1.1", "which": "^1.3.0" + }, + "dependencies": { + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/is-wsl/download/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + } } }, "node-pre-gyp": { "version": "0.11.0", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz", - "integrity": "sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==", + "resolved": "https://r.cnpmjs.org/node-pre-gyp/download/node-pre-gyp-0.11.0.tgz", + "integrity": "sha1-2x8zIVJy9pLNOPAyOOPptHxd0FQ=", "dev": true, "requires": { "detect-libc": "^1.0.2", @@ -17257,26 +16477,15 @@ } }, "node-releases": { - "version": "1.1.44", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.44.tgz", - "integrity": "sha512-NwbdvJyR7nrcGrXvKAvzc5raj/NkoJudkarh2yIpJ4t0NH4aqjUDz/486P+ynIW5eokKOfzGNRdYoLfBlomruw==", - "dev": true, - "requires": { - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } + "version": "1.1.60", + "resolved": "https://registry.npm.taobao.org/node-releases/download/node-releases-1.1.60.tgz?cache=0&sync_timestamp=1595485388334&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-releases%2Fdownload%2Fnode-releases-1.1.60.tgz", + "integrity": "sha1-aUi9/OgobwtdDlqI6DhOlU3+cIQ=", + "dev": true }, "node-sass": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.13.0.tgz", - "integrity": "sha512-W1XBrvoJ1dy7VsvTAS5q1V45lREbTlZQqFbiHb3R3OTTCma0XBtuG6xZ6Z4506nR4lmHPTqVRwxT6KgtWC97CA==", + "version": "4.14.1", + "resolved": "https://r.cnpmjs.org/node-sass/download/node-sass-4.14.1.tgz", + "integrity": "sha1-mch+wu+3BH7WOPtMnbfzpC4iF7U=", "dev": true, "requires": { "async-foreach": "^0.1.3", @@ -17293,11 +16502,17 @@ "node-gyp": "^3.8.0", "npmlog": "^4.0.0", "request": "^2.88.0", - "sass-graph": "^2.2.4", + "sass-graph": "2.2.5", "stdout-stream": "^1.4.0", "true-case-path": "^1.0.2" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", @@ -17329,17 +16544,17 @@ }, "gaze": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", - "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "resolved": "https://r.cnpmjs.org/gaze/download/gaze-1.1.3.tgz", + "integrity": "sha1-xEFzPhO5J6yMD/C0w7Az8ogSkko=", "dev": true, "requires": { "globule": "^1.0.0" } }, "globule": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.0.tgz", - "integrity": "sha512-YlD4kdMqRCQHrhVdonet4TdRtv1/sZKepvoxNT4Nrhrp5HI8XFfc8kFlGlBn2myBo80aGp8Eft259mbcUJhgSg==", + "version": "1.3.2", + "resolved": "https://r.cnpmjs.org/globule/download/globule-1.3.2.tgz", + "integrity": "sha1-2L3Z6eTu+PluJFmZpd7n612FKcQ=", "dev": true, "requires": { "glob": "~7.1.1", @@ -17347,40 +16562,43 @@ "minimatch": "~3.0.2" } }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, "lru-cache": { "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "resolved": "http://r.cnpmjs.org/lru-cache/download/lru-cache-4.1.5.tgz", + "integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=", "dev": true, "requires": { "pseudomap": "^1.0.2", "yallist": "^2.1.2" } }, - "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", - "dev": true + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "http://r.cnpmjs.org/yallist/download/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true } } }, "nopt": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", - "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "version": "4.0.3", + "resolved": "https://r.cnpmjs.org/nopt/download/nopt-4.0.3.tgz", + "integrity": "sha1-o3XK2dAv2SEnjZVMIlTVqlfhXkg=", "dev": true, "requires": { "abbrev": "1", @@ -17388,22 +16606,25 @@ } }, "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "version": "2.5.0", + "resolved": "http://r.cnpmjs.org/normalize-package-data/download/normalize-package-data-2.5.0.tgz", + "integrity": "sha1-5m2xg4sgDB38IzIl0SyzZSDiNKg=", "dev": true, "requires": { "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", + "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } }, "normalize-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz", - "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=", - "dev": true + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/normalize-path/download/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } }, "normalize-range": { "version": "0.1.2", @@ -17431,8 +16652,8 @@ }, "npm-bundled": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", - "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", + "resolved": "https://r.cnpmjs.org/npm-bundled/download/npm-bundled-1.1.1.tgz", + "integrity": "sha1-Ht1XCGWpTNsbyCIHdeKUZsn7I0s=", "dev": true, "requires": { "npm-normalize-package-bin": "^1.0.1" @@ -17440,24 +16661,25 @@ }, "npm-normalize-package-bin": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "resolved": "https://r.cnpmjs.org/npm-normalize-package-bin/download/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha1-bnmkHyP9I1wGIyGCKNp9nCO49uI=", "dev": true }, "npm-packlist": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.7.tgz", - "integrity": "sha512-vAj7dIkp5NhieaGZxBJB8fF4R0078rqsmhJcAfXZ6O7JJhjhPK96n5Ry1oZcfLXgfun0GWTZPOxaEyqv8GBykQ==", + "version": "1.4.8", + "resolved": "https://r.cnpmjs.org/npm-packlist/download/npm-packlist-1.4.8.tgz", + "integrity": "sha1-Vu5swTW5+YrT1Rwcldoiu7my7z4=", "dev": true, "requires": { "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" } }, "npm-path": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz", - "integrity": "sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==", + "resolved": "https://r.cnpmjs.org/npm-path/download/npm-path-2.0.4.tgz", + "integrity": "sha1-xkE0el/51qCeTZvOVYDE9QUnjmQ=", "dev": true, "requires": { "which": "^1.2.10" @@ -17485,8 +16707,8 @@ }, "npmlog": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "resolved": "https://r.cnpmjs.org/npmlog/download/npmlog-4.1.2.tgz", + "integrity": "sha1-CKfyqL9zRgR3mp76StXMcXq7lUs=", "dev": true, "requires": { "are-we-there-yet": "~1.1.2", @@ -17497,8 +16719,8 @@ }, "nth-check": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "resolved": "http://r.cnpmjs.org/nth-check/download/nth-check-1.0.2.tgz", + "integrity": "sha1-sr0pXDfj3VijvwcAN2Zjuk2c8Fw=", "dev": true, "requires": { "boolbase": "~1.0.0" @@ -17517,15 +16739,15 @@ "dev": true }, "nwsapi": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.4.tgz", - "integrity": "sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw==", + "version": "2.2.0", + "resolved": "http://r.cnpmjs.org/nwsapi/download/nwsapi-2.2.0.tgz", + "integrity": "sha1-IEh5qePQaP8qVROcLHcngGgaOLc=", "dev": true }, "oauth-sign": { "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "resolved": "http://r.cnpmjs.org/oauth-sign/download/oauth-sign-0.9.0.tgz", + "integrity": "sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU=", "dev": true }, "object-assign": { @@ -17552,35 +16774,27 @@ "requires": { "is-descriptor": "^0.1.0" } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } } } }, "object-inspect": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", - "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==", - "dev": true + "version": "1.8.0", + "resolved": "https://registry.npm.taobao.org/object-inspect/download/object-inspect-1.8.0.tgz?cache=0&sync_timestamp=1592545152574&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-inspect%2Fdownload%2Fobject-inspect-1.8.0.tgz", + "integrity": "sha1-34B+Xs9TpgnMa/6T6sPMe+WzqdA=" }, "object-is": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz", - "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=", - "dev": true + "version": "1.1.2", + "resolved": "http://r.cnpmjs.org/object-is/download/object-is-1.1.2.tgz", + "integrity": "sha1-xdLof/nhGfeLegiEQVGeLuwVc7Y=", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } }, "object-keys": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", - "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", - "dev": true + "version": "1.1.1", + "resolved": "http://r.cnpmjs.org/object-keys/download/object-keys-1.1.1.tgz", + "integrity": "sha1-HEfyct8nfzsdrwYWd9nILiMixg4=" }, "object-visit": { "version": "1.0.1", @@ -17589,13 +16803,20 @@ "dev": true, "requires": { "isobject": "^3.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } } }, "object.assign": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, + "resolved": "http://r.cnpmjs.org/object.assign/download/object.assign-4.1.0.tgz", + "integrity": "sha1-lovxEA15Vrs8oIbwBvhGs7xACNo=", "requires": { "define-properties": "^1.1.2", "function-bind": "^1.1.1", @@ -17613,105 +16834,56 @@ "array-slice": "^1.0.0", "for-own": "^1.0.0", "isobject": "^3.0.0" + }, + "dependencies": { + "for-own": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/for-own/download/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } } }, "object.entries": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.0.tgz", - "integrity": "sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA==", + "version": "1.1.2", + "resolved": "https://r.cnpmjs.org/object.entries/download/object.entries-1.1.2.tgz", + "integrity": "sha1-vHPwCstra7FsIDQ0sQ+afnl9Ot0=", "dev": true, "requires": { "define-properties": "^1.1.3", - "es-abstract": "^1.12.0", - "function-bind": "^1.1.1", + "es-abstract": "^1.17.5", "has": "^1.0.3" } }, "object.fromentries": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.2.tgz", - "integrity": "sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==", + "resolved": "http://r.cnpmjs.org/object.fromentries/download/object.fromentries-2.0.2.tgz", + "integrity": "sha1-SgnJubs4Q90PiazbUXp5TU81Wsk=", "dev": true, "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.17.0-next.1", "function-bind": "^1.1.1", "has": "^1.0.3" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0.tgz", - "integrity": "sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.1.5", - "is-regex": "^1.0.5", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "is-callable": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", - "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", - "dev": true - }, - "is-regex": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", - "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } } }, "object.getownpropertydescriptors": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", - "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "version": "2.1.0", + "resolved": "http://r.cnpmjs.org/object.getownpropertydescriptors/download/object.getownpropertydescriptors-2.1.0.tgz", + "integrity": "sha1-Npvx+VktiridcS3O1cuBx8U1Jkk=", "dev": true, "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" } }, "object.map": { @@ -17722,6 +16894,17 @@ "requires": { "for-own": "^1.0.0", "make-iterator": "^1.0.0" + }, + "dependencies": { + "for-own": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/for-own/download/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + } } }, "object.omit": { @@ -17732,17 +16915,6 @@ "requires": { "for-own": "^0.1.4", "is-extendable": "^0.1.1" - }, - "dependencies": { - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } - } } }, "object.pick": { @@ -17752,24 +16924,32 @@ "dev": true, "requires": { "isobject": "^3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } } }, "object.values": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.0.4.tgz", - "integrity": "sha1-5STaCbT2b/Bd9FdUbscqyZ8TBpo=", + "version": "1.1.1", + "resolved": "http://r.cnpmjs.org/object.values/download/object.values-1.1.1.tgz", + "integrity": "sha1-aKmezeNWt+kpWjxeDOMdyMlT3l4=", "dev": true, "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.6.1", - "function-bind": "^1.1.0", - "has": "^1.0.1" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "has": "^1.0.3" } }, "obuf": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "resolved": "http://r.cnpmjs.org/obuf/download/obuf-1.1.2.tgz", + "integrity": "sha1-Cb6jND1BhZ69RGKS0RydTbYZCE4=", "dev": true }, "on-finished": { @@ -17783,8 +16963,8 @@ }, "on-headers": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "resolved": "http://r.cnpmjs.org/on-headers/download/on-headers-1.0.2.tgz", + "integrity": "sha1-dysK5qqlJcOZ5Imt+tkMQD6zwo8=", "dev": true }, "once": { @@ -17797,50 +16977,43 @@ } }, "onetime": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "dev": true - }, - "opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/onetime/download/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", "dev": true, "requires": { - "is-wsl": "^1.1.0" + "mimic-fn": "^1.0.0" } }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "opn": { + "version": "5.5.0", + "resolved": "http://r.cnpmjs.org/opn/download/opn-5.5.0.tgz", + "integrity": "sha1-/HFk+rVtI1kExRw7J9pnWMo7m/w=", "dev": true, "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" + "is-wsl": "^1.1.0" }, "dependencies": { - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/is-wsl/download/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", "dev": true } } }, "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "version": "0.8.3", + "resolved": "http://r.cnpmjs.org/optionator/download/optionator-0.8.3.tgz", + "integrity": "sha1-hPodA2/p08fiHZmIS2ARZ+yPtJU=", "dev": true, "requires": { "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", + "fast-levenshtein": "~2.0.6", "levn": "~0.3.0", "prelude-ls": "~1.1.2", "type-check": "~0.3.2", - "wordwrap": "~1.0.0" + "word-wrap": "~1.2.3" } }, "orchestrator": { @@ -17852,6 +17025,26 @@ "end-of-stream": "~0.1.5", "sequencify": "~0.0.7", "stream-consume": "~0.1.0" + }, + "dependencies": { + "end-of-stream": { + "version": "0.1.5", + "resolved": "http://r.cnpmjs.org/end-of-stream/download/end-of-stream-0.1.5.tgz", + "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=", + "dev": true, + "requires": { + "once": "~1.3.0" + } + }, + "once": { + "version": "1.3.3", + "resolved": "http://r.cnpmjs.org/once/download/once-1.3.3.tgz", + "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", + "dev": true, + "requires": { + "wrappy": "1" + } + } } }, "ordered-read-streams": { @@ -17862,8 +17055,8 @@ }, "original": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "resolved": "http://r.cnpmjs.org/original/download/original-1.0.2.tgz", + "integrity": "sha1-5EKmHP/hxf0gpl8yYcJmY7MD8l8=", "dev": true, "requires": { "url-parse": "^1.4.3" @@ -17878,16 +17071,8 @@ "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "requires": { - "lcid": "^1.0.0" - } + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true }, "os-tmpdir": { "version": "1.0.2", @@ -17897,20 +17082,14 @@ }, "osenv": { "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "resolved": "https://r.cnpmjs.org/osenv/download/osenv-0.1.5.tgz", + "integrity": "sha1-hc36+uso6Gd/QW4odZK18/SepBA=", "dev": true, "requires": { "os-homedir": "^1.0.0", "os-tmpdir": "^1.0.0" } }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true - }, "p-each-series": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", @@ -17926,16 +17105,10 @@ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "dev": true }, - "p-is-promise": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.0.0.tgz", - "integrity": "sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==", - "dev": true - }, "p-limit": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "resolved": "https://r.cnpmjs.org/p-limit/download/p-limit-1.3.0.tgz", + "integrity": "sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg=", "dev": true, "requires": { "p-try": "^1.0.0" @@ -17952,8 +17125,8 @@ }, "p-map": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", + "resolved": "http://r.cnpmjs.org/p-map/download/p-map-1.2.0.tgz", + "integrity": "sha1-5OlPMR6rvIYzoeeZCBZfyiYkG2s=", "dev": true }, "p-reduce": { @@ -17964,8 +17137,8 @@ }, "p-retry": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", - "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "resolved": "https://r.cnpmjs.org/p-retry/download/p-retry-3.0.1.tgz", + "integrity": "sha1-MWtMiJPiyNwc+okfQGxLQivr8yg=", "dev": true, "requires": { "retry": "^0.12.0" @@ -17978,52 +17151,20 @@ "dev": true }, "pako": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", - "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", + "version": "1.0.11", + "resolved": "http://r.cnpmjs.org/pako/download/pako-1.0.11.tgz", + "integrity": "sha1-bJWZ00DVTf05RjgCUqNXBaa5kr8=", "dev": true }, "parallel-transform": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "resolved": "http://r.cnpmjs.org/parallel-transform/download/parallel-transform-1.2.0.tgz", + "integrity": "sha1-kEnKN9bLIYLDsdLHIL6U0UpYFPw=", "dev": true, "requires": { "cyclist": "^1.0.1", "inherits": "^2.0.3", "readable-stream": "^2.1.5" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, "param-case": { @@ -18035,10 +17176,32 @@ "no-case": "^2.2.0" } }, + "parchment": { + "version": "1.1.4", + "resolved": "https://registry.npm.taobao.org/parchment/download/parchment-1.1.4.tgz", + "integrity": "sha1-rt7Xq5OP6SHUw0vDOc4RaLwv/eU=" + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/parent-module/download/parent-module-1.0.1.tgz", + "integrity": "sha1-aR0nCeeMefrjoVZiJFLQB2LKqqI=", + "dev": true, + "requires": { + "callsites": "^3.0.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/callsites/download/callsites-3.1.0.tgz", + "integrity": "sha1-s2MKvYlDQy9Us/BRkjjjPNffL3M=", + "dev": true + } + } + }, "parse-asn1": { "version": "5.1.5", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", - "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", + "resolved": "http://r.cnpmjs.org/parse-asn1/download/parse-asn1-5.1.5.tgz", + "integrity": "sha1-ADJxND2ljclMrOSU+u89IUfs6g4=", "dev": true, "requires": { "asn1.js": "^4.0.0", @@ -18067,9 +17230,10 @@ } }, "parse-entities": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.0.tgz", - "integrity": "sha512-XXtDdOPLSB0sHecbEapQi6/58U/ODj/KWfIXmmMCJF/eRn8laX6LZbOyioMoETOOJoWRW8/qTSl5VQkUIfKM5g==", + "version": "1.2.2", + "resolved": "http://r.cnpmjs.org/parse-entities/download/parse-entities-1.2.2.tgz", + "integrity": "sha1-wxvw9lO2ZhNU+Jc1WcuG3R1e31A=", + "dev": true, "requires": { "character-entities": "^1.0.0", "character-entities-legacy": "^1.0.0", @@ -18129,6 +17293,12 @@ "json-parse-better-errors": "^1.0.1" } }, + "parse-node-version": { + "version": "1.0.1", + "resolved": "https://r.cnpmjs.org/parse-node-version/download/parse-node-version-1.0.1.tgz", + "integrity": "sha1-4rXb7eAOf6m8NjYH9TMn6LBzGJs=", + "dev": true + }, "parse-passwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", @@ -18136,18 +17306,15 @@ "dev": true }, "parse5": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", - "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", - "dev": true, - "requires": { - "@types/node": "*" - } + "version": "6.0.1", + "resolved": "https://registry.npm.taobao.org/parse5/download/parse5-6.0.1.tgz", + "integrity": "sha1-4aHAhcVps9wIMhGE8Zo5zCf3wws=", + "dev": true }, "parseurl": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "resolved": "http://r.cnpmjs.org/parseurl/download/parseurl-1.3.3.tgz", + "integrity": "sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ=", "dev": true }, "pascalcase": { @@ -18158,26 +17325,18 @@ }, "password-prompt": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/password-prompt/-/password-prompt-1.1.2.tgz", - "integrity": "sha512-bpuBhROdrhuN3E7G/koAju0WjVw9/uQOG5Co5mokNj0MiOSBVZS1JTwM4zl55hu0WFmIEFvO9cU9sJQiBIYeIA==", + "resolved": "https://r.cnpmjs.org/password-prompt/download/password-prompt-1.1.2.tgz", + "integrity": "sha1-hbL5OJbFvZ6fLW/wYn+lrz3ACSM=", "dev": true, "requires": { "ansi-escapes": "^3.1.0", "cross-spawn": "^6.0.5" - }, - "dependencies": { - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - } } }, "path-browserify": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "resolved": "http://r.cnpmjs.org/path-browserify/download/path-browserify-0.0.1.tgz", + "integrity": "sha1-5sTd1+06onxoogzE5Q4aTug7vEo=", "dev": true }, "path-dirname": { @@ -18212,8 +17371,8 @@ }, "path-parse": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "resolved": "http://r.cnpmjs.org/path-parse/download/path-parse-1.0.6.tgz", + "integrity": "sha1-1i27VnlAXXLEc37FhgDp3c8G0kw=", "dev": true }, "path-root": { @@ -18232,42 +17391,21 @@ "dev": true }, "path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "requires": { - "isarray": "0.0.1" - } + "version": "0.1.7", + "resolved": "http://r.cnpmjs.org/path-to-regexp/download/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true }, "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", - "dev": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/path-type/download/path-type-4.0.0.tgz", + "integrity": "sha1-hO0BwKe6OAr+CdkKjBgNzZ0DBDs=", + "dev": true }, "pbkdf2": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", - "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "version": "3.1.1", + "resolved": "https://r.cnpmjs.org/pbkdf2/download/pbkdf2-3.1.1.tgz", + "integrity": "sha1-y4cksPramEWWhW0abrr9NYRlS5Q=", "dev": true, "requires": { "create-hash": "^1.1.2", @@ -18289,10 +17427,16 @@ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", "dev": true }, + "picomatch": { + "version": "2.2.2", + "resolved": "http://r.cnpmjs.org/picomatch/download/picomatch-2.2.2.tgz", + "integrity": "sha1-IfMz6ba46v8CRo9RRupAbTRfTa0=", + "dev": true + }, "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "version": "2.3.0", + "resolved": "http://r.cnpmjs.org/pify/download/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, "pinkie": { @@ -18310,10 +17454,16 @@ "pinkie": "^2.0.0" } }, + "pinyin-match": { + "version": "1.1.1", + "resolved": "https://r.cnpmjs.org/pinyin-match/download/pinyin-match-1.1.1.tgz", + "integrity": "sha1-sTAAgA5MDC8ikE7PSgdCPd+cECM=", + "dev": true + }, "pirates": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "resolved": "http://r.cnpmjs.org/pirates/download/pirates-4.0.1.tgz", + "integrity": "sha1-ZDqSyviUVm+RsrmG0sZpUKji+4c=", "dev": true, "requires": { "node-modules-regexp": "^1.0.0" @@ -18332,8 +17482,8 @@ "dependencies": { "browserslist": { "version": "2.11.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz", - "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==", + "resolved": "http://r.cnpmjs.org/browserslist/download/browserslist-2.11.3.tgz", + "integrity": "sha1-/jYWeu0bvN5IJ+v+cTR6LMcLmbI=", "dev": true, "requires": { "caniuse-lite": "^1.0.30000792", @@ -18342,57 +17492,10 @@ } } }, - "pkg-conf": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", - "integrity": "sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "load-json-file": "^4.0.0" - }, - "dependencies": { - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } - } - }, - "pkg-config": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pkg-config/-/pkg-config-1.1.1.tgz", - "integrity": "sha1-VX7yLXPaPIg3EHdmxS6tq94pj+Q=", - "dev": true, - "requires": { - "debug-log": "^1.0.0", - "find-root": "^1.0.0", - "xtend": "^4.0.1" - } - }, "pkg-dir": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "resolved": "http://r.cnpmjs.org/pkg-dir/download/pkg-dir-3.0.0.tgz", + "integrity": "sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM=", "dev": true, "requires": { "find-up": "^3.0.0" @@ -18400,8 +17503,8 @@ "dependencies": { "find-up": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "resolved": "http://r.cnpmjs.org/find-up/download/find-up-3.0.0.tgz", + "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=", "dev": true, "requires": { "locate-path": "^3.0.0" @@ -18409,8 +17512,8 @@ }, "locate-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "resolved": "http://r.cnpmjs.org/locate-path/download/locate-path-3.0.0.tgz", + "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=", "dev": true, "requires": { "p-locate": "^3.0.0", @@ -18418,9 +17521,9 @@ } }, "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "version": "2.3.0", + "resolved": "https://r.cnpmjs.org/p-limit/download/p-limit-2.3.0.tgz", + "integrity": "sha1-PdM8ZHohT9//2DWTPrCG2g3CHbE=", "dev": true, "requires": { "p-try": "^2.0.0" @@ -18428,25 +17531,25 @@ }, "p-locate": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "resolved": "http://r.cnpmjs.org/p-locate/download/p-locate-3.0.0.tgz", + "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=", "dev": true, "requires": { "p-limit": "^2.0.0" } }, "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "version": "2.2.0", + "resolved": "http://r.cnpmjs.org/p-try/download/p-try-2.2.0.tgz", + "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=", "dev": true } } }, "please-upgrade-node": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz", - "integrity": "sha512-KY1uHnQ2NlQHqIJQpnh/i54rKkuxCEBx+voJIS/Mvb+L2iYd2NMotwduhKTMjfC1uKoX3VXOxLjIYG66dfJTVQ==", + "version": "3.2.0", + "resolved": "https://r.cnpmjs.org/please-upgrade-node/download/please-upgrade-node-3.2.0.tgz", + "integrity": "sha1-rt3T+ZTJM+StmLmdmlVu+g4v6UI=", "dev": true, "requires": { "semver-compare": "^1.0.0" @@ -18454,43 +17557,45 @@ }, "plugin-error": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", - "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", + "resolved": "https://r.cnpmjs.org/plugin-error/download/plugin-error-1.0.1.tgz", + "integrity": "sha1-dwFr2JGdCsN3/c3QMiMolTyleBw=", "dev": true, "requires": { "ansi-colors": "^1.0.1", "arr-diff": "^4.0.0", "arr-union": "^3.1.0", "extend-shallow": "^3.0.2" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/arr-diff/download/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + } } }, - "pluralize": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", - "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", - "dev": true - }, "pn": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", - "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", + "resolved": "http://r.cnpmjs.org/pn/download/pn-1.1.0.tgz", + "integrity": "sha1-4vTO8OIZ9GPBeas3Rj5OHs3Muvs=", "dev": true }, "portfinder": { - "version": "1.0.25", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.25.tgz", - "integrity": "sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg==", + "version": "1.0.28", + "resolved": "https://registry.npm.taobao.org/portfinder/download/portfinder-1.0.28.tgz?cache=0&sync_timestamp=1596018172434&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fportfinder%2Fdownload%2Fportfinder-1.0.28.tgz", + "integrity": "sha1-Z8RiKFK9U3TdHdkA93n1NGL6x3g=", "dev": true, "requires": { "async": "^2.6.2", "debug": "^3.1.1", - "mkdirp": "^0.5.1" + "mkdirp": "^0.5.5" }, "dependencies": { "async": { "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "resolved": "http://r.cnpmjs.org/async/download/async-2.6.3.tgz", + "integrity": "sha1-1yYl4jRKNlbjo61Pp0n6gymdgv8=", "dev": true, "requires": { "lodash": "^4.17.14" @@ -18498,23 +17603,17 @@ }, "debug": { "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "resolved": "http://r.cnpmjs.org/debug/download/debug-3.2.6.tgz", + "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=", "dev": true, "requires": { "ms": "^2.1.1" } }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, "ms": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "resolved": "http://r.cnpmjs.org/ms/download/ms-2.1.2.tgz", + "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", "dev": true } } @@ -18527,8 +17626,8 @@ }, "postcss": { "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-6.0.23.tgz", + "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", "dev": true, "requires": { "chalk": "^2.4.1", @@ -18536,20 +17635,11 @@ "supports-color": "^5.4.0" }, "dependencies": { - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "source-map": { + "version": "0.6.1", + "resolved": "http://r.cnpmjs.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -18573,6 +17663,12 @@ "reduce-css-calc": "^1.2.6" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", @@ -18600,10 +17696,16 @@ } } }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, "postcss": { "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", "dev": true, "requires": { "chalk": "^1.1.3", @@ -18612,11 +17714,23 @@ "supports-color": "^3.2.3" } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } } } }, @@ -18651,6 +17765,12 @@ "postcss-value-parser": "^3.2.3" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", @@ -18678,10 +17798,16 @@ } } }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, "postcss": { "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", "dev": true, "requires": { "chalk": "^1.1.3", @@ -18690,11 +17816,23 @@ "supports-color": "^3.2.3" } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } } } }, @@ -18708,6 +17846,12 @@ "postcss-value-parser": "^3.1.2" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", @@ -18735,10 +17879,16 @@ } } }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, "postcss": { "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", "dev": true, "requires": { "chalk": "^1.1.3", @@ -18747,11 +17897,23 @@ "supports-color": "^3.2.3" } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } } } }, @@ -18764,6 +17926,12 @@ "postcss": "^5.0.14" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", @@ -18791,10 +17959,16 @@ } } }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, "postcss": { "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", "dev": true, "requires": { "chalk": "^1.1.3", @@ -18803,11 +17977,23 @@ "supports-color": "^3.2.3" } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } } } }, @@ -18820,6 +18006,12 @@ "postcss": "^5.0.4" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", @@ -18847,10 +18039,16 @@ } } }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, "postcss": { "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", "dev": true, "requires": { "chalk": "^1.1.3", @@ -18859,11 +18057,23 @@ "supports-color": "^3.2.3" } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } } } }, @@ -18876,6 +18086,12 @@ "postcss": "^5.0.14" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", @@ -18903,10 +18119,16 @@ } } }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, "postcss": { "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", "dev": true, "requires": { "chalk": "^1.1.3", @@ -18915,11 +18137,23 @@ "supports-color": "^3.2.3" } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } } } }, @@ -18932,6 +18166,12 @@ "postcss": "^5.0.16" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", @@ -18959,10 +18199,16 @@ } } }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, "postcss": { "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", "dev": true, "requires": { "chalk": "^1.1.3", @@ -18971,11 +18217,23 @@ "supports-color": "^3.2.3" } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } } } }, @@ -18989,6 +18247,12 @@ "uniqs": "^2.0.0" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", @@ -19016,10 +18280,16 @@ } } }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, "postcss": { "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", "dev": true, "requires": { "chalk": "^1.1.3", @@ -19028,18 +18298,30 @@ "supports-color": "^3.2.3" } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } } } }, "postcss-easings": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/postcss-easings/-/postcss-easings-1.0.1.tgz", - "integrity": "sha512-zHRCKHinXtqpyrPPi3oojaf47v3eGcQHmG5zujWs1+9OWukIKi/rVEAm2KSh5y4swn66SNCZceGXcNi9GXo1cQ==", + "resolved": "https://r.cnpmjs.org/postcss-easings/download/postcss-easings-1.0.1.tgz", + "integrity": "sha1-p7nr3avl+FieJFJWvVZUCOozZsM=", "dev": true, "requires": { "postcss": "^6.0.14", @@ -19048,13 +18330,19 @@ }, "postcss-filter-plugins": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz", - "integrity": "sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==", + "resolved": "https://r.cnpmjs.org/postcss-filter-plugins/download/postcss-filter-plugins-2.0.3.tgz", + "integrity": "sha1-giRf34IzcEFkXkdxFNjlk6oYuOw=", "dev": true, "requires": { "postcss": "^5.0.4" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", @@ -19082,10 +18370,16 @@ } } }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, "postcss": { "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", "dev": true, "requires": { "chalk": "^1.1.3", @@ -19094,11 +18388,23 @@ "supports-color": "^3.2.3" } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } } } }, @@ -19112,9 +18418,9 @@ } }, "postcss-hexrgba": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/postcss-hexrgba/-/postcss-hexrgba-1.0.1.tgz", - "integrity": "sha512-zFJ5XEoh6aD1clOCxHx2D2Vj2dzcr86t5OXgZKB0K2z0LWZlWhdVJV1lpJBRX075qhTSbKqqjemUHU+TSy9Buw==", + "version": "1.0.2", + "resolved": "https://r.cnpmjs.org/postcss-hexrgba/download/postcss-hexrgba-1.0.2.tgz", + "integrity": "sha1-BKMgZhfywA1Tt1TbulQG0ydy2wA=", "dev": true, "requires": { "postcss": "^6.0.7" @@ -19122,68 +18428,11 @@ }, "postcss-html": { "version": "0.36.0", - "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-0.36.0.tgz", - "integrity": "sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw==", + "resolved": "https://r.cnpmjs.org/postcss-html/download/postcss-html-0.36.0.tgz", + "integrity": "sha1-tAkT+U6qzCRT/TChMnrW7h+IsgQ=", "dev": true, "requires": { "htmlparser2": "^3.10.0" - }, - "dependencies": { - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - }, - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dev": true, - "requires": { - "domelementtype": "1" - } - }, - "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "dev": true, - "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - } - }, - "readable-stream": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", - "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", - "dev": true - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - } } }, "postcss-input-style": { @@ -19196,9 +18445,9 @@ } }, "postcss-jsx": { - "version": "0.36.3", - "resolved": "https://registry.npmjs.org/postcss-jsx/-/postcss-jsx-0.36.3.tgz", - "integrity": "sha512-yV8Ndo6KzU8eho5mCn7LoLUGPkXrRXRjhMpX4AaYJ9wLJPv099xbtpbRQ8FrPnzVxb/cuMebbPR7LweSt+hTfA==", + "version": "0.36.4", + "resolved": "https://r.cnpmjs.org/postcss-jsx/download/postcss-jsx-0.36.4.tgz", + "integrity": "sha1-N6aPMAo55XSNVH8Zp0ezJXJAvVA=", "dev": true, "requires": { "@babel/core": ">=7.2.2" @@ -19206,45 +18455,17 @@ }, "postcss-less": { "version": "3.1.4", - "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-3.1.4.tgz", - "integrity": "sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA==", + "resolved": "https://r.cnpmjs.org/postcss-less/download/postcss-less-3.1.4.tgz", + "integrity": "sha1-Np9YZCtZKO+Jj/vBpuk8lYMExa0=", "dev": true, "requires": { "postcss": "^7.0.14" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.32", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-7.0.32.tgz", + "integrity": "sha1-QxDW7jRwU9o0M9sr5JKIPWLOxZ0=", "dev": true, "requires": { "chalk": "^2.4.2", @@ -19252,10 +18473,16 @@ "supports-color": "^6.1.0" } }, + "source-map": { + "version": "0.6.1", + "resolved": "http://r.cnpmjs.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + }, "supports-color": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -19264,49 +18491,19 @@ } }, "postcss-load-config": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.0.0.tgz", - "integrity": "sha512-V5JBLzw406BB8UIfsAWSK2KSwIJ5yoEIVFb4gVkXci0QdKgA24jLmHZ/ghe/GgX0lJ0/D1uUK1ejhzEY94MChQ==", + "version": "2.1.0", + "resolved": "http://r.cnpmjs.org/postcss-load-config/download/postcss-load-config-2.1.0.tgz", + "integrity": "sha1-yE1pK3u3tB3c7ZTuYuirMbQXsAM=", "dev": true, "requires": { - "cosmiconfig": "^4.0.0", + "cosmiconfig": "^5.0.0", "import-cwd": "^2.0.0" - }, - "dependencies": { - "cosmiconfig": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-4.0.0.tgz", - "integrity": "sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==", - "dev": true, - "requires": { - "is-directory": "^0.3.1", - "js-yaml": "^3.9.0", - "parse-json": "^4.0.0", - "require-from-string": "^2.0.1" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "js-yaml": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", - "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - } } }, "postcss-loader": { "version": "2.1.6", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-2.1.6.tgz", - "integrity": "sha512-hgiWSc13xVQAq25cVw80CH0l49ZKlAnU1hKPOdRrNj89bokRr/bZF2nT+hebPPF9c9xs8c3gw3Fr2nxtmXYnNg==", + "resolved": "http://r.cnpmjs.org/postcss-loader/download/postcss-loader-2.1.6.tgz", + "integrity": "sha1-HX3XsXxrojS5vtWvE+C+pApC10A=", "dev": true, "requires": { "loader-utils": "^1.1.0", @@ -19315,34 +18512,10 @@ "schema-utils": "^0.4.0" }, "dependencies": { - "ajv": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.4.tgz", - "integrity": "sha512-4Wyjt8+t6YszqaXnLDfMmG/8AlO5Zbcsy3ATHncCzjW/NoPzAId8AK6749Ybjmdt+kUY1gP60fCu46oDxPv/mg==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, "schema-utils": { "version": "0.4.7", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", - "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", + "resolved": "https://r.cnpmjs.org/schema-utils/download/schema-utils-0.4.7.tgz", + "integrity": "sha1-unT1l9K+LqiAExdG7hfQoJPGgYc=", "dev": true, "requires": { "ajv": "^6.1.0", @@ -19353,8 +18526,8 @@ }, "postcss-markdown": { "version": "0.36.0", - "resolved": "https://registry.npmjs.org/postcss-markdown/-/postcss-markdown-0.36.0.tgz", - "integrity": "sha512-rl7fs1r/LNSB2bWRhyZ+lM/0bwKv9fhl38/06gF6mKMo/NPnp55+K1dSTosSVjFZc0e1ppBlu+WT91ba0PMBfQ==", + "resolved": "https://r.cnpmjs.org/postcss-markdown/download/postcss-markdown-0.36.0.tgz", + "integrity": "sha1-fyKEmuDj2xiCC3sNXngz8TpEdWA=", "dev": true, "requires": { "remark": "^10.0.1", @@ -19378,6 +18551,12 @@ "postcss-value-parser": "^3.1.1" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", @@ -19405,10 +18584,16 @@ } } }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, "postcss": { "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", "dev": true, "requires": { "chalk": "^1.1.3", @@ -19417,11 +18602,23 @@ "supports-color": "^3.2.3" } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } } } }, @@ -19434,6 +18631,12 @@ "postcss": "^5.0.4" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", @@ -19461,10 +18664,16 @@ } } }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, "postcss": { "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", "dev": true, "requires": { "chalk": "^1.1.3", @@ -19473,11 +18682,23 @@ "supports-color": "^3.2.3" } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } } } }, @@ -19494,6 +18715,12 @@ "vendors": "^1.0.0" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", @@ -19531,10 +18758,16 @@ } } }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, "postcss": { "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", "dev": true, "requires": { "chalk": "^1.1.3", @@ -19543,11 +18776,23 @@ "supports-color": "^3.2.3" } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } } } }, @@ -19568,6 +18813,12 @@ "postcss-value-parser": "^3.0.2" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", @@ -19595,10 +18846,16 @@ } } }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, "postcss": { "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", "dev": true, "requires": { "chalk": "^1.1.3", @@ -19607,11 +18864,23 @@ "supports-color": "^3.2.3" } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } } } }, @@ -19625,6 +18894,12 @@ "postcss-value-parser": "^3.3.0" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", @@ -19652,10 +18927,16 @@ } } }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, "postcss": { "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", "dev": true, "requires": { "chalk": "^1.1.3", @@ -19664,11 +18945,23 @@ "supports-color": "^3.2.3" } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } } } }, @@ -19684,6 +18977,12 @@ "uniqs": "^2.0.0" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", @@ -19711,10 +19010,16 @@ } } }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, "postcss": { "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", "dev": true, "requires": { "chalk": "^1.1.3", @@ -19723,11 +19028,23 @@ "supports-color": "^3.2.3" } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } } } }, @@ -19743,6 +19060,12 @@ "postcss-selector-parser": "^2.0.0" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", @@ -19770,10 +19093,16 @@ } } }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, "postcss": { "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", "dev": true, "requires": { "chalk": "^1.1.3", @@ -19782,18 +19111,30 @@ "supports-color": "^3.2.3" } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } } } }, "postcss-modules-extract-imports": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz", - "integrity": "sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==", + "resolved": "http://r.cnpmjs.org/postcss-modules-extract-imports/download/postcss-modules-extract-imports-1.2.1.tgz", + "integrity": "sha1-3IfjQUjsfqtfeR981YSYMzdbdBo=", "dev": true, "requires": { "postcss": "^6.0.1" @@ -19838,6 +19179,12 @@ "postcss": "^5.0.5" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", @@ -19865,10 +19212,16 @@ } } }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, "postcss": { "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", "dev": true, "requires": { "chalk": "^1.1.3", @@ -19876,19 +19229,31 @@ "source-map": "^0.5.6", "supports-color": "^3.2.3" } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } } } }, "postcss-normalize-display-values": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", - "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "resolved": "http://r.cnpmjs.org/postcss-normalize-display-values/download/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha1-Db4EpM6QY9RmftK+R2u4MMglk1o=", "dev": true, "requires": { "cssnano-util-get-match": "^4.0.0", @@ -19896,38 +19261,10 @@ "postcss-value-parser": "^3.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.32", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-7.0.32.tgz", + "integrity": "sha1-QxDW7jRwU9o0M9sr5JKIPWLOxZ0=", "dev": true, "requires": { "chalk": "^2.4.2", @@ -19935,10 +19272,16 @@ "supports-color": "^6.1.0" } }, + "source-map": { + "version": "0.6.1", + "resolved": "http://r.cnpmjs.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + }, "supports-color": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -19948,8 +19291,8 @@ }, "postcss-normalize-positions": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", - "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "resolved": "http://r.cnpmjs.org/postcss-normalize-positions/download/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha1-BfdX+E8mBDc3g2ipH4ky1LECkX8=", "dev": true, "requires": { "cssnano-util-get-arguments": "^4.0.0", @@ -19958,38 +19301,10 @@ "postcss-value-parser": "^3.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.32", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-7.0.32.tgz", + "integrity": "sha1-QxDW7jRwU9o0M9sr5JKIPWLOxZ0=", "dev": true, "requires": { "chalk": "^2.4.2", @@ -19997,10 +19312,16 @@ "supports-color": "^6.1.0" } }, + "source-map": { + "version": "0.6.1", + "resolved": "http://r.cnpmjs.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + }, "supports-color": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -20010,8 +19331,8 @@ }, "postcss-normalize-repeat-style": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", - "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "resolved": "http://r.cnpmjs.org/postcss-normalize-repeat-style/download/postcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha1-xOu8KJ85kaAo1EdRy90RkYsXkQw=", "dev": true, "requires": { "cssnano-util-get-arguments": "^4.0.0", @@ -20020,38 +19341,10 @@ "postcss-value-parser": "^3.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.32", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-7.0.32.tgz", + "integrity": "sha1-QxDW7jRwU9o0M9sr5JKIPWLOxZ0=", "dev": true, "requires": { "chalk": "^2.4.2", @@ -20059,10 +19352,16 @@ "supports-color": "^6.1.0" } }, + "source-map": { + "version": "0.6.1", + "resolved": "http://r.cnpmjs.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + }, "supports-color": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -20072,8 +19371,8 @@ }, "postcss-normalize-string": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", - "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "resolved": "http://r.cnpmjs.org/postcss-normalize-string/download/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha1-zUTECrB6DHo23F6Zqs4eyk7CaQw=", "dev": true, "requires": { "has": "^1.0.0", @@ -20081,38 +19380,10 @@ "postcss-value-parser": "^3.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.32", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-7.0.32.tgz", + "integrity": "sha1-QxDW7jRwU9o0M9sr5JKIPWLOxZ0=", "dev": true, "requires": { "chalk": "^2.4.2", @@ -20120,10 +19391,16 @@ "supports-color": "^6.1.0" } }, + "source-map": { + "version": "0.6.1", + "resolved": "http://r.cnpmjs.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + }, "supports-color": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -20133,8 +19410,8 @@ }, "postcss-normalize-timing-functions": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", - "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "resolved": "http://r.cnpmjs.org/postcss-normalize-timing-functions/download/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha1-jgCcoqOUnNr4rSPmtquZy159KNk=", "dev": true, "requires": { "cssnano-util-get-match": "^4.0.0", @@ -20142,38 +19419,10 @@ "postcss-value-parser": "^3.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.32", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-7.0.32.tgz", + "integrity": "sha1-QxDW7jRwU9o0M9sr5JKIPWLOxZ0=", "dev": true, "requires": { "chalk": "^2.4.2", @@ -20181,10 +19430,16 @@ "supports-color": "^6.1.0" } }, + "source-map": { + "version": "0.6.1", + "resolved": "http://r.cnpmjs.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + }, "supports-color": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -20194,8 +19449,8 @@ }, "postcss-normalize-unicode": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", - "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "resolved": "http://r.cnpmjs.org/postcss-normalize-unicode/download/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha1-hBvUj9zzAZrUuqdJOj02O1KuHPs=", "dev": true, "requires": { "browserslist": "^4.0.0", @@ -20203,61 +19458,10 @@ "postcss-value-parser": "^3.0.0" }, "dependencies": { - "browserslist": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.2.tgz", - "integrity": "sha512-+M4oeaTplPm/f1pXDw84YohEv7B1i/2Aisei8s4s6k3QsoSHa7i5sz8u/cGQkkatCPxMASKxPualR4wwYgVboA==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001015", - "electron-to-chromium": "^1.3.322", - "node-releases": "^1.1.42" - } - }, - "caniuse-lite": { - "version": "1.0.30001017", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001017.tgz", - "integrity": "sha512-EDnZyOJ6eYh6lHmCvCdHAFbfV4KJ9lSdfv4h/ppEhrU/Yudkl7jujwMZ1we6RX7DXqBfT04pVMQ4J+1wcTlsKA==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "electron-to-chromium": { - "version": "1.3.322", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.322.tgz", - "integrity": "sha512-Tc8JQEfGQ1MzfSzI/bTlSr7btJv/FFO7Yh6tanqVmIWOuNCu6/D1MilIEgLtmWqIrsv+o4IjpLAhgMBr/ncNAA==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.32", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-7.0.32.tgz", + "integrity": "sha1-QxDW7jRwU9o0M9sr5JKIPWLOxZ0=", "dev": true, "requires": { "chalk": "^2.4.2", @@ -20265,10 +19469,16 @@ "supports-color": "^6.1.0" } }, + "source-map": { + "version": "0.6.1", + "resolved": "http://r.cnpmjs.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + }, "supports-color": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -20288,6 +19498,12 @@ "postcss-value-parser": "^3.2.3" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", @@ -20315,10 +19531,16 @@ } } }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, "postcss": { "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", "dev": true, "requires": { "chalk": "^1.1.3", @@ -20327,56 +19549,40 @@ "supports-color": "^3.2.3" } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } } } }, "postcss-normalize-whitespace": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", - "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "resolved": "http://r.cnpmjs.org/postcss-normalize-whitespace/download/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha1-vx1AcP5Pzqh9E0joJdjMDF+qfYI=", "dev": true, "requires": { "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.32", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-7.0.32.tgz", + "integrity": "sha1-QxDW7jRwU9o0M9sr5JKIPWLOxZ0=", "dev": true, "requires": { "chalk": "^2.4.2", @@ -20384,10 +19590,16 @@ "supports-color": "^6.1.0" } }, + "source-map": { + "version": "0.6.1", + "resolved": "http://r.cnpmjs.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + }, "supports-color": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -20397,8 +19609,8 @@ }, "postcss-opacity": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-opacity/-/postcss-opacity-5.0.0.tgz", - "integrity": "sha512-n6LgHk5HWIsyEHgPqM2jwXrkh4SuH+cZOIWh4tUp4ug3P7FkzxiJuqrpEaBvNwH/dKs5PHjHL2vPeR+nLbs+Mw==", + "resolved": "https://r.cnpmjs.org/postcss-opacity/download/postcss-opacity-5.0.0.tgz", + "integrity": "sha1-bqbe701fwo3Uz3r5fbooB7PgfEw=", "dev": true, "requires": { "postcss": "^6.0.7" @@ -20414,6 +19626,12 @@ "postcss-value-parser": "^3.0.1" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", @@ -20441,10 +19659,16 @@ } } }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, "postcss": { "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", "dev": true, "requires": { "chalk": "^1.1.3", @@ -20453,18 +19677,30 @@ "supports-color": "^3.2.3" } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } } } }, "postcss-position": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postcss-position/-/postcss-position-1.0.0.tgz", - "integrity": "sha1-MMvu5Ajyam2+u/YSYcohDlSMd/8=", + "version": "1.1.0", + "resolved": "https://r.cnpmjs.org/postcss-position/download/postcss-position-1.1.0.tgz", + "integrity": "sha1-Ez/Cyv4F0iqkDKcB5tPSdpJ8zKw=", "dev": true, "requires": { "postcss": "^6.0.7" @@ -20507,6 +19743,12 @@ "postcss-value-parser": "^3.0.2" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", @@ -20534,10 +19776,16 @@ } } }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, "postcss": { "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", "dev": true, "requires": { "chalk": "^1.1.3", @@ -20546,11 +19794,23 @@ "supports-color": "^3.2.3" } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } } } }, @@ -20563,6 +19823,12 @@ "postcss": "^5.0.4" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", @@ -20590,10 +19856,16 @@ } } }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, "postcss": { "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", "dev": true, "requires": { "chalk": "^1.1.3", @@ -20602,11 +19874,23 @@ "supports-color": "^3.2.3" } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } } } }, @@ -20621,6 +19905,12 @@ "postcss-value-parser": "^3.0.1" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", @@ -20648,30 +19938,48 @@ } } }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "has-flag": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" + "has-flag": "^1.0.0" } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true } } }, "postcss-reporter": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-5.0.0.tgz", - "integrity": "sha512-rBkDbaHAu5uywbCR2XE8a25tats3xSOsGNx6mppK6Q9kSFGKc/FyAzfci+fWM2l+K402p1D0pNcfDGxeje5IKg==", + "resolved": "https://r.cnpmjs.org/postcss-reporter/download/postcss-reporter-5.0.0.tgz", + "integrity": "sha1-oUF3/RNCgp0pFlPyeG79ZxEDMsM=", "dev": true, "requires": { "chalk": "^2.0.1", @@ -20696,46 +20004,18 @@ } }, "postcss-safe-parser": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.1.tgz", - "integrity": "sha512-xZsFA3uX8MO3yAda03QrG3/Eg1LN3EPfjjf07vke/46HERLZyHrTsQ9E1r1w1W//fWEhtYNndo2hQplN2cVpCQ==", + "version": "4.0.2", + "resolved": "http://r.cnpmjs.org/postcss-safe-parser/download/postcss-safe-parser-4.0.2.tgz", + "integrity": "sha1-ptTkjw832ffBGypYG/APi6SHC5Y=", "dev": true, "requires": { - "postcss": "^7.0.0" + "postcss": "^7.0.26" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.32", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-7.0.32.tgz", + "integrity": "sha1-QxDW7jRwU9o0M9sr5JKIPWLOxZ0=", "dev": true, "requires": { "chalk": "^2.4.2", @@ -20743,10 +20023,16 @@ "supports-color": "^6.1.0" } }, + "source-map": { + "version": "0.6.1", + "resolved": "http://r.cnpmjs.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + }, "supports-color": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -20756,46 +20042,18 @@ }, "postcss-sass": { "version": "0.3.5", - "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.3.5.tgz", - "integrity": "sha512-B5z2Kob4xBxFjcufFnhQ2HqJQ2y/Zs/ic5EZbCywCkxKd756Q40cIQ/veRDwSrw1BF6+4wUgmpm0sBASqVi65A==", + "resolved": "https://r.cnpmjs.org/postcss-sass/download/postcss-sass-0.3.5.tgz", + "integrity": "sha1-bT458QGlPS76CR+VNJMRbTK+tow=", "dev": true, "requires": { "gonzales-pe": "^4.2.3", "postcss": "^7.0.1" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.32", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-7.0.32.tgz", + "integrity": "sha1-QxDW7jRwU9o0M9sr5JKIPWLOxZ0=", "dev": true, "requires": { "chalk": "^2.4.2", @@ -20803,10 +20061,16 @@ "supports-color": "^6.1.0" } }, + "source-map": { + "version": "0.6.1", + "resolved": "http://r.cnpmjs.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + }, "supports-color": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -20815,46 +20079,18 @@ } }, "postcss-scss": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-2.0.0.tgz", - "integrity": "sha512-um9zdGKaDZirMm+kZFKKVsnKPF7zF7qBAtIfTSnZXD1jZ0JNZIxdB6TxQOjCnlSzLRInVl2v3YdBh/M881C4ug==", + "version": "2.1.1", + "resolved": "https://r.cnpmjs.org/postcss-scss/download/postcss-scss-2.1.1.tgz", + "integrity": "sha1-7Dp1+imlXgFrkL8yaQJsU8HSs4M=", "dev": true, "requires": { - "postcss": "^7.0.0" + "postcss": "^7.0.6" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.32", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-7.0.32.tgz", + "integrity": "sha1-QxDW7jRwU9o0M9sr5JKIPWLOxZ0=", "dev": true, "requires": { "chalk": "^2.4.2", @@ -20862,10 +20098,16 @@ "supports-color": "^6.1.0" } }, + "source-map": { + "version": "0.6.1", + "resolved": "http://r.cnpmjs.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + }, "supports-color": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -20896,6 +20138,12 @@ "svgo": "^0.7.0" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", @@ -20923,10 +20171,16 @@ } } }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, "postcss": { "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", "dev": true, "requires": { "chalk": "^1.1.3", @@ -20935,18 +20189,30 @@ "supports-color": "^3.2.3" } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } } } }, "postcss-syntax": { "version": "0.36.2", - "resolved": "https://registry.npmjs.org/postcss-syntax/-/postcss-syntax-0.36.2.tgz", - "integrity": "sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==", + "resolved": "https://r.cnpmjs.org/postcss-syntax/download/postcss-syntax-0.36.2.tgz", + "integrity": "sha1-8IV4x9lYNFdOVZOoLfv6ivrjtRw=", "dev": true }, "postcss-unique-selectors": { @@ -20960,6 +20226,12 @@ "uniqs": "^2.0.0" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", @@ -20987,10 +20259,16 @@ } } }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, "postcss": { "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", "dev": true, "requires": { "chalk": "^1.1.3", @@ -20999,18 +20277,30 @@ "supports-color": "^3.2.3" } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } } } }, "postcss-value-parser": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "resolved": "http://r.cnpmjs.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", "dev": true }, "postcss-vmin": { @@ -21042,6 +20332,12 @@ "uniqs": "^2.0.0" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", @@ -21069,10 +20365,16 @@ } } }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, "postcss": { "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", "dev": true, "requires": { "chalk": "^1.1.3", @@ -21081,11 +20383,23 @@ "supports-color": "^3.2.3" } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } } } }, @@ -21113,6 +20427,21 @@ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", "dev": true }, + "prettier": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/prettier/download/prettier-2.1.2.tgz?cache=0&sync_timestamp=1600215657177&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fprettier%2Fdownload%2Fprettier-2.1.2.tgz", + "integrity": "sha1-MFBwDa4uTItnxMP2Zs24r0BeHOU=", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/prettier-linter-helpers/download/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha1-0j1B/hN1ZG3i0BBNNFSjAIgCz3s=", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, "pretty-error": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", @@ -21124,19 +20453,21 @@ } }, "pretty-format": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz", - "integrity": "sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==", + "version": "24.9.0", + "resolved": "http://r.cnpmjs.org/pretty-format/download/pretty-format-24.9.0.tgz", + "integrity": "sha1-EvrDGzcBmk7qPBGqmpWet2KKp8k=", "dev": true, "requires": { - "ansi-regex": "^3.0.0", - "ansi-styles": "^3.2.0" + "@jest/types": "^24.9.0", + "ansi-regex": "^4.0.0", + "ansi-styles": "^3.2.0", + "react-is": "^16.8.4" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz", + "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=", "dev": true } } @@ -21148,14 +20479,15 @@ "dev": true }, "prism-react-renderer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.0.2.tgz", - "integrity": "sha512-0++pJyRfu4v2OxI/Us/5RLui9ESDkTiLkVCtKuPZYdpB8UQWJpnJQhPrWab053XtsKW3oM0sD69uJ6N9exm1Ag==" + "version": "1.1.1", + "resolved": "http://r.cnpmjs.org/prism-react-renderer/download/prism-react-renderer-1.1.1.tgz", + "integrity": "sha1-HBvmGx65RGoUbKelC3vPNvKnCkQ=", + "dev": true }, "prismjs": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.17.1.tgz", - "integrity": "sha512-PrEDJAFdUGbOP6xK/UsfkC5ghJsPJviKgnQOoxaDbBjwc8op68Quupwt1DeAFoG8GImPhiKXAvvsH7wDSLsu1Q==", + "version": "1.21.0", + "resolved": "https://registry.npm.taobao.org/prismjs/download/prismjs-1.21.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fprismjs%2Fdownload%2Fprismjs-1.21.0.tgz", + "integrity": "sha1-NsCG7Da0UxnsQhjuFkwRD5/AFaM=", "dev": true, "requires": { "clipboard": "^2.0.0" @@ -21163,32 +20495,32 @@ }, "private": { "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "resolved": "http://r.cnpmjs.org/private/download/private-0.1.8.tgz", + "integrity": "sha1-I4Hts2ifelPWUxkAYPz4ItLzaP8=", "dev": true }, "process": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", - "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=", + "version": "0.11.10", + "resolved": "http://r.cnpmjs.org/process/download/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", "dev": true }, "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/process-nextick-args/download/process-nextick-args-2.0.1.tgz", + "integrity": "sha1-eCDZsWEgzFXKmud5JoCufbptf+I=", "dev": true }, "progress": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.1.tgz", - "integrity": "sha512-OE+a6vzqazc+K6LxJrX5UPyKFvGnL5CYmq2jFGNIBWHpc4QyE49/YOumcrpQFJpfejmvRtbJzgO1zPmMCqlbBg==", + "version": "2.0.3", + "resolved": "http://r.cnpmjs.org/progress/download/progress-2.0.3.tgz", + "integrity": "sha1-foz42PW48jnBvGi+tOt4Vn1XLvg=", "dev": true }, "promise": { "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "resolved": "http://r.cnpmjs.org/promise/download/promise-7.3.1.tgz", + "integrity": "sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078=", "requires": { "asap": "~2.0.3" } @@ -21201,33 +20533,34 @@ }, "promise-polyfill": { "version": "7.1.2", - "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-7.1.2.tgz", - "integrity": "sha512-FuEc12/eKqqoRYIGBrUptCBRhobL19PS2U31vMNTfyck1FxPyMfgsXyW4Mav85y/ZN1hop3hOwRlUDok23oYfQ==", + "resolved": "https://r.cnpmjs.org/promise-polyfill/download/promise-polyfill-7.1.2.tgz", + "integrity": "sha1-qwUwHYwoU2MBYi1pInYyJppwyjs=", "dev": true }, "prompts": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.0.4.tgz", - "integrity": "sha512-HTzM3UWp/99A0gk51gAegwo1QRYA7xjcZufMNe33rCclFszUYAuHe1fIN/3ZmiHeGPkUsNaRyQm1hHOfM0PKxA==", + "version": "2.3.2", + "resolved": "http://r.cnpmjs.org/prompts/download/prompts-2.3.2.tgz", + "integrity": "sha1-SAVy2J7POVZtK9P+LJ/Mt8TAsGg=", "dev": true, "requires": { - "kleur": "^3.0.2", - "sisteransi": "^1.0.0" + "kleur": "^3.0.3", + "sisteransi": "^1.0.4" } }, "prop-types": { - "version": "15.6.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz", - "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==", + "version": "15.7.2", + "resolved": "http://r.cnpmjs.org/prop-types/download/prop-types-15.7.2.tgz", + "integrity": "sha1-UsQedbjIfnK52TYOAga5ncv/psU=", "requires": { - "loose-envify": "^1.3.1", - "object-assign": "^4.1.1" + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" } }, "prop-types-exact": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/prop-types-exact/-/prop-types-exact-1.2.0.tgz", - "integrity": "sha512-K+Tk3Kd9V0odiXFP9fwDHUYRyvK3Nun3GVyPapSIs5OBkITAm15W0CPFD/YKTkMUAbc0b9CUwRQp2ybiBIq+eA==", + "resolved": "https://r.cnpmjs.org/prop-types-exact/download/prop-types-exact-1.2.0.tgz", + "integrity": "sha1-gl1r5GCUZjhII345JamMbpROmGk=", "dev": true, "requires": { "has": "^1.0.3", @@ -21236,27 +20569,28 @@ } }, "property-information": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.3.0.tgz", - "integrity": "sha512-IslotQn1hBCZDY7SaJ3zmCjVea219VTwmOk6Pu3z9haU9m4+T8GwaDubur+6NMHEU+Fjs/6/p66z6QULPkcL1w==", + "version": "5.5.0", + "resolved": "http://r.cnpmjs.org/property-information/download/property-information-5.5.0.tgz", + "integrity": "sha1-TcB11JMGGoLit9CW9Abgdu2FmUM=", + "dev": true, "requires": { - "xtend": "^4.0.1" + "xtend": "^4.0.0" } }, "proxy-addr": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", - "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", + "version": "2.0.6", + "resolved": "http://r.cnpmjs.org/proxy-addr/download/proxy-addr-2.0.6.tgz", + "integrity": "sha1-/cIzZQVEfT8vLGOO0nLK9hS7sr8=", "dev": true, "requires": { "forwarded": "~0.1.2", - "ipaddr.js": "1.9.0" + "ipaddr.js": "1.9.1" } }, "proxy-from-env": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", - "integrity": "sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4=", + "version": "1.1.0", + "resolved": "https://r.cnpmjs.org/proxy-from-env/download/proxy-from-env-1.1.0.tgz", + "integrity": "sha1-4QLxbKNVQkhldV0sno6k8k1Yw+I=", "dev": true }, "prr": { @@ -21272,15 +20606,15 @@ "dev": true }, "psl": { - "version": "1.1.29", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", - "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==", + "version": "1.8.0", + "resolved": "http://r.cnpmjs.org/psl/download/psl-1.8.0.tgz", + "integrity": "sha1-kyb4vPsBOtzABf3/BWrM4CDlHCQ=", "dev": true }, "public-encrypt": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "resolved": "http://r.cnpmjs.org/public-encrypt/download/public-encrypt-4.0.3.tgz", + "integrity": "sha1-T8ydd6B+SLp1J+fL4N4z0HATMeA=", "dev": true, "requires": { "bn.js": "^4.1.0", @@ -21289,33 +20623,30 @@ "parse-asn1": "^5.0.0", "randombytes": "^2.0.1", "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "http://r.cnpmjs.org/bn.js/download/bn.js-4.11.9.tgz", + "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=", + "dev": true + } } }, "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "version": "1.0.3", + "resolved": "http://r.cnpmjs.org/pump/download/pump-1.0.3.tgz", + "integrity": "sha1-Xf6DEcM7v2/BgmH580cCxHwIqVQ=", "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" - }, - "dependencies": { - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - } } }, "pumpify": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "resolved": "http://r.cnpmjs.org/pumpify/download/pumpify-1.5.1.tgz", + "integrity": "sha1-NlE74karJ1cLGjdKXOJ4v9dDcM4=", "dev": true, "requires": { "duplexify": "^3.6.0", @@ -21323,19 +20654,10 @@ "pump": "^2.0.0" }, "dependencies": { - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, "pump": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "resolved": "http://r.cnpmjs.org/pump/download/pump-2.0.1.tgz", + "integrity": "sha1-Ejma3W5M91Jtlzy8i1zi4pCLOQk=", "dev": true, "requires": { "end-of-stream": "^1.1.0", @@ -21346,14 +20668,14 @@ }, "punycode": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "resolved": "http://r.cnpmjs.org/punycode/download/punycode-2.1.1.tgz", + "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=", "dev": true }, "puppeteer": { "version": "1.20.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-1.20.0.tgz", - "integrity": "sha512-bt48RDBy2eIwZPrkgbcwHtb51mj2nKvHOPMaSH2IsWiv7lOG9k9zhaRzpDZafrk05ajMc3cu+lSQYYOfH2DkVQ==", + "resolved": "https://r.cnpmjs.org/puppeteer/download/puppeteer-1.20.0.tgz", + "integrity": "sha1-49JneG904dh88tFazFkXf0cbvjg=", "dev": true, "requires": { "debug": "^4.1.0", @@ -21368,27 +20690,24 @@ "dependencies": { "debug": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "resolved": "http://r.cnpmjs.org/debug/download/debug-4.1.1.tgz", + "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=", "dev": true, "requires": { "ms": "^2.1.1" } }, + "mime": { + "version": "2.4.6", + "resolved": "https://r.cnpmjs.org/mime/download/mime-2.4.6.tgz", + "integrity": "sha1-5bQHyQ20QvK+tbFiNz0Htpr/pNE=", + "dev": true + }, "ms": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "resolved": "http://r.cnpmjs.org/ms/download/ms-2.1.2.tgz", + "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", "dev": true - }, - "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } } } }, @@ -21399,9 +20718,9 @@ "dev": true }, "qs": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.1.tgz", - "integrity": "sha512-Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA==" + "version": "6.9.4", + "resolved": "http://r.cnpmjs.org/qs/download/qs-6.9.4.tgz", + "integrity": "sha1-kJCykNH5FyjTwi5UhDykSupatoc=" }, "query-string": { "version": "4.3.4", @@ -21427,8 +20746,8 @@ }, "querystringify": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", - "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==", + "resolved": "http://r.cnpmjs.org/querystringify/download/querystringify-2.1.1.tgz", + "integrity": "sha1-YOWl/WSn+L+k0qsu1v30yFutFU4=", "dev": true }, "quick-lru": { @@ -21437,15 +20756,55 @@ "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=", "dev": true }, + "quill": { + "version": "1.3.7", + "resolved": "https://registry.npm.taobao.org/quill/download/quill-1.3.7.tgz", + "integrity": "sha1-2lsvOixHDpMjQM2/NmjJ8h+Shug=", + "requires": { + "clone": "^2.1.1", + "deep-equal": "^1.0.1", + "eventemitter3": "^2.0.3", + "extend": "^3.0.2", + "parchment": "^1.1.4", + "quill-delta": "^3.6.2" + }, + "dependencies": { + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/clone/download/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=" + }, + "eventemitter3": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/eventemitter3/download/eventemitter3-2.0.3.tgz?cache=0&sync_timestamp=1598517724259&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feventemitter3%2Fdownload%2Feventemitter3-2.0.3.tgz", + "integrity": "sha1-teEHm1n7XhuidxwKmTvgYKWMmbo=" + } + } + }, + "quill-delta": { + "version": "3.6.3", + "resolved": "https://registry.npm.taobao.org/quill-delta/download/quill-delta-3.6.3.tgz", + "integrity": "sha1-sZ/SuJQSMBxg4f8hPY2GDqwPEDI=", + "requires": { + "deep-equal": "^1.0.1", + "extend": "^3.0.2", + "fast-diff": "1.1.2" + } + }, "raf": { "version": "3.4.1", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", - "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "resolved": "http://r.cnpmjs.org/raf/download/raf-3.4.1.tgz", + "integrity": "sha1-B0LpmkplUvRF1z4+4DKK8P8e3jk=", "dev": true, "requires": { "performance-now": "^2.1.0" } }, + "raf-schd": { + "version": "4.0.2", + "resolved": "https://r.cnpmjs.org/raf-schd/download/raf-schd-4.0.2.tgz", + "integrity": "sha1-vUTHCBiPLoTIEL9V/OqSMbyu2KA=" + }, "railroad-diagrams": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", @@ -21454,8 +20813,8 @@ }, "randexp": { "version": "0.4.6", - "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", - "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", + "resolved": "https://r.cnpmjs.org/randexp/download/randexp-0.4.6.tgz", + "integrity": "sha1-6YatXl4x2uE93W97MBmqfIf2DKM=", "dev": true, "requires": { "discontinuous-range": "1.0.0", @@ -21464,8 +20823,8 @@ }, "randomatic": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", - "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", + "resolved": "https://r.cnpmjs.org/randomatic/download/randomatic-3.1.1.tgz", + "integrity": "sha1-t3bvxZN1mE42xTey9RofCv8Noe0=", "dev": true, "requires": { "is-number": "^4.0.0", @@ -21475,16 +20834,22 @@ "dependencies": { "is-number": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "resolved": "http://r.cnpmjs.org/is-number/download/is-number-4.0.0.tgz", + "integrity": "sha1-ACbjf1RU1z41bf5lZGmYZ8an8P8=", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-6.0.3.tgz", + "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", "dev": true } } }, "randombytes": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "resolved": "http://r.cnpmjs.org/randombytes/download/randombytes-2.1.0.tgz", + "integrity": "sha1-32+ENy8CcNxlzfYpE0mrekc9Tyo=", "dev": true, "requires": { "safe-buffer": "^5.1.0" @@ -21492,8 +20857,8 @@ }, "randomfill": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "resolved": "http://r.cnpmjs.org/randomfill/download/randomfill-1.0.4.tgz", + "integrity": "sha1-ySGW/IarQr6YPxvzF3giSTHWFFg=", "dev": true, "requires": { "randombytes": "^2.0.5", @@ -21502,14 +20867,14 @@ }, "range-parser": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "resolved": "http://r.cnpmjs.org/range-parser/download/range-parser-1.2.1.tgz", + "integrity": "sha1-PPNwI9GZ4cJNGlW4SADC8+ZGgDE=", "dev": true }, "raw-body": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "resolved": "http://r.cnpmjs.org/raw-body/download/raw-body-2.4.0.tgz", + "integrity": "sha1-oc5vucm8NWylLoklarWQWeE9AzI=", "dev": true, "requires": { "bytes": "3.1.0", @@ -21526,28 +20891,21 @@ }, "rc": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "resolved": "https://r.cnpmjs.org/rc/download/rc-1.2.8.tgz", + "integrity": "sha1-zZJL9SAKB1uDwYjNa54hG3/A0+0=", "dev": true, "requires": { "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } } }, "react": { - "version": "16.12.0", - "resolved": "https://registry.npmjs.org/react/-/react-16.12.0.tgz", - "integrity": "sha512-fglqy3k5E+81pA8s+7K0/T3DBCF0ZDOher1elBFzF7O6arXJgzyu/FW+COxFvAWXJoJN9KIZbT2LXlukwphYTA==", + "version": "16.13.1", + "resolved": "https://r.cnpmjs.org/react/download/react-16.13.1.tgz", + "integrity": "sha1-LoGIIvGpdDEiwGPWQQ2FweOv5I4=", + "dev": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", @@ -21564,8 +20922,8 @@ "dependencies": { "react-transition-group": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-1.2.1.tgz", - "integrity": "sha512-CWaL3laCmgAFdxdKbhhps+c0HRGF4c+hdM4H23+FI1QBNUyx/AMeIJGWorehPNSaKnQNOAxL7PQmqMu78CDj3Q==", + "resolved": "http://r.cnpmjs.org/react-transition-group/download/react-transition-group-1.2.1.tgz", + "integrity": "sha1-4R9yslf5IbITIpp3TfRmEjRsfKY=", "requires": { "chain-function": "^1.0.0", "dom-helpers": "^3.2.0", @@ -21576,18 +20934,52 @@ } } }, - "react-click-outside": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/react-click-outside/-/react-click-outside-3.0.1.tgz", - "integrity": "sha512-d0KWFvBt+esoZUF15rL2UBB7jkeAqLU8L/Ny35oLK6fW6mIbOv/ChD+ExF4sR9PD26kVx+9hNfD0FTIqRZEyRQ==", + "react-beautiful-dnd": { + "version": "13.0.0", + "resolved": "https://r.cnpmjs.org/react-beautiful-dnd/download/react-beautiful-dnd-13.0.0.tgz", + "integrity": "sha1-9wzI/4K4S8cY+K8VfJ+VdXpsO0A=", "requires": { - "hoist-non-react-statics": "^2.1.1" + "@babel/runtime": "^7.8.4", + "css-box-model": "^1.2.0", + "memoize-one": "^5.1.1", + "raf-schd": "^4.0.2", + "react-redux": "^7.1.1", + "redux": "^4.0.4", + "use-memo-one": "^1.1.1" + }, + "dependencies": { + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "http://r.cnpmjs.org/hoist-non-react-statics/download/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha1-7OCsr3HWLClpwuxZ/v9CpLGoW0U=", + "requires": { + "react-is": "^16.7.0" + } + }, + "react-redux": { + "version": "7.2.1", + "resolved": "https://r.cnpmjs.org/react-redux/download/react-redux-7.2.1.tgz", + "integrity": "sha1-je33hJAQFNsv7KGrYzhk3uaK2YU=", + "requires": { + "@babel/runtime": "^7.5.5", + "hoist-non-react-statics": "^3.3.0", + "loose-envify": "^1.4.0", + "prop-types": "^15.7.2", + "react-is": "^16.9.0" + } + } } }, + "react-codemirror2": { + "version": "7.2.1", + "resolved": "https://registry.npm.taobao.org/react-codemirror2/download/react-codemirror2-7.2.1.tgz", + "integrity": "sha1-ONq0kvy+X7jr9WMOW7eSLbjToQw=", + "dev": true + }, "react-cropper": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/react-cropper/-/react-cropper-1.2.0.tgz", - "integrity": "sha512-Ubg7tb6eCfbOSpXx7G07uRD/GTy2H9gF1K1Dz7/Jo8kHux1uMiy8uy9DSuU6UxEDXGsedNDx1TibbjC23yPpTg==", + "resolved": "http://r.cnpmjs.org/react-cropper/download/react-cropper-1.2.0.tgz", + "integrity": "sha1-8OUa2/S9yRsZ0Mdm6LfYfYkFekc=", "requires": { "babel-core": "7.0.0-bridge.0", "cropperjs": "v1.0.0-rc.3", @@ -21607,8 +20999,8 @@ }, "react-dnd": { "version": "7.7.0", - "resolved": "https://registry.npmjs.org/react-dnd/-/react-dnd-7.7.0.tgz", - "integrity": "sha512-anpJDKMgdXE6kXvtBFmIAe1fuaexpVy7meUyNjiTfCnjQ1mRvnttGTVvcW9fMKijsUQYadiyvzd3BRxteFuVXg==", + "resolved": "https://registry.npm.taobao.org/react-dnd/download/react-dnd-7.7.0.tgz?cache=0&sync_timestamp=1590774710996&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-dnd%2Fdownload%2Freact-dnd-7.7.0.tgz", + "integrity": "sha1-nZgzMez4e6M9BY2GHmyprbglOi4=", "requires": { "@types/hoist-non-react-statics": "^3.3.1", "dnd-core": "^7.7.0", @@ -21616,21 +21008,11 @@ "invariant": "^2.1.0", "shallowequal": "^1.1.0" }, - "dependencies": { - "dnd-core": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/dnd-core/-/dnd-core-7.7.0.tgz", - "integrity": "sha512-+YqwflWEY1MEAEl2QiEiRaglYkCwIZryyQwximQGuTOm/ns7fS6Lg/i7OCkrtjM10D5FhArf/VUHIL4ZaRBK0g==", - "requires": { - "asap": "^2.0.6", - "invariant": "^2.2.4", - "redux": "^4.0.1" - } - }, + "dependencies": { "hoist-non-react-statics": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", - "integrity": "sha512-wbg3bpgA/ZqWrZuMOeJi8+SKMhr7X9TesL/rXMjTzh0p0JUBo3II8DHboYbuIXWRlttrUFxwcu/5kygrCw8fJw==", + "version": "3.3.2", + "resolved": "https://registry.npm.taobao.org/hoist-non-react-statics/download/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha1-7OCsr3HWLClpwuxZ/v9CpLGoW0U=", "requires": { "react-is": "^16.7.0" } @@ -21638,17 +21020,17 @@ } }, "react-dnd-html5-backend": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/react-dnd-html5-backend/-/react-dnd-html5-backend-7.4.4.tgz", - "integrity": "sha512-X/lP92ateY0glHan8mU0JzjBuZL6VHv2Gc/H9OBBxaf/ZCN1oC16MLKdesqG4x1f/NWFTNtuG3W4B99r5gPVog==", + "version": "7.7.0", + "resolved": "https://registry.npm.taobao.org/react-dnd-html5-backend/download/react-dnd-html5-backend-7.7.0.tgz?cache=0&sync_timestamp=1590774713150&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-dnd-html5-backend%2Fdownload%2Freact-dnd-html5-backend-7.7.0.tgz", + "integrity": "sha1-4rjqYaG8NLp0O4nK/NpiE7AGwGo=", "requires": { - "dnd-core": "^7.4.4" + "dnd-core": "^7.7.0" } }, "react-dnd-test-backend": { "version": "7.7.0", - "resolved": "https://registry.npmjs.org/react-dnd-test-backend/-/react-dnd-test-backend-7.7.0.tgz", - "integrity": "sha512-ELX2b6mBcgpVUuS9K74h+ldlHdsb1ZEVhJUm5vv7ZL+9l+xmpz+6IikiSdh7MmEGGrGLb2FCdXReeMPOblaCnQ==", + "resolved": "https://r.cnpmjs.org/react-dnd-test-backend/download/react-dnd-test-backend-7.7.0.tgz", + "integrity": "sha1-yCP00FtuSyCOrHPsfkwcU/uBQpA=", "dev": true, "requires": { "dnd-core": "^7.7.0" @@ -21656,8 +21038,8 @@ "dependencies": { "dnd-core": { "version": "7.7.0", - "resolved": "https://registry.npmjs.org/dnd-core/-/dnd-core-7.7.0.tgz", - "integrity": "sha512-+YqwflWEY1MEAEl2QiEiRaglYkCwIZryyQwximQGuTOm/ns7fS6Lg/i7OCkrtjM10D5FhArf/VUHIL4ZaRBK0g==", + "resolved": "https://registry.npm.taobao.org/dnd-core/download/dnd-core-7.7.0.tgz?cache=0&sync_timestamp=1590774711203&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdnd-core%2Fdownload%2Fdnd-core-7.7.0.tgz", + "integrity": "sha1-MWau/IxbhcpK3kroNnEqMQiXX6s=", "dev": true, "requires": { "asap": "^2.0.6", @@ -21669,25 +21051,40 @@ }, "react-dnd-test-utils": { "version": "7.7.0", - "resolved": "https://registry.npmjs.org/react-dnd-test-utils/-/react-dnd-test-utils-7.7.0.tgz", - "integrity": "sha512-OZAMws/26P6Jo5lVomxU3RZ9BEKyshG4szrkBK0ibF6SrfJ1ysEp4HOPtpeE0hVFdy3RG0eCsVDHXQSMY+6EBg==", + "resolved": "https://r.cnpmjs.org/react-dnd-test-utils/download/react-dnd-test-utils-7.7.0.tgz", + "integrity": "sha1-Yn28fzW/6dtzFIv4wfQ4u9eyva4=", "dev": true }, "react-dom": { - "version": "16.12.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.12.0.tgz", - "integrity": "sha512-LMxFfAGrcS3kETtQaCkTKjMiifahaMySFDn71fZUNpPHZQEzmk/GiAeIT8JSOrHB23fnuCOMruL2a8NYlw+8Gw==", + "version": "16.13.1", + "resolved": "https://r.cnpmjs.org/react-dom/download/react-dom-16.13.1.tgz", + "integrity": "sha1-wb03MxoEhsB47lTEdAcgmTsuDn8=", + "dev": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "scheduler": "^0.18.0" + "scheduler": "^0.19.1" + } + }, + "react-dom-factories": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/react-dom-factories/download/react-dom-factories-1.0.2.tgz", + "integrity": "sha1-63cFxNs2+1AbOqOP91lhaqD/luA=" + }, + "react-draggable": { + "version": "4.4.3", + "resolved": "https://r.cnpmjs.org/react-draggable/download/react-draggable-4.4.3.tgz", + "integrity": "sha1-ByfyyuWBPjaw5JYr8RsvnvK0BvM=", + "requires": { + "classnames": "^2.2.5", + "prop-types": "^15.6.0" } }, "react-hot-loader": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-4.2.0.tgz", - "integrity": "sha512-QqneZhA+cAbGBltg36/nivzi6Zh0PYHm4VJE2MqfEj8bAekLCqV/vqYc3fy2LIiGEctdsC+C8HCbmmCP53Ki4A==", + "resolved": "https://r.cnpmjs.org/react-hot-loader/download/react-hot-loader-4.2.0.tgz", + "integrity": "sha1-Si7HkRT4cuKOp4bgSInWQ609+3w=", "dev": true, "requires": { "fast-levenshtein": "^2.0.6", @@ -21699,19 +21096,20 @@ } }, "react-is": { - "version": "16.12.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.12.0.tgz", - "integrity": "sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q==" + "version": "16.13.1", + "resolved": "http://r.cnpmjs.org/react-is/download/react-is-16.13.1.tgz", + "integrity": "sha1-eJcppNw23imZ3BVt1sHZwYzqVqQ=" }, "react-lifecycles-compat": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + "resolved": "http://r.cnpmjs.org/react-lifecycles-compat/download/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha1-TxonOv38jzSIqMUWv9p4+HI1I2I=" }, "react-live": { "version": "2.2.2", - "resolved": "https://registry.npmjs.org/react-live/-/react-live-2.2.2.tgz", - "integrity": "sha512-kJYAzKnPsR4oXleAX9lLsJA330BhTmSWHhr3ienZA2E/0eFDRodGl3I7sge8pp1vjc2K5Aaz73KpFUnV7Lq/DQ==", + "resolved": "http://r.cnpmjs.org/react-live/download/react-live-2.2.2.tgz", + "integrity": "sha1-g07fHBEgTkn6dGgWYxay5w2hprA=", + "dev": true, "requires": { "buble": "0.19.6", "core-js": "^2.4.1", @@ -21723,10 +21121,24 @@ "unescape": "^1.0.1" } }, + "react-quill": { + "version": "1.3.5", + "resolved": "https://registry.npm.taobao.org/react-quill/download/react-quill-1.3.5.tgz", + "integrity": "sha1-jErXWdoDNlsXx5xsUq+pdyJZhE4=", + "requires": { + "@types/quill": "1.3.10", + "create-react-class": "^15.6.0", + "lodash": "^4.17.4", + "prop-types": "^15.5.10", + "quill": "^1.3.7", + "react-dom-factories": "^1.0.0" + } + }, "react-redux": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-5.1.2.tgz", - "integrity": "sha512-Ns1G0XXc8hDyH/OcBHOxNgQx9ayH3SPxBnFCOidGKSle8pKihysQw2rG/PmciUQRoclhVBO8HMhiRmGXnDja9Q==", + "resolved": "http://r.cnpmjs.org/react-redux/download/react-redux-5.1.2.tgz", + "integrity": "sha1-sZz54h1pRCJye/eY6TSpFsQID1c=", + "dev": true, "requires": { "@babel/runtime": "^7.1.2", "hoist-non-react-statics": "^3.3.0", @@ -21738,19 +21150,30 @@ }, "dependencies": { "hoist-non-react-statics": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", - "integrity": "sha512-wbg3bpgA/ZqWrZuMOeJi8+SKMhr7X9TesL/rXMjTzh0p0JUBo3II8DHboYbuIXWRlttrUFxwcu/5kygrCw8fJw==", + "version": "3.3.2", + "resolved": "http://r.cnpmjs.org/hoist-non-react-statics/download/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha1-7OCsr3HWLClpwuxZ/v9CpLGoW0U=", + "dev": true, "requires": { "react-is": "^16.7.0" } } } }, + "react-resizable": { + "version": "1.10.1", + "resolved": "https://r.cnpmjs.org/react-resizable/download/react-resizable-1.10.1.tgz", + "integrity": "sha1-8MLPHYOzRwuHZ2zm1rArvj9NjNQ=", + "requires": { + "prop-types": "15.x", + "react-draggable": "^4.0.3" + } + }, "react-router": { "version": "4.3.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-4.3.1.tgz", - "integrity": "sha512-yrvL8AogDh2X42Dt9iknk4wF4V8bWREPirFfS9gLU1huk6qK41sg7Z/1S81jjTrGHxa3B8R3J6xIkDAA6CVarg==", + "resolved": "https://r.cnpmjs.org/react-router/download/react-router-4.3.1.tgz", + "integrity": "sha1-qtpK7xTICcsuaGsFzuR0IjRQbE4=", + "dev": true, "requires": { "history": "^4.7.2", "hoist-non-react-statics": "^2.5.0", @@ -21761,10 +21184,26 @@ "warning": "^4.0.1" }, "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "http://r.cnpmjs.org/isarray/download/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "path-to-regexp": { + "version": "1.8.0", + "resolved": "http://r.cnpmjs.org/path-to-regexp/download/path-to-regexp-1.8.0.tgz", + "integrity": "sha1-iHs7qdhDk+h6CgufTLdWGYtTVIo=", + "dev": true, + "requires": { + "isarray": "0.0.1" + } + }, "warning": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", - "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "resolved": "http://r.cnpmjs.org/warning/download/warning-4.0.3.tgz", + "integrity": "sha1-Fungd+uKhtavfWSqHgX9hbRnjKM=", + "dev": true, "requires": { "loose-envify": "^1.0.0" } @@ -21773,16 +21212,18 @@ }, "react-router-config": { "version": "4.4.0-beta.8", - "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-4.4.0-beta.8.tgz", - "integrity": "sha512-yWMc1VjrfuHqZzuDA0V4Orzwvu94OijmLCsUWCja2KyQRRk1FYmhfAFXbNovPkXyV8TJxbUwpY1pznlmqWdJfA==", + "resolved": "http://r.cnpmjs.org/react-router-config/download/react-router-config-4.4.0-beta.8.tgz", + "integrity": "sha1-Fk//TpGvrSyDoLl1RNKYFihhOAE=", + "dev": true, "requires": { "@babel/runtime": "^7.1.2" } }, "react-router-dom": { "version": "4.3.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-4.3.1.tgz", - "integrity": "sha512-c/MlywfxDdCp7EnB7YfPMOfMD3tOtIjrQlj/CKfNMBxdmpJP8xcz5P/UAFn3JbnQCNUxsHyVVqllF9LhgVyFCA==", + "resolved": "https://r.cnpmjs.org/react-router-dom/download/react-router-dom-4.3.1.tgz", + "integrity": "sha1-TCYZ/CTE+ofJ/Rj0+0pD/mP71cY=", + "dev": true, "requires": { "history": "^4.7.2", "invariant": "^2.2.4", @@ -21794,8 +21235,9 @@ "dependencies": { "warning": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", - "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "resolved": "http://r.cnpmjs.org/warning/download/warning-4.0.3.tgz", + "integrity": "sha1-Fungd+uKhtavfWSqHgX9hbRnjKM=", + "dev": true, "requires": { "loose-envify": "^1.0.0" } @@ -21804,43 +21246,26 @@ }, "react-simple-code-editor": { "version": "0.10.0", - "resolved": "https://registry.npmjs.org/react-simple-code-editor/-/react-simple-code-editor-0.10.0.tgz", - "integrity": "sha512-bL5W5mAxSW6+cLwqqVWY47Silqgy2DKDTR4hDBrLrUqC5BXc29YVx17l2IZk5v36VcDEq1Bszu2oHm1qBwKqBA==" + "resolved": "http://r.cnpmjs.org/react-simple-code-editor/download/react-simple-code-editor-0.10.0.tgz", + "integrity": "sha1-c+esVQqSgGlxVIKuszzLo27+I3M=", + "dev": true }, "react-test-renderer": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.8.6.tgz", - "integrity": "sha512-H2srzU5IWYT6cZXof6AhUcx/wEyJddQ8l7cLM/F7gDXYyPr4oq+vCIxJYXVGhId1J706sqziAjuOEjyNkfgoEw==", + "version": "16.13.1", + "resolved": "https://r.cnpmjs.org/react-test-renderer/download/react-test-renderer-16.13.1.tgz", + "integrity": "sha1-3iXqNY2QEmBt5R4BLZdC5/Deq8E=", "dev": true, "requires": { "object-assign": "^4.1.1", "prop-types": "^15.6.2", "react-is": "^16.8.6", - "scheduler": "^0.13.6" - }, - "dependencies": { - "react-is": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", - "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==", - "dev": true - }, - "scheduler": { - "version": "0.13.6", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.6.tgz", - "integrity": "sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ==", - "dev": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - } + "scheduler": "^0.19.1" } }, "react-transition-group": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.3.0.tgz", - "integrity": "sha512-1qRV1ZuVSdxPlPf4O8t7inxUGpdyO5zG9IoNfJxSO0ImU2A1YWkEQvFPuIPZmMLkg5hYs7vv5mMOyfgSkvAwvw==", + "version": "4.4.1", + "resolved": "http://r.cnpmjs.org/react-transition-group/download/react-transition-group-4.4.1.tgz", + "integrity": "sha1-Y4aPkyWjjqXulTXYKDJ/hXczRck=", "requires": { "@babel/runtime": "^7.5.5", "dom-helpers": "^5.0.1", @@ -21849,12 +21274,12 @@ }, "dependencies": { "dom-helpers": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.1.3.tgz", - "integrity": "sha512-nZD1OtwfWGRBWlpANxacBEZrEuLa16o1nh7YopFWeoF68Zt8GGEmzHu6Xv4F3XaFIC+YXtTLrzgqKxFgLEe4jw==", + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/dom-helpers/download/dom-helpers-5.2.0.tgz?cache=0&sync_timestamp=1596411957116&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdom-helpers%2Fdownload%2Fdom-helpers-5.2.0.tgz", + "integrity": "sha1-V/0FTF+PNMUqPu/9t+fpPNNX2Vs=", "requires": { - "@babel/runtime": "^7.6.3", - "csstype": "^2.6.7" + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" } } } @@ -21877,6 +21302,19 @@ "load-json-file": "^1.0.0", "normalize-package-data": "^2.3.2", "path-type": "^1.0.0" + }, + "dependencies": { + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/path-type/download/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + } } }, "read-pkg-up": { @@ -21911,70 +21349,34 @@ } }, "readable-stream": { - "version": "1.1.14", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "version": "2.3.7", + "resolved": "http://r.cnpmjs.org/readable-stream/download/readable-stream-2.3.7.tgz", + "integrity": "sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c=", "dev": true, "requires": { "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "version": "3.4.0", + "resolved": "http://r.cnpmjs.org/readdirp/download/readdirp-3.4.0.tgz", + "integrity": "sha1-n9zN+ekVWAVEkiGsZF6DA6tbmto=", "dev": true, + "optional": true, "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "dependencies": { - "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } + "picomatch": "^2.2.1" } }, "realpath-native": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz", - "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", + "resolved": "http://r.cnpmjs.org/realpath-native/download/realpath-native-1.1.0.tgz", + "integrity": "sha1-IAMpT+oj+wZy8kduviL89Jii1lw=", "dev": true, "requires": { "util.promisify": "^1.0.0" @@ -21997,12 +21399,6 @@ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true } } }, @@ -22052,14 +21448,6 @@ "dev": true, "requires": { "esprima": "~4.0.0" - }, - "dependencies": { - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - } } }, "reduce-css-calc": { @@ -22082,26 +21470,18 @@ } }, "reduce-function-call": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz", - "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", + "version": "1.0.3", + "resolved": "https://r.cnpmjs.org/reduce-function-call/download/reduce-function-call-1.0.3.tgz", + "integrity": "sha1-YDUPf7JSwKZ+sQ/UaU0WkJlxMA8=", "dev": true, "requires": { - "balanced-match": "^0.4.2" - }, - "dependencies": { - "balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", - "dev": true - } + "balanced-match": "^1.0.0" } }, "redux": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.1.tgz", - "integrity": "sha512-R7bAtSkk7nY6O/OYMVR9RiBI+XghjF9rlbl5806HJbQph0LJVHZrU5oaO4q70eUKiqMRqm4y07KLTlMZ2BlVmg==", + "version": "4.0.5", + "resolved": "http://r.cnpmjs.org/redux/download/redux-4.0.5.tgz", + "integrity": "sha1-TbXeWBbheJHeioDEJCMtBvBR2T8=", "requires": { "loose-envify": "^1.4.0", "symbol-observable": "^1.2.0" @@ -22109,8 +21489,9 @@ }, "redux-thunk": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.3.0.tgz", - "integrity": "sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw==" + "resolved": "http://r.cnpmjs.org/redux-thunk/download/redux-thunk-2.3.0.tgz", + "integrity": "sha1-UcLBmhhe1Rh6qpotCLZm0NZGdiI=", + "dev": true }, "reflect.ownkeys": { "version": "0.2.0", @@ -22119,9 +21500,10 @@ "dev": true }, "refractor": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/refractor/-/refractor-2.10.0.tgz", - "integrity": "sha512-maW2ClIkm9IYruuFYGTqKzj+m31heq92wlheW4h7bOstP+gf8bocmMec+j7ljLcaB1CAID85LMB3moye31jH1g==", + "version": "2.10.1", + "resolved": "http://r.cnpmjs.org/refractor/download/refractor-2.10.1.tgz", + "integrity": "sha1-Fmwy8RTtFv2WGQrSHVGT06/H004=", + "dev": true, "requires": { "hastscript": "^5.0.0", "parse-entities": "^1.1.2", @@ -22130,8 +21512,9 @@ "dependencies": { "prismjs": { "version": "1.17.1", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.17.1.tgz", - "integrity": "sha512-PrEDJAFdUGbOP6xK/UsfkC5ghJsPJviKgnQOoxaDbBjwc8op68Quupwt1DeAFoG8GImPhiKXAvvsH7wDSLsu1Q==", + "resolved": "http://r.cnpmjs.org/prismjs/download/prismjs-1.17.1.tgz", + "integrity": "sha1-5mn8vUzdhzw1ECiBwzsU0NaFGb4=", + "dev": true, "requires": { "clipboard": "^2.0.0" } @@ -22139,29 +21522,38 @@ } }, "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==" + "version": "1.4.1", + "resolved": "https://r.cnpmjs.org/regenerate/download/regenerate-1.4.1.tgz", + "integrity": "sha1-ytkq2Oa1kXc0hfvgWkhcr09Ffm8=", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "http://r.cnpmjs.org/regenerate-unicode-properties/download/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha1-5d5xEdZV57pgwFfb6f83yH5lzew=", + "dev": true, + "requires": { + "regenerate": "^1.4.0" + } }, "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true + "version": "0.13.7", + "resolved": "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.13.7.tgz", + "integrity": "sha1-ysLazIoepnX+qrrriugziYrkb1U=" }, "regenerator-transform": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz", - "integrity": "sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==", + "version": "0.14.5", + "resolved": "https://registry.npm.taobao.org/regenerator-transform/download/regenerator-transform-0.14.5.tgz?cache=0&sync_timestamp=1593557271381&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-transform%2Fdownload%2Fregenerator-transform-0.14.5.tgz", + "integrity": "sha1-yY2hVGg2ccnE3LFuznNlF+G3/rQ=", "dev": true, "requires": { - "private": "^0.1.6" + "@babel/runtime": "^7.8.4" } }, "regex-cache": { "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "resolved": "https://r.cnpmjs.org/regex-cache/download/regex-cache-0.4.4.tgz", + "integrity": "sha1-db3FiioUls7EihKDW8VMjVYjNt0=", "dev": true, "requires": { "is-equal-shallow": "^0.1.3" @@ -22169,8 +21561,8 @@ }, "regex-not": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "resolved": "http://r.cnpmjs.org/regex-not/download/regex-not-1.0.2.tgz", + "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=", "dev": true, "requires": { "extend-shallow": "^3.0.2", @@ -22179,130 +21571,43 @@ }, "regexp.prototype.flags": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", - "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", - "dev": true, + "resolved": "http://r.cnpmjs.org/regexp.prototype.flags/download/regexp.prototype.flags-1.3.0.tgz", + "integrity": "sha1-erqJs8E6ZFCdq888qNn7ub31y3U=", "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.17.0-next.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0.tgz", - "integrity": "sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.1.5", - "is-regex": "^1.0.5", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "is-callable": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", - "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", - "dev": true - }, - "is-regex": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", - "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } } }, + "regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/regexpp/download/regexpp-3.1.0.tgz", + "integrity": "sha1-IG0K0KVkjP+9uK5GQ489xRyfeOI=", + "dev": true + }, "regexpu-core": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.6.0.tgz", - "integrity": "sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg==", + "version": "4.7.0", + "resolved": "http://r.cnpmjs.org/regexpu-core/download/regexpu-core-4.7.0.tgz", + "integrity": "sha1-/L9FjFBDGwu3tF1pZ7gZLZHz2Tg=", + "dev": true, "requires": { "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.1.0", - "regjsgen": "^0.5.0", - "regjsparser": "^0.6.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.1.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" - }, - "regenerate-unicode-properties": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz", - "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==", - "requires": { - "regenerate": "^1.4.0" - } - }, - "regjsgen": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz", - "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==" - }, - "regjsparser": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.2.tgz", - "integrity": "sha512-E9ghzUtoLwDekPT0DYCp+c4h+bvuUpe6rRHCTYn6eGoqj1LgKXxT6I0Il4WbjhQkOghzi/V+y03bPKvbllL93Q==", - "requires": { - "jsesc": "~0.5.0" - } - } + "unicode-match-property-value-ecmascript": "^1.2.0" } }, "regjsgen": { - "version": "0.2.0", - "resolved": "http://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "version": "0.5.2", + "resolved": "http://r.cnpmjs.org/regjsgen/download/regjsgen-0.5.2.tgz", + "integrity": "sha1-kv8pX7He7L9uzaslQ9IH6RqjNzM=", "dev": true }, "regjsparser": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "version": "0.6.4", + "resolved": "http://r.cnpmjs.org/regjsparser/download/regjsparser-0.6.4.tgz", + "integrity": "sha1-p2n4aEMIQBpm6bUp0kNv9NBmYnI=", "dev": true, "requires": { "jsesc": "~0.5.0" @@ -22324,8 +21629,8 @@ }, "remark": { "version": "10.0.1", - "resolved": "https://registry.npmjs.org/remark/-/remark-10.0.1.tgz", - "integrity": "sha512-E6lMuoLIy2TyiokHprMjcWNJ5UxfGQjaMSMhV+f4idM625UjjK4j798+gPs5mfjzDE6vL0oFKVeZM6gZVSVrzQ==", + "resolved": "https://r.cnpmjs.org/remark/download/remark-10.0.1.tgz", + "integrity": "sha1-MFgHbcQXgb9QXYl4wpFIX+R2Z98=", "dev": true, "requires": { "remark-parse": "^6.0.0", @@ -22333,16 +21638,16 @@ "unified": "^7.0.0" }, "dependencies": { - "is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://r.cnpmjs.org/is-plain-obj/download/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", "dev": true }, "remark-parse": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-6.0.3.tgz", - "integrity": "sha512-QbDXWN4HfKTUC0hHa4teU463KclLAnwpn/FBn87j9cKYJWWawbiLgMfP2Q4XwhxxuuuOxHlw+pSN0OKuJwyVvg==", + "resolved": "https://r.cnpmjs.org/remark-parse/download/remark-parse-6.0.3.tgz", + "integrity": "sha1-yZExBSgJ2kghCEE/h7Duf1IYCjo=", "dev": true, "requires": { "collapse-white-space": "^1.0.2", @@ -22362,16 +21667,10 @@ "xtend": "^4.0.1" } }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - }, "unified": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-7.1.0.tgz", - "integrity": "sha512-lbk82UOIGuCEsZhPj8rNAkXSDXd6p0QLzIuSsCdxrqnqU56St4eyOB+AlXsVgVeRmetPTYydIuvFfpDIed8mqw==", + "resolved": "https://r.cnpmjs.org/unified/download/unified-7.1.0.tgz", + "integrity": "sha1-UDLxwe4zZL0J2hLif91KdVPHvhM=", "dev": true, "requires": { "@types/unist": "^2.0.0", @@ -22384,294 +21683,177 @@ "x-is-string": "^0.1.0" } }, - "unist-util-stringify-position": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz", - "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==", - "dev": true - }, - "vfile": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-3.0.1.tgz", - "integrity": "sha512-y7Y3gH9BsUSdD4KzHsuMaCzRjglXN0W2EcMf0gpvu6+SbsGhMje7xDc8AEoeXy6mIwCKMI6BkjMsRjzQbhMEjQ==", - "dev": true, - "requires": { - "is-buffer": "^2.0.0", - "replace-ext": "1.0.0", - "unist-util-stringify-position": "^1.0.0", - "vfile-message": "^1.0.0" - } - }, - "vfile-message": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz", - "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==", - "dev": true, - "requires": { - "unist-util-stringify-position": "^1.1.1" - } - } - } - }, - "remark-mdx": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.5.3.tgz", - "integrity": "sha512-7WqfwdyER3k0gNiikzw9y+AQskAm6PX2qEF97vhuZ9y8/MatVKoWGCPX4VCYAN0qlM1X6ty761rbMWMy5OmgyA==", - "dev": true, - "requires": { - "@babel/core": "7.7.4", - "@babel/helper-plugin-utils": "7.0.0", - "@babel/plugin-proposal-object-rest-spread": "7.7.4", - "@babel/plugin-syntax-jsx": "7.7.4", - "@mdx-js/util": "^1.5.3", - "is-alphabetical": "1.0.3", - "remark-parse": "7.0.2", - "unified": "8.4.2" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/core": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.7.4.tgz", - "integrity": "sha512-+bYbx56j4nYBmpsWtnPUsKW3NdnYxbqyfrP2w9wILBuHzdfIKz9prieZK0DFPyIzkjYVUe4QkusGL07r5pXznQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.4", - "@babel/helpers": "^7.7.4", - "@babel/parser": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "json5": "^2.1.0", - "lodash": "^4.17.13", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - } - }, - "@babel/generator": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.7.tgz", - "integrity": "sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", - "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", - "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", - "dev": true - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.7.4.tgz", - "integrity": "sha512-rnpnZR3/iWKmiQyJ3LKJpSwLDcX/nSXhdLk4Aq/tXOApIvyu7qoabrige0ylsAJffaUC51WiBu209Q0U+86OWQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.7.4" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.7.4.tgz", - "integrity": "sha512-wuy6fiMe9y7HeZBWXYCGt2RGxZOj0BImZ9EyXJVnVGBKO/Br592rbR3rtIQn0eQhAk9vqaKP5n8tVqEFBQMfLg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", + "unist-util-remove-position": { + "version": "1.1.4", + "resolved": "https://r.cnpmjs.org/unist-util-remove-position/download/unist-util-remove-position-1.1.4.tgz", + "integrity": "sha1-7ANzSLYQLIl3A+7m0ClMpHVaICA=", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" + "unist-util-visit": "^1.1.0" } }, - "@babel/traverse": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.4.tgz", - "integrity": "sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==", + "unist-util-stringify-position": { + "version": "1.1.2", + "resolved": "https://r.cnpmjs.org/unist-util-stringify-position/download/unist-util-stringify-position-1.1.2.tgz", + "integrity": "sha1-Pzf881EnncvKdICrWIm7ioMu4cY=", + "dev": true + }, + "vfile": { + "version": "3.0.1", + "resolved": "https://r.cnpmjs.org/vfile/download/vfile-3.0.1.tgz", + "integrity": "sha1-RzMdKr4ygkJPSku2rNIKRMQSGAM=", "dev": true, "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.4", - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" + "is-buffer": "^2.0.0", + "replace-ext": "1.0.0", + "unist-util-stringify-position": "^1.0.0", + "vfile-message": "^1.0.0" } }, - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "vfile-location": { + "version": "2.0.6", + "resolved": "https://r.cnpmjs.org/vfile-location/download/vfile-location-2.0.6.tgz", + "integrity": "sha1-iidPOUEbhxnqVyiALhDZ4N/xUZ4=", + "dev": true + }, + "vfile-message": { + "version": "1.1.1", + "resolved": "https://r.cnpmjs.org/vfile-message/download/vfile-message-1.1.1.tgz", + "integrity": "sha1-WDOuB4od+i2W6WR4hs0ymTqzE+E=", "dev": true, "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" + "unist-util-stringify-position": "^1.1.1" + } + } + } + }, + "remark-footnotes": { + "version": "1.0.0", + "resolved": "https://r.cnpmjs.org/remark-footnotes/download/remark-footnotes-1.0.0.tgz", + "integrity": "sha1-nHqX+aiTl4WKUAMzcwILHqKq0BE=", + "dev": true + }, + "remark-mdx": { + "version": "1.6.16", + "resolved": "https://registry.npm.taobao.org/remark-mdx/download/remark-mdx-1.6.16.tgz", + "integrity": "sha1-E+5ArQYUocwXmso2BNfxt55Jii8=", + "dev": true, + "requires": { + "@babel/core": "7.10.5", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-proposal-object-rest-spread": "7.10.4", + "@babel/plugin-syntax-jsx": "7.10.4", + "@mdx-js/util": "1.6.16", + "is-alphabetical": "1.0.4", + "remark-parse": "8.0.3", + "unified": "9.1.0" + }, + "dependencies": { + "@babel/core": { + "version": "7.10.5", + "resolved": "https://registry.npm.taobao.org/@babel/core/download/@babel/core-7.10.5.tgz?cache=0&sync_timestamp=1596578776945&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcore%2Fdownload%2F%40babel%2Fcore-7.10.5.tgz", + "integrity": "sha1-HxXizKitmh14o43bphL158270zA=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.10.5", + "@babel/helper-module-transforms": "^7.10.5", + "@babel/helpers": "^7.10.4", + "@babel/parser": "^7.10.5", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.5", + "@babel/types": "^7.10.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" } }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-object-rest-spread/download/@babel/plugin-proposal-object-rest-spread-7.10.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-object-rest-spread%2Fdownload%2F%40babel%2Fplugin-proposal-object-rest-spread-7.10.4.tgz", + "integrity": "sha1-UBKawha5pqVbOFP92SPnS/VTpMA=", "dev": true, "requires": { - "safe-buffer": "~5.1.1" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.10.4" } }, "debug": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "resolved": "http://r.cnpmjs.org/debug/download/debug-4.1.1.tgz", + "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=", "dev": true, "requires": { "ms": "^2.1.1" } }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "is-alphabetical": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.3.tgz", - "integrity": "sha512-eEMa6MKpHFzw38eKm56iNNi6GJ7lf6aLLio7Kr23sJPAECscgRtZvOBYybejWDQ2bM949Y++61PY+udzj5QMLA==", - "dev": true - }, - "json5": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz", - "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, "ms": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "resolved": "http://r.cnpmjs.org/ms/download/ms-2.1.2.tgz", + "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", "dev": true } } }, "remark-parse": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-7.0.2.tgz", - "integrity": "sha512-9+my0lQS80IQkYXsMA8Sg6m9QfXYJBnXjWYN5U+kFc5/n69t+XZVXU/ZBYr3cYH8FheEGf1v87rkFDhJ8bVgMA==", + "version": "8.0.3", + "resolved": "https://registry.npm.taobao.org/remark-parse/download/remark-parse-8.0.3.tgz?cache=0&sync_timestamp=1594994190844&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fremark-parse%2Fdownload%2Fremark-parse-8.0.3.tgz", + "integrity": "sha1-nGKqOzW3mkhkVMaQRykGB19Ax+E=", "dev": true, "requires": { + "ccount": "^1.0.0", "collapse-white-space": "^1.0.2", "is-alphabetical": "^1.0.0", "is-decimal": "^1.0.0", "is-whitespace-character": "^1.0.0", "is-word-character": "^1.0.0", "markdown-escapes": "^1.0.0", - "parse-entities": "^1.1.0", + "parse-entities": "^2.0.0", "repeat-string": "^1.5.4", "state-toggle": "^1.0.0", "trim": "0.0.1", "trim-trailing-lines": "^1.0.0", "unherit": "^1.0.4", - "unist-util-remove-position": "^1.0.0", - "vfile-location": "^2.0.0", + "unist-util-remove-position": "^2.0.0", + "vfile-location": "^3.0.0", "xtend": "^4.0.1" + }, + "dependencies": { + "parse-entities": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/parse-entities/download/parse-entities-2.0.0.tgz", + "integrity": "sha1-U8brW5MUofTsmfoP33zgHs2gy+g=", + "dev": true, + "requires": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + } } }, "remark-squeeze-paragraphs": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-3.0.4.tgz", - "integrity": "sha512-Wmz5Yj9q+W1oryo8BV17JrOXZgUKVcpJ2ApE2pwnoHwhFKSk4Wp2PmFNbmJMgYSqAdFwfkoe+TSYop5Fy8wMgA==", + "version": "4.0.0", + "resolved": "https://r.cnpmjs.org/remark-squeeze-paragraphs/download/remark-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha1-dusOCFKVExyEdIyOQ4EBWcVlPq0=", "dev": true, "requires": { - "mdast-squeeze-paragraphs": "^3.0.0" + "mdast-squeeze-paragraphs": "^4.0.0" } }, "remark-stringify": { "version": "6.0.4", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-6.0.4.tgz", - "integrity": "sha512-eRWGdEPMVudijE/psbIDNcnJLRVx3xhfuEsTDGgH4GsFF91dVhw5nhmnBppafJ7+NWINW6C7ZwWbi30ImJzqWg==", + "resolved": "https://r.cnpmjs.org/remark-stringify/download/remark-stringify-6.0.4.tgz", + "integrity": "sha1-FqwinU0VkySQGGY8e93yiq/E4Ig=", "dev": true, "requires": { "ccount": "^1.0.0", @@ -22697,18 +21879,24 @@ "dev": true }, "renderkid": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.2.tgz", - "integrity": "sha512-FsygIxevi1jSiPY9h7vZmBFUbAOcbYm9UwyiLNdVsLRs/5We9Ob5NMPbGYUTWiLq5L+ezlVdE0A8bbME5CWTpg==", + "version": "2.0.3", + "resolved": "http://r.cnpmjs.org/renderkid/download/renderkid-2.0.3.tgz", + "integrity": "sha1-OAF5wv9a4TZcUivy/Pz/AcW3QUk=", "dev": true, "requires": { "css-select": "^1.1.0", - "dom-converter": "~0.2", - "htmlparser2": "~3.3.0", + "dom-converter": "^0.2", + "htmlparser2": "^3.3.0", "strip-ansi": "^3.0.0", "utila": "^0.4.0" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, "css-select": { "version": "1.2.0", "resolved": "http://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", @@ -22721,6 +21909,12 @@ "nth-check": "~1.0.1" } }, + "css-what": { + "version": "2.1.3", + "resolved": "https://r.cnpmjs.org/css-what/download/css-what-2.1.3.tgz", + "integrity": "sha1-ptdgRXM2X+dGhsPzEcVlE9iChfI=", + "dev": true + }, "domutils": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", @@ -22730,13 +21924,22 @@ "dom-serializer": "0", "domelementtype": "1" } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } } } }, "repeat-element": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "resolved": "http://r.cnpmjs.org/repeat-element/download/repeat-element-1.1.3.tgz", + "integrity": "sha1-eC4NglwMWjuzlzH4Tv7mt0Lmsc4=", "dev": true }, "repeat-string": { @@ -22755,15 +21958,15 @@ } }, "replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", + "version": "1.0.0", + "resolved": "https://r.cnpmjs.org/replace-ext/download/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", "dev": true }, "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "version": "2.88.2", + "resolved": "http://r.cnpmjs.org/request/download/request-2.88.2.tgz", + "integrity": "sha1-1zyRhzHLWofaBH4gcjQUb2ZNErM=", "dev": true, "requires": { "aws-sign2": "~0.7.0", @@ -22773,7 +21976,7 @@ "extend": "~3.0.2", "forever-agent": "~0.6.1", "form-data": "~2.3.2", - "har-validator": "~5.1.0", + "har-validator": "~5.1.3", "http-signature": "~1.2.0", "is-typedarray": "~1.0.0", "isstream": "~0.1.2", @@ -22783,35 +21986,41 @@ "performance-now": "^2.1.0", "qs": "~6.5.2", "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", + "tough-cookie": "~2.5.0", "tunnel-agent": "^0.6.0", "uuid": "^3.3.2" }, "dependencies": { "qs": { "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "resolved": "http://r.cnpmjs.org/qs/download/qs-6.5.2.tgz", + "integrity": "sha1-yzroBuh0BERYTvFUzo7pjUA/PjY=", + "dev": true + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://r.cnpmjs.org/uuid/download/uuid-3.4.0.tgz", + "integrity": "sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4=", "dev": true } } }, "request-promise-core": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz", - "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==", + "version": "1.1.4", + "resolved": "https://registry.npm.taobao.org/request-promise-core/download/request-promise-core-1.1.4.tgz?cache=0&sync_timestamp=1595378690362&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frequest-promise-core%2Fdownload%2Frequest-promise-core-1.1.4.tgz", + "integrity": "sha1-Pu3UIjII1BmGe3jOgVFn0QWToi8=", "dev": true, "requires": { - "lodash": "^4.17.11" + "lodash": "^4.17.19" } }, "request-promise-native": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz", - "integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==", + "version": "1.0.9", + "resolved": "https://registry.npm.taobao.org/request-promise-native/download/request-promise-native-1.0.9.tgz", + "integrity": "sha1-5AcSBSal79yaObKKVnm/R7nZ3Cg=", "dev": true, "requires": { - "request-promise-core": "1.1.2", + "request-promise-core": "1.1.4", "stealthy-require": "^1.1.1", "tough-cookie": "^2.3.3" } @@ -22822,36 +22031,12 @@ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, "require-main-filename": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", "dev": true }, - "require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "dev": true, - "requires": { - "caller-path": "^0.1.0", - "resolve-from": "^1.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "dev": true - } - } - }, "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", @@ -22859,12 +22044,12 @@ "dev": true }, "resolve": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", - "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", + "version": "1.17.0", + "resolved": "http://r.cnpmjs.org/resolve/download/resolve-1.17.0.tgz", + "integrity": "sha1-sllBtUloIxzC0bt2p5y38sC/hEQ=", "dev": true, "requires": { - "path-parse": "^1.0.5" + "path-parse": "^1.0.6" } }, "resolve-cwd": { @@ -22894,8 +22079,9 @@ }, "resolve-pathname": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" + "resolved": "http://r.cnpmjs.org/resolve-pathname/download/resolve-pathname-3.0.0.tgz", + "integrity": "sha1-mdAiJNPPJjaJvsuzk7xWAxMCXc0=", + "dev": true }, "resolve-url": { "version": "0.2.1", @@ -22904,19 +22090,19 @@ "dev": true }, "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/restore-cursor/download/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "dev": true, "requires": { - "exit-hook": "^1.0.0", - "onetime": "^1.0.0" + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" } }, "ret": { "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "resolved": "http://r.cnpmjs.org/ret/download/ret-0.1.15.tgz", + "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=", "dev": true }, "retry": { @@ -22925,6 +22111,12 @@ "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", "dev": true }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/reusify/download/reusify-1.0.4.tgz", + "integrity": "sha1-kNo4Kx4SbvwCFG6QhFqI2xKSXXY=", + "dev": true + }, "rgb-hex": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/rgb-hex/-/rgb-hex-2.1.0.tgz", @@ -22945,8 +22137,8 @@ }, "rimraf": { "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "resolved": "http://r.cnpmjs.org/rimraf/download/rimraf-2.7.1.tgz", + "integrity": "sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w=", "dev": true, "requires": { "glob": "^7.1.3" @@ -22954,8 +22146,8 @@ }, "ripemd160": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "resolved": "http://r.cnpmjs.org/ripemd160/download/ripemd160-2.0.2.tgz", + "integrity": "sha1-ocGm9iR1FXe6XQeRTLyShQWFiQw=", "dev": true, "requires": { "hash-base": "^3.0.0", @@ -22973,15 +22165,15 @@ } }, "rsvp": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.4.tgz", - "integrity": "sha512-6FomvYPfs+Jy9TfXmBpBuMWNH94SgCsZmJKcanySzgNNP6LjWxBvyLTa9KaMfDDM5oxRfrKDB0r/qeRsLwnBfA==", + "version": "4.8.5", + "resolved": "http://r.cnpmjs.org/rsvp/download/rsvp-4.8.5.tgz", + "integrity": "sha1-yPFVMR0Wf2jyHhaN9x7FsIMRNzQ=", "dev": true }, "rucksack-css": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/rucksack-css/-/rucksack-css-1.0.2.tgz", - "integrity": "sha512-+ir3KHUb+IfCjqTsUruYZDKf95GZKhqucVridhNSuU9AsC7efqBhKtzJeMNZqc+EOND0LWBenG5ZCodKUPbL6g==", + "resolved": "https://r.cnpmjs.org/rucksack-css/download/rucksack-css-1.0.2.tgz", + "integrity": "sha1-d4CLQJezWs+5LnDcibZaojL1Fp8=", "dev": true, "requires": { "autoprefixer": "^7.1.2", @@ -23008,8 +22200,8 @@ "dependencies": { "autoprefixer": { "version": "7.2.6", - "resolved": "http://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.6.tgz", - "integrity": "sha512-Iq8TRIB+/9eQ8rbGhcP7ct5cYb/3qjNYAR2SnzLCEcwF6rvVOax8+9+fccgXk4bEhQGjOZd5TLhsksmAdsbGqQ==", + "resolved": "http://r.cnpmjs.org/autoprefixer/download/autoprefixer-7.2.6.tgz", + "integrity": "sha1-JWZy+G98c12oScTwfQCKuwVgZ9w=", "dev": true, "requires": { "browserslist": "^2.11.3", @@ -23022,35 +22214,20 @@ }, "browserslist": { "version": "2.11.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz", - "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==", + "resolved": "http://r.cnpmjs.org/browserslist/download/browserslist-2.11.3.tgz", + "integrity": "sha1-/jYWeu0bvN5IJ+v+cTR6LMcLmbI=", "dev": true, "requires": { "caniuse-lite": "^1.0.30000792", "electron-to-chromium": "^1.3.30" } - }, - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true } } }, - "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "dev": true, - "requires": { - "is-promise": "^2.1.0" - } - }, "run-parallel": { "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", - "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", + "resolved": "https://r.cnpmjs.org/run-parallel/download/run-parallel-1.1.9.tgz", + "integrity": "sha1-yd06fPn0ssS2JE4XOm7YZuYd1nk=", "dev": true }, "run-queue": { @@ -23064,8 +22241,8 @@ }, "run-sequence": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/run-sequence/-/run-sequence-2.2.1.tgz", - "integrity": "sha512-qkzZnQWMZjcKbh3CNly2srtrkaO/2H/SI5f2eliMCapdRD3UhMrwjfOAZJAnZ2H8Ju4aBzFZkBGXUqFs9V0yxw==", + "resolved": "https://r.cnpmjs.org/run-sequence/download/run-sequence-2.2.1.tgz", + "integrity": "sha1-HOZD2jb9jH6n4akynaM/wriJhJU=", "dev": true, "requires": { "chalk": "^1.1.3", @@ -23073,6 +22250,12 @@ "plugin-error": "^0.1.2" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", @@ -23142,6 +22325,15 @@ "extend-shallow": "^1.1.2" } }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", @@ -23150,25 +22342,10 @@ } } }, - "rx-lite": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", - "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", - "dev": true - }, - "rx-lite-aggregates": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", - "dev": true, - "requires": { - "rx-lite": "*" - } - }, "rxjs": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", - "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", + "version": "6.6.2", + "resolved": "https://registry.npm.taobao.org/rxjs/download/rxjs-6.6.2.tgz", + "integrity": "sha1-gJanrAPyzE/lhg725XKBDZ4BwNI=", "dev": true, "requires": { "tslib": "^1.9.0" @@ -23176,8 +22353,8 @@ }, "safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "resolved": "http://r.cnpmjs.org/safe-buffer/download/safe-buffer-5.1.2.tgz", + "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=", "dev": true }, "safe-regex": { @@ -23191,13 +22368,13 @@ }, "safer-buffer": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "resolved": "http://r.cnpmjs.org/safer-buffer/download/safer-buffer-2.1.2.tgz", + "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=" }, "sane": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "resolved": "http://r.cnpmjs.org/sane/download/sane-4.1.0.tgz", + "integrity": "sha1-7Ygf2SJzOmxGG8GJ3CtsAG8//e0=", "dev": true, "requires": { "@cnakazawa/watch": "^1.0.3", @@ -23211,79 +22388,373 @@ "walker": "~1.0.5" }, "dependencies": { - "execa": { + "arr-diff": { + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/arr-diff/download/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "http://r.cnpmjs.org/array-unique/download/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "http://r.cnpmjs.org/braces/download/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "debug": { + "version": "2.6.9", + "resolved": "http://r.cnpmjs.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "http://r.cnpmjs.org/expand-brackets/download/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "http://r.cnpmjs.org/extglob/download/extglob-2.0.4.tgz", + "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/fill-range/download/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "http://r.cnpmjs.org/is-buffer/download/is-buffer-1.1.6.tgz", + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", + "dev": true + }, + "is-data-descriptor": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "resolved": "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "dev": true, "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "kind-of": "^6.0.0" } }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "is-descriptor": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "dev": true, "requires": { - "pump": "^3.0.0" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "is-number": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-6.0.3.tgz", + "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "http://r.cnpmjs.org/micromatch/download/micromatch-3.1.10.tgz", + "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } } } }, "sass-graph": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", - "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", + "version": "2.2.5", + "resolved": "https://r.cnpmjs.org/sass-graph/download/sass-graph-2.2.5.tgz", + "integrity": "sha1-qYHIdEa4MZ2W3OBnHkh4eb0kwug=", "dev": true, "requires": { "glob": "^7.0.0", "lodash": "^4.0.0", "scss-tokenizer": "^0.2.3", - "yargs": "^7.0.0" + "yargs": "^13.3.2" } }, "sass-loader": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.1.0.tgz", - "integrity": "sha512-+G+BKGglmZM2GUSfT9TLuEp6tzehHPjAMoRRItOojWIqIGPloVCMhNIQuG639eJ+y033PaGTSjLaTHts8Kw79w==", + "version": "7.3.1", + "resolved": "http://r.cnpmjs.org/sass-loader/download/sass-loader-7.3.1.tgz", + "integrity": "sha1-pb9ooEvOocE/+ELXRxUPerfQ0j8=", "dev": true, "requires": { - "clone-deep": "^2.0.1", + "clone-deep": "^4.0.1", "loader-utils": "^1.0.1", - "lodash.tail": "^4.1.1", "neo-async": "^2.5.0", - "pify": "^3.0.0", - "semver": "^5.5.0" + "pify": "^4.0.1", + "semver": "^6.3.0" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "http://r.cnpmjs.org/pify/download/pify-4.0.1.tgz", + "integrity": "sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE=", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "http://r.cnpmjs.org/semver/download/semver-6.3.0.tgz", + "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", + "dev": true + } } }, "sax": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "resolved": "http://r.cnpmjs.org/sax/download/sax-1.2.4.tgz", + "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=", "dev": true }, "scheduler": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.18.0.tgz", - "integrity": "sha512-agTSHR1Nbfi6ulI0kYNK0203joW2Y5W4po4l+v03tOoiJKpTBbxpNhWDvqc/4IcOw+KLmSiQLTasZ4cab2/UWQ==", + "version": "0.19.1", + "resolved": "http://r.cnpmjs.org/scheduler/download/scheduler-0.19.1.tgz", + "integrity": "sha1-Tz4u0sGn1laB9MhU+oxaHMtA8ZY=", + "dev": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" } }, + "schema-utils": { + "version": "2.7.0", + "resolved": "https://r.cnpmjs.org/schema-utils/download/schema-utils-2.7.0.tgz", + "integrity": "sha1-FxUfdtjq5n+793lgwzxnatn078c=", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + } + }, "scss-tokenizer": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", @@ -23308,7 +22779,8 @@ "select": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", - "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=" + "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=", + "dev": true }, "select-hose": { "version": "2.0.0", @@ -23318,17 +22790,17 @@ }, "selfsigned": { "version": "1.10.7", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz", - "integrity": "sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==", + "resolved": "http://r.cnpmjs.org/selfsigned/download/selfsigned-1.10.7.tgz", + "integrity": "sha1-2lgZ/QSdVXTyjoipvMbbxubzkGs=", "dev": true, "requires": { "node-forge": "0.9.0" } }, "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "version": "5.7.1", + "resolved": "http://r.cnpmjs.org/semver/download/semver-5.7.1.tgz", + "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", "dev": true }, "semver-compare": { @@ -23339,8 +22811,8 @@ }, "send": { "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "resolved": "http://r.cnpmjs.org/send/download/send-0.17.1.tgz", + "integrity": "sha1-wdiwWfeQD3Rm3Uk4vcROEd2zdsg=", "dev": true, "requires": { "debug": "2.6.9", @@ -23360,8 +22832,8 @@ "dependencies": { "debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "resolved": "http://r.cnpmjs.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", "dev": true, "requires": { "ms": "2.0.0" @@ -23375,16 +22847,10 @@ } } }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, "ms": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "resolved": "http://r.cnpmjs.org/ms/download/ms-2.1.1.tgz", + "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=", "dev": true } } @@ -23396,10 +22862,13 @@ "dev": true }, "serialize-javascript": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz", - "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==", - "dev": true + "version": "3.1.0", + "resolved": "https://r.cnpmjs.org/serialize-javascript/download/serialize-javascript-3.1.0.tgz", + "integrity": "sha1-i/OpFwcSZk7yVhtEtpHq/jmSFOo=", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } }, "serve-index": { "version": "1.9.1", @@ -23418,8 +22887,8 @@ "dependencies": { "debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "resolved": "http://r.cnpmjs.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", "dev": true, "requires": { "ms": "2.0.0" @@ -23437,18 +22906,24 @@ "statuses": ">= 1.4.0 < 2" } }, + "inherits": { + "version": "2.0.3", + "resolved": "http://r.cnpmjs.org/inherits/download/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, "setprototypeof": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "resolved": "http://r.cnpmjs.org/setprototypeof/download/setprototypeof-1.1.0.tgz", + "integrity": "sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY=", "dev": true } } }, "serve-static": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "resolved": "http://r.cnpmjs.org/serve-static/download/serve-static-1.14.1.tgz", + "integrity": "sha1-Zm5jbcTwEPfvKZcKiKZ0MgiYsvk=", "dev": true, "requires": { "encodeurl": "~1.0.2", @@ -23464,9 +22939,9 @@ "dev": true }, "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/set-value/download/set-value-2.0.1.tgz", + "integrity": "sha1-oY1AUw5vB95CKMfe/kInr4ytAFs=", "dev": true, "requires": { "extend-shallow": "^2.0.1", @@ -23493,14 +22968,14 @@ }, "setprototypeof": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "resolved": "http://r.cnpmjs.org/setprototypeof/download/setprototypeof-1.1.1.tgz", + "integrity": "sha1-fpWsskqpL1iF4KvvW6ExMw1K5oM=", "dev": true }, "sha.js": { "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "resolved": "http://r.cnpmjs.org/sha.js/download/sha.js-2.4.11.tgz", + "integrity": "sha1-N6XPC4HsvGlD3hCbopYNGyZYSuc=", "dev": true, "requires": { "inherits": "^2.0.1", @@ -23508,28 +22983,26 @@ } }, "shallow-clone": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz", - "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==", + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/shallow-clone/download/shallow-clone-3.0.1.tgz", + "integrity": "sha1-jymBrZJTH1UDWwH7IwdppA4C76M=", "dev": true, "requires": { - "is-extendable": "^0.1.1", - "kind-of": "^5.0.0", - "mixin-object": "^2.0.1" + "kind-of": "^6.0.2" }, "dependencies": { "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "version": "6.0.3", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-6.0.3.tgz", + "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", "dev": true } } }, "shallowequal": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + "resolved": "http://r.cnpmjs.org/shallowequal/download/shallowequal-1.1.0.tgz", + "integrity": "sha1-GI1SHelbkIdAT9TctosT3wrk5/g=" }, "shebang-command": { "version": "1.2.0", @@ -23548,10 +23021,60 @@ }, "shellwords": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "resolved": "http://r.cnpmjs.org/shellwords/download/shellwords-0.1.1.tgz", + "integrity": "sha1-1rkYHBpI05cyTISHHvvPxz/AZUs=", "dev": true }, + "side-channel": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/side-channel/download/side-channel-1.0.3.tgz", + "integrity": "sha1-zcRrBXVQu6tjcGIQg4311MGVGcM=", + "dev": true, + "requires": { + "es-abstract": "^1.18.0-next.0", + "object-inspect": "^1.8.0" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.0-next.1", + "resolved": "https://registry.npm.taobao.org/es-abstract/download/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha1-bjoKS9pxflAjqzuOkL7DYQjSLGg=", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npm.taobao.org/is-callable/download/is-callable-1.2.2.tgz", + "integrity": "sha1-x8ZxXNItTdtI0+GZcCI6zquwgNk=", + "dev": true + }, + "object.assign": { + "version": "4.1.1", + "resolved": "https://registry.npm.taobao.org/object.assign/download/object.assign-4.1.1.tgz", + "integrity": "sha1-MDhnpmbN1Bk27N7fsfjz4ypHjN0=", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.0", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + } + } + }, "sigmund": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", @@ -23559,21 +23082,21 @@ "dev": true }, "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "version": "3.0.3", + "resolved": "http://r.cnpmjs.org/signal-exit/download/signal-exit-3.0.3.tgz", + "integrity": "sha1-oUEMLt2PB3sItOJTyOrPyvBXRhw=", "dev": true }, "simple-concat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", - "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=", + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/simple-concat/download/simple-concat-1.0.1.tgz", + "integrity": "sha1-9Gl2CCujXCJj8cirXt/ibEHJVS8=", "dev": true }, "simple-get": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", - "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", + "resolved": "https://r.cnpmjs.org/simple-get/download/simple-get-3.1.0.tgz", + "integrity": "sha1-tFvgYkNeUNFZVAtXYgLO7EC5xrM=", "dev": true, "requires": { "decompress-response": "^4.2.0", @@ -23592,8 +23115,8 @@ "dependencies": { "is-arrayish": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "resolved": "http://r.cnpmjs.org/is-arrayish/download/is-arrayish-0.3.2.tgz", + "integrity": "sha1-RXSirlb3qyBolvtDHq7tBm/fjwM=", "dev": true } } @@ -23606,8 +23129,8 @@ }, "sinon": { "version": "7.5.0", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.5.0.tgz", - "integrity": "sha512-AoD0oJWerp0/rY9czP/D6hDTTUYGpObhZjMpd7Cl/A6+j0xBE+ayL/ldfggkBXUs0IkvIiM1ljM8+WkOc5k78Q==", + "resolved": "https://r.cnpmjs.org/sinon/download/sinon-7.5.0.tgz", + "integrity": "sha1-6UiOpGYHDqkI/USj1keP1JI8Z+w=", "dev": true, "requires": { "@sinonjs/commons": "^1.4.0", @@ -23617,35 +23140,23 @@ "lolex": "^4.2.0", "nise": "^1.5.2", "supports-color": "^5.5.0" - }, - "dependencies": { - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "sisteransi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.0.tgz", - "integrity": "sha512-N+z4pHB4AmUv0SjveWRd6q1Nj5w62m5jodv+GD8lvmbY/83T/rpbJGZOnK5T149OldDj4Db07BSv9xY4K6NTPQ==", + "version": "1.0.5", + "resolved": "http://r.cnpmjs.org/sisteransi/download/sisteransi-1.0.5.tgz", + "integrity": "sha1-E01oEpd1ZDfMBcoBNw06elcQde0=", "dev": true }, + "size-sensor": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/size-sensor/download/size-sensor-1.0.1.tgz", + "integrity": "sha1-+E5GIG0+JZ+v8dVI5LO+ypMhnbs=" + }, "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/slash/download/slash-3.0.0.tgz", + "integrity": "sha1-ZTm+hwwWWtvVJAIg2+Nh8bxNRjQ=", "dev": true }, "slice-ansi": { @@ -23656,8 +23167,8 @@ }, "snapdragon": { "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "resolved": "http://r.cnpmjs.org/snapdragon/download/snapdragon-0.8.2.tgz", + "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=", "dev": true, "requires": { "base": "^0.11.1", @@ -23672,8 +23183,8 @@ "dependencies": { "debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "resolved": "http://r.cnpmjs.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", "dev": true, "requires": { "ms": "2.0.0" @@ -23696,19 +23207,13 @@ "requires": { "is-extendable": "^0.1.0" } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true } } }, "snapdragon-node": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "resolved": "http://r.cnpmjs.org/snapdragon-node/download/snapdragon-node-2.1.1.tgz", + "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=", "dev": true, "requires": { "define-property": "^1.0.0", @@ -23727,8 +23232,8 @@ }, "is-accessor-descriptor": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "resolved": "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", "dev": true, "requires": { "kind-of": "^6.0.0" @@ -23736,8 +23241,8 @@ }, "is-data-descriptor": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "resolved": "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "dev": true, "requires": { "kind-of": "^6.0.0" @@ -23745,51 +23250,61 @@ }, "is-descriptor": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "resolved": "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" } + }, + "isobject": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-6.0.3.tgz", + "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", + "dev": true } } }, "snapdragon-util": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "resolved": "http://r.cnpmjs.org/snapdragon-util/download/snapdragon-util-3.0.1.tgz", + "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", "dev": true, "requires": { "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } } }, "sockjs": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", - "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", + "version": "0.3.20", + "resolved": "http://r.cnpmjs.org/sockjs/download/sockjs-0.3.20.tgz", + "integrity": "sha1-smooPsVi74smh7RAM6Tuzqx12FU=", "dev": true, "requires": { "faye-websocket": "^0.10.0", - "uuid": "^3.0.1" + "uuid": "^3.4.0", + "websocket-driver": "0.6.5" + }, + "dependencies": { + "uuid": { + "version": "3.4.0", + "resolved": "https://r.cnpmjs.org/uuid/download/uuid-3.4.0.tgz", + "integrity": "sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4=", + "dev": true + } } }, "sockjs-client": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", - "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", + "resolved": "http://r.cnpmjs.org/sockjs-client/download/sockjs-client-1.4.0.tgz", + "integrity": "sha1-yfJWjhnI/YFztJl+o0IOC7MGx9U=", "dev": true, "requires": { "debug": "^3.2.5", @@ -23802,8 +23317,8 @@ "dependencies": { "debug": { "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "resolved": "http://r.cnpmjs.org/debug/download/debug-3.2.6.tgz", + "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=", "dev": true, "requires": { "ms": "^2.1.1" @@ -23811,8 +23326,8 @@ }, "faye-websocket": { "version": "0.11.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", - "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "resolved": "http://r.cnpmjs.org/faye-websocket/download/faye-websocket-0.11.3.tgz", + "integrity": "sha1-XA6aiWjokSwoZjn96XeosgnyUI4=", "dev": true, "requires": { "websocket-driver": ">=0.5.1" @@ -23820,8 +23335,8 @@ }, "ms": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "resolved": "http://r.cnpmjs.org/ms/download/ms-2.1.2.tgz", + "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", "dev": true } } @@ -23833,27 +23348,35 @@ "dev": true, "requires": { "is-plain-obj": "^1.0.0" + }, + "dependencies": { + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://r.cnpmjs.org/is-plain-obj/download/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + } } }, "source-list-map": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "resolved": "http://r.cnpmjs.org/source-list-map/download/source-list-map-2.0.1.tgz", + "integrity": "sha1-OZO9hzv8SEecyp6jpUeDXHwVSzQ=", "dev": true }, "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "version": "0.5.7", + "resolved": "http://r.cnpmjs.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true }, "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "version": "0.5.3", + "resolved": "http://r.cnpmjs.org/source-map-resolve/download/source-map-resolve-0.5.3.tgz", + "integrity": "sha1-GQhmvs51U+H48mei7oLGBrVQmho=", "dev": true, "requires": { - "atob": "^2.1.1", + "atob": "^2.1.2", "decode-uri-component": "^0.2.0", "resolve-url": "^0.2.1", "source-map-url": "^0.4.0", @@ -23861,13 +23384,21 @@ } }, "source-map-support": { - "version": "0.5.12", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", - "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", + "version": "0.5.19", + "resolved": "http://r.cnpmjs.org/source-map-support/download/source-map-support-0.5.19.tgz", + "integrity": "sha1-qYti+G3K9PZzmWSMCFKRq56P7WE=", "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "http://r.cnpmjs.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } } }, "source-map-url": { @@ -23877,25 +23408,27 @@ "dev": true }, "sourcemap-codec": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.6.tgz", - "integrity": "sha512-1ZooVLYFxC448piVLBbtOxFcXwnymH9oUF8nRd3CuYDVvkRBxRl6pB4Mtas5a4drtL+E8LDgFkQNcgIw6tc8Hg==" + "version": "1.4.8", + "resolved": "http://r.cnpmjs.org/sourcemap-codec/download/sourcemap-codec-1.4.8.tgz", + "integrity": "sha1-6oBL2UhXQC5pktBaOO8a41qatMQ=", + "dev": true }, "space-separated-tokens": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.4.tgz", - "integrity": "sha512-UyhMSmeIqZrQn2UdjYpxEkwY9JUrn8pP+7L4f91zRzOQuI8MF1FGLfYU9DKCYeLdo7LXMxwrX5zKFy7eeeVHuA==" + "version": "1.1.5", + "resolved": "http://r.cnpmjs.org/space-separated-tokens/download/space-separated-tokens-1.1.5.tgz", + "integrity": "sha1-hfMsPRDZaCAH6RdBTdxcJtGqaJk=", + "dev": true }, "sparkles": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", - "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", + "resolved": "https://r.cnpmjs.org/sparkles/download/sparkles-1.0.1.tgz", + "integrity": "sha1-AI22XtzmxQ7sDF4ijhlFBh3QQ3w=", "dev": true }, "spdx-correct": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.2.tgz", - "integrity": "sha512-q9hedtzyXHr5S0A1vEPoK/7l8NpfkFYTq6iCY+Pno2ZbdZR6WexZFtqeVGkGxW3TEJMN914Z55EnAGMmenlIQQ==", + "version": "3.1.1", + "resolved": "http://r.cnpmjs.org/spdx-correct/download/spdx-correct-3.1.1.tgz", + "integrity": "sha1-3s6BrJweZxPl99G28X1Gj6U9iak=", "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", @@ -23903,15 +23436,15 @@ } }, "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", + "version": "2.3.0", + "resolved": "http://r.cnpmjs.org/spdx-exceptions/download/spdx-exceptions-2.3.0.tgz", + "integrity": "sha1-PyjOGnegA3JoPq3kpDMYNSeiFj0=", "dev": true }, "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/spdx-expression-parse/download/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha1-z3D1BILu/cmOPOCmgz5KU87rpnk=", "dev": true, "requires": { "spdx-exceptions": "^2.1.0", @@ -23919,15 +23452,15 @@ } }, "spdx-license-ids": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.1.tgz", - "integrity": "sha512-TfOfPcYGBB5sDuPn3deByxPhmfegAhpDYKSOXZQN81Oyrrif8ZCodOLzK3AesELnCx03kikhyDwh0pfvvQvF8w==", + "version": "3.0.5", + "resolved": "http://r.cnpmjs.org/spdx-license-ids/download/spdx-license-ids-3.0.5.tgz", + "integrity": "sha1-NpS1gEVnpFjTyARYQqY1hjL2JlQ=", "dev": true }, "spdy": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.1.tgz", - "integrity": "sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==", + "version": "4.0.2", + "resolved": "http://r.cnpmjs.org/spdy/download/spdy-4.0.2.tgz", + "integrity": "sha1-t09GYgOj7aRSwCSSuR+56EonZ3s=", "dev": true, "requires": { "debug": "^4.1.0", @@ -23939,8 +23472,8 @@ "dependencies": { "debug": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "resolved": "http://r.cnpmjs.org/debug/download/debug-4.1.1.tgz", + "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=", "dev": true, "requires": { "ms": "^2.1.1" @@ -23948,16 +23481,16 @@ }, "ms": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "resolved": "http://r.cnpmjs.org/ms/download/ms-2.1.2.tgz", + "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", "dev": true } } }, "spdy-transport": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "resolved": "http://r.cnpmjs.org/spdy-transport/download/spdy-transport-3.0.0.tgz", + "integrity": "sha1-ANSGOmQArXXfkzYaFghgXl3NzzE=", "dev": true, "requires": { "debug": "^4.1.0", @@ -23970,8 +23503,8 @@ "dependencies": { "debug": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "resolved": "http://r.cnpmjs.org/debug/download/debug-4.1.1.tgz", + "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=", "dev": true, "requires": { "ms": "^2.1.1" @@ -23979,48 +23512,33 @@ }, "ms": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "resolved": "http://r.cnpmjs.org/ms/download/ms-2.1.2.tgz", + "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", "dev": true }, "readable-stream": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "version": "3.6.0", + "resolved": "http://r.cnpmjs.org/readable-stream/download/readable-stream-3.6.0.tgz", + "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=", "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } - }, - "safe-buffer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", - "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", - "dev": true - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } } } }, "specificity": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz", - "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==", + "resolved": "https://r.cnpmjs.org/specificity/download/specificity-0.4.1.tgz", + "integrity": "sha1-qrXmRQEtsIuhguFRFlc40AiHsBk=", "dev": true }, "split-string": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "resolved": "http://r.cnpmjs.org/split-string/download/split-string-3.1.0.tgz", + "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", "dev": true, "requires": { "extend-shallow": "^3.0.0" @@ -24033,9 +23551,9 @@ "dev": true }, "sshpk": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.2.tgz", - "integrity": "sha512-Ra/OXQtuh0/enyl4ETZAfTaeksa6BXks5ZcjpSUNrjBr0DvrJKX+1fsKDPpT9TBXgHAFsa4510aNVgI8g/+SzA==", + "version": "1.16.1", + "resolved": "http://r.cnpmjs.org/sshpk/download/sshpk-1.16.1.tgz", + "integrity": "sha1-+2YcC+8ps520B2nuOfpwCT1vaHc=", "dev": true, "requires": { "asn1": "~0.2.3", @@ -24051,8 +23569,8 @@ }, "ssri": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "resolved": "http://r.cnpmjs.org/ssri/download/ssri-6.0.1.tgz", + "integrity": "sha1-KjxBso3UW2K2Nnbst0ABJlrp7dg=", "dev": true, "requires": { "figgy-pudding": "^3.5.1" @@ -24060,69 +23578,26 @@ }, "stable": { "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "resolved": "http://r.cnpmjs.org/stable/download/stable-0.1.8.tgz", + "integrity": "sha1-g26zyDgv4pNv6vVEYxAXzn1Ho88=", "dev": true }, "stack-utils": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", - "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==", + "resolved": "http://r.cnpmjs.org/stack-utils/download/stack-utils-1.0.2.tgz", + "integrity": "sha1-M+ujiXeIVYvr/C2wWdwVjsNs67g=", "dev": true }, "staged-git-files": { "version": "1.1.1", - "resolved": "http://registry.npmjs.org/staged-git-files/-/staged-git-files-1.1.1.tgz", - "integrity": "sha512-H89UNKr1rQJvI1c/PIR3kiAMBV23yvR7LItZiV74HWZwzt7f3YHuujJ9nJZlt58WlFox7XQsOahexwk7nTe69A==", + "resolved": "https://r.cnpmjs.org/staged-git-files/download/staged-git-files-1.1.1.tgz", + "integrity": "sha1-N8IhjvDW0mF4sTEHGTCaFqWfj3s=", "dev": true }, - "standard": { - "version": "11.0.1", - "resolved": "http://registry.npmjs.org/standard/-/standard-11.0.1.tgz", - "integrity": "sha512-nu0jAcHiSc8H+gJCXeiziMVZNDYi8MuqrYJKxTgjP4xKXZMKm311boqQIzDrYI/ktosltxt2CbDjYQs9ANC8IA==", - "dev": true, - "requires": { - "eslint": "~4.18.0", - "eslint-config-standard": "11.0.0", - "eslint-config-standard-jsx": "5.0.0", - "eslint-plugin-import": "~2.9.0", - "eslint-plugin-node": "~6.0.0", - "eslint-plugin-promise": "~3.7.0", - "eslint-plugin-react": "~7.7.0", - "eslint-plugin-standard": "~3.0.1", - "standard-engine": "~8.0.0" - } - }, - "standard-engine": { - "version": "8.0.1", - "resolved": "http://registry.npmjs.org/standard-engine/-/standard-engine-8.0.1.tgz", - "integrity": "sha512-LA531C3+nljom/XRvdW/hGPXwmilRkaRkENhO3FAGF1Vtq/WtCXzgmnc5S6vUHHsgv534MRy02C1ikMwZXC+tw==", - "dev": true, - "requires": { - "deglob": "^2.1.0", - "get-stdin": "^6.0.0", - "minimist": "^1.1.0", - "pkg-conf": "^2.0.0" - }, - "dependencies": { - "get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true - }, - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, "state-toggle": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.2.tgz", - "integrity": "sha512-8LpelPGR0qQM4PnfLiplOQNJcIN1/r2Gy0xKB2zKnIW2YzPMt2sR4I/+gtPjhN7Svh9kw+zqEg2SFwpBO9iNiw==", + "version": "1.0.3", + "resolved": "https://r.cnpmjs.org/state-toggle/download/state-toggle-1.0.3.tgz", + "integrity": "sha1-4SOxaojhQxObCcaFIiG8mBWRff4=", "dev": true }, "static-extend": { @@ -24148,49 +23623,17 @@ }, "statuses": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true - }, - "stdout-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", - "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", - "dev": true, - "requires": { - "readable-stream": "^2.0.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "stdout-stream": { + "version": "1.4.1", + "resolved": "https://r.cnpmjs.org/stdout-stream/download/stdout-stream-1.4.1.tgz", + "integrity": "sha1-WsF0zdXNcmEEqgwLK9g4FdjVNd4=", + "dev": true, + "requires": { + "readable-stream": "^2.0.1" } }, "stealthy-require": { @@ -24201,77 +23644,34 @@ }, "stream-browserify": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "resolved": "http://r.cnpmjs.org/stream-browserify/download/stream-browserify-2.0.2.tgz", + "integrity": "sha1-h1IdOKRKp+6RzhzSpH3wy0ndZgs=", "dev": true, "requires": { "inherits": "~2.0.1", "readable-stream": "^2.0.2" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, "stream-consume": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.1.tgz", - "integrity": "sha512-tNa3hzgkjEP7XbCkbRXe1jpg+ievoa0O4SCFlMOYEscGSS4JJsckGL8swUyAa/ApGU3Ae4t6Honor4HhL+tRyg==", + "resolved": "https://r.cnpmjs.org/stream-consume/download/stream-consume-0.1.1.tgz", + "integrity": "sha1-0721mMK9CugrjKx6xQsRB6eZbEg=", "dev": true }, "stream-each": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "resolved": "http://r.cnpmjs.org/stream-each/download/stream-each-1.2.3.tgz", + "integrity": "sha1-6+J6DDibBPvMIzZClS4Qcxr6m64=", "dev": true, "requires": { "end-of-stream": "^1.1.0", "stream-shift": "^1.0.0" - }, - "dependencies": { - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - } } }, "stream-http": { "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "resolved": "http://r.cnpmjs.org/stream-http/download/stream-http-2.8.3.tgz", + "integrity": "sha1-stJCRpKIpaJ+xP6JM6z2I95lFPw=", "dev": true, "requires": { "builtin-status-codes": "^3.0.0", @@ -24279,44 +23679,12 @@ "readable-stream": "^2.3.6", "to-arraybuffer": "^1.0.0", "xtend": "^4.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, "stream-shift": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "resolved": "http://r.cnpmjs.org/stream-shift/download/stream-shift-1.0.1.tgz", + "integrity": "sha1-1wiCgVWasneEJCebCHfaPDktWj0=", "dev": true }, "strict-uri-encode": { @@ -24359,57 +23727,72 @@ } }, "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "version": "4.2.0", + "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-4.2.0.tgz", + "integrity": "sha1-lSGCxGzHssMT0VluYjmSvRY7crU=", "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" } }, - "string.prototype.trim": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz", - "integrity": "sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=", + "string.prototype.matchall": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/string.prototype.matchall/download/string.prototype.matchall-4.0.2.tgz", + "integrity": "sha1-SLtRAyb7n962ozzqqBpuoE73ZI4=", "dev": true, "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.0", - "function-bind": "^1.0.2" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0", + "has-symbols": "^1.0.1", + "internal-slot": "^1.0.2", + "regexp.prototype.flags": "^1.3.0", + "side-channel": "^1.0.2" } }, - "string.prototype.trimleft": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", - "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "string.prototype.trim": { + "version": "1.2.1", + "resolved": "https://r.cnpmjs.org/string.prototype.trim/download/string.prototype.trim-1.2.1.tgz", + "integrity": "sha1-FBIz3/Msgr+tgGhNfl8Iae4Pt4I=", "dev": true, "requires": { "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", "function-bind": "^1.1.1" } }, - "string.prototype.trimright": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", - "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", - "dev": true, + "string.prototype.trimend": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/string.prototype.trimend/download/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha1-hYEqa4R6wAInD1gIFGBkyZX7aRM=", "requires": { "define-properties": "^1.1.3", - "function-bind": "^1.1.1" + "es-abstract": "^1.17.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/string.prototype.trimstart/download/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha1-FK9tnzSwU/fPyJty+PLuFLkDmlQ=", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" } }, "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true + "version": "1.1.1", + "resolved": "http://r.cnpmjs.org/string_decoder/download/string_decoder-1.1.1.tgz", + "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } }, "stringify-entities": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-1.3.2.tgz", - "integrity": "sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A==", + "resolved": "https://r.cnpmjs.org/stringify-entities/download/stringify-entities-1.3.2.tgz", + "integrity": "sha1-qYQX5Ucf0iez5F09sYYcEcr2aPc=", "dev": true, "requires": { "character-entities-html4": "^1.0.0", @@ -24420,31 +23803,38 @@ }, "stringify-object": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "resolved": "http://r.cnpmjs.org/stringify-object/download/stringify-object-3.3.0.tgz", + "integrity": "sha1-cDBlrvyhkwDTzoivT1s5VtdVZik=", "dev": true, "requires": { "get-own-enumerable-property-symbols": "^3.0.0", "is-obj": "^1.0.1", "is-regexp": "^1.0.0" + }, + "dependencies": { + "is-obj": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/is-obj/download/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + } } }, "strip-ansi": { - "version": "3.0.1", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "6.0.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-6.0.0.tgz?cache=0&sync_timestamp=1573280549549&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-6.0.0.tgz", + "integrity": "sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI=", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^5.0.0" } }, "strip-bom": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz", - "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=", + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/strip-bom/download/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { - "first-chunk-stream": "^1.0.0", "is-utf8": "^0.2.0" } }, @@ -24468,8 +23858,8 @@ }, "strip-outer": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", - "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", + "resolved": "https://r.cnpmjs.org/strip-outer/download/strip-outer-1.0.1.tgz", + "integrity": "sha1-sv0qv2YEudHmATBXGV34Nrip1jE=", "dev": true, "requires": { "escape-string-regexp": "^1.0.2" @@ -24483,42 +23873,18 @@ }, "style-loader": { "version": "0.21.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.21.0.tgz", - "integrity": "sha512-T+UNsAcl3Yg+BsPKs1vd22Fr8sVT+CJMtzqc6LEw9bbJZb43lm9GoeIfUcDEefBSWC0BhYbcdupV1GtI4DGzxg==", + "resolved": "http://r.cnpmjs.org/style-loader/download/style-loader-0.21.0.tgz", + "integrity": "sha1-aMUuXrKvycqStidL4nfuWa6jqFI=", "dev": true, "requires": { "loader-utils": "^1.1.0", "schema-utils": "^0.4.5" }, "dependencies": { - "ajv": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.4.tgz", - "integrity": "sha512-4Wyjt8+t6YszqaXnLDfMmG/8AlO5Zbcsy3ATHncCzjW/NoPzAId8AK6749Ybjmdt+kUY1gP60fCu46oDxPv/mg==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, "schema-utils": { "version": "0.4.7", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", - "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", + "resolved": "https://r.cnpmjs.org/schema-utils/download/schema-utils-0.4.7.tgz", + "integrity": "sha1-unT1l9K+LqiAExdG7hfQoJPGgYc=", "dev": true, "requires": { "ajv": "^6.1.0", @@ -24535,8 +23901,8 @@ }, "style-to-object": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", - "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", + "resolved": "https://r.cnpmjs.org/style-to-object/download/style-to-object-0.3.0.tgz", + "integrity": "sha1-sbeQ0gWZHMeDgBlnIUl57hmnbkY=", "dev": true, "requires": { "inline-style-parser": "0.1.1" @@ -24544,8 +23910,8 @@ }, "stylehacks": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", - "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "resolved": "http://r.cnpmjs.org/stylehacks/download/stylehacks-4.0.3.tgz", + "integrity": "sha1-Zxj8r00eB9ihMYaQiB6NlnJqcdU=", "dev": true, "requires": { "browserslist": "^4.0.0", @@ -24553,61 +23919,10 @@ "postcss-selector-parser": "^3.0.0" }, "dependencies": { - "browserslist": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.2.tgz", - "integrity": "sha512-+M4oeaTplPm/f1pXDw84YohEv7B1i/2Aisei8s4s6k3QsoSHa7i5sz8u/cGQkkatCPxMASKxPualR4wwYgVboA==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001015", - "electron-to-chromium": "^1.3.322", - "node-releases": "^1.1.42" - } - }, - "caniuse-lite": { - "version": "1.0.30001017", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001017.tgz", - "integrity": "sha512-EDnZyOJ6eYh6lHmCvCdHAFbfV4KJ9lSdfv4h/ppEhrU/Yudkl7jujwMZ1we6RX7DXqBfT04pVMQ4J+1wcTlsKA==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "electron-to-chromium": { - "version": "1.3.322", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.322.tgz", - "integrity": "sha512-Tc8JQEfGQ1MzfSzI/bTlSr7btJv/FFO7Yh6tanqVmIWOuNCu6/D1MilIEgLtmWqIrsv+o4IjpLAhgMBr/ncNAA==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.32", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-7.0.32.tgz", + "integrity": "sha1-QxDW7jRwU9o0M9sr5JKIPWLOxZ0=", "dev": true, "requires": { "chalk": "^2.4.2", @@ -24616,20 +23931,26 @@ } }, "postcss-selector-parser": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", - "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "version": "3.1.2", + "resolved": "http://r.cnpmjs.org/postcss-selector-parser/download/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha1-sxD1xMD9r3b5SQK7qjDbaqhPUnA=", "dev": true, "requires": { - "dot-prop": "^4.1.1", + "dot-prop": "^5.2.0", "indexes-of": "^1.0.1", "uniq": "^1.0.1" } }, + "source-map": { + "version": "0.6.1", + "resolved": "http://r.cnpmjs.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + }, "supports-color": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -24639,8 +23960,8 @@ }, "stylelint": { "version": "9.10.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-9.10.1.tgz", - "integrity": "sha512-9UiHxZhOAHEgeQ7oLGwrwoDR8vclBKlSX7r4fH0iuu0SfPwFaLkb1c7Q2j1cqg9P7IDXeAV2TvQML/fRQzGBBQ==", + "resolved": "https://r.cnpmjs.org/stylelint/download/stylelint-9.10.1.tgz", + "integrity": "sha1-Xw7jcBRh3/HWgoThOG7+jwZ3p10=", "dev": true, "requires": { "autoprefixer": "^9.0.0", @@ -24692,67 +24013,89 @@ "table": "^5.0.0" }, "dependencies": { - "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/@nodelib/fs.stat/download/@nodelib/fs.stat-1.1.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40nodelib%2Ffs.stat%2Fdownload%2F%40nodelib%2Ffs.stat-1.1.3.tgz", + "integrity": "sha1-K1o6s/kYzKSKjHVMCBaOPwPrphs=", + "dev": true + }, + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz", + "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=", + "dev": true + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/arr-diff/download/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/array-union/download/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "array-uniq": "^1.0.1" } }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "array-unique": { + "version": "0.3.2", + "resolved": "http://r.cnpmjs.org/array-unique/download/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, "autoprefixer": { - "version": "9.7.3", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.3.tgz", - "integrity": "sha512-8T5Y1C5Iyj6PgkPSFd0ODvK9DIleuPKUPYniNxybS47g2k2wFgLZ46lGQHlBuGKIAEV8fbCDfKCCRS1tvOgc3Q==", + "version": "9.8.6", + "resolved": "https://registry.npm.taobao.org/autoprefixer/download/autoprefixer-9.8.6.tgz?cache=0&sync_timestamp=1596140648665&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fautoprefixer%2Fdownload%2Fautoprefixer-9.8.6.tgz", + "integrity": "sha1-O3NZTKG/kmYyDFrPFYjXTep0IQ8=", "dev": true, "requires": { - "browserslist": "^4.8.0", - "caniuse-lite": "^1.0.30001012", - "chalk": "^2.4.2", + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "colorette": "^1.2.1", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", - "postcss": "^7.0.23", - "postcss-value-parser": "^4.0.2" + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, "postcss-value-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz", - "integrity": "sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ==", + "version": "4.1.0", + "resolved": "http://r.cnpmjs.org/postcss-value-parser/download/postcss-value-parser-4.1.0.tgz", + "integrity": "sha1-RD9qIM7WSBor2k+oUypuVdeJoss=", "dev": true } } }, - "browserslist": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.2.tgz", - "integrity": "sha512-+M4oeaTplPm/f1pXDw84YohEv7B1i/2Aisei8s4s6k3QsoSHa7i5sz8u/cGQkkatCPxMASKxPualR4wwYgVboA==", + "braces": { + "version": "2.3.2", + "resolved": "http://r.cnpmjs.org/braces/download/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001015", - "electron-to-chromium": "^1.3.322", - "node-releases": "^1.1.42" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } }, "camelcase": { @@ -24772,46 +24115,223 @@ "quick-lru": "^1.0.0" } }, - "caniuse-lite": { - "version": "1.0.30001017", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001017.tgz", - "integrity": "sha512-EDnZyOJ6eYh6lHmCvCdHAFbfV4KJ9lSdfv4h/ppEhrU/Yudkl7jujwMZ1we6RX7DXqBfT04pVMQ4J+1wcTlsKA==", - "dev": true - }, "debug": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "resolved": "http://r.cnpmjs.org/debug/download/debug-4.1.1.tgz", + "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=", "dev": true, "requires": { "ms": "^2.1.1" } }, - "electron-to-chromium": { - "version": "1.3.322", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.322.tgz", - "integrity": "sha512-Tc8JQEfGQ1MzfSzI/bTlSr7btJv/FFO7Yh6tanqVmIWOuNCu6/D1MilIEgLtmWqIrsv+o4IjpLAhgMBr/ncNAA==", - "dev": true + "dir-glob": { + "version": "2.2.2", + "resolved": "https://registry.npm.taobao.org/dir-glob/download/dir-glob-2.2.2.tgz", + "integrity": "sha1-+gnwaUFTyJGLGLoN6vrpR2n8UMQ=", + "dev": true, + "requires": { + "path-type": "^3.0.0" + } }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz", + "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=", "dev": true }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "http://r.cnpmjs.org/expand-brackets/download/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "http://r.cnpmjs.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "http://r.cnpmjs.org/extglob/download/extglob-2.0.4.tgz", + "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npm.taobao.org/fast-glob/download/fast-glob-2.2.7.tgz?cache=0&sync_timestamp=1592290280465&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-glob%2Fdownload%2Ffast-glob-2.2.7.tgz", + "integrity": "sha1-aVOFfDr6R1//ku5gFdUtpwpM050=", + "dev": true, + "requires": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + } + }, "file-entry-cache": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-4.0.0.tgz", - "integrity": "sha512-AVSwsnbV8vH/UVbvgEhf3saVQXORNv0ZzSkvkhQIaia5Tia+JhGTaa/ePUSVoPHQyGayQNmYfkzFi3WZV5zcpA==", + "resolved": "http://r.cnpmjs.org/file-entry-cache/download/file-entry-cache-4.0.0.tgz", + "integrity": "sha1-YzVn0VNkrv4LKZ4eIXc16POp9ug=", "dev": true, "requires": { "flat-cache": "^2.0.1" } }, + "fill-range": { + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/fill-range/download/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, "flat-cache": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "resolved": "http://r.cnpmjs.org/flat-cache/download/flat-cache-2.0.1.tgz", + "integrity": "sha1-XSltbwS9pEpGMKMBQTvbwuwIXsA=", "dev": true, "requires": { "flatted": "^2.0.0", @@ -24821,14 +24341,35 @@ }, "get-stdin": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "resolved": "https://r.cnpmjs.org/get-stdin/download/get-stdin-6.0.0.tgz", + "integrity": "sha1-ngm/cSs2CrkiXoEgSPcf3pyJZXs=", "dev": true }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, "global-modules": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "resolved": "http://r.cnpmjs.org/global-modules/download/global-modules-2.0.0.tgz", + "integrity": "sha1-mXYFrSNF8n9RU5vqJldEISFcd4A=", "dev": true, "requires": { "global-prefix": "^3.0.0" @@ -24836,8 +24377,8 @@ }, "global-prefix": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "resolved": "http://r.cnpmjs.org/global-prefix/download/global-prefix-3.0.0.tgz", + "integrity": "sha1-/IX3MGTfafUEIfR/iD/luRO6m5c=", "dev": true, "requires": { "ini": "^1.3.5", @@ -24847,8 +24388,8 @@ }, "globby": { "version": "9.2.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz", - "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", + "resolved": "https://r.cnpmjs.org/globby/download/globby-9.2.0.tgz", + "integrity": "sha1-/QKacGxwPSm90XD0tts6P3p8tj0=", "dev": true, "requires": { "@types/glob": "^7.1.1", @@ -24863,40 +24404,95 @@ "dependencies": { "ignore": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "resolved": "https://r.cnpmjs.org/ignore/download/ignore-4.0.6.tgz", + "integrity": "sha1-dQ49tYYgh7RzfrrIIH/9HvJ7Jfw=", "dev": true } } }, - "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npm.taobao.org/indent-string/download/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", "dev": true }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } }, - "ignore": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", - "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==", + "is-buffer": { + "version": "1.1.6", + "resolved": "http://r.cnpmjs.org/is-buffer/download/is-buffer-1.1.6.tgz", + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", "dev": true }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "is-number": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-6.0.3.tgz", + "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", + "dev": true + }, + "leven": { + "version": "2.1.0", + "resolved": "http://r.cnpmjs.org/leven/download/leven-2.1.0.tgz", + "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", "dev": true }, "load-json-file": { @@ -24927,8 +24523,8 @@ }, "meow": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-5.0.0.tgz", - "integrity": "sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig==", + "resolved": "https://r.cnpmjs.org/meow/download/meow-5.0.0.tgz", + "integrity": "sha1-38c9Y6mvxxSl43F2DrXIi5EHiqQ=", "dev": true, "requires": { "camelcase-keys": "^4.0.0", @@ -24942,16 +24538,37 @@ "yargs-parser": "^10.0.0" } }, + "micromatch": { + "version": "3.1.10", + "resolved": "http://r.cnpmjs.org/micromatch/download/micromatch-3.1.10.tgz", + "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, "ms": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "resolved": "http://r.cnpmjs.org/ms/download/ms-2.1.2.tgz", + "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", "dev": true }, "path-type": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "resolved": "http://r.cnpmjs.org/path-type/download/path-type-3.0.0.tgz", + "integrity": "sha1-zvMdyOCho7sNEFwM2Xzzv0f0428=", "dev": true, "requires": { "pify": "^3.0.0" @@ -24967,58 +24584,25 @@ }, "pify": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "resolved": "http://r.cnpmjs.org/pify/download/pify-4.0.1.tgz", + "integrity": "sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE=", "dev": true }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.32", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-7.0.32.tgz", + "integrity": "sha1-QxDW7jRwU9o0M9sr5JKIPWLOxZ0=", "dev": true, "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", "supports-color": "^6.1.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-reporter": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-6.0.1.tgz", - "integrity": "sha512-LpmQjfRWyabc+fRygxZjpRxfhRf9u/fdlKf4VHG4TSPbV2XNsuISzYW1KL+1aQzx53CAppa1bKG4APIB/DOXXw==", + "resolved": "https://r.cnpmjs.org/postcss-reporter/download/postcss-reporter-6.0.1.tgz", + "integrity": "sha1-fAVRIAYKl8iDe05IIVZhqvt0JF8=", "dev": true, "requires": { "chalk": "^2.4.1", @@ -25028,12 +24612,12 @@ } }, "postcss-selector-parser": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", - "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "version": "3.1.2", + "resolved": "http://r.cnpmjs.org/postcss-selector-parser/download/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha1-sxD1xMD9r3b5SQK7qjDbaqhPUnA=", "dev": true, "requires": { - "dot-prop": "^4.1.1", + "dot-prop": "^5.2.0", "indexes-of": "^1.0.1", "uniq": "^1.0.1" } @@ -25071,23 +24655,29 @@ }, "resolve-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "resolved": "http://r.cnpmjs.org/resolve-from/download/resolve-from-4.0.0.tgz", + "integrity": "sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY=", "dev": true }, "rimraf": { "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "resolved": "http://r.cnpmjs.org/rimraf/download/rimraf-2.6.3.tgz", + "integrity": "sha1-stEE/g2Psnz54KHNqCYt04M8bKs=", "dev": true, "requires": { "glob": "^7.1.3" } }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/slash/download/slash-2.0.0.tgz", + "integrity": "sha1-3lUoUaF1nfOo8gZTVEL17E3eq0Q=", + "dev": true + }, "slice-ansi": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "resolved": "http://r.cnpmjs.org/slice-ansi/download/slice-ansi-2.1.0.tgz", + "integrity": "sha1-ys12k0YaY3pXiNkqfdT7oGjoFjY=", "dev": true, "requires": { "ansi-styles": "^3.2.0", @@ -25095,10 +24685,16 @@ "is-fullwidth-code-point": "^2.0.0" } }, + "source-map": { + "version": "0.6.1", + "resolved": "http://r.cnpmjs.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + }, "string-width": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "resolved": "http://r.cnpmjs.org/string-width/download/string-width-3.1.0.tgz", + "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", "dev": true, "requires": { "emoji-regex": "^7.0.1", @@ -25108,8 +24704,8 @@ }, "strip-ansi": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1573280549549&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", "dev": true, "requires": { "ansi-regex": "^4.1.0" @@ -25122,9 +24718,9 @@ "dev": true }, "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "6.1.0", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -25132,22 +24728,24 @@ }, "table": { "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "resolved": "http://r.cnpmjs.org/table/download/table-5.4.6.tgz", + "integrity": "sha1-EpLRlQDOP4YFOwXw6Ofko7shB54=", "dev": true, "requires": { "ajv": "^6.10.2", "lodash": "^4.17.14", "slice-ansi": "^2.1.0", "string-width": "^3.0.0" - }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - } + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } }, "trim-newlines": { @@ -25158,8 +24756,8 @@ }, "write": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "resolved": "http://r.cnpmjs.org/write/download/write-1.0.3.tgz", + "integrity": "sha1-CADhRSO5I6OH5BUSPIZWFqrg9cM=", "dev": true, "requires": { "mkdirp": "^0.5.1" @@ -25167,8 +24765,8 @@ }, "yargs-parser": { "version": "10.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", - "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "resolved": "http://r.cnpmjs.org/yargs-parser/download/yargs-parser-10.1.0.tgz", + "integrity": "sha1-cgImW4n36eny5XZeD+c1qQXtuqg=", "dev": true, "requires": { "camelcase": "^4.1.0" @@ -25178,14 +24776,14 @@ }, "stylelint-config-recommended": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-2.2.0.tgz", - "integrity": "sha512-bZ+d4RiNEfmoR74KZtCKmsABdBJr4iXRiCso+6LtMJPw5rd/KnxUWTxht7TbafrTJK1YRjNgnN0iVZaJfc3xJA==", + "resolved": "https://r.cnpmjs.org/stylelint-config-recommended/download/stylelint-config-recommended-2.2.0.tgz", + "integrity": "sha1-RqsTnbSg5xUf1flK8VVRKIbJbT8=", "dev": true }, "stylelint-config-recommended-scss": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-3.3.0.tgz", - "integrity": "sha512-BvuuLYwoet8JutOP7K1a8YaiENN+0HQn390eDi0SWe1h7Uhx6O3GUQ6Ubgie9b/AmHX4Btmp+ZzVGbzriFTBcA==", + "resolved": "https://r.cnpmjs.org/stylelint-config-recommended-scss/download/stylelint-config-recommended-scss-3.3.0.tgz", + "integrity": "sha1-GQ9dCMJIFlYGKxFmy7WksXBRLJA=", "dev": true, "requires": { "stylelint-config-recommended": "^2.2.0" @@ -25193,38 +24791,30 @@ }, "stylelint-config-standard": { "version": "18.3.0", - "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-18.3.0.tgz", - "integrity": "sha512-Tdc/TFeddjjy64LvjPau9SsfVRexmTFqUhnMBrzz07J4p2dVQtmpncRF/o8yZn8ugA3Ut43E6o1GtjX80TFytw==", + "resolved": "https://r.cnpmjs.org/stylelint-config-standard/download/stylelint-config-standard-18.3.0.tgz", + "integrity": "sha1-oqG3iNLPh2wBP+r/iuJ2EXob76c=", "dev": true, "requires": { "stylelint-config-recommended": "^2.2.0" } }, "stylelint-scss": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-3.13.0.tgz", - "integrity": "sha512-SaLnvQyndaPcsgVJsMh6zJ1uKVzkRZJx+Wg/stzoB1mTBdEmGketbHrGbMQNymzH/0mJ06zDSpeCDvNxqIJE5A==", + "version": "3.18.0", + "resolved": "https://registry.npm.taobao.org/stylelint-scss/download/stylelint-scss-3.18.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstylelint-scss%2Fdownload%2Fstylelint-scss-3.18.0.tgz", + "integrity": "sha1-jwY3HCI5Cb8/Yug5VIrxut7tMek=", "dev": true, "requires": { - "lodash.isboolean": "^3.0.3", - "lodash.isregexp": "^4.0.1", - "lodash.isstring": "^4.0.1", + "lodash": "^4.17.15", "postcss-media-query-parser": "^0.2.3", "postcss-resolve-nested-selector": "^0.1.1", "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.2" + "postcss-value-parser": "^4.1.0" }, "dependencies": { - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true - }, "postcss-selector-parser": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", - "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", + "resolved": "http://r.cnpmjs.org/postcss-selector-parser/download/postcss-selector-parser-6.0.2.tgz", + "integrity": "sha1-k0z3mdAWyDQRhZ4J3Oyt4BKG7Fw=", "dev": true, "requires": { "cssesc": "^3.0.0", @@ -25233,54 +24823,26 @@ } }, "postcss-value-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz", - "integrity": "sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ==", + "version": "4.1.0", + "resolved": "http://r.cnpmjs.org/postcss-value-parser/download/postcss-value-parser-4.1.0.tgz", + "integrity": "sha1-RD9qIM7WSBor2k+oUypuVdeJoss=", "dev": true } } }, "sugarss": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-2.0.0.tgz", - "integrity": "sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==", + "resolved": "https://r.cnpmjs.org/sugarss/download/sugarss-2.0.0.tgz", + "integrity": "sha1-3dduASSyl9QL88yjHIsi7LQ7xh0=", "dev": true, "requires": { "postcss": "^7.0.2" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.32", + "resolved": "https://r.cnpmjs.org/postcss/download/postcss-7.0.32.tgz", + "integrity": "sha1-QxDW7jRwU9o0M9sr5JKIPWLOxZ0=", "dev": true, "requires": { "chalk": "^2.4.2", @@ -25288,10 +24850,16 @@ "supports-color": "^6.1.0" } }, + "source-map": { + "version": "0.6.1", + "resolved": "http://r.cnpmjs.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + }, "supports-color": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -25300,18 +24868,18 @@ } }, "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "version": "5.5.0", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-5.5.0.tgz", + "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", "dev": true, "requires": { - "has-flag": "^1.0.0" + "has-flag": "^3.0.0" } }, "supports-hyperlinks": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-1.0.1.tgz", - "integrity": "sha512-HHi5kVSefKaJkGYXbDuKbUGRVxqnWGn3J2e39CYcNJEfWciGq2zYtOhXLTlvrOZW1QU7VX67w7fMmWafHX9Pfw==", + "resolved": "https://r.cnpmjs.org/supports-hyperlinks/download/supports-hyperlinks-1.0.1.tgz", + "integrity": "sha1-cdrt82zBBgrFEAw1G7PaSMKcDvc=", "dev": true, "requires": { "has-flag": "^2.0.0", @@ -25323,23 +24891,6 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - }, - "dependencies": { - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - } - } } } }, @@ -25366,87 +24917,88 @@ }, "symbol-observable": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" + "resolved": "http://r.cnpmjs.org/symbol-observable/download/symbol-observable-1.2.0.tgz", + "integrity": "sha1-wiaIrtTqs83C3+rLtWFmBWCgCAQ=" }, "symbol-tree": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", - "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=", + "version": "3.2.4", + "resolved": "http://r.cnpmjs.org/symbol-tree/download/symbol-tree-3.2.4.tgz", + "integrity": "sha1-QwY30ki6d+B4iDlR+5qg7tfGP6I=", "dev": true }, "table": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", - "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", + "version": "5.4.6", + "resolved": "https://registry.npm.taobao.org/table/download/table-5.4.6.tgz", + "integrity": "sha1-EpLRlQDOP4YFOwXw6Ofko7shB54=", "dev": true, "requires": { - "ajv": "^5.2.3", - "ajv-keywords": "^2.1.0", - "chalk": "^2.1.0", - "lodash": "^4.17.4", - "slice-ansi": "1.0.0", - "string-width": "^2.1.1" + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" }, "dependencies": { - "ajv-keywords": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", - "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz", + "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=", "dev": true }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz", + "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=", "dev": true }, "is-fullwidth-code-point": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/slice-ansi/download/slice-ansi-2.1.0.tgz", + "integrity": "sha1-ys12k0YaY3pXiNkqfdT7oGjoFjY=", "dev": true, "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", "is-fullwidth-code-point": "^2.0.0" } }, "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz", + "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", "dev": true, "requires": { + "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "strip-ansi": "^5.1.0" } }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^4.1.0" } } } }, "tapable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.0.tgz", - "integrity": "sha512-IlqtmLVaZA2qab8epUXbVWRn3aB1imbDMJtjB3nu4X0NqPkcY/JH9ZtCBWKHWPxs8Svi9tyo8w2dBoi07qZbBA==", + "version": "1.1.3", + "resolved": "http://r.cnpmjs.org/tapable/download/tapable-1.1.3.tgz", + "integrity": "sha1-ofzMBrWNth/XpF2i2kT186Pme6I=", "dev": true }, "tar": { "version": "4.4.13", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", - "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", + "resolved": "https://r.cnpmjs.org/tar/download/tar-4.4.13.tgz", + "integrity": "sha1-Q7NkvFKIjVVSmGN7ENYHkCVKtSU=", "dev": true, "requires": { "chownr": "^1.1.1", @@ -25456,53 +25008,24 @@ "mkdirp": "^0.5.0", "safe-buffer": "^5.1.2", "yallist": "^3.0.3" - }, - "dependencies": { - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } } }, "tar-fs": { "version": "1.16.3", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz", - "integrity": "sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==", + "resolved": "https://r.cnpmjs.org/tar-fs/download/tar-fs-1.16.3.tgz", + "integrity": "sha1-lmpiiEHaLEAQQGqCFny9Xgxy1Qk=", "dev": true, "requires": { "chownr": "^1.0.1", "mkdirp": "^0.5.1", "pump": "^1.0.0", "tar-stream": "^1.1.2" - }, - "dependencies": { - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "pump": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", - "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } } }, "tar-stream": { "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "resolved": "https://r.cnpmjs.org/tar-stream/download/tar-stream-1.6.2.tgz", + "integrity": "sha1-jqVdqzeXIlPZqa+Q/c1VmuQ1xVU=", "dev": true, "requires": { "bl": "^1.0.0", @@ -25512,53 +25035,12 @@ "readable-stream": "^2.3.0", "to-buffer": "^1.1.1", "xtend": "^4.0.0" - }, - "dependencies": { - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, "terser": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.4.3.tgz", - "integrity": "sha512-0ikKraVtRDKGzHrzkCv5rUNDzqlhmhowOBqC0XqUHFpW+vJ45+20/IFBcebwKfiS2Z9fJin6Eo+F1zLZsxi8RA==", + "version": "4.8.0", + "resolved": "https://r.cnpmjs.org/terser/download/terser-4.8.0.tgz", + "integrity": "sha1-YwVjQ9fHC7KfOvZlhlpG/gOg3xc=", "dev": true, "requires": { "commander": "^2.20.0", @@ -25566,188 +25048,121 @@ "source-map-support": "~0.5.12" }, "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "source-map": { + "version": "0.6.1", + "resolved": "http://r.cnpmjs.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", "dev": true } } }, "terser-webpack-plugin": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz", - "integrity": "sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA==", + "version": "1.4.4", + "resolved": "https://r.cnpmjs.org/terser-webpack-plugin/download/terser-webpack-plugin-1.4.4.tgz", + "integrity": "sha1-LGNUQ0cyS6r6mla6rd8WNMir/C8=", "dev": true, "requires": { "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^2.1.2", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - }, - "dependencies": { - "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^3.1.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + }, + "dependencies": { + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/is-wsl/download/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", "dev": true }, "schema-utils": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "resolved": "https://r.cnpmjs.org/schema-utils/download/schema-utils-1.0.0.tgz", + "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=", "dev": true, "requires": { "ajv": "^6.1.0", "ajv-errors": "^1.0.0", "ajv-keywords": "^3.1.0" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "http://r.cnpmjs.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true } } }, "test-exclude": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", - "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", + "version": "4.2.3", + "resolved": "http://r.cnpmjs.org/test-exclude/download/test-exclude-4.2.3.tgz", + "integrity": "sha1-qaXmRHTkOYM5JFoKdprXwvSpfCA=", "dev": true, "requires": { - "glob": "^7.1.3", - "minimatch": "^3.0.4", - "read-pkg-up": "^4.0.0", - "require-main-filename": "^2.0.0" + "arrify": "^1.0.1", + "micromatch": "^2.3.11", + "object-assign": "^4.1.0", + "read-pkg-up": "^1.0.1", + "require-main-filename": "^1.0.1" }, "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npm.taobao.org/braces/download/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", "dev": true, "requires": { - "p-limit": "^2.0.0" + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-extglob/download/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", "dev": true }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" + "is-extglob": "^1.0.0" } }, - "read-pkg-up": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", - "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npm.taobao.org/micromatch/download/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "dev": true, "requires": { - "find-up": "^3.0.0", - "read-pkg": "^3.0.0" + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" } - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true } } }, "text-table": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "resolved": "https://registry.npm.taobao.org/text-table/download/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, @@ -25757,58 +25172,20 @@ "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=", "dev": true }, - "through": { - "version": "2.3.8", - "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, "through2": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "resolved": "http://r.cnpmjs.org/through2/download/through2-2.0.5.tgz", + "integrity": "sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0=", "dev": true, "requires": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, "thunky": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "resolved": "http://r.cnpmjs.org/thunky/download/thunky-1.1.0.tgz", + "integrity": "sha1-Wrr3FKlAXbBQRzK7zNLO3Z75U30=", "dev": true }, "tildify": { @@ -25828,8 +25205,8 @@ }, "timers-browserify": { "version": "2.0.11", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", - "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", + "resolved": "http://r.cnpmjs.org/timers-browserify/download/timers-browserify-2.0.11.tgz", + "integrity": "sha1-gAsfPu4nLlvFPuRloE0OgEwxIR8=", "dev": true, "requires": { "setimmediate": "^1.0.4" @@ -25843,27 +25220,20 @@ }, "tiny-emitter": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", - "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" + "resolved": "http://r.cnpmjs.org/tiny-emitter/download/tiny-emitter-2.1.0.tgz", + "integrity": "sha1-HRpW7fxRxD6GPLtTgqcjMONVVCM=", + "dev": true }, "tiny-invariant": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.0.6.tgz", - "integrity": "sha512-FOyLWWVjG+aC0UqG76V53yAWdXfH8bO6FNmyZOuUrzDzK8DI3/JRY25UD7+g49JWM1LXwymsKERB+DzI0dTEQA==" + "version": "1.1.0", + "resolved": "http://r.cnpmjs.org/tiny-invariant/download/tiny-invariant-1.1.0.tgz", + "integrity": "sha1-Y0xfjv3CdxS384bDXmdgmR0jCHU=" }, "tiny-warning": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } + "resolved": "http://r.cnpmjs.org/tiny-warning/download/tiny-warning-1.0.3.tgz", + "integrity": "sha1-lKMNtFPfTGQ9D9VmBg1gqHXYR1Q=", + "dev": true }, "tmpl": { "version": "1.0.4", @@ -25879,8 +25249,8 @@ }, "to-buffer": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", + "resolved": "https://r.cnpmjs.org/to-buffer/download/to-buffer-1.1.1.tgz", + "integrity": "sha1-STvUj2LXxD/N7TE6A9ytsuEhOoA=", "dev": true }, "to-camel-case": { @@ -25893,9 +25263,9 @@ } }, "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/to-fast-properties/download/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true }, "to-no-case": { @@ -25911,23 +25281,12 @@ "dev": true, "requires": { "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } } }, "to-regex": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "resolved": "http://r.cnpmjs.org/to-regex/download/to-regex-3.0.2.tgz", + "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=", "dev": true, "requires": { "define-property": "^2.0.2", @@ -25937,13 +25296,12 @@ } }, "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "version": "5.0.1", + "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-5.0.1.tgz", + "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=", "dev": true, "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "is-number": "^7.0.0" } }, "to-space-case": { @@ -25957,8 +25315,8 @@ }, "toidentifier": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "resolved": "http://r.cnpmjs.org/toidentifier/download/toidentifier-1.0.0.tgz", + "integrity": "sha1-fhvjRw8ed5SLxD2Uo8j013UrpVM=", "dev": true }, "toposort": { @@ -25968,21 +25326,13 @@ "dev": true }, "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "version": "2.5.0", + "resolved": "http://r.cnpmjs.org/tough-cookie/download/tough-cookie-2.5.0.tgz", + "integrity": "sha1-zZ+yoKodWhK0c72fuW+j3P9lreI=", "dev": true, "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } + "psl": "^1.1.28", + "punycode": "^2.1.1" } }, "tr46": { @@ -25996,8 +25346,8 @@ }, "treeify": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", - "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==", + "resolved": "https://r.cnpmjs.org/treeify/download/treeify-1.1.0.tgz", + "integrity": "sha1-TjHGpGOszQlDh58wZnxP2v9BG7g=", "dev": true }, "trim": { @@ -26007,9 +25357,9 @@ "dev": true }, "trim-lines": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-1.1.2.tgz", - "integrity": "sha512-3GOuyNeTqk3FAqc3jOJtw7FTjYl94XBR5aD9QnDbK/T4CA9sW/J0l9RoaRPE9wyPP7NF331qnHnvJFBJ+IDkmQ==", + "version": "1.1.3", + "resolved": "https://r.cnpmjs.org/trim-lines/download/trim-lines-1.1.3.tgz", + "integrity": "sha1-g5UUvoJCj9nn7InjUIGv6Pb5MRU=", "dev": true }, "trim-newlines": { @@ -26034,30 +25384,59 @@ "dev": true }, "trim-trailing-lines": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.2.tgz", - "integrity": "sha512-MUjYItdrqqj2zpcHFTkMa9WAv4JHTI6gnRQGPFLrt5L9a6tRMiDnIqYl8JBvu2d2Tc3lWJKQwlGCp0K8AvCM+Q==", + "version": "1.1.3", + "resolved": "https://r.cnpmjs.org/trim-trailing-lines/download/trim-trailing-lines-1.1.3.tgz", + "integrity": "sha1-fwc5iB/3Zle3d24Qh0EoAEtiWpQ=", "dev": true }, "trough": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.4.tgz", - "integrity": "sha512-tdzBRDGWcI1OpPVmChbdSKhvSVurznZ8X36AYURAcl+0o2ldlCY2XPzyXNNxwJwwyIU+rIglTCG4kxtNKBQH7Q==", + "version": "1.0.5", + "resolved": "https://r.cnpmjs.org/trough/download/trough-1.0.5.tgz", + "integrity": "sha1-uLY5zvrX0LsqvTfUM/+Ck++l9AY=", "dev": true }, "true-case-path": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", - "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", + "resolved": "https://r.cnpmjs.org/true-case-path/download/true-case-path-1.0.3.tgz", + "integrity": "sha1-+BO1qMhrQNpZYGcisUTjIleZ9H0=", "dev": true, "requires": { "glob": "^7.1.2" } }, + "tsconfig-paths": { + "version": "3.9.0", + "resolved": "https://registry.npm.taobao.org/tsconfig-paths/download/tsconfig-paths-3.9.0.tgz", + "integrity": "sha1-CYVHpsREiAfo/Ljq4IEGTumjyQs=", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/json5/download/json5-1.0.1.tgz", + "integrity": "sha1-d5+wAYYE+oVOrL9iUhgNg1Q+Pb4=", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/strip-bom/download/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "version": "1.13.0", + "resolved": "http://r.cnpmjs.org/tslib/download/tslib-1.13.0.tgz", + "integrity": "sha1-yIHhPMcBWJTtkUhi0nZDb6mkcEM=", "dev": true }, "tty-browserify": { @@ -26092,35 +25471,24 @@ }, "type-detect": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "resolved": "https://r.cnpmjs.org/type-detect/download/type-detect-4.0.8.tgz", + "integrity": "sha1-dkb7XxiHHPu3dJ5pvTmmOI63RQw=", + "dev": true + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npm.taobao.org/type-fest/download/type-fest-0.8.1.tgz?cache=0&sync_timestamp=1601425309553&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.8.1.tgz", + "integrity": "sha1-CeJJ696FHTseSNJ8EFREZn8XuD0=", "dev": true }, "type-is": { "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "resolved": "http://r.cnpmjs.org/type-is/download/type-is-1.6.18.tgz", + "integrity": "sha1-TlUs0F3wlGfcvE73Od6J8s83wTE=", "dev": true, "requires": { "media-typer": "0.3.0", "mime-types": "~2.1.24" - }, - "dependencies": { - "mime-db": { - "version": "1.42.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", - "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==", - "dev": true - }, - "mime-types": { - "version": "2.1.25", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz", - "integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==", - "dev": true, - "requires": { - "mime-db": "1.42.0" - } - } } }, "typedarray": { @@ -26131,17 +25499,31 @@ }, "ua-parser-js": { "version": "0.7.21", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.21.tgz", - "integrity": "sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ==" + "resolved": "http://r.cnpmjs.org/ua-parser-js/download/ua-parser-js-0.7.21.tgz", + "integrity": "sha1-hTz5zpP2QvZxdCc8w0Vlrm8wh3c=" }, "uglify-js": { - "version": "3.4.9", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", - "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", + "version": "3.4.10", + "resolved": "https://r.cnpmjs.org/uglify-js/download/uglify-js-3.4.10.tgz", + "integrity": "sha1-mtlWPY6zrN+404WX0q8dgV9qdV8=", "dev": true, "requires": { - "commander": "~2.17.1", + "commander": "~2.19.0", "source-map": "~0.6.1" + }, + "dependencies": { + "commander": { + "version": "2.19.0", + "resolved": "http://r.cnpmjs.org/commander/download/commander-2.19.0.tgz", + "integrity": "sha1-9hmKqE5bg8RgVLlN3tv+1e6f8So=", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "http://r.cnpmjs.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } } }, "unc-path-regex": { @@ -26150,10 +25532,17 @@ "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", "dev": true }, + "underscore": { + "version": "1.11.0", + "resolved": "https://registry.npm.taobao.org/underscore/download/underscore-1.11.0.tgz", + "integrity": "sha1-3XwjoZXbNCZxhgRGSYcP8bq1kp4=", + "dev": true + }, "unescape": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unescape/-/unescape-1.0.1.tgz", - "integrity": "sha512-O0+af1Gs50lyH1nUu3ZyYS1cRh01Q/kUKatTOkSs7jukXE6/NebucDVxyiDsA9AQ4JC1V1jUH9EO8JX2nMDgGQ==", + "resolved": "http://r.cnpmjs.org/unescape/download/unescape-1.0.1.tgz", + "integrity": "sha1-lW5DD2HK2KTVfYLFGPXmzF0N2pY=", + "dev": true, "requires": { "extend-shallow": "^2.0.1" }, @@ -26162,6 +25551,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -26169,93 +25559,67 @@ } }, "unherit": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.2.tgz", - "integrity": "sha512-W3tMnpaMG7ZY6xe/moK04U9fBhi6wEiCYHUW5Mop/wQHf12+79EQGwxYejNdhEz2mkqkBlGwm7pxmgBKMVUj0w==", + "version": "1.1.3", + "resolved": "https://r.cnpmjs.org/unherit/download/unherit-1.1.3.tgz", + "integrity": "sha1-bJtQPytBsmIzDIDpHIYUq9qmnCI=", "dev": true, "requires": { - "inherits": "^2.0.1", - "xtend": "^4.0.1" + "inherits": "^2.0.0", + "xtend": "^4.0.0" } }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" + "resolved": "http://r.cnpmjs.org/unicode-canonical-property-names-ecmascript/download/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha1-JhmADEyCWADv3YNDr33Zkzy+KBg=", + "dev": true }, "unicode-match-property-ecmascript": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "resolved": "http://r.cnpmjs.org/unicode-match-property-ecmascript/download/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha1-jtKjJWmWG86SJ9Cc0/+7j+1fAgw=", + "dev": true, "requires": { "unicode-canonical-property-names-ecmascript": "^1.0.4", "unicode-property-aliases-ecmascript": "^1.0.4" } }, "unicode-match-property-value-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", - "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==" + "version": "1.2.0", + "resolved": "http://r.cnpmjs.org/unicode-match-property-value-ecmascript/download/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha1-DZH2AO7rMJaqlisdb8iIduZOpTE=", + "dev": true }, "unicode-property-aliases-ecmascript": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", - "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==" + "version": "1.1.0", + "resolved": "http://r.cnpmjs.org/unicode-property-aliases-ecmascript/download/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha1-3Vepn2IHvt/0Yoq++5TFDblByPQ=", + "dev": true }, "unified": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-8.4.2.tgz", - "integrity": "sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA==", + "version": "9.1.0", + "resolved": "https://registry.npm.taobao.org/unified/download/unified-9.1.0.tgz?cache=0&sync_timestamp=1595579305761&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funified%2Fdownload%2Funified-9.1.0.tgz", + "integrity": "sha1-e6guXbR0DEegTmiKnKgzWYBUdBA=", "dev": true, "requires": { "bail": "^1.0.0", "extend": "^3.0.0", + "is-buffer": "^2.0.0", "is-plain-obj": "^2.0.0", "trough": "^1.0.0", "vfile": "^4.0.0" - }, - "dependencies": { - "is-plain-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.0.0.tgz", - "integrity": "sha512-EYisGhpgSCwspmIuRHGjROWTon2Xp8Z7U03Wubk/bTL5TTRC5R1rGVgyjzBrk9+ULdH6cRD06KRcw/xfqhVYKQ==", - "dev": true - } } }, "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/union-value/download/union-value-1.0.1.tgz", + "integrity": "sha1-C2/nuDWuzaYcbqTU8CwUIh4QmEc=", "dev": true, "requires": { "arr-union": "^3.1.0", "get-value": "^2.0.6", "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } + "set-value": "^2.0.1" } }, "uniq": { @@ -26272,8 +25636,8 @@ }, "unique-filename": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "resolved": "http://r.cnpmjs.org/unique-filename/download/unique-filename-1.1.1.tgz", + "integrity": "sha1-HWl2k2mtoFgxA6HmrodoG1ZXMjA=", "dev": true, "requires": { "unique-slug": "^2.0.0" @@ -26281,8 +25645,8 @@ }, "unique-slug": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "resolved": "http://r.cnpmjs.org/unique-slug/download/unique-slug-2.0.2.tgz", + "integrity": "sha1-uqvOkQg/xk6UWw861hPiZPfNTmw=", "dev": true, "requires": { "imurmurhash": "^0.1.4" @@ -26295,103 +25659,124 @@ "dev": true }, "unist-builder": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-1.0.4.tgz", - "integrity": "sha512-v6xbUPP7ILrT15fHGrNyHc1Xda8H3xVhP7/HAIotHOhVPjH5dCXA097C3Rry1Q2O+HbOLCao4hfPB+EYEjHgVg==", - "dev": true, - "requires": { - "object-assign": "^4.1.0" - } + "version": "2.0.3", + "resolved": "https://r.cnpmjs.org/unist-builder/download/unist-builder-2.0.3.tgz", + "integrity": "sha1-d2SHEbXYavCULzNDl6M8XpFRZDY=", + "dev": true }, "unist-util-find-all-after": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-1.0.5.tgz", - "integrity": "sha512-lWgIc3rrTMTlK1Y0hEuL+k+ApzFk78h+lsaa2gHf63Gp5Ww+mt11huDniuaoq1H+XMK2lIIjjPkncxXcDp3QDw==", + "resolved": "https://r.cnpmjs.org/unist-util-find-all-after/download/unist-util-find-all-after-1.0.5.tgz", + "integrity": "sha1-V1GoYIg09B0RetnFd3cMXy8bKJk=", "dev": true, "requires": { "unist-util-is": "^3.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", - "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", - "dev": true - } } }, "unist-util-generated": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.5.tgz", - "integrity": "sha512-1TC+NxQa4N9pNdayCYA1EGUOCAO0Le3fVp7Jzns6lnua/mYgwHo0tz5WUAfrdpNch1RZLHc61VZ1SDgrtNXLSw==", + "resolved": "https://r.cnpmjs.org/unist-util-generated/download/unist-util-generated-1.1.5.tgz", + "integrity": "sha1-HpA+aEZ5Mev66jhtrp6iU2KKzUI=", "dev": true }, "unist-util-is": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-2.1.2.tgz", - "integrity": "sha512-YkXBK/H9raAmG7KXck+UUpnKiNmUdB+aBGrknfQ4EreE1banuzrKABx3jP6Z5Z3fMSPMQQmeXBlKpCbMwBkxVw==" + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/unist-util-is/download/unist-util-is-3.0.0.tgz", + "integrity": "sha1-2ehDgcJGjoJinkpb6dfQWi3TJM0=", + "dev": true }, "unist-util-position": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.0.4.tgz", - "integrity": "sha512-tWvIbV8goayTjobxDIr4zVTyG+Q7ragMSMeKC3xnPl9xzIc0+she8mxXLM3JVNDDsfARPbCd3XdzkyLdo7fF3g==", + "version": "3.1.0", + "resolved": "https://r.cnpmjs.org/unist-util-position/download/unist-util-position-3.1.0.tgz", + "integrity": "sha1-HELuYwH41S9H0U9iu9t5ZXH6LUc=", "dev": true }, "unist-util-remove": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-1.0.3.tgz", - "integrity": "sha512-mB6nCHCQK0pQffUAcCVmKgIWzG/AXs/V8qpS8K72tMPtOSCMSjDeMc5yN+Ye8rB0FhcE+JvW++o1xRNc0R+++g==", + "version": "2.0.0", + "resolved": "https://r.cnpmjs.org/unist-util-remove/download/unist-util-remove-2.0.0.tgz", + "integrity": "sha1-MsKtVXiALyymKrgIFz1QWyyJhIg=", "dev": true, "requires": { - "unist-util-is": "^3.0.0" + "unist-util-is": "^4.0.0" }, "dependencies": { "unist-util-is": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", - "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", + "version": "4.0.2", + "resolved": "http://r.cnpmjs.org/unist-util-is/download/unist-util-is-4.0.2.tgz", + "integrity": "sha1-x9E0EYiqnOWzz/U4lY3piV8Upd4=", "dev": true } } }, "unist-util-remove-position": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz", - "integrity": "sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==", + "version": "2.0.1", + "resolved": "https://r.cnpmjs.org/unist-util-remove-position/download/unist-util-remove-position-2.0.1.tgz", + "integrity": "sha1-XRnKef26cSMBmZsrc1U8qPOzUsw=", "dev": true, "requires": { - "unist-util-visit": "^1.1.0" + "unist-util-visit": "^2.0.0" + }, + "dependencies": { + "unist-util-is": { + "version": "4.0.2", + "resolved": "http://r.cnpmjs.org/unist-util-is/download/unist-util-is-4.0.2.tgz", + "integrity": "sha1-x9E0EYiqnOWzz/U4lY3piV8Upd4=", + "dev": true + }, + "unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/unist-util-visit/download/unist-util-visit-2.0.3.tgz?cache=0&sync_timestamp=1594459248879&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funist-util-visit%2Fdownload%2Funist-util-visit-2.0.3.tgz", + "integrity": "sha1-w3A4kxRt9HIDu4qXla9H17lxIIw=", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/unist-util-visit-parents/download/unist-util-visit-parents-3.1.0.tgz?cache=0&sync_timestamp=1594553631380&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funist-util-visit-parents%2Fdownload%2Funist-util-visit-parents-3.1.0.tgz", + "integrity": "sha1-TdJi+53P5E8pfVPogvxv80IRc9U=", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + } + } } }, "unist-util-stringify-position": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.2.tgz", - "integrity": "sha512-nK5n8OGhZ7ZgUwoUbL8uiVRwAbZyzBsB/Ddrlbu6jwwubFza4oe15KlyEaLNMXQW1svOQq4xesUeqA85YrIUQA==", + "version": "2.0.3", + "resolved": "https://r.cnpmjs.org/unist-util-stringify-position/download/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha1-zOO/oc34W6c3XR1bF73Eytqb2do=", "dev": true, "requires": { "@types/unist": "^2.0.2" } }, "unist-util-visit": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.0.tgz", - "integrity": "sha512-FiGu34ziNsZA3ZUteZxSFaczIjGmksfSgdKqBfOejrrfzyUy5b7YrlzT1Bcvi+djkYDituJDy2XB7tGTeBieKw==", + "version": "1.4.1", + "resolved": "http://r.cnpmjs.org/unist-util-visit/download/unist-util-visit-1.4.1.tgz", + "integrity": "sha1-RySqqEhububibX/zyGhZYNVgseM=", + "dev": true, "requires": { "unist-util-visit-parents": "^2.0.0" } }, "unist-util-visit-parents": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.0.1.tgz", - "integrity": "sha512-6B0UTiMfdWql4cQ03gDTCSns+64Zkfo2OCbK31Ov0uMizEz+CJeAp0cgZVb5Fhmcd7Bct2iRNywejT0orpbqUA==", + "version": "2.1.2", + "resolved": "http://r.cnpmjs.org/unist-util-visit-parents/download/unist-util-visit-parents-2.1.2.tgz", + "integrity": "sha1-JeQ+VTEhZvM0jK5nQ1iHgdESwek=", + "dev": true, "requires": { - "unist-util-is": "^2.1.2" + "unist-util-is": "^3.0.0" } }, "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/universalify/download/universalify-1.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funiversalify%2Fdownload%2Funiversalify-1.0.0.tgz", + "integrity": "sha1-thodoXPoQ1sv48Z9Kbmt+FlL0W0=", "dev": true }, "unpipe": { @@ -26444,18 +25829,18 @@ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", "dev": true }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "isobject": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true } } }, "upath": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "resolved": "http://r.cnpmjs.org/upath/download/upath-1.2.0.tgz", + "integrity": "sha1-j2bbzVWog6za5ECK+LA1pQRMGJQ=", "dev": true }, "upper-case": { @@ -26466,8 +25851,8 @@ }, "uri-js": { "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "resolved": "http://r.cnpmjs.org/uri-js/download/uri-js-4.2.2.tgz", + "integrity": "sha1-lMVA4f93KVbiKZUHwBCupsiDjrA=", "dev": true, "requires": { "punycode": "^2.1.0" @@ -26499,8 +25884,8 @@ }, "url-loader": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-1.1.2.tgz", - "integrity": "sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg==", + "resolved": "http://r.cnpmjs.org/url-loader/download/url-loader-1.1.2.tgz", + "integrity": "sha1-uXHRkbg69pPF4/6kBkvp4fLX+Ng=", "dev": true, "requires": { "loader-utils": "^1.1.0", @@ -26508,34 +25893,16 @@ "schema-utils": "^1.0.0" }, "dependencies": { - "ajv": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.4.tgz", - "integrity": "sha512-4Wyjt8+t6YszqaXnLDfMmG/8AlO5Zbcsy3ATHncCzjW/NoPzAId8AK6749Ybjmdt+kUY1gP60fCu46oDxPv/mg==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "mime": { + "version": "2.4.6", + "resolved": "https://r.cnpmjs.org/mime/download/mime-2.4.6.tgz", + "integrity": "sha1-5bQHyQ20QvK+tbFiNz0Htpr/pNE=", "dev": true }, "schema-utils": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "resolved": "https://r.cnpmjs.org/schema-utils/download/schema-utils-1.0.0.tgz", + "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=", "dev": true, "requires": { "ajv": "^6.1.0", @@ -26547,8 +25914,8 @@ }, "url-parse": { "version": "1.4.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", - "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "resolved": "http://r.cnpmjs.org/url-parse/download/url-parse-1.4.7.tgz", + "integrity": "sha1-qKg1NejACjFuQDpdtKwbm4U64ng=", "dev": true, "requires": { "querystringify": "^2.1.1", @@ -26557,10 +25924,15 @@ }, "use": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "resolved": "http://r.cnpmjs.org/use/download/use-3.1.1.tgz", + "integrity": "sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8=", "dev": true }, + "use-memo-one": { + "version": "1.1.1", + "resolved": "https://r.cnpmjs.org/use-memo-one/download/use-memo-one-1.1.1.tgz", + "integrity": "sha1-Oebwj+J+Qip9eyNLX5BWrzE70iw=" + }, "user-home": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", @@ -26569,391 +25941,1089 @@ }, "util": { "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "resolved": "http://r.cnpmjs.org/util/download/util-0.11.1.tgz", + "integrity": "sha1-MjZzNyDsZLsn9uJvQhqqLhtYjWE=", "dev": true, "requires": { "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "http://r.cnpmjs.org/inherits/download/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "util.promisify": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/util.promisify/download/util.promisify-1.0.1.tgz", + "integrity": "sha1-a693dLgO6w91INi4HQeYKlmruu4=", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + } + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "8.3.0", + "resolved": "https://r.cnpmjs.org/uuid/download/uuid-8.3.0.tgz", + "integrity": "sha1-q3OAhcoi3JqMknJeRZsdUH311uo=" + }, + "v8-compile-cache": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/v8-compile-cache/download/v8-compile-cache-2.1.1.tgz?cache=0&sync_timestamp=1590871780233&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fv8-compile-cache%2Fdownload%2Fv8-compile-cache-2.1.1.tgz", + "integrity": "sha1-VLw83UMxe8qR413K8wWxpyN950U=", + "dev": true + }, + "v8flags": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", + "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", + "dev": true, + "requires": { + "user-home": "^1.1.1" + } + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "http://r.cnpmjs.org/validate-npm-package-license/download/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha1-/JH2uce6FchX9MssXe/uw51PQQo=", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "value-equal": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/value-equal/download/value-equal-1.0.1.tgz", + "integrity": "sha1-Hgt5THNMXAyt4XnEN9NW2TGjTWw=", + "dev": true + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "vendors": { + "version": "1.0.4", + "resolved": "http://r.cnpmjs.org/vendors/download/vendors-1.0.4.tgz", + "integrity": "sha1-4rgApT56Kbk1BsPPQRANFsTErY4=", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "vfile": { + "version": "4.2.0", + "resolved": "https://registry.npm.taobao.org/vfile/download/vfile-4.2.0.tgz?cache=0&sync_timestamp=1596109880576&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvfile%2Fdownload%2Fvfile-4.2.0.tgz", + "integrity": "sha1-JseKyS63CBawHUVl4AO35loqDgE=", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "replace-ext": "1.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + } + }, + "vfile-location": { + "version": "3.0.1", + "resolved": "https://r.cnpmjs.org/vfile-location/download/vfile-location-3.0.1.tgz", + "integrity": "sha1-14Z3w1Rt4PfNl3VEw2cmZ2TTG7M=", + "dev": true + }, + "vfile-message": { + "version": "2.0.4", + "resolved": "https://r.cnpmjs.org/vfile-message/download/vfile-message-2.0.4.tgz", + "integrity": "sha1-W0O4gXHUCerlhHfRPyPdQdUsNxo=", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } + }, + "vinyl": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", + "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", + "dev": true, + "requires": { + "clone": "^1.0.0", + "clone-stats": "^0.0.1", + "replace-ext": "0.0.1" + }, + "dependencies": { + "replace-ext": { + "version": "0.0.1", + "resolved": "https://r.cnpmjs.org/replace-ext/download/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", + "dev": true + } + } + }, + "vinyl-fs": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz", + "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=", + "dev": true, + "requires": { + "defaults": "^1.0.0", + "glob-stream": "^3.1.5", + "glob-watcher": "^0.0.6", + "graceful-fs": "^3.0.0", + "mkdirp": "^0.5.0", + "strip-bom": "^1.0.0", + "through2": "^0.6.1", + "vinyl": "^0.4.0" + }, + "dependencies": { + "clone": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", + "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", + "dev": true + }, + "graceful-fs": { + "version": "3.0.12", + "resolved": "http://r.cnpmjs.org/graceful-fs/download/graceful-fs-3.0.12.tgz", + "integrity": "sha1-ADSUfOntaV7IqwuFS8kZ6Csf+u8=", + "dev": true, + "requires": { + "natives": "^1.1.3" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "http://r.cnpmjs.org/isarray/download/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "http://r.cnpmjs.org/string_decoder/download/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "strip-bom": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/strip-bom/download/strip-bom-1.0.0.tgz", + "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=", + "dev": true, + "requires": { + "first-chunk-stream": "^1.0.0", + "is-utf8": "^0.2.0" + } + }, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "dev": true, + "requires": { + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" + } + }, + "vinyl": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", + "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", + "dev": true, + "requires": { + "clone": "^0.2.0", + "clone-stats": "^0.0.1" + } + } } }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "vinyl-sourcemaps-apply": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", + "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=", "dev": true, "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" + "source-map": "^0.5.1" } }, - "utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", - "dev": true - }, - "utils-merge": { + "vlq": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "resolved": "http://r.cnpmjs.org/vlq/download/vlq-1.0.1.tgz", + "integrity": "sha1-wAP258C0we3WI/1u5Qu8DWod5Gg=", "dev": true }, - "v8-compile-cache": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz", - "integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==", + "vm-browserify": { + "version": "1.1.2", + "resolved": "http://r.cnpmjs.org/vm-browserify/download/vm-browserify-1.1.2.tgz", + "integrity": "sha1-eGQcSIuObKkadfUR56OzKobl3aA=", "dev": true }, - "v8flags": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", - "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", + "w3c-hr-time": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/w3c-hr-time/download/w3c-hr-time-1.0.2.tgz", + "integrity": "sha1-ConN9cwVgi35w2BUNnaWPgzDCM0=", "dev": true, "requires": { - "user-home": "^1.1.1" + "browser-process-hrtime": "^1.0.0" } }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", "dev": true, "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "makeerror": "1.0.x" } }, - "value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true - }, - "vendors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.2.tgz", - "integrity": "sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ==", - "dev": true + "warning": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", + "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", + "requires": { + "loose-envify": "^1.0.0" + } }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "watchpack": { + "version": "1.7.4", + "resolved": "https://registry.npm.taobao.org/watchpack/download/watchpack-1.7.4.tgz", + "integrity": "sha1-bp2lOzyAuy1lCBiPWyAEEIZs0ws=", "dev": true, "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "chokidar": "^3.4.1", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0", + "watchpack-chokidar2": "^2.0.0" } }, - "vfile": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.0.2.tgz", - "integrity": "sha512-yhoTU5cDMSsaeaMfJ5g0bUKYkYmZhAh9fn9TZicxqn+Cw4Z439il2v3oT9S0yjlpqlI74aFOQCt3nOV+pxzlkw==", + "watchpack-chokidar2": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/watchpack-chokidar2/download/watchpack-chokidar2-2.0.0.tgz", + "integrity": "sha1-mUihhmy71suCTeoTp+1pH2yN3/A=", "dev": true, + "optional": true, "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "replace-ext": "1.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" + "chokidar": "^2.1.8" }, "dependencies": { - "is-buffer": { + "arr-diff": { + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/arr-diff/download/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true, + "optional": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "http://r.cnpmjs.org/array-unique/download/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true, + "optional": true + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "http://r.cnpmjs.org/binary-extensions/download/binary-extensions-1.13.1.tgz", + "integrity": "sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U=", + "dev": true, + "optional": true + }, + "braces": { + "version": "2.3.2", + "resolved": "http://r.cnpmjs.org/braces/download/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", + "dev": true, + "optional": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "http://r.cnpmjs.org/chokidar/download/chokidar-2.1.8.tgz", + "integrity": "sha1-gEs6e2qZNYw8XGHnHYco8EHP+Rc=", + "dev": true, + "optional": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "http://r.cnpmjs.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "http://r.cnpmjs.org/expand-brackets/download/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "optional": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "optional": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "dev": true, + "optional": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true, + "optional": true + } + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "extglob": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", - "dev": true + "resolved": "http://r.cnpmjs.org/extglob/download/extglob-2.0.4.tgz", + "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", + "dev": true, + "optional": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "optional": true, + "requires": { + "is-descriptor": "^1.0.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/fill-range/download/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "optional": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "http://r.cnpmjs.org/glob-parent/download/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "optional": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "http://r.cnpmjs.org/is-glob/download/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "optional": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^6.0.0" + }, + "dependencies": { + "kind-of": { + "version": "6.0.3", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-6.0.3.tgz", + "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", + "dev": true, + "optional": true + } + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/is-binary-path/download/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "optional": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "http://r.cnpmjs.org/is-buffer/download/is-buffer-1.1.6.tgz", + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", + "dev": true, + "optional": true }, - "replace-ext": { + "is-data-descriptor": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - } - } - }, - "vfile-location": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.6.tgz", - "integrity": "sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==", - "dev": true - }, - "vfile-message": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.2.tgz", - "integrity": "sha512-gNV2Y2fDvDOOqq8bEe7cF3DXU6QgV4uA9zMR2P8tix11l1r7zju3zry3wZ8sx+BEfuO6WQ7z2QzfWTvqHQiwsA==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - } - }, - "vinyl": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", - "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", - "dev": true, - "requires": { - "clone": "^1.0.0", - "clone-stats": "^0.0.1", - "replace-ext": "0.0.1" - } - }, - "vinyl-fs": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz", - "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=", - "dev": true, - "requires": { - "defaults": "^1.0.0", - "glob-stream": "^3.1.5", - "glob-watcher": "^0.0.6", - "graceful-fs": "^3.0.0", - "mkdirp": "^0.5.0", - "strip-bom": "^1.0.0", - "through2": "^0.6.1", - "vinyl": "^0.4.0" - }, - "dependencies": { - "clone": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", - "dev": true + "resolved": "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^6.0.0" + }, + "dependencies": { + "kind-of": { + "version": "6.0.3", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-6.0.3.tgz", + "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", + "dev": true, + "optional": true + } + } }, - "readable-stream": { - "version": "1.0.34", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "is-descriptor": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "dev": true, + "optional": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.3", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-6.0.3.tgz", + "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", + "dev": true, + "optional": true + } } }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "is-number": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, + "optional": true, "requires": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" + "kind-of": "^3.0.2" } }, - "vinyl": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", - "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", + "isobject": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true, + "optional": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "http://r.cnpmjs.org/micromatch/download/micromatch-3.1.10.tgz", + "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", + "dev": true, + "optional": true, "requires": { - "clone": "^0.2.0", - "clone-stats": "^0.0.1" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "optional": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/is-extendable/download/is-extendable-1.0.1.tgz", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "dev": true, + "optional": true, + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-6.0.3.tgz", + "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", + "dev": true, + "optional": true + } + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/normalize-path/download/normalize-path-3.0.0.tgz", + "integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=", + "dev": true, + "optional": true + }, + "readdirp": { + "version": "2.2.1", + "resolved": "http://r.cnpmjs.org/readdirp/download/readdirp-2.2.1.tgz", + "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=", + "dev": true, + "optional": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "optional": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } - } - } - }, - "vinyl-sourcemaps-apply": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", - "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=", - "dev": true, - "requires": { - "source-map": "^0.5.1" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "vlq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/vlq/-/vlq-1.0.1.tgz", - "integrity": "sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==" - }, - "vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true - }, - "w3c-hr-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", - "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", - "dev": true, - "requires": { - "browser-process-hrtime": "^0.1.2" - } - }, - "walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", - "dev": true, - "requires": { - "makeerror": "1.0.x" - } - }, - "warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", - "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "watchpack": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", - "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", - "dev": true, - "requires": { - "chokidar": "^2.0.2", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" - }, - "dependencies": { - "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", - "dev": true } } }, "wbuf": { "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "resolved": "http://r.cnpmjs.org/wbuf/download/wbuf-1.7.3.tgz", + "integrity": "sha1-wdjRSTFtPqhShIiVy2oL/oh7h98=", "dev": true, "requires": { "minimalistic-assert": "^1.0.0" } }, "web-namespaces": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.3.tgz", - "integrity": "sha512-r8sAtNmgR0WKOKOxzuSgk09JsHlpKlB+uHi937qypOu3PZ17UxPrierFKDye/uNHjNTTEshu5PId8rojIPj/tA==", + "version": "1.1.4", + "resolved": "https://r.cnpmjs.org/web-namespaces/download/web-namespaces-1.1.4.tgz", + "integrity": "sha1-vJij3mDa3X+u/EA9EHbVKfXgMOw=", "dev": true }, "webidl-conversions": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "resolved": "http://r.cnpmjs.org/webidl-conversions/download/webidl-conversions-4.0.2.tgz", + "integrity": "sha1-qFWYCx8LazWbodXZ+zmulB+qY60=", "dev": true }, "webpack": { - "version": "4.41.5", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.5.tgz", - "integrity": "sha512-wp0Co4vpyumnp3KlkmpM5LWuzvZYayDwM2n17EHFr4qxBBbRokC7DJawPJC7TfSFZ9HZ6GsdH40EBj4UV0nmpw==", + "version": "4.44.1", + "resolved": "https://registry.npm.taobao.org/webpack/download/webpack-4.44.1.tgz?cache=0&sync_timestamp=1596637262898&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack%2Fdownload%2Fwebpack-4.44.1.tgz", + "integrity": "sha1-F+af/58yG48RfR/acU7fwLk5zCE=", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/wasm-edit": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", - "acorn": "^6.2.1", + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", "ajv": "^6.10.2", "ajv-keywords": "^3.4.1", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.1.0", + "enhanced-resolve": "^4.3.0", "eslint-scope": "^4.0.3", "json-parse-better-errors": "^1.0.2", "loader-runner": "^2.4.0", "loader-utils": "^1.2.3", "memory-fs": "^0.4.1", "micromatch": "^3.1.10", - "mkdirp": "^0.5.1", + "mkdirp": "^0.5.3", "neo-async": "^2.6.1", "node-libs-browser": "^2.2.1", "schema-utils": "^1.0.0", "tapable": "^1.1.3", "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.6.0", + "watchpack": "^1.7.4", "webpack-sources": "^1.4.1" }, "dependencies": { "acorn": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.0.tgz", - "integrity": "sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw==", + "version": "6.4.1", + "resolved": "https://r.cnpmjs.org/acorn/download/acorn-6.4.1.tgz", + "integrity": "sha1-Ux5Yuj9RudrLmmZGyk3r9bFMpHQ=", + "dev": true + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/arr-diff/download/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "http://r.cnpmjs.org/array-unique/download/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, - "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "braces": { + "version": "2.3.2", + "resolved": "http://r.cnpmjs.org/braces/download/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "debug": { + "version": "2.6.9", + "resolved": "http://r.cnpmjs.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://r.cnpmjs.org/eslint-scope/download/eslint-scope-4.0.3.tgz", + "integrity": "sha1-ygODMxD2iJoyZHgaqC5j65z+eEg=", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "http://r.cnpmjs.org/expand-brackets/download/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "http://r.cnpmjs.org/extglob/download/extglob-2.0.4.tgz", + "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", "dev": true, "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } }, - "ajv-keywords": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", - "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", - "dev": true + "fill-range": { + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/fill-range/download/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", "dev": true, "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "kind-of": "^6.0.0" } }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "is-buffer": { + "version": "1.1.6", + "resolved": "http://r.cnpmjs.org/is-buffer/download/is-buffer-1.1.6.tgz", + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", "dev": true }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, - "neo-async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", - "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", + "kind-of": { + "version": "6.0.3", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-6.0.3.tgz", + "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", "dev": true }, + "micromatch": { + "version": "3.1.10", + "resolved": "http://r.cnpmjs.org/micromatch/download/micromatch-3.1.10.tgz", + "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, "schema-utils": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "resolved": "https://r.cnpmjs.org/schema-utils/download/schema-utils-1.0.0.tgz", + "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=", "dev": true, "requires": { "ajv": "^6.1.0", @@ -26961,117 +27031,242 @@ "ajv-keywords": "^3.1.0" } }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } } } }, "webpack-cli": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.10.tgz", - "integrity": "sha512-u1dgND9+MXaEt74sJR4PR7qkPxXUSQ0RXYq8x1L6Jg1MYVEmGPrH6Ah6C4arD4r0J1P5HKjRqpab36k0eIzPqg==", + "version": "3.3.12", + "resolved": "https://registry.npm.taobao.org/webpack-cli/download/webpack-cli-3.3.12.tgz?cache=0&sync_timestamp=1592482100585&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-cli%2Fdownload%2Fwebpack-cli-3.3.12.tgz", + "integrity": "sha1-lOmtoIFFPNCqYJyZ5QABL9OtLUo=", "dev": true, "requires": { - "chalk": "2.4.2", - "cross-spawn": "6.0.5", - "enhanced-resolve": "4.1.0", - "findup-sync": "3.0.0", - "global-modules": "2.0.0", - "import-local": "2.0.0", - "interpret": "1.2.0", - "loader-utils": "1.2.3", - "supports-color": "6.1.0", - "v8-compile-cache": "2.0.3", - "yargs": "13.2.4" + "chalk": "^2.4.2", + "cross-spawn": "^6.0.5", + "enhanced-resolve": "^4.1.1", + "findup-sync": "^3.0.0", + "global-modules": "^2.0.0", + "import-local": "^2.0.0", + "interpret": "^1.4.0", + "loader-utils": "^1.4.0", + "supports-color": "^6.1.0", + "v8-compile-cache": "^2.1.1", + "yargs": "^13.3.2" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "arr-diff": { + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/arr-diff/download/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", "dev": true }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "array-unique": { + "version": "0.3.2", + "resolved": "http://r.cnpmjs.org/array-unique/download/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "braces": { + "version": "2.3.2", + "resolved": "http://r.cnpmjs.org/braces/download/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" }, "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "has-flag": "^3.0.0" + "is-extendable": "^0.1.0" } } } }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "debug": { + "version": "2.6.9", + "resolved": "http://r.cnpmjs.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", "dev": true, "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" + "ms": "2.0.0" } }, - "enhanced-resolve": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", - "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", + "expand-brackets": { + "version": "2.1.4", + "resolved": "http://r.cnpmjs.org/expand-brackets/download/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.4.0", - "tapable": "^1.0.0" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true + } } }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "extglob": { + "version": "2.0.4", + "resolved": "http://r.cnpmjs.org/extglob/download/extglob-2.0.4.tgz", + "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", "dev": true, "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "fill-range": { + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/fill-range/download/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "locate-path": "^3.0.0" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } }, "findup-sync": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "resolved": "https://r.cnpmjs.org/findup-sync/download/findup-sync-3.0.0.tgz", + "integrity": "sha1-F7EI+e5RLft6XH88iyfqnhqcCNE=", "dev": true, "requires": { "detect-file": "^1.0.0", @@ -27080,25 +27275,10 @@ "resolve-dir": "^1.0.1" } }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, "global-modules": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "resolved": "http://r.cnpmjs.org/global-modules/download/global-modules-2.0.0.tgz", + "integrity": "sha1-mXYFrSNF8n9RU5vqJldEISFcd4A=", "dev": true, "requires": { "global-prefix": "^3.0.0" @@ -27106,201 +27286,128 @@ }, "global-prefix": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "resolved": "http://r.cnpmjs.org/global-prefix/download/global-prefix-3.0.0.tgz", + "integrity": "sha1-/IX3MGTfafUEIfR/iD/luRO6m5c=", "dev": true, "requires": { "ini": "^1.3.5", "kind-of": "^6.0.2", "which": "^1.3.1" } - }, - "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "interpret": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", - "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", - "dev": true - }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "dev": true, - "requires": { - "invert-kv": "^2.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, - "p-limit": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", "dev": true, "requires": { - "p-limit": "^2.0.0" + "kind-of": "^6.0.0" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "is-buffer": { + "version": "1.1.6", + "resolved": "http://r.cnpmjs.org/is-buffer/download/is-buffer-1.1.6.tgz", + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", "dev": true }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "dev": true, "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "kind-of": "^6.0.0" } }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "is-descriptor": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "dev": true, "requires": { - "ansi-regex": "^4.1.0" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "is-number": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "has-flag": "^3.0.0" + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "isobject": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "kind-of": { + "version": "6.0.3", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-6.0.3.tgz", + "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", "dev": true }, - "yargs": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", - "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", + "micromatch": { + "version": "3.1.10", + "resolved": "http://r.cnpmjs.org/micromatch/download/micromatch-3.1.10.tgz", + "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", "dev": true, "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "os-locale": "^3.1.0", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.0" + "has-flag": "^3.0.0" } }, - "yargs-parser": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", - "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } } } }, "webpack-dev-middleware": { "version": "3.7.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", - "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", + "resolved": "http://r.cnpmjs.org/webpack-dev-middleware/download/webpack-dev-middleware-3.7.2.tgz", + "integrity": "sha1-ABnD23FuP6XOy/ZPKriKdLqzMfM=", "dev": true, "requires": { "memory-fs": "^0.4.1", @@ -27311,17 +27418,17 @@ }, "dependencies": { "mime": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", - "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", + "version": "2.4.6", + "resolved": "https://r.cnpmjs.org/mime/download/mime-2.4.6.tgz", + "integrity": "sha1-5bQHyQ20QvK+tbFiNz0Htpr/pNE=", "dev": true } } }, "webpack-dev-server": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.10.1.tgz", - "integrity": "sha512-AGG4+XrrXn4rbZUueyNrQgO4KGnol+0wm3MPdqGLmmA+NofZl3blZQKxZ9BND6RDNuvAK9OMYClhjOSnxpWRoA==", + "version": "3.11.0", + "resolved": "http://r.cnpmjs.org/webpack-dev-server/download/webpack-dev-server-3.11.0.tgz", + "integrity": "sha1-jxVKO84bz9HMYY705wMniFXn/4w=", "dev": true, "requires": { "ansi-html": "0.0.7", @@ -27332,293 +27439,431 @@ "debug": "^4.1.1", "del": "^4.1.1", "express": "^4.17.1", - "html-entities": "^1.2.1", + "html-entities": "^1.3.1", "http-proxy-middleware": "0.19.1", "import-local": "^2.0.0", "internal-ip": "^4.3.0", "ip": "^1.1.5", "is-absolute-url": "^3.0.3", "killable": "^1.0.1", - "loglevel": "^1.6.6", + "loglevel": "^1.6.8", "opn": "^5.5.0", "p-retry": "^3.0.1", - "portfinder": "^1.0.25", + "portfinder": "^1.0.26", "schema-utils": "^1.0.0", "selfsigned": "^1.10.7", "semver": "^6.3.0", "serve-index": "^1.9.1", - "sockjs": "0.3.19", + "sockjs": "0.3.20", "sockjs-client": "1.4.0", - "spdy": "^4.0.1", + "spdy": "^4.0.2", "strip-ansi": "^3.0.1", "supports-color": "^6.1.0", "url": "^0.11.0", "webpack-dev-middleware": "^3.7.2", "webpack-log": "^2.0.0", "ws": "^6.2.1", - "yargs": "12.0.5" + "yargs": "^13.3.2" }, "dependencies": { - "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "arr-diff": { + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/arr-diff/download/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", "dev": true }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "array-unique": { + "version": "0.3.2", + "resolved": "http://r.cnpmjs.org/array-unique/download/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "http://r.cnpmjs.org/binary-extensions/download/binary-extensions-1.13.1.tgz", + "integrity": "sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "http://r.cnpmjs.org/braces/download/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", "dev": true, "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" } }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "chokidar": { + "version": "2.1.8", + "resolved": "http://r.cnpmjs.org/chokidar/download/chokidar-2.1.8.tgz", + "integrity": "sha1-gEs6e2qZNYw8XGHnHYco8EHP+Rc=", "dev": true, "requires": { - "ms": "^2.1.1" + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" } }, - "del": { + "debug": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "resolved": "http://r.cnpmjs.org/debug/download/debug-4.1.1.tgz", + "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=", "dev": true, "requires": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" + "ms": "^2.1.1" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "http://r.cnpmjs.org/ms/download/ms-2.1.2.tgz", + "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", + "dev": true + } } }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "expand-brackets": { + "version": "2.1.4", + "resolved": "http://r.cnpmjs.org/expand-brackets/download/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "http://r.cnpmjs.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true + } } }, - "fast-deep-equal": { + "extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "pump": "^3.0.0" + "is-extendable": "^0.1.0" } }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "extglob": { + "version": "2.0.4", + "resolved": "http://r.cnpmjs.org/extglob/download/extglob-2.0.4.tgz", + "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", "dev": true, "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true + "define-property": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } } } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true - }, - "is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "dev": true - }, - "is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "fill-range": { + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/fill-range/download/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "is-path-inside": "^2.1.0" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" } }, - "is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "glob-parent": { + "version": "3.1.0", + "resolved": "http://r.cnpmjs.org/glob-parent/download/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { - "path-is-inside": "^1.0.2" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "http://r.cnpmjs.org/is-glob/download/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } } }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "is-absolute-url": { + "version": "3.0.3", + "resolved": "http://r.cnpmjs.org/is-absolute-url/download/is-absolute-url-3.0.3.tgz", + "integrity": "sha1-lsaiK2ojkpsR6gr7GDbDatSl1pg=", "dev": true }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", "dev": true, "requires": { - "invert-kv": "^2.0.0" + "kind-of": "^6.0.0" + }, + "dependencies": { + "kind-of": { + "version": "6.0.3", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-6.0.3.tgz", + "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", + "dev": true + } } }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "is-binary-path": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/is-binary-path/download/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "requires": { + "binary-extensions": "^1.0.0" } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "is-buffer": { + "version": "1.1.6", + "resolved": "http://r.cnpmjs.org/is-buffer/download/is-buffer-1.1.6.tgz", + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", "dev": true }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "dev": true, "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" + "kind-of": "^6.0.0" + }, + "dependencies": { + "kind-of": { + "version": "6.0.3", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-6.0.3.tgz", + "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", + "dev": true + } } }, - "p-limit": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "is-descriptor": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "dev": true, "requires": { - "p-try": "^2.0.0" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.3", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-6.0.3.tgz", + "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", + "dev": true + } } }, - "p-locate": { + "is-number": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "resolved": "http://r.cnpmjs.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "p-limit": "^2.0.0" + "kind-of": "^3.0.2" } }, - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "isobject": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true + "micromatch": { + "version": "3.1.10", + "resolved": "http://r.cnpmjs.org/micromatch/download/micromatch-3.1.10.tgz", + "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/is-extendable/download/is-extendable-1.0.1.tgz", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-6.0.3.tgz", + "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", + "dev": true + } + } }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "normalize-path": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/normalize-path/download/normalize-path-3.0.0.tgz", + "integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=", "dev": true }, + "readdirp": { + "version": "2.2.1", + "resolved": "http://r.cnpmjs.org/readdirp/download/readdirp-2.2.1.tgz", + "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, "schema-utils": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "resolved": "https://r.cnpmjs.org/schema-utils/download/schema-utils-1.0.0.tgz", + "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=", "dev": true, "requires": { "ajv": "^6.1.0", @@ -27628,91 +27873,44 @@ }, "semver": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "resolved": "http://r.cnpmjs.org/semver/download/semver-6.3.0.tgz", + "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", "dev": true }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } + "ansi-regex": "^2.0.0" } }, "supports-color": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", "dev": true, "requires": { "has-flag": "^3.0.0" } }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - }, - "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", - "dev": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" - } - }, - "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } } } }, "webpack-log": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "resolved": "http://r.cnpmjs.org/webpack-log/download/webpack-log-2.0.0.tgz", + "integrity": "sha1-W3ko4GN1k/EZ0y9iJ8HgrDHhtH8=", "dev": true, "requires": { "ansi-colors": "^3.0.0", @@ -27721,60 +27919,64 @@ "dependencies": { "ansi-colors": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "resolved": "http://r.cnpmjs.org/ansi-colors/download/ansi-colors-3.2.4.tgz", + "integrity": "sha1-46PaS/uubIapwoViXeEkojQCb78=", + "dev": true + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://r.cnpmjs.org/uuid/download/uuid-3.4.0.tgz", + "integrity": "sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4=", "dev": true } } }, "webpack-merge": { "version": "4.2.2", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", - "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", + "resolved": "https://r.cnpmjs.org/webpack-merge/download/webpack-merge-4.2.2.tgz", + "integrity": "sha1-onxS6ng9E5iv0gh/VH17nS9DY00=", "dev": true, "requires": { "lodash": "^4.17.15" - }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - } } }, "webpack-sources": { "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "resolved": "http://r.cnpmjs.org/webpack-sources/download/webpack-sources-1.4.3.tgz", + "integrity": "sha1-7t2OwLko+/HL/plOItLYkPMwqTM=", "dev": true, "requires": { "source-list-map": "^2.0.0", "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "http://r.cnpmjs.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } } }, "websocket-driver": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz", - "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==", + "version": "0.6.5", + "resolved": "https://r.cnpmjs.org/websocket-driver/download/websocket-driver-0.6.5.tgz", + "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", "dev": true, "requires": { - "http-parser-js": ">=0.4.0 <0.4.11", - "safe-buffer": ">=5.1.0", "websocket-extensions": ">=0.1.1" } }, "websocket-extensions": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", - "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", + "version": "0.1.4", + "resolved": "https://r.cnpmjs.org/websocket-extensions/download/websocket-extensions-0.1.4.tgz", + "integrity": "sha1-f4RzvIOd/YdgituV1+sHUhFXikI=", "dev": true }, "whatwg-encoding": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "resolved": "http://r.cnpmjs.org/whatwg-encoding/download/whatwg-encoding-1.0.5.tgz", + "integrity": "sha1-WrrPd3wyFmpR0IXWtPPn0nET3bA=", "dev": true, "requires": { "iconv-lite": "0.4.24" @@ -27782,19 +27984,19 @@ }, "whatwg-fetch": { "version": "2.0.4", - "resolved": "http://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", - "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==" + "resolved": "http://r.cnpmjs.org/whatwg-fetch/download/whatwg-fetch-2.0.4.tgz", + "integrity": "sha1-3eal3zFfnTmZGqF2IYU9cguFVm8=" }, "whatwg-mimetype": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "resolved": "http://r.cnpmjs.org/whatwg-mimetype/download/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha1-PUseAxLSB5h5+Cav8Y2+7KWWD78=", "dev": true }, "whatwg-url": { "version": "6.5.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", - "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", + "resolved": "http://r.cnpmjs.org/whatwg-url/download/whatwg-url-6.5.0.tgz", + "integrity": "sha1-8t8Cv/F2/WUHDfdK1cy7WhmZZag=", "dev": true, "requires": { "lodash.sortby": "^4.7.0", @@ -27810,32 +28012,65 @@ }, "which": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "resolved": "http://r.cnpmjs.org/which/download/which-1.3.1.tgz", + "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=", "dev": true, "requires": { "isexe": "^2.0.0" } }, "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/which-module/download/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, "wide-align": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "resolved": "https://r.cnpmjs.org/wide-align/download/wide-align-1.1.3.tgz", + "integrity": "sha1-rgdOa9wMFKQx6ATmJFScYzsABFc=", "dev": true, "requires": { "string-width": "^1.0.2 || 2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz", + "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz?cache=0&sync_timestamp=1573280549549&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } } }, "widest-line": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", - "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", + "resolved": "https://r.cnpmjs.org/widest-line/download/widest-line-2.0.1.tgz", + "integrity": "sha1-dDh2RzDsfvQ4HOTfgvuYpTFCo/w=", "dev": true, "requires": { "string-width": "^2.1.1" @@ -27855,8 +28090,8 @@ }, "string-width": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz", + "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", "dev": true, "requires": { "is-fullwidth-code-point": "^2.0.0", @@ -27874,29 +28109,57 @@ } } }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "word-wrap": { + "version": "1.2.3", + "resolved": "http://r.cnpmjs.org/word-wrap/download/word-wrap-1.2.3.tgz", + "integrity": "sha1-YQY29rH3A4kb00dxzLF/uTtHB5w=", "dev": true }, "worker-farm": { "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "resolved": "http://r.cnpmjs.org/worker-farm/download/worker-farm-1.7.0.tgz", + "integrity": "sha1-JqlMU5G7ypJhUgAvabhKS/dy5ag=", "dev": true, "requires": { "errno": "~0.1.7" } }, "wrap-ansi": { - "version": "2.1.0", - "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "version": "7.0.0", + "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-7.0.0.tgz", + "integrity": "sha1-Z+FFz/UQpqaYS98RUpEdadLrnkM=", "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-4.2.1.tgz", + "integrity": "sha1-kK51xCTQCNJiTFvynq0xd+v881k=", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz", + "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz", + "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", + "dev": true + } } }, "wrappy": { @@ -27906,9 +28169,9 @@ "dev": true }, "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/write/download/write-1.0.3.tgz", + "integrity": "sha1-CADhRSO5I6OH5BUSPIZWFqrg9cM=", "dev": true, "requires": { "mkdirp": "^0.5.1" @@ -27916,21 +28179,13 @@ }, "write-file-atomic": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", - "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==", + "resolved": "http://r.cnpmjs.org/write-file-atomic/download/write-file-atomic-2.4.1.tgz", + "integrity": "sha1-0LBUY8GIroBDlv1asqNwBir4dSk=", "dev": true, "requires": { "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", "signal-exit": "^3.0.2" - }, - "dependencies": { - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - } } }, "write-file-stdout": { @@ -27940,9 +28195,9 @@ "dev": true }, "ws": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", - "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", + "version": "6.2.1", + "resolved": "http://r.cnpmjs.org/ws/download/ws-6.2.1.tgz", + "integrity": "sha1-RC/fCkftZPWbal2P8TD0dI7VJPs=", "dev": true, "requires": { "async-limiter": "~1.0.0" @@ -27956,86 +28211,164 @@ }, "xml-name-validator": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "resolved": "http://r.cnpmjs.org/xml-name-validator/download/xml-name-validator-3.0.0.tgz", + "integrity": "sha1-auc+Bt5NjG5H+fsYH3jWSK1FfGo=", "dev": true }, "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + "version": "4.0.2", + "resolved": "http://r.cnpmjs.org/xtend/download/xtend-4.0.2.tgz", + "integrity": "sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q=", + "dev": true }, "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/y18n/download/y18n-4.0.0.tgz", + "integrity": "sha1-le+U+F7MgdAHwmThkKEg8KPIVms=", "dev": true }, "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "version": "3.1.1", + "resolved": "http://r.cnpmjs.org/yallist/download/yallist-3.1.1.tgz", + "integrity": "sha1-27fa+b/YusmrRev2ArjLrQ1dCP0=", "dev": true }, "yargs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "version": "13.3.2", + "resolved": "http://r.cnpmjs.org/yargs/download/yargs-13.3.2.tgz", + "integrity": "sha1-rX/+/sGqWVZayRX4Lcyzipwxot0=", "dev": true, "requires": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", + "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^5.0.0" + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" }, "dependencies": { - "camelcase": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz", + "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz", + "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=", + "dev": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/find-up/download/find-up-3.0.0.tgz", + "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "locate-path": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/locate-path/download/locate-path-3.0.0.tgz", + "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://r.cnpmjs.org/p-limit/download/p-limit-2.3.0.tgz", + "integrity": "sha1-PdM8ZHohT9//2DWTPrCG2g3CHbE=", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "resolved": "http://r.cnpmjs.org/p-locate/download/p-locate-3.0.0.tgz", + "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "http://r.cnpmjs.org/p-try/download/p-try-2.2.0.tgz", + "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/require-main-filename/download/require-main-filename-2.0.0.tgz", + "integrity": "sha1-0LMp7MfMD2Fkn2IhW+aa9UqomJs=", "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "http://r.cnpmjs.org/string-width/download/string-width-3.1.0.tgz", + "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1573280549549&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } } } }, "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "version": "13.1.2", + "resolved": "http://r.cnpmjs.org/yargs-parser/download/yargs-parser-13.1.2.tgz", + "integrity": "sha1-Ew8JcC667vJlDVTObj5XBvek+zg=", "dev": true, "requires": { - "camelcase": "^3.0.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - } + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } }, "yauzl": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", - "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", + "version": "2.10.0", + "resolved": "https://r.cnpmjs.org/yauzl/download/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", "dev": true, "requires": { - "fd-slicer": "~1.0.1" + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" } }, + "zrender": { + "version": "4.3.0", + "resolved": "https://r.cnpmjs.org/zrender/download/zrender-4.3.0.tgz", + "integrity": "sha1-nwVhIbILuuREFNKHv2oRn/cEJmE=" + }, "zwitch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.4.tgz", - "integrity": "sha512-YO803/X+13GNaZB7fVopjvHH0uWQKgJkgKnU1YCjxShjKGVuN9PPHHW8g+uFDpkHpSTNi3rCMKMewIcbC1BAYg==", + "version": "1.0.5", + "resolved": "https://r.cnpmjs.org/zwitch/download/zwitch-1.0.5.tgz", + "integrity": "sha1-0R1zgf/tFrdC9q97PyI9XNn+mSA=", "dev": true } } diff --git a/package.json b/package.json index 95885fe4e..a884e024a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@hi-ui/hiui", - "version": "2.15.0", + "version": "3.0.0", "description": "HIUI for React", "scripts": { "test": "node_modules/.bin/standard && node_modules/.bin/stylelint --config .stylelintrc 'components/**/*.scss'", @@ -16,7 +16,10 @@ "dev": "npm start", "start": "node build/start.js", "prerender:gh-pages": "cross-env DOC_ENV=github npm run build && cross-env DOC_ENV=github node build/prerenderSite.js", - "prerender": "npm run build && node build/prerenderSite.js" + "prerender": "npm run build && node build/prerenderSite.js", + "pub-future": "npm publish --access public --tag future", + "pub": "npm publish --access public --tag latest", + "pub-next": "npm publish --access public --tag next" }, "repository": { "type": "git", @@ -33,45 +36,38 @@ "author": "HIUI ", "license": "MIT", "main": "index.js", - "module": "es/index.js", + "module": "es/index.js", "file": [ "dist", - "es" + "es", + "types/*.d.ts" ], "peerDependencies": { - "react": ">=16.0.0", - "react-dom": ">=16.0.0" + "react": ">=16.13.0", + "react-dom": ">=16.13.0" }, "dependencies": { - "@hi-ui/classic-theme": "1.2.5", "@hi-ui/core-css": "^2.0.1", - "@mapbox/rehype-prism": "^0.3.1", - "async-validator": "^1.11.2", + "async-validator": "^3.3.0", "axios": "^0.18.0", "classnames": "^2.2.5", - "clipboard": "^2.0.4", - "date-fns": "^2.2.1", "decimal.js": "^10.2.0", "fetch-jsonp": "^1.1.3", - "github-markdown-css": "^3.0.1", - "hoist-non-react-statics": "^2.5.0", "lodash": "^4.17.11", + "moment": "^2.27.0", "qs": "^6.8.0", "react-addons-css-transition-group": "^15.6.2", + "react-beautiful-dnd": "^13.0.0", "react-click-outside": "^3.0.1", "react-cropper": "1.2.0", "react-dnd": "^7.7.0", "react-dnd-html5-backend": "^7.4.4", "react-lifecycles-compat": "^3.0.4", - "react-live": "^2.1.1", - "react-redux": "^5.1.1", + "react-resizable": "^1.10.1", "react-transition-group": "^4.2.1", - "redux": "^4.0.0", - "redux-thunk": "^2.3.0", "shallowequal": "^1.0.2", - "uuid": "^3.4.0", - "warning": "^3.0.0", - "whatwg-fetch": "^2.0.4" + "uuid": "^8.2.0", + "warning": "^3.0.0" }, "devDependencies": { "@babel/core": "^7.4.4", @@ -82,25 +78,41 @@ "@babel/preset-react": "^7.0.0", "@babel/standalone": "^7.4.5", "@bougiel/puppeteer-prerenderer": "^0.0.3", + "@hi-ui/classic-theme": "1.2.5", + "@mapbox/rehype-prism": "^0.3.1", "@mdx-js/loader": "^1.1.0", "autoprefixer": "^8.5.0", - "babel-eslint": "^8.2.6", "babel-jest": "^22.4.3", "babel-loader": "^8.0.6", "babel-plugin-transform-decorators-legacy": "^1.3.4", "babel-plugin-transform-remove-console": "^6.9.4", "canvas": "^2.6.1", "clean-webpack-plugin": "^0.1.19", + "clipboard": "^2.0.4", + "codemirror": "^5.58.1", "convert-source-map": "^1.6.0", "cross-env": "^5.1.6", "css-loader": "^0.28.11", "cssnano": "^4.1.10", + "echarts": "^4.9.0", + "echarts-for-react": "^2.0.16", "enzyme": "^3.9.0", "enzyme-adapter-react-16": "^1.13.2", + "eslint": "^7.9.0", + "eslint-config-prettier": "^6.11.0", + "eslint-config-standard": "^14.1.1", + "eslint-plugin-import": "^2.22.0", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-prettier": "^3.1.4", + "eslint-plugin-promise": "^4.2.1", + "eslint-plugin-react": "^7.20.6", + "eslint-plugin-standard": "^4.0.1", "file-loader": "^1.1.11", "gh-pages": "^2.0.1", + "github-markdown-css": "^3.0.1", "gulp": "^3.9.1", "gulp-babel": "^8.0.0", + "hoist-non-react-statics": "^2.5.0", "html-webpack-plugin": "^3.2.0", "husky": "^0.14.3", "jest": "^24.8.0", @@ -108,6 +120,7 @@ "jest-coverage-badges": "^1.1.2", "jest-environment-jsdom-global": "^1.2.0", "jest-fetch-mock": "^2.1.2", + "jsonlint-mod": "^1.7.6", "jsx-loader": "^0.13.2", "lint-staged": "^7.2.2", "loader-utils": "^1.2.3", @@ -116,23 +129,30 @@ "mini-css-extract-plugin": "^0.7.0", "mockjs": "^1.1.0", "node-sass": "^4.12.0", + "pinyin-match": "^1.1.1", "postcss-loader": "^2.1.5", + "prettier": "^2.1.1", "prismjs": "^1.16.0", "raw-loader": "^0.5.1", "react": "^16.9.0", + "react-codemirror2": "^7.2.1", "react-custom-scrollbars": "^4.2.1", "react-dnd-test-backend": "^7.7.0", "react-dnd-test-utils": "^7.7.0", "react-dom": "^16.9.0", "react-hot-loader": "4.2.0", + "react-live": "^2.1.1", + "react-quill": "^1.3.5", + "react-redux": "^5.1.1", "react-test-renderer": "^16.8.6", + "redux": "^4.0.0", + "redux-thunk": "^2.3.0", "rimraf": "^2.6.3", "rucksack-css": "^1.0.2", "run-sequence": "^2.2.1", "sass-loader": "^7.0.1", "simulant": "^0.2.2", "sinon": "^7.3.2", - "standard": "^11.0.1", "style-loader": "^0.21.0", "stylelint": "^9.10.1", "stylelint-config-recommended-scss": "^3.3.0", @@ -146,23 +166,9 @@ "webpack-dev-server": "^3.4.1", "webpack-merge": "^4.2.1" }, - "standard": { - "env": [ - "jest" - ], - "parser": "babel-eslint", - "ignore": [ - "/es/", - "/lib/", - "/dist/", - "/libs/markdown/code.js", - "/components/**/index.test.js", - "yarn.lock" - ] - }, "lint-staged": { "*.{js,jsx}": [ - "node_modules/.bin/standard --fix", + "eslint --fix", "git add" ], "*.scss": [ diff --git a/site/locales/en-US.js b/site/locales/en-US.js index 063a4de7c..232715096 100644 --- a/site/locales/en-US.js +++ b/site/locales/en-US.js @@ -6,6 +6,7 @@ module.exports = { theme: 'Layout Theme', changelog: 'Changelog', 'group-basic': 'General', + 'community-recommended': 'Community recommended', 'group-navgation': 'Navigation', 'group-form': 'Form', 'group-data': 'Data', @@ -36,6 +37,7 @@ module.exports = { navMenu: 'NavMenu', menu: 'Menu', select: 'Select', + search: 'Search', cascader: 'Cascader', radio: 'Radio', checkbox: 'Checkbox', @@ -51,7 +53,7 @@ module.exports = { }, designs: { 'design-patterns': '设计模式', - 'about-hiui': '关于 HIUI', + 'about-hiui': '关于 HiUI', 'visual-framework': '视觉框架', start: '快速上手', principles: '设计原则', diff --git a/site/locales/zh-CN.js b/site/locales/zh-CN.js index 36c6e6582..ea43e5cda 100755 --- a/site/locales/zh-CN.js +++ b/site/locales/zh-CN.js @@ -1,12 +1,82 @@ module.exports = { + docs: { + 'quick-start': '快速上手', + 'upgrade-from-2x': '从 v2.x 升级至 v3.x', + i18n: '国际化', + theme: '布局主题', + palette: '配色主题', + changelog: '更新日志', + 'hi-request': 'HiRequest 请求工具', + 'group-basic': '通用', + 'community-recommended': '社区推荐', + 'code-editor': 'CodeEditor 代码编辑器', + new: '重点更新', + 'group-navgation': '导航', + 'group-form': '数据录入', + 'group-data': '数据展示', + 'group-tips': '状态/反馈', + typography: 'Typography 排版', + button: 'Button 按钮', + dropdown: 'Dropdown 下拉菜单', + pagination: 'Pagination 分页', + tabs: 'Tabs 标签页', + tag: 'Tag 标签', + table: 'Table 表格', + tooltip: 'Tooltip 文字提示', + popover: 'Popover 气泡卡片', + loading: 'Loading 动效加载', + badge: 'Badge 红点 / 徽标', + notification: 'Notification 通知框', + modal: 'Modal 模态对话框', + drawer: 'Drawer 抽屉', + confirm: 'confirm 方法组件', + form: 'Form 表单', + alert: 'Alert 警告提示', + message: 'Message 消息', + panel: 'Panel 面板', + collapse: 'Collapse 折叠面板', + upload: 'Upload 上传', + slider: 'Slider 滑块', + tree: 'Tree 树形控件', + input: 'Input 输入框', + 'date-picker': 'DatePicker 日期选择器', + 'time-picker': 'TimePicker 时间选择器', + counter: 'Counter 加减器', + navMenu: 'NavMenu 导航菜单', + menu: 'Menu 菜单', + select: 'Select 选择器', + 'select-tree': 'SelectTree 树形选择器', + search: 'Search 搜索框', + cascader: 'Cascader 级联选择器', + radio: 'Radio 单选', + checkbox: 'Checkbox 复选', + grid: 'Grid 栅格', + stepper: 'Stepper 步骤条', + icon: 'Icon 图标', + progress: 'Progress 进度条', + card: 'Card 卡片', + timeline: 'Timeline 时间轴', + transfer: 'Transfer 穿梭框', + switch: 'Switch 开关', + rate: 'Rate 评分', + breadcrumb: 'Breadcrumb 面包屑', + carousel: 'Carousel 走马灯', + watermark: 'Watermark 水印', + list: 'List 列表', + filter: 'Filter 筛选', + charts: 'Charts 图表' + }, components: { 'quick-start': '快速上手', - 'upgrade-from-1x': '从 v1.x 升级至 v2.x', - i18n: 'i18n', + 'upgrade-from-2x': '从 v2.x 升级至 v3.x', + 'community-recommended': '社区推荐', + i18n: '国际化', theme: '布局主题', palette: '配色主题', changelog: '更新日志', + 'hi-request': 'HiRequest 请求工具', 'group-basic': '通用', + new: '重点更新', 'group-navgation': '导航', 'group-form': '数据录入', 'group-data': '数据展示', @@ -24,6 +94,7 @@ module.exports = { badge: 'Badge 红点 / 徽标', notification: 'Notification 通知框', modal: 'Modal 模态对话框', + drawer: 'Drawer 抽屉', confirm: 'confirm 方法组件', form: 'Form 表单', alert: 'Alert 警告提示', @@ -31,6 +102,7 @@ module.exports = { panel: 'Panel 面板', collapse: 'Collapse 折叠面板', upload: 'Upload 上传', + slider: 'Slider 滑块', tree: 'Tree 树形控件', input: 'Input 输入框', 'date-picker': 'DatePicker 日期选择器', @@ -39,6 +111,8 @@ module.exports = { navMenu: 'NavMenu 导航菜单', menu: 'Menu 菜单', select: 'Select 选择器', + 'select-tree': 'SelectTree 树形选择器', + search: 'Search 搜索框', cascader: 'Cascader 级联选择器', radio: 'Radio 单选', checkbox: 'Checkbox 复选', @@ -53,14 +127,18 @@ module.exports = { rate: 'Rate 评分', breadcrumb: 'Breadcrumb 面包屑', carousel: 'Carousel 走马灯', - watermark: 'Watermark 水印' + watermark: 'Watermark 水印', + list: 'List 列表', + filter: 'Filter 筛选', + charts: 'Charts 图表', + 'rich-text-editor': 'RichTextEditor 富文本编辑' }, designs: { summarize: '概述', 'design-values': '设计价值观', 'design-patterns': '设计模式', 'design-principles': '设计原则', - 'about-hiui': '关于 HIUI', + 'about-hiui': '关于 HiUI', 'visual-framework': '视觉框架', start: '快速上手', overview: '概览', @@ -100,7 +178,8 @@ module.exports = { }, headers: { home: '首页', - components: '文档', + docs: '文档', + components: '组件', design: '设计语言', template: '模板', github: 'GitHub' diff --git a/site/main.js b/site/main.js index f90c5996b..626d359c1 100644 --- a/site/main.js +++ b/site/main.js @@ -4,7 +4,6 @@ import { Provider } from 'react-redux' import App from './view' import store from './redux/store' import './style/index.scss' - render( diff --git a/site/pages/components/index.js b/site/pages/components/index.js index be5179768..920dd9a95 100755 --- a/site/pages/components/index.js +++ b/site/pages/components/index.js @@ -1,68 +1,69 @@ const components = {} const files = require.context(`../../../docs/zh-CN/components`, false, /.mdx$/) -files.keys().forEach(key => { - let _key = key.split('/')[1].split('.')[0] +files.keys().forEach((key) => { + const _key = key.split('/')[1].split('.')[0] components[_key] = files(key).default }) export default { - documents: { - 'quick-start': components['quick-start'], - 'upgrade-from-1x': components['upgrade-from-1x'], - theme: components['theme'], - palette: components['palette'], - i18n: components['i18n'], - changelog: components['changelog'] - }, + documents: {}, components: { 'group-basic': { - grid: components['grid'], - typography: components['typography'], - button: components['button'], - icon: components['icon'], - watermark: components['watermark'] + grid: components.grid, + typography: components.typography, + button: components.button, + icon: components.icon, + watermark: components.watermark }, 'group-navgation': { - dropdown: components['dropdown'], - pagination: components['pagination'], - stepper: components['stepper'], - menu: components['menu'], - breadcrumb: components['breadcrumb'] + dropdown: components.dropdown, + pagination: components.pagination, + stepper: components.stepper, + menu: components.menu, + breadcrumb: components.breadcrumb }, 'group-form': { - form: components['form'], - input: components['input'], - counter: components['counter'], - select: components['select'], - cascader: components['cascader'], - radio: components['radio'], - checkbox: components['checkbox'], - switch: components['switch'], + form: components.form, + input: components.input, + search: components.search, + counter: components.counter, + select: components.select, + 'select-tree': components['select-tree'], + cascader: components.cascader, + radio: components.radio, + filter: components.filter, + checkbox: components.checkbox, + switch: components.switch, 'date-picker': components['date-picker'], 'time-picker': components['time-picker'], - transfer: components['transfer'], - tree: components['tree'], - upload: components['upload'], - rate: components['rate'] + transfer: components.transfer, + tree: components.tree, + upload: components.upload, + slider: components.slider, + rate: components.rate, + 'rich-text-editor': components['rich-text-editor'] }, 'group-data': { - tabs: components['tabs'], - table: components['table'], - collapse: components['collapse'], - tooltip: components['tooltip'], - popover: components['popover'], - progress: components['progress'], - card: components['card'], - timeline: components['timeline'], - carousel: components['carousel'] + tabs: components.tabs, + table: components.table, + collapse: components.collapse, + tooltip: components.tooltip, + popover: components.popover, + progress: components.progress, + card: components.card, + timeline: components.timeline, + carousel: components.carousel, + list: components.list, + charts: components.charts }, 'group-tips': { - modal: components['modal'], - notification: components['notification'], - message: components['message'], - alert: components['alert'], - tag: components['tag'], - badge: components['badge'], - loading: components['loading'] + modal: components.modal, + drawer: components.drawer, + notification: components.notification, + message: components.message, + alert: components.alert, + tag: components.tag, + badge: components.badge, + loading: components.loading } } } diff --git a/site/pages/designs/index.js b/site/pages/designs/index.js index 9c3dbe9b8..f284d976a 100644 --- a/site/pages/designs/index.js +++ b/site/pages/designs/index.js @@ -1,31 +1,31 @@ const designs = {} const files = require.context(`../../../docs/zh-CN/designs`, false, /.mdx$/) -files.keys().forEach(key => { - let _key = key.split('/')[1].split('.')[0] +files.keys().forEach((key) => { + const _key = key.split('/')[1].split('.')[0] designs[_key] = files(key).default }) export default { documents: {}, components: { 'about-hiui': { - summarize: designs['summarize'], + summarize: designs.summarize, 'design-values': designs['design-values'], 'design-principles': designs['design-principles'] }, 'design-patterns': { - overview: designs['overview'], - grid: designs['grid'], - layout: designs['layout'], - navigation: designs['navigation'], - copy: designs['copy'] + overview: designs.overview, + grid: designs.grid, + layout: designs.layout, + navigation: designs.navigation, + copy: designs.copy }, 'visual-framework': { - color: designs['color'], + color: designs.color, 'content-layout': designs['content-layout'], // palette: designs['palette'], - font: designs['font'], - icon: designs['icon'], - image: designs['image'] + font: designs.font, + icon: designs.icon, + image: designs.image } } } diff --git a/site/pages/docs/index.js b/site/pages/docs/index.js new file mode 100755 index 000000000..23b989c30 --- /dev/null +++ b/site/pages/docs/index.js @@ -0,0 +1,23 @@ +const docs = {} +const files = require.context(`../../../docs/zh-CN/docs`, false, /.mdx$/) +files.keys().forEach((key) => { + const _key = key.split('/')[1].split('.')[0] + docs[_key] = files(key).default +}) +export default { + components: { + 'community-recommended': { + 'code-editor': docs['code-editor'] + } + }, + documents: { + 'quick-start': docs['quick-start'], + 'upgrade-from-2x': docs['upgrade-from-2x'], + theme: docs.theme, + palette: docs.palette, + i18n: docs.i18n, + changelog: docs.changelog + // 'hi-request': docs['hi-request'], + // 'code-editor': docs['code-editor'] + } +} diff --git a/site/redux/action/global.js b/site/redux/action/global.js index d0d49ac63..6558850d6 100644 --- a/site/redux/action/global.js +++ b/site/redux/action/global.js @@ -1,17 +1,17 @@ import store from '../store' -export const globalSider = sider => { +export const globalSider = (sider) => { const dispatch = store.dispatch dispatch({ type: 'GLOBAL_SIDER', sider }) } -export const setTheme = theme => dispatch => { +export const setTheme = (theme) => (dispatch) => { dispatch({ type: 'SET_THEME', theme }) window.localStorage.setItem('HIUI_THEME', theme) return Promise.resolve() } -export const setLocale = locale => dispatch => { +export const setLocale = (locale) => (dispatch) => { const oldState = store.getState() window.location.hash = window.location.hash.replace(oldState.global.locale, locale) @@ -20,20 +20,24 @@ export const setLocale = locale => dispatch => { return Promise.resolve() } -export const setDesignNavs = designNavs => { +export const setDesignNavs = (designNavs) => { const dispatch = store.dispatch dispatch({ type: 'SET_DESIGNNAVS', designNavs }) } -export const setComponentsNavs = componentsNavs => { +export const setComponentsNavs = (componentsNavs) => { const dispatch = store.dispatch dispatch({ type: 'SET_COMPONENTSNAVS', componentsNavs }) } -export const setComponents = components => { +export const setComponents = (components) => { const dispatch = store.dispatch dispatch({ type: 'SET_COMPONENTS', components }) } -export const setTemplatesNavs = templatesNavs => { +export const setTemplatesNavs = (templatesNavs) => { const dispatch = store.dispatch dispatch({ type: 'SET_TEMPLATESNAVS', templatesNavs }) } +export const setDocsNavs = (docsNavs) => { + const dispatch = store.dispatch + dispatch({ type: 'SET_DOCSNAVS', docsNavs }) +} diff --git a/site/redux/reducer/global.js b/site/redux/reducer/global.js index e54d7b19e..bdc6ebb1c 100644 --- a/site/redux/reducer/global.js +++ b/site/redux/reducer/global.js @@ -7,16 +7,7 @@ const initState = { } export default (state = initState, action = '') => { - const { - type, - sider, - theme, - locale, - designNavs, - componentsNavs, - templatesNavs, - components - } = action + const { type, sider, theme, locale, designNavs, componentsNavs, templatesNavs, docsNavs, components } = action switch (type) { case 'GLOBAL_SIDER': return Object.assign({}, state, { sider }) @@ -30,6 +21,8 @@ export default (state = initState, action = '') => { return Object.assign({}, state, { componentsNavs }) case 'SET_TEMPLATESNAVS': return Object.assign({}, state, { templatesNavs }) + case 'SET_DOCSNAVS': + return Object.assign({}, state, { docsNavs }) case 'SET_COMPONENTS': return Object.assign({}, state, { components }) default: diff --git a/site/static/img/docs/logo-1@2x.png b/site/static/img/docs/logo-1@2x.png new file mode 100644 index 000000000..661901669 Binary files /dev/null and b/site/static/img/docs/logo-1@2x.png differ diff --git a/site/static/img/docs/logo-2@2x.png b/site/static/img/docs/logo-2@2x.png new file mode 100644 index 000000000..f27ee33b7 Binary files /dev/null and b/site/static/img/docs/logo-2@2x.png differ diff --git a/site/static/img/docs/logo-3@2x.png b/site/static/img/docs/logo-3@2x.png new file mode 100644 index 000000000..75b40bc77 Binary files /dev/null and b/site/static/img/docs/logo-3@2x.png differ diff --git a/site/static/img/docs/logo-4@2x.png b/site/static/img/docs/logo-4@2x.png new file mode 100644 index 000000000..22e924e9e Binary files /dev/null and b/site/static/img/docs/logo-4@2x.png differ diff --git a/site/static/img/docs/logo-5@2x.png b/site/static/img/docs/logo-5@2x.png new file mode 100644 index 000000000..ebb0598b0 Binary files /dev/null and b/site/static/img/docs/logo-5@2x.png differ diff --git a/site/static/img/docs/mi-logo@2x.png b/site/static/img/docs/mi-logo@2x.png new file mode 100644 index 000000000..29f577604 Binary files /dev/null and b/site/static/img/docs/mi-logo@2x.png differ diff --git a/site/style/index.scss b/site/style/index.scss index 82cff0196..91f52542a 100644 --- a/site/style/index.scss +++ b/site/style/index.scss @@ -6,6 +6,7 @@ .layout__body { position: relative; z-index: 1; + display: block; } .layout__main--lr { @@ -40,7 +41,7 @@ } & > li:first-child { - margin-top: 24px; + margin-top: 4px; } & > li:last-child { diff --git a/site/style/typo.scss b/site/style/typo.scss index 3dd440433..5739dcf5e 100644 --- a/site/style/typo.scss +++ b/site/style/typo.scss @@ -1,5 +1,16 @@ +@import '../../components/core-css/index.scss'; @import '@hi-ui/core-css/index.scss'; +:root { + @include get-vars(); +} + +@each $color in map-keys($palette-primary) { + .theme__#{$color} { + @include get-vars(get-color($palette-primary, #{$color})); + } +} + .article { @include typoBase; @include typoCode; @@ -7,6 +18,10 @@ @include typoImages; @include typoLists; + & > ul ul { + margin-left: 16px; + } + // 设计语言图片描述 figure { margin: 0; diff --git a/site/view/Component/Dropdown/LocaleDropdown.js b/site/view/Component/Dropdown/LocaleDropdown.js index 9c57adca3..bfdc8de3b 100644 --- a/site/view/Component/Dropdown/LocaleDropdown.js +++ b/site/view/Component/Dropdown/LocaleDropdown.js @@ -8,16 +8,16 @@ const locales = ['zh-CN', 'en-US'] const localesLabel = ['中文', 'English'] class LocaleDropdown extends React.Component { - constructor (props) { + constructor(props) { super(props) this.state = { - list: [{title: '中文'}, {title: 'English'}], + list: [{ title: '中文' }, { title: 'English' }], title: localesLabel[locales.indexOf(this.props.locale || 0)], isShowList: false } } - componentWillMount () { + componentWillMount() { // 直接从路由进来,判断路由的locale是否和localStorage一致 const locale = window.location.hash.split('/') @@ -26,7 +26,7 @@ class LocaleDropdown extends React.Component { } } - changeDropdown (val) { + changeDropdown(val) { this.setState({ title: val, isShowList: false @@ -35,52 +35,45 @@ class LocaleDropdown extends React.Component { // this.props.changeDropdown && this.props.changeDropdown(locales[localesLabel.indexOf(val)]) } - toggleDropdown (isShow) { + toggleDropdown(isShow) { this.setState({ isShowList: isShow }) } - render () { - const { - list, - title, - isShowList - } = this.state + render() { + const { list, title, isShowList } = this.state const _cls = classnames('hi-demo__list', !isShowList && 'hi-demo__list--hide') return (
    - - {title} - + + {title} +
      - { - list.map((item, index) => { - return ( -
    • { - this.changeDropdown(item.title) - }} - > - {item.title} -
    • - ) - }) - } + {list.map((item, index) => { + return ( +
    • { + this.changeDropdown(item.title) + }} + > + {item.title} +
    • + ) + })}
    - ) } } -export default connect(state => ({ +export default connect((state) => ({ locale: state.global.locale }))(LocaleDropdown) diff --git a/site/view/Component/Header/index.js b/site/view/Component/Header/index.js index 44c5dfcc5..7468a4472 100644 --- a/site/view/Component/Header/index.js +++ b/site/view/Component/Header/index.js @@ -5,42 +5,38 @@ import { NavGroup } from '@hi-ui/classic-theme' import locales from '../../../locales' export default class NavHeader extends Component { - render () { + render() { const { locale } = this.props - // const { locale, onLocaleChange } = this.props - const { home, components, template, design } = locales[locale].headers + const { home, components, template, design, docs } = locales[locale].headers return ( - + - /${locale}`} exact activeClassName='header__nav-link--active'> + /${locale}`} exact activeClassName="header__nav-link--active"> {home} - /${locale}/designs/summarize`} - activeClassName='header__nav-link--active' - > + /${locale}/designs/summarize`} activeClassName="header__nav-link--active"> {design} - /${locale}/docs/quick-start`} - activeClassName='header__nav-link--active' - > + /${locale}/docs/quick-start`} activeClassName="header__nav-link--active"> + {docs} + + + + + /${locale}/components/grid`} activeClassName="header__nav-link--active"> {components} - /${locale}/templates/portal`} - activeClassName='header__nav-link--active' - > + /${locale}/templates/portal`} activeClassName="header__nav-link--active"> {template} @@ -50,8 +46,8 @@ export default class NavHeader extends Component { */} - - + + diff --git a/site/view/Component/index.js b/site/view/Component/index.js index bcefd5cab..dfd04c32c 100644 --- a/site/view/Component/index.js +++ b/site/view/Component/index.js @@ -184,6 +184,6 @@ export default connect((state) => ({ locale: state.global.locale, designs: state.global.designNavs, templates: state.global.templatesNavs, - docs: state.global.componentsNavs, + docs: state.global.docsNavs, allComponents: state.global.components }))(Component) diff --git a/site/view/Home/HomeBase.js b/site/view/Home/HomeBase.js index 1aaac6802..e4adf8cd4 100644 --- a/site/view/Home/HomeBase.js +++ b/site/view/Home/HomeBase.js @@ -1,57 +1,54 @@ import React from 'react' import './style/index.scss' -const HomeBase = WrapperComponent => class extends WrapperComponent { - constructor (props) { - super(props) - this.designContent = React.createRef() - this.efficiencyContent = React.createRef() - this.featureContent = React.createRef() - - this.state = { - designContent: false, - efficiencyContent: false, - featureContent: false +const HomeBase = (WrapperComponent) => + class extends WrapperComponent { + constructor(props) { + super(props) + this.designContent = React.createRef() + this.efficiencyContent = React.createRef() + this.featureContent = React.createRef() + + this.state = { + designContent: false, + efficiencyContent: false, + featureContent: false + } + + this.scrollEvent = this.scrollEvent.bind(this) } - this.scrollEvent = this.scrollEvent.bind(this) - } + componentDidMount() { + this.scrollEvent() + window.addEventListener('scroll', this.scrollEvent) + } - componentDidMount () { - this.scrollEvent() - window.addEventListener('scroll', this.scrollEvent) - } + componentWillUnmount() { + window.removeEventListener('scroll', this.scrollEvent) + } - componentWillUnmount () { - window.removeEventListener('scroll', this.scrollEvent) - } + scrollEvent() { + const mapList = ['designContent', 'efficiencyContent', 'featureContent'] - scrollEvent () { - const mapList = [ - 'designContent', - 'efficiencyContent', - 'featureContent' - ] - - mapList.forEach(item => { - if (this.isElementInViewport(this[item].current)) { - this.setState({ - [item]: true - }) - } - }) - } + mapList.forEach((item) => { + if (this.isElementInViewport(this[item].current)) { + this.setState({ + [item]: true + }) + } + }) + } - isElementInViewport (el) { - const box = el.getBoundingClientRect() - const clientHeight = (window.innerHeight || document.documentElement.clientHeight) + isElementInViewport(el) { + const box = el.getBoundingClientRect() + const clientHeight = window.innerHeight || document.documentElement.clientHeight - return box.top < clientHeight - clientHeight / 5 - } + return box.top < clientHeight - clientHeight / 5 + } - render () { - return super.render() + render() { + return super.render() + } } -} export default HomeBase diff --git a/site/view/Home/index.js b/site/view/Home/index.js index ad998acb2..4088514ef 100644 --- a/site/view/Home/index.js +++ b/site/view/Home/index.js @@ -2,161 +2,139 @@ import React from 'react' import HomeBase from './HomeBase' import '@components/ficon/style/index' import Button from '@components/button/Button' -import Badge from '@components/badge/Badge' import { version } from '../../../package.json' class Home extends React.Component { - render () { + render() { const { designContent, efficiencyContent, featureContent } = this.state return ( -
    -
    -
    -
    -

    HIUI,设计原则的布道者

    -
    -

    HIUI 是一套适用于中后台系统的设计规范及前端组件化解决方案。

    +
    +
    +
    +
    +

    HiUI,设计原则的布道者

    +
    +

    HiUI 是一套适用于中后台系统的设计规范及前端组件化解决方案。

    - - - + + GitHub (v{version})
    -
    +
    -
    -
    -
    -

    +
    +
    +
    +

    好用的设计

      -
    • -
      -

      交互一致性

      -

      - 最大限度减少用户对交互的认知成本,提高交互的可预期性 -

      +
    • +
      +

      交互一致性

      +

      最大限度减少用户对交互的认知成本,提高交互的可预期性

    • -
    • -
      -

      视觉统一

      -

      - 制定视觉风格,产出典型场景的视觉设计方案和界面规范 -

      +
    • +
      +

      视觉统一

      +

      制定视觉风格,产出典型场景的视觉设计方案和界面规范

    • -
    • -
      -

      从业务中来

      -

      - 高度提炼企业中台、仓储物流、BI、OA 等系统的设计经验累积 -

      +
    • +
      +

      从业务中来

      +

      高度提炼企业中台、仓储物流、BI、OA 等系统的设计经验累积

    -
    -
    -
    -

    +
    +
    +
    +

    一切优势, 最终都是效率优势

    -
    +

    - 基于组件化开发,无论前端工程师、PHP 工程师还是 JAVA 工程师,都不必为日新月异的前端技术所困扰。统一规范所有 API 接口,方便调用,学习成本低。 + 基于组件化开发,无论前端工程师、PHP 工程师还是 JAVA + 工程师,都不必为日新月异的前端技术所困扰。统一规范所有 API 接口,方便调用,学习成本低。

    -
    -
    -
    -

    +
    +
    +
    +

    优秀到不能被忽视

    -
      -
    • -
      -

      实践出真知

      -
      深入海量业务实践,总结典型应用场景
      +
        +
      • +
        +

        实践出真知

        +
        深入海量业务实践,总结典型应用场景
      • -
      • -
        -

        +
      • +
        +

        多终端支持*

        -
        - 广泛适用于 PC、H5、APP 以及小程序等各个终端(敬请期待) -
        +
        广泛适用于 PC、H5、APP 以及小程序等各个终端(敬请期待)
      • -
      • -
        -

        国际化

        -
        - 充分预留项目多语言需求,无论在 API 接口还是设计要求 -
        +
      • +
        +

        国际化

        +
        充分预留项目多语言需求,无论在 API 接口还是设计要求
      • -
      • -
        -

        极速产出

        -
        产品经理、设计者或工程师,都能快速产出
        +
      • +
        +

        极速产出

        +
        产品经理、设计者或工程师,都能快速产出
    -
    -
    -
    -

    我为人人

    -
      -
    • -
      -

      - HIUI Template* +
      +
      +
      +

      我为人人

      +
        +
      • +
        +

        + HiUI Template*

        -
        - 无需掌握前端框架即可进行单模板开发(敬请期待) -
        +
        无需掌握前端框架即可进行单模板开发(敬请期待)
      • -
      • -
        -

        HIUI Library 20190719

        -
        - 点击下载集成所有 HIUI 组件的 Axure / Sketch 部件库 +
      • +
        +

        + HiUI Library 20200811 +

        +
        + 点击下载集成所有 HIUI 组件的{' '} + + Axure + + /{' '} + + Sketch + {' '} + 部件库
      @@ -164,9 +142,9 @@ class Home extends React.Component {
      -
      -
      -
      +
      +
      +

      小米 · 信息技术部

      diff --git a/site/view/Home/style/index.scss b/site/view/Home/style/index.scss index c5c53c5bf..2585aa91f 100644 --- a/site/view/Home/style/index.scss +++ b/site/view/Home/style/index.scss @@ -200,7 +200,7 @@ $imgurl: '../../../static/img/home/' !default; width: 1176px; &__item { - width: 265px; + width: 365px; height: 310px; padding: 15px 50px; background-color: $white; diff --git a/site/view/index.js b/site/view/index.js index 1d9ffd396..3e27f0be0 100644 --- a/site/view/index.js +++ b/site/view/index.js @@ -6,30 +6,31 @@ import { Classic as Page, Logo, History } from '@hi-ui/classic-theme' import locales from '../locales' import designs from '../pages/designs' import pages from '../pages/components' +import docs from '../pages/docs' import templates from '../pages/templates' import utils from '../utils' import { version } from '../../package.json' -import { - setDesignNavs, - setComponentsNavs, - setComponents, - setTemplatesNavs -} from '../redux/action/global' +import { setDesignNavs, setComponentsNavs, setComponents, setTemplatesNavs, setDocsNavs } from '../redux/action/global' History.createBrowserHistory() const logo = ( HIUI{`v${version}`}} - title='HIUI' - alt='HIUI' + text={ + + HiUI{`v${version}`} + + } + title='HiUI' + alt='HiUI' /> ) class Index extends React.Component { + docsNavs = [] componentNavs = [] designNavs = [] - constructor (props) { + constructor(props) { super(props) const _h = History.getHistory() let locale = props.locale @@ -44,13 +45,21 @@ class Index extends React.Component { const components = Object.assign( { - docs: { + components: { ...Object.values(pages.components).reduce((a, b) => { return Object.assign(a, b) }, {}), ...pages.documents } }, + { + docs: { + ...Object.values(docs.components).reduce((a, b) => { + return Object.assign(a, b) + }, {}), + ...docs.documents + } + }, { designs: { ...Object.values(designs.components).reduce((a, b) => { @@ -70,7 +79,7 @@ class Index extends React.Component { setComponents(components) } - getSiderName (key) { + getSiderName(key) { const map = locales[this.state.locale] || {} return key.split('.').reduce((a, b) => { const parent = map[a] @@ -81,7 +90,14 @@ class Index extends React.Component { return parent }) } - getSiderItems (items) { + + componentDidUpdate() { + setDocsNavs(this.docsNavs) + setComponentsNavs(this.componentNavs) + setDesignNavs(this.designNavs) + setDesignNavs(this.templatesNavs) + } + getSiderItems(items) { const { locale } = this.props let components = [] let navs = {} @@ -90,9 +106,8 @@ class Index extends React.Component { const _title = locales[locale]['components'][title] siderDocuments.push({ title: {_title}, - to: `/${locale}/docs/${title}`, + to: `/${locale}/components/${title}`, name: title - // icon: icons[i] }) navs[title] = _title }) @@ -106,27 +121,17 @@ class Index extends React.Component { navs[page] = _title components.push({ title: {_title}, - to: `/${locale}/docs/${page}`, + to: `/${locale}/components/${page}`, name: title }) }) }) this.componentNavs = navs setComponentsNavs(navs) - return [].concat(siderDocuments, [ - { - title: {locales[locale]['misc']['components']}, - // icon: icons[icons.length - 1], - children: components - } - ]) - } - componentDidUpdate () { - setComponentsNavs(this.componentNavs) - setDesignNavs(this.designNavs) - setDesignNavs(this.templatesNavs) + return [].concat(siderDocuments, components) } - getDesignTemplatesItems (items, path, callback) { + + getDesignTemplatesItems(items, path, callback) { let components = [] let siderDocuments = [] let navs = {} @@ -162,20 +167,21 @@ class Index extends React.Component { } return [].concat(siderDocuments, components) } - render () { + render() { const siders = this.getSiderItems(pages) + const _docs = this.getDesignTemplatesItems(docs, 'docs', setDocsNavs) const _designs = this.getDesignTemplatesItems(designs, 'designs', setDesignNavs) const _templates = this.getDesignTemplatesItems(templates, 'templates', setTemplatesNavs) return ( } logo={logo} - routes={routes(this.props.locale, siders, _designs, _templates)} + routes={routes(this.props.locale, siders, _designs, _templates, _docs)} /> ) } } -export default connect(state => ({ +export default connect((state) => ({ locale: state.global.locale }))(Index) diff --git a/site/view/routes.js b/site/view/routes.js index 14724a49d..af25e97ee 100644 --- a/site/view/routes.js +++ b/site/view/routes.js @@ -6,7 +6,7 @@ import { SiderLayout } from '@hi-ui/classic-theme' import Component from './Component' const loop = (locale, items, targets, component) => { - items.forEach(item => { + items.forEach((item) => { if (item.to) { targets.push({ path: item.to, @@ -19,12 +19,14 @@ const loop = (locale, items, targets, component) => { }) return targets } -function getRoutes (locale, siders, designs, templates) { +function getRoutes(locale, siders, designs, templates, docs) { let sideArr = [] let desArr = [] let templateArr = [] + let docArr = [] sideArr = loop(locale, siders, sideArr, Component) desArr = loop(locale, designs, desArr, Component) + docArr = loop(locale, docs, docArr, Component) templateArr = loop(locale, templates, templateArr, Component) return [ { @@ -39,19 +41,25 @@ function getRoutes (locale, siders, designs, templates) { }, { path: `/${locale}/designs`, - render: props => { + render: (props) => { return } }, { path: `/${locale}/templates`, - render: props => { + render: (props) => { return } }, { path: `/${locale}/docs`, - render: props => { + render: (props) => { + return + } + }, + { + path: `/${locale}/components`, + render: (props) => { return } }