szld-libs 0.2.26 → 0.2.27
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/dist/szld-components.es.js +220 -206
- package/dist/szld-components.umd.js +11 -11
- package/es/components/Upload/index.js +22 -7
- package/es/index.js +1 -1
- package/es/utils/image-compression/index.d.ts +1 -1
- package/es/utils/image-compression/index.js +2 -2
- package/es/vite-env.d.ts +1 -0
- package/lib/components/Upload/index.js +22 -7
- package/lib/index.js +1 -1
- package/lib/utils/image-compression/index.d.ts +1 -1
- package/lib/utils/image-compression/index.js +2 -2
- package/lib/vite-env.d.ts +1 -0
- package/package.json +2 -2
- package/es/components/Echarts/index.css +0 -5
- package/es/components/Echarts/index.d.ts +0 -13
- package/es/components/Echarts/index.js +0 -65
- package/es/components/Echarts/vite.svg +0 -1
- package/lib/components/Echarts/index.css +0 -5
- package/lib/components/Echarts/index.d.ts +0 -13
- package/lib/components/Echarts/index.js +0 -81
- package/lib/components/Echarts/vite.svg +0 -1
|
@@ -36,7 +36,7 @@ const UploadFile = (props) => {
|
|
|
36
36
|
] });
|
|
37
37
|
};
|
|
38
38
|
const beforeUpload = (file) => {
|
|
39
|
-
const result = new Promise((resolve, reject) => {
|
|
39
|
+
const result = new Promise(async (resolve, reject) => {
|
|
40
40
|
const acceptList = accept.split(",");
|
|
41
41
|
const suffix = getFileSuffix(file.name) || "";
|
|
42
42
|
if (accept && !acceptList.includes(suffix)) {
|
|
@@ -44,18 +44,33 @@ const UploadFile = (props) => {
|
|
|
44
44
|
reject(false);
|
|
45
45
|
}
|
|
46
46
|
const isLess = file.size / 1024 / 1024 < maxSize;
|
|
47
|
-
if (!isLess) {
|
|
47
|
+
if (!isLess && !compression) {
|
|
48
48
|
message.error(`文件必须小于${maxSize}MB`);
|
|
49
49
|
reject(false);
|
|
50
50
|
}
|
|
51
51
|
if (compression) {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
52
|
+
let s = 0;
|
|
53
|
+
async function compress(f) {
|
|
54
|
+
if (!compression) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const result3 = await compressionImage(
|
|
58
|
+
f,
|
|
55
59
|
compression.quality,
|
|
56
60
|
compression.limit
|
|
57
|
-
)
|
|
58
|
-
|
|
61
|
+
);
|
|
62
|
+
s++;
|
|
63
|
+
if (s >= 5) {
|
|
64
|
+
return result3;
|
|
65
|
+
}
|
|
66
|
+
if (result3.size / 1024 / 1024 > maxSize) {
|
|
67
|
+
await compress(result3);
|
|
68
|
+
} else {
|
|
69
|
+
return result3;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
const result2 = await compress(file);
|
|
73
|
+
resolve(result2);
|
|
59
74
|
}
|
|
60
75
|
resolve(file);
|
|
61
76
|
}).catch((err) => {
|
package/es/index.js
CHANGED
|
@@ -23,7 +23,7 @@ const Demo = () => {
|
|
|
23
23
|
};
|
|
24
24
|
return /* @__PURE__ */ jsxs("div", { style: { height: "100vh" }, children: [
|
|
25
25
|
"测试页面",
|
|
26
|
-
/* @__PURE__ */ jsx(UploadFile, { compression: { quality: 0.
|
|
26
|
+
/* @__PURE__ */ jsx(UploadFile, { compression: { quality: 0.9, limit: 5 }, accept: ".heic,.jpg,.png,.jpeg", maxSize: 5 })
|
|
27
27
|
] });
|
|
28
28
|
};
|
|
29
29
|
ReactDOM.createRoot(document.getElementById("root")).render(
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* 图片压缩方法
|
|
3
3
|
* @param {Object} file 图片文件
|
|
4
4
|
* @param {Nubmber} quality 压缩质量参数 0-1
|
|
5
|
-
* @param {limit} limit
|
|
5
|
+
* @param {limit} limit 最小限制大小,小于该值时不进行压缩, MB
|
|
6
6
|
* @returns 压缩后的新图片
|
|
7
7
|
*/
|
|
8
8
|
declare const compressionImage: (file: File, quality?: number, limit?: number) => Promise<File>;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import UPNG from "./UPNG";
|
|
2
2
|
import { fileToDataURL, dataURLToImage, scaleWidthHeight, canvastoFile, convertQualityToBit } from "./image";
|
|
3
|
-
const compressionImage = async (file, quality = 0.5, limit =
|
|
3
|
+
const compressionImage = async (file, quality = 0.5, limit = 5) => {
|
|
4
4
|
const fileName = file.name;
|
|
5
|
-
if (file.size / 1024 < limit) {
|
|
5
|
+
if (file.size / 1024 / 1024 < limit) {
|
|
6
6
|
return file;
|
|
7
7
|
}
|
|
8
8
|
try {
|
package/es/vite-env.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/// <reference types="vite/client" />
|
|
@@ -37,7 +37,7 @@ const UploadFile = (props) => {
|
|
|
37
37
|
] });
|
|
38
38
|
};
|
|
39
39
|
const beforeUpload = (file) => {
|
|
40
|
-
const result = new Promise((resolve, reject) => {
|
|
40
|
+
const result = new Promise(async (resolve, reject) => {
|
|
41
41
|
const acceptList = accept.split(",");
|
|
42
42
|
const suffix = utils.getFileSuffix(file.name) || "";
|
|
43
43
|
if (accept && !acceptList.includes(suffix)) {
|
|
@@ -45,18 +45,33 @@ const UploadFile = (props) => {
|
|
|
45
45
|
reject(false);
|
|
46
46
|
}
|
|
47
47
|
const isLess = file.size / 1024 / 1024 < maxSize;
|
|
48
|
-
if (!isLess) {
|
|
48
|
+
if (!isLess && !compression) {
|
|
49
49
|
antd.message.error(`文件必须小于${maxSize}MB`);
|
|
50
50
|
reject(false);
|
|
51
51
|
}
|
|
52
52
|
if (compression) {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
53
|
+
let s = 0;
|
|
54
|
+
async function compress(f) {
|
|
55
|
+
if (!compression) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
const result3 = await compressionImage(
|
|
59
|
+
f,
|
|
56
60
|
compression.quality,
|
|
57
61
|
compression.limit
|
|
58
|
-
)
|
|
59
|
-
|
|
62
|
+
);
|
|
63
|
+
s++;
|
|
64
|
+
if (s >= 5) {
|
|
65
|
+
return result3;
|
|
66
|
+
}
|
|
67
|
+
if (result3.size / 1024 / 1024 > maxSize) {
|
|
68
|
+
await compress(result3);
|
|
69
|
+
} else {
|
|
70
|
+
return result3;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
const result2 = await compress(file);
|
|
74
|
+
resolve(result2);
|
|
60
75
|
}
|
|
61
76
|
resolve(file);
|
|
62
77
|
}).catch((err) => {
|
package/lib/index.js
CHANGED
|
@@ -24,7 +24,7 @@ const Demo = () => {
|
|
|
24
24
|
};
|
|
25
25
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { height: "100vh" }, children: [
|
|
26
26
|
"测试页面",
|
|
27
|
-
/* @__PURE__ */ jsxRuntime.jsx(main.UploadFile, { compression: { quality: 0.
|
|
27
|
+
/* @__PURE__ */ jsxRuntime.jsx(main.UploadFile, { compression: { quality: 0.9, limit: 5 }, accept: ".heic,.jpg,.png,.jpeg", maxSize: 5 })
|
|
28
28
|
] });
|
|
29
29
|
};
|
|
30
30
|
ReactDOM.createRoot(document.getElementById("root")).render(
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* 图片压缩方法
|
|
3
3
|
* @param {Object} file 图片文件
|
|
4
4
|
* @param {Nubmber} quality 压缩质量参数 0-1
|
|
5
|
-
* @param {limit} limit
|
|
5
|
+
* @param {limit} limit 最小限制大小,小于该值时不进行压缩, MB
|
|
6
6
|
* @returns 压缩后的新图片
|
|
7
7
|
*/
|
|
8
8
|
declare const compressionImage: (file: File, quality?: number, limit?: number) => Promise<File>;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
const UPNG = require("./UPNG");
|
|
3
3
|
const image = require("./image");
|
|
4
|
-
const compressionImage = async (file, quality = 0.5, limit =
|
|
4
|
+
const compressionImage = async (file, quality = 0.5, limit = 5) => {
|
|
5
5
|
const fileName = file.name;
|
|
6
|
-
if (file.size / 1024 < limit) {
|
|
6
|
+
if (file.size / 1024 / 1024 < limit) {
|
|
7
7
|
return file;
|
|
8
8
|
}
|
|
9
9
|
try {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/// <reference types="vite/client" />
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "szld-libs",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "0.2.
|
|
4
|
+
"version": "0.2.27",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"dev": "vite",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"rimraf": "^4.1.2",
|
|
32
32
|
"typescript": "^4.9.3",
|
|
33
33
|
"vite": "^4.0.0",
|
|
34
|
-
"vite-plugin-build": "^0.
|
|
34
|
+
"vite-plugin-build": "^0.10.0"
|
|
35
35
|
},
|
|
36
36
|
"main": "lib/main.js",
|
|
37
37
|
"module": "es/main.js",
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import * as echarts from 'echarts/core';
|
|
2
|
-
import { BarSeriesOption, LineSeriesOption } from 'echarts/charts';
|
|
3
|
-
import { TitleComponentOption, TooltipComponentOption, GridComponentOption, DatasetComponentOption } from 'echarts/components';
|
|
4
|
-
type ECOption = echarts.ComposeOption<BarSeriesOption | LineSeriesOption | TitleComponentOption | TooltipComponentOption | GridComponentOption | DatasetComponentOption>;
|
|
5
|
-
export interface EchartsProps {
|
|
6
|
-
option: ECOption;
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* @param props : EchartsProps 传入图标配置项
|
|
10
|
-
* 外部包裹一层dom元素定义width和height,内部自动占满
|
|
11
|
-
*/
|
|
12
|
-
declare const Echarts: (props: EchartsProps) => import("react/jsx-runtime").JSX.Element;
|
|
13
|
-
export default Echarts;
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { jsx } from "react/jsx-runtime";
|
|
2
|
-
import * as echarts from "echarts/core";
|
|
3
|
-
import { BarChart } from "echarts/charts";
|
|
4
|
-
import { TitleComponent, TooltipComponent, GridComponent, DatasetComponent, TransformComponent } from "echarts/components";
|
|
5
|
-
import { LabelLayout, UniversalTransition } from "echarts/features";
|
|
6
|
-
import { CanvasRenderer } from "echarts/renderers";
|
|
7
|
-
import { useRef, useEffect } from "react";
|
|
8
|
-
import { useDebounceFn } from "ahooks";
|
|
9
|
-
const main = "echarts-module_main_3e0bc";
|
|
10
|
-
const classes = {
|
|
11
|
-
main
|
|
12
|
-
};
|
|
13
|
-
echarts.use([
|
|
14
|
-
TitleComponent,
|
|
15
|
-
TooltipComponent,
|
|
16
|
-
GridComponent,
|
|
17
|
-
DatasetComponent,
|
|
18
|
-
TransformComponent,
|
|
19
|
-
BarChart,
|
|
20
|
-
LabelLayout,
|
|
21
|
-
UniversalTransition,
|
|
22
|
-
CanvasRenderer
|
|
23
|
-
]);
|
|
24
|
-
const Echarts = (props) => {
|
|
25
|
-
const ref = useRef(null);
|
|
26
|
-
const eRef = useRef(null);
|
|
27
|
-
const resizeRef = useRef(null);
|
|
28
|
-
useEffect(() => {
|
|
29
|
-
if (ref.current && eRef.current) {
|
|
30
|
-
resizeRef.current = new ResizeObserver((entries) => {
|
|
31
|
-
for (const entry of entries) {
|
|
32
|
-
if (entry.target === ref.current) {
|
|
33
|
-
run();
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
});
|
|
37
|
-
resizeRef.current.observe(ref.current);
|
|
38
|
-
}
|
|
39
|
-
return () => {
|
|
40
|
-
var _a;
|
|
41
|
-
ref.current && ((_a = resizeRef.current) == null ? void 0 : _a.unobserve(ref.current));
|
|
42
|
-
resizeRef.current = null;
|
|
43
|
-
};
|
|
44
|
-
}, [ref.current, eRef.current]);
|
|
45
|
-
useEffect(() => {
|
|
46
|
-
if (ref.current && !eRef.current) {
|
|
47
|
-
eRef.current = echarts.init(ref.current);
|
|
48
|
-
}
|
|
49
|
-
}, [ref.current]);
|
|
50
|
-
useEffect(() => {
|
|
51
|
-
if (eRef.current && ref.current) {
|
|
52
|
-
eRef.current.setOption(props.option);
|
|
53
|
-
}
|
|
54
|
-
}, [eRef.current]);
|
|
55
|
-
const onResize = () => {
|
|
56
|
-
if (eRef.current) {
|
|
57
|
-
eRef.current.resize();
|
|
58
|
-
}
|
|
59
|
-
};
|
|
60
|
-
const { run } = useDebounceFn(onResize, { wait: 300 });
|
|
61
|
-
return /* @__PURE__ */ jsx("div", { ref, className: classes.main });
|
|
62
|
-
};
|
|
63
|
-
export {
|
|
64
|
-
Echarts as default
|
|
65
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import * as echarts from 'echarts/core';
|
|
2
|
-
import { BarSeriesOption, LineSeriesOption } from 'echarts/charts';
|
|
3
|
-
import { TitleComponentOption, TooltipComponentOption, GridComponentOption, DatasetComponentOption } from 'echarts/components';
|
|
4
|
-
type ECOption = echarts.ComposeOption<BarSeriesOption | LineSeriesOption | TitleComponentOption | TooltipComponentOption | GridComponentOption | DatasetComponentOption>;
|
|
5
|
-
export interface EchartsProps {
|
|
6
|
-
option: ECOption;
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* @param props : EchartsProps 传入图标配置项
|
|
10
|
-
* 外部包裹一层dom元素定义width和height,内部自动占满
|
|
11
|
-
*/
|
|
12
|
-
declare const Echarts: (props: EchartsProps) => import("react/jsx-runtime").JSX.Element;
|
|
13
|
-
export default Echarts;
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
const jsxRuntime = require("react/jsx-runtime");
|
|
3
|
-
const echarts = require("echarts/core");
|
|
4
|
-
const charts = require("echarts/charts");
|
|
5
|
-
const components = require("echarts/components");
|
|
6
|
-
const features = require("echarts/features");
|
|
7
|
-
const renderers = require("echarts/renderers");
|
|
8
|
-
const react = require("react");
|
|
9
|
-
const ahooks = require("ahooks");
|
|
10
|
-
function _interopNamespaceDefault(e) {
|
|
11
|
-
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
12
|
-
if (e) {
|
|
13
|
-
for (const k in e) {
|
|
14
|
-
if (k !== "default") {
|
|
15
|
-
const d = Object.getOwnPropertyDescriptor(e, k);
|
|
16
|
-
Object.defineProperty(n, k, d.get ? d : {
|
|
17
|
-
enumerable: true,
|
|
18
|
-
get: () => e[k]
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
n.default = e;
|
|
24
|
-
return Object.freeze(n);
|
|
25
|
-
}
|
|
26
|
-
const echarts__namespace = /* @__PURE__ */ _interopNamespaceDefault(echarts);
|
|
27
|
-
const main = "echarts-module_main_3e0bc";
|
|
28
|
-
const classes = {
|
|
29
|
-
main
|
|
30
|
-
};
|
|
31
|
-
echarts__namespace.use([
|
|
32
|
-
components.TitleComponent,
|
|
33
|
-
components.TooltipComponent,
|
|
34
|
-
components.GridComponent,
|
|
35
|
-
components.DatasetComponent,
|
|
36
|
-
components.TransformComponent,
|
|
37
|
-
charts.BarChart,
|
|
38
|
-
features.LabelLayout,
|
|
39
|
-
features.UniversalTransition,
|
|
40
|
-
renderers.CanvasRenderer
|
|
41
|
-
]);
|
|
42
|
-
const Echarts = (props) => {
|
|
43
|
-
const ref = react.useRef(null);
|
|
44
|
-
const eRef = react.useRef(null);
|
|
45
|
-
const resizeRef = react.useRef(null);
|
|
46
|
-
react.useEffect(() => {
|
|
47
|
-
if (ref.current && eRef.current) {
|
|
48
|
-
resizeRef.current = new ResizeObserver((entries) => {
|
|
49
|
-
for (const entry of entries) {
|
|
50
|
-
if (entry.target === ref.current) {
|
|
51
|
-
run();
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
resizeRef.current.observe(ref.current);
|
|
56
|
-
}
|
|
57
|
-
return () => {
|
|
58
|
-
var _a;
|
|
59
|
-
ref.current && ((_a = resizeRef.current) == null ? void 0 : _a.unobserve(ref.current));
|
|
60
|
-
resizeRef.current = null;
|
|
61
|
-
};
|
|
62
|
-
}, [ref.current, eRef.current]);
|
|
63
|
-
react.useEffect(() => {
|
|
64
|
-
if (ref.current && !eRef.current) {
|
|
65
|
-
eRef.current = echarts__namespace.init(ref.current);
|
|
66
|
-
}
|
|
67
|
-
}, [ref.current]);
|
|
68
|
-
react.useEffect(() => {
|
|
69
|
-
if (eRef.current && ref.current) {
|
|
70
|
-
eRef.current.setOption(props.option);
|
|
71
|
-
}
|
|
72
|
-
}, [eRef.current]);
|
|
73
|
-
const onResize = () => {
|
|
74
|
-
if (eRef.current) {
|
|
75
|
-
eRef.current.resize();
|
|
76
|
-
}
|
|
77
|
-
};
|
|
78
|
-
const { run } = ahooks.useDebounceFn(onResize, { wait: 300 });
|
|
79
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: classes.main });
|
|
80
|
-
};
|
|
81
|
-
module.exports = Echarts;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
|