Commit 40008bc235b35b2cf097555854d18f369eadf707

Authored by Vben
1 parent 00fca0fe

refactor: refactor CountTo component

CHANGELOG.zh_CN.md
1 1 ## Wip
2 2  
  3 +### ✨ Refactor
  4 +
  5 +- `CountTo`组件重构
  6 +
  7 +### ✨ Features
  8 +
3 9 - `radioButtonGroup` 支持`boolean`值
4 10 - `useModalInner` 新增 `redoModalHeight`用于在 Modal 内部重设`Modal`高度
5 11 - `useECharts` 新增`getInstance`用于获取`echart`实例
... ... @@ -12,7 +18,7 @@
12 18 - `BasicTable`新增`updateTableDataRecord`方法用于更新指定行数据
13 19 - `useModal`新增`closeModal`方法用于关闭`Modal`
14 20  
15   -## Bug Fixes
  21 +### 🐛 Bug Fixes
16 22  
17 23 - 修复`redoModalHeight`不能减小高度的问题
18 24 - 修复 `BasicForm`设置 schemas 数据不生效的问题
... ...
package.json
... ... @@ -33,16 +33,16 @@
33 33 },
34 34 "dependencies": {
35 35 "@iconify/iconify": "^2.0.1",
36   - "@logicflow/core": "^0.4.11",
37   - "@logicflow/extension": "^0.4.12",
38   - "@vueuse/core": "^5.0.1",
  36 + "@logicflow/core": "^0.4.13",
  37 + "@logicflow/extension": "^0.4.13",
  38 + "@vueuse/core": "^5.0.2",
39 39 "@zxcvbn-ts/core": "^0.3.0",
40 40 "ant-design-vue": "2.1.2",
41 41 "axios": "^0.21.1",
42 42 "codemirror": "^5.61.1",
43 43 "cropperjs": "^1.5.11",
44 44 "crypto-js": "^4.0.0",
45   - "echarts": "^5.1.1",
  45 + "echarts": "^5.1.2",
46 46 "lodash-es": "^4.17.21",
47 47 "mockjs": "^1.1.0",
48 48 "nprogress": "^0.2.0",
... ... @@ -115,13 +115,13 @@
115 115 "vite-plugin-compression": "^0.2.5",
116 116 "vite-plugin-html": "^2.0.7",
117 117 "vite-plugin-imagemin": "^0.3.2",
118   - "vite-plugin-mock": "^2.7.0",
  118 + "vite-plugin-mock": "^2.7.1",
119 119 "vite-plugin-purge-icons": "^0.7.0",
120 120 "vite-plugin-pwa": "^0.7.3",
121 121 "vite-plugin-style-import": "^0.10.1",
122 122 "vite-plugin-svg-icons": "^0.7.0",
123 123 "vite-plugin-theme": "^0.8.1",
124   - "vite-plugin-windicss": "^1.0.2",
  124 + "vite-plugin-windicss": "^1.0.3",
125 125 "vue-eslint-parser": "^7.6.0",
126 126 "vue-tsc": "^0.1.7"
127 127 },
... ...
src/components/ContextMenu/src/ContextMenu.vue
... ... @@ -71,7 +71,8 @@
71 71 });
72 72  
73 73 onUnmounted(() => {
74   - unref(wrapRef) && document.body.removeChild(el);
  74 + const el = unref(wrapRef);
  75 + el && document.body.removeChild(el);
75 76 });
76 77  
77 78 function handleAction(item: ContextMenuItem, e: MouseEvent) {
... ... @@ -118,8 +119,10 @@
118 119 });
119 120 }
120 121 return () => {
  122 + if (!unref(showRef)) {
  123 + return null;
  124 + }
121 125 const { items } = props;
122   - if (!unref(showRef)) return null;
123 126 return (
124 127 <Menu
125 128 inlineIndent={12}
... ...
src/components/CountTo/index.ts
1   -// Transform vue-count-to to support vue3 version
  1 +import { withInstall } from '/@/utils';
  2 +import countTo from './src/CountTo.vue';
2 3  
3   -import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent';
4   -export const CountTo = createAsyncComponent(() => import('./src/CountTo.vue'));
  4 +export const CountTo = withInstall(countTo);
... ...
src/components/CountTo/src/CountTo.vue
1 1 <template>
2   - <span :style="{ color: color }">
3   - {{ displayValue }}
  2 + <span :style="{ color }">
  3 + {{ value }}
4 4 </span>
5 5 </template>
6 6 <script lang="ts">
7   - import { defineComponent, reactive, computed, watch, onMounted, unref, toRef } from 'vue';
8   - import { countToProps } from './props';
  7 + import { defineComponent, ref, computed, watchEffect, unref, onMounted, watch } from 'vue';
  8 + import { useTransition, TransitionPresets } from '@vueuse/core';
9 9 import { isNumber } from '/@/utils/is';
  10 +
  11 + const props = {
  12 + startVal: { type: Number, default: 0 },
  13 + endVal: { type: Number, default: 2021 },
  14 + duration: { type: Number, default: 1500 },
  15 + autoplay: { type: Boolean, default: true },
  16 + decimals: {
  17 + type: Number,
  18 + default: 0,
  19 + validator(value: number) {
  20 + return value >= 0;
  21 + },
  22 + },
  23 + prefix: { type: String, default: '' },
  24 + suffix: { type: String, default: '' },
  25 + separator: { type: String, default: ',' },
  26 + decimal: { type: String, default: '.' },
  27 + /**
  28 + * font color
  29 + */
  30 + color: { type: String },
  31 + /**
  32 + * Turn on digital animation
  33 + */
  34 + useEasing: { type: Boolean, default: true },
  35 + /**
  36 + * Digital animation
  37 + */
  38 + transition: { type: String, default: 'linear' },
  39 + };
  40 +
10 41 export default defineComponent({
11 42 name: 'CountTo',
12   - props: countToProps,
13   - emits: ['mounted', 'callback'],
  43 + props,
  44 + emits: ['onStarted', 'onFinished'],
14 45 setup(props, { emit }) {
15   - const state = reactive<{
16   - localStartVal: number;
17   - printVal: number | null;
18   - displayValue: string;
19   - paused: boolean;
20   - localDuration: number | null;
21   - startTime: number | null;
22   - timestamp: number | null;
23   - rAF: any;
24   - remaining: number | null;
25   - color: any;
26   - }>({
27   - localStartVal: props.startVal,
28   - displayValue: formatNumber(props.startVal),
29   - printVal: null,
30   - paused: false,
31   - localDuration: props.duration,
32   - startTime: null,
33   - timestamp: null,
34   - remaining: null,
35   - rAF: null,
36   - color: null,
37   - });
  46 + const source = ref(props.startVal);
  47 + const disabled = ref(false);
  48 + let outputValue = useTransition(source);
38 49  
39   - onMounted(() => {
40   - if (props.autoplay) {
41   - start();
42   - }
43   - emit('mounted');
44   - });
  50 + const value = computed(() => formatNumber(unref(outputValue)));
45 51  
46   - const getCountDown = computed(() => {
47   - return props.startVal > props.endVal;
  52 + watchEffect(() => {
  53 + source.value = props.startVal;
48 54 });
49 55  
50 56 watch([() => props.startVal, () => props.endVal], () => {
... ... @@ -53,93 +59,42 @@
53 59 }
54 60 });
55 61  
56   - function start() {
57   - const { startVal, duration, color } = props;
58   - state.localStartVal = startVal;
59   - state.startTime = null;
60   - state.localDuration = duration;
61   - state.color = color;
62   - state.paused = false;
63   - state.rAF = requestAnimationFrame(count);
64   - }
65   -
66   - function pauseResume() {
67   - if (state.paused) {
68   - resume();
69   - state.paused = false;
70   - } else {
71   - pause();
72   - state.paused = true;
73   - }
74   - }
75   -
76   - function pause() {
77   - cancelAnimationFrame(state.rAF);
78   - }
  62 + onMounted(() => {
  63 + props.autoplay && start();
  64 + });
79 65  
80   - function resume() {
81   - state.startTime = null;
82   - state.localDuration = +(state.remaining as number);
83   - state.localStartVal = +(state.printVal as number);
84   - requestAnimationFrame(count);
  66 + function start() {
  67 + run();
  68 + source.value = props.endVal;
85 69 }
86 70  
87 71 function reset() {
88   - state.startTime = null;
89   - cancelAnimationFrame(state.rAF);
90   - state.displayValue = formatNumber(props.startVal);
  72 + source.value = props.startVal;
  73 + run();
91 74 }
92 75  
93   - function count(timestamp: number) {
94   - const { useEasing, easingFn, endVal } = props;
95   - if (!state.startTime) state.startTime = timestamp;
96   - state.timestamp = timestamp;
97   - const progress = timestamp - state.startTime;
98   - state.remaining = (state.localDuration as number) - progress;
99   - if (useEasing) {
100   - if (unref(getCountDown)) {
101   - state.printVal =
102   - state.localStartVal -
103   - easingFn(progress, 0, state.localStartVal - endVal, state.localDuration as number);
104   - } else {
105   - state.printVal = easingFn(
106   - progress,
107   - state.localStartVal,
108   - endVal - state.localStartVal,
109   - state.localDuration as number
110   - );
111   - }
112   - } else {
113   - if (unref(getCountDown)) {
114   - state.printVal =
115   - state.localStartVal -
116   - (state.localStartVal - endVal) * (progress / (state.localDuration as number));
117   - } else {
118   - state.printVal =
119   - state.localStartVal +
120   - (endVal - state.localStartVal) * (progress / (state.localDuration as number));
121   - }
122   - }
123   - if (unref(getCountDown)) {
124   - state.printVal = state.printVal < endVal ? endVal : state.printVal;
125   - } else {
126   - state.printVal = state.printVal > endVal ? endVal : state.printVal;
127   - }
128   - state.displayValue = formatNumber(state.printVal);
129   - if (progress < (state.localDuration as number)) {
130   - state.rAF = requestAnimationFrame(count);
131   - } else {
132   - emit('callback');
133   - }
  76 + function run() {
  77 + outputValue = useTransition(source, {
  78 + disabled,
  79 + duration: props.duration,
  80 + onFinished: () => emit('onFinished'),
  81 + onStarted: () => emit('onStarted'),
  82 + ...(props.useEasing ? { transition: TransitionPresets[props.transition] } : {}),
  83 + });
134 84 }
135 85  
136 86 function formatNumber(num: number | string) {
  87 + if (!num) {
  88 + return '';
  89 + }
137 90 const { decimals, decimal, separator, suffix, prefix } = props;
138 91 num = Number(num).toFixed(decimals);
139 92 num += '';
  93 +
140 94 const x = num.split('.');
141 95 let x1 = x[0];
142 96 const x2 = x.length > 1 ? decimal + x[1] : '';
  97 +
143 98 const rgx = /(\d+)(\d{3})/;
144 99 if (separator && !isNumber(separator)) {
145 100 while (rgx.test(x1)) {
... ... @@ -149,14 +104,7 @@
149 104 return prefix + x1 + x2 + suffix;
150 105 }
151 106  
152   - return {
153   - count,
154   - reset,
155   - resume,
156   - start,
157   - pauseResume,
158   - displayValue: toRef(state, 'displayValue'),
159   - };
  107 + return { value, start, reset };
160 108 },
161 109 });
162 110 </script>
... ...
src/components/CountTo/src/props.ts deleted 100644 → 0
1   -import { PropType } from 'vue';
2   -import { propTypes } from '/@/utils/propTypes';
3   -export const countToProps = {
4   - startVal: propTypes.number.def(0),
5   - endVal: propTypes.number.def(2020),
6   - duration: propTypes.number.def(1300),
7   - autoplay: propTypes.bool.def(true),
8   - decimals: {
9   - type: Number as PropType<number>,
10   - required: false,
11   - default: 0,
12   - validator(value: number) {
13   - return value >= 0;
14   - },
15   - },
16   - color: {
17   - type: String as PropType<string>,
18   - require: false,
19   - },
20   - decimal: propTypes.string.def('.'),
21   - separator: propTypes.string.def(','),
22   - prefix: propTypes.string.def(''),
23   - suffix: propTypes.string.def(''),
24   - useEasing: propTypes.bool.def(true),
25   - easingFn: {
26   - type: Function as PropType<(t: number, b: number, c: number, d: number) => number>,
27   - default(t: number, b: number, c: number, d: number) {
28   - return (c * (-Math.pow(2, (-10 * t) / d) + 1) * 1024) / 1023 + b;
29   - },
30   - },
31   -};
src/components/Cropper/src/Cropper.vue
... ... @@ -20,7 +20,7 @@
20 20  
21 21 type Options = Cropper.Options;
22 22  
23   - const defaultOptions: Cropper.Options = {
  23 + const defaultOptions: Options = {
24 24 aspectRatio: 16 / 9,
25 25 zoomable: true,
26 26 zoomOnTouch: true,
... ... @@ -42,6 +42,7 @@
42 42 movable: true,
43 43 rotatable: true,
44 44 };
  45 +
45 46 export default defineComponent({
46 47 name: 'CropperImage',
47 48 props: {
... ... @@ -108,9 +109,9 @@
108 109 let imgInfo = cropper.value.getData();
109 110 cropper.value.getCroppedCanvas().toBlob((blob) => {
110 111 let fileReader: FileReader = new FileReader();
111   - fileReader.onloadend = (e: any) => {
  112 + fileReader.onloadend = (e) => {
112 113 ctx.emit('cropperedInfo', {
113   - imgBase64: e.target.result,
  114 + imgBase64: e.target?.result ?? '',
114 115 imgInfo,
115 116 });
116 117 };
... ...
yarn.lock
... ... @@ -1252,21 +1252,21 @@
1252 1252 "@intlify/runtime" "9.1.6"
1253 1253 "@intlify/shared" "9.1.6"
1254 1254  
1255   -"@logicflow/core@^0.4.11":
1256   - version "0.4.11"
1257   - resolved "https://registry.yarnpkg.com/@logicflow/core/-/core-0.4.11.tgz#3c617e5cddb47e7052d62fee56ba77ab45b1cd25"
1258   - integrity sha512-FlErJRyKw+XzyT0/0hha8Dwsiok9Cri2ZS2/SDmqLdUK6I3rD6LpmVabj8LjYH4IWb0fOYSfgGhY4oWQAKqa9g==
  1255 +"@logicflow/core@^0.4.13":
  1256 + version "0.4.13"
  1257 + resolved "https://registry.npmjs.org/@logicflow/core/-/core-0.4.13.tgz#69d1e7a30b5e545ada3a2e980059f3e6f6923f15"
  1258 + integrity sha512-xOLz8RO6ldAT5H9Q2Ewt9d7z146B54TUom5EXzJ/jx/s1Phy24vP8tAGu6LuoTEitgNHTRQq7WxvH9NqnpxCpg==
1259 1259 dependencies:
1260 1260 "@types/mousetrap" "^1.6.4"
1261 1261 mousetrap "^1.6.5"
1262 1262 preact "^10.4.8"
1263 1263  
1264   -"@logicflow/extension@^0.4.12":
1265   - version "0.4.12"
1266   - resolved "https://registry.yarnpkg.com/@logicflow/extension/-/extension-0.4.12.tgz#be69e8ebbcffee6bb0f07778f2126ad98f93f64a"
1267   - integrity sha512-fD0bXxYIEo1d047A3PXkAVMH6vM5y8AAIfLxnXxdMJGOVLH44iWCO6eNW8bvnoab7aSmhj2MWMgY3op5XVZh1Q==
  1264 +"@logicflow/extension@^0.4.13":
  1265 + version "0.4.13"
  1266 + resolved "https://registry.npmjs.org/@logicflow/extension/-/extension-0.4.13.tgz#b1c87b5458345414cc6c5fb813511e62db4acfa7"
  1267 + integrity sha512-DAfgO9A5VrJ4oXruTYGgmDGvZAIaT2kLAlTE+luyg4eld6YsgwWXqXazJWCd9ObdAJkLYCf7lU27hZsDNqqbrg==
1268 1268 dependencies:
1269   - "@logicflow/core" "^0.4.11"
  1269 + "@logicflow/core" "^0.4.13"
1270 1270 ids "^1.0.0"
1271 1271 preact "^10.4.8"
1272 1272  
... ... @@ -2033,25 +2033,25 @@
2033 2033 resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.0.11.tgz#20d22dd0da7d358bb21c17f9bde8628152642c77"
2034 2034 integrity sha512-b+zB8A2so8eCE0JsxjL24J7vdGl8rzPQ09hZNhystm+KqSbKcAej1A+Hbva1rCMmTTqA+hFnUSDc5kouEo0JzA==
2035 2035  
2036   -"@vueuse/core@^5.0.1":
2037   - version "5.0.1"
2038   - resolved "https://registry.npmjs.org/@vueuse/core/-/core-5.0.1.tgz#94bbb6c71d95b79efbdb24111915775e61723f1b"
2039   - integrity sha512-hzcyYNvW1p9ZEwm+oBaWrHgGx6S93pJBiXLZUj2pgCNiJZjaedoePT9xzesi1SBxeKcYxwToaTISLeKdE4VKeg==
  2036 +"@vueuse/core@^5.0.2":
  2037 + version "5.0.2"
  2038 + resolved "https://registry.npmjs.org/@vueuse/core/-/core-5.0.2.tgz#302389f620c0d4b51fdf157012d9b5b522b605e7"
  2039 + integrity sha512-Sp9+7AL4Cg3Tx6I55WoH7zICGRlp6ZUF9NW3EU8SZTkryHm0afAjFfASMwlfV030JFeh45BdqafDOrenVmM9Cw==
2040 2040 dependencies:
2041   - "@vueuse/shared" "5.0.1"
  2041 + "@vueuse/shared" "5.0.2"
2042 2042 vue-demi "*"
2043 2043  
2044   -"@vueuse/shared@5.0.1":
2045   - version "5.0.1"
2046   - resolved "https://registry.npmjs.org/@vueuse/shared/-/shared-5.0.1.tgz#3b6607ffc9e19b322c39be8a2f6b584d203a7c5e"
2047   - integrity sha512-/+kRII9chn45PhFfRuPVbSQApJHhhqXFhPrWjnYKckMfQE9ZOuNMb1bmQnDTqzuNkoS/ENeHBMq0rnV/cfz/3Q==
  2044 +"@vueuse/shared@5.0.2":
  2045 + version "5.0.2"
  2046 + resolved "https://registry.npmjs.org/@vueuse/shared/-/shared-5.0.2.tgz#274c2bf163d25eb7fd2fc51f23088a2b7f060594"
  2047 + integrity sha512-S1hRRmEdipjTD4DbXgPdw4ZZYebU/nDi75vNP3Ibpa1irW3NUNUKOT/TWnwRHLQvXquUtdvalhI8D9Db+czZJg==
2048 2048 dependencies:
2049 2049 vue-demi "*"
2050 2050  
2051   -"@windicss/plugin-utils@1.0.2":
2052   - version "1.0.2"
2053   - resolved "https://registry.npmjs.org/@windicss/plugin-utils/-/plugin-utils-1.0.2.tgz#c34d6498058d5f4291805027d2ef6e34638a572a"
2054   - integrity sha512-W9fZoPNsD3NMVyqzt9eNb1DNp9p4oy7EscCfGVIg1KBxAC8S+AnXtkaR/rad09y+aqzbILKNfzDKdimDR2FA9g==
  2051 +"@windicss/plugin-utils@1.0.3":
  2052 + version "1.0.3"
  2053 + resolved "https://registry.npmjs.org/@windicss/plugin-utils/-/plugin-utils-1.0.3.tgz#04d039ef56b58180079df3f9b3bd8a21a57368d3"
  2054 + integrity sha512-SBYjmWBO+dOqxJgyyOAETOuMdcugvVgZYQc3rb7KtcTW5u9UkFXtiuGdoq8cWyFpSkn46gmjCb4WNbY3kEIVnQ==
2055 2055 dependencies:
2056 2056 "@antfu/utils" "^0.1.6"
2057 2057 debug "^4.3.2"
... ... @@ -4050,13 +4050,13 @@ duplexer3@^0.1.4:
4050 4050 resolved "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"
4051 4051 integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=
4052 4052  
4053   -echarts@^5.1.1:
4054   - version "5.1.1"
4055   - resolved "https://registry.npmjs.org/echarts/-/echarts-5.1.1.tgz#b186f162f017c555cfd67b12ede6762bdc3ddfda"
4056   - integrity sha512-b3nP8M9XwZM2jISuA+fP0EuJv8lcfgWrinel185Npy8bE/UhXTDIPJcqgQOCWdvk0c5CeT6Dsm1xBjmJXAGlxQ==
  4053 +echarts@^5.1.2:
  4054 + version "5.1.2"
  4055 + resolved "https://registry.npmjs.org/echarts/-/echarts-5.1.2.tgz#aa1ab0cef5b74fa2f7c620261a5f286893d30fd1"
  4056 + integrity sha512-okUhO4sw22vwZp+rTPNjd/bvTdpug4K4sHNHyrV8NdAncIX9/AarlolFqtJCAYKGFYhUBNjIWu1EznFrSWTFxg==
4057 4057 dependencies:
4058 4058 tslib "2.0.3"
4059   - zrender "5.1.0"
  4059 + zrender "5.1.1"
4060 4060  
4061 4061 ecstatic@^3.3.2:
4062 4062 version "3.3.2"
... ... @@ -10573,10 +10573,10 @@ vite-plugin-imagemin@^0.3.2:
10573 10573 imagemin-svgo "^8.0.0"
10574 10574 imagemin-webp "^6.0.0"
10575 10575  
10576   -vite-plugin-mock@^2.7.0:
10577   - version "2.7.0"
10578   - resolved "https://registry.yarnpkg.com/vite-plugin-mock/-/vite-plugin-mock-2.7.0.tgz#21aec0397e29d013c87d765c56d177728d4288b4"
10579   - integrity sha512-hB3MbnQlrmqGOigbPB+UsUQ/ZjTisj75FprJ7IDw8pDYQjWmHC7AtmDOHdzpGYPKEEX1mz7UhGJ93LLarPqJNg==
  10576 +vite-plugin-mock@^2.7.1:
  10577 + version "2.7.1"
  10578 + resolved "https://registry.npmjs.org/vite-plugin-mock/-/vite-plugin-mock-2.7.1.tgz#c7d25277f7b88158cd3927c1abee7c7721ed92d3"
  10579 + integrity sha512-UnYcb4UZrpe5fHBNFNEJQetnR32+XxrduTYhyDQTtXmaJ9Yy+JuBfIT6Mueyf7MGPe8T6hNgIEYaMLSUD5+nWA==
10580 10580 dependencies:
10581 10581 "@rollup/plugin-node-resolve" "^11.2.1"
10582 10582 "@types/mockjs" "^1.0.3"
... ... @@ -10647,12 +10647,12 @@ vite-plugin-theme@^0.8.1:
10647 10647 esbuild-plugin-alias "^0.1.2"
10648 10648 tinycolor2 "^1.4.2"
10649 10649  
10650   -vite-plugin-windicss@^1.0.2:
10651   - version "1.0.2"
10652   - resolved "https://registry.npmjs.org/vite-plugin-windicss/-/vite-plugin-windicss-1.0.2.tgz#0d0fd1ff36dc81d348be755e59a8ee471941095c"
10653   - integrity sha512-iTmkxm8Yp+ZCFWLOs//9q3d4hYaBVDlkRGLzNBUNvRW9AQFVea57ZPhglMm9xOt1nW/O68n5Rkg4/In8rrEjHQ==
  10650 +vite-plugin-windicss@^1.0.3:
  10651 + version "1.0.3"
  10652 + resolved "https://registry.npmjs.org/vite-plugin-windicss/-/vite-plugin-windicss-1.0.3.tgz#bd45cfee13777e7b57c37a257ebcb7e73fee94ab"
  10653 + integrity sha512-y9pudcMajdI88PTs49qGftlfAvsLUUhK2Eig+xn5sgxPCbAc3Rj5phXJkRzGDqfmEzGwbpF6JwjmiGmZkm8V+g==
10654 10654 dependencies:
10655   - "@windicss/plugin-utils" "1.0.2"
  10655 + "@windicss/plugin-utils" "1.0.3"
10656 10656 chalk "^4.1.1"
10657 10657 debug "^4.3.2"
10658 10658 windicss "^3.1.3"
... ... @@ -11321,10 +11321,10 @@ yocto-queue@^0.1.0:
11321 11321 resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
11322 11322 integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
11323 11323  
11324   -zrender@5.1.0:
11325   - version "5.1.0"
11326   - resolved "https://registry.npmjs.org/zrender/-/zrender-5.1.0.tgz#b6a84c3aa7ccc6642ee0519901ca4c0835c4d85e"
11327   - integrity sha512-c+8VRx52ycbmqwHeHLlo/BAfIHBl/JZNLM6cfDQFgzIH05yb+f5J9F/fbRsP+zGc8dW9XHuhdt8/iqukgMZSeg==
  11324 +zrender@5.1.1:
  11325 + version "5.1.1"
  11326 + resolved "https://registry.npmjs.org/zrender/-/zrender-5.1.1.tgz#0515f4f8cc0f4742f02a6b8819550a6d13d64c5c"
  11327 + integrity sha512-oeWlmUZPQdS9f5hK4pV21tHPqA3wgQ7CkKkw7l0CCBgWlJ/FP+lRgLFtUBW6yam4JX8y9CdHJo1o587VVrbcoQ==
11328 11328 dependencies:
11329 11329 tslib "2.0.3"
11330 11330  
... ...