@bm-fe/icons 0.2.0-beta.0 → 0.2.0-beta.2
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/CHANGELOG.md +14 -1
- package/README.md +35 -0
- package/core/manifest.json +41 -1
- package/package.json +14 -13
- package/react/dist/Back.tsx +35 -0
- package/react/dist/EmptyIllustration.tsx +45 -0
- package/react/dist/Envelope.tsx +42 -0
- package/react/dist/ErrorIllustration.tsx +47 -0
- package/react/dist/MarkRead.tsx +32 -0
- package/react/dist/index.d.mts +1198 -18
- package/react/dist/index.d.ts +1198 -18
- package/react/dist/index.js +1320 -1087
- package/react/dist/index.js.map +1 -1
- package/react/dist/index.mjs +1299 -1071
- package/react/dist/index.mjs.map +1 -1
- package/react/dist/index.ts +5 -0
- package/svg/product/back.svg +9 -0
- package/svg/product/empty-illustration.svg +25 -0
- package/svg/product/envelope.svg +16 -0
- package/svg/product/error-illustration.svg +21 -0
- package/svg/product/mark-read.svg +6 -0
- package/react/dist/MobileRechard.tsx +0 -16
- package/react/dist/Smart wallet.tsx +0 -16
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,20 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.2.0-beta.1] - 2026-03-18
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- 生成器将 SVG 连字符属性(如 `clip-path`)转换为 React camelCase(`clipPath`)
|
|
13
|
+
|
|
14
|
+
## [0.2.0-beta.0] - 2026-03-18
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
|
|
18
|
+
- **BREAKING**: 重新设计 API — 移除 IconBase 包装组件,改为直接导出 SVG 组件
|
|
19
|
+
- 组件使用 `forwardRef`,支持 `size` prop 和 `currentColor`
|
|
20
|
+
- 重写生成器脚本,直接输出 SVG 组件
|
|
21
|
+
|
|
8
22
|
## [0.1.0-beta.0] - 2024-01-XX
|
|
9
23
|
|
|
10
24
|
### Added
|
|
@@ -19,4 +33,3 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
19
33
|
### Changed
|
|
20
34
|
|
|
21
35
|
- 移除 Vue2/Vue3 适配层,仅保留 React 适配层
|
|
22
|
-
|
package/README.md
CHANGED
|
@@ -38,6 +38,31 @@ function App() {
|
|
|
38
38
|
}
|
|
39
39
|
```
|
|
40
40
|
|
|
41
|
+
### 站内信/通知相关图标(本次新增)
|
|
42
|
+
|
|
43
|
+
```tsx
|
|
44
|
+
import { Envelope, Back, MarkRead, EmptyIllustration, ErrorIllustration } from '@bm-fe/icons';
|
|
45
|
+
|
|
46
|
+
export function Example() {
|
|
47
|
+
return (
|
|
48
|
+
<div style={{ display: 'grid', gap: 12, color: '#111' }}>
|
|
49
|
+
{/* 线性图标:跟随 currentColor */}
|
|
50
|
+
<div style={{ display: 'flex', gap: 12, alignItems: 'center' }}>
|
|
51
|
+
<Envelope size={20} />
|
|
52
|
+
<Back size={24} />
|
|
53
|
+
<MarkRead size={24} />
|
|
54
|
+
</div>
|
|
55
|
+
|
|
56
|
+
{/* 插画:默认使用 CSS 变量;若未提供变量会使用 fallback 色,便于预览 */}
|
|
57
|
+
<div style={{ display: 'flex', gap: 24, alignItems: 'center' }}>
|
|
58
|
+
<EmptyIllustration size={96} />
|
|
59
|
+
<ErrorIllustration size={96} />
|
|
60
|
+
</div>
|
|
61
|
+
</div>
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
41
66
|
### React 组件 Props
|
|
42
67
|
|
|
43
68
|
| Prop | 类型 | 默认值 | 说明 |
|
|
@@ -290,6 +315,16 @@ function getFlagUrl(countryCode) {
|
|
|
290
315
|
- **currentColor**: 图标颜色继承父元素的 `color` 属性,可通过 CSS 自定义颜色
|
|
291
316
|
- **固定色**: 图标保持原始设计颜色,不支持颜色自定义
|
|
292
317
|
|
|
318
|
+
### 插画类 SVG 的 CSS 变量说明
|
|
319
|
+
|
|
320
|
+
部分插画(例如 `EmptyIllustration` / `ErrorIllustration`)使用 CSS 变量着色:
|
|
321
|
+
|
|
322
|
+
- `--notification-empty-icon`
|
|
323
|
+
- `--notification-empty-bg`
|
|
324
|
+
- `--notification-bg`
|
|
325
|
+
|
|
326
|
+
当宿主没有提供这些变量时,SVG 内部会使用 `var(--token, fallback)` 的 fallback 颜色,因此在编辑器/预览器里也能看到图形。
|
|
327
|
+
|
|
293
328
|
## 尺寸规范
|
|
294
329
|
|
|
295
330
|
推荐尺寸:`12 | 16 | 20 | 24 | 32`
|
package/core/manifest.json
CHANGED
|
@@ -142,6 +142,14 @@
|
|
|
142
142
|
"componentName": "AZN",
|
|
143
143
|
"colorStrategy": "fixed"
|
|
144
144
|
},
|
|
145
|
+
{
|
|
146
|
+
"name": "back",
|
|
147
|
+
"category": "product",
|
|
148
|
+
"file": "svg/product/back.svg",
|
|
149
|
+
"componentName": "Back",
|
|
150
|
+
"colorStrategy": "currentColor",
|
|
151
|
+
"subcategory": "line"
|
|
152
|
+
},
|
|
145
153
|
{
|
|
146
154
|
"name": "BDT",
|
|
147
155
|
"category": "currency",
|
|
@@ -422,6 +430,30 @@
|
|
|
422
430
|
"componentName": "EGP",
|
|
423
431
|
"colorStrategy": "fixed"
|
|
424
432
|
},
|
|
433
|
+
{
|
|
434
|
+
"name": "empty-illustration",
|
|
435
|
+
"category": "product",
|
|
436
|
+
"file": "svg/product/empty-illustration.svg",
|
|
437
|
+
"componentName": "EmptyIllustration",
|
|
438
|
+
"colorStrategy": "fixed",
|
|
439
|
+
"subcategory": "line"
|
|
440
|
+
},
|
|
441
|
+
{
|
|
442
|
+
"name": "envelope",
|
|
443
|
+
"category": "product",
|
|
444
|
+
"file": "svg/product/envelope.svg",
|
|
445
|
+
"componentName": "Envelope",
|
|
446
|
+
"colorStrategy": "currentColor",
|
|
447
|
+
"subcategory": "line"
|
|
448
|
+
},
|
|
449
|
+
{
|
|
450
|
+
"name": "error-illustration",
|
|
451
|
+
"category": "product",
|
|
452
|
+
"file": "svg/product/error-illustration.svg",
|
|
453
|
+
"componentName": "ErrorIllustration",
|
|
454
|
+
"colorStrategy": "fixed",
|
|
455
|
+
"subcategory": "line"
|
|
456
|
+
},
|
|
425
457
|
{
|
|
426
458
|
"name": "EUR",
|
|
427
459
|
"category": "currency",
|
|
@@ -766,6 +798,14 @@
|
|
|
766
798
|
"componentName": "Markets",
|
|
767
799
|
"colorStrategy": "currentColor"
|
|
768
800
|
},
|
|
801
|
+
{
|
|
802
|
+
"name": "mark-read",
|
|
803
|
+
"category": "product",
|
|
804
|
+
"file": "svg/product/mark-read.svg",
|
|
805
|
+
"componentName": "MarkRead",
|
|
806
|
+
"colorStrategy": "currentColor",
|
|
807
|
+
"subcategory": "line"
|
|
808
|
+
},
|
|
769
809
|
{
|
|
770
810
|
"name": "medium",
|
|
771
811
|
"category": "product",
|
|
@@ -2393,5 +2433,5 @@
|
|
|
2393
2433
|
"file": "svg/flags/zw.png"
|
|
2394
2434
|
}
|
|
2395
2435
|
],
|
|
2396
|
-
"generatedAt": "2026-
|
|
2436
|
+
"generatedAt": "2026-04-08T08:29:45.114Z"
|
|
2397
2437
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bm-fe/icons",
|
|
3
|
-
"version": "0.2.0-beta.
|
|
3
|
+
"version": "0.2.0-beta.2",
|
|
4
4
|
"description": "BitMart 图标库(SVG 源 + React 适配层)",
|
|
5
5
|
"main": "react/dist/index.js",
|
|
6
6
|
"types": "react/dist/index.d.ts",
|
|
@@ -28,9 +28,19 @@
|
|
|
28
28
|
"README.md",
|
|
29
29
|
"CHANGELOG.md"
|
|
30
30
|
],
|
|
31
|
+
"scripts": {
|
|
32
|
+
"build": "npm run optimize:images && npm run generate:manifest && npm run generate:react && npm run build:react",
|
|
33
|
+
"optimize:images": "npx tsx scripts/optimize-images.ts",
|
|
34
|
+
"generate:manifest": "npx tsx scripts/generate-manifest.ts",
|
|
35
|
+
"generate:react": "npx tsx scripts/generate-react.ts",
|
|
36
|
+
"build:react": "cd react && npx tsup",
|
|
37
|
+
"type-check": "tsc --noEmit",
|
|
38
|
+
"dev": "echo 'Icons: run build to generate components'",
|
|
39
|
+
"yalc:publish": "yalc publish --push"
|
|
40
|
+
},
|
|
31
41
|
"peerDependencies": {
|
|
32
|
-
"react": "^18.0.0",
|
|
33
|
-
"react-dom": "^18.0.0"
|
|
42
|
+
"react": "^18.0.0 || ^19.0.0",
|
|
43
|
+
"react-dom": "^18.0.0 || ^19.0.0"
|
|
34
44
|
},
|
|
35
45
|
"devDependencies": {
|
|
36
46
|
"@types/node": "^20.10.0",
|
|
@@ -56,14 +66,5 @@
|
|
|
56
66
|
"type": "git",
|
|
57
67
|
"url": "https://gitlab.bitmartpro.com/exchange/web-frontend/infra/design-tokens.git",
|
|
58
68
|
"directory": "packages/icons"
|
|
59
|
-
},
|
|
60
|
-
"scripts": {
|
|
61
|
-
"build": "npm run optimize:images && npm run generate:manifest && npm run generate:react && npm run build:react",
|
|
62
|
-
"optimize:images": "npx tsx scripts/optimize-images.ts",
|
|
63
|
-
"generate:manifest": "npx tsx scripts/generate-manifest.ts",
|
|
64
|
-
"generate:react": "npx tsx scripts/generate-react.ts",
|
|
65
|
-
"build:react": "cd react && npx tsup",
|
|
66
|
-
"type-check": "tsc --noEmit",
|
|
67
|
-
"dev": "echo 'Icons: run build to generate components'"
|
|
68
69
|
}
|
|
69
|
-
}
|
|
70
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
export interface BackProps extends React.SVGProps<SVGSVGElement> {
|
|
4
|
+
/** Icon size — number (px) or string ("1.5em"). Default: "1em" */
|
|
5
|
+
size?: number | string;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export const Back = React.forwardRef<SVGSVGElement, BackProps>(
|
|
9
|
+
({ size, width, height, className, ...props }, ref) => {
|
|
10
|
+
const sizeValue = typeof size === 'number' ? `${size}px` : size;
|
|
11
|
+
return (
|
|
12
|
+
<svg
|
|
13
|
+
ref={ref}
|
|
14
|
+
width={sizeValue ?? width ?? '1em'}
|
|
15
|
+
height={sizeValue ?? height ?? '1em'}
|
|
16
|
+
viewBox="0 0 24 24"
|
|
17
|
+
fill="currentColor"
|
|
18
|
+
role="img"
|
|
19
|
+
aria-hidden="true"
|
|
20
|
+
className={className}
|
|
21
|
+
{...props}
|
|
22
|
+
>
|
|
23
|
+
<path
|
|
24
|
+
d="M15 19l-7-7 7-7"
|
|
25
|
+
stroke="currentColor"
|
|
26
|
+
strokeWidth="2"
|
|
27
|
+
strokeLinecap="round"
|
|
28
|
+
strokeLinejoin="round"
|
|
29
|
+
/>
|
|
30
|
+
</svg>
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
Back.displayName = 'Back';
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
export interface EmptyIllustrationProps extends React.SVGProps<SVGSVGElement> {
|
|
4
|
+
/** Icon size — number (px) or string ("1.5em"). Default: "1em" */
|
|
5
|
+
size?: number | string;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export const EmptyIllustration = React.forwardRef<SVGSVGElement, EmptyIllustrationProps>(
|
|
9
|
+
({ size, width, height, className, ...props }, ref) => {
|
|
10
|
+
const sizeValue = typeof size === 'number' ? `${size}px` : size;
|
|
11
|
+
return (
|
|
12
|
+
<svg
|
|
13
|
+
ref={ref}
|
|
14
|
+
width={sizeValue ?? width ?? '1em'}
|
|
15
|
+
height={sizeValue ?? height ?? '1em'}
|
|
16
|
+
viewBox="0 0 96 96"
|
|
17
|
+
fill="none"
|
|
18
|
+
role="img"
|
|
19
|
+
aria-hidden="true"
|
|
20
|
+
className={className}
|
|
21
|
+
{...props}
|
|
22
|
+
>
|
|
23
|
+
<path d="M90.0001 15.3047H17.5107V67.8816H90.0001V15.3047Z" fill="var(--notification-empty-icon, #B8B8B8)" />
|
|
24
|
+
<path
|
|
25
|
+
d="M47.3775 42.7603H81.4463L90 15.3047H17.5106L6 52.2497H44.4206L47.3775 42.7603Z"
|
|
26
|
+
fill="var(--notification-empty-bg, #D8D8D8)"
|
|
27
|
+
/>
|
|
28
|
+
<path
|
|
29
|
+
d="M64.6594 81.5597C72.2116 81.5597 78.3338 75.4375 78.3338 67.8853C78.3338 60.3332 72.2116 54.2109 64.6594 54.2109C57.1073 54.2109 50.985 60.3332 50.985 67.8853C50.985 75.4375 57.1073 81.5597 64.6594 81.5597Z"
|
|
30
|
+
fill="var(--notification-bg, #FFFFFF)"
|
|
31
|
+
/>
|
|
32
|
+
<path
|
|
33
|
+
d="M37.1363 88.3651C40.8942 88.3651 43.9407 85.3187 43.9407 81.5607C43.9407 77.8028 40.8942 74.7563 37.1363 74.7563C33.3783 74.7563 30.3319 77.8028 30.3319 81.5607C30.3319 85.3187 33.3783 88.3651 37.1363 88.3651Z"
|
|
34
|
+
fill="var(--notification-empty-bg, #D8D8D8)"
|
|
35
|
+
/>
|
|
36
|
+
<path
|
|
37
|
+
d="M64.6594 81.5587C72.2119 81.5587 78.3338 75.4368 78.3338 67.8843H50.985C50.985 75.4368 57.1069 81.5587 64.6594 81.5587Z"
|
|
38
|
+
fill="var(--notification-empty-bg, #D8D8D8)"
|
|
39
|
+
/>
|
|
40
|
+
</svg>
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
EmptyIllustration.displayName = 'EmptyIllustration';
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
export interface EnvelopeProps extends React.SVGProps<SVGSVGElement> {
|
|
4
|
+
/** Icon size — number (px) or string ("1.5em"). Default: "1em" */
|
|
5
|
+
size?: number | string;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export const Envelope = React.forwardRef<SVGSVGElement, EnvelopeProps>(
|
|
9
|
+
({ size, width, height, className, ...props }, ref) => {
|
|
10
|
+
const sizeValue = typeof size === 'number' ? `${size}px` : size;
|
|
11
|
+
return (
|
|
12
|
+
<svg
|
|
13
|
+
ref={ref}
|
|
14
|
+
width={sizeValue ?? width ?? '1em'}
|
|
15
|
+
height={sizeValue ?? height ?? '1em'}
|
|
16
|
+
viewBox="0 0 20 20"
|
|
17
|
+
fill="currentColor"
|
|
18
|
+
role="img"
|
|
19
|
+
aria-hidden="true"
|
|
20
|
+
className={className}
|
|
21
|
+
{...props}
|
|
22
|
+
>
|
|
23
|
+
<path
|
|
24
|
+
d="M18.3333 5.83331L10.8408 10.6058C10.5865 10.7535 10.2977 10.8313 10.0037 10.8313C9.70968 10.8313 9.42088 10.7535 9.16663 10.6058L1.66663 5.83331"
|
|
25
|
+
stroke="currentColor"
|
|
26
|
+
strokeWidth="1.2"
|
|
27
|
+
strokeLinecap="round"
|
|
28
|
+
strokeLinejoin="round"
|
|
29
|
+
/>
|
|
30
|
+
<path
|
|
31
|
+
d="M16.6666 3.33331H3.33329C2.41282 3.33331 1.66663 4.07951 1.66663 4.99998V15C1.66663 15.9205 2.41282 16.6666 3.33329 16.6666H16.6666C17.5871 16.6666 18.3333 15.9205 18.3333 15V4.99998C18.3333 4.07951 17.5871 3.33331 16.6666 3.33331Z"
|
|
32
|
+
stroke="currentColor"
|
|
33
|
+
strokeWidth="1.2"
|
|
34
|
+
strokeLinecap="round"
|
|
35
|
+
strokeLinejoin="round"
|
|
36
|
+
/>
|
|
37
|
+
</svg>
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
Envelope.displayName = 'Envelope';
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
export interface ErrorIllustrationProps extends React.SVGProps<SVGSVGElement> {
|
|
4
|
+
/** Icon size — number (px) or string ("1.5em"). Default: "1em" */
|
|
5
|
+
size?: number | string;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export const ErrorIllustration = React.forwardRef<SVGSVGElement, ErrorIllustrationProps>(
|
|
9
|
+
({ size, width, height, className, ...props }, ref) => {
|
|
10
|
+
const sizeValue = typeof size === 'number' ? `${size}px` : size;
|
|
11
|
+
return (
|
|
12
|
+
<svg
|
|
13
|
+
ref={ref}
|
|
14
|
+
width={sizeValue ?? width ?? '1em'}
|
|
15
|
+
height={sizeValue ?? height ?? '1em'}
|
|
16
|
+
viewBox="-5 -14.5 96 96"
|
|
17
|
+
fill="none"
|
|
18
|
+
role="img"
|
|
19
|
+
aria-hidden="true"
|
|
20
|
+
className={className}
|
|
21
|
+
{...props}
|
|
22
|
+
>
|
|
23
|
+
<path
|
|
24
|
+
d="M68.4911 32.0384C58.8375 32.0384 51.0103 39.8637 51.0103 49.5192C51.0103 59.1746 58.8356 67 68.4911 67C78.1465 67 85.9719 59.1746 85.9719 49.5192C85.9719 39.8637 78.1465 32.0384 68.4911 32.0384ZM70.9488 60.5693H66.0315V55.6521H70.9488V60.5693ZM70.9488 51.632H66.0315V37.9734H70.9488V51.632Z"
|
|
25
|
+
fill="var(--notification-empty-icon, #B8B8B8)"
|
|
26
|
+
/>
|
|
27
|
+
<path
|
|
28
|
+
d="M42.5853 0.00188513C26.682 0.00188513 11.6759 5.82757 0 16.4668L9.4632 26.8762C18.5457 18.6022 30.2178 14.0695 42.5853 14.0695C54.9529 14.0695 66.6269 18.6003 75.7075 26.8743L85.1707 16.465C73.4948 5.82568 58.4868 0 42.5853 0V0.00188513Z"
|
|
29
|
+
fill="var(--notification-empty-icon, #B8B8B8)"
|
|
30
|
+
fillOpacity="0.7"
|
|
31
|
+
/>
|
|
32
|
+
<path
|
|
33
|
+
d="M61.3342 28.0749C46.7822 20.3418 28.4137 22.2416 15.7389 33.778L25.2021 44.1874C31.7874 38.1939 40.7436 36.2169 48.8931 38.2543C51.6316 33.501 56.0494 29.839 61.3361 28.0749H61.3342Z"
|
|
34
|
+
fill="var(--notification-empty-icon, #B8B8B8)"
|
|
35
|
+
fillOpacity="0.7"
|
|
36
|
+
/>
|
|
37
|
+
<path
|
|
38
|
+
d="M45.8909 49.638C41.4901 48.5788 36.6784 49.6644 33.1238 52.9023L42.587 63.3117L47.4986 57.9082C46.4752 55.3487 45.906 52.5593 45.8909 49.638Z"
|
|
39
|
+
fill="var(--notification-empty-icon, #B8B8B8)"
|
|
40
|
+
fillOpacity="0.7"
|
|
41
|
+
/>
|
|
42
|
+
</svg>
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
ErrorIllustration.displayName = 'ErrorIllustration';
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
export interface MarkReadProps extends React.SVGProps<SVGSVGElement> {
|
|
4
|
+
/** Icon size — number (px) or string ("1.5em"). Default: "1em" */
|
|
5
|
+
size?: number | string;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export const MarkRead = React.forwardRef<SVGSVGElement, MarkReadProps>(
|
|
9
|
+
({ size, width, height, className, ...props }, ref) => {
|
|
10
|
+
const sizeValue = typeof size === 'number' ? `${size}px` : size;
|
|
11
|
+
return (
|
|
12
|
+
<svg
|
|
13
|
+
ref={ref}
|
|
14
|
+
width={sizeValue ?? width ?? '1em'}
|
|
15
|
+
height={sizeValue ?? height ?? '1em'}
|
|
16
|
+
viewBox="0 0 24 24"
|
|
17
|
+
fill="currentColor"
|
|
18
|
+
role="img"
|
|
19
|
+
aria-hidden="true"
|
|
20
|
+
className={className}
|
|
21
|
+
{...props}
|
|
22
|
+
>
|
|
23
|
+
<path
|
|
24
|
+
d="M13 6H19.6025L19.7373 6.8418L21.9873 20.8418L22.1738 22H1.82617L2.0127 20.8418L4.2627 6.8418L4.39746 6H11V2H13V6ZM4.17383 20H19.8262L18.7012 13H5.29883L4.17383 20ZM5.61914 11H18.3809L17.8984 8H6.10156L5.61914 11Z"
|
|
25
|
+
fill="currentColor"
|
|
26
|
+
/>
|
|
27
|
+
</svg>
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
MarkRead.displayName = 'MarkRead';
|