@canlooks/can-ui 0.0.66 → 0.0.68
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/anchorList/anchorList.js +26 -20
- package/dist/cjs/components/button/button.js +1 -1
- package/dist/cjs/components/cascade/cascade.js +2 -2
- package/dist/cjs/components/curd/curdColumnConfig.js +2 -1
- package/dist/cjs/components/dataGrid/dataGrid.js +3 -2
- package/dist/cjs/components/gallery/gallery.js +2 -2
- package/dist/cjs/components/menu/menu.js +2 -2
- package/dist/cjs/components/overlayBase/overlayBase.d.ts +3 -1
- package/dist/cjs/components/overlayBase/overlayBase.js +5 -5
- package/dist/cjs/components/popper/popper.d.ts +3 -1
- package/dist/cjs/components/popper/popper.js +6 -7
- package/dist/cjs/components/progress/progress.js +4 -2
- package/dist/cjs/components/snackbarBase/snackbarBase.d.ts +3 -2
- package/dist/cjs/components/snackbarBase/snackbarBase.js +3 -3
- package/dist/cjs/components/theme/themeVariables.d.ts +1 -0
- package/dist/cjs/components/theme/themeVariables.js +1 -0
- package/dist/cjs/components/touchRipple/index.d.ts +1 -0
- package/dist/cjs/components/touchRipple/index.js +1 -0
- package/dist/cjs/components/touchRipple/touchRipple.d.ts +6 -14
- package/dist/cjs/components/touchRipple/touchRipple.js +54 -39
- package/dist/cjs/components/touchRipple/touchRipple.style.js +25 -27
- package/dist/cjs/components/transfer/transfer.js +2 -2
- package/dist/cjs/components/transfer/transferPanel.js +2 -1
- package/dist/cjs/components/upload/upload.js +2 -2
- package/dist/cjs/components/waterfall/waterfallItem.js +1 -1
- package/dist/cjs/utils/hooks.d.ts +8 -0
- package/dist/cjs/utils/hooks.js +22 -0
- package/dist/esm/components/anchorList/anchorList.js +26 -20
- package/dist/esm/components/button/button.js +1 -1
- package/dist/esm/components/cascade/cascade.js +2 -2
- package/dist/esm/components/curd/curdColumnConfig.js +2 -1
- package/dist/esm/components/dataGrid/dataGrid.js +3 -2
- package/dist/esm/components/gallery/gallery.js +2 -2
- package/dist/esm/components/menu/menu.js +2 -2
- package/dist/esm/components/overlayBase/overlayBase.d.ts +3 -1
- package/dist/esm/components/overlayBase/overlayBase.js +6 -6
- package/dist/esm/components/popper/popper.d.ts +3 -1
- package/dist/esm/components/popper/popper.js +7 -8
- package/dist/esm/components/progress/progress.js +4 -2
- package/dist/esm/components/snackbarBase/snackbarBase.d.ts +3 -2
- package/dist/esm/components/snackbarBase/snackbarBase.js +4 -4
- package/dist/esm/components/theme/themeVariables.d.ts +1 -0
- package/dist/esm/components/theme/themeVariables.js +1 -0
- package/dist/esm/components/touchRipple/index.d.ts +1 -0
- package/dist/esm/components/touchRipple/index.js +1 -0
- package/dist/esm/components/touchRipple/touchRipple.d.ts +6 -14
- package/dist/esm/components/touchRipple/touchRipple.js +54 -39
- package/dist/esm/components/touchRipple/touchRipple.style.js +25 -27
- package/dist/esm/components/transfer/transfer.js +2 -2
- package/dist/esm/components/transfer/transferPanel.js +2 -1
- package/dist/esm/components/upload/upload.js +2 -2
- package/dist/esm/components/waterfall/waterfallItem.js +2 -2
- package/dist/esm/utils/hooks.d.ts +8 -0
- package/dist/esm/utils/hooks.js +21 -0
- package/package.json +1 -1
|
@@ -21,10 +21,11 @@ exports.AnchorList = (0, react_1.memo)(({ anchors, renderAnchorItem, indent = 24
|
|
|
21
21
|
});
|
|
22
22
|
const scrollToId = (id) => {
|
|
23
23
|
const targetEl = document.getElementById(id);
|
|
24
|
-
|
|
24
|
+
const scrollerEl = getScroller();
|
|
25
|
+
if (!targetEl || !scrollerEl) {
|
|
25
26
|
return false;
|
|
26
27
|
}
|
|
27
|
-
|
|
28
|
+
scrollerEl.scrollTo({
|
|
28
29
|
top: targetEl.offsetTop - offset,
|
|
29
30
|
// 初始化之前无需平滑滚动
|
|
30
31
|
behavior: initialized.current ? scrollBehavior : 'instant'
|
|
@@ -53,29 +54,34 @@ exports.AnchorList = (0, react_1.memo)(({ anchors, renderAnchorItem, indent = 24
|
|
|
53
54
|
* 监听滚动设置高亮
|
|
54
55
|
*/
|
|
55
56
|
const getScroller = () => {
|
|
56
|
-
|
|
57
|
+
if (scroller) {
|
|
58
|
+
return typeof scroller === 'function' ? scroller() : scroller;
|
|
59
|
+
}
|
|
60
|
+
return document.documentElement;
|
|
57
61
|
};
|
|
58
62
|
const [activeId, setActiveId] = (0, utils_1.useSyncState)();
|
|
59
63
|
(0, react_1.useEffect)(() => {
|
|
60
64
|
const scrollerEl = getScroller();
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
minDistance
|
|
71
|
-
|
|
65
|
+
if (scrollerEl) {
|
|
66
|
+
const scroll = () => {
|
|
67
|
+
let nearest;
|
|
68
|
+
let minDistance = Infinity;
|
|
69
|
+
const targets = anchors?.map(item => document.getElementById(item.id));
|
|
70
|
+
targets?.forEach(target => {
|
|
71
|
+
const top = target?.getBoundingClientRect().top;
|
|
72
|
+
if (typeof top === 'number') {
|
|
73
|
+
const distance = Math.abs(top - offset);
|
|
74
|
+
if (distance < minDistance) {
|
|
75
|
+
minDistance = distance;
|
|
76
|
+
nearest = target;
|
|
77
|
+
}
|
|
72
78
|
}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
+
});
|
|
80
|
+
nearest && setActiveId(nearest.id);
|
|
81
|
+
};
|
|
82
|
+
!activeId.current && scroll();
|
|
83
|
+
return (0, utils_1.listenAllPredecessorsScroll)(scrollerEl === document.documentElement ? document : scrollerEl, scroll);
|
|
84
|
+
}
|
|
79
85
|
}, [anchors, scroller, offset]);
|
|
80
86
|
const [animating, setAnimating] = (0, utils_1.useDerivedState)(prev => typeof prev !== 'undefined', [activeId.current]);
|
|
81
87
|
return ((0, jsx_runtime_1.jsxs)(flex_1.Flex, { direction: "column", alignItems: "flex-start", ...props, css: anchorList_style_1.style, className: (0, utils_1.clsx)(anchorList_style_1.classes.root, props.className), "data-animating": animating.current, children: [anchors?.map(item => {
|
|
@@ -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
|
-
:
|
|
34
|
+
: 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
|
};
|
|
@@ -20,7 +20,7 @@ const CascadeContext = (0, react_1.createContext)({});
|
|
|
20
20
|
function useCascadeContext() {
|
|
21
21
|
return (0, react_1.useContext)(CascadeContext);
|
|
22
22
|
}
|
|
23
|
-
exports.Cascade = (0, react_1.memo)(({ inputProps, defaultOpen = false, open, onOpenChange, children, loadOptions, multiple = false, showCheckbox = !!multiple, defaultValue
|
|
23
|
+
exports.Cascade = (0, react_1.memo)(({ inputProps, defaultOpen = false, open, onOpenChange, children, loadOptions, multiple = false, showCheckbox = !!multiple, defaultValue, value, onChange, renderBackfill, searchable, defaultSearchValue = '', searchValue, onSearchChange, searchInputProps, popperProps, popperRef, clearable = !!multiple, integration = 'deepest',
|
|
24
24
|
// 共享属性,从OptionsBaseSharedProps继承
|
|
25
25
|
loading, options, labelKey = 'label', primaryKey = 'value', childrenKey = 'children', searchTokenKey = 'searchToken', ...props }) => {
|
|
26
26
|
/**
|
|
@@ -79,7 +79,7 @@ loading, options, labelKey = 'label', primaryKey = 'value', childrenKey = 'child
|
|
|
79
79
|
* --------------------------------------------------------------------
|
|
80
80
|
* 控制选中状态
|
|
81
81
|
*/
|
|
82
|
-
const [pathifiedValue, setPathifiedValue] = (0, utils_1.useControlled)(defaultValue, value, onChange);
|
|
82
|
+
const [pathifiedValue, setPathifiedValue] = (0, utils_1.useControlled)(defaultValue || [], value, onChange);
|
|
83
83
|
// 路径转单一键
|
|
84
84
|
const toStandardValue = (path) => {
|
|
85
85
|
if (!path) {
|
|
@@ -14,7 +14,8 @@ const sortable_1 = require("@dnd-kit/sortable");
|
|
|
14
14
|
const utils_1 = require("../../utils");
|
|
15
15
|
const __1 = require("../..");
|
|
16
16
|
const faGear_1 = require("@fortawesome/free-solid-svg-icons/faGear");
|
|
17
|
-
exports.CurdColumnConfig = (0, react_1.memo)(({ columns
|
|
17
|
+
exports.CurdColumnConfig = (0, react_1.memo)(({ columns, innerVisible, setInnerVisible, setInnerOrder, }) => {
|
|
18
|
+
columns ||= [];
|
|
18
19
|
const dragEndHandler = (e) => {
|
|
19
20
|
const newColumns = (0, utils_1.onDndDragEnd)(e, columns, '_key');
|
|
20
21
|
newColumns && setInnerOrder(newColumns.flatMap(col => col._key ?? []));
|
|
@@ -18,7 +18,7 @@ const DataGridContext = (0, react_1.createContext)({});
|
|
|
18
18
|
function useDataGridContext() {
|
|
19
19
|
return (0, react_1.useContext)(DataGridContext);
|
|
20
20
|
}
|
|
21
|
-
exports.DataGrid = (0, react_1.memo)(({ columns, rows, rowProps, primaryKey = 'id', childrenKey = null, defaultOrderColumn, orderColumn, defaultOrderType = 'descend', orderType, onOrderChange, selectable, relation = 'dependent', integration = 'shallowest', allowSelectAll = true, clickRowToSelect = true, selectorProps, indent = 24, renderExpandIcon, defaultExpanded
|
|
21
|
+
exports.DataGrid = (0, react_1.memo)(({ columns, rows, rowProps, primaryKey = 'id', childrenKey = null, defaultOrderColumn, orderColumn, defaultOrderType = 'descend', orderType, onOrderChange, selectable, relation = 'dependent', integration = 'shallowest', allowSelectAll = true, clickRowToSelect = true, selectorProps, indent = 24, renderExpandIcon, defaultExpanded, expanded, onExpandedChange, paginatable = true, paginationProps, renderPagination, loading, emptyPlaceholder, columnResizable = false, size, bordered, striped, tableProps, multiple, defaultValue, value, onChange, ...props }) => {
|
|
22
22
|
/**
|
|
23
23
|
* ---------------------------------------------------------------
|
|
24
24
|
* 选择行
|
|
@@ -65,7 +65,7 @@ exports.DataGrid = (0, react_1.memo)(({ columns, rows, rowProps, primaryKey = 'i
|
|
|
65
65
|
* ---------------------------------------------------------------
|
|
66
66
|
* 展开行
|
|
67
67
|
*/
|
|
68
|
-
const [innerExpanded, setInnerExpanded] = (0, utils_1.useControlled)(defaultExpanded, expanded);
|
|
68
|
+
const [innerExpanded, setInnerExpanded] = (0, utils_1.useControlled)(defaultExpanded || [], expanded);
|
|
69
69
|
const expandedSet = (0, react_1.useMemo)(() => {
|
|
70
70
|
return new Set(innerExpanded.current);
|
|
71
71
|
}, [innerExpanded.current]);
|
|
@@ -83,6 +83,7 @@ exports.DataGrid = (0, react_1.memo)(({ columns, rows, rowProps, primaryKey = 'i
|
|
|
83
83
|
* ---------------------------------------------------------------
|
|
84
84
|
* 分页
|
|
85
85
|
*/
|
|
86
|
+
paginationProps ||= {};
|
|
86
87
|
const [innerPage, setInnerPage] = (0, utils_1.useControlled)(paginationProps.defaultPage ?? 1, paginationProps.page, paginationProps.onPageChange);
|
|
87
88
|
const [innerPageSize, setInnerPageSize] = (0, utils_1.useControlled)(paginationProps.defaultPageSize ?? 10, paginationProps.pageSize, paginationProps.onPageSizeChange);
|
|
88
89
|
const pageChangeHandler = (page, pageSize) => {
|
|
@@ -25,8 +25,8 @@ const commonControlProps = {
|
|
|
25
25
|
color: 'text'
|
|
26
26
|
};
|
|
27
27
|
const bounceBezier = (0, utils_1.cubicBezier)(0, 0, 0, 1);
|
|
28
|
-
exports.Gallery = (0, react_1.memo)(({ src
|
|
29
|
-
const srcArr = (0, utils_1.useSync)((0, utils_1.toArray)(src));
|
|
28
|
+
exports.Gallery = (0, react_1.memo)(({ src, defaultIndex = 0, index, onIndexChange, defaultOpen = false, open, onOpenChange, showRotation = true, showZoom = true, showClose = true, renderControl, bounceElementTranslate = 24, bounceDragDistance = 240, effectiveSpeed = 450, ...props }) => {
|
|
29
|
+
const srcArr = (0, utils_1.useSync)((0, utils_1.toArray)(src || []));
|
|
30
30
|
const [innerOpen, setInnerOpen] = (0, utils_1.useControlled)(defaultOpen, open, onOpenChange);
|
|
31
31
|
const close = () => {
|
|
32
32
|
setInnerOpen(false);
|
|
@@ -16,10 +16,10 @@ function useMenuContext() {
|
|
|
16
16
|
const { size = theme.size, ellipsis = true, indent = theme.spacing[8], ...context } = (0, react_2.useContext)(MenuContext);
|
|
17
17
|
return { size, ellipsis, indent, ...context };
|
|
18
18
|
}
|
|
19
|
-
exports.Menu = (0, react_2.memo)(({ items, primaryKey = 'value', labelKey = 'label', childrenKey = 'children', defaultExpanded
|
|
19
|
+
exports.Menu = (0, react_2.memo)(({ items, primaryKey = 'value', labelKey = 'label', childrenKey = 'children', defaultExpanded, expanded, onExpandedChange, multiple, defaultValue, value, onChange,
|
|
20
20
|
// 以下属性传递给<MenuItem/>
|
|
21
21
|
size = 'large', showCheckbox, ellipsis, indent, ...props }) => {
|
|
22
|
-
const [innerExpanded, setInnerExpanded] = (0, utils_1.useControlled)(defaultExpanded, expanded);
|
|
22
|
+
const [innerExpanded, setInnerExpanded] = (0, utils_1.useControlled)(defaultExpanded || [], expanded);
|
|
23
23
|
const expandedSet = (0, react_2.useMemo)(() => {
|
|
24
24
|
return new Set(innerExpanded.current);
|
|
25
25
|
}, [innerExpanded.current]);
|
|
@@ -4,6 +4,8 @@ import { TransitionBaseProps } from '../transitionBase';
|
|
|
4
4
|
export interface OverlayBaseProps extends DivProps {
|
|
5
5
|
/** 模态的容器元素,默认为document.body */
|
|
6
6
|
container?: DefineElement<HTMLElement>;
|
|
7
|
+
/** 同{@link container},但会在useEffect后取值,且只会执行一次 */
|
|
8
|
+
effectContainer?: DefineElement<HTMLElement>;
|
|
7
9
|
/**
|
|
8
10
|
* @enum {true} 跟随父组件强制渲染
|
|
9
11
|
* @enum {false} 打开时渲染,关闭后销毁
|
|
@@ -22,4 +24,4 @@ export interface OverlayBaseProps extends DivProps {
|
|
|
22
24
|
removeFocusOnOpen?: boolean;
|
|
23
25
|
}
|
|
24
26
|
export declare const overlayBaseTransitionDuration = 300;
|
|
25
|
-
export declare function OverlayBase({ container, forceRender, open, onMaskClick, singleLayer, onOpened, onClosed, maskProps, removeFocusOnOpen, ...props }: OverlayBaseProps): false | React.ReactPortal;
|
|
27
|
+
export declare function OverlayBase({ container, effectContainer, forceRender, open, onMaskClick, singleLayer, onOpened, onClosed, maskProps, removeFocusOnOpen, ...props }: OverlayBaseProps): false | React.ReactPortal;
|
|
@@ -9,22 +9,22 @@ const utils_1 = require("../../utils");
|
|
|
9
9
|
const react_dom_1 = require("react-dom");
|
|
10
10
|
const transitionBase_1 = require("../transitionBase");
|
|
11
11
|
exports.overlayBaseTransitionDuration = 300;
|
|
12
|
-
function OverlayBase({ container, forceRender, open, onMaskClick, singleLayer, onOpened, onClosed, maskProps, removeFocusOnOpen = true, ...props }) {
|
|
12
|
+
function OverlayBase({ container, effectContainer, forceRender, open, onMaskClick, singleLayer, onOpened, onClosed, maskProps, removeFocusOnOpen = true, ...props }) {
|
|
13
13
|
const [shouldRender, setShouldRender] = (0, utils_1.useDerivedState)((prev = false) => {
|
|
14
14
|
if (open) {
|
|
15
15
|
return true;
|
|
16
16
|
}
|
|
17
17
|
return forceRender === true || prev;
|
|
18
18
|
}, [open, forceRender]);
|
|
19
|
-
const containerEl = (
|
|
19
|
+
const containerEl = (0, utils_1.useContainer)(container, effectContainer);
|
|
20
20
|
(0, react_1.useEffect)(() => {
|
|
21
21
|
if (!open) {
|
|
22
22
|
return;
|
|
23
23
|
}
|
|
24
24
|
removeFocusOnOpen && document.activeElement?.blur?.();
|
|
25
|
-
containerEl.style.overflow = 'hidden';
|
|
25
|
+
containerEl.current.style.overflow = 'hidden';
|
|
26
26
|
return () => {
|
|
27
|
-
containerEl.style.overflow = '';
|
|
27
|
+
containerEl.current.style.overflow = '';
|
|
28
28
|
};
|
|
29
29
|
}, [open]);
|
|
30
30
|
const clickHandler = (e) => {
|
|
@@ -40,5 +40,5 @@ function OverlayBase({ container, forceRender, open, onMaskClick, singleLayer, o
|
|
|
40
40
|
onClosed?.();
|
|
41
41
|
forceRender === false && setShouldRender(false);
|
|
42
42
|
};
|
|
43
|
-
return shouldRender.current && (0, react_dom_1.createPortal)((0, jsx_runtime_1.jsxs)("div", { ...props, css: overlayBase_style_1.style, className: (0, utils_1.clsx)(overlayBase_style_1.classes.root, props.className), "data-open": open, "data-custom-container": containerEl !== document.body, children: [(0, jsx_runtime_1.jsx)(transitionBase_1.Fade, { timeout: exports.overlayBaseTransitionDuration, ...maskProps, in: open, className: (0, utils_1.clsx)(overlayBase_style_1.classes.mask, maskProps?.className), onClick: clickHandler, onEntered: onEntered, onExited: onExited }), props.children] }), containerEl);
|
|
43
|
+
return shouldRender.current && (0, react_dom_1.createPortal)((0, jsx_runtime_1.jsxs)("div", { ...props, css: overlayBase_style_1.style, className: (0, utils_1.clsx)(overlayBase_style_1.classes.root, props.className), "data-open": open, "data-custom-container": containerEl.current !== document.body, children: [(0, jsx_runtime_1.jsx)(transitionBase_1.Fade, { timeout: exports.overlayBaseTransitionDuration, ...maskProps, in: open, className: (0, utils_1.clsx)(overlayBase_style_1.classes.mask, maskProps?.className), onClick: clickHandler, onEntered: onEntered, onExited: onExited }), props.children] }), containerEl.current);
|
|
44
44
|
}
|
|
@@ -7,6 +7,8 @@ export interface PopperProps extends Omit<DivProps, 'content' | 'children'> {
|
|
|
7
7
|
anchorElement?: DefineElement<HTMLElement>;
|
|
8
8
|
/** 弹框渲染的容器元素,默认为{@link document.body} */
|
|
9
9
|
container?: DefineElement<HTMLElement>;
|
|
10
|
+
/** 同{@link container},但会在useEffect后取值,且只会执行一次 */
|
|
11
|
+
effectContainer?: DefineElement<HTMLElement>;
|
|
10
12
|
/** 汽泡里的内容 */
|
|
11
13
|
content?: ReactNode;
|
|
12
14
|
/** 弹框偏离元素的距离 */
|
|
@@ -46,4 +48,4 @@ export interface PopperRef extends HTMLDivElement {
|
|
|
46
48
|
openAnimation?: boolean;
|
|
47
49
|
}, beforeOpen?: () => void): void;
|
|
48
50
|
}
|
|
49
|
-
export declare function Popper({ ref, popperRef, anchorElement, container, content, offset, trigger, placement, variant, sizeAdaptable, mouseEnterDelay, mouseLeaveDelay, defaultOpen, open, onOpenChange, onOpenChangeEnd, disabled, autoClose, forceRender, children, ...props }: PopperProps): import("@emotion/react/jsx-runtime").JSX.Element;
|
|
51
|
+
export declare function Popper({ ref, popperRef, anchorElement, container, effectContainer, content, offset, trigger, placement, variant, sizeAdaptable, mouseEnterDelay, mouseLeaveDelay, defaultOpen, open, onOpenChange, onOpenChangeEnd, disabled, autoClose, forceRender, children, ...props }: PopperProps): import("@emotion/react/jsx-runtime").JSX.Element;
|
|
@@ -22,7 +22,7 @@ const getAttemptOrder = (placement) => {
|
|
|
22
22
|
}
|
|
23
23
|
return order;
|
|
24
24
|
};
|
|
25
|
-
function Popper({ ref, popperRef, anchorElement, container = document.body, content, offset, trigger = 'hover', placement = 'top', variant = 'zoom', sizeAdaptable = variant === 'collapse', mouseEnterDelay = 100, mouseLeaveDelay = 150, defaultOpen = false, open, onOpenChange, onOpenChangeEnd, disabled, autoClose = false, forceRender, children, ...props }) {
|
|
25
|
+
function Popper({ ref, popperRef, anchorElement, container = document.body, effectContainer, content, offset, trigger = 'hover', placement = 'top', variant = 'zoom', sizeAdaptable = variant === 'collapse', mouseEnterDelay = 100, mouseLeaveDelay = 150, defaultOpen = false, open, onOpenChange, onOpenChangeEnd, disabled, autoClose = false, forceRender, children, ...props }) {
|
|
26
26
|
const { spacing } = (0, theme_1.useTheme)();
|
|
27
27
|
offset ??= spacing[2];
|
|
28
28
|
(0, react_1.useImperativeHandle)(popperRef, () => {
|
|
@@ -38,7 +38,6 @@ function Popper({ ref, popperRef, anchorElement, container = document.body, cont
|
|
|
38
38
|
const unmounted = (0, utils_1.useUnmounted)();
|
|
39
39
|
const openHolding = (0, react_1.useRef)(0);
|
|
40
40
|
const hold = (open) => {
|
|
41
|
-
console.log('hold', open);
|
|
42
41
|
return open ? ++openHolding.current
|
|
43
42
|
: openHolding.current > 0 ? --openHolding.current
|
|
44
43
|
: openHolding.current;
|
|
@@ -105,14 +104,14 @@ function Popper({ ref, popperRef, anchorElement, container = document.body, cont
|
|
|
105
104
|
const getAnchorElement = () => {
|
|
106
105
|
return anchorRef.current || (typeof syncAnchorElement.current === 'function' ? syncAnchorElement.current() : syncAnchorElement.current);
|
|
107
106
|
};
|
|
108
|
-
const
|
|
107
|
+
const containerEl = (0, utils_1.useContainer)(container, effectContainer);
|
|
109
108
|
const innerPopperRef = (0, react_1.useRef)(null);
|
|
110
109
|
const [popperBounding, setPopperBounding] = (0, react_1.useState)();
|
|
111
110
|
const [openNextFrame, setOpenNextFrame] = (0, utils_1.useDerivedState)(!innerOpen.current, [innerOpen.current, contextMenuEvent.current]);
|
|
112
111
|
const placeA = (0, react_1.useRef)(void 0);
|
|
113
112
|
const placeB = (0, react_1.useRef)(void 0);
|
|
114
113
|
const fitPosition = (options, beforeOpen) => {
|
|
115
|
-
const containerRect =
|
|
114
|
+
const containerRect = containerEl.current.getBoundingClientRect();
|
|
116
115
|
const popperEl = innerPopperRef.current;
|
|
117
116
|
let { offsetWidth: popperWidth, offsetHeight: popperHeight } = popperEl;
|
|
118
117
|
let pA, pB;
|
|
@@ -188,7 +187,7 @@ function Popper({ ref, popperRef, anchorElement, container = document.body, cont
|
|
|
188
187
|
}
|
|
189
188
|
popperEl.style.left = left + 'px';
|
|
190
189
|
popperEl.style.top = top + 'px';
|
|
191
|
-
return (0, utils_1.isElementVisibleCompletely)(popperEl,
|
|
190
|
+
return (0, utils_1.isElementVisibleCompletely)(popperEl, containerEl.current === document.body ? void 0 : containerEl.current);
|
|
192
191
|
};
|
|
193
192
|
}
|
|
194
193
|
else {
|
|
@@ -259,7 +258,7 @@ function Popper({ ref, popperRef, anchorElement, container = document.body, cont
|
|
|
259
258
|
}
|
|
260
259
|
popperEl.style.left = left + 'px';
|
|
261
260
|
popperEl.style.top = top + 'px';
|
|
262
|
-
return (0, utils_1.isElementVisibleCompletely)(popperEl,
|
|
261
|
+
return (0, utils_1.isElementVisibleCompletely)(popperEl, containerEl.current === document.body ? void 0 : containerEl.current);
|
|
263
262
|
};
|
|
264
263
|
}
|
|
265
264
|
if (options?.forcePlacement) {
|
|
@@ -503,5 +502,5 @@ function Popper({ ref, popperRef, anchorElement, container = document.body, cont
|
|
|
503
502
|
transform: 'scale(1)'
|
|
504
503
|
},
|
|
505
504
|
...props.style
|
|
506
|
-
}, "data-open": innerOpen.current, "data-variant": variant, "data-place-a": placeA.current, "data-place-b": placeB.current, onTransitionEnd: onTransitionEnd, children: (0, jsx_runtime_1.jsx)(popperContext_1.PopperContext, { value: contextValue, children: content }) }) }),
|
|
505
|
+
}, "data-open": innerOpen.current, "data-variant": variant, "data-place-a": placeA.current, "data-place-b": placeB.current, onTransitionEnd: onTransitionEnd, children: (0, jsx_runtime_1.jsx)(popperContext_1.PopperContext, { value: contextValue, children: content }) }) }), containerEl.current)] }));
|
|
507
506
|
}
|
|
@@ -10,7 +10,9 @@ const react_2 = require("@emotion/react");
|
|
|
10
10
|
const __1 = require("../..");
|
|
11
11
|
const faCircleCheck_1 = require("@fortawesome/free-solid-svg-icons/faCircleCheck");
|
|
12
12
|
const faCircleXmark_1 = require("@fortawesome/free-solid-svg-icons/faCircleXmark");
|
|
13
|
-
exports.Progress = (0, react_1.memo)(({ showInfo = true, renderInfo, color
|
|
13
|
+
exports.Progress = (0, react_1.memo)(({ showInfo = true, renderInfo, color, status = 'default', variant = 'linear', gapDegree = 90, size = 60, indeterminate = false, barWidth = 4, strokeLinecap = variant === 'gauge' ? 'butt' : 'round', value = 0, ...props }) => {
|
|
14
|
+
const isColorSpecified = !!color;
|
|
15
|
+
color ??= 'primary';
|
|
14
16
|
const { colors: { success, error } } = (0, theme_1.useTheme)();
|
|
15
17
|
const isSucceed = status === 'success' || (status !== 'error' && value === 100 && variant !== 'gauge');
|
|
16
18
|
const renderInfoFn = () => {
|
|
@@ -55,7 +57,7 @@ exports.Progress = (0, react_1.memo)(({ showInfo = true, renderInfo, color = 'pr
|
|
|
55
57
|
}
|
|
56
58
|
return;
|
|
57
59
|
}, [indeterminate, variant, strokeLinecap, size, barWidth]);
|
|
58
|
-
return ((0, jsx_runtime_1.jsx)("div", { ...props, css: (0, progress_style_1.useStyle)({ color: color || 'primary', variant }), className: (0, utils_1.clsx)(progress_style_1.classes.root, props.className), "data-variant": variant, "data-indeterminate": indeterminate, "data-processing": value < 100 && status === 'processing', "data-success": isSucceed, "data-error": status === 'error', children: variant === 'linear'
|
|
60
|
+
return ((0, jsx_runtime_1.jsx)("div", { ...props, css: (0, progress_style_1.useStyle)({ color: color || 'primary', variant }), className: (0, utils_1.clsx)(progress_style_1.classes.root, props.className), "data-variant": variant, "data-indeterminate": indeterminate, "data-processing": value < 100 && status === 'processing', "data-success": isColorSpecified ? void 0 : isSucceed, "data-error": isColorSpecified ? void 0 : status === 'error', children: variant === 'linear'
|
|
59
61
|
? (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("div", { className: progress_style_1.classes.track, style: {
|
|
60
62
|
height: barWidth,
|
|
61
63
|
...props.style
|
|
@@ -24,11 +24,12 @@ export declare class SnackbarBaseMethods<P extends SnackbarBaseProps = SnackbarB
|
|
|
24
24
|
error(content: ReactNode): Promise<void>;
|
|
25
25
|
error(props: P): Promise<void>;
|
|
26
26
|
}
|
|
27
|
-
export declare const SnackbarBase: React.MemoExoticComponent<({ methods, useTo, max, container }: {
|
|
27
|
+
export declare const SnackbarBase: React.MemoExoticComponent<({ methods, useTo, max, container, effectContainer }: {
|
|
28
28
|
methods: SnackbarBaseMethods;
|
|
29
29
|
useTo: "message" | "notification";
|
|
30
30
|
max?: number;
|
|
31
|
-
container?: DefineElement
|
|
31
|
+
container?: DefineElement<HTMLElement>;
|
|
32
|
+
effectContainer?: DefineElement<HTMLElement>;
|
|
32
33
|
}) => React.ReactPortal>;
|
|
33
34
|
interface SnackbarBaseItemProps extends Omit<SnackbarBaseProps, 'duration' | 'onAutoClose'> {
|
|
34
35
|
id: string;
|
|
@@ -37,7 +37,7 @@ const placementToIndex = {
|
|
|
37
37
|
bottomRight: 5,
|
|
38
38
|
rightBottom: 5
|
|
39
39
|
};
|
|
40
|
-
exports.SnackbarBase = (0, react_2.memo)(({ methods, useTo, max = useTo === 'message' ? 5 : 4, container }) => {
|
|
40
|
+
exports.SnackbarBase = (0, react_2.memo)(({ methods, useTo, max = useTo === 'message' ? 5 : 4, container, effectContainer }) => {
|
|
41
41
|
const [stacks, setStacks] = (0, react_2.useState)([]);
|
|
42
42
|
const timers = (0, react_2.useRef)([]);
|
|
43
43
|
(0, react_2.useEffect)(() => () => {
|
|
@@ -85,10 +85,10 @@ exports.SnackbarBase = (0, react_2.memo)(({ methods, useTo, max = useTo === 'mes
|
|
|
85
85
|
methods.warning = defineMethod('warning');
|
|
86
86
|
methods.error = defineMethod('error');
|
|
87
87
|
const css = (0, snackbarBase_style_1.style)();
|
|
88
|
-
const containerEl = (
|
|
88
|
+
const containerEl = (0, utils_1.useContainer)(container, effectContainer);
|
|
89
89
|
return (0, react_dom_1.createPortal)(stacks.flatMap((stack, i) => stack
|
|
90
90
|
? (0, jsx_runtime_1.jsx)(react_transition_group_1.TransitionGroup, { css: css, className: snackbarBase_style_1.classes.root, "data-place": i, "data-use-to": useTo, children: stack.map(p => (0, react_1.createElement)(exports.SnackbarBaseItem, { ...p, key: p.id })) }, i)
|
|
91
|
-
: []), containerEl);
|
|
91
|
+
: []), containerEl.current);
|
|
92
92
|
});
|
|
93
93
|
/**
|
|
94
94
|
* ----------------------------------------------------------------------
|
|
@@ -1,16 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
export interface TouchRippleProps extends Omit<DivProps, 'children'> {
|
|
1
|
+
import { ColorPropsValue, DefineElement, DivProps } from '../../types';
|
|
2
|
+
export interface TouchRippleOverlayProps extends DivProps {
|
|
4
3
|
color?: ColorPropsValue;
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
/** 容器元素,默认为该组件元素的父元素 */
|
|
5
|
+
container?: DefineElement<HTMLElement>;
|
|
6
|
+
effectContainer?: DefineElement<HTMLElement>;
|
|
7
7
|
}
|
|
8
|
-
export declare const TouchRipple: {
|
|
9
|
-
(props: TouchRippleProps): ReactElement;
|
|
10
|
-
Ripple: typeof Ripple;
|
|
11
|
-
};
|
|
12
|
-
interface RippleProps extends DivProps {
|
|
13
|
-
color?: ColorPropsValue;
|
|
14
|
-
}
|
|
15
|
-
export declare const Ripple: import("react").MemoExoticComponent<({ ref, color, ...props }: RippleProps) => import("@emotion/react/jsx-runtime").JSX.Element>;
|
|
16
|
-
export {};
|
|
8
|
+
export declare const TouchRipple: import("react").MemoExoticComponent<({ color, container, effectContainer, ...props }: TouchRippleOverlayProps) => import("@emotion/react/jsx-runtime").JSX.Element>;
|
|
@@ -1,57 +1,72 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.TouchRipple = void 0;
|
|
4
4
|
const jsx_runtime_1 = require("@emotion/react/jsx-runtime");
|
|
5
5
|
const react_1 = require("react");
|
|
6
|
-
const
|
|
6
|
+
const react_dom_1 = require("react-dom");
|
|
7
7
|
const utils_1 = require("../../utils");
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
r: Math.sqrt(wrapper.clientWidth ** 2 + wrapper.clientHeight ** 2),
|
|
29
|
-
left: e.offsetX,
|
|
30
|
-
top: e.offsetY,
|
|
8
|
+
const touchRipple_style_1 = require("./touchRipple.style");
|
|
9
|
+
exports.TouchRipple = (0, react_1.memo)(({ color = 'primary', container, effectContainer, ...props }) => {
|
|
10
|
+
const ref = (0, react_1.useRef)(null);
|
|
11
|
+
const [ripples, setRipples] = (0, react_1.useState)(new Map());
|
|
12
|
+
const incrementKey = (0, react_1.useRef)(0);
|
|
13
|
+
const containerEl = (0, utils_1.useContainer)(container, effectContainer, null);
|
|
14
|
+
(0, react_1.useEffect)(() => {
|
|
15
|
+
const parentElement = containerEl.current ?? ref.current.parentElement;
|
|
16
|
+
if (parentElement) {
|
|
17
|
+
const pointerDown = ({ offsetX, offsetY }) => {
|
|
18
|
+
const maxWidth = Math.max(parentElement.clientWidth - offsetX, offsetX);
|
|
19
|
+
const maxHeight = Math.max(parentElement.clientHeight - offsetY, offsetY);
|
|
20
|
+
setRipples(o => {
|
|
21
|
+
const r = new Map(o);
|
|
22
|
+
const key = ++incrementKey.current;
|
|
23
|
+
r.set(key, {
|
|
24
|
+
key,
|
|
25
|
+
diameter: Math.sqrt(maxWidth ** 2 + maxHeight ** 2) * 2,
|
|
26
|
+
left: offsetX,
|
|
27
|
+
top: offsetY,
|
|
31
28
|
leaving: false
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
29
|
+
});
|
|
30
|
+
return r;
|
|
31
|
+
});
|
|
32
|
+
parentElement.addEventListener('pointerup', leave);
|
|
33
|
+
parentElement.addEventListener('pointerleave', leave);
|
|
36
34
|
};
|
|
37
35
|
const leave = () => {
|
|
38
|
-
setRipples(o =>
|
|
36
|
+
setRipples(o => {
|
|
37
|
+
const r = new Map(o);
|
|
38
|
+
r.forEach(v => v.leaving = true);
|
|
39
|
+
return r;
|
|
40
|
+
});
|
|
39
41
|
removeLeaveListener();
|
|
40
42
|
};
|
|
41
|
-
wrapper.addEventListener('pointerdown', pointerDown);
|
|
42
43
|
const removeLeaveListener = () => {
|
|
43
|
-
|
|
44
|
-
|
|
44
|
+
parentElement.removeEventListener('pointerup', leave);
|
|
45
|
+
parentElement.removeEventListener('pointerleave', leave);
|
|
45
46
|
};
|
|
47
|
+
parentElement.addEventListener('pointerdown', pointerDown);
|
|
46
48
|
return () => {
|
|
47
|
-
|
|
49
|
+
parentElement.removeEventListener('pointerdown', pointerDown);
|
|
48
50
|
removeLeaveListener();
|
|
49
51
|
};
|
|
50
52
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
53
|
+
}, [containerEl.current]);
|
|
54
|
+
const leftHandler = (key) => {
|
|
55
|
+
setRipples(o => {
|
|
56
|
+
const r = new Map(o);
|
|
57
|
+
r.delete(key);
|
|
58
|
+
if (!r.size) {
|
|
59
|
+
incrementKey.current = 0;
|
|
60
|
+
}
|
|
61
|
+
return r;
|
|
62
|
+
});
|
|
55
63
|
};
|
|
56
|
-
|
|
64
|
+
const children = ((0, jsx_runtime_1.jsx)("div", { ...props, ref: (0, utils_1.cloneRef)(ref, props.ref), css: (0, touchRipple_style_1.useStyle)({ color }), className: (0, utils_1.clsx)(touchRipple_style_1.classes.root, props.className), children: ripples.values().toArray().map(({ key, diameter, left, top, leaving }) => (0, jsx_runtime_1.jsx)("div", { className: touchRipple_style_1.classes.ripple, style: {
|
|
65
|
+
width: diameter,
|
|
66
|
+
height: diameter,
|
|
67
|
+
left, top
|
|
68
|
+
}, "data-leaving": leaving, onTransitionEnd: () => leftHandler(key) }, key)) }));
|
|
69
|
+
return containerEl.current
|
|
70
|
+
? (0, react_dom_1.createPortal)(children, containerEl.current)
|
|
71
|
+
: children;
|
|
57
72
|
});
|
|
@@ -3,45 +3,43 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.classes = void 0;
|
|
4
4
|
exports.useStyle = useStyle;
|
|
5
5
|
const tslib_1 = require("tslib");
|
|
6
|
-
const react_1 = require("@emotion/react");
|
|
7
6
|
const utils_1 = require("../../utils");
|
|
7
|
+
const react_1 = require("@emotion/react");
|
|
8
|
+
const theme_1 = require("../theme");
|
|
8
9
|
const color_1 = tslib_1.__importDefault(require("color"));
|
|
9
|
-
exports.classes = (0, utils_1.defineInnerClasses)('touch-ripple', [
|
|
10
|
+
exports.classes = (0, utils_1.defineInnerClasses)('touch-ripple-overlay', [
|
|
10
11
|
'ripple'
|
|
11
12
|
]);
|
|
12
13
|
function useStyle({ color }) {
|
|
13
14
|
const colorValue = (0, utils_1.useColor)(color);
|
|
14
|
-
return (0, utils_1.useCss)(({ easing }) =>
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
return (0, utils_1.useCss)(({ easing }) => (0, react_1.css) `
|
|
16
|
+
position: absolute;
|
|
17
|
+
inset: 0;
|
|
18
|
+
z-index: ${theme_1.zIndex.touchRipple};
|
|
19
|
+
overflow: hidden;
|
|
20
|
+
pointer-events: none;
|
|
21
|
+
|
|
22
|
+
.${exports.classes.ripple} {
|
|
23
|
+
aspect-ratio: 1;
|
|
24
|
+
border-radius: 50%;
|
|
25
|
+
background-color: ${(0, color_1.default)(colorValue).alpha(.1).string()};
|
|
20
26
|
position: absolute;
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
translate: -50% -50%;
|
|
29
|
-
background-color: ${bg};
|
|
30
|
-
animation: ${showRippleAnim} .4s ${easing.easeIn} forwards;
|
|
31
|
-
transition: opacity .4s ${easing.easeIn};
|
|
32
|
-
|
|
33
|
-
&[data-leaving=true] {
|
|
34
|
-
opacity: 0;
|
|
35
|
-
}
|
|
27
|
+
scale: 0;
|
|
28
|
+
translate: -50% -50%;
|
|
29
|
+
animation: ${rippleAnim} .4s ${easing.easeOut} forwards;
|
|
30
|
+
transition: opacity .4s ${easing.easeIn};
|
|
31
|
+
|
|
32
|
+
&[data-leaving=true] {
|
|
33
|
+
opacity: 0;
|
|
36
34
|
}
|
|
37
|
-
|
|
38
|
-
|
|
35
|
+
}
|
|
36
|
+
`, [colorValue]);
|
|
39
37
|
}
|
|
40
|
-
const
|
|
38
|
+
const rippleAnim = (0, react_1.keyframes) `
|
|
41
39
|
0% {
|
|
42
40
|
scale: 0;
|
|
43
41
|
}
|
|
44
|
-
|
|
42
|
+
|
|
45
43
|
100% {
|
|
46
44
|
scale: 1;
|
|
47
45
|
}
|
|
@@ -16,8 +16,8 @@ function useTransferContext() {
|
|
|
16
16
|
const { options = [], primaryKey = 'value', value = [], allowSelectAll = true, showHeader = true } = (0, react_1.useContext)(TransferContext);
|
|
17
17
|
return { options, primaryKey, value, allowSelectAll, showHeader };
|
|
18
18
|
}
|
|
19
|
-
exports.Transfer = (0, react_1.memo)(({ options
|
|
20
|
-
const [innerValue, setInnerValue] = (0, utils_1.useControlled)(defaultValue, value, onChange);
|
|
19
|
+
exports.Transfer = (0, react_1.memo)(({ options, primaryKey = 'value', fullWidth, allowSelectAll = true, showHeader = true, leftTitle = '选项', rightTitle = '已选', renderButtons, defaultValue, value, onChange, ...props }) => {
|
|
20
|
+
const [innerValue, setInnerValue] = (0, utils_1.useControlled)(defaultValue || [], value, onChange);
|
|
21
21
|
const [leftSelected, setLeftSelected] = (0, react_1.useState)([]);
|
|
22
22
|
const [rightSelected, setRightSelected] = (0, react_1.useState)([]);
|
|
23
23
|
const toRight = () => {
|
|
@@ -7,7 +7,8 @@ const transfer_style_1 = require("./transfer.style");
|
|
|
7
7
|
const checkbox_1 = require("../checkbox");
|
|
8
8
|
const transfer_1 = require("./transfer");
|
|
9
9
|
const optionsBase_1 = require("../optionsBase");
|
|
10
|
-
exports.TransferPanel = (0, react_1.memo)(({ title, type = 'left', selectedValue
|
|
10
|
+
exports.TransferPanel = (0, react_1.memo)(({ title, type = 'left', selectedValue, onChange, renderList, renderItem, ...props }) => {
|
|
11
|
+
selectedValue ||= [];
|
|
11
12
|
const { options, primaryKey, value, allowSelectAll, showHeader } = (0, transfer_1.useTransferContext)();
|
|
12
13
|
const selfOptions = (0, react_1.useMemo)(() => {
|
|
13
14
|
const valueSet = new Set(value);
|