@easy-editor/materials-dashboard-progress 0.0.3 → 0.0.5

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 CHANGED
@@ -1,13 +1,27 @@
1
- # @easy-editor/materials-dashboard-progress
2
-
3
- ## 0.0.3
4
-
5
- ### Patch Changes
6
-
7
- - fix: build error
8
-
9
- ## 0.0.2
10
-
11
- ### Patch Changes
12
-
13
- - feat: new setters
1
+ # @easy-editor/materials-dashboard-progress
2
+
3
+ ## 0.0.5
4
+
5
+ ### Patch Changes
6
+
7
+ - fix: component export error
8
+
9
+ ## 0.0.4
10
+
11
+ ### Patch Changes
12
+
13
+ - perf: configure & datasource
14
+ - Updated dependencies
15
+ - @easy-editor/materials-shared@0.0.1
16
+
17
+ ## 0.0.3
18
+
19
+ ### Patch Changes
20
+
21
+ - fix: build error
22
+
23
+ ## 0.0.2
24
+
25
+ ### Patch Changes
26
+
27
+ - feat: new setters
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @easy-editor/easypack configuration
3
+ * @type {import('@easy-editor/easypack').EasypackConfig}
4
+ */
5
+ export default {
6
+ preset: 'material',
7
+ dev: {
8
+ port: 5001,
9
+ },
10
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@easy-editor/materials-dashboard-progress",
3
- "version": "0.0.3",
3
+ "version": "0.0.5",
4
4
  "description": "Progress component for EasyEditor dashboard",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -46,20 +46,16 @@
46
46
  },
47
47
  "dependencies": {
48
48
  "recharts": "2.15.3",
49
- "@easy-editor/materials-shared": "0.0.0"
49
+ "@easy-editor/materials-shared": "0.0.1"
50
50
  },
51
51
  "scripts": {
52
- "dev": "vite",
52
+ "dev": "easypack dev",
53
53
  "dev:debug": "vite --port 5012",
54
54
  "format": "biome format --write .",
55
55
  "lint": "biome check .",
56
56
  "build": "npm-run-all -nl build:*",
57
57
  "build:clean": "rimraf dist/",
58
- "build:js": "rollup -c",
59
- "build:types": "pnpm types",
60
- "types": "npm-run-all -nl types:*",
61
- "types:src": "tsc --project tsconfig.build.json",
62
- "test-types": "tsc --project tsconfig.test.json"
58
+ "build:js": "easypack build"
63
59
  },
64
60
  "module": "dist/index.esm.js",
65
61
  "unpkg": "dist/index.min.js"
package/src/component.tsx CHANGED
@@ -1,15 +1,13 @@
1
1
  /**
2
2
  * Progress Component
3
- * 进度组件 - 支持环形和线性进度条
3
+ * 进度组件 - 支持数据源绑定和事件交互
4
4
  */
5
5
 
6
- import { useId, useRef, useEffect, useState, type CSSProperties, type Ref } from 'react'
6
+ import { useId, useRef, useEffect, useState, useMemo, type CSSProperties } from 'react'
7
+ import { type MaterialComponet, useDataSource } from '@easy-editor/materials-shared'
7
8
  import styles from './component.module.css'
8
9
 
