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.
- package/auto-imports.d.ts +1 -1
- package/components.d.ts +2 -1
- package/lib/bundle.js +10145 -9151
- package/lib/bundle.umd.cjs +10 -12
- package/lib/style.css +1 -1
- package/lib/talib.wasm +0 -0
- package/package.json +4 -1
- package/packages/Kline/components/Contextmenu/index.vue +110 -0
- package/packages/Kline/components/Tips/index.vue +18 -86
- package/packages/Kline/formatKlineData.ts +67 -40
- package/packages/Kline/images/buy.svg +1 -0
- package/packages/Kline/images/pen.png +0 -0
- package/packages/Kline/images/sell.svg +1 -0
- package/packages/Kline/images/t.svg +1 -0
- package/packages/Kline/index.vue +439 -119
- package/packages/Kline/option.ts +316 -0
- package/packages/Kline/type.d.ts +192 -24
- package/packages/Kline/utils.ts +576 -171
- package/packages/Table/components/Button/index.vue +7 -0
- package/packages/Table/index.vue +37 -24
- package/packages/index.ts +0 -2
- package/public/talib.wasm +0 -0
- package/src/pages/ChartLayout/index.vue +22 -22
- package/src/pages/Kline/api.ts +57 -0
- package/src/pages/Kline/components/MultiCycleSingleVariety.vue +728 -0
- package/src/pages/Kline/components/SingleCycleSingleVariety.vue +663 -0
- package/src/pages/Kline/index.vue +85 -16
- package/src/router/routes.ts +0 -5
- package/src/style.css +75 -0
- package/vite.config.ts +37 -27
- package/vitePlugins/testRelese.ts +67 -0
- package/packages/Echarts/index.ts +0 -8
- package/packages/Echarts/index.vue +0 -113
- package/packages/Kline/kline_theme_dark.json +0 -30
- package/packages/Kline/kline_theme_light.json +0 -30
- package/src/components/Echarts/index.vue +0 -31
- 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
|
|
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
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
16
|
+
interface dataType {
|
|
17
|
+
label: string
|
|
18
|
+
value: any
|
|
19
|
+
color: string
|
|
20
|
+
}
|
|
30
21
|
const props = defineProps({
|
|
31
|
-
//
|
|
32
|
-
|
|
33
|
-
type:
|
|
34
|
-
|
|
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
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
kLineData.push([item
|
|
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>
|