@canlooks/can-ui 0.0.64 → 0.0.66
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/button/button.js +1 -1
- package/dist/cjs/components/dataGrid/dataGrid.style.js +1 -0
- package/dist/cjs/components/popper/popper.js +7 -1
- package/dist/cjs/components/upload/dropArea.js +1 -2
- package/dist/cjs/components/upload/dropArea.style.js +12 -18
- package/dist/cjs/components/upload/upload.d.ts +4 -4
- package/dist/esm/components/button/button.js +1 -1
- package/dist/esm/components/dataGrid/dataGrid.style.js +1 -0
- package/dist/esm/components/popper/popper.js +7 -1
- package/dist/esm/components/upload/dropArea.js +1 -2
- package/dist/esm/components/upload/dropArea.style.js +12 -18
- package/dist/esm/components/upload/upload.d.ts +4 -4
- package/package.json +1 -1
|
@@ -31,7 +31,7 @@ const Button = ({ component: Component = 'button', color = 'primary', shape = 's
|
|
|
31
31
|
? actualPrefix
|
|
32
32
|
? (0, jsx_runtime_1.jsx)(loadingIndicator_1.LoadingIndicator, { color: reverseTextColor })
|
|
33
33
|
: (0, jsx_runtime_1.jsx)(transitionBase_1.Collapse, { orientation: "horizontal", in: true, children: (0, jsx_runtime_1.jsx)(loadingIndicator_1.LoadingIndicator, { color: reverseTextColor }) })
|
|
34
|
-
: actualPrefix, !!actualChildren &&
|
|
34
|
+
: (0, jsx_runtime_1.jsx)("div", { className: button_style_1.classes.prefix, children: actualPrefix }), !!actualChildren &&
|
|
35
35
|
(0, jsx_runtime_1.jsx)("div", { className: button_style_1.classes.content, children: actualChildren }), !!suffix &&
|
|
36
36
|
(0, jsx_runtime_1.jsx)("div", { className: button_style_1.classes.suffix, children: suffix })] }));
|
|
37
37
|
};
|
|
@@ -358,7 +358,12 @@ function Popper({ ref, popperRef, anchorElement, container = document.body, cont
|
|
|
358
358
|
const hoverable = triggersSet.has('hover');
|
|
359
359
|
const enterTimeout = (0, react_1.useRef)(void 0);
|
|
360
360
|
const leaveTimeout = (0, react_1.useRef)(void 0);
|
|
361
|
-
const
|
|
361
|
+
const isEntered = (0, react_1.useRef)(false);
|
|
362
|
+
const pointerEnter = () => {
|
|
363
|
+
if (isEntered.current) {
|
|
364
|
+
return;
|
|
365
|
+
}
|
|
366
|
+
isEntered.current = true;
|
|
362
367
|
hold(true);
|
|
363
368
|
clearTimeout(enterTimeout.current);
|
|
364
369
|
mouseEnterDelay
|
|
@@ -366,6 +371,7 @@ function Popper({ ref, popperRef, anchorElement, container = document.body, cont
|
|
|
366
371
|
: setInnerOpen(true);
|
|
367
372
|
};
|
|
368
373
|
const pointerLeave = () => {
|
|
374
|
+
isEntered.current = false;
|
|
369
375
|
hold(false);
|
|
370
376
|
clearTimeout(leaveTimeout.current);
|
|
371
377
|
mouseLeaveDelay
|
|
@@ -7,7 +7,6 @@ const dropArea_style_1 = require("./dropArea.style");
|
|
|
7
7
|
const utils_1 = require("../../utils");
|
|
8
8
|
const __1 = require("../..");
|
|
9
9
|
const faInbox_1 = require("@fortawesome/free-solid-svg-icons/faInbox");
|
|
10
|
-
const faPlus_1 = require("@fortawesome/free-solid-svg-icons/faPlus");
|
|
11
10
|
exports.DropArea = (0, react_1.memo)(({ description = '点击选择文件,或将文件拖拽到这里', onDrop, ...props }) => {
|
|
12
11
|
const [draggingOver, setDraggingOver] = (0, react_1.useState)(false);
|
|
13
12
|
(0, react_1.useEffect)(() => {
|
|
@@ -34,5 +33,5 @@ exports.DropArea = (0, react_1.memo)(({ description = '点击选择文件,或
|
|
|
34
33
|
}, onDragLeave: e => {
|
|
35
34
|
props.onDragLeave?.(e);
|
|
36
35
|
setDraggingOver(false);
|
|
37
|
-
}, onDrop: dropHandler, children: [(0, jsx_runtime_1.jsx)(__1.Icon, { icon: faInbox_1.faInbox, className: dropArea_style_1.classes.icon
|
|
36
|
+
}, onDrop: dropHandler, children: [(0, jsx_runtime_1.jsx)(__1.Icon, { icon: faInbox_1.faInbox, className: dropArea_style_1.classes.icon }), (0, jsx_runtime_1.jsx)("div", { className: dropArea_style_1.classes.description, children: description })] }));
|
|
38
37
|
});
|
|
@@ -7,7 +7,7 @@ exports.classes = (0, utils_1.defineInnerClasses)('upload-drop-area', [
|
|
|
7
7
|
'icon',
|
|
8
8
|
'description'
|
|
9
9
|
]);
|
|
10
|
-
exports.style = (0, utils_1.defineCss)(({ spacing, gray, divider, borderRadius, text, colors }) => (0, react_1.css) `
|
|
10
|
+
exports.style = (0, utils_1.defineCss)(({ spacing, gray, divider, borderRadius, text, colors, easing }) => (0, react_1.css) `
|
|
11
11
|
height: 100px;
|
|
12
12
|
display: flex;
|
|
13
13
|
gap: ${spacing[1]}px;
|
|
@@ -15,10 +15,20 @@ exports.style = (0, utils_1.defineCss)(({ spacing, gray, divider, borderRadius,
|
|
|
15
15
|
align-items: center;
|
|
16
16
|
justify-content: center;
|
|
17
17
|
border: 1px dashed ${divider};
|
|
18
|
-
background-color: ${gray(.1)};
|
|
19
18
|
border-radius: ${borderRadius}px;
|
|
20
19
|
color: ${text.disabled};
|
|
21
20
|
cursor: pointer;
|
|
21
|
+
background-color: ${gray(.1)};
|
|
22
|
+
transition: background-color .25s ${easing.easeOut};
|
|
23
|
+
|
|
24
|
+
&:hover {
|
|
25
|
+
background-color: ${gray(.15)};
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
&:active {
|
|
29
|
+
background-color: ${gray(.08)};
|
|
30
|
+
transition: background-color 0s;
|
|
31
|
+
}
|
|
22
32
|
|
|
23
33
|
.${exports.classes.icon}, .${exports.classes.description} {
|
|
24
34
|
pointer-events: none;
|
|
@@ -26,22 +36,6 @@ exports.style = (0, utils_1.defineCss)(({ spacing, gray, divider, borderRadius,
|
|
|
26
36
|
|
|
27
37
|
.${exports.classes.icon} {
|
|
28
38
|
font-size: ${30 / 14}em;
|
|
29
|
-
|
|
30
|
-
&[data-hover="true"] {
|
|
31
|
-
display: none;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
&:hover {
|
|
36
|
-
.${exports.classes.icon} {
|
|
37
|
-
&[data-hover="false"] {
|
|
38
|
-
display: none;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
&[data-hover="true"] {
|
|
42
|
-
display: block;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
39
|
}
|
|
46
40
|
|
|
47
41
|
&[data-over=true] {
|
|
@@ -3,18 +3,18 @@ import { DivProps } from '../../types';
|
|
|
3
3
|
import { ButtonProps } from '../button';
|
|
4
4
|
import { DropArea } from './dropArea';
|
|
5
5
|
export type UploadStatus = 'default' | 'uploading' | 'success' | 'error';
|
|
6
|
-
export interface UploadFile<R, A extends any[]> extends File {
|
|
6
|
+
export interface UploadFile<R = any, A extends any[] = any[]> extends File {
|
|
7
7
|
id: string;
|
|
8
8
|
progress?: number;
|
|
9
9
|
status?: UploadStatus;
|
|
10
10
|
url?: string;
|
|
11
11
|
upload?(...args: A): Promise<R | undefined>;
|
|
12
12
|
}
|
|
13
|
-
export interface UploadSharedProps<R, A extends any[]> {
|
|
13
|
+
export interface UploadSharedProps<R = any, A extends any[] = any[]> {
|
|
14
14
|
type?: 'file' | 'image';
|
|
15
15
|
onUpload?(files: UploadFile<R, A>[], setProgress: Dispatch<SetStateAction<number>>, ...args: A): Promise<R>;
|
|
16
16
|
}
|
|
17
|
-
export interface UploadProps<R, A extends any[]> extends UploadSharedProps<R, A>, Omit<DivProps, 'defaultValue' | 'onChange'> {
|
|
17
|
+
export interface UploadProps<R = any, A extends any[] = any[]> extends UploadSharedProps<R, A>, Omit<DivProps, 'defaultValue' | 'onChange'> {
|
|
18
18
|
inputProps?: JSX.IntrinsicElements['input'];
|
|
19
19
|
accept?: string;
|
|
20
20
|
max?: number;
|
|
@@ -40,6 +40,6 @@ export interface UploadRef<R = any, A extends any[] = any[]> extends HTMLDivElem
|
|
|
40
40
|
upload(...args: A): Promise<R | undefined>;
|
|
41
41
|
}
|
|
42
42
|
export declare const Upload: {
|
|
43
|
-
<R, A extends any[]>(props: UploadProps<R, A>): ReactElement;
|
|
43
|
+
<R = any, A extends any[] = any[]>(props: UploadProps<R, A>): ReactElement;
|
|
44
44
|
DropArea: typeof DropArea;
|
|
45
45
|
};
|
|
@@ -28,7 +28,7 @@ export const Button = ({ component: Component = 'button', color = 'primary', sha
|
|
|
28
28
|
? actualPrefix
|
|
29
29
|
? _jsx(LoadingIndicator, { color: reverseTextColor })
|
|
30
30
|
: _jsx(Collapse, { orientation: "horizontal", in: true, children: _jsx(LoadingIndicator, { color: reverseTextColor }) })
|
|
31
|
-
: actualPrefix, !!actualChildren &&
|
|
31
|
+
: _jsx("div", { className: classes.prefix, children: actualPrefix }), !!actualChildren &&
|
|
32
32
|
_jsx("div", { className: classes.content, children: actualChildren }), !!suffix &&
|
|
33
33
|
_jsx("div", { className: classes.suffix, children: suffix })] }));
|
|
34
34
|
};
|
|
@@ -355,7 +355,12 @@ export function Popper({ ref, popperRef, anchorElement, container = document.bod
|
|
|
355
355
|
const hoverable = triggersSet.has('hover');
|
|
356
356
|
const enterTimeout = useRef(void 0);
|
|
357
357
|
const leaveTimeout = useRef(void 0);
|
|
358
|
-
const
|
|
358
|
+
const isEntered = useRef(false);
|
|
359
|
+
const pointerEnter = () => {
|
|
360
|
+
if (isEntered.current) {
|
|
361
|
+
return;
|
|
362
|
+
}
|
|
363
|
+
isEntered.current = true;
|
|
359
364
|
hold(true);
|
|
360
365
|
clearTimeout(enterTimeout.current);
|
|
361
366
|
mouseEnterDelay
|
|
@@ -363,6 +368,7 @@ export function Popper({ ref, popperRef, anchorElement, container = document.bod
|
|
|
363
368
|
: setInnerOpen(true);
|
|
364
369
|
};
|
|
365
370
|
const pointerLeave = () => {
|
|
371
|
+
isEntered.current = false;
|
|
366
372
|
hold(false);
|
|
367
373
|
clearTimeout(leaveTimeout.current);
|
|
368
374
|
mouseLeaveDelay
|
|
@@ -4,7 +4,6 @@ import { classes, style } from './dropArea.style';
|
|
|
4
4
|
import { clsx } from '../../utils';
|
|
5
5
|
import { Icon } from '../..';
|
|
6
6
|
import { faInbox } from '@fortawesome/free-solid-svg-icons/faInbox';
|
|
7
|
-
import { faPlus } from '@fortawesome/free-solid-svg-icons/faPlus';
|
|
8
7
|
export const DropArea = memo(({ description = '点击选择文件,或将文件拖拽到这里', onDrop, ...props }) => {
|
|
9
8
|
const [draggingOver, setDraggingOver] = useState(false);
|
|
10
9
|
useEffect(() => {
|
|
@@ -31,5 +30,5 @@ export const DropArea = memo(({ description = '点击选择文件,或将文件
|
|
|
31
30
|
}, onDragLeave: e => {
|
|
32
31
|
props.onDragLeave?.(e);
|
|
33
32
|
setDraggingOver(false);
|
|
34
|
-
}, onDrop: dropHandler, children: [_jsx(Icon, { icon: faInbox, className: classes.icon
|
|
33
|
+
}, onDrop: dropHandler, children: [_jsx(Icon, { icon: faInbox, className: classes.icon }), _jsx("div", { className: classes.description, children: description })] }));
|
|
35
34
|
});
|
|
@@ -4,7 +4,7 @@ export const classes = defineInnerClasses('upload-drop-area', [
|
|
|
4
4
|
'icon',
|
|
5
5
|
'description'
|
|
6
6
|
]);
|
|
7
|
-
export const style = defineCss(({ spacing, gray, divider, borderRadius, text, colors }) => css `
|
|
7
|
+
export const style = defineCss(({ spacing, gray, divider, borderRadius, text, colors, easing }) => css `
|
|
8
8
|
height: 100px;
|
|
9
9
|
display: flex;
|
|
10
10
|
gap: ${spacing[1]}px;
|
|
@@ -12,10 +12,20 @@ export const style = defineCss(({ spacing, gray, divider, borderRadius, text, co
|
|
|
12
12
|
align-items: center;
|
|
13
13
|
justify-content: center;
|
|
14
14
|
border: 1px dashed ${divider};
|
|
15
|
-
background-color: ${gray(.1)};
|
|
16
15
|
border-radius: ${borderRadius}px;
|
|
17
16
|
color: ${text.disabled};
|
|
18
17
|
cursor: pointer;
|
|
18
|
+
background-color: ${gray(.1)};
|
|
19
|
+
transition: background-color .25s ${easing.easeOut};
|
|
20
|
+
|
|
21
|
+
&:hover {
|
|
22
|
+
background-color: ${gray(.15)};
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
&:active {
|
|
26
|
+
background-color: ${gray(.08)};
|
|
27
|
+
transition: background-color 0s;
|
|
28
|
+
}
|
|
19
29
|
|
|
20
30
|
.${classes.icon}, .${classes.description} {
|
|
21
31
|
pointer-events: none;
|
|
@@ -23,22 +33,6 @@ export const style = defineCss(({ spacing, gray, divider, borderRadius, text, co
|
|
|
23
33
|
|
|
24
34
|
.${classes.icon} {
|
|
25
35
|
font-size: ${30 / 14}em;
|
|
26
|
-
|
|
27
|
-
&[data-hover="true"] {
|
|
28
|
-
display: none;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
&:hover {
|
|
33
|
-
.${classes.icon} {
|
|
34
|
-
&[data-hover="false"] {
|
|
35
|
-
display: none;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
&[data-hover="true"] {
|
|
39
|
-
display: block;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
36
|
}
|
|
43
37
|
|
|
44
38
|
&[data-over=true] {
|
|
@@ -3,18 +3,18 @@ import { DivProps } from '../../types';
|
|
|
3
3
|
import { ButtonProps } from '../button';
|
|
4
4
|
import { DropArea } from './dropArea';
|
|
5
5
|
export type UploadStatus = 'default' | 'uploading' | 'success' | 'error';
|
|
6
|
-
export interface UploadFile<R, A extends any[]> extends File {
|
|
6
|
+
export interface UploadFile<R = any, A extends any[] = any[]> extends File {
|
|
7
7
|
id: string;
|
|
8
8
|
progress?: number;
|
|
9
9
|
status?: UploadStatus;
|
|
10
10
|
url?: string;
|
|
11
11
|
upload?(...args: A): Promise<R | undefined>;
|
|
12
12
|
}
|
|
13
|
-
export interface UploadSharedProps<R, A extends any[]> {
|
|
13
|
+
export interface UploadSharedProps<R = any, A extends any[] = any[]> {
|
|
14
14
|
type?: 'file' | 'image';
|
|
15
15
|
onUpload?(files: UploadFile<R, A>[], setProgress: Dispatch<SetStateAction<number>>, ...args: A): Promise<R>;
|
|
16
16
|
}
|
|
17
|
-
export interface UploadProps<R, A extends any[]> extends UploadSharedProps<R, A>, Omit<DivProps, 'defaultValue' | 'onChange'> {
|
|
17
|
+
export interface UploadProps<R = any, A extends any[] = any[]> extends UploadSharedProps<R, A>, Omit<DivProps, 'defaultValue' | 'onChange'> {
|
|
18
18
|
inputProps?: JSX.IntrinsicElements['input'];
|
|
19
19
|
accept?: string;
|
|
20
20
|
max?: number;
|
|
@@ -40,6 +40,6 @@ export interface UploadRef<R = any, A extends any[] = any[]> extends HTMLDivElem
|
|
|
40
40
|
upload(...args: A): Promise<R | undefined>;
|
|
41
41
|
}
|
|
42
42
|
export declare const Upload: {
|
|
43
|
-
<R, A extends any[]>(props: UploadProps<R, A>): ReactElement;
|
|
43
|
+
<R = any, A extends any[] = any[]>(props: UploadProps<R, A>): ReactElement;
|
|
44
44
|
DropArea: typeof DropArea;
|
|
45
45
|
};
|