9
- export interface ProgressProps {
10
- ref?: Ref<HTMLDivElement>
11
- /** 当前值 */
12
- value?: number
10
+ export interface ProgressProps extends MaterialComponet {
13
11
  /** 最大值 */
14
12
  maxValue?: number
15
13
  /** 进度条类型 */
@@ -32,8 +30,14 @@ export interface ProgressProps {
32
30
  gradientEnable?: boolean
33
31
  /** 渐变颜色 [起始色, 结束色] */
34
32
  gradientColors?: [string, string]
35
- /** 外部样式 */
36
- style?: CSSProperties
33
+ /** 点击事件 */
34
+ onClick?: (e: React.MouseEvent) => void
35
+ /** 双击事件 */
36
+ onDoubleClick?: (e: React.MouseEvent) => void
37
+ /** 鼠标进入 */
38
+ onMouseEnter?: (e: React.MouseEvent) => void
39
+ /** 鼠标离开 */
40
+ onMouseLeave?: (e: React.MouseEvent) => void
37
41
  }
38
42
 
39
43
  // 格式化数值
@@ -200,7 +204,12 @@ const BarProgress = ({
200
204
 
201
205
  export const Progress: React.FC<ProgressProps> = ({
202
206
  ref,
203
- value = 0,
207
+ $data,
208
+ __dataSource,
209
+ rotation = 0,
210
+ opacity = 100,
211
+ background = 'transparent',
212
+ style: externalStyle,
204
213
  maxValue = 100,
205
214
  type = 'ring',
206
215
  showValue = true,
@@ -212,17 +221,44 @@ export const Progress: React.FC<ProgressProps> = ({
212
221
  progressColor = '#00d4ff',
213
222
  gradientEnable = false,
214
223
  gradientColors = ['#00d4ff', '#9b59b6'],
215
- style: externalStyle,
224
+ onClick,
225
+ onDoubleClick,
226
+ onMouseEnter,
227
+ onMouseLeave,
216
228
  }) => {
217
229
  const gradientId = useId()
218
230
 
231
+ // 解析数据源
232
+ const dataSource = useDataSource($data, __dataSource)
233
+ const value = useMemo<number>(() => {
234
+ if (dataSource.length > 0 && typeof dataSource[0]?.value === 'number') {
235
+ return dataSource[0].value
236
+ }
237
+ return 0
238
+ }, [dataSource])
239
+
219
240
  const normalizedValue = Math.min(Math.max(value, 0), maxValue)
220
241
  const percentage = (normalizedValue / maxValue) * 100
221
242
  const displayColor = gradientEnable ? gradientColors[0] : progressColor
222
243
 
244
+ const wrapperStyle: CSSProperties = {
245
+ transform: rotation !== 0 ? `rotate(${rotation}deg)` : undefined,
246
+ opacity: opacity / 100,
247
+ backgroundColor: background,
248
+ ...externalStyle,
249
+ }
250
+
223
251
  if (type === 'ring') {
224
252
  return (
225
- <div className={styles.wrapper} ref={ref} style={externalStyle}>
253
+ <div
254
+ className={styles.wrapper}
255
+ onClick={onClick}
256
+ onDoubleClick={onDoubleClick}
257
+ onMouseEnter={onMouseEnter}
258
+ onMouseLeave={onMouseLeave}
259
+ ref={ref}
260
+ style={wrapperStyle}
261
+ >
226
262
  <RingProgress
227
263
  displayColor={displayColor}
228
264
  gradientColors={gradientColors}
@@ -242,7 +278,15 @@ export const Progress: React.FC<ProgressProps> = ({
242
278
  }
243
279
 
244
280
  return (
245
- <div className={styles.wrapper} ref={ref} style={externalStyle}>
281
+ <div
282
+ className={styles.wrapper}
283
+ onClick={onClick}
284
+ onDoubleClick={onDoubleClick}
285
+ onMouseEnter={onMouseEnter}
286
+ onMouseLeave={onMouseLeave}
287
+ ref={ref}
288
+ style={wrapperStyle}
289
+ >
246
290
  <BarProgress
247
291
  displayColor={displayColor}
248
292
  gradientColors={gradientColors}
package/src/configure.ts CHANGED
@@ -1,265 +1,168 @@
1
- /**
2
- * Progress Configure
3
- * 进度条组件配置
4
- */
5
-
6
- import type { Configure } from '@easy-editor/core'
7
-
8
- export const configure: Configure = {
9
- props: [
10
- {
11
- type: 'group',
12
- title: '属性',
13
- setter: 'TabSetter',
14
- items: [
15
- {
16
- type: 'group',
17
- key: 'config',
18
- title: '配置',
19
- setter: {
20
- componentName: 'CollapseSetter',
21
- props: {
22
- icon: false,
23
- },
24
- },
25
- items: [
26
- // 基础配置
27
- {
28
- name: 'id',
29
- title: 'ID',
30
- setter: 'NodeIdSetter',
31
- extraProps: {
32
- // @ts-expect-error label is not a valid extra prop
33
- label: false,
34
- },
35
- },
36
- {
37
- name: 'title',
38
- title: '标题',
39
- setter: 'StringSetter',
40
- extraProps: {
41
- getValue(target) {
42
- return target.getExtraPropValue('title')
43
- },
44
- setValue(target, value) {
45
- target.setExtraPropValue('title', value)
46
- },
47
- },
48
- },
49
- {
50
- type: 'group',
51
- title: '基础属性',
52
- setter: {
53
- componentName: 'CollapseSetter',
54
- props: {
55
- icon: false,
56
- },
57
- },
58
- items: [
59
- {
60
- name: 'rect',
61
- title: '位置尺寸',
62
- setter: 'RectSetter',
63
- extraProps: {
64
- getValue(target) {
65
- return target.getExtraPropValue('$dashboard.rect')
66
- },
67
- setValue(target, value) {
68
- target.setExtraPropValue('$dashboard.rect', value)
69
- },
70
- },
71
- },
72
- ],
73
- },
74
- // 组件配置
75
- {
76
- type: 'group',
77
- title: '数值',
78
- setter: {
79
- componentName: 'CollapseSetter',
80
- props: {
81
- icon: false,
82
- },
83
- },
84
- items: [
85
- {
86
- name: 'value',
87
- title: '当前值',
88
- setter: 'NumberSetter',
89
- extraProps: {
90
- defaultValue: 0,
91
- },
92
- },
93
- {
94
- name: 'maxValue',
95
- title: '最大值',
96
- setter: 'NumberSetter',
97
- extraProps: {
98
- defaultValue: 100,
99
- },
100
- },
101
- {
102
- name: 'valueFormat',
103
- title: '值格式',
104
- setter: {
105
- componentName: 'SelectSetter',
106
- props: {
107
- options: [
108
- { label: '百分比', value: 'percent' },
109
- { label: '数值', value: 'number' },
110
- ],
111
- },
112
- },
113
- extraProps: {
114
- defaultValue: 'percent',
115
- },
116
- },
117
- ],
118
- },
119
- {
120
- type: 'group',
121
- title: '显示',
122
- setter: {
123
- componentName: 'CollapseSetter',
124
- props: {
125
- icon: false,
126
- },
127
- },
128
- items: [
129
- {
130
- name: 'type',
131
- title: '进度条类型',
132
- setter: {
133
- componentName: 'SelectSetter',
134
- props: {
135
- options: [
136
- { label: '环形', value: 'ring' },
137
- { label: '线性', value: 'bar' },
138
- ],
139
- },
140
- },
141
- extraProps: {
142
- defaultValue: 'ring',
143
- },
144
- },
145
- {
146
- name: 'showValue',
147
- title: '显示数值',
148
- setter: 'SwitchSetter',
149
- extraProps: {
150
- defaultValue: true,
151
- },
152
- },
153
- {
154
- name: 'showLabel',
155
- title: '显示标签',
156
- setter: 'SwitchSetter',
157
- extraProps: {
158
- defaultValue: false,
159
- },
160
- },
161
- {
162
- name: 'label',
163
- title: '标签文本',
164
- setter: 'StringSetter',
165
- },
166
- ],
167
- },
168
- {
169
- type: 'group',
170
- title: '样式',
171
- setter: {
172
- componentName: 'CollapseSetter',
173
- props: {
174
- icon: false,
175
- },
176
- },
177
- items: [
178
- {
179
- name: 'strokeWidthRatio',
180
- title: '线条粗细',
181
- setter: {
182
- componentName: 'SliderSetter',
183
- props: {
184
- min: 0.02,
185
- max: 0.2,
186
- step: 0.01,
187
- },
188
- },
189
- extraProps: {
190
- defaultValue: 0.07,
191
- },
192
- },
193
- {
194
- name: 'trackColor',
195
- title: '轨道颜色',
196
- setter: 'ColorSetter',
197
- extraProps: {
198
- defaultValue: 'rgba(255, 255, 255, 0.1)',
199
- },
200
- },
201
- {
202
- name: 'progressColor',
203
- title: '进度颜色',
204
- setter: 'ColorSetter',
205
- extraProps: {
206
- defaultValue: '#00ffff',
207
- },
208
- },
209
- {
210
- name: 'gradientEnable',
211
- title: '启用渐变',
212
- setter: 'SwitchSetter',
213
- extraProps: {
214
- defaultValue: false,
215
- },
216
- },
217
- {
218
- name: 'gradientColors',
219
- title: '渐变颜色',
220
- setter: 'ColorSetter',
221
- extraProps: {
222
- defaultValue: ['#00d4ff', '#9b59b6'],
223
- },
224
- },
225
- ],
226
- },
227
- ],
228
- },
229
- {
230
- type: 'group',
231
- key: 'data',
232
- title: '数据',
233
- items: [
234
- {
235
- name: 'dataBinding',
236
- title: '数据绑定',
237
- setter: 'DataBindingSetter',
238
- },
239
- ],
240
- },
241
- {
242
- type: 'group',
243
- key: 'advanced',
244
- title: '高级',
245
- items: [
246
- {
247
- name: 'condition',
248
- title: '显隐控制',
249
- setter: 'SwitchSetter',
250
- extraProps: {
251
- defaultValue: true,
252
- supportVariable: true,
253
- },
254
- },
255
- ],
256
- },
257
- ],
258
- },
259
- ],
260
- component: {},
261
- supports: {},
262
- advanced: {},
263
- }
264
-
265
- export default configure
1
+ /**
2
+ * Progress Configure
3
+ * 进度条组件配置
4
+ */
5
+
6
+ import type { FieldConfig } from '@easy-editor/core'
7
+ import { createCollapseGroup, createDataConfigGroup, createStandardConfigure } from '@easy-editor/materials-shared'
8
+
9
+ /** 组件配置 - 进度条独有 */
10
+ const componentConfigGroup: FieldConfig = createCollapseGroup(
11
+ '组件配置',
12
+ [
13
+ {
14
+ type: 'group',
15
+ title: '组件配置',
16
+ setter: 'SubTabSetter',
17
+ items: [
18
+ // 数值 Tab
19
+ {
20
+ type: 'group',
21
+ key: 'value',
22
+ title: '数值',
23
+ items: [
24
+ {
25
+ name: 'maxValue',
26
+ title: '最大值',
27
+ setter: 'NumberSetter',
28
+ extraProps: {
29
+ defaultValue: 100,
30
+ },
31
+ },
32
+ {
33
+ name: 'valueFormat',
34
+ title: '值格式',
35
+ setter: {
36
+ componentName: 'SelectSetter',
37
+ props: {
38
+ options: [
39
+ { label: '百分比', value: 'percent' },
40
+ { label: '数值', value: 'number' },
41
+ ],
42
+ },
43
+ },
44
+ extraProps: {
45
+ defaultValue: 'percent',
46
+ },
47
+ },
48
+ ],
49
+ },
50
+ // 显示 Tab
51
+ {
52
+ type: 'group',
53
+ key: 'display',
54
+ title: '显示',
55
+ items: [
56
+ {
57
+ name: 'type',
58
+ title: '进度条类型',
59
+ setter: {
60
+ componentName: 'SegmentedSetter',
61
+ props: {
62
+ options: [
63
+ { label: '环形', value: 'ring' },
64
+ { label: '线性', value: 'bar' },
65
+ ],
66
+ },
67
+ },
68
+ extraProps: {
69
+ defaultValue: 'ring',
70
+ },
71
+ },
72
+ {
73
+ name: 'showValue',
74
+ title: '显示数值',
75
+ setter: 'SwitchSetter',
76
+ extraProps: {
77
+ defaultValue: true,
78
+ },
79
+ },
80
+ {
81
+ name: 'showLabel',
82
+ title: '显示标签',
83
+ setter: 'SwitchSetter',
84
+ extraProps: {
85
+ defaultValue: false,
86
+ },
87
+ },
88
+ {
89
+ name: 'label',
90
+ title: '标签文本',
91
+ setter: 'StringSetter',
92
+ },
93
+ ],
94
+ },
95
+ // 样式 Tab
96
+ {
97
+ type: 'group',
98
+ key: 'style',
99
+ title: '样式',
100
+ items: [
101
+ {
102
+ name: 'strokeWidthRatio',
103
+ title: '线条粗细',
104
+ setter: {
105
+ componentName: 'SliderSetter',
106
+ props: {
107
+ min: 0.02,
108
+ max: 0.2,
109
+ step: 0.01,
110
+ },
111
+ },
112
+ extraProps: {
113
+ defaultValue: 0.07,
114
+ },
115
+ },
116
+ {
117
+ name: 'trackColor',
118
+ title: '轨道颜色',
119
+ setter: 'ColorSetter',
120
+ extraProps: {
121
+ defaultValue: 'rgba(255, 255, 255, 0.1)',
122
+ },
123
+ },
124
+ {
125
+ name: 'progressColor',
126
+ title: '进度颜色',
127
+ setter: 'ColorSetter',
128
+ extraProps: {
129
+ defaultValue: '#00ffff',
130
+ },
131
+ },
132
+ {
133
+ name: 'gradientEnable',
134
+ title: '启用渐变',
135
+ setter: 'SwitchSetter',
136
+ extraProps: {
137
+ defaultValue: false,
138
+ },
139
+ },
140
+ {
141
+ name: 'gradientColors',
142
+ title: '渐变颜色',
143
+ setter: {
144
+ componentName: 'ArraySetter',
145
+ props: {
146
+ itemSetter: 'ColorSetter',
147
+ },
148
+ },
149
+ extraProps: {
150
+ defaultValue: ['#00d4ff', '#9b59b6'],
151
+ },
152
+ },
153
+ ],
154
+ },
155
+ ],
156
+ },
157
+ ],
158
+ {
159
+ padding: '6px 16px 12px',
160
+ },
161
+ )
162
+
163
+ /** 数据配置 */
164
+ const dataConfigGroup: FieldConfig = createDataConfigGroup([
165
+ { name: 'value', label: 'value', type: 'number', required: true, description: '当前值' },
166
+ ])
167
+
168
+ export const configure = createStandardConfigure(componentConfigGroup, dataConfigGroup)
package/src/index.tsx CHANGED
@@ -1,7 +1,7 @@
1
- /**
2
- * Progress Entry
3
- * 进度条组件入口
4
- */
5
-
6
- export { Progress as component } from './component'
7
- export { default as meta } from './meta'
1
+ /**
2
+ * Progress Entry
3
+ * 进度条组件入口
4
+ */
5
+
6
+ export { Progress as component } from './component'
7
+ export { meta } from './meta'
package/src/meta.ts CHANGED
@@ -6,8 +6,8 @@
6
6
  import type { ComponentMetadata } from '@easy-editor/core'
7
7
  import { MaterialGroup } from '@easy-editor/materials-shared'
8
8
  import { COMPONENT_NAME, PACKAGE_NAME } from './constants'
9
- import configure from './configure'
10
- import snippets from './snippets'
9
+ import { configure } from './configure'
10
+ import { snippets } from './snippets'
11
11
  import pkg from '../package.json'
12
12
 
13
13
  export const meta: ComponentMetadata = {