@canlooks/can-ui 0.0.136 → 0.0.138
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/cjs/components/accordion/accordion.d.ts +5 -1
- package/dist/cjs/components/accordion/accordion.js +4 -2
- package/dist/cjs/components/accordion/accordion.style.d.ts +1 -0
- package/dist/cjs/components/accordion/accordion.style.js +18 -10
- package/dist/cjs/components/checkboxBase/checkboxBase.style.js +2 -2
- package/dist/cjs/utils/gesture.d.ts +4 -2
- package/dist/cjs/utils/gesture.js +9 -3
- package/dist/esm/components/accordion/accordion.d.ts +5 -1
- package/dist/esm/components/accordion/accordion.js +4 -2
- package/dist/esm/components/accordion/accordion.style.d.ts +1 -0
- package/dist/esm/components/accordion/accordion.style.js +18 -10
- package/dist/esm/components/checkboxBase/checkboxBase.style.js +2 -2
- package/dist/esm/utils/gesture.d.ts +4 -2
- package/dist/esm/utils/gesture.js +9 -3
- package/package.json +1 -1
|
@@ -5,6 +5,10 @@ export interface AccordionProps extends Omit<DivProps, 'title' | 'prefix'> {
|
|
|
5
5
|
title?: ReactNode;
|
|
6
6
|
prefix?: ReactNode;
|
|
7
7
|
suffix?: ReactNode;
|
|
8
|
+
/**
|
|
9
|
+
* 展开图标的位置,默认为`left`
|
|
10
|
+
*/
|
|
11
|
+
expandIconPlacement?: 'left' | 'right';
|
|
8
12
|
expandIcon?: ReactNode | ((expanded: boolean) => ReactNode);
|
|
9
13
|
defaultExpanded?: boolean;
|
|
10
14
|
expanded?: boolean;
|
|
@@ -12,4 +16,4 @@ export interface AccordionProps extends Omit<DivProps, 'title' | 'prefix'> {
|
|
|
12
16
|
readOnly?: boolean;
|
|
13
17
|
disabled?: boolean;
|
|
14
18
|
}
|
|
15
|
-
export declare function Accordion({ size, title, prefix, suffix, expandIcon, defaultExpanded, expanded, onExpandedChange, readOnly, disabled, ...props }: AccordionProps): import("@emotion/react/jsx-runtime").JSX.Element;
|
|
19
|
+
export declare function Accordion({ size, title, prefix, suffix, expandIconPlacement, expandIcon, defaultExpanded, expanded, onExpandedChange, readOnly, disabled, ...props }: AccordionProps): import("@emotion/react/jsx-runtime").JSX.Element;
|
|
@@ -8,7 +8,7 @@ const theme_1 = require("../theme");
|
|
|
8
8
|
const transitionBase_1 = require("../transitionBase");
|
|
9
9
|
const icon_1 = require("../icon");
|
|
10
10
|
const free_solid_svg_icons_1 = require("@fortawesome/free-solid-svg-icons");
|
|
11
|
-
function Accordion({ size, title, prefix, suffix, expandIcon, defaultExpanded = false, expanded, onExpandedChange, readOnly, disabled, ...props }) {
|
|
11
|
+
function Accordion({ size, title, prefix, suffix, expandIconPlacement = 'left', expandIcon, defaultExpanded = false, expanded, onExpandedChange, readOnly, disabled, ...props }) {
|
|
12
12
|
const theme = (0, theme_1.useTheme)();
|
|
13
13
|
size ??= theme.size;
|
|
14
14
|
const [innerExpanded, setInnerExpanded] = (0, utils_1.useControlled)(defaultExpanded, expanded, onExpandedChange);
|
|
@@ -24,6 +24,8 @@ function Accordion({ size, title, prefix, suffix, expandIcon, defaultExpanded =
|
|
|
24
24
|
}
|
|
25
25
|
return expandIcon;
|
|
26
26
|
};
|
|
27
|
-
return ((0, jsx_runtime_1.jsxs)("div", { ...props, css: accordion_style_1.style, className: (0, utils_1.clsx)(accordion_style_1.classes.root, props.className), "data-size": size, "data-expanded": innerExpanded.current, "data-read-only": readOnly, "data-disabled": disabled, children: [(0, jsx_runtime_1.jsxs)("div", { className: accordion_style_1.classes.titleRow,
|
|
27
|
+
return ((0, jsx_runtime_1.jsxs)("div", { ...props, css: accordion_style_1.style, className: (0, utils_1.clsx)(accordion_style_1.classes.root, props.className), "data-size": size, "data-expanded": innerExpanded.current, "data-read-only": readOnly, "data-disabled": disabled, children: [(0, jsx_runtime_1.jsxs)("div", { className: accordion_style_1.classes.titleRow, style: {
|
|
28
|
+
flexDirection: expandIconPlacement === 'right' ? 'row-reverse' : 'row'
|
|
29
|
+
}, onClick: toggleExpanded, children: [renderExpandIcon(), (0, jsx_runtime_1.jsxs)("div", { className: accordion_style_1.classes.titleContentWrapper, children: [!!prefix && (0, jsx_runtime_1.jsx)("div", { className: accordion_style_1.classes.prefix, children: prefix }), (0, jsx_runtime_1.jsx)("div", { className: accordion_style_1.classes.title, children: title }), !!suffix && (0, jsx_runtime_1.jsx)("div", { className: accordion_style_1.classes.suffix, children: suffix })] })] }), !!props.children &&
|
|
28
30
|
(0, jsx_runtime_1.jsx)(transitionBase_1.Collapse, { in: innerExpanded.current, children: (0, jsx_runtime_1.jsx)("div", { className: accordion_style_1.classes.content, children: props.children }) })] }));
|
|
29
31
|
}
|
|
@@ -6,6 +6,7 @@ const utils_1 = require("../../utils");
|
|
|
6
6
|
exports.classes = (0, utils_1.defineInnerClasses)('accordion', [
|
|
7
7
|
'titleRow',
|
|
8
8
|
'expandIcon',
|
|
9
|
+
'titleContentWrapper',
|
|
9
10
|
'title',
|
|
10
11
|
'prefix',
|
|
11
12
|
'suffix',
|
|
@@ -25,21 +26,28 @@ exports.style = (0, utils_1.defineCss)(({ divider, borderRadius, background, spa
|
|
|
25
26
|
padding: 9px ${spacing[5]}px;
|
|
26
27
|
transition: padding .25s ${easing.easeOut};
|
|
27
28
|
|
|
28
|
-
.${exports.classes.expandIcon} {
|
|
29
|
+
> .${exports.classes.expandIcon} {
|
|
29
30
|
color: ${text.disabled};
|
|
30
31
|
transition: transform .25s ${easing.easeOut};
|
|
31
32
|
}
|
|
32
|
-
|
|
33
|
-
.${exports.classes.
|
|
33
|
+
|
|
34
|
+
> .${exports.classes.titleContentWrapper} {
|
|
34
35
|
flex: 1;
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
display: flex;
|
|
37
|
+
align-items: center;
|
|
38
|
+
gap: ${spacing[2]}px;
|
|
39
|
+
|
|
40
|
+
> .${exports.classes.title} {
|
|
41
|
+
flex: 1;
|
|
42
|
+
white-space: nowrap;
|
|
43
|
+
text-overflow: ellipsis;
|
|
44
|
+
overflow: hidden;
|
|
45
|
+
}
|
|
39
46
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
47
|
+
> .${exports.classes.prefix},
|
|
48
|
+
> .${exports.classes.suffix} {
|
|
49
|
+
color: ${text.secondary};
|
|
50
|
+
}
|
|
43
51
|
}
|
|
44
52
|
}
|
|
45
53
|
|
|
@@ -72,7 +72,7 @@ function useStyle({ color }) {
|
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
.${exports.classes.label} {
|
|
75
|
-
transition:
|
|
75
|
+
transition: opacity .25s ${easing.easeOut};
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
&[data-size=small] {
|
|
@@ -114,7 +114,7 @@ function useStyle({ color }) {
|
|
|
114
114
|
}
|
|
115
115
|
|
|
116
116
|
.${exports.classes.label} {
|
|
117
|
-
transition:
|
|
117
|
+
transition: opacity 0s;
|
|
118
118
|
opacity: 1;
|
|
119
119
|
}
|
|
120
120
|
}
|
|
@@ -37,10 +37,12 @@ type SharedGestureOptions = {
|
|
|
37
37
|
onClick?: MouseEventHandler;
|
|
38
38
|
};
|
|
39
39
|
export interface DraggableGestureOptions<D = any> extends SharedGestureOptions {
|
|
40
|
-
/**
|
|
40
|
+
/** 按下后经过一段时间才触发拖拽事件,默认`0`,单位ms */
|
|
41
41
|
delay?: number;
|
|
42
|
-
/**
|
|
42
|
+
/** 拖拽一段距离后才触发拖拽事件,默认`0`,单位px */
|
|
43
43
|
distance?: number;
|
|
44
|
+
/** 允许点击事件触发的抖动距离,默认`2`,单位px */
|
|
45
|
+
clickVibration?: number;
|
|
44
46
|
onDragStart?(e: React.PointerEvent): D;
|
|
45
47
|
onDrag?(info: DragInfo<D>, e: PointerEvent): void;
|
|
46
48
|
onDragEnd?(info: DragEndInfo<D>): void;
|
|
@@ -18,6 +18,7 @@ function useGesture(options) {
|
|
|
18
18
|
zoom,
|
|
19
19
|
draggable: true,
|
|
20
20
|
distance: 0,
|
|
21
|
+
clickVibration: 2,
|
|
21
22
|
preventNativeTouchMove: true,
|
|
22
23
|
...options
|
|
23
24
|
});
|
|
@@ -73,9 +74,10 @@ function useGesture(options) {
|
|
|
73
74
|
const draggingPointerMove = (0, react_1.useCallback)((e) => {
|
|
74
75
|
e.preventDefault();
|
|
75
76
|
const dragInfo = settleDragInfo(e);
|
|
77
|
+
const absDiffX = Math.abs(dragInfo.diff[0]);
|
|
78
|
+
const absDiffY = Math.abs(dragInfo.diff[1]);
|
|
76
79
|
if (!isRollback.current) {
|
|
77
|
-
|
|
78
|
-
const absDiffY = Math.abs(dragInfo.diff[1]);
|
|
80
|
+
// 非pinching事件回滚
|
|
79
81
|
if (delayTimeout.current) {
|
|
80
82
|
if (absDiffX > 5 || absDiffY > 5) {
|
|
81
83
|
// 延时尚未结束,但偏移量过大,取消拖拽
|
|
@@ -89,7 +91,11 @@ function useGesture(options) {
|
|
|
89
91
|
return;
|
|
90
92
|
}
|
|
91
93
|
}
|
|
92
|
-
|
|
94
|
+
const { clickVibration } = syncOptions.current;
|
|
95
|
+
if (!isDragged.current && (absDiffX > clickVibration || absDiffY > clickVibration)) {
|
|
96
|
+
// 拖拽距离超过允许抖动,将isDragged标记为true
|
|
97
|
+
isDragged.current = true;
|
|
98
|
+
}
|
|
93
99
|
syncOptions.current.onDrag?.(dragInfo, e);
|
|
94
100
|
}, []);
|
|
95
101
|
const cancelDragFn = () => {
|
|
@@ -5,6 +5,10 @@ export interface AccordionProps extends Omit<DivProps, 'title' | 'prefix'> {
|
|
|
5
5
|
title?: ReactNode;
|
|
6
6
|
prefix?: ReactNode;
|
|
7
7
|
suffix?: ReactNode;
|
|
8
|
+
/**
|
|
9
|
+
* 展开图标的位置,默认为`left`
|
|
10
|
+
*/
|
|
11
|
+
expandIconPlacement?: 'left' | 'right';
|
|
8
12
|
expandIcon?: ReactNode | ((expanded: boolean) => ReactNode);
|
|
9
13
|
defaultExpanded?: boolean;
|
|
10
14
|
expanded?: boolean;
|
|
@@ -12,4 +16,4 @@ export interface AccordionProps extends Omit<DivProps, 'title' | 'prefix'> {
|
|
|
12
16
|
readOnly?: boolean;
|
|
13
17
|
disabled?: boolean;
|
|
14
18
|
}
|
|
15
|
-
export declare function Accordion({ size, title, prefix, suffix, expandIcon, defaultExpanded, expanded, onExpandedChange, readOnly, disabled, ...props }: AccordionProps): import("@emotion/react/jsx-runtime").JSX.Element;
|
|
19
|
+
export declare function Accordion({ size, title, prefix, suffix, expandIconPlacement, expandIcon, defaultExpanded, expanded, onExpandedChange, readOnly, disabled, ...props }: AccordionProps): import("@emotion/react/jsx-runtime").JSX.Element;
|
|
@@ -5,7 +5,7 @@ import { useTheme } from '../theme';
|
|
|
5
5
|
import { Collapse } from '../transitionBase';
|
|
6
6
|
import { Icon } from '../icon';
|
|
7
7
|
import { faCaretRight } from '@fortawesome/free-solid-svg-icons';
|
|
8
|
-
export function Accordion({ size, title, prefix, suffix, expandIcon, defaultExpanded = false, expanded, onExpandedChange, readOnly, disabled, ...props }) {
|
|
8
|
+
export function Accordion({ size, title, prefix, suffix, expandIconPlacement = 'left', expandIcon, defaultExpanded = false, expanded, onExpandedChange, readOnly, disabled, ...props }) {
|
|
9
9
|
const theme = useTheme();
|
|
10
10
|
size ??= theme.size;
|
|
11
11
|
const [innerExpanded, setInnerExpanded] = useControlled(defaultExpanded, expanded, onExpandedChange);
|
|
@@ -21,6 +21,8 @@ export function Accordion({ size, title, prefix, suffix, expandIcon, defaultExpa
|
|
|
21
21
|
}
|
|
22
22
|
return expandIcon;
|
|
23
23
|
};
|
|
24
|
-
return (_jsxs("div", { ...props, css: style, className: clsx(classes.root, props.className), "data-size": size, "data-expanded": innerExpanded.current, "data-read-only": readOnly, "data-disabled": disabled, children: [_jsxs("div", { className: classes.titleRow,
|
|
24
|
+
return (_jsxs("div", { ...props, css: style, className: clsx(classes.root, props.className), "data-size": size, "data-expanded": innerExpanded.current, "data-read-only": readOnly, "data-disabled": disabled, children: [_jsxs("div", { className: classes.titleRow, style: {
|
|
25
|
+
flexDirection: expandIconPlacement === 'right' ? 'row-reverse' : 'row'
|
|
26
|
+
}, onClick: toggleExpanded, children: [renderExpandIcon(), _jsxs("div", { className: classes.titleContentWrapper, children: [!!prefix && _jsx("div", { className: classes.prefix, children: prefix }), _jsx("div", { className: classes.title, children: title }), !!suffix && _jsx("div", { className: classes.suffix, children: suffix })] })] }), !!props.children &&
|
|
25
27
|
_jsx(Collapse, { in: innerExpanded.current, children: _jsx("div", { className: classes.content, children: props.children }) })] }));
|
|
26
28
|
}
|
|
@@ -3,6 +3,7 @@ import { defineInnerClasses, defineCss } from '../../utils';
|
|
|
3
3
|
export const classes = defineInnerClasses('accordion', [
|
|
4
4
|
'titleRow',
|
|
5
5
|
'expandIcon',
|
|
6
|
+
'titleContentWrapper',
|
|
6
7
|
'title',
|
|
7
8
|
'prefix',
|
|
8
9
|
'suffix',
|
|
@@ -22,21 +23,28 @@ export const style = defineCss(({ divider, borderRadius, background, spacing, te
|
|
|
22
23
|
padding: 9px ${spacing[5]}px;
|
|
23
24
|
transition: padding .25s ${easing.easeOut};
|
|
24
25
|
|
|
25
|
-
.${classes.expandIcon} {
|
|
26
|
+
> .${classes.expandIcon} {
|
|
26
27
|
color: ${text.disabled};
|
|
27
28
|
transition: transform .25s ${easing.easeOut};
|
|
28
29
|
}
|
|
29
|
-
|
|
30
|
-
.${classes.
|
|
30
|
+
|
|
31
|
+
> .${classes.titleContentWrapper} {
|
|
31
32
|
flex: 1;
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
display: flex;
|
|
34
|
+
align-items: center;
|
|
35
|
+
gap: ${spacing[2]}px;
|
|
36
|
+
|
|
37
|
+
> .${classes.title} {
|
|
38
|
+
flex: 1;
|
|
39
|
+
white-space: nowrap;
|
|
40
|
+
text-overflow: ellipsis;
|
|
41
|
+
overflow: hidden;
|
|
42
|
+
}
|
|
36
43
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
44
|
+
> .${classes.prefix},
|
|
45
|
+
> .${classes.suffix} {
|
|
46
|
+
color: ${text.secondary};
|
|
47
|
+
}
|
|
40
48
|
}
|
|
41
49
|
}
|
|
42
50
|
|
|
@@ -67,7 +67,7 @@ export function useStyle({ color }) {
|
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
.${classes.label} {
|
|
70
|
-
transition:
|
|
70
|
+
transition: opacity .25s ${easing.easeOut};
|
|
71
71
|
}
|
|
72
72
|
|
|
73
73
|
&[data-size=small] {
|
|
@@ -109,7 +109,7 @@ export function useStyle({ color }) {
|
|
|
109
109
|
}
|
|
110
110
|
|
|
111
111
|
.${classes.label} {
|
|
112
|
-
transition:
|
|
112
|
+
transition: opacity 0s;
|
|
113
113
|
opacity: 1;
|
|
114
114
|
}
|
|
115
115
|
}
|
|
@@ -37,10 +37,12 @@ type SharedGestureOptions = {
|
|
|
37
37
|
onClick?: MouseEventHandler;
|
|
38
38
|
};
|
|
39
39
|
export interface DraggableGestureOptions<D = any> extends SharedGestureOptions {
|
|
40
|
-
/**
|
|
40
|
+
/** 按下后经过一段时间才触发拖拽事件,默认`0`,单位ms */
|
|
41
41
|
delay?: number;
|
|
42
|
-
/**
|
|
42
|
+
/** 拖拽一段距离后才触发拖拽事件,默认`0`,单位px */
|
|
43
43
|
distance?: number;
|
|
44
|
+
/** 允许点击事件触发的抖动距离,默认`2`,单位px */
|
|
45
|
+
clickVibration?: number;
|
|
44
46
|
onDragStart?(e: React.PointerEvent): D;
|
|
45
47
|
onDrag?(info: DragInfo<D>, e: PointerEvent): void;
|
|
46
48
|
onDragEnd?(info: DragEndInfo<D>): void;
|
|
@@ -13,6 +13,7 @@ export function useGesture(options) {
|
|
|
13
13
|
zoom,
|
|
14
14
|
draggable: true,
|
|
15
15
|
distance: 0,
|
|
16
|
+
clickVibration: 2,
|
|
16
17
|
preventNativeTouchMove: true,
|
|
17
18
|
...options
|
|
18
19
|
});
|
|
@@ -68,9 +69,10 @@ export function useGesture(options) {
|
|
|
68
69
|
const draggingPointerMove = useCallback((e) => {
|
|
69
70
|
e.preventDefault();
|
|
70
71
|
const dragInfo = settleDragInfo(e);
|
|
72
|
+
const absDiffX = Math.abs(dragInfo.diff[0]);
|
|
73
|
+
const absDiffY = Math.abs(dragInfo.diff[1]);
|
|
71
74
|
if (!isRollback.current) {
|
|
72
|
-
|
|
73
|
-
const absDiffY = Math.abs(dragInfo.diff[1]);
|
|
75
|
+
// 非pinching事件回滚
|
|
74
76
|
if (delayTimeout.current) {
|
|
75
77
|
if (absDiffX > 5 || absDiffY > 5) {
|
|
76
78
|
// 延时尚未结束,但偏移量过大,取消拖拽
|
|
@@ -84,7 +86,11 @@ export function useGesture(options) {
|
|
|
84
86
|
return;
|
|
85
87
|
}
|
|
86
88
|
}
|
|
87
|
-
|
|
89
|
+
const { clickVibration } = syncOptions.current;
|
|
90
|
+
if (!isDragged.current && (absDiffX > clickVibration || absDiffY > clickVibration)) {
|
|
91
|
+
// 拖拽距离超过允许抖动,将isDragged标记为true
|
|
92
|
+
isDragged.current = true;
|
|
93
|
+
}
|
|
88
94
|
syncOptions.current.onDrag?.(dragInfo, e);
|
|
89
95
|
}, []);
|
|
90
96
|
const cancelDragFn = () => {
|