st-comp 0.0.13 → 0.0.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/auto-imports.d.ts +1 -1
  2. package/components.d.ts +2 -1
  3. package/lib/bundle.js +10145 -9151
  4. package/lib/bundle.umd.cjs +10 -12
  5. package/lib/style.css +1 -1
  6. package/lib/talib.wasm +0 -0
  7. package/package.json +4 -1
  8. package/packages/Kline/components/Contextmenu/index.vue +110 -0
  9. package/packages/Kline/components/Tips/index.vue +18 -86
  10. package/packages/Kline/formatKlineData.ts +67 -40
  11. package/packages/Kline/images/buy.svg +1 -0
  12. package/packages/Kline/images/pen.png +0 -0
  13. package/packages/Kline/images/sell.svg +1 -0
  14. package/packages/Kline/images/t.svg +1 -0
  15. package/packages/Kline/index.vue +439 -119
  16. package/packages/Kline/option.ts +316 -0
  17. package/packages/Kline/type.d.ts +192 -24
  18. package/packages/Kline/utils.ts +576 -171
  19. package/packages/Table/components/Button/index.vue +7 -0
  20. package/packages/Table/index.vue +37 -24
  21. package/packages/index.ts +0 -2
  22. package/public/talib.wasm +0 -0
  23. package/src/pages/ChartLayout/index.vue +22 -22
  24. package/src/pages/Kline/api.ts +57 -0
  25. package/src/pages/Kline/components/MultiCycleSingleVariety.vue +728 -0
  26. package/src/pages/Kline/components/SingleCycleSingleVariety.vue +663 -0
  27. package/src/pages/Kline/index.vue +85 -16
  28. package/src/router/routes.ts +0 -5
  29. package/src/style.css +75 -0
  30. package/vite.config.ts +37 -27
  31. package/vitePlugins/testRelese.ts +67 -0
  32. package/packages/Echarts/index.ts +0 -8
  33. package/packages/Echarts/index.vue +0 -113
  34. package/packages/Kline/kline_theme_dark.json +0 -30
  35. package/packages/Kline/kline_theme_light.json +0 -30
  36. package/src/components/Echarts/index.vue +0 -31
  37. package/src/pages/Echarts/index.vue +0 -12
@@ -2,18 +2,9 @@
2
2
  <div class="st-kline-tips">
3
3
  <div class="st-kline-tips-row">
4
4
  <div
5
- v-for="item in klineTips"
5
+ v-for="item in data"
6
6
  class="st-kline-tips-row-item"
7
- :style="{ color: item.color}"
8
- >
9
- {{ item.label }} {{ item.value }}
10
- </div>
11
- </div>
12
- <div class="st-kline-tips-row">
13
- <div
14
- v-for="item in indicatorTips"
15
- class="st-kline-tips-row-item"
16
- :style="{ color: item.color}"
7
+ :style="{ color: item.color }"
17
8
  >
18
9
  {{ item.label }} {{ item.value }}
19
10
  </div>
@@ -22,87 +13,28 @@
22
13
  </template>
23
14
 
24
15
  <script setup lang="ts">
25
- import { computed } from 'vue'
26
- import dayjs from 'dayjs'
27
- import { formatValue, formatPrice } from '../../utils'
28
- import type { KlineDataItem, IndicatorDataItem } from '../../type.d.ts'
29
-
16
+ interface dataType {
17
+ label: string
18
+ value: any
19
+ color: string
20
+ }
30
21
  const props = defineProps({
31
- // 当前激活数据的索引
32
- activeIndex: {
33
- type: Number,
34
- required: true,
35
- },
36
- // K线数据
37
- klineData: {
38
- type: Array,
39
- default: () => []
22
+ // 提示数据
23
+ data: {
24
+ type: Array as () => dataType[],
25
+ default: () => [],
40
26
  },
41
- // 指标线具体数据
42
- indicatorData: {
43
- type: Array,
44
- default: () => []
45
- },
46
- // 指标线配置项
47
- indicatorConfig: {
48
- type: Object,
49
- default: () => {}
50
- },
51
- })
52
-
53
- const klineTips = computed(() => {
54
- const { activeIndex, klineData } = props
55
- if (klineData && klineData[activeIndex]) {
56
- const item: KlineDataItem = klineData[activeIndex] as KlineDataItem
57
- const ratio: number = formatValue((item[4] - item[5]) / item[5] * 100) as number
58
- let ratioColor = '#fff'
59
- if (ratio > 0) {
60
- ratioColor = '#f00'
61
- } else if (ratio < 0) {
62
- ratioColor = '#090'
63
- }
64
- return [
65
- { label: '', value: dayjs(item[0] * 1000).format('YYYY-MM-DD hh:mm'), color: '#fff' },
66
- { label: '开', value: formatValue(item[1]) || '--', color: '#fff' },
67
- { label: '高', value: formatValue(item[2]) || '--', color: '#fff' },
68
- { label: '低', value: formatValue(item[3]) || '--', color: '#fff' },
69
- { label: '收', value: formatValue(item[4]) || '--', color: '#fff' },
70
- { label: '额', value: formatPrice(item[7]) || '--', color: '#fff' },
71
- { label: '涨跌', value: typeof ratio === 'number' ? `${ratio}%` : '--', color: ratioColor },
72
- ]
73
- }
74
- return []
75
27
  })
76
-
77
- const indicatorTips = computed(() => {
78
- const { activeIndex, indicatorData, indicatorConfig } = props
79
- if (indicatorData && indicatorData[activeIndex]) {
80
- const item: IndicatorDataItem = indicatorData[activeIndex] as IndicatorDataItem
81
- return Object.keys(item).filter(key => key !== 'datetime').map(key => {
82
- let color = 'rgba(238, 238, 238, 0.5)'
83
- if (indicatorConfig && indicatorConfig[key]) {
84
- color = `#${indicatorConfig[key].split('#')[1]}`
85
- }
86
- return {
87
- label: key,
88
- value: formatValue(item[key]) || '--',
89
- color,
90
- }
91
- })
92
- }
93
- return []
94
- })
95
-
96
28
  </script>
97
29
 
98
30
  <style lang="scss" scoped>
99
- .st-kline-tips {
100
- font-size: 12px;
101
- &-row {
102
- &-item {
103
- display: inline-block;
104
- margin-right: 10px;
31
+ .st-kline-tips {
32
+ font-size: 12px;
33
+ &-row {
34
+ &-item {
35
+ display: inline-block;
36
+ margin-right: 10px;
37
+ }
105
38
  }
106
39
  }
107
- }
108
40
  </style>
@@ -1,13 +1,23 @@
1
1
  import * as talib from 'talib.js'
2
+ import type { KlineDataItem, IndicatorConfigType, InFormatKlineData } from './type.d.ts'
3
+
4
+ interface InformatData {
5
+ time: string[];
6
+ open: number[];
7
+ close: number[];
8
+ high: number[];
9
+ low: number[];
10
+ kLineData: [number, number, number, number][];
11
+ }
2
12
 
3
13
  let isInit = false // 是否初始化
4
14
  let loading = true // 初始化loading
5
- let requestPromise = [] // 用于存储loading中的计算请求
15
+ let requestPromise: Function[] = [] // 用于存储loading中的计算请求
6
16
 
7
17
  // 指标线计算后处理
8
- function shiftList(list, n) {
18
+ function shiftList(list: any[], n: number) {
9
19
  let len = list.length;
10
- if (n <= 1 | n > len){
20
+ if (n <= 1 || n > len){
11
21
  return new Array(len).fill(null)
12
22
  }
13
23
  return [
@@ -30,16 +40,16 @@ function shiftList(list, n) {
30
40
  // ZIG
31
41
 
32
42
  // 指标线计算方法
33
- const fnMap = {
43
+ const fnMap: any = {
34
44
  // 多空线
35
- DKX: data => {
45
+ DKX: (data: InformatData) => {
36
46
  const { open, close, high, low } = data
37
47
  const midValue = open.map((item, index) => (close[index] * 3 + high[index] + low[index] + item) / 6);
38
48
  const { output } = talib.WMA({ inReal: midValue, timePeriod: 20 })
39
49
  return shiftList(output, 20)
40
50
  },
41
51
  // ?
42
- MADKX: data => {
52
+ MADKX: (data: InformatData) => {
43
53
  const { open, close, high, low } = data
44
54
  const midValue = open.map((item, index) => (close[index] * 3 + high[index] + low[index] + item) / 6);
45
55
  const DKXData = talib.WMA({ inReal: midValue, timePeriod: 20 })
@@ -47,79 +57,91 @@ const fnMap = {
47
57
  return shiftList(output, 29)
48
58
  },
49
59
  // ?
50
- EMA: (data, cycle = 1) => {
60
+ EMA: (data: InformatData, cycle: number): number[] => {
51
61
  const { close } = data
52
62
  const { output } = talib.EMA({ inReal: close, timePeriod: cycle })
53
63
  return shiftList(output, cycle)
54
64
  },
55
65
  // ?
56
- EMA60: data => {
66
+ EMA30: (data: InformatData): number[] => {
67
+ return fnMap.EMA(data, 30)
68
+ },
69
+ // ?
70
+ EMA60: (data: InformatData): number[] => {
57
71
  return fnMap.EMA(data, 60)
58
72
  },
59
73
  // ?
60
- EMA120: data => {
74
+ EMA120: (data: InformatData): number[] => {
61
75
  return fnMap.EMA(data, 120)
62
76
  },
63
77
  // ?
64
- EMA240: data => {
78
+ EMA240: (data: InformatData): number[] => {
65
79
  return fnMap.EMA(data, 240)
66
80
  },
67
81
  // ?
68
- HHV: (data, cycle) => {
82
+ EMA360: (data: InformatData): number[] => {
83
+ return fnMap.EMA(data, 240)
84
+ },
85
+ // ?
86
+ EMA720: (data: InformatData): number[] => {
87
+ return fnMap.EMA(data, 240)
88
+ },
89
+ // ?
90
+ HHV: (data: InformatData, cycle: number): number[] => {
69
91
  const { high } = data
70
92
  const { output } = talib.MAX({ inReal: high, timePeriod: cycle })
71
93
  return shiftList(output, cycle)
72
94
  },
73
95
  // ?
74
- HHV30: data => {
96
+ HHV30: (data: InformatData): number[] => {
75
97
  return fnMap.HHV(data, 30)
76
98
  },
77
99
  // ?
78
- LLV: (data, cycle) => {
100
+ LLV: (data: InformatData, cycle: number): number[] => {
79
101
  const { high } = data
80
102
  const { output } = talib.MIN({ inReal: high, timePeriod: cycle })
81
103
  return shiftList(output, cycle)
82
104
  },
83
105
  // ?
84
- LLV30: data => {
106
+ LLV30: (data: InformatData): number[] => {
85
107
  return fnMap.LLV(data, 30)
86
108
  },
87
109
  // ?
88
- MA: (data, cycle = 0) => {
110
+ MA: (data: InformatData, cycle: number): number[] => {
89
111
  const { close } = data
90
112
  const { output } = talib.SMA({ inReal: close, timePeriod: cycle })
91
113
  return shiftList(output, cycle)
92
114
  },
93
115
  // ?
94
- MA5: data => {
116
+ MA5: (data: InformatData): number[] => {
95
117
  return fnMap.MA(data, 5)
96
118
  },
97
119
  // ?
98
- MA10: data => {
120
+ MA10: (data: InformatData): number[] => {
99
121
  return fnMap.MA(data, 10)
100
122
  },
101
123
  // ?
102
- MA20: data => {
124
+ MA20: (data: InformatData): number[] => {
103
125
  return fnMap.MA(data, 20)
104
126
  },
105
127
  // ?
106
- MA60: data => {
128
+ MA60: (data: InformatData): number[] => {
107
129
  return fnMap.MA(data, 60)
108
130
  },
109
131
  // ?
110
- BBI: data => {
132
+ BBI: (data: InformatData): number[] => {
111
133
  const MA3 = fnMap.MA(data, 3)
112
134
  const MA6 = fnMap.MA(data, 6)
113
135
  const MA12 = fnMap.MA(data, 12)
114
136
  const MA24 = fnMap.MA(data, 24)
115
- return MA3.map((item, index) => {
137
+ return MA3.map((item: number, index: number) => {
116
138
  return (item + MA6[index] + MA12[index] + MA24[index]) / 4
117
139
  })
118
140
  },
119
141
  }
120
142
 
121
143
  // 获取指标线数据函数
122
- const getData = (key, data) => {
144
+ const getData = (key: string, data: InformatData) => {
123
145
  if (fnMap[key]) {
124
146
  return fnMap[key](data)
125
147
  } else {
@@ -128,26 +150,26 @@ const getData = (key, data) => {
128
150
  }
129
151
 
130
152
  // 数据初始化
131
- const initData = (data) => {
132
- const time = []
133
- const open = []
134
- const close = []
135
- const high = []
136
- const low = []
137
- const kLineData = []
153
+ const initData = (data: KlineDataItem[]): InformatData => {
154
+ const time: string[] = []
155
+ const open: number[] = []
156
+ const close: number[] = []
157
+ const high: number[] = []
158
+ const low: number[] = []
159
+ const kLineData: [number, number, number, number][] = []
138
160
  data.forEach(item => {
139
- open.push(item.open)
140
- close.push(item.close)
141
- high.push(item.high)
142
- low.push(item.low)
143
- time.push(item.genTime || item.dayTimeStr)
144
- kLineData.push([item.open, item.close, item.low, item.high])
161
+ time.push(item[0])
162
+ open.push(item[1])
163
+ close.push(item[4])
164
+ high.push(item[2])
165
+ low.push(item[3])
166
+ kLineData.push([item[1], item[4], item[3], item[2]])
145
167
  })
146
168
  return { time, open, close, high, low, kLineData }
147
169
  }
148
170
 
149
171
  // 导出数据长度处理
150
- const sliceData = (data, length) => {
172
+ const sliceData = (data: any[], length: number) => {
151
173
  return data.length > length ? data.slice(data.length - length) : data
152
174
  }
153
175
 
@@ -163,15 +185,15 @@ const init = async() => {
163
185
  })
164
186
  } else if(loading) {
165
187
  // 正在初始化
166
- return new Promise((resolve) => {
188
+ return new Promise((resolve: Function) => {
167
189
  requestPromise.push(resolve)
168
190
  })
169
191
  }
170
192
  }
171
193
 
172
194
  // 主函数
173
- const formatKlineData = async (data, indicatorInfo, totalBarCount) => {
174
- const formatData = initData(data)
195
+ const formatKlineData = async (data: KlineDataItem[], indicatorInfo: IndicatorConfigType, totalBarCount: number): Promise<InFormatKlineData> => {
196
+ const formatData: InformatData = initData(data)
175
197
 
176
198
  await init()
177
199
 
@@ -179,12 +201,17 @@ const formatKlineData = async (data, indicatorInfo, totalBarCount) => {
179
201
  originData: sliceData(data, totalBarCount),
180
202
  kLine: sliceData(formatData.kLineData, totalBarCount),
181
203
  time: sliceData(formatData.time, totalBarCount),
182
- indicator: Object.keys(indicatorInfo).reduce((res, key) => {
204
+ indicator: Object.keys(indicatorInfo).reduce((res: any[], key: string) => {
205
+ let color = 'rgba(238, 238, 238, 0.5)'
206
+ if (indicatorInfo[key]) {
207
+ color = `#${(indicatorInfo[key] as any).split('#')[1]}`
208
+ }
183
209
  if (key !== 'WINDOW') {
184
210
  return [
185
211
  ...res,
186
212
  {
187
213
  key,
214
+ color,
188
215
  data: sliceData(getData(key, formatData), totalBarCount)
189
216
  }
190
217
  ]
@@ -0,0 +1 @@
1
+ <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1683703238725" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2625" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M198.016 109.738667A77.866667 77.866667 0 0 0 170.666667 167.68l0.512 418.944c0 22.869333 6.4 48 19.029333 75.306667 12.672 27.221333 27.989333 48.938667 45.952 64.938666l211.157333 188.202667c17.066667 15.488 40.576 23.978667 64.938667 23.594667 25.685333-0.085333 47.36-7.936 64.981333-23.594667l211.2-188.202667c17.92-16 33.194667-37.632 45.866667-64.938666 12.672-27.306667 18.773333-52.224 18.517333-74.922667L853.333333 167.253333c0-22.272-8.96-41.472-26.837333-57.472-17.578667-15.616-39.338667-23.893333-64.938667-24.405333l-499.029333 0.469333a93.312 93.312 0 0 0-64.512 23.893334z" fill="#FF0000" p-id="2626"></path><path d="M170.709333 167.722667c0.128-21.76 9.984-42.666667 27.392-57.941334a93.312 93.312 0 0 1 64.469334-23.893333L761.6 85.333333c25.6 0.554667 47.36 8.789333 64.938667 24.405334 17.92 16 26.88 35.2 26.88 57.472l-0.554667 419.84c0.298667 22.698667-5.845333 47.616-18.517333 74.922666-12.629333 27.306667-27.946667 48.896-45.824 64.896l-211.242667 188.202667c-17.578667 15.701333-39.253333 23.509333-64.938667 23.594667a94.72 94.72 0 0 1-64.981333-23.594667l-211.157333-188.16c-17.92-16.042667-33.28-37.717333-45.909334-64.981333-12.672-27.306667-19.029333-52.394667-19.029333-75.306667L170.666667 167.722667z m42.666667 0.256l0.554667 418.688c0 16.213333 4.821333 35.328 15.018666 57.344 10.368 22.272 22.357333 39.210667 35.626667 51.072l211.413333 188.416c8.96 8.106667 21.888 12.8 36.224 12.544 15.530667-0.042667 27.093333-4.266667 36.693334-12.8l211.157333-188.117334c13.312-11.946667 25.301333-28.842667 35.584-51.072 10.112-21.845333 14.762667-40.576 14.506667-57.045333l0.554666-419.754667c0-9.898667-3.584-17.621333-12.458666-25.6a54.698667 54.698667 0 0 0-36.608-13.610666l-499.626667 0.469333a51.328 51.328 0 0 0-35.754667 13.312 36.565333 36.565333 0 0 0-12.501333 21.461333l-0.426667 4.693334z" fill="#AE0000" p-id="2627"></path><path d="M384 654.122667h153.514667c96.768 0 142.762667-48.981333 142.762666-117.077334 0-59.733333-33.450667-88.405333-84.821333-97.962666v-1.792c48.981333-15.530667 66.901333-46.592 66.901333-89.6 0-65.109333-40.618667-103.338667-134.997333-103.338667H384v409.770667z m72.874667-54.954667v-131.413333h66.304c51.968 0 80.042667 17.92 80.042666 65.109333 0 44.8-26.282667 66.304-75.861333 66.304h-70.485333z m0-180.394667V298.709333h60.330666c47.189333 0 72.277333 14.933333 72.277334 59.136 0 46.592-32.256 60.928-75.264 60.928h-57.344z" fill="#FFFFFF" p-id="2628"></path></svg>
Binary file
@@ -0,0 +1 @@
1
+ <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1683703241664" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2777" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M198.016 109.738667A77.866667 77.866667 0 0 0 170.666667 167.68l0.512 418.944c0 22.869333 6.4 48 19.029333 75.306667 12.672 27.221333 27.989333 48.938667 45.952 64.938666l211.157333 188.202667c17.066667 15.488 40.576 23.978667 64.938667 23.594667 25.685333-0.085333 47.36-7.936 64.981333-23.594667l211.2-188.202667c17.92-16 33.194667-37.632 45.866667-64.938666 12.672-27.306667 18.773333-52.224 18.517333-74.922667L853.333333 167.253333c0-22.272-8.96-41.472-26.837333-57.472-17.578667-15.616-39.338667-23.893333-64.938667-24.405333l-499.029333 0.469333a93.312 93.312 0 0 0-64.512 23.893334z" fill="#54AB30" p-id="2778"></path><path d="M170.666667 167.68c0.128-21.76 9.941333-42.666667 27.349333-57.941333a93.312 93.312 0 0 1 64.512-23.893334L761.557333 85.333333c25.6 0.554667 47.36 8.789333 64.938667 24.405334 17.92 16 26.837333 35.2 26.837333 57.472l-0.512 419.84c0.298667 22.656-5.845333 47.616-18.517333 74.88-12.672 27.306667-27.946667 48.938667-45.866667 64.938666l-211.2 188.202667c-17.621333 15.658667-39.253333 23.509333-64.981333 23.594667a94.72 94.72 0 0 1-64.938667-23.594667l-211.2-188.202667c-17.92-16-33.237333-37.717333-45.909333-64.938666-12.629333-27.306667-19.029333-52.437333-19.029333-75.306667L170.666667 167.68z m42.624 0.256l0.554666 418.688c0 16.170667 4.864 35.328 15.061334 57.344 10.368 22.272 22.314667 39.168 35.626666 51.029333l211.413334 188.416c8.96 8.106667 21.888 12.8 36.224 12.586667 15.530667-0.042667 27.093333-4.266667 36.693333-12.8l211.114667-188.16c13.354667-11.946667 25.301333-28.842667 35.626666-51.072 10.112-21.76 14.762667-40.533333 14.506667-57.002667L810.666667 167.210667c0-9.898667-3.584-17.621333-12.501334-25.6A54.698667 54.698667 0 0 0 761.6 128l-499.626667 0.469333a51.328 51.328 0 0 0-35.754666 13.269334 36.565333 36.565333 0 0 0-12.501334 21.504l-0.426666 4.693333z" fill="#388D14" p-id="2779"></path><path d="M506.453333 674.730667c99.157333 0 146.346667-48.384 146.346667-126.037334 0-72.874667-38.826667-99.754667-103.338667-118.272l-38.229333-11.946666c-40.618667-11.349333-52.565333-25.088-52.565333-57.344 0-32.853333 23.893333-50.773333 66.901333-50.773334 45.397333 0 78.848 9.557333 104.533333 20.309334V273.322667c-22.698667-11.946667-51.968-22.101333-105.728-22.101334-92.586667 0-137.386667 47.189333-137.386666 116.48 0 69.290667 35.242667 100.352 93.184 116.48l38.826666 10.752c44.8 13.738667 59.733333 26.88 59.733334 60.928 0 37.034667-23.296 59.733333-78.250667 59.733334-44.8 0-83.626667-10.752-116.48-25.088v57.941333c28.074667 14.933333 68.693333 26.282667 122.453333 26.282667z" fill="#FFFFFF" p-id="2780"></path></svg>
@@ -0,0 +1 @@
1
+ <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1683703228202" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3078" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M198.016 109.738667A77.866667 77.866667 0 0 0 170.666667 167.68l0.512 418.944c0 22.869333 6.4 48 19.029333 75.306667 12.672 27.221333 27.989333 48.938667 45.952 64.938666l211.157333 188.202667c17.066667 15.488 40.576 23.978667 64.938667 23.594667 25.685333-0.085333 47.36-7.936 64.981333-23.594667l211.2-188.202667c17.92-16 33.194667-37.632 45.866667-64.938666 12.672-27.306667 18.773333-52.224 18.517333-74.922667L853.333333 167.253333c0-22.272-8.96-41.472-26.837333-57.472-17.578667-15.616-39.338667-23.893333-64.938667-24.405333l-499.029333 0.469333a93.312 93.312 0 0 0-64.512 23.893334z" fill="#C880FF" p-id="3079"></path><path d="M170.666667 167.68c0.128-21.76 9.941333-42.666667 27.349333-57.941333a93.312 93.312 0 0 1 64.512-23.893334L761.557333 85.333333c25.6 0.554667 47.36 8.789333 64.938667 24.405334 17.92 16 26.837333 35.2 26.837333 57.472l-0.512 419.84c0.298667 22.656-5.845333 47.616-18.517333 74.88-12.672 27.306667-27.946667 48.938667-45.866667 64.938666l-211.2 188.202667c-17.621333 15.658667-39.253333 23.509333-64.981333 23.594667a94.72 94.72 0 0 1-64.938667-23.594667l-211.2-188.202667c-17.92-16-33.237333-37.717333-45.909333-64.938666-12.629333-27.306667-19.029333-52.437333-19.029333-75.306667L170.666667 167.68z m42.624 0.256l0.554666 418.688c0 16.170667 4.864 35.328 15.061334 57.344 10.368 22.272 22.314667 39.168 35.626666 51.029333l211.413334 188.416c8.96 8.106667 21.888 12.8 36.224 12.586667 15.530667-0.042667 27.093333-4.266667 36.693333-12.8l211.114667-188.16c13.354667-11.946667 25.301333-28.842667 35.626666-51.072 10.112-21.76 14.762667-40.533333 14.506667-57.002667L810.666667 167.210667c0-9.898667-3.584-17.621333-12.501334-25.6A54.698667 54.698667 0 0 0 761.6 128l-499.626667 0.469333a51.328 51.328 0 0 0-35.754666 13.269334 36.565333 36.565333 0 0 0-12.501334 21.504l-0.426666 4.693333z" fill="#AE44FF" p-id="3080"></path><path d="M475.306667 658.218667h73.472V306.389333h116.48V248.448h-307.626667v57.941333h117.674667z" fill="#FFFFFF" p-id="3081"></path></svg>