@canlooks/can-ui 0.0.97 → 0.0.98
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/menuItem/menuItem.d.ts +1 -1
- package/dist/cjs/components/menuItem/menuItem.js +1 -1
- package/dist/cjs/components/optionsBase/optionsBase.js +1 -2
- package/dist/cjs/components/popper/popper.js +26 -21
- package/dist/cjs/components/select/select.d.ts +1 -1
- package/dist/cjs/utils/utils.d.ts +1 -1
- package/dist/esm/components/menuItem/menuItem.d.ts +1 -1
- package/dist/esm/components/menuItem/menuItem.js +1 -1
- package/dist/esm/components/optionsBase/optionsBase.js +1 -2
- package/dist/esm/components/popper/popper.js +26 -21
- package/dist/esm/components/select/select.d.ts +1 -1
- package/dist/esm/utils/utils.d.ts +1 -1
- package/package.json +1 -1
|
@@ -33,4 +33,4 @@ export interface MenuItemProps extends Omit<DivProps, 'prefix'> {
|
|
|
33
33
|
expanded?: boolean;
|
|
34
34
|
onExpandedChange?(expanded: boolean): void;
|
|
35
35
|
}
|
|
36
|
-
export declare const MenuItem: React.MemoExoticComponent<({ value, size, color, emphasized, selected, focused, disabled, showCheckbox, checkboxProps, ellipsis, prefix, label, suffix, searchToken, _level, indent, expandIcon, defaultExpanded, expanded, onExpandedChange, ...props }: MenuItemProps) => import("@emotion/react/jsx-runtime").JSX.Element>;
|
|
36
|
+
export declare const MenuItem: React.MemoExoticComponent<({ value, size, color, emphasized, selected, focused, disabled, showCheckbox, checkboxProps, ellipsis, prefix, label, suffix, searchToken, scrollHere, _level, indent, expandIcon, defaultExpanded, expanded, onExpandedChange, ...props }: MenuItemProps) => import("@emotion/react/jsx-runtime").JSX.Element>;
|
|
@@ -11,7 +11,7 @@ const menu_1 = require("../menu");
|
|
|
11
11
|
const transitionBase_1 = require("../transitionBase");
|
|
12
12
|
const icon_1 = require("../icon");
|
|
13
13
|
const faChevronDown_1 = require("@fortawesome/free-solid-svg-icons/faChevronDown");
|
|
14
|
-
exports.MenuItem = (0, react_1.memo)(({ value, size, color = 'primary', emphasized = false, selected, focused = false, disabled = false, showCheckbox, checkboxProps, ellipsis, prefix, label, suffix, searchToken, _level = 0, indent, expandIcon, defaultExpanded = false, expanded, onExpandedChange, ...props }) => {
|
|
14
|
+
exports.MenuItem = (0, react_1.memo)(({ value, size, color = 'primary', emphasized = false, selected, focused = false, disabled = false, showCheckbox, checkboxProps, ellipsis, prefix, label, suffix, searchToken, scrollHere, _level = 0, indent, expandIcon, defaultExpanded = false, expanded, onExpandedChange, ...props }) => {
|
|
15
15
|
const context = (0, menu_1.useMenuContext)();
|
|
16
16
|
size ??= context.size;
|
|
17
17
|
showCheckbox ??= context.showCheckbox;
|
|
@@ -91,8 +91,7 @@ searchValue, selectedValue, onToggleSelected, ...props }) => {
|
|
|
91
91
|
params.opt?.onPointerEnter?.(e);
|
|
92
92
|
setVerticalIndex(-1);
|
|
93
93
|
},
|
|
94
|
-
children: null
|
|
95
|
-
scrollHere: void 0
|
|
94
|
+
children: null
|
|
96
95
|
});
|
|
97
96
|
if (options) {
|
|
98
97
|
return filteredOptions.map((opt, index) => {
|
|
@@ -360,51 +360,54 @@ function Popper({ ref, popperRef, anchorElement, container = document.body, effe
|
|
|
360
360
|
const hoverable = triggersSet.has('hover');
|
|
361
361
|
const enterTimeout = (0, react_1.useRef)(void 0);
|
|
362
362
|
const leaveTimeout = (0, react_1.useRef)(void 0);
|
|
363
|
-
const
|
|
364
|
-
const
|
|
365
|
-
if (hoverStack.current++) {
|
|
366
|
-
return;
|
|
367
|
-
}
|
|
363
|
+
const isOvering = (0, react_1.useRef)(false);
|
|
364
|
+
const pointerEnterFn = (0, react_1.useCallback)(() => {
|
|
368
365
|
clearTimeout(leaveTimeout.current);
|
|
369
366
|
mouseEnterDelay
|
|
370
367
|
? enterTimeout.current = setTimeout(() => setInnerOpen(true), mouseEnterDelay)
|
|
371
368
|
: setInnerOpen(true);
|
|
372
|
-
};
|
|
373
|
-
const
|
|
374
|
-
if (--hoverStack.current) {
|
|
375
|
-
return;
|
|
376
|
-
}
|
|
369
|
+
}, [mouseEnterDelay]);
|
|
370
|
+
const pointerLeaveFn = (0, react_1.useCallback)(() => {
|
|
377
371
|
clearTimeout(enterTimeout.current);
|
|
378
372
|
mouseLeaveDelay
|
|
379
373
|
? leaveTimeout.current = setTimeout(() => setInnerOpen(false), mouseLeaveDelay)
|
|
380
374
|
: setInnerOpen(false);
|
|
381
|
-
};
|
|
382
|
-
// 绑定锚点元素
|
|
375
|
+
}, [mouseLeaveDelay]);
|
|
383
376
|
(0, react_1.useEffect)(() => {
|
|
384
377
|
if (!hoverable) {
|
|
385
378
|
return;
|
|
386
379
|
}
|
|
380
|
+
const pointerOver = (e) => {
|
|
381
|
+
if (!isOvering.current && e.target === anchorRef.current) {
|
|
382
|
+
isOvering.current = true;
|
|
383
|
+
pointerEnterFn();
|
|
384
|
+
}
|
|
385
|
+
};
|
|
386
|
+
const pointerLeave = () => {
|
|
387
|
+
isOvering.current = false;
|
|
388
|
+
pointerLeaveFn();
|
|
389
|
+
};
|
|
387
390
|
const anchorEl = anchorRef.current;
|
|
388
|
-
anchorEl.addEventListener('
|
|
391
|
+
anchorEl.addEventListener('pointerover', pointerOver);
|
|
389
392
|
anchorEl.addEventListener('pointerleave', pointerLeave);
|
|
390
393
|
return () => {
|
|
391
|
-
anchorEl.removeEventListener('
|
|
394
|
+
anchorEl.removeEventListener('pointerover', pointerOver);
|
|
392
395
|
anchorEl.removeEventListener('pointerleave', pointerLeave);
|
|
393
396
|
};
|
|
394
|
-
}, [
|
|
397
|
+
}, []);
|
|
395
398
|
// 绑定弹框元素,鼠标移入弹框也要保持弹框打开
|
|
396
399
|
(0, react_1.useEffect)(() => {
|
|
397
400
|
if (!hoverable || !innerPopperRef.current) {
|
|
398
401
|
return;
|
|
399
402
|
}
|
|
400
403
|
const popperEl = innerPopperRef.current;
|
|
401
|
-
popperEl.addEventListener('pointerenter',
|
|
402
|
-
popperEl.addEventListener('pointerleave',
|
|
404
|
+
popperEl.addEventListener('pointerenter', pointerEnterFn);
|
|
405
|
+
popperEl.addEventListener('pointerleave', pointerLeaveFn);
|
|
403
406
|
return () => {
|
|
404
|
-
popperEl.removeEventListener('pointerenter',
|
|
405
|
-
popperEl.removeEventListener('pointerleave',
|
|
407
|
+
popperEl.removeEventListener('pointerenter', pointerEnterFn);
|
|
408
|
+
popperEl.removeEventListener('pointerleave', pointerLeaveFn);
|
|
406
409
|
};
|
|
407
|
-
}, [innerOpen.current]);
|
|
410
|
+
}, [innerOpen.current, mouseLeaveDelay]);
|
|
408
411
|
/**
|
|
409
412
|
* focus相关
|
|
410
413
|
*/
|
|
@@ -513,7 +516,9 @@ function Popper({ ref, popperRef, anchorElement, container = document.body, effe
|
|
|
513
516
|
}), [innerOpen.current, autoClose]);
|
|
514
517
|
const childRef = (0, react_1.useCallback)((0, utils_1.cloneRef)(children?.props.ref, anchorRef, ref), [children?.props.ref, ref]);
|
|
515
518
|
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, react_1.isValidElement)(children)
|
|
516
|
-
? (0, react_1.cloneElement)(children, {
|
|
519
|
+
? (0, react_1.cloneElement)(children, {
|
|
520
|
+
ref: childRef
|
|
521
|
+
})
|
|
517
522
|
: children, renderedOnce.current && (0, react_dom_1.createPortal)((0, jsx_runtime_1.jsx)(clickAway_1.ClickAway, { disabled: !clickable && !enterable && !contextMenuable,
|
|
518
523
|
// 右键菜单点击anchor需要关闭弹框
|
|
519
524
|
targets: () => contextMenuEvent.current ? null : anchorRef.current, onClickAway: onClickAway, children: (0, jsx_runtime_1.jsx)("div", { ...props, ref: innerPopperRef, css: popper_style_1.style, className: (0, utils_1.clsx)(popper_style_1.classes.root, props.className), style: {
|
|
@@ -32,4 +32,4 @@ export declare const Select: {
|
|
|
32
32
|
<O extends MenuOptionType, V extends Id = Id>(props: SelectProps<O, V>): ReactElement;
|
|
33
33
|
Option: typeof MenuItem;
|
|
34
34
|
};
|
|
35
|
-
export declare const Option: import("react").MemoExoticComponent<({ value, size, color, emphasized, selected, focused, disabled, showCheckbox, checkboxProps, ellipsis, prefix, label, suffix, searchToken, _level, indent, expandIcon, defaultExpanded, expanded, onExpandedChange, ...props }: import("../menuItem").MenuItemProps) => import("@emotion/react/jsx-runtime").JSX.Element>;
|
|
35
|
+
export declare const Option: import("react").MemoExoticComponent<({ value, size, color, emphasized, selected, focused, disabled, showCheckbox, checkboxProps, ellipsis, prefix, label, suffix, searchToken, scrollHere, _level, indent, expandIcon, defaultExpanded, expanded, onExpandedChange, ...props }: import("../menuItem").MenuItemProps) => import("@emotion/react/jsx-runtime").JSX.Element>;
|
|
@@ -145,5 +145,5 @@ export declare function filterProperties<T extends Record<string, any>>(obj: T,
|
|
|
145
145
|
* 合并属性
|
|
146
146
|
*/
|
|
147
147
|
type ExtendableProps<T> = (T extends ElementType ? ComponentProps<T> : T) & Obj;
|
|
148
|
-
export declare function mergeComponentProps<T>(...props: (Partial<ExtendableProps<T>> | undefined)[]): ExtendableProps<T>;
|
|
148
|
+
export declare function mergeComponentProps<T>(...props: (Partial<ExtendableProps<T>> | null | false | undefined)[]): ExtendableProps<T>;
|
|
149
149
|
export {};
|
|
@@ -33,4 +33,4 @@ export interface MenuItemProps extends Omit<DivProps, 'prefix'> {
|
|
|
33
33
|
expanded?: boolean;
|
|
34
34
|
onExpandedChange?(expanded: boolean): void;
|
|
35
35
|
}
|
|
36
|
-
export declare const MenuItem: React.MemoExoticComponent<({ value, size, color, emphasized, selected, focused, disabled, showCheckbox, checkboxProps, ellipsis, prefix, label, suffix, searchToken, _level, indent, expandIcon, defaultExpanded, expanded, onExpandedChange, ...props }: MenuItemProps) => import("@emotion/react/jsx-runtime").JSX.Element>;
|
|
36
|
+
export declare const MenuItem: React.MemoExoticComponent<({ value, size, color, emphasized, selected, focused, disabled, showCheckbox, checkboxProps, ellipsis, prefix, label, suffix, searchToken, scrollHere, _level, indent, expandIcon, defaultExpanded, expanded, onExpandedChange, ...props }: MenuItemProps) => import("@emotion/react/jsx-runtime").JSX.Element>;
|
|
@@ -8,7 +8,7 @@ import { useMenuContext } from '../menu';
|
|
|
8
8
|
import { Collapse } from '../transitionBase';
|
|
9
9
|
import { Icon } from '../icon';
|
|
10
10
|
import { faChevronDown } from '@fortawesome/free-solid-svg-icons/faChevronDown';
|
|
11
|
-
export const MenuItem = memo(({ value, size, color = 'primary', emphasized = false, selected, focused = false, disabled = false, showCheckbox, checkboxProps, ellipsis, prefix, label, suffix, searchToken, _level = 0, indent, expandIcon, defaultExpanded = false, expanded, onExpandedChange, ...props }) => {
|
|
11
|
+
export const MenuItem = memo(({ value, size, color = 'primary', emphasized = false, selected, focused = false, disabled = false, showCheckbox, checkboxProps, ellipsis, prefix, label, suffix, searchToken, scrollHere, _level = 0, indent, expandIcon, defaultExpanded = false, expanded, onExpandedChange, ...props }) => {
|
|
12
12
|
const context = useMenuContext();
|
|
13
13
|
size ??= context.size;
|
|
14
14
|
showCheckbox ??= context.showCheckbox;
|
|
@@ -88,8 +88,7 @@ searchValue, selectedValue, onToggleSelected, ...props }) => {
|
|
|
88
88
|
params.opt?.onPointerEnter?.(e);
|
|
89
89
|
setVerticalIndex(-1);
|
|
90
90
|
},
|
|
91
|
-
children: null
|
|
92
|
-
scrollHere: void 0
|
|
91
|
+
children: null
|
|
93
92
|
});
|
|
94
93
|
if (options) {
|
|
95
94
|
return filteredOptions.map((opt, index) => {
|
|
@@ -357,51 +357,54 @@ export function Popper({ ref, popperRef, anchorElement, container = document.bod
|
|
|
357
357
|
const hoverable = triggersSet.has('hover');
|
|
358
358
|
const enterTimeout = useRef(void 0);
|
|
359
359
|
const leaveTimeout = useRef(void 0);
|
|
360
|
-
const
|
|
361
|
-
const
|
|
362
|
-
if (hoverStack.current++) {
|
|
363
|
-
return;
|
|
364
|
-
}
|
|
360
|
+
const isOvering = useRef(false);
|
|
361
|
+
const pointerEnterFn = useCallback(() => {
|
|
365
362
|
clearTimeout(leaveTimeout.current);
|
|
366
363
|
mouseEnterDelay
|
|
367
364
|
? enterTimeout.current = setTimeout(() => setInnerOpen(true), mouseEnterDelay)
|
|
368
365
|
: setInnerOpen(true);
|
|
369
|
-
};
|
|
370
|
-
const
|
|
371
|
-
if (--hoverStack.current) {
|
|
372
|
-
return;
|
|
373
|
-
}
|
|
366
|
+
}, [mouseEnterDelay]);
|
|
367
|
+
const pointerLeaveFn = useCallback(() => {
|
|
374
368
|
clearTimeout(enterTimeout.current);
|
|
375
369
|
mouseLeaveDelay
|
|
376
370
|
? leaveTimeout.current = setTimeout(() => setInnerOpen(false), mouseLeaveDelay)
|
|
377
371
|
: setInnerOpen(false);
|
|
378
|
-
};
|
|
379
|
-
// 绑定锚点元素
|
|
372
|
+
}, [mouseLeaveDelay]);
|
|
380
373
|
useEffect(() => {
|
|
381
374
|
if (!hoverable) {
|
|
382
375
|
return;
|
|
383
376
|
}
|
|
377
|
+
const pointerOver = (e) => {
|
|
378
|
+
if (!isOvering.current && e.target === anchorRef.current) {
|
|
379
|
+
isOvering.current = true;
|
|
380
|
+
pointerEnterFn();
|
|
381
|
+
}
|
|
382
|
+
};
|
|
383
|
+
const pointerLeave = () => {
|
|
384
|
+
isOvering.current = false;
|
|
385
|
+
pointerLeaveFn();
|
|
386
|
+
};
|
|
384
387
|
const anchorEl = anchorRef.current;
|
|
385
|
-
anchorEl.addEventListener('
|
|
388
|
+
anchorEl.addEventListener('pointerover', pointerOver);
|
|
386
389
|
anchorEl.addEventListener('pointerleave', pointerLeave);
|
|
387
390
|
return () => {
|
|
388
|
-
anchorEl.removeEventListener('
|
|
391
|
+
anchorEl.removeEventListener('pointerover', pointerOver);
|
|
389
392
|
anchorEl.removeEventListener('pointerleave', pointerLeave);
|
|
390
393
|
};
|
|
391
|
-
}, [
|
|
394
|
+
}, []);
|
|
392
395
|
// 绑定弹框元素,鼠标移入弹框也要保持弹框打开
|
|
393
396
|
useEffect(() => {
|
|
394
397
|
if (!hoverable || !innerPopperRef.current) {
|
|
395
398
|
return;
|
|
396
399
|
}
|
|
397
400
|
const popperEl = innerPopperRef.current;
|
|
398
|
-
popperEl.addEventListener('pointerenter',
|
|
399
|
-
popperEl.addEventListener('pointerleave',
|
|
401
|
+
popperEl.addEventListener('pointerenter', pointerEnterFn);
|
|
402
|
+
popperEl.addEventListener('pointerleave', pointerLeaveFn);
|
|
400
403
|
return () => {
|
|
401
|
-
popperEl.removeEventListener('pointerenter',
|
|
402
|
-
popperEl.removeEventListener('pointerleave',
|
|
404
|
+
popperEl.removeEventListener('pointerenter', pointerEnterFn);
|
|
405
|
+
popperEl.removeEventListener('pointerleave', pointerLeaveFn);
|
|
403
406
|
};
|
|
404
|
-
}, [innerOpen.current]);
|
|
407
|
+
}, [innerOpen.current, mouseLeaveDelay]);
|
|
405
408
|
/**
|
|
406
409
|
* focus相关
|
|
407
410
|
*/
|
|
@@ -510,7 +513,9 @@ export function Popper({ ref, popperRef, anchorElement, container = document.bod
|
|
|
510
513
|
}), [innerOpen.current, autoClose]);
|
|
511
514
|
const childRef = useCallback(cloneRef(children?.props.ref, anchorRef, ref), [children?.props.ref, ref]);
|
|
512
515
|
return (_jsxs(_Fragment, { children: [isValidElement(children)
|
|
513
|
-
? cloneElement(children, {
|
|
516
|
+
? cloneElement(children, {
|
|
517
|
+
ref: childRef
|
|
518
|
+
})
|
|
514
519
|
: children, renderedOnce.current && createPortal(_jsx(ClickAway, { disabled: !clickable && !enterable && !contextMenuable,
|
|
515
520
|
// 右键菜单点击anchor需要关闭弹框
|
|
516
521
|
targets: () => contextMenuEvent.current ? null : anchorRef.current, onClickAway: onClickAway, children: _jsx("div", { ...props, ref: innerPopperRef, css: style, className: clsx(classes.root, props.className), style: {
|
|
@@ -32,4 +32,4 @@ export declare const Select: {
|
|
|
32
32
|
<O extends MenuOptionType, V extends Id = Id>(props: SelectProps<O, V>): ReactElement;
|
|
33
33
|
Option: typeof MenuItem;
|
|
34
34
|
};
|
|
35
|
-
export declare const Option: import("react").MemoExoticComponent<({ value, size, color, emphasized, selected, focused, disabled, showCheckbox, checkboxProps, ellipsis, prefix, label, suffix, searchToken, _level, indent, expandIcon, defaultExpanded, expanded, onExpandedChange, ...props }: import("../menuItem").MenuItemProps) => import("@emotion/react/jsx-runtime").JSX.Element>;
|
|
35
|
+
export declare const Option: import("react").MemoExoticComponent<({ value, size, color, emphasized, selected, focused, disabled, showCheckbox, checkboxProps, ellipsis, prefix, label, suffix, searchToken, scrollHere, _level, indent, expandIcon, defaultExpanded, expanded, onExpandedChange, ...props }: import("../menuItem").MenuItemProps) => import("@emotion/react/jsx-runtime").JSX.Element>;
|
|
@@ -145,5 +145,5 @@ export declare function filterProperties<T extends Record<string, any>>(obj: T,
|
|
|
145
145
|
* 合并属性
|
|
146
146
|
*/
|
|
147
147
|
type ExtendableProps<T> = (T extends ElementType ? ComponentProps<T> : T) & Obj;
|
|
148
|
-
export declare function mergeComponentProps<T>(...props: (Partial<ExtendableProps<T>> | undefined)[]): ExtendableProps<T>;
|
|
148
|
+
export declare function mergeComponentProps<T>(...props: (Partial<ExtendableProps<T>> | null | false | undefined)[]): ExtendableProps<T>;
|
|
149
149
|
export {};
|