@dsh-plugin/dsh-ui-components 0.0.1 → 0.1.0-dev.43616582648
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/LICENSE +21 -21
- package/NOTICE +21 -21
- package/README.md +136 -136
- package/README.zh_CN.md +136 -136
- package/docs/tokens.md +67 -67
- package/lib/basic/form.js +49 -49
- package/lib/basic/styles.js +391 -391
- package/lib/composites/styles.js +427 -427
- package/lib/data/styles.js +257 -257
- package/lib/display/styles.js +310 -310
- package/lib/feedback/styles.js +228 -228
- package/lib/foundation/bridge.js +203 -203
- package/lib/navigation/styles.js +417 -417
- package/package.json +104 -104
- package/scripts/check-size.mjs +69 -69
- package/scripts/dump-npm-latest.mjs +59 -59
- package/scripts/gen-host-tokens.mjs +61 -61
- package/scripts/gen-icons.mjs +188 -178
- package/scripts/verify-no-literal-colors.mjs +63 -63
- package/scripts/verify-tokens.mjs +135 -135
- package/src/basic/button.tsx +76 -76
- package/src/basic/form.tsx +187 -187
- package/src/basic/icon-button.tsx +66 -66
- package/src/basic/index.ts +38 -38
- package/src/basic/input.tsx +140 -140
- package/src/basic/select.tsx +120 -120
- package/src/basic/styles.ts +412 -412
- package/src/basic/toggle.tsx +116 -116
- package/src/composites/data-view.tsx +189 -189
- package/src/composites/index.ts +11 -11
- package/src/composites/indicator.tsx +90 -90
- package/src/composites/menu-select.tsx +230 -230
- package/src/composites/panel.tsx +72 -72
- package/src/composites/settings.tsx +80 -80
- package/src/composites/styles.ts +450 -450
- package/src/data/collection.tsx +71 -71
- package/src/data/index.ts +39 -39
- package/src/data/info.tsx +89 -89
- package/src/data/picker.tsx +113 -113
- package/src/data/styles.ts +278 -278
- package/src/display/container.tsx +67 -67
- package/src/display/feedback.tsx +92 -92
- package/src/display/index.ts +44 -44
- package/src/display/label.tsx +165 -165
- package/src/display/overlay.tsx +103 -103
- package/src/display/styles.ts +332 -332
- package/src/feedback/global.tsx +110 -110
- package/src/feedback/index.ts +19 -19
- package/src/feedback/inline.tsx +50 -50
- package/src/feedback/panel.tsx +93 -93
- package/src/feedback/styles.ts +250 -250
- package/src/foundation/bridge.ts +318 -318
- package/src/foundation/icons.tsx +315 -315
- package/src/foundation/index.ts +33 -33
- package/src/foundation/palette.ts +153 -153
- package/src/foundation/provider.tsx +62 -62
- package/src/foundation/style.ts +63 -63
- package/src/foundation/tokens.ts +62 -62
- package/src/index.ts +18 -18
- package/src/navigation/hierarchy.tsx +82 -82
- package/src/navigation/index.ts +21 -21
- package/src/navigation/indicator.tsx +125 -125
- package/src/navigation/menu.tsx +94 -94
- package/src/navigation/segmented.tsx +136 -136
- package/src/navigation/styles.ts +438 -438
package/src/foundation/icons.tsx
CHANGED
|
@@ -1,315 +1,315 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 策划图标集与 `<Icon>` 组件。
|
|
3
|
-
*
|
|
4
|
-
* 这里只导出界面常用的图标,按意图命名(`Settings`、`Warning`、`GitBranch`),
|
|
5
|
-
* 换图时不影响调用方。未列出的图标从 `@dsh-plugin/dsh-ui-components/icons/<pascal>`
|
|
6
|
-
* 逐图标引入,或按 `ICON_INDEX` 元数据配合调用方自己的映射表渲染;两条通道
|
|
7
|
-
* 都只为实际用到的图标付出体积。
|
|
8
|
-
*
|
|
9
|
-
* 图标默认 `outline` 主题、`currentColor` 填充,因此自动继承周围文字色。
|
|
10
|
-
*
|
|
11
|
-
* @module @dsh-plugin/dsh-ui-components/foundation/icons
|
|
12
|
-
*/
|
|
13
|
-
import * as React from 'react'
|
|
14
|
-
import Add from '../icons/Add.js'
|
|
15
|
-
import Alarm from '../icons/Alarm.js'
|
|
16
|
-
import AllApplication from '../icons/AllApplication.js'
|
|
17
|
-
import Api from '../icons/Api.js'
|
|
18
|
-
import Attention from '../icons/Attention.js'
|
|
19
|
-
import Book from '../icons/Book.js'
|
|
20
|
-
import Branch from '../icons/Branch.js'
|
|
21
|
-
import Briefcase from '../icons/Briefcase.js'
|
|
22
|
-
import Browser from '../icons/Browser.js'
|
|
23
|
-
import Bug from '../icons/Bug.js'
|
|
24
|
-
import Camera from '../icons/Camera.js'
|
|
25
|
-
import ChartHistogram from '../icons/ChartHistogram.js'
|
|
26
|
-
import ChartLine from '../icons/ChartLine.js'
|
|
27
|
-
import ChartPie from '../icons/ChartPie.js'
|
|
28
|
-
import Check from '../icons/Check.js'
|
|
29
|
-
import CheckOne from '../icons/CheckOne.js'
|
|
30
|
-
import CheckSmall from '../icons/CheckSmall.js'
|
|
31
|
-
import Close from '../icons/Close.js'
|
|
32
|
-
import CloseSmall from '../icons/CloseSmall.js'
|
|
33
|
-
import Code from '../icons/Code.js'
|
|
34
|
-
import Command from '../icons/Command.js'
|
|
35
|
-
import Compass from '../icons/Compass.js'
|
|
36
|
-
import Config from '../icons/Config.js'
|
|
37
|
-
import Copy from '../icons/Copy.js'
|
|
38
|
-
import Data from '../icons/Data.js'
|
|
39
|
-
import Delete from '../icons/Delete.js'
|
|
40
|
-
import Diamond from '../icons/Diamond.js'
|
|
41
|
-
import DoubleLeft from '../icons/DoubleLeft.js'
|
|
42
|
-
import DoubleRight from '../icons/DoubleRight.js'
|
|
43
|
-
import Down from '../icons/Down.js'
|
|
44
|
-
import Download from '../icons/Download.js'
|
|
45
|
-
import Edit from '../icons/Edit.js'
|
|
46
|
-
import Error from '../icons/Error.js'
|
|
47
|
-
import ExpandDown from '../icons/ExpandDown.js'
|
|
48
|
-
import ExpandLeft from '../icons/ExpandLeft.js'
|
|
49
|
-
import ExpandRight from '../icons/ExpandRight.js'
|
|
50
|
-
import ExpandUp from '../icons/ExpandUp.js'
|
|
51
|
-
import FileCode from '../icons/FileCode.js'
|
|
52
|
-
import FileText from '../icons/FileText.js'
|
|
53
|
-
import Filter from '../icons/Filter.js'
|
|
54
|
-
import Fire from '../icons/Fire.js'
|
|
55
|
-
import Flag from '../icons/Flag.js'
|
|
56
|
-
import Folder from '../icons/Folder.js'
|
|
57
|
-
import FolderOpen from '../icons/FolderOpen.js'
|
|
58
|
-
import FullScreen from '../icons/FullScreen.js'
|
|
59
|
-
import Globe from '../icons/Globe.js'
|
|
60
|
-
import GridFour from '../icons/GridFour.js'
|
|
61
|
-
import Help from '../icons/Help.js'
|
|
62
|
-
import History from '../icons/History.js'
|
|
63
|
-
import Home from '../icons/Home.js'
|
|
64
|
-
import Info from '../icons/Info.js'
|
|
65
|
-
import Keyboard from '../icons/Keyboard.js'
|
|
66
|
-
import Left from '../icons/Left.js'
|
|
67
|
-
import Level from '../icons/Level.js'
|
|
68
|
-
import Lightning from '../icons/Lightning.js'
|
|
69
|
-
import Link from '../icons/Link.js'
|
|
70
|
-
import Loading from '../icons/Loading.js'
|
|
71
|
-
import Lock from '../icons/Lock.js'
|
|
72
|
-
import Logout from '../icons/Logout.js'
|
|
73
|
-
import Magic from '../icons/Magic.js'
|
|
74
|
-
import Moon from '../icons/Moon.js'
|
|
75
|
-
import More from '../icons/More.js'
|
|
76
|
-
import MoreOne from '../icons/MoreOne.js'
|
|
77
|
-
import Mouse from '../icons/Mouse.js'
|
|
78
|
-
import NetworkTree from '../icons/NetworkTree.js'
|
|
79
|
-
import Pause from '../icons/Pause.js'
|
|
80
|
-
import People from '../icons/People.js'
|
|
81
|
-
import Pin from '../icons/Pin.js'
|
|
82
|
-
import Play from '../icons/Play.js'
|
|
83
|
-
import Plug from '../icons/Plug.js'
|
|
84
|
-
import Power from '../icons/Power.js'
|
|
85
|
-
import PreviewClose from '../icons/PreviewClose.js'
|
|
86
|
-
import PreviewOpen from '../icons/PreviewOpen.js'
|
|
87
|
-
import Radar from '../icons/Radar.js'
|
|
88
|
-
import Record from '../icons/Record.js'
|
|
89
|
-
import Redo from '../icons/Redo.js'
|
|
90
|
-
import Refresh from '../icons/Refresh.js'
|
|
91
|
-
import Return from '../icons/Return.js'
|
|
92
|
-
import Right from '../icons/Right.js'
|
|
93
|
-
import Rocket from '../icons/Rocket.js'
|
|
94
|
-
import Rotate from '../icons/Rotate.js'
|
|
95
|
-
import Save from '../icons/Save.js'
|
|
96
|
-
import Scan from '../icons/Scan.js'
|
|
97
|
-
import Search from '../icons/Search.js'
|
|
98
|
-
import Send from '../icons/Send.js'
|
|
99
|
-
import Server from '../icons/Server.js'
|
|
100
|
-
import Setting from '../icons/Setting.js'
|
|
101
|
-
import SettingTwo from '../icons/SettingTwo.js'
|
|
102
|
-
import Share from '../icons/Share.js'
|
|
103
|
-
import Shield from '../icons/Shield.js'
|
|
104
|
-
import Sort from '../icons/Sort.js'
|
|
105
|
-
import Star from '../icons/Star.js'
|
|
106
|
-
import Success from '../icons/Success.js'
|
|
107
|
-
import Sun from '../icons/Sun.js'
|
|
108
|
-
import Terminal from '../icons/Terminal.js'
|
|
109
|
-
import Time from '../icons/Time.js'
|
|
110
|
-
import Tool from '../icons/Tool.js'
|
|
111
|
-
import Translate from '../icons/Translate.js'
|
|
112
|
-
import Trophy from '../icons/Trophy.js'
|
|
113
|
-
import Undo from '../icons/Undo.js'
|
|
114
|
-
import Unlock from '../icons/Unlock.js'
|
|
115
|
-
import Up from '../icons/Up.js'
|
|
116
|
-
import Upload from '../icons/Upload.js'
|
|
117
|
-
import User from '../icons/User.js'
|
|
118
|
-
import Vip from '../icons/Vip.js'
|
|
119
|
-
import Wind from '../icons/Wind.js'
|
|
120
|
-
import Write from '../icons/Write.js'
|
|
121
|
-
import { DEFAULT_ICON_CONFIGS, IconProvider, type IIconProps, type Theme } from '@icon-park/react/es/runtime/index.js'
|
|
122
|
-
import { G } from './tokens.js'
|
|
123
|
-
|
|
124
|
-
/** 单个图标组件接受的 props,沿用 IconPark 自己的定义。 */
|
|
125
|
-
export type IconProps = IIconProps
|
|
126
|
-
|
|
127
|
-
/** 一个图标组件。 */
|
|
128
|
-
export type IconComponent = (props: IconProps) => React.ReactElement
|
|
129
|
-
|
|
130
|
-
/**
|
|
131
|
-
* 策划图标集,按用途分组。键是意图名,值是 IconPark 组件。
|
|
132
|
-
*/
|
|
133
|
-
export const Icons = {
|
|
134
|
-
// 结构与导航
|
|
135
|
-
ChevronUp: Up,
|
|
136
|
-
ChevronDown: Down,
|
|
137
|
-
ChevronLeft: Left,
|
|
138
|
-
ChevronRight: Right,
|
|
139
|
-
PageFirst: DoubleLeft,
|
|
140
|
-
PageLast: DoubleRight,
|
|
141
|
-
More,
|
|
142
|
-
MoreVertical: MoreOne,
|
|
143
|
-
Sort,
|
|
144
|
-
Expand: FullScreen,
|
|
145
|
-
CollapseDown: ExpandDown,
|
|
146
|
-
CollapseLeft: ExpandLeft,
|
|
147
|
-
CollapseRight: ExpandRight,
|
|
148
|
-
CollapseUp: ExpandUp,
|
|
149
|
-
Compass,
|
|
150
|
-
|
|
151
|
-
// 操作
|
|
152
|
-
Add,
|
|
153
|
-
Edit,
|
|
154
|
-
Write,
|
|
155
|
-
Delete,
|
|
156
|
-
Copy,
|
|
157
|
-
Save,
|
|
158
|
-
Search,
|
|
159
|
-
Refresh,
|
|
160
|
-
Download,
|
|
161
|
-
Upload,
|
|
162
|
-
Undo,
|
|
163
|
-
Redo,
|
|
164
|
-
Play,
|
|
165
|
-
Pause,
|
|
166
|
-
Close,
|
|
167
|
-
CloseSmall,
|
|
168
|
-
Check,
|
|
169
|
-
CheckOne,
|
|
170
|
-
CheckSmall,
|
|
171
|
-
Filter,
|
|
172
|
-
Scan,
|
|
173
|
-
Send,
|
|
174
|
-
Share,
|
|
175
|
-
Rotate,
|
|
176
|
-
Power,
|
|
177
|
-
Logout,
|
|
178
|
-
Return,
|
|
179
|
-
|
|
180
|
-
// 状态
|
|
181
|
-
Info,
|
|
182
|
-
Warning: Attention,
|
|
183
|
-
Error,
|
|
184
|
-
Success,
|
|
185
|
-
Loading,
|
|
186
|
-
Help,
|
|
187
|
-
Alarm,
|
|
188
|
-
Diamond,
|
|
189
|
-
|
|
190
|
-
// 领域
|
|
191
|
-
Settings: Setting,
|
|
192
|
-
SettingsAlt: SettingTwo,
|
|
193
|
-
Config,
|
|
194
|
-
Terminal,
|
|
195
|
-
Code,
|
|
196
|
-
FileCode,
|
|
197
|
-
Doc: FileText,
|
|
198
|
-
Folder,
|
|
199
|
-
FolderOpen,
|
|
200
|
-
GitBranch: Branch,
|
|
201
|
-
Link,
|
|
202
|
-
Web: Globe,
|
|
203
|
-
Browser,
|
|
204
|
-
Lock,
|
|
205
|
-
Unlock,
|
|
206
|
-
EyeOpen: PreviewOpen,
|
|
207
|
-
EyeClosed: PreviewClose,
|
|
208
|
-
Apps: AllApplication,
|
|
209
|
-
Home,
|
|
210
|
-
User,
|
|
211
|
-
People,
|
|
212
|
-
Star,
|
|
213
|
-
Magic,
|
|
214
|
-
Shield,
|
|
215
|
-
Vip,
|
|
216
|
-
Trophy,
|
|
217
|
-
Pin,
|
|
218
|
-
Level,
|
|
219
|
-
Grid: GridFour,
|
|
220
|
-
Tool,
|
|
221
|
-
Plug,
|
|
222
|
-
Server,
|
|
223
|
-
Rocket,
|
|
224
|
-
Radar,
|
|
225
|
-
Record,
|
|
226
|
-
Camera,
|
|
227
|
-
Book,
|
|
228
|
-
Briefcase,
|
|
229
|
-
Bug,
|
|
230
|
-
Api,
|
|
231
|
-
Data,
|
|
232
|
-
ChartLine,
|
|
233
|
-
ChartPie,
|
|
234
|
-
ChartHistogram,
|
|
235
|
-
History,
|
|
236
|
-
Time,
|
|
237
|
-
Fire,
|
|
238
|
-
Flag,
|
|
239
|
-
Lightning,
|
|
240
|
-
Mouse,
|
|
241
|
-
Keyboard,
|
|
242
|
-
Command,
|
|
243
|
-
Translate,
|
|
244
|
-
Sun,
|
|
245
|
-
Moon,
|
|
246
|
-
Wind,
|
|
247
|
-
NetworkTree,
|
|
248
|
-
} as const
|
|
249
|
-
|
|
250
|
-
/** 策划图标的名字。 */
|
|
251
|
-
export type IconName = keyof typeof Icons
|
|
252
|
-
|
|
253
|
-
/** 全部策划图标名,供选择器与测试使用。 */
|
|
254
|
-
export const ICON_NAMES = Object.keys(Icons) as IconName[]
|
|
255
|
-
|
|
256
|
-
/**
|
|
257
|
-
* 按名取一个图标组件。未知名字退化为 `Help`,让过期名字显示成可见占位而
|
|
258
|
-
* 不是抛错中断渲染。
|
|
259
|
-
*
|
|
260
|
-
* @param name - 策划图标名。
|
|
261
|
-
* @returns 对应的图标组件。
|
|
262
|
-
*/
|
|
263
|
-
export function icon(name: IconName): IconComponent {
|
|
264
|
-
return (Icons[name] ?? Icons.Help) as IconComponent
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
/** {@link Icon} 的 props。 */
|
|
268
|
-
export type IconByNameProps = { name: IconName } & IconProps
|
|
269
|
-
|
|
270
|
-
/** 用组件引用渲染图标时的 props。 */
|
|
271
|
-
export type IconOfProps = { of: IconComponent; size?: number | string } & Omit<IconProps, 'size'>
|
|
272
|
-
|
|
273
|
-
/**
|
|
274
|
-
* 按策划名渲染一个图标,供数据驱动的场景使用(菜单项描述、设置行)。
|
|
275
|
-
*
|
|
276
|
-
* `<Icon of={SomeIcon} />` 走另一个重载,用于从逐图标子路径引入的组件。
|
|
277
|
-
*
|
|
278
|
-
* @param props - `name` 取自 {@link Icons},其余 props 透传给 IconPark。
|
|
279
|
-
* @returns 图标元素。
|
|
280
|
-
*/
|
|
281
|
-
export function Icon(props: IconByNameProps | IconOfProps): React.ReactElement {
|
|
282
|
-
if ('of' in props) {
|
|
283
|
-
const { of, size, ...rest } = props
|
|
284
|
-
return React.createElement(of, size === undefined ? rest : { ...rest, size })
|
|
285
|
-
}
|
|
286
|
-
const { name, ...rest } = props
|
|
287
|
-
return React.createElement(icon(name), rest)
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
/** 本包组件渲染图标时使用的默认配置。 */
|
|
291
|
-
export const DSH_ICON_CONFIG = {
|
|
292
|
-
...DEFAULT_ICON_CONFIGS,
|
|
293
|
-
size: G.fontSize + 4,
|
|
294
|
-
strokeWidth: 4,
|
|
295
|
-
theme: 'outline' as Theme,
|
|
296
|
-
colors: {
|
|
297
|
-
...DEFAULT_ICON_CONFIGS.colors,
|
|
298
|
-
// `currentColor` 让图标跟随周围文字色,这是它能自动适配主题的前提。
|
|
299
|
-
outline: { fill: 'currentColor', background: 'transparent' },
|
|
300
|
-
},
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
/**
|
|
304
|
-
* 为子树统一图标默认值(outline 主题、线宽、尺寸、`currentColor`)。
|
|
305
|
-
*
|
|
306
|
-
* 组件自身不要求它存在,但在插件根部挂一次能让自绘图标与其余图标一致。
|
|
307
|
-
*
|
|
308
|
-
* @param props.children - 子树。
|
|
309
|
-
* @returns 携带 {@link DSH_ICON_CONFIG} 的上下文提供者。
|
|
310
|
-
*/
|
|
311
|
-
export function DshIconProvider({ children }: { children?: React.ReactNode }): React.ReactElement {
|
|
312
|
-
return React.createElement(IconProvider, { value: DSH_ICON_CONFIG }, children)
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
export { IconProvider }
|
|
1
|
+
/**
|
|
2
|
+
* 策划图标集与 `<Icon>` 组件。
|
|
3
|
+
*
|
|
4
|
+
* 这里只导出界面常用的图标,按意图命名(`Settings`、`Warning`、`GitBranch`),
|
|
5
|
+
* 换图时不影响调用方。未列出的图标从 `@dsh-plugin/dsh-ui-components/icons/<pascal>`
|
|
6
|
+
* 逐图标引入,或按 `ICON_INDEX` 元数据配合调用方自己的映射表渲染;两条通道
|
|
7
|
+
* 都只为实际用到的图标付出体积。
|
|
8
|
+
*
|
|
9
|
+
* 图标默认 `outline` 主题、`currentColor` 填充,因此自动继承周围文字色。
|
|
10
|
+
*
|
|
11
|
+
* @module @dsh-plugin/dsh-ui-components/foundation/icons
|
|
12
|
+
*/
|
|
13
|
+
import * as React from 'react'
|
|
14
|
+
import Add from '../icons/Add.js'
|
|
15
|
+
import Alarm from '../icons/Alarm.js'
|
|
16
|
+
import AllApplication from '../icons/AllApplication.js'
|
|
17
|
+
import Api from '../icons/Api.js'
|
|
18
|
+
import Attention from '../icons/Attention.js'
|
|
19
|
+
import Book from '../icons/Book.js'
|
|
20
|
+
import Branch from '../icons/Branch.js'
|
|
21
|
+
import Briefcase from '../icons/Briefcase.js'
|
|
22
|
+
import Browser from '../icons/Browser.js'
|
|
23
|
+
import Bug from '../icons/Bug.js'
|
|
24
|
+
import Camera from '../icons/Camera.js'
|
|
25
|
+
import ChartHistogram from '../icons/ChartHistogram.js'
|
|
26
|
+
import ChartLine from '../icons/ChartLine.js'
|
|
27
|
+
import ChartPie from '../icons/ChartPie.js'
|
|
28
|
+
import Check from '../icons/Check.js'
|
|
29
|
+
import CheckOne from '../icons/CheckOne.js'
|
|
30
|
+
import CheckSmall from '../icons/CheckSmall.js'
|
|
31
|
+
import Close from '../icons/Close.js'
|
|
32
|
+
import CloseSmall from '../icons/CloseSmall.js'
|
|
33
|
+
import Code from '../icons/Code.js'
|
|
34
|
+
import Command from '../icons/Command.js'
|
|
35
|
+
import Compass from '../icons/Compass.js'
|
|
36
|
+
import Config from '../icons/Config.js'
|
|
37
|
+
import Copy from '../icons/Copy.js'
|
|
38
|
+
import Data from '../icons/Data.js'
|
|
39
|
+
import Delete from '../icons/Delete.js'
|
|
40
|
+
import Diamond from '../icons/Diamond.js'
|
|
41
|
+
import DoubleLeft from '../icons/DoubleLeft.js'
|
|
42
|
+
import DoubleRight from '../icons/DoubleRight.js'
|
|
43
|
+
import Down from '../icons/Down.js'
|
|
44
|
+
import Download from '../icons/Download.js'
|
|
45
|
+
import Edit from '../icons/Edit.js'
|
|
46
|
+
import Error from '../icons/Error.js'
|
|
47
|
+
import ExpandDown from '../icons/ExpandDown.js'
|
|
48
|
+
import ExpandLeft from '../icons/ExpandLeft.js'
|
|
49
|
+
import ExpandRight from '../icons/ExpandRight.js'
|
|
50
|
+
import ExpandUp from '../icons/ExpandUp.js'
|
|
51
|
+
import FileCode from '../icons/FileCode.js'
|
|
52
|
+
import FileText from '../icons/FileText.js'
|
|
53
|
+
import Filter from '../icons/Filter.js'
|
|
54
|
+
import Fire from '../icons/Fire.js'
|
|
55
|
+
import Flag from '../icons/Flag.js'
|
|
56
|
+
import Folder from '../icons/Folder.js'
|
|
57
|
+
import FolderOpen from '../icons/FolderOpen.js'
|
|
58
|
+
import FullScreen from '../icons/FullScreen.js'
|
|
59
|
+
import Globe from '../icons/Globe.js'
|
|
60
|
+
import GridFour from '../icons/GridFour.js'
|
|
61
|
+
import Help from '../icons/Help.js'
|
|
62
|
+
import History from '../icons/History.js'
|
|
63
|
+
import Home from '../icons/Home.js'
|
|
64
|
+
import Info from '../icons/Info.js'
|
|
65
|
+
import Keyboard from '../icons/Keyboard.js'
|
|
66
|
+
import Left from '../icons/Left.js'
|
|
67
|
+
import Level from '../icons/Level.js'
|
|
68
|
+
import Lightning from '../icons/Lightning.js'
|
|
69
|
+
import Link from '../icons/Link.js'
|
|
70
|
+
import Loading from '../icons/Loading.js'
|
|
71
|
+
import Lock from '../icons/Lock.js'
|
|
72
|
+
import Logout from '../icons/Logout.js'
|
|
73
|
+
import Magic from '../icons/Magic.js'
|
|
74
|
+
import Moon from '../icons/Moon.js'
|
|
75
|
+
import More from '../icons/More.js'
|
|
76
|
+
import MoreOne from '../icons/MoreOne.js'
|
|
77
|
+
import Mouse from '../icons/Mouse.js'
|
|
78
|
+
import NetworkTree from '../icons/NetworkTree.js'
|
|
79
|
+
import Pause from '../icons/Pause.js'
|
|
80
|
+
import People from '../icons/People.js'
|
|
81
|
+
import Pin from '../icons/Pin.js'
|
|
82
|
+
import Play from '../icons/Play.js'
|
|
83
|
+
import Plug from '../icons/Plug.js'
|
|
84
|
+
import Power from '../icons/Power.js'
|
|
85
|
+
import PreviewClose from '../icons/PreviewClose.js'
|
|
86
|
+
import PreviewOpen from '../icons/PreviewOpen.js'
|
|
87
|
+
import Radar from '../icons/Radar.js'
|
|
88
|
+
import Record from '../icons/Record.js'
|
|
89
|
+
import Redo from '../icons/Redo.js'
|
|
90
|
+
import Refresh from '../icons/Refresh.js'
|
|
91
|
+
import Return from '../icons/Return.js'
|
|
92
|
+
import Right from '../icons/Right.js'
|
|
93
|
+
import Rocket from '../icons/Rocket.js'
|
|
94
|
+
import Rotate from '../icons/Rotate.js'
|
|
95
|
+
import Save from '../icons/Save.js'
|
|
96
|
+
import Scan from '../icons/Scan.js'
|
|
97
|
+
import Search from '../icons/Search.js'
|
|
98
|
+
import Send from '../icons/Send.js'
|
|
99
|
+
import Server from '../icons/Server.js'
|
|
100
|
+
import Setting from '../icons/Setting.js'
|
|
101
|
+
import SettingTwo from '../icons/SettingTwo.js'
|
|
102
|
+
import Share from '../icons/Share.js'
|
|
103
|
+
import Shield from '../icons/Shield.js'
|
|
104
|
+
import Sort from '../icons/Sort.js'
|
|
105
|
+
import Star from '../icons/Star.js'
|
|
106
|
+
import Success from '../icons/Success.js'
|
|
107
|
+
import Sun from '../icons/Sun.js'
|
|
108
|
+
import Terminal from '../icons/Terminal.js'
|
|
109
|
+
import Time from '../icons/Time.js'
|
|
110
|
+
import Tool from '../icons/Tool.js'
|
|
111
|
+
import Translate from '../icons/Translate.js'
|
|
112
|
+
import Trophy from '../icons/Trophy.js'
|
|
113
|
+
import Undo from '../icons/Undo.js'
|
|
114
|
+
import Unlock from '../icons/Unlock.js'
|
|
115
|
+
import Up from '../icons/Up.js'
|
|
116
|
+
import Upload from '../icons/Upload.js'
|
|
117
|
+
import User from '../icons/User.js'
|
|
118
|
+
import Vip from '../icons/Vip.js'
|
|
119
|
+
import Wind from '../icons/Wind.js'
|
|
120
|
+
import Write from '../icons/Write.js'
|
|
121
|
+
import { DEFAULT_ICON_CONFIGS, IconProvider, type IIconProps, type Theme } from '@icon-park/react/es/runtime/index.js'
|
|
122
|
+
import { G } from './tokens.js'
|
|
123
|
+
|
|
124
|
+
/** 单个图标组件接受的 props,沿用 IconPark 自己的定义。 */
|
|
125
|
+
export type IconProps = IIconProps
|
|
126
|
+
|
|
127
|
+
/** 一个图标组件。 */
|
|
128
|
+
export type IconComponent = (props: IconProps) => React.ReactElement
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* 策划图标集,按用途分组。键是意图名,值是 IconPark 组件。
|
|
132
|
+
*/
|
|
133
|
+
export const Icons = {
|
|
134
|
+
// 结构与导航
|
|
135
|
+
ChevronUp: Up,
|
|
136
|
+
ChevronDown: Down,
|
|
137
|
+
ChevronLeft: Left,
|
|
138
|
+
ChevronRight: Right,
|
|
139
|
+
PageFirst: DoubleLeft,
|
|
140
|
+
PageLast: DoubleRight,
|
|
141
|
+
More,
|
|
142
|
+
MoreVertical: MoreOne,
|
|
143
|
+
Sort,
|
|
144
|
+
Expand: FullScreen,
|
|
145
|
+
CollapseDown: ExpandDown,
|
|
146
|
+
CollapseLeft: ExpandLeft,
|
|
147
|
+
CollapseRight: ExpandRight,
|
|
148
|
+
CollapseUp: ExpandUp,
|
|
149
|
+
Compass,
|
|
150
|
+
|
|
151
|
+
// 操作
|
|
152
|
+
Add,
|
|
153
|
+
Edit,
|
|
154
|
+
Write,
|
|
155
|
+
Delete,
|
|
156
|
+
Copy,
|
|
157
|
+
Save,
|
|
158
|
+
Search,
|
|
159
|
+
Refresh,
|
|
160
|
+
Download,
|
|
161
|
+
Upload,
|
|
162
|
+
Undo,
|
|
163
|
+
Redo,
|
|
164
|
+
Play,
|
|
165
|
+
Pause,
|
|
166
|
+
Close,
|
|
167
|
+
CloseSmall,
|
|
168
|
+
Check,
|
|
169
|
+
CheckOne,
|
|
170
|
+
CheckSmall,
|
|
171
|
+
Filter,
|
|
172
|
+
Scan,
|
|
173
|
+
Send,
|
|
174
|
+
Share,
|
|
175
|
+
Rotate,
|
|
176
|
+
Power,
|
|
177
|
+
Logout,
|
|
178
|
+
Return,
|
|
179
|
+
|
|
180
|
+
// 状态
|
|
181
|
+
Info,
|
|
182
|
+
Warning: Attention,
|
|
183
|
+
Error,
|
|
184
|
+
Success,
|
|
185
|
+
Loading,
|
|
186
|
+
Help,
|
|
187
|
+
Alarm,
|
|
188
|
+
Diamond,
|
|
189
|
+
|
|
190
|
+
// 领域
|
|
191
|
+
Settings: Setting,
|
|
192
|
+
SettingsAlt: SettingTwo,
|
|
193
|
+
Config,
|
|
194
|
+
Terminal,
|
|
195
|
+
Code,
|
|
196
|
+
FileCode,
|
|
197
|
+
Doc: FileText,
|
|
198
|
+
Folder,
|
|
199
|
+
FolderOpen,
|
|
200
|
+
GitBranch: Branch,
|
|
201
|
+
Link,
|
|
202
|
+
Web: Globe,
|
|
203
|
+
Browser,
|
|
204
|
+
Lock,
|
|
205
|
+
Unlock,
|
|
206
|
+
EyeOpen: PreviewOpen,
|
|
207
|
+
EyeClosed: PreviewClose,
|
|
208
|
+
Apps: AllApplication,
|
|
209
|
+
Home,
|
|
210
|
+
User,
|
|
211
|
+
People,
|
|
212
|
+
Star,
|
|
213
|
+
Magic,
|
|
214
|
+
Shield,
|
|
215
|
+
Vip,
|
|
216
|
+
Trophy,
|
|
217
|
+
Pin,
|
|
218
|
+
Level,
|
|
219
|
+
Grid: GridFour,
|
|
220
|
+
Tool,
|
|
221
|
+
Plug,
|
|
222
|
+
Server,
|
|
223
|
+
Rocket,
|
|
224
|
+
Radar,
|
|
225
|
+
Record,
|
|
226
|
+
Camera,
|
|
227
|
+
Book,
|
|
228
|
+
Briefcase,
|
|
229
|
+
Bug,
|
|
230
|
+
Api,
|
|
231
|
+
Data,
|
|
232
|
+
ChartLine,
|
|
233
|
+
ChartPie,
|
|
234
|
+
ChartHistogram,
|
|
235
|
+
History,
|
|
236
|
+
Time,
|
|
237
|
+
Fire,
|
|
238
|
+
Flag,
|
|
239
|
+
Lightning,
|
|
240
|
+
Mouse,
|
|
241
|
+
Keyboard,
|
|
242
|
+
Command,
|
|
243
|
+
Translate,
|
|
244
|
+
Sun,
|
|
245
|
+
Moon,
|
|
246
|
+
Wind,
|
|
247
|
+
NetworkTree,
|
|
248
|
+
} as const
|
|
249
|
+
|
|
250
|
+
/** 策划图标的名字。 */
|
|
251
|
+
export type IconName = keyof typeof Icons
|
|
252
|
+
|
|
253
|
+
/** 全部策划图标名,供选择器与测试使用。 */
|
|
254
|
+
export const ICON_NAMES = Object.keys(Icons) as IconName[]
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* 按名取一个图标组件。未知名字退化为 `Help`,让过期名字显示成可见占位而
|
|
258
|
+
* 不是抛错中断渲染。
|
|
259
|
+
*
|
|
260
|
+
* @param name - 策划图标名。
|
|
261
|
+
* @returns 对应的图标组件。
|
|
262
|
+
*/
|
|
263
|
+
export function icon(name: IconName): IconComponent {
|
|
264
|
+
return (Icons[name] ?? Icons.Help) as IconComponent
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
/** {@link Icon} 的 props。 */
|
|
268
|
+
export type IconByNameProps = { name: IconName } & IconProps
|
|
269
|
+
|
|
270
|
+
/** 用组件引用渲染图标时的 props。 */
|
|
271
|
+
export type IconOfProps = { of: IconComponent; size?: number | string } & Omit<IconProps, 'size'>
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* 按策划名渲染一个图标,供数据驱动的场景使用(菜单项描述、设置行)。
|
|
275
|
+
*
|
|
276
|
+
* `<Icon of={SomeIcon} />` 走另一个重载,用于从逐图标子路径引入的组件。
|
|
277
|
+
*
|
|
278
|
+
* @param props - `name` 取自 {@link Icons},其余 props 透传给 IconPark。
|
|
279
|
+
* @returns 图标元素。
|
|
280
|
+
*/
|
|
281
|
+
export function Icon(props: IconByNameProps | IconOfProps): React.ReactElement {
|
|
282
|
+
if ('of' in props) {
|
|
283
|
+
const { of, size, ...rest } = props
|
|
284
|
+
return React.createElement(of, size === undefined ? rest : { ...rest, size })
|
|
285
|
+
}
|
|
286
|
+
const { name, ...rest } = props
|
|
287
|
+
return React.createElement(icon(name), rest)
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
/** 本包组件渲染图标时使用的默认配置。 */
|
|
291
|
+
export const DSH_ICON_CONFIG = {
|
|
292
|
+
...DEFAULT_ICON_CONFIGS,
|
|
293
|
+
size: G.fontSize + 4,
|
|
294
|
+
strokeWidth: 4,
|
|
295
|
+
theme: 'outline' as Theme,
|
|
296
|
+
colors: {
|
|
297
|
+
...DEFAULT_ICON_CONFIGS.colors,
|
|
298
|
+
// `currentColor` 让图标跟随周围文字色,这是它能自动适配主题的前提。
|
|
299
|
+
outline: { fill: 'currentColor', background: 'transparent' },
|
|
300
|
+
},
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
/**
|
|
304
|
+
* 为子树统一图标默认值(outline 主题、线宽、尺寸、`currentColor`)。
|
|
305
|
+
*
|
|
306
|
+
* 组件自身不要求它存在,但在插件根部挂一次能让自绘图标与其余图标一致。
|
|
307
|
+
*
|
|
308
|
+
* @param props.children - 子树。
|
|
309
|
+
* @returns 携带 {@link DSH_ICON_CONFIG} 的上下文提供者。
|
|
310
|
+
*/
|
|
311
|
+
export function DshIconProvider({ children }: { children?: React.ReactNode }): React.ReactElement {
|
|
312
|
+
return React.createElement(IconProvider, { value: DSH_ICON_CONFIG }, children)
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
export { IconProvider }
|