From 3eebc5c270c4517552c2df7202c13b089c9ca080 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B4=96=E5=B4=96=E5=B4=96?= Date: Sat, 18 Apr 2020 15:47:07 +0800 Subject: [PATCH] feat: add graph attributes example --- .../x6-example-features/src/layouts/index.tsx | 7 +- .../src/pages/joint/graph/attribute-card.tsx | 179 +++++++++++++ .../src/pages/joint/graph/background-card.tsx | 232 +++++++++++++++++ .../src/pages/joint/graph/bbox-card.tsx | 43 +++ .../src/pages/joint/graph/effect.ts | 183 +++++++++++++ .../src/pages/joint/graph/fit-card.tsx | 119 +++++++++ .../src/pages/joint/graph/grid-card.tsx | 246 ++++++++++++++++++ .../src/pages/joint/graph/index.less | 119 +++++++++ .../src/pages/joint/graph/index.tsx | 203 +++++++++++++++ .../src/pages/joint/graph/render.ts | 150 +++++++++++ .../src/pages/joint/graph/scale-card.tsx | 137 ++++++++++ .../src/pages/joint/index.less | 1 + yarn.lock | 211 +++++++-------- 13 files changed, 1724 insertions(+), 106 deletions(-) create mode 100644 examples/x6-example-features/src/pages/joint/graph/attribute-card.tsx create mode 100644 examples/x6-example-features/src/pages/joint/graph/background-card.tsx create mode 100644 examples/x6-example-features/src/pages/joint/graph/bbox-card.tsx create mode 100644 examples/x6-example-features/src/pages/joint/graph/effect.ts create mode 100644 examples/x6-example-features/src/pages/joint/graph/fit-card.tsx create mode 100644 examples/x6-example-features/src/pages/joint/graph/grid-card.tsx create mode 100644 examples/x6-example-features/src/pages/joint/graph/index.less create mode 100644 examples/x6-example-features/src/pages/joint/graph/index.tsx create mode 100644 examples/x6-example-features/src/pages/joint/graph/render.ts create mode 100644 examples/x6-example-features/src/pages/joint/graph/scale-card.tsx diff --git a/examples/x6-example-features/src/layouts/index.tsx b/examples/x6-example-features/src/layouts/index.tsx index a50988bf342..1a11c32c14a 100644 --- a/examples/x6-example-features/src/layouts/index.tsx +++ b/examples/x6-example-features/src/layouts/index.tsx @@ -25,8 +25,11 @@ const features = [ const charts = [{ link: '/flowchart', title: 'FlowChart' }] const BasicLayout: React.FC = props => { - const pathname = (props as any).location.pathname - if (charts.some(item => item.link === pathname)) { + const pathname = (props as any).location.pathname as string + if ( + charts.some(item => item.link === pathname) || + pathname.startsWith('/joint') + ) { return props.children as React.ReactElement } diff --git a/examples/x6-example-features/src/pages/joint/graph/attribute-card.tsx b/examples/x6-example-features/src/pages/joint/graph/attribute-card.tsx new file mode 100644 index 00000000000..29dab9eeb98 --- /dev/null +++ b/examples/x6-example-features/src/pages/joint/graph/attribute-card.tsx @@ -0,0 +1,179 @@ +import React from 'react' +import { Slider, Card, Row, Col } from 'antd' + +export class AttributeCard extends React.Component< + AttributeCard.Props, + AttributeCard.State +> { + constructor(props: AttributeCard.Props) { + super(props) + this.state = { ...props.attrs } + } + + static getDerivedStateFromProps(props: AttributeCard.Props) { + return { ...props.attrs } + } + + onWidthChanged = (width: number) => { + this.setState({ width }, () => { + this.props.onSizeChange(this.state.width, this.state.height) + }) + } + + onHeightChanged = (height: number) => { + this.setState({ height }, () => { + this.props.onSizeChange(this.state.width, this.state.height) + }) + } + + onOriginXChanged = (originX: number) => { + this.setState({ originX }, () => { + this.props.onOriginChange(this.state.originX, this.state.originY) + }) + } + + onOriginYChanged = (originY: number) => { + this.setState({ originY }, () => { + this.props.onOriginChange(this.state.originX, this.state.originY) + }) + } + + onScaleXChanged = (scaleX: number) => { + this.setState({ scaleX }, () => { + this.props.onScaleChange(this.state.scaleX, this.state.scaleY) + }) + } + + onScaleYChanged = (scaleY: number) => { + this.setState({ scaleY }, () => { + this.props.onScaleChange(this.state.scaleX, this.state.scaleY) + }) + } + + render() { + return ( + + + Width + + + + +
{this.state.width.toFixed(0)}
+ +
+ + Height + + + + +
{this.state.height.toFixed(0)}
+ +
+ + Origin X + + + + +
{this.state.originX.toFixed(0)}
+ +
+ + Origin Y + + + + +
{this.state.originY.toFixed(0)}
+ +
+ + Scale X + + + + +
{this.state.scaleX.toFixed(2)}
+ +
+ + Scale Y + + + + +
{this.state.scaleY.toFixed(2)}
+ +
+
+ ) + } +} + +export namespace AttributeCard { + export interface Props { + attrs: { + width: number + height: number + originX: number + originY: number + scaleX: number + scaleY: number + } + onSizeChange: (width: number, height: number) => void + onOriginChange: (ox: number, oy: number) => void + onScaleChange: (sx: number, sy: number) => void + } + + export interface State { + width: number + height: number + originX: number + originY: number + scaleX: number + scaleY: number + } +} diff --git a/examples/x6-example-features/src/pages/joint/graph/background-card.tsx b/examples/x6-example-features/src/pages/joint/graph/background-card.tsx new file mode 100644 index 00000000000..9b0b4a1b261 --- /dev/null +++ b/examples/x6-example-features/src/pages/joint/graph/background-card.tsx @@ -0,0 +1,232 @@ +import React from 'react' +import { joint } from '@antv/x6' +import { Input, Checkbox, Select, Slider, Card, Row, Col } from 'antd' + +export class BackgroundCard extends React.Component< + BackgroundCard.Props, + BackgroundCard.State +> { + state = { + color: '#ffffff', + showImage: false, + repeat: 'no-repeat', + position: 'center', + size: 'auto auto', + opacity: 1, + angle: 20, + } + + tryToJSON(val: string) { + try { + return JSON.parse(val) + } catch (error) { + return val + } + } + + notifyChange() { + const { showImage, size, position, ...state } = this.state + this.props.onChange({ + ...state, + image: showImage ? BackgroundCard.bgImageDataURL : undefined, + size: this.tryToJSON(size), + position: this.tryToJSON(position), + }) + } + + onColorChanged = (e: any) => { + this.setState({ color: e.target.value }, () => { + this.notifyChange() + }) + } + + onShowImageChanged = (e: any) => { + this.setState({ showImage: e.target.checked }, () => { + this.notifyChange() + }) + } + + onRepeatChanged = (repeat: string) => { + this.setState({ repeat }, () => { + this.notifyChange() + }) + } + + onPositionChanged = (position: string) => { + this.setState({ position }, () => { + this.notifyChange() + }) + } + + onSizeChanged = (size: string) => { + this.setState({ size }, () => { + this.notifyChange() + }) + } + + onOpacityChanged = (opacity: number) => { + this.setState({ opacity }, () => { + this.notifyChange() + }) + } + + onWaterAngleChanged = (angle: number) => { + this.setState({ angle }, () => { + this.notifyChange() + }) + } + + render() { + return ( + + + Color + + + + + + + + Show Background Image + + + + {this.state.showImage && ( + + + Repeat + + + + + {this.state.repeat === 'watermark' && ( + + + Watermark Angle + + + + + +
{this.state.angle}
+ +
+ )} + + Position + + + + + + Size + + + + + + Opacity + + + + +
+ {this.state.opacity.toFixed(2)} +
+ +
+
+ )} +
+ ) + } +} + +export namespace BackgroundCard { + export interface Props { + onChange: (res: joint.Graph.BackgroundOptions) => void + } + + export interface State { + color: string + showImage: boolean + repeat: string + position: string + size: string + opacity: number + angle?: number + } + + export const bgImageDataURL = + 'data:image/png;base64,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' +} diff --git a/examples/x6-example-features/src/pages/joint/graph/bbox-card.tsx b/examples/x6-example-features/src/pages/joint/graph/bbox-card.tsx new file mode 100644 index 00000000000..3eff2cde30a --- /dev/null +++ b/examples/x6-example-features/src/pages/joint/graph/bbox-card.tsx @@ -0,0 +1,43 @@ +import React from 'react' +import { Card } from 'antd' + +export class BBoxCard extends React.Component { + render() { + return ( + +
+ x +
+ {this.props.x} +
+ y +
+ {this.props.y} +
+ width +
+ {this.props.width} +
+ height +
+ {this.props.height} +
+
+
+ ) + } +} + +export namespace GridCard { + export interface Props { + x: number + y: number + width: number + height: number + } +} diff --git a/examples/x6-example-features/src/pages/joint/graph/effect.ts b/examples/x6-example-features/src/pages/joint/graph/effect.ts new file mode 100644 index 00000000000..750eb70fac6 --- /dev/null +++ b/examples/x6-example-features/src/pages/joint/graph/effect.ts @@ -0,0 +1,183 @@ +import { joint, v, FunctionExt, Vectorizer, Rectangle } from '@antv/x6' +import { FitToContentCard } from './fit-card' +import { ScaleContentToFitCard } from './scale-card' + +export function createEffect(graph: joint.Graph) { + const vSvg = v(graph.svgElem) + const vVertical = v.create('path').attr('d', 'M -10000 -1 L 10000 -1') + const vHorizontal = v.create('path').attr('d', 'M -1 -10000 L -1 10000') + const vRect = v.create('rect') + const vAxisX = vVertical.clone().addClass('axis') + const vAxisY = vHorizontal.clone().addClass('axis') + const vBBox = vRect.clone().addClass('bbox') + const hideBBox = FunctionExt.debounce(() => { + vBBox.removeClass('active') + }, 500) + + const vElements: Vectorizer[] = [] + + vSvg.append([vAxisX, vAxisY, vBBox]) + + return { + showAll() { + vElements.forEach(item => item.addClass('active')) + }, + hideAll() { + vElements.forEach(item => item.removeClass('active')) + }, + removeAll() { + while (vElements.length > 0) { + vElements.pop()!.remove() + } + }, + + updateContentBbox(bbox: Rectangle) { + vBBox.attr(bbox.toJSON()).addClass('active') + hideBBox() + }, + + afterFit(graph: joint.Graph, options: FitToContentCard.State) { + this.removeAll() + + const padding = options.padding + const gridWidth = options.gridWidth + const gridHeight = options.gridHeight + const allowNewOrigin = options.allowNewOrigin + const bbox = graph.getContentBBox() + const origin = graph.options.origin + + const translatedX = + allowNewOrigin === 'any' || + (allowNewOrigin === 'positive' && bbox.x - origin.x >= 0) || + (allowNewOrigin === 'negative' && bbox.x - origin.x < 0) + const translatedY = + allowNewOrigin === 'any' || + (allowNewOrigin === 'positive' && bbox.y - origin.y >= 0) || + (allowNewOrigin === 'negative' && bbox.y - origin.y < 0) + + if (padding) { + const vPaddingRight = vHorizontal + .clone() + .addClass('padding') + .translate(graph.options.width - padding / 2, 0, { absolute: true }) + .attr('stroke-width', padding) + + const vPaddingBottom = vVertical + .clone() + .addClass('padding') + .translate(0, graph.options.height - padding / 2, { + absolute: true, + }) + .attr('stroke-width', padding) + + vSvg.append([vPaddingBottom, vPaddingRight]) + vElements.push(vPaddingBottom, vPaddingRight) + } + + if (padding && (translatedX || translatedY)) { + const paddings = [] + + if (translatedY) { + const vPaddingTop = vVertical + .clone() + .addClass('padding') + .translate(0, padding / 2, { absolute: true }) + .attr('stroke-width', padding) + + paddings.push(vPaddingTop) + } + + if (translatedX) { + const svgPaddingLeft = vHorizontal + .clone() + .addClass('padding') + .translate(padding / 2, 0, { absolute: true }) + .attr('stroke-width', padding) + + paddings.push(svgPaddingLeft) + } + + if (paddings.length) { + vSvg.append(paddings) + vElements.push.apply(vElements, paddings) + } + } + + if (gridWidth > 2) { + let x = gridWidth + + if (translatedX) { + x += padding + } + + do { + const vGridX = vHorizontal + .clone() + .translate(x, 0, { absolute: true }) + .addClass('grid') + vSvg.append(vGridX) + vElements.push(vGridX) + + x += gridWidth + } while (x < graph.options.width - padding) + } + + if (gridHeight > 2) { + let y = gridHeight + + if (translatedY) { + y += padding + } + + do { + const vGridY = vVertical + .clone() + .translate(0, y, { absolute: true }) + .addClass('grid') + vSvg.append(vGridY) + vElements.push(vGridY) + y += gridHeight + } while (y < graph.options.height - padding) + } + this.showAll() + }, + + afterScaleToFit(graph: joint.Graph, options: ScaleContentToFitCard.State) { + this.removeAll() + + const padding = options.padding + if (padding) { + const vPaddingRight = vHorizontal + .clone() + .addClass('padding') + .translate(graph.options.width - padding / 2, 0, { absolute: true }) + .attr('stroke-width', padding) + + const vPaddingBottom = vVertical + .clone() + .addClass('padding') + .translate(0, graph.options.height - padding / 2, { + absolute: true, + }) + .attr('stroke-width', padding) + + const vPaddingLeft = vVertical + .clone() + .addClass('padding') + .translate(0, padding / 2, { absolute: true }) + .attr('stroke-width', padding) + + const vPaddingTop = vHorizontal + .clone() + .addClass('padding') + .translate(padding / 2, 0, { absolute: true }) + .attr('stroke-width', padding) + + vSvg.append([vPaddingBottom, vPaddingRight, vPaddingTop, vPaddingLeft]) + vElements.push(vPaddingBottom, vPaddingRight, vPaddingTop, vPaddingLeft) + } + + this.showAll() + }, + } +} diff --git a/examples/x6-example-features/src/pages/joint/graph/fit-card.tsx b/examples/x6-example-features/src/pages/joint/graph/fit-card.tsx new file mode 100644 index 00000000000..dc0e305f52e --- /dev/null +++ b/examples/x6-example-features/src/pages/joint/graph/fit-card.tsx @@ -0,0 +1,119 @@ +import React from 'react' +import { Slider, Card, Select, Row, Col } from 'antd' + +export class FitToContentCard extends React.Component< + FitToContentCard.Props, + FitToContentCard.State +> { + state: FitToContentCard.State = { + padding: 0, + gridWidth: 1, + gridHeight: 1, + allowNewOrigin: 'any', + } + + notifyChange() { + this.props.onChange({ ...this.state }) + } + + onPaddingChanged = (padding: number) => { + this.setState({ padding }, () => this.notifyChange()) + } + + onGridWidthChanged = (gridWidth: number) => { + this.setState({ gridWidth }, () => this.notifyChange()) + } + + onGridHeightChanged = (gridHeight: number) => { + this.setState({ gridHeight }, () => this.notifyChange()) + } + + onAllowOriginChanged = (allowNewOrigin: any) => { + this.setState({ allowNewOrigin }, () => this.notifyChange()) + } + + render() { + return ( + + + Padding + + + + +
{this.state.padding}
+ +
+ + Grid Width + + + + +
{this.state.gridWidth}
+ +
+ + Grid Height + + + + +
{this.state.gridHeight}
+ +
+ + Allow New Origin + + + + +
+ ) + } +} + +export namespace FitToContentCard { + export interface Props { + onChange: (options: State) => void + } + + export interface State { + padding: number + gridWidth: number + gridHeight: number + allowNewOrigin?: 'negative' | 'positive' | 'any' + } +} diff --git a/examples/x6-example-features/src/pages/joint/graph/grid-card.tsx b/examples/x6-example-features/src/pages/joint/graph/grid-card.tsx new file mode 100644 index 00000000000..b612d4ca510 --- /dev/null +++ b/examples/x6-example-features/src/pages/joint/graph/grid-card.tsx @@ -0,0 +1,246 @@ +import React from 'react' +import { Grid } from '@antv/x6/es/research/grid' +import { Input, Select, Slider, Card, Row, Col } from 'antd' + +export class GridCard extends React.Component { + state: GridCard.State = { + type: 'dot', + size: 10, + color: '#aaaaaa', + thickness: 1, + colorSecond: '#888888', + thicknessSecond: 3, + factor: 4, + } + + notifyChange() { + if (this.state.type === 'doubleMesh') { + this.props.onChange({ + name: this.state.type, + args: [ + { + color: this.state.color, + thickness: this.state.thickness, + }, + { + color: this.state.colorSecond, + thickness: this.state.thicknessSecond, + factor: this.state.factor, + }, + ], + }) + } else { + this.props.onChange({ + name: this.state.type, + args: [ + { + color: this.state.color, + thickness: this.state.thickness, + }, + ], + }) + } + } + + onTypeChanged = (type: Grid.NativeNames) => { + this.setState({ type }, () => { + this.notifyChange() + }) + } + + onSizeChanged = (size: number) => { + this.setState({ size }, () => { + this.props.onGridSizeChange(this.state.size) + }) + } + + onColorChanged = (e: any) => { + this.setState({ color: e.target.value }, () => { + this.notifyChange() + }) + } + + onSecondaryColorChanged = (e: any) => { + this.setState({ colorSecond: e.target.value }, () => { + this.notifyChange() + }) + } + + onThicknessChanged = (thickness: number) => { + this.setState({ thickness }, () => { + this.notifyChange() + }) + } + + onSecondaryThicknessChanged = (thicknessSecond: number) => { + this.setState({ thicknessSecond }, () => { + this.notifyChange() + }) + } + + onFactorChanged = (factor: number) => { + this.setState({ factor }, () => { + this.notifyChange() + }) + } + + render() { + return ( + + + Grid Type + + + + + + Grid Size + + + + +
{this.state.size}
+ +
+ {this.state.type === 'doubleMesh' ? ( + + + Primary Color + + + + + + Primary Thickness + + + + +
+ {this.state.thickness.toFixed(1)} +
+ +
+ + Secondary Color + + + + + + Secondary Thickness + + + + +
+ {this.state.thicknessSecond.toFixed(1)} +
+ +
+ + Scale Factor + + + + +
{this.state.factor}
+ +
+
+ ) : ( + + + Grid Color + + + + + + Thickness + + + + +
+ {this.state.thickness.toFixed(1)} +
+ +
+
+ )} +
+ ) + } +} + +export namespace GridCard { + export interface Props { + onGridSizeChange: (size: number) => void + onChange: (res: Grid.NativeItem) => void + } + + export interface State { + type: Grid.NativeNames + size: number + color: string + thickness: number + colorSecond: string + thicknessSecond: number + factor: number + } +} diff --git a/examples/x6-example-features/src/pages/joint/graph/index.less b/examples/x6-example-features/src/pages/joint/graph/index.less new file mode 100644 index 00000000000..d08f7098d25 --- /dev/null +++ b/examples/x6-example-features/src/pages/joint/graph/index.less @@ -0,0 +1,119 @@ +:global { + .left-side { + position: fixed; + width: 336px; + left: 24px; + top: 0px; + bottom: 0; + padding: 0 8px; + overflow-x: visible; + overflow-y: auto; + } + + .right-side { + position: fixed; + right: 24px; + width: 336px; + padding: 0 8px; + top: 0px; + bottom: 0; + overflow-x: visible; + overflow-y: auto; + } + + .ant-card { + box-shadow: 0 0 10px 1px #e9e9e9; + margin-top: 24px; + } + + .ant-row-flex { + margin: 8px 0; + } + + .slider-value { + background: #eee; + color: #333333; + padding: 3px 7px; + border-radius: 10px; + display: inline-block; + font-size: 12px; + margin-left: 8px; + line-height: 1.25; + } + + .x6-graph { + margin-top: 24px; + } + + .x6-node { + path { + fill: #6a6c8a; + stroke-width: 0px; + transition: fill 0.1s; + } + + text { + fill: #fff; + font-size: 12px; + font-weight: lighter; + } + + &:hover path { + fill: #fec582; + } + } + + .x6-edge { + * { + pointer-events: none; + } + + path.line { + stroke: #6a6c8a; + stroke-width: 2px; + } + } + + .bbox { + stroke: #16a085; + stroke-width: 2; + stroke-opacity: 0; + fill: none; + transition-property: stroke-opacity; + transition-duration: 0.5s; + pointer-events: none; + } + + .axis { + stroke: #95a5a6; + stroke-dasharray: 2, 4; + stroke-width: 1; + pointer-events: none; + } + + .padding { + stroke: #1abc9c; + stroke-opacity: 0; + transition-property: stroke-opacity; + transition-duration: 1s; + pointer-events: none; + } + + .grid { + stroke: #16a085; + stroke-width: 0.5; + stroke-opacity: 0; + transition-property: stroke-opacity; + transition-duration: 1s; + pointer-events: none; + } + + .active { + stroke-opacity: 0.5; + } + + .padding.active, + .bbox.active { + stroke-opacity: 0.2; + } +} diff --git a/examples/x6-example-features/src/pages/joint/graph/index.tsx b/examples/x6-example-features/src/pages/joint/graph/index.tsx new file mode 100644 index 00000000000..d6db6804a56 --- /dev/null +++ b/examples/x6-example-features/src/pages/joint/graph/index.tsx @@ -0,0 +1,203 @@ +import React from 'react' +import { joint, Rectangle } from '@antv/x6' +import { Grid } from '@antv/x6/es/research/grid' +import '../../index.less' +import '../index.less' +import './index.less' +import { render } from './render' +import { createEffect } from './effect' +import { GridCard } from './grid-card' +import { BBoxCard } from './bbox-card' +import { AttributeCard } from './attribute-card' +import { BackgroundCard } from './background-card' +import { FitToContentCard } from './fit-card' +import { ScaleContentToFitCard } from './scale-card' + +export default class Example extends React.Component< + Example.Props, + Example.State +> { + private container: HTMLDivElement + private graph: joint.Graph + private effect: ReturnType + + state = { + contentBBox: new Rectangle(), + attrs: { + width: 0, + height: 0, + originX: 0, + originY: 0, + scaleX: 1, + scaleY: 1, + }, + } + + componentDidMount() { + this.graph = new joint.Graph({ + container: this.container, + width: 600, + height: 400, + gridSize: 10, + defaultConnectionPoint: { name: 'anchor' }, + }) + + render(this.graph) + this.effect = createEffect(this.graph) + this.updateContentBBox() + + const options = this.graph.options + this.setState({ + attrs: { + ...this.state.attrs, + width: options.width, + height: options.height, + originX: options.origin.x, + originY: options.origin.y, + }, + }) + + let attrs = {} + const getAttrs = (partial: Partial) => { + attrs = { + ...this.state.attrs, + ...attrs, + ...partial, + } + return attrs as Example.State['attrs'] + } + + this.graph + .on('scale', ({ sx, sy }) => { + this.effect.hideAll() + this.setState({ + attrs: getAttrs({ + scaleX: sx, + scaleY: sy, + }), + }) + }) + .on('translate', ({ origin }) => { + this.effect.hideAll() + this.setState({ + attrs: getAttrs({ + originX: origin.x, + originY: origin.y, + }), + }) + }) + .on('resize', ({ width, height }) => { + this.effect.hideAll() + this.setState({ + attrs: getAttrs({ width, height }), + }) + }) + .on('cell:change:*', () => { + this.updateContentBBox() + }) + } + + updateContentBBox() { + const contentBBox = this.graph.getContentBBox() + this.setState({ contentBBox }) + this.effect.updateContentBbox(contentBBox) + } + + refContainer = (container: HTMLDivElement) => { + this.container = container + } + + onBackgroundChanged = (res: joint.Graph.BackgroundOptions) => { + this.graph.drawBackground(res) + } + + onGridChanged = (options: Grid.NativeItem) => { + console.log(options) + this.graph.setGrid(options) + this.graph.drawGrid() + } + + onGridSizeChanged = (size: number) => { + this.graph.setGridSize(size) + } + + onGraphSizeChanged = (width: number, height: number) => { + this.graph.resize(width, height) + } + + onGraphOriginChanged = (ox: number, oy: number) => { + this.graph.setOrigin(ox, oy) + } + + onGraphScaleChanged = (sx: number, sy: number) => { + this.graph.scale(sx, sy) + } + + onFitOptionsChanged = (options: FitToContentCard.State) => { + if (!options.allowNewOrigin) { + delete options.allowNewOrigin + } + + this.effect.removeAll() + this.graph.fitToContent(options) + this.effect.afterFit(this.graph, options) + } + + onScaleContentChanged = (options: ScaleContentToFitCard.State) => { + this.effect.removeAll() + this.graph.scaleContentToFit(options) + this.effect.afterScaleToFit(this.graph, options) + } + + render() { + return ( +
+
+ + + +
+
+ + + +
+
+
+ ) + } +} + +namespace Example { + export interface Props {} + export interface State { + attrs: { + width: number + height: number + originX: number + originY: number + scaleX: number + scaleY: number + } + contentBBox: Rectangle + } +} diff --git a/examples/x6-example-features/src/pages/joint/graph/render.ts b/examples/x6-example-features/src/pages/joint/graph/render.ts new file mode 100644 index 00000000000..7919a8bfced --- /dev/null +++ b/examples/x6-example-features/src/pages/joint/graph/render.ts @@ -0,0 +1,150 @@ +import { joint } from '@antv/x6' + +const path1 = 'M 20 0 L 100 0 100 40 20 40 0 20 Z' +const path2 = 'M 20 0 L 100 0 80 20 100 40 20 40 0 20 Z' + +export function render(graph: joint.Graph) { + const nodes = createNodes(graph) + graph.model.resetCells(nodes) + + const terminals = [ + { source: 0, target: 1 }, + { source: 0, target: 2 }, + { source: 0, target: 3 }, + { source: 1, target: 7 }, + { source: 1, target: 8 }, + { source: 2, target: 9 }, + { source: 2, target: 10 }, + { source: 3, target: 4 }, + { source: 4, target: 5 }, + { source: 4, target: 6 }, + ] + + terminals.forEach(item => { + graph.addEdge({ + type: 'edge', + zIndex: -1, + source: nodes[item.source], + target: nodes[item.target], + attrs: { + line: { + class: 'line', + }, + }, + }) + }) +} + +function createNodes(graph: joint.Graph) { + return [ + graph.createNode({ + type: 'path', + x: 75, + y: 175, + width: 100, + height: 40, + attrs: { + label: { text: 'x6' }, + body: { refD: 'M 0 0 L 100 0 80 20 100 40 0 40 Z' }, + }, + }), + graph.createNode({ + type: 'path', + x: 200, + y: 275, + width: 100, + height: 40, + attrs: { + label: { text: 'core' }, + body: { refD: path2 }, + }, + }), + graph.createNode({ + type: 'path', + x: 200, + y: 75, + width: 100, + height: 40, + attrs: { + label: { text: 'geometry' }, + body: { refD: path2 }, + }, + }), + graph.createNode({ + type: 'path', + x: 200, + y: 175, + width: 100, + height: 40, + attrs: { + label: { text: 'util' }, + body: { refD: path2 }, + }, + }), + graph.createNode({ + type: 'path', + x: 325, + y: 175, + width: 100, + height: 40, + attrs: { + label: { text: 'array' }, + body: { refD: path2 }, + }, + }), + graph.createNode({ + type: 'path', + position: { x: 450, y: 150 }, + size: { width: 100, height: 40 }, + attrs: { + label: { text: 'sortBy' }, + body: { refD: path1 }, + }, + }), + graph.createNode({ + type: 'path', + position: { x: 450, y: 200 }, + size: { width: 100, height: 40 }, + attrs: { + label: { text: 'groupBy' }, + body: { refD: path1 }, + }, + }), + graph.createNode({ + type: 'path', + position: { x: 325, y: 250 }, + size: { width: 100, height: 40 }, + attrs: { + label: { text: 'Cell' }, + body: { refD: path1 }, + }, + }), + graph.createNode({ + type: 'path', + position: { x: 325, y: 300 }, + size: { width: 100, height: 40 }, + attrs: { + label: { text: 'View' }, + body: { refD: path1 }, + }, + }), + graph.createNode({ + type: 'path', + position: { x: 325, y: 100 }, + size: { width: 100, height: 40 }, + attrs: { + label: { text: 'Rectangle' }, + body: { refD: path1 }, + }, + }), + graph.createNode({ + type: 'path', + position: { x: 325, y: 50 }, + size: { width: 100, height: 40 }, + attrs: { + label: { text: 'Line' }, + body: { refD: path1 }, + }, + }), + ] +} diff --git a/examples/x6-example-features/src/pages/joint/graph/scale-card.tsx b/examples/x6-example-features/src/pages/joint/graph/scale-card.tsx new file mode 100644 index 00000000000..f523b324ef4 --- /dev/null +++ b/examples/x6-example-features/src/pages/joint/graph/scale-card.tsx @@ -0,0 +1,137 @@ +import React from 'react' +import { Slider, Card, Checkbox, Row, Col } from 'antd' + +export class ScaleContentToFitCard extends React.Component< + ScaleContentToFitCard.Props, + ScaleContentToFitCard.State +> { + state: ScaleContentToFitCard.State = { + padding: 0, + minScale: 0.1, + maxScale: 3, + gridSize: 0, + preserveAspectRatio: true, + } + + notifyChange() { + this.props.onChange({ ...this.state }) + } + + onPaddingChanged = (padding: number) => { + this.setState({ padding }, () => this.notifyChange()) + } + + onMinScaleChanged = (minScale: number) => { + this.setState({ minScale }, () => this.notifyChange()) + } + + onMaxScaleChanged = (maxScale: number) => { + this.setState({ maxScale }, () => this.notifyChange()) + } + + onGridSizeChanged = (gridSize: number) => { + this.setState({ gridSize }, () => this.notifyChange()) + } + + onPreserveAspectRatioChanged = (e: any) => { + this.setState({ preserveAspectRatio: e.target.checked }, () => { + this.notifyChange() + }) + } + + render() { + return ( + + + Padding + + + + +
{this.state.padding}
+ +
+ + Min Scale + + + + +
{this.state.minScale}
+ +
+ + Max Scale + + + + +
{this.state.maxScale}
+ +
+ + Scale Grid + + + + +
{this.state.gridSize}
+ +
+ + + + Preserve Aspect Ratio + + + +
+ ) + } +} + +export namespace ScaleContentToFitCard { + export interface Props { + onChange: (options: State) => void + } + + export interface State { + padding: number + minScale: number + maxScale: number + gridSize: number + preserveAspectRatio: boolean + } +} diff --git a/examples/x6-example-features/src/pages/joint/index.less b/examples/x6-example-features/src/pages/joint/index.less index d40f90a3129..d391366d43a 100644 --- a/examples/x6-example-features/src/pages/joint/index.less +++ b/examples/x6-example-features/src/pages/joint/index.less @@ -10,6 +10,7 @@ height: 100%; position: relative; box-shadow: 0 0 10px 1px #e9e9e9; + margin: 0 auto; } .@{prefix}-graph-background, diff --git a/yarn.lock b/yarn.lock index 2e6a87f18bc..69f28dbd258 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2492,9 +2492,9 @@ universal-user-agent "^4.0.0" "@octokit/types@^2.0.0", "@octokit/types@^2.0.1", "@octokit/types@^2.8.2": - version "2.9.0" - resolved "https://registry.npm.taobao.org/@octokit/types/download/@octokit/types-2.9.0.tgz#b3b69cddab629dd31a559ffb25c9f471301d7538" - integrity sha1-s7ac3atindMaVZ/7Jcn0cTAddTg= + version "2.10.0" + resolved "https://registry.npm.taobao.org/@octokit/types/download/@octokit/types-2.10.0.tgz#65ace1b0eb5bcbc80a287bb3ae50ee6e3d58448b" + integrity sha1-ZazhsOtby8gKKHuzrlDubj1YRIs= dependencies: "@types/node" ">= 8" @@ -2691,9 +2691,9 @@ jest-diff "^24.3.0" "@types/jquery@^3.3.31": - version "3.3.34" - resolved "https://registry.npm.taobao.org/@types/jquery/download/@types/jquery-3.3.34.tgz#0d3b94057063d3854adaeb579652048fec07ba6c" - integrity sha1-DTuUBXBj04VK2utXllIEj+wHumw= + version "3.3.35" + resolved "https://registry.npm.taobao.org/@types/jquery/download/@types/jquery-3.3.35.tgz?cache=0&sync_timestamp=1586994102641&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fjquery%2Fdownload%2F%40types%2Fjquery-3.3.35.tgz#ab2cbf97e7a04b4dc0faee22b93c633fa540891c" + integrity sha1-qyy/l+egS03A+u4iuTxjP6VAiRw= dependencies: "@types/sizzle" "*" @@ -5015,14 +5015,14 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-db@^1.0.30001017: - version "1.0.30001041" - resolved "https://registry.npm.taobao.org/caniuse-db/download/caniuse-db-1.0.30001041.tgz?cache=0&sync_timestamp=1586747409956&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcaniuse-db%2Fdownload%2Fcaniuse-db-1.0.30001041.tgz#e45dd76ee020b43491683a629a0eca2f5910a318" - integrity sha1-5F3XbuAgtDSRaDpimg7KL1kQoxg= + version "1.0.30001042" + resolved "https://registry.npm.taobao.org/caniuse-db/download/caniuse-db-1.0.30001042.tgz?cache=0&sync_timestamp=1586922095103&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcaniuse-db%2Fdownload%2Fcaniuse-db-1.0.30001042.tgz#ac3e6065c7c46fc0bdb0fb1a13d861af8399c3a4" + integrity sha1-rD5gZcfEb8C9sPsaE9hhr4OZw6Q= caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000955, caniuse-lite@^1.0.30000971, caniuse-lite@^1.0.30001038, caniuse-lite@^1.0.30001039: - version "1.0.30001041" - resolved "https://registry.npm.taobao.org/caniuse-lite/download/caniuse-lite-1.0.30001041.tgz#c2ea138dafc6fe03877921ddcddd4a02a14daf76" - integrity sha1-wuoTja/G/gOHeSHdzd1KAqFNr3Y= + version "1.0.30001042" + resolved "https://registry.npm.taobao.org/caniuse-lite/download/caniuse-lite-1.0.30001042.tgz?cache=0&sync_timestamp=1586925308169&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcaniuse-lite%2Fdownload%2Fcaniuse-lite-1.0.30001042.tgz#c91ec21ec2d270bd76dbc2ce261260c292b8c93c" + integrity sha1-yR7CHsLScL1228LOJhJgwpK4yTw= capture-exit@^2.0.0: version "2.0.0" @@ -5301,9 +5301,9 @@ cli-truncate@^0.2.1: string-width "^1.0.1" cli-width@^2.0.0: - version "2.2.0" - resolved "https://registry.npm.taobao.org/cli-width/download/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" - integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= + version "2.2.1" + resolved "https://registry.npm.taobao.org/cli-width/download/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" + integrity sha1-sEM9C06chH7xiGik7xb9X8gnHEg= clipboardy@2.1.0: version "2.1.0" @@ -6293,7 +6293,7 @@ cssstyle@^2.2.0: csstype@^2.2.0, csstype@^2.6.9: version "2.6.10" - resolved "https://registry.npm.taobao.org/csstype/download/csstype-2.6.10.tgz?cache=0&sync_timestamp=1585556974236&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcsstype%2Fdownload%2Fcsstype-2.6.10.tgz#e63af50e66d7c266edb6b32909cfd0aabe03928b" + resolved "https://registry.npm.taobao.org/csstype/download/csstype-2.6.10.tgz?cache=0&sync_timestamp=1586935655811&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcsstype%2Fdownload%2Fcsstype-2.6.10.tgz#e63af50e66d7c266edb6b32909cfd0aabe03928b" integrity sha1-5jr1DmbXwmbttrMpCc/Qqr4Dkos= currently-unhandled@^0.4.1: @@ -7014,14 +7014,14 @@ electron-download@^4.1.0: sumchecker "^2.0.2" electron-to-chromium@^1.3.122, electron-to-chromium@^1.3.390: - version "1.3.403" - resolved "https://registry.npm.taobao.org/electron-to-chromium/download/electron-to-chromium-1.3.403.tgz#c8bab4e2e72bf78bc28bad1cc355c061f9cc1918" - integrity sha1-yLq04ucr94vCi60cw1XAYfnMGRg= + version "1.3.411" + resolved "https://registry.npm.taobao.org/electron-to-chromium/download/electron-to-chromium-1.3.411.tgz#203a24482ac39b039cca0090f9ec05d79074f76d" + integrity sha1-IDokSCrDmwOcygCQ+ewF15B0920= electron@^6.0.7: - version "6.1.9" - resolved "https://registry.npm.taobao.org/electron/download/electron-6.1.9.tgz#4f28c4bdd0cdfd427ea98ce6ad02f303638f7b1f" - integrity sha1-TyjEvdDN/UJ+qYzmrQLzA2OPex8= + version "6.1.10" + resolved "https://registry.npm.taobao.org/electron/download/electron-6.1.10.tgz#b2a875f5c8f3c3e7954dfa11c05083e49d2fb8c2" + integrity sha1-sqh19cjzw+eVTfoRwFCD5J0vuMI= dependencies: "@types/node" "^10.12.18" electron-download "^4.1.0" @@ -7780,11 +7780,11 @@ esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: integrity sha1-E7BM2z5sXRnfkatph6hpVhmwqnE= esquery@^1.0.1: - version "1.2.1" - resolved "https://registry.npm.taobao.org/esquery/download/esquery-1.2.1.tgz#105239e215c5aa480369c7794d74b8b5914c19d4" - integrity sha1-EFI54hXFqkgDacd5TXS4tZFMGdQ= + version "1.3.1" + resolved "https://registry.npm.taobao.org/esquery/download/esquery-1.3.1.tgz?cache=0&sync_timestamp=1587061209806&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fesquery%2Fdownload%2Fesquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" + integrity sha1-t4tYKKqOIU4p+3TE1bdS4cAz2lc= dependencies: - estraverse "^5.0.0" + estraverse "^5.1.0" esrecurse@^4.1.0: version "4.2.1" @@ -7795,13 +7795,13 @@ esrecurse@^4.1.0: estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: version "4.3.0" - resolved "https://registry.npm.taobao.org/estraverse/download/estraverse-4.3.0.tgz?cache=0&sync_timestamp=1584934808187&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + resolved "https://registry.npm.taobao.org/estraverse/download/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0= -estraverse@^5.0.0: - version "5.0.0" - resolved "https://registry.npm.taobao.org/estraverse/download/estraverse-5.0.0.tgz?cache=0&sync_timestamp=1584934808187&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-5.0.0.tgz#ac81750b482c11cca26e4b07e83ed8f75fbcdc22" - integrity sha1-rIF1C0gsEcyibksH6D7Y91+83CI= +estraverse@^5.1.0: + version "5.1.0" + resolved "https://registry.npm.taobao.org/estraverse/download/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642" + integrity sha1-N0MJ05/ZNa5QDnuS6Ka0xyDllkI= esutils@^1.1.6: version "1.1.6" @@ -9068,9 +9068,9 @@ graphql@14.3.1: iterall "^1.2.2" grouped-queue@^1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/grouped-queue/download/grouped-queue-1.0.0.tgz#5bdb97934a9a17b19626ff3cc23c103f2622ef49" - integrity sha1-W9uXk0qaF7GWJv88wjwQPyYi70k= + version "1.1.0" + resolved "https://registry.npm.taobao.org/grouped-queue/download/grouped-queue-1.1.0.tgz?cache=0&sync_timestamp=1587024455678&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fgrouped-queue%2Fdownload%2Fgrouped-queue-1.1.0.tgz#63e3f9ca90af952269d1d40879e41221eacc74cb" + integrity sha1-Y+P5ypCvlSJp0dQIeeQSIerMdMs= dependencies: lodash "^4.17.15" @@ -9296,7 +9296,7 @@ highlight.js@^9.6.0: history@^4.7.2, history@^4.9.0: version "4.10.1" - resolved "https://registry.npm.taobao.org/history/download/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" + resolved "https://registry.npm.taobao.org/history/download/history-4.10.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhistory%2Fdownload%2Fhistory-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" integrity sha1-MzcaZeOoOyZ0NOKz87G0xYqtTPM= dependencies: "@babel/runtime" "^7.1.2" @@ -9914,17 +9914,17 @@ interpret@1.2.0, interpret@^1.0.0: intl-format-cache@^2.0.5: version "2.2.9" - resolved "https://registry.npm.taobao.org/intl-format-cache/download/intl-format-cache-2.2.9.tgz#fb560de20c549cda20b569cf1ffb6dc62b5b93b4" + resolved "https://registry.npm.taobao.org/intl-format-cache/download/intl-format-cache-2.2.9.tgz?cache=0&sync_timestamp=1586836021507&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fintl-format-cache%2Fdownload%2Fintl-format-cache-2.2.9.tgz#fb560de20c549cda20b569cf1ffb6dc62b5b93b4" integrity sha1-+1YN4gxUnNogtWnPH/ttxitbk7Q= intl-messageformat-parser@1.4.0: version "1.4.0" - resolved "https://registry.npm.taobao.org/intl-messageformat-parser/download/intl-messageformat-parser-1.4.0.tgz?cache=0&sync_timestamp=1586675558883&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fintl-messageformat-parser%2Fdownload%2Fintl-messageformat-parser-1.4.0.tgz#b43d45a97468cadbe44331d74bb1e8dea44fc075" + resolved "https://registry.npm.taobao.org/intl-messageformat-parser/download/intl-messageformat-parser-1.4.0.tgz#b43d45a97468cadbe44331d74bb1e8dea44fc075" integrity sha1-tD1FqXRoytvkQzHXS7Ho3qRPwHU= intl-messageformat@^2.0.0, intl-messageformat@^2.1.0: version "2.2.0" - resolved "https://registry.npm.taobao.org/intl-messageformat/download/intl-messageformat-2.2.0.tgz?cache=0&sync_timestamp=1586675559737&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fintl-messageformat%2Fdownload%2Fintl-messageformat-2.2.0.tgz#345bcd46de630b7683330c2e52177ff5eab484fc" + resolved "https://registry.npm.taobao.org/intl-messageformat/download/intl-messageformat-2.2.0.tgz#345bcd46de630b7683330c2e52177ff5eab484fc" integrity sha1-NFvNRt5jC3aDMwwuUhd/9eq0hPw= dependencies: intl-messageformat-parser "1.4.0" @@ -11835,9 +11835,9 @@ log-update@^2.3.0: wrap-ansi "^3.0.1" loglevel@^1.4.1: - version "1.6.7" - resolved "https://registry.npm.taobao.org/loglevel/download/loglevel-1.6.7.tgz#b3e034233188c68b889f5b862415306f565e2c56" - integrity sha1-s+A0IzGIxouIn1uGJBUwb1ZeLFY= + version "1.6.8" + resolved "https://registry.npm.taobao.org/loglevel/download/loglevel-1.6.8.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floglevel%2Fdownload%2Floglevel-1.6.8.tgz#8a25fb75d092230ecd4457270d80b54e28011171" + integrity sha1-iiX7ddCSIw7NRFcnDYC1TigBEXE= lolex@^4.2.0: version "4.2.0" @@ -12844,9 +12844,9 @@ node-pre-gyp@*: tar "^4.4.2" node-pty@^0.10.0-beta3: - version "0.10.0-beta7" - resolved "https://registry.npm.taobao.org/node-pty/download/node-pty-0.10.0-beta7.tgz#7e383b2d1fe2f34509b57187f5a9a6ff90c46111" - integrity sha1-fjg7LR/i80UJtXGH9amm/5DEYRE= + version "0.10.0-beta8" + resolved "https://registry.npm.taobao.org/node-pty/download/node-pty-0.10.0-beta8.tgz?cache=0&sync_timestamp=1586961901753&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-pty%2Fdownload%2Fnode-pty-0.10.0-beta8.tgz#f4aa56c71a794f4580373a3030dfebd25240c6db" + integrity sha1-9KpWxxp5T0WANzowMN/r0lJAxts= dependencies: nan "^2.14.0" @@ -13106,9 +13106,12 @@ object-inspect@^1.7.0: integrity sha1-9Pa9GBrXfwBrXs5gvQtvOY/3Smc= object-is@^1.0.1, object-is@^1.0.2: - version "1.0.2" - resolved "https://registry.npm.taobao.org/object-is/download/object-is-1.0.2.tgz#6b80eb84fe451498f65007982f035a5b445edec4" - integrity sha1-a4DrhP5FFJj2UAeYLwNaW0Re3sQ= + version "1.1.2" + resolved "https://registry.npm.taobao.org/object-is/download/object-is-1.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-is%2Fdownload%2Fobject-is-1.1.2.tgz#c5d2e87ff9e119f78b7a088441519e2eec1573b6" + integrity sha1-xdLof/nhGfeLegiEQVGeLuwVc7Y= + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" @@ -13594,17 +13597,17 @@ parse-url@^5.0.0: parse5@4.0.0: version "4.0.0" - resolved "https://registry.npm.taobao.org/parse5/download/parse5-4.0.0.tgz?cache=0&sync_timestamp=1573036762880&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse5%2Fdownload%2Fparse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" + resolved "https://registry.npm.taobao.org/parse5/download/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" integrity sha1-bXhlbj2o14tOwLkG98CO8d/j9gg= parse5@5.1.1: version "5.1.1" - resolved "https://registry.npm.taobao.org/parse5/download/parse5-5.1.1.tgz?cache=0&sync_timestamp=1573036762880&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse5%2Fdownload%2Fparse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + resolved "https://registry.npm.taobao.org/parse5/download/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" integrity sha1-9o5OW6GFKsLK3AD0VV//bCq7YXg= parse5@^3.0.1, parse5@^3.0.3: version "3.0.3" - resolved "https://registry.npm.taobao.org/parse5/download/parse5-3.0.3.tgz?cache=0&sync_timestamp=1573036762880&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse5%2Fdownload%2Fparse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c" + resolved "https://registry.npm.taobao.org/parse5/download/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c" integrity sha1-BC95L/3TaFFVHPTp4Gazh0q0W1w= dependencies: "@types/node" "*" @@ -15182,7 +15185,7 @@ rc-progress@~2.5.0: rc-rate@~2.5.0, rc-rate@~2.5.1: version "2.5.1" - resolved "https://registry.npm.taobao.org/rc-rate/download/rc-rate-2.5.1.tgz#55fc5fd23ea9dcc72250b9a889803479f4842961" + resolved "https://registry.npm.taobao.org/rc-rate/download/rc-rate-2.5.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frc-rate%2Fdownload%2Frc-rate-2.5.1.tgz#55fc5fd23ea9dcc72250b9a889803479f4842961" integrity sha1-Vfxf0j6p3MciULmoiYA0efSEKWE= dependencies: classnames "^2.2.5" @@ -15209,9 +15212,9 @@ rc-resize-observer@^0.2.0: resize-observer-polyfill "^1.5.1" rc-select@^10.1.0, rc-select@~10.2.0: - version "10.2.0" - resolved "https://registry.npm.taobao.org/rc-select/download/rc-select-10.2.0.tgz#27bb1708670f6e71153be9a03ddcfdc7dc1a13cb" - integrity sha1-J7sXCGcPbnEVO+mgPdz9x9waE8s= + version "10.2.2" + resolved "https://registry.npm.taobao.org/rc-select/download/rc-select-10.2.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frc-select%2Fdownload%2Frc-select-10.2.2.tgz#3b882031825e68f728a16f0f593ce1e64eada263" + integrity sha1-O4ggMYJeaPcooW8PWTzh5k6tomM= dependencies: classnames "2.x" rc-animate "^2.10.0" @@ -15222,7 +15225,7 @@ rc-select@^10.1.0, rc-select@~10.2.0: rc-select@~9.2.0: version "9.2.3" - resolved "https://registry.npm.taobao.org/rc-select/download/rc-select-9.2.3.tgz#64340e2d6ef64e8bc3cfc6f468ffd28625589ac2" + resolved "https://registry.npm.taobao.org/rc-select/download/rc-select-9.2.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frc-select%2Fdownload%2Frc-select-9.2.3.tgz#64340e2d6ef64e8bc3cfc6f468ffd28625589ac2" integrity sha1-ZDQOLW72TovDz8b0aP/ShiVYmsI= dependencies: babel-runtime "^6.23.0" @@ -15589,7 +15592,7 @@ react-error-overlay@5.1.6, react-error-overlay@^5.1.6: react-intl@2.7.2: version "2.7.2" - resolved "https://registry.npm.taobao.org/react-intl/download/react-intl-2.7.2.tgz#efe97e3fc0e99b4e88a6e6150854d3d1852a4381" + resolved "https://registry.npm.taobao.org/react-intl/download/react-intl-2.7.2.tgz?cache=0&sync_timestamp=1586836802824&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-intl%2Fdownload%2Freact-intl-2.7.2.tgz#efe97e3fc0e99b4e88a6e6150854d3d1852a4381" integrity sha1-7+l+P8Dpm06IpuYVCFTT0YUqQ4E= dependencies: hoist-non-react-statics "^2.5.5" @@ -15646,9 +15649,9 @@ react-redux@^7.1.0: react-is "^16.9.0" react-resize-detector@^4.2.1: - version "4.2.1" - resolved "https://registry.npm.taobao.org/react-resize-detector/download/react-resize-detector-4.2.1.tgz#8982b74c3e1cf949afaa3c41050458c87b033982" - integrity sha1-iYK3TD4c+UmvqjxBBQRYyHsDOYI= + version "4.2.3" + resolved "https://registry.npm.taobao.org/react-resize-detector/download/react-resize-detector-4.2.3.tgz#7df258668a30bdfd88e655bbdb27db7fd7b23127" + integrity sha1-ffJYZoowvf2I5lW72yfbf9eyMSc= dependencies: lodash "^4.17.15" lodash-es "^4.17.15" @@ -16359,20 +16362,20 @@ resolve-url@^0.2.1: resolve@1.1.7: version "1.1.7" - resolved "https://registry.npm.taobao.org/resolve/download/resolve-1.1.7.tgz?cache=0&sync_timestamp=1580943346382&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve%2Fdownload%2Fresolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + resolved "https://registry.npm.taobao.org/resolve/download/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= resolve@1.11.0: version "1.11.0" - resolved "https://registry.npm.taobao.org/resolve/download/resolve-1.11.0.tgz?cache=0&sync_timestamp=1580943346382&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve%2Fdownload%2Fresolve-1.11.0.tgz#4014870ba296176b86343d50b60f3b50609ce232" + resolved "https://registry.npm.taobao.org/resolve/download/resolve-1.11.0.tgz#4014870ba296176b86343d50b60f3b50609ce232" integrity sha1-QBSHC6KWF2uGND1Qtg87UGCc4jI= dependencies: path-parse "^1.0.6" resolve@1.x, resolve@^1.1.6, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.15.1, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.8.1: - version "1.15.1" - resolved "https://registry.npm.taobao.org/resolve/download/resolve-1.15.1.tgz?cache=0&sync_timestamp=1580943346382&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve%2Fdownload%2Fresolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" - integrity sha1-J73N7/6vLWJEuVuw+fS0ZTRR8+g= + version "1.16.0" + resolved "https://registry.npm.taobao.org/resolve/download/resolve-1.16.0.tgz#063dc704fa3413e13ac1d0d1756a7cbfe95dd1a7" + integrity sha1-Bj3HBPo0E+E6wdDRdWp8v+ld0ac= dependencies: path-parse "^1.0.6" @@ -16788,33 +16791,33 @@ semver-diff@^2.0.0: "semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", semver@^5.0.3, semver@^5.3.0, semver@^5.4.1, semver@^5.5, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1: version "5.7.1" - resolved "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1586826576236&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + resolved "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1586886267748&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha1-qVT5Ma66UI0we78Gnv8MAclhFvc= semver@5.5.0: version "5.5.0" - resolved "https://registry.npm.taobao.org/semver/download/semver-5.5.0.tgz?cache=0&sync_timestamp=1586826576236&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" + resolved "https://registry.npm.taobao.org/semver/download/semver-5.5.0.tgz?cache=0&sync_timestamp=1586886267748&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" integrity sha1-3Eu8emyp2Rbe5dQ1FvAJK1j3uKs= semver@6.1.1: version "6.1.1" - resolved "https://registry.npm.taobao.org/semver/download/semver-6.1.1.tgz?cache=0&sync_timestamp=1586826576236&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.1.1.tgz#53f53da9b30b2103cd4f15eab3a18ecbcb210c9b" + resolved "https://registry.npm.taobao.org/semver/download/semver-6.1.1.tgz?cache=0&sync_timestamp=1586886267748&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.1.1.tgz#53f53da9b30b2103cd4f15eab3a18ecbcb210c9b" integrity sha1-U/U9qbMLIQPNTxXqs6GOy8shDJs= semver@6.3.0, semver@^6.0.0, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: version "6.3.0" - resolved "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1586826576236&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + resolved "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1586886267748&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0= semver@7.0.0: version "7.0.0" - resolved "https://registry.npm.taobao.org/semver/download/semver-7.0.0.tgz?cache=0&sync_timestamp=1586826576236&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + resolved "https://registry.npm.taobao.org/semver/download/semver-7.0.0.tgz?cache=0&sync_timestamp=1586886267748&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha1-XzyjV2HkfgWyBsba/yz4FPAxa44= semver@^7.1.3, semver@^7.2.1: - version "7.3.0" - resolved "https://registry.npm.taobao.org/semver/download/semver-7.3.0.tgz?cache=0&sync_timestamp=1586826576236&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.0.tgz#91f7c70ec944a63e5dc7a74cde2da375d8e0853c" - integrity sha1-kffHDslEpj5dx6dM3i2jddjghTw= + version "7.3.2" + resolved "https://registry.npm.taobao.org/semver/download/semver-7.3.2.tgz?cache=0&sync_timestamp=1586886267748&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha1-YElisFK4HtB4aq6EOJ/7pw/9OTg= send@0.17.1: version "0.17.1" @@ -17417,7 +17420,7 @@ stealthy-require@^1.1.1: stream-browserify@^2.0.1: version "2.0.2" - resolved "https://registry.npm.taobao.org/stream-browserify/download/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + resolved "https://registry.npm.taobao.org/stream-browserify/download/stream-browserify-2.0.2.tgz?cache=0&sync_timestamp=1587041545531&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstream-browserify%2Fdownload%2Fstream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" integrity sha1-h1IdOKRKp+6RzhzSpH3wy0ndZgs= dependencies: inherits "~2.0.1" @@ -17725,7 +17728,7 @@ strong-log-transformer@^2.0.0: style-loader@0.23.1: version "0.23.1" - resolved "https://registry.npm.taobao.org/style-loader/download/style-loader-0.23.1.tgz?cache=0&sync_timestamp=1579274474456&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstyle-loader%2Fdownload%2Fstyle-loader-0.23.1.tgz#cb9154606f3e771ab6c4ab637026a1049174d925" + resolved "https://registry.npm.taobao.org/style-loader/download/style-loader-0.23.1.tgz?cache=0&sync_timestamp=1586968779789&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstyle-loader%2Fdownload%2Fstyle-loader-0.23.1.tgz#cb9154606f3e771ab6c4ab637026a1049174d925" integrity sha1-y5FUYG8+dxq2xKtjcCahBJF02SU= dependencies: loader-utils "^1.1.0" @@ -18506,7 +18509,7 @@ tryer@^1.0.1: ts-jest@^24.0.2: version "24.3.0" - resolved "https://registry.npm.taobao.org/ts-jest/download/ts-jest-24.3.0.tgz#b97814e3eab359ea840a1ac112deae68aa440869" + resolved "https://registry.npm.taobao.org/ts-jest/download/ts-jest-24.3.0.tgz?cache=0&sync_timestamp=1587102856636&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fts-jest%2Fdownload%2Fts-jest-24.3.0.tgz#b97814e3eab359ea840a1ac112deae68aa440869" integrity sha1-uXgU4+qzWeqEChrBEt6uaKpECGk= dependencies: bs-logger "0.x" @@ -18629,7 +18632,7 @@ tslint-react@^4.1.0: tslint@5.17.0: version "5.17.0" - resolved "https://registry.npm.taobao.org/tslint/download/tslint-5.17.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftslint%2Fdownload%2Ftslint-5.17.0.tgz#f9f0ce2011d8e90debaa6e9b4975f24cd16852b8" + resolved "https://registry.npm.taobao.org/tslint/download/tslint-5.17.0.tgz#f9f0ce2011d8e90debaa6e9b4975f24cd16852b8" integrity sha1-+fDOIBHY6Q3rqm6bSXXyTNFoUrg= dependencies: "@babel/code-frame" "^7.0.0" @@ -18648,7 +18651,7 @@ tslint@5.17.0: tslint@^5.12.0, tslint@^5.18.0, tslint@^5.20.1: version "5.20.1" - resolved "https://registry.npm.taobao.org/tslint/download/tslint-5.20.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftslint%2Fdownload%2Ftslint-5.20.1.tgz#e401e8aeda0152bc44dd07e614034f3f80c67b7d" + resolved "https://registry.npm.taobao.org/tslint/download/tslint-5.20.1.tgz#e401e8aeda0152bc44dd07e614034f3f80c67b7d" integrity sha1-5AHortoBUrxE3QfmFANPP4DGe30= dependencies: "@babel/code-frame" "^7.0.0" @@ -18762,12 +18765,12 @@ typedarray@^0.0.6: typescript@3.7.2: version "3.7.2" - resolved "https://registry.npm.taobao.org/typescript/download/typescript-3.7.2.tgz#27e489b95fa5909445e9fef5ee48d81697ad18fb" + resolved "https://registry.npm.taobao.org/typescript/download/typescript-3.7.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftypescript%2Fdownload%2Ftypescript-3.7.2.tgz#27e489b95fa5909445e9fef5ee48d81697ad18fb" integrity sha1-J+SJuV+lkJRF6f717kjYFpetGPs= typescript@^3.5.3, typescript@^3.7.2, typescript@^3.8.3: version "3.8.3" - resolved "https://registry.npm.taobao.org/typescript/download/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061" + resolved "https://registry.npm.taobao.org/typescript/download/typescript-3.8.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftypescript%2Fdownload%2Ftypescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061" integrity sha1-QJ64VE6gM1cRIFhp7EWKsQnuEGE= ua-parser-js@^0.7.18, ua-parser-js@^0.7.20: @@ -18784,9 +18787,9 @@ uglify-es@^3.3.4: source-map "~0.6.1" uglify-js@^3.1.4, uglify-js@^3.5.1: - version "3.9.0" - resolved "https://registry.npm.taobao.org/uglify-js/download/uglify-js-3.9.0.tgz?cache=0&sync_timestamp=1586791132840&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuglify-js%2Fdownload%2Fuglify-js-3.9.0.tgz#037163a936992050ed5d14f5d5c4014126019661" - integrity sha1-A3FjqTaZIFDtXRT11cQBQSYBlmE= + version "3.9.1" + resolved "https://registry.npm.taobao.org/uglify-js/download/uglify-js-3.9.1.tgz#a56a71c8caa2d36b5556cc1fd57df01ae3491539" + integrity sha1-pWpxyMqi02tVVswf1X3wGuNJFTk= dependencies: commander "~2.20.3" @@ -18982,10 +18985,10 @@ umi-plugin-hd@1.7.0: postcss-plugin-px2rem "0.8.1" umi-hd "5.0.1" -umi-plugin-locale@2.11.5: - version "2.11.5" - resolved "https://registry.npm.taobao.org/umi-plugin-locale/download/umi-plugin-locale-2.11.5.tgz#8f8ab1e5c9f7827576b3e49d3383205dc012bbac" - integrity sha1-j4qx5cn3gnV2s+SdM4MgXcASu6w= +umi-plugin-locale@2.11.6: + version "2.11.6" + resolved "https://registry.npm.taobao.org/umi-plugin-locale/download/umi-plugin-locale-2.11.6.tgz?cache=0&sync_timestamp=1586854350514&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fumi-plugin-locale%2Fdownload%2Fumi-plugin-locale-2.11.6.tgz#ea7574f939c1dcc7427695308f228f5df71880d7" + integrity sha1-6nV0+TnB3MdCdpUwjyKPXfcYgNc= dependencies: "@ant-design/create-react-context" "0.2.4" globby "7.1.1" @@ -19009,9 +19012,9 @@ umi-plugin-polyfills@1.4.2: url-polyfill "1.1.3" umi-plugin-react@^1.8.0: - version "1.15.7" - resolved "https://registry.npm.taobao.org/umi-plugin-react/download/umi-plugin-react-1.15.7.tgz?cache=0&sync_timestamp=1586248566033&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fumi-plugin-react%2Fdownload%2Fumi-plugin-react-1.15.7.tgz#770f741d7cadd26d51e9136d4bbf091b8424a168" - integrity sha1-dw90HXyt0m1R6RNtS78JG4QkoWg= + version "1.15.8" + resolved "https://registry.npm.taobao.org/umi-plugin-react/download/umi-plugin-react-1.15.8.tgz?cache=0&sync_timestamp=1586854313420&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fumi-plugin-react%2Fdownload%2Fumi-plugin-react-1.15.8.tgz#a9fb572ab57133a14750b08fb41dcb22cfa5656d" + integrity sha1-qftXKrVxM6FHULCPtB3LIs+lZW0= dependencies: antd "3.x" antd-mobile "2.x" @@ -19025,7 +19028,7 @@ umi-plugin-react@^1.8.0: umi-plugin-dll "1.6.1" umi-plugin-dva "1.11.3" umi-plugin-hd "1.7.0" - umi-plugin-locale "2.11.5" + umi-plugin-locale "2.11.6" umi-plugin-polyfills "1.4.2" umi-plugin-routes "1.8.9" umi-plugin-ui "1.5.3" @@ -19108,10 +19111,10 @@ umi-ui-theme@1.2.4: dependencies: less-vars-to-js "1.3.0" -umi-ui@1.5.5: - version "1.5.5" - resolved "https://registry.npm.taobao.org/umi-ui/download/umi-ui-1.5.5.tgz?cache=0&sync_timestamp=1586248569064&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fumi-ui%2Fdownload%2Fumi-ui-1.5.5.tgz#6868004848263c599e18fdd9a628f45ac248e649" - integrity sha1-aGgASEgmPFmeGP3Zpij0WsJI5kk= +umi-ui@1.5.6: + version "1.5.6" + resolved "https://registry.npm.taobao.org/umi-ui/download/umi-ui-1.5.6.tgz?cache=0&sync_timestamp=1586854002894&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fumi-ui%2Fdownload%2Fumi-ui-1.5.6.tgz#49129c7baa7c81687f4552400ed433b007458267" + integrity sha1-SRKce6p8gWh/RVJADtQzsAdFgmc= dependencies: "@umijs/launch-editor" "^1.0.0" binary-mirror-config "1.20.3" @@ -19218,9 +19221,9 @@ umi-webpack-bundle-analyzer@^3.5.0: ws "^6.0.0" umi@^2.9.0: - version "2.13.12" - resolved "https://registry.npm.taobao.org/umi/download/umi-2.13.12.tgz#f53eaebff1315c1cd468326e93203cbe9af1d4cc" - integrity sha1-9T6uv/ExXBzUaDJukyA8vprx1Mw= + version "2.13.13" + resolved "https://registry.npm.taobao.org/umi/download/umi-2.13.13.tgz#9a9ac4053f606419cc21faf664715809b1f45316" + integrity sha1-mprEBT9gZBnMIfr2ZHFYCbH0UxY= dependencies: "@babel/core" "7.4.5" "@babel/runtime" "7.4.5" @@ -19237,7 +19240,7 @@ umi@^2.9.0: signale "1.4.0" umi-build-dev "1.18.5" umi-core "1.9.9" - umi-ui "1.5.5" + umi-ui "1.5.6" umi-utils "1.7.2" update-notifier "3.0.0" yargs-parser "13.1.1" @@ -20466,14 +20469,14 @@ yaml@^1.7.2: yargs-parser@10.x, yargs-parser@^10.0.0, yargs-parser@^10.1.0: version "10.1.0" - resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-10.1.0.tgz?cache=0&sync_timestamp=1585243611524&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" + resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" integrity sha1-cgImW4n36eny5XZeD+c1qQXtuqg= dependencies: camelcase "^4.1.0" yargs-parser@13.1.1: version "13.1.1" - resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-13.1.1.tgz?cache=0&sync_timestamp=1585243611524&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" + resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" integrity sha1-0mBYUyqgbTZf4JH2ofwGsvfl7KA= dependencies: camelcase "^5.0.0" @@ -20481,7 +20484,7 @@ yargs-parser@13.1.1: yargs-parser@^13.1.0, yargs-parser@^13.1.1, yargs-parser@^13.1.2: version "13.1.2" - resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-13.1.2.tgz?cache=0&sync_timestamp=1585243611524&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" integrity sha1-Ew8JcC667vJlDVTObj5XBvek+zg= dependencies: camelcase "^5.0.0" @@ -20489,7 +20492,7 @@ yargs-parser@^13.1.0, yargs-parser@^13.1.1, yargs-parser@^13.1.2: yargs-parser@^15.0.1: version "15.0.1" - resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-15.0.1.tgz?cache=0&sync_timestamp=1585243611524&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-15.0.1.tgz#54786af40b820dcb2fb8025b11b4d659d76323b3" + resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-15.0.1.tgz#54786af40b820dcb2fb8025b11b4d659d76323b3" integrity sha1-VHhq9AuCDcsvuAJbEbTWWddjI7M= dependencies: camelcase "^5.0.0" @@ -20497,14 +20500,14 @@ yargs-parser@^15.0.1: yargs-parser@^8.1.0: version "8.1.0" - resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-8.1.0.tgz?cache=0&sync_timestamp=1585243611524&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950" + resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950" integrity sha1-8TdqM7Ziml0GN4KUTacyYx6WaVA= dependencies: camelcase "^4.1.0" yargs-parser@^9.0.2: version "9.0.2" - resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-9.0.2.tgz?cache=0&sync_timestamp=1585243611524&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" + resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" integrity sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc= dependencies: camelcase "^4.1.0"