@easy-editor/materials-dashboard-button 0.0.2 → 0.0.4

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,7 +1,21 @@
1
- # @easy-editor/materials-dashboard-button
2
-
3
- ## 0.0.2
4
-
5
- ### Patch Changes
6
-
7
- - feat: new setters
1
+ # @easy-editor/materials-dashboard-button
2
+
3
+ ## 0.0.4
4
+
5
+ ### Patch Changes
6
+
7
+ - fix: component export error
8
+
9
+ ## 0.0.3
10
+
11
+ ### Patch Changes
12
+
13
+ - perf: configure & datasource
14
+ - Updated dependencies
15
+ - @easy-editor/materials-shared@0.0.1
16
+
17
+ ## 0.0.2
18
+
19
+ ### Patch Changes
20
+
21
+ - 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-button",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "description": "Button component for EasyEditor dashboard",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -45,19 +45,15 @@
45
45
  "@types/react-dom": "^18 || ^19"
46
46
  },
47
47
  "dependencies": {
48
- "@easy-editor/materials-shared": "0.0.0"
48
+ "@easy-editor/materials-shared": "0.0.1"
49
49
  },
50
50
  "scripts": {
51
- "dev": "vite",
51
+ "dev": "easypack dev",
52
52
  "format": "biome format --write .",
53
53
  "lint": "biome check .",
54
54
  "build": "npm-run-all -nl build:*",
55
55
  "build:clean": "rimraf dist/",
56
- "build:js": "rollup -c",
57
- "build:types": "pnpm types",
58
- "types": "npm-run-all -nl types:*",
59
- "types:src": "tsc --project tsconfig.build.json",
60
- "test-types": "tsc --project tsconfig.test.json"
56
+ "build:js": "easypack build"
61
57
  },
62
58
  "module": "dist/index.esm.js",
63
59
  "unpkg": "dist/index.min.js"
package/src/component.tsx CHANGED
@@ -1,80 +1,139 @@
1
- /**
2
- * Button Component
3
- * 按钮组件
4
- */
5
-
6
- import type { CSSProperties, Ref, MouseEvent } from 'react'
7
- import { cn } from '@easy-editor/materials-shared'
8
- import styles from './component.module.css'
9
-
10
- export type ButtonVariant = 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger'
11
- export type ButtonSize = 'small' | 'medium' | 'large'
12
-
13
- export interface ButtonProps {
14
- ref?: Ref<HTMLButtonElement>
15
- /** 按钮文本 */
16
- text?: string
17
- /** 按钮变体 */
18
- variant?: ButtonVariant
19
- /** 按钮尺寸 */
20
- size?: ButtonSize
21
- /** 是否禁用 */
22
- disabled?: boolean
23
- /** 是否显示发光效果 */
24
- glowEnable?: boolean
25
- /** 点击事件 */
26
- onClick?: (e: MouseEvent<HTMLButtonElement>) => void
27
- /** 外部样式 */
28
- style?: CSSProperties
29
- }
30
-
31
- const getSizeClass = (size: ButtonSize): string => {
32
- switch (size) {
33
- case 'small':
34
- return styles.sizeSmall
35
- case 'medium':
36
- return styles.sizeMedium
37
- case 'large':
38
- return styles.sizeLarge
39
- default:
40
- return styles.sizeMedium
41
- }
42
- }
43
-
44
- const getVariantClass = (variant: ButtonVariant): string => {
45
- switch (variant) {
46
- case 'primary':
47
- return styles.variantPrimary
48
- case 'secondary':
49
- return styles.variantSecondary
50
- case 'outline':
51
- return styles.variantOutline
52
- case 'ghost':
53
- return styles.variantGhost
54
- case 'danger':
55
- return styles.variantDanger
56
- default:
57
- return styles.variantPrimary
58
- }
59
- }
60
-
61
- export const Button: React.FC<ButtonProps> = ({
62
- ref,
63
- text = '按钮',
64
- variant = 'primary',
65
- size = 'medium',
66
- disabled = false,
67
- glowEnable = false,
68
- onClick,
69
- style: externalStyle,
70
- }) => {
71
- const buttonClass = cn(styles.button, getSizeClass(size), getVariantClass(variant), glowEnable && styles.glow)
72
-
73
- return (
74
- <button className={buttonClass} disabled={disabled} onClick={onClick} ref={ref} style={externalStyle} type='button'>
75
- {text ? <span>{text}</span> : null}
76
- </button>
77
- )
78
- }
79
-
80
- export default Button
1
+ /**
2
+ * Button Component
3
+ * 按钮组件 - 支持数据源绑定和事件交互
4
+ */
5
+
6
+ import { useMemo, type CSSProperties, type MouseEvent } from 'react'
7
+ import { cn, type MaterialComponet, useDataSource } from '@easy-editor/materials-shared'
8
+ import styles from './component.module.css'
9
+
10
+ export type ButtonVariant = 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger'
11
+ export type ButtonSize = 'small' | 'medium' | 'large'
12
+
13
+ export interface ButtonProps extends MaterialComponet<HTMLButtonElement> {
14
+ /** 按钮变体 */
15
+ variant?: ButtonVariant
16
+ /** 按钮尺寸 */
17
+ size?: ButtonSize
18
+ /** 是否禁用 */
19
+ disabled?: boolean
20
+ /** 是否显示发光效果 */
21
+ glowEnable?: boolean
22
+ /** 链接地址 */
23
+ href?: string
24
+ /** 链接打开方式 */
25
+ target?: '_blank' | '_self'
26
+ /** 是否加载中 */
27
+ loading?: boolean
28
+ /** 加载文本 */
29
+ loadingText?: string
30
+ /** 点击事件 */
31
+ onClick?: (e: MouseEvent<HTMLButtonElement>) => void
32
+ /** 双击事件 */
33
+ onDoubleClick?: (e: MouseEvent<HTMLButtonElement>) => void
34
+ /** 鼠标进入 */
35
+ onMouseEnter?: (e: MouseEvent<HTMLButtonElement>) => void
36
+ /** 鼠标离开 */
37
+ onMouseLeave?: (e: MouseEvent<HTMLButtonElement>) => void
38
+ }
39
+
40
+ const getSizeClass = (size: ButtonSize): string => {
41
+ switch (size) {
42
+ case 'small':
43
+ return styles.sizeSmall
44
+ case 'medium':
45
+ return styles.sizeMedium
46
+ case 'large':
47
+ return styles.sizeLarge
48
+ default:
49
+ return styles.sizeMedium
50
+ }
51
+ }
52
+
53
+ const getVariantClass = (variant: ButtonVariant): string => {
54
+ switch (variant) {
55
+ case 'primary':
56
+ return styles.variantPrimary
57
+ case 'secondary':
58
+ return styles.variantSecondary
59
+ case 'outline':
60
+ return styles.variantOutline
61
+ case 'ghost':
62
+ return styles.variantGhost
63
+ case 'danger':
64
+ return styles.variantDanger
65
+ default:
66
+ return styles.variantPrimary
67
+ }
68
+ }
69
+
70
+ export const Button: React.FC<ButtonProps> = ({
71
+ ref,
72
+ $data,
73
+ __dataSource,
74
+ variant = 'primary',
75
+ size = 'medium',
76
+ disabled = false,
77
+ glowEnable = false,
78
+ href,
79
+ target = '_blank',
80
+ loading = false,
81
+ loadingText = '加载中...',
82
+ rotation = 0,
83
+ opacity = 100,
84
+ background,
85
+ onClick,
86
+ onDoubleClick,
87
+ onMouseEnter,
88
+ onMouseLeave,
89
+ style: externalStyle,
90
+ }) => {
91
+ const dataSource = useDataSource($data, __dataSource)
92
+ const data = useMemo<string>(() => {
93
+ if (dataSource.length > 0 && dataSource[0]?.text) {
94
+ return String(dataSource[0].text)
95
+ }
96
+ return ''
97
+ }, [dataSource])
98
+
99
+ const buttonClass = cn(styles.button, getSizeClass(size), getVariantClass(variant), glowEnable && styles.glow)
100
+
101
+ const displayText = loading ? loadingText : data
102
+
103
+ const buttonStyle: CSSProperties = {
104
+ transform: rotation !== 0 ? `rotate(${rotation}deg)` : undefined,
105
+ opacity: opacity / 100,
106
+ backgroundColor: background,
107
+ ...externalStyle,
108
+ }
109
+
110
+ const handleClick = (e: MouseEvent<HTMLButtonElement>) => {
111
+ if (disabled || loading) {
112
+ return
113
+ }
114
+
115
+ if (href) {
116
+ window.open(href, target)
117
+ }
118
+
119
+ onClick?.(e)
120
+ }
121
+
122
+ return (
123
+ <button
124
+ className={buttonClass}
125
+ disabled={disabled || loading}
126
+ onClick={handleClick}
127
+ onDoubleClick={onDoubleClick}
128
+ onMouseEnter={onMouseEnter}
129
+ onMouseLeave={onMouseLeave}
130
+ ref={ref}
131
+ style={buttonStyle}
132
+ type='button'
133
+ >
134
+ {displayText ? <span>{displayText}</span> : null}
135
+ </button>
136
+ )
137
+ }
138
+
139
+ export default Button