@canlooks/can-ui 0.0.67 → 0.0.69
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.js +2 -2
- package/dist/cjs/components/alert/alert.js +4 -3
- package/dist/cjs/components/anchorList/anchorList.js +26 -20
- package/dist/cjs/components/boundary/errorBoundary.js +2 -2
- package/dist/cjs/components/bubbleConfirm/bubbleConfirm.js +2 -2
- package/dist/cjs/components/calendar/panelYear.js +2 -2
- package/dist/cjs/components/cascade/cascade.js +5 -5
- package/dist/cjs/components/cascade/cascadePanel.js +2 -2
- package/dist/cjs/components/checkboxBase/checkboxBase.js +2 -2
- package/dist/cjs/components/counter/counter.js +3 -3
- package/dist/cjs/components/curd/curd.js +5 -5
- package/dist/cjs/components/curd/curd.style.js +5 -0
- package/dist/cjs/components/curd/curdColumnConfig.js +4 -3
- package/dist/cjs/components/curd/curdDialog.js +2 -2
- package/dist/cjs/components/curd/curdFilter.js +3 -3
- package/dist/cjs/components/curd/curdResizable.js +2 -2
- package/dist/cjs/components/dataGrid/dataGrid.js +3 -2
- package/dist/cjs/components/dataGrid/dataGridHead.js +2 -2
- package/dist/cjs/components/dataGrid/dataGridRows.js +3 -3
- package/dist/cjs/components/dateTimePicker/dateTimePicker.js +3 -3
- package/dist/cjs/components/dialog/dialog.js +2 -2
- package/dist/cjs/components/drawer/drawer.js +2 -2
- package/dist/cjs/components/gallery/gallery.js +7 -7
- package/dist/cjs/components/image/image.d.ts +1 -1
- package/dist/cjs/components/image/image.js +5 -4
- package/dist/cjs/components/inputBase/inputBase.js +2 -2
- package/dist/cjs/components/menu/menu.js +2 -2
- package/dist/cjs/components/menuItem/menuItem.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/pagination/pager.js +3 -3
- package/dist/cjs/components/palette/palette.js +2 -2
- package/dist/cjs/components/pickerDialog/pickerDialog.js +2 -2
- package/dist/cjs/components/pinchable/pinchable.js +7 -0
- package/dist/cjs/components/popper/popper.d.ts +3 -1
- package/dist/cjs/components/popper/popper.js +6 -6
- package/dist/cjs/components/progress/progress.js +7 -5
- package/dist/cjs/components/rating/rating.js +2 -2
- package/dist/cjs/components/select/select.js +3 -3
- package/dist/cjs/components/snackbarBase/snackbarBase.d.ts +3 -2
- package/dist/cjs/components/snackbarBase/snackbarBase.js +6 -6
- package/dist/cjs/components/stepper/step.js +5 -5
- package/dist/cjs/components/tabs/tabsEllipsis.js +2 -2
- package/dist/cjs/components/tag/tag.js +2 -2
- 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 +5 -5
- package/dist/cjs/components/transfer/transferPanel.js +2 -1
- package/dist/cjs/components/tree/tree.js +2 -2
- package/dist/cjs/components/tree/treeNode.js +2 -2
- package/dist/cjs/components/treeSelect/treeSelect.js +2 -2
- package/dist/cjs/components/typography/typography.js +4 -4
- package/dist/cjs/components/upload/dropArea.js +2 -2
- package/dist/cjs/components/upload/fileItem.js +5 -5
- package/dist/cjs/components/upload/imageItem.js +3 -3
- package/dist/cjs/components/upload/upload.js +5 -5
- package/dist/cjs/components/waterfall/waterfallItem.js +1 -1
- package/dist/cjs/extensions/documentViewer/documentViewer.js +4 -3
- package/dist/cjs/extensions/documentViewer/documentViewer.style.js +2 -1
- package/dist/cjs/extensions/documentViewer/svgViewer.d.ts +2 -2
- package/dist/cjs/extensions/documentViewer/svgViewer.js +13 -9
- package/dist/cjs/utils/hooks.d.ts +8 -0
- package/dist/cjs/utils/hooks.js +22 -0
- package/dist/esm/components/accordion/accordion.js +1 -1
- package/dist/esm/components/alert/alert.js +2 -1
- package/dist/esm/components/anchorList/anchorList.js +26 -20
- package/dist/esm/components/boundary/errorBoundary.js +1 -1
- package/dist/esm/components/bubbleConfirm/bubbleConfirm.js +1 -1
- package/dist/esm/components/calendar/panelYear.js +1 -1
- package/dist/esm/components/cascade/cascade.js +3 -3
- package/dist/esm/components/cascade/cascadePanel.js +1 -1
- package/dist/esm/components/checkboxBase/checkboxBase.js +1 -1
- package/dist/esm/components/counter/counter.js +1 -1
- package/dist/esm/components/curd/curd.js +1 -1
- package/dist/esm/components/curd/curd.style.js +5 -0
- package/dist/esm/components/curd/curdColumnConfig.js +3 -2
- package/dist/esm/components/curd/curdDialog.js +1 -1
- package/dist/esm/components/curd/curdFilter.js +1 -1
- package/dist/esm/components/curd/curdResizable.js +1 -1
- package/dist/esm/components/dataGrid/dataGrid.js +3 -2
- package/dist/esm/components/dataGrid/dataGridHead.js +1 -1
- package/dist/esm/components/dataGrid/dataGridRows.js +1 -1
- package/dist/esm/components/dateTimePicker/dateTimePicker.js +1 -1
- package/dist/esm/components/dialog/dialog.js +1 -1
- package/dist/esm/components/drawer/drawer.js +1 -1
- package/dist/esm/components/gallery/gallery.js +3 -3
- package/dist/esm/components/image/image.d.ts +1 -1
- package/dist/esm/components/image/image.js +3 -2
- package/dist/esm/components/inputBase/inputBase.js +1 -1
- package/dist/esm/components/menu/menu.js +2 -2
- package/dist/esm/components/menuItem/menuItem.js +1 -1
- package/dist/esm/components/overlayBase/overlayBase.d.ts +3 -1
- package/dist/esm/components/overlayBase/overlayBase.js +6 -6
- package/dist/esm/components/pagination/pager.js +1 -1
- package/dist/esm/components/palette/palette.js +1 -1
- package/dist/esm/components/pickerDialog/pickerDialog.js +1 -1
- package/dist/esm/components/pinchable/pinchable.js +7 -0
- package/dist/esm/components/popper/popper.d.ts +3 -1
- package/dist/esm/components/popper/popper.js +7 -7
- package/dist/esm/components/progress/progress.js +5 -3
- package/dist/esm/components/rating/rating.js +1 -1
- package/dist/esm/components/select/select.js +1 -1
- package/dist/esm/components/snackbarBase/snackbarBase.d.ts +3 -2
- package/dist/esm/components/snackbarBase/snackbarBase.js +5 -5
- package/dist/esm/components/stepper/step.js +1 -1
- package/dist/esm/components/tabs/tabsEllipsis.js +1 -1
- package/dist/esm/components/tag/tag.js +1 -1
- 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 +3 -3
- package/dist/esm/components/transfer/transferPanel.js +2 -1
- package/dist/esm/components/tree/tree.js +1 -1
- package/dist/esm/components/tree/treeNode.js +1 -1
- package/dist/esm/components/treeSelect/treeSelect.js +1 -1
- package/dist/esm/components/typography/typography.js +1 -1
- package/dist/esm/components/upload/dropArea.js +1 -1
- package/dist/esm/components/upload/fileItem.js +1 -1
- package/dist/esm/components/upload/imageItem.js +1 -1
- package/dist/esm/components/upload/upload.js +3 -3
- package/dist/esm/components/waterfall/waterfallItem.js +2 -2
- package/dist/esm/extensions/documentViewer/documentViewer.js +2 -1
- package/dist/esm/extensions/documentViewer/documentViewer.style.js +2 -1
- package/dist/esm/extensions/documentViewer/svgViewer.d.ts +2 -2
- package/dist/esm/extensions/documentViewer/svgViewer.js +12 -8
- package/dist/esm/utils/hooks.d.ts +8 -0
- package/dist/esm/utils/hooks.js +21 -0
- package/documentation/dist/assets/{index-GiFWv3kZ.js → index-DvrKS6Tv.js} +2978 -2957
- package/documentation/dist/index.html +1 -1
- package/package.json +1 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "@emotion/react/jsx-runtime";
|
|
2
2
|
import { cloneElement, isValidElement, useCallback, useEffect, useImperativeHandle, useLayoutEffect, useMemo, useRef, useState } from 'react';
|
|
3
3
|
import { createPortal } from 'react-dom';
|
|
4
|
-
import { clsx, cloneRef, isElementVisibleCompletely, listenAllPredecessorsScroll, toArray, useControlled, useDerivedState, useForceUpdate, useSync, useSyncState, useUnmounted } from '../../utils';
|
|
4
|
+
import { clsx, cloneRef, isElementVisibleCompletely, listenAllPredecessorsScroll, toArray, useControlled, useDerivedState, useForceUpdate, useSync, useSyncState, useUnmounted, useContainer } from '../../utils';
|
|
5
5
|
import { ClickAway } from '../clickAway';
|
|
6
6
|
import { classes, style } from './popper.style';
|
|
7
7
|
import { PopperContext, usePopperContext } from './popperContext';
|
|
@@ -19,7 +19,7 @@ const getAttemptOrder = (placement) => {
|
|
|
19
19
|
}
|
|
20
20
|
return order;
|
|
21
21
|
};
|
|
22
|
-
export 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 }) {
|
|
22
|
+
export 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 }) {
|
|
23
23
|
const { spacing } = useTheme();
|
|
24
24
|
offset ??= spacing[2];
|
|
25
25
|
useImperativeHandle(popperRef, () => {
|
|
@@ -101,14 +101,14 @@ export function Popper({ ref, popperRef, anchorElement, container = document.bod
|
|
|
101
101
|
const getAnchorElement = () => {
|
|
102
102
|
return anchorRef.current || (typeof syncAnchorElement.current === 'function' ? syncAnchorElement.current() : syncAnchorElement.current);
|
|
103
103
|
};
|
|
104
|
-
const
|
|
104
|
+
const containerEl = useContainer(container, effectContainer);
|
|
105
105
|
const innerPopperRef = useRef(null);
|
|
106
106
|
const [popperBounding, setPopperBounding] = useState();
|
|
107
107
|
const [openNextFrame, setOpenNextFrame] = useDerivedState(!innerOpen.current, [innerOpen.current, contextMenuEvent.current]);
|
|
108
108
|
const placeA = useRef(void 0);
|
|
109
109
|
const placeB = useRef(void 0);
|
|
110
110
|
const fitPosition = (options, beforeOpen) => {
|
|
111
|
-
const containerRect =
|
|
111
|
+
const containerRect = containerEl.current.getBoundingClientRect();
|
|
112
112
|
const popperEl = innerPopperRef.current;
|
|
113
113
|
let { offsetWidth: popperWidth, offsetHeight: popperHeight } = popperEl;
|
|
114
114
|
let pA, pB;
|
|
@@ -184,7 +184,7 @@ export function Popper({ ref, popperRef, anchorElement, container = document.bod
|
|
|
184
184
|
}
|
|
185
185
|
popperEl.style.left = left + 'px';
|
|
186
186
|
popperEl.style.top = top + 'px';
|
|
187
|
-
return isElementVisibleCompletely(popperEl,
|
|
187
|
+
return isElementVisibleCompletely(popperEl, containerEl.current === document.body ? void 0 : containerEl.current);
|
|
188
188
|
};
|
|
189
189
|
}
|
|
190
190
|
else {
|
|
@@ -255,7 +255,7 @@ export function Popper({ ref, popperRef, anchorElement, container = document.bod
|
|
|
255
255
|
}
|
|
256
256
|
popperEl.style.left = left + 'px';
|
|
257
257
|
popperEl.style.top = top + 'px';
|
|
258
|
-
return isElementVisibleCompletely(popperEl,
|
|
258
|
+
return isElementVisibleCompletely(popperEl, containerEl.current === document.body ? void 0 : containerEl.current);
|
|
259
259
|
};
|
|
260
260
|
}
|
|
261
261
|
if (options?.forcePlacement) {
|
|
@@ -499,5 +499,5 @@ export function Popper({ ref, popperRef, anchorElement, container = document.bod
|
|
|
499
499
|
transform: 'scale(1)'
|
|
500
500
|
},
|
|
501
501
|
...props.style
|
|
502
|
-
}, "data-open": innerOpen.current, "data-variant": variant, "data-place-a": placeA.current, "data-place-b": placeB.current, onTransitionEnd: onTransitionEnd, children: _jsx(PopperContext, { value: contextValue, children: content }) }) }),
|
|
502
|
+
}, "data-open": innerOpen.current, "data-variant": variant, "data-place-a": placeA.current, "data-place-b": placeB.current, onTransitionEnd: onTransitionEnd, children: _jsx(PopperContext, { value: contextValue, children: content }) }) }), containerEl.current)] }));
|
|
503
503
|
}
|
|
@@ -4,10 +4,12 @@ import { classes, useStyle } from './progress.style';
|
|
|
4
4
|
import { clsx } from '../../utils';
|
|
5
5
|
import { useTheme } from '../theme';
|
|
6
6
|
import { css, keyframes } from '@emotion/react';
|
|
7
|
-
import { Icon } from '
|
|
7
|
+
import { Icon } from '../icon';
|
|
8
8
|
import { faCircleCheck } from '@fortawesome/free-solid-svg-icons/faCircleCheck';
|
|
9
9
|
import { faCircleXmark } from '@fortawesome/free-solid-svg-icons/faCircleXmark';
|
|
10
|
-
export const Progress = memo(({ showInfo = true, renderInfo, color
|
|
10
|
+
export const Progress = 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 }) => {
|
|
11
|
+
const isColorSpecified = !!color;
|
|
12
|
+
color ??= 'primary';
|
|
11
13
|
const { colors: { success, error } } = useTheme();
|
|
12
14
|
const isSucceed = status === 'success' || (status !== 'error' && value === 100 && variant !== 'gauge');
|
|
13
15
|
const renderInfoFn = () => {
|
|
@@ -52,7 +54,7 @@ export const Progress = memo(({ showInfo = true, renderInfo, color = 'primary',
|
|
|
52
54
|
}
|
|
53
55
|
return;
|
|
54
56
|
}, [indeterminate, variant, strokeLinecap, size, barWidth]);
|
|
55
|
-
return (_jsx("div", { ...props, css: useStyle({ color: color || 'primary', variant }), className: clsx(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'
|
|
57
|
+
return (_jsx("div", { ...props, css: useStyle({ color: color || 'primary', variant }), className: clsx(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'
|
|
56
58
|
? _jsxs(_Fragment, { children: [_jsx("div", { className: classes.track, style: {
|
|
57
59
|
height: barWidth,
|
|
58
60
|
...props.style
|
|
@@ -3,7 +3,7 @@ import { cloneElement, isValidElement, memo, useState } from 'react';
|
|
|
3
3
|
import { clsx, useControlled } from '../../utils';
|
|
4
4
|
import { classes, useStyle } from './rating.style';
|
|
5
5
|
import { useTheme } from '../theme';
|
|
6
|
-
import { Icon } from '
|
|
6
|
+
import { Icon } from '../icon';
|
|
7
7
|
import { faStar } from '@fortawesome/free-solid-svg-icons/faStar';
|
|
8
8
|
export const Rating = memo(({ color = '#FFCC00', size, count = 5, renderStar = _jsx(Icon, { icon: faStar }), allowHalf, highlightSelectedOnly = false, defaultValue = 0, value, onChange, readOnly, disabled, ...props }) => {
|
|
9
9
|
const theme = useTheme();
|
|
@@ -11,7 +11,7 @@ import { Input } from '../input';
|
|
|
11
11
|
import { LoadingIndicator } from '../loadingIndicator';
|
|
12
12
|
import { popperStyle } from '../popper/popper.style';
|
|
13
13
|
import { useShallowSelection } from '../selectionContext';
|
|
14
|
-
import { Icon } from '
|
|
14
|
+
import { Icon } from '../icon';
|
|
15
15
|
import { faChevronDown } from '@fortawesome/free-solid-svg-icons/faChevronDown';
|
|
16
16
|
import { faMagnifyingGlass } from '@fortawesome/free-solid-svg-icons/faMagnifyingGlass';
|
|
17
17
|
export const Select = memo(({ inputProps, popperProps, popperRef, defaultOpen = false, open, onOpenChange, sizeAdaptable = true, children, multiple, defaultValue, value, onChange, renderBackfill, searchable, defaultSearchValue = '', searchValue, onSearchChange, searchInputProps,
|
|
@@ -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;
|
|
@@ -2,13 +2,13 @@ import { jsx as _jsx, jsxs as _jsxs } from "@emotion/react/jsx-runtime";
|
|
|
2
2
|
import { createElement as _createElement } from "@emotion/react";
|
|
3
3
|
import { isValidElement, memo, useEffect, useRef, useState } from 'react';
|
|
4
4
|
import { Collapse, Slide } from '../transitionBase';
|
|
5
|
-
import { clsx, getEasyID, useColor } from '../../utils';
|
|
5
|
+
import { clsx, getEasyID, useColor, useContainer } from '../../utils';
|
|
6
6
|
import { classes, style } from './snackbarBase.style';
|
|
7
7
|
import { TransitionGroup } from 'react-transition-group';
|
|
8
8
|
import { StatusIcon, statusMapToIconDefinition } from '../status';
|
|
9
9
|
import { Button } from '../button';
|
|
10
10
|
import { createPortal } from 'react-dom';
|
|
11
|
-
import { Icon } from '
|
|
11
|
+
import { Icon } from '../icon';
|
|
12
12
|
import { faXmark } from '@fortawesome/free-solid-svg-icons/faXmark';
|
|
13
13
|
export class SnackbarBaseMethods {
|
|
14
14
|
async info(_) {
|
|
@@ -33,7 +33,7 @@ const placementToIndex = {
|
|
|
33
33
|
bottomRight: 5,
|
|
34
34
|
rightBottom: 5
|
|
35
35
|
};
|
|
36
|
-
export const SnackbarBase = memo(({ methods, useTo, max = useTo === 'message' ? 5 : 4, container }) => {
|
|
36
|
+
export const SnackbarBase = memo(({ methods, useTo, max = useTo === 'message' ? 5 : 4, container, effectContainer }) => {
|
|
37
37
|
const [stacks, setStacks] = useState([]);
|
|
38
38
|
const timers = useRef([]);
|
|
39
39
|
useEffect(() => () => {
|
|
@@ -81,10 +81,10 @@ export const SnackbarBase = memo(({ methods, useTo, max = useTo === 'message' ?
|
|
|
81
81
|
methods.warning = defineMethod('warning');
|
|
82
82
|
methods.error = defineMethod('error');
|
|
83
83
|
const css = style();
|
|
84
|
-
const containerEl = (
|
|
84
|
+
const containerEl = useContainer(container, effectContainer);
|
|
85
85
|
return createPortal(stacks.flatMap((stack, i) => stack
|
|
86
86
|
? _jsx(TransitionGroup, { css: css, className: classes.root, "data-place": i, "data-use-to": useTo, children: stack.map(p => _createElement(SnackbarBaseItem, { ...p, key: p.id })) }, i)
|
|
87
|
-
: []), containerEl);
|
|
87
|
+
: []), containerEl.current);
|
|
88
88
|
});
|
|
89
89
|
/**
|
|
90
90
|
* ----------------------------------------------------------------------
|
|
@@ -4,7 +4,7 @@ import { clsx } from '../../utils';
|
|
|
4
4
|
import { classes, useStyle } from './step.style';
|
|
5
5
|
import { useStepperContext } from './stepper';
|
|
6
6
|
import { useTheme } from '../theme';
|
|
7
|
-
import { Icon } from '
|
|
7
|
+
import { Icon } from '../icon';
|
|
8
8
|
import { faCheck } from '@fortawesome/free-solid-svg-icons/faCheck';
|
|
9
9
|
import { faCircleInfo } from '@fortawesome/free-solid-svg-icons/faCircleInfo';
|
|
10
10
|
import { faXmark } from '@fortawesome/free-solid-svg-icons/faXmark';
|
|
@@ -4,7 +4,7 @@ import { classes } from './tabs.style';
|
|
|
4
4
|
import { Popper } from '../popper';
|
|
5
5
|
import { tabsEllipsisPopperStyle } from './tabsEllipsis.style';
|
|
6
6
|
import { OptionsBase } from '../optionsBase';
|
|
7
|
-
import { Icon } from '
|
|
7
|
+
import { Icon } from '../icon';
|
|
8
8
|
import { faEllipsis } from '@fortawesome/free-solid-svg-icons/faEllipsis';
|
|
9
9
|
export const TabsEllipsis = memo(({ tabs, children, labelKey = 'label', primaryKey = 'value', value, onToggleSelected }) => {
|
|
10
10
|
const [open, setOpen] = useState(false);
|
|
@@ -2,7 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "@emotion/react/jsx-runtime";
|
|
|
2
2
|
import { memo } from 'react';
|
|
3
3
|
import { classes, useStyle } from './tag.style';
|
|
4
4
|
import { clsx } from '../../utils';
|
|
5
|
-
import { Icon } from '
|
|
5
|
+
import { Icon } from '../icon';
|
|
6
6
|
import { faXmark } from '@fortawesome/free-solid-svg-icons/faXmark';
|
|
7
7
|
export const Tag = memo(({ variant = 'outlined', color = 'text.secondary', shape = 'square', size = 'small', prefix, suffix, clickable, closable, onClose, ...props }) => {
|
|
8
8
|
const closeHandler = (e) => {
|
|
@@ -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,54 +1,69 @@
|
|
|
1
1
|
import { jsx as _jsx } from "@emotion/react/jsx-runtime";
|
|
2
|
-
import {
|
|
2
|
+
import { memo, useEffect, useRef, useState } from 'react';
|
|
3
|
+
import { createPortal } from 'react-dom';
|
|
4
|
+
import { cloneRef, clsx, useContainer } from '../../utils';
|
|
3
5
|
import { classes, useStyle } from './touchRipple.style';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
{
|
|
24
|
-
key: getEasyID('touch-ripple'),
|
|
25
|
-
r: Math.sqrt(wrapper.clientWidth ** 2 + wrapper.clientHeight ** 2),
|
|
26
|
-
left: e.offsetX,
|
|
27
|
-
top: e.offsetY,
|
|
6
|
+
export const TouchRipple = memo(({ color = 'primary', container, effectContainer, ...props }) => {
|
|
7
|
+
const ref = useRef(null);
|
|
8
|
+
const [ripples, setRipples] = useState(new Map());
|
|
9
|
+
const incrementKey = useRef(0);
|
|
10
|
+
const containerEl = useContainer(container, effectContainer, null);
|
|
11
|
+
useEffect(() => {
|
|
12
|
+
const parentElement = containerEl.current ?? ref.current.parentElement;
|
|
13
|
+
if (parentElement) {
|
|
14
|
+
const pointerDown = ({ offsetX, offsetY }) => {
|
|
15
|
+
const maxWidth = Math.max(parentElement.clientWidth - offsetX, offsetX);
|
|
16
|
+
const maxHeight = Math.max(parentElement.clientHeight - offsetY, offsetY);
|
|
17
|
+
setRipples(o => {
|
|
18
|
+
const r = new Map(o);
|
|
19
|
+
const key = ++incrementKey.current;
|
|
20
|
+
r.set(key, {
|
|
21
|
+
key,
|
|
22
|
+
diameter: Math.sqrt(maxWidth ** 2 + maxHeight ** 2) * 2,
|
|
23
|
+
left: offsetX,
|
|
24
|
+
top: offsetY,
|
|
28
25
|
leaving: false
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
26
|
+
});
|
|
27
|
+
return r;
|
|
28
|
+
});
|
|
29
|
+
parentElement.addEventListener('pointerup', leave);
|
|
30
|
+
parentElement.addEventListener('pointerleave', leave);
|
|
33
31
|
};
|
|
34
32
|
const leave = () => {
|
|
35
|
-
setRipples(o =>
|
|
33
|
+
setRipples(o => {
|
|
34
|
+
const r = new Map(o);
|
|
35
|
+
r.forEach(v => v.leaving = true);
|
|
36
|
+
return r;
|
|
37
|
+
});
|
|
36
38
|
removeLeaveListener();
|
|
37
39
|
};
|
|
38
|
-
wrapper.addEventListener('pointerdown', pointerDown);
|
|
39
40
|
const removeLeaveListener = () => {
|
|
40
|
-
|
|
41
|
-
|
|
41
|
+
parentElement.removeEventListener('pointerup', leave);
|
|
42
|
+
parentElement.removeEventListener('pointerleave', leave);
|
|
42
43
|
};
|
|
44
|
+
parentElement.addEventListener('pointerdown', pointerDown);
|
|
43
45
|
return () => {
|
|
44
|
-
|
|
46
|
+
parentElement.removeEventListener('pointerdown', pointerDown);
|
|
45
47
|
removeLeaveListener();
|
|
46
48
|
};
|
|
47
49
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
50
|
+
}, [containerEl.current]);
|
|
51
|
+
const leftHandler = (key) => {
|
|
52
|
+
setRipples(o => {
|
|
53
|
+
const r = new Map(o);
|
|
54
|
+
r.delete(key);
|
|
55
|
+
if (!r.size) {
|
|
56
|
+
incrementKey.current = 0;
|
|
57
|
+
}
|
|
58
|
+
return r;
|
|
59
|
+
});
|
|
52
60
|
};
|
|
53
|
-
|
|
61
|
+
const children = (_jsx("div", { ...props, ref: cloneRef(ref, props.ref), css: useStyle({ color }), className: clsx(classes.root, props.className), children: ripples.values().toArray().map(({ key, diameter, left, top, leaving }) => _jsx("div", { className: classes.ripple, style: {
|
|
62
|
+
width: diameter,
|
|
63
|
+
height: diameter,
|
|
64
|
+
left, top
|
|
65
|
+
}, "data-leaving": leaving, onTransitionEnd: () => leftHandler(key) }, key)) }));
|
|
66
|
+
return containerEl.current
|
|
67
|
+
? createPortal(children, containerEl.current)
|
|
68
|
+
: children;
|
|
54
69
|
});
|
|
@@ -1,42 +1,40 @@
|
|
|
1
|
-
import { css, keyframes } from '@emotion/react';
|
|
2
1
|
import { defineInnerClasses, useColor, useCss } from '../../utils';
|
|
2
|
+
import { css, keyframes } from '@emotion/react';
|
|
3
|
+
import { zIndex } from '../theme';
|
|
3
4
|
import Color from 'color';
|
|
4
|
-
export const classes = defineInnerClasses('touch-ripple', [
|
|
5
|
+
export const classes = defineInnerClasses('touch-ripple-overlay', [
|
|
5
6
|
'ripple'
|
|
6
7
|
]);
|
|
7
8
|
export function useStyle({ color }) {
|
|
8
9
|
const colorValue = useColor(color);
|
|
9
|
-
return useCss(({ easing }) =>
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
10
|
+
return useCss(({ easing }) => css `
|
|
11
|
+
position: absolute;
|
|
12
|
+
inset: 0;
|
|
13
|
+
z-index: ${zIndex.touchRipple};
|
|
14
|
+
overflow: hidden;
|
|
15
|
+
pointer-events: none;
|
|
16
|
+
|
|
17
|
+
.${classes.ripple} {
|
|
18
|
+
aspect-ratio: 1;
|
|
19
|
+
border-radius: 50%;
|
|
20
|
+
background-color: ${Color(colorValue).alpha(.1).string()};
|
|
15
21
|
position: absolute;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
translate: -50% -50%;
|
|
24
|
-
background-color: ${bg};
|
|
25
|
-
animation: ${showRippleAnim} .4s ${easing.easeIn} forwards;
|
|
26
|
-
transition: opacity .4s ${easing.easeIn};
|
|
27
|
-
|
|
28
|
-
&[data-leaving=true] {
|
|
29
|
-
opacity: 0;
|
|
30
|
-
}
|
|
22
|
+
scale: 0;
|
|
23
|
+
translate: -50% -50%;
|
|
24
|
+
animation: ${rippleAnim} .4s ${easing.easeOut} forwards;
|
|
25
|
+
transition: opacity .4s ${easing.easeIn};
|
|
26
|
+
|
|
27
|
+
&[data-leaving=true] {
|
|
28
|
+
opacity: 0;
|
|
31
29
|
}
|
|
32
|
-
|
|
33
|
-
|
|
30
|
+
}
|
|
31
|
+
`, [colorValue]);
|
|
34
32
|
}
|
|
35
|
-
const
|
|
33
|
+
const rippleAnim = keyframes `
|
|
36
34
|
0% {
|
|
37
35
|
scale: 0;
|
|
38
36
|
}
|
|
39
|
-
|
|
37
|
+
|
|
40
38
|
100% {
|
|
41
39
|
scale: 1;
|
|
42
40
|
}
|
|
@@ -4,7 +4,7 @@ import { classes, style } from './transfer.style';
|
|
|
4
4
|
import { clsx, useControlled } from '../../utils';
|
|
5
5
|
import { Button } from '../button';
|
|
6
6
|
import { TransferPanel } from './transferPanel';
|
|
7
|
-
import { Icon } from '
|
|
7
|
+
import { Icon } from '../icon';
|
|
8
8
|
import { faAngleLeft } from '@fortawesome/free-solid-svg-icons/faAngleLeft';
|
|
9
9
|
import { faAngleRight } from '@fortawesome/free-solid-svg-icons/faAngleRight';
|
|
10
10
|
const TransferContext = createContext({});
|
|
@@ -12,8 +12,8 @@ export function useTransferContext() {
|
|
|
12
12
|
const { options = [], primaryKey = 'value', value = [], allowSelectAll = true, showHeader = true } = useContext(TransferContext);
|
|
13
13
|
return { options, primaryKey, value, allowSelectAll, showHeader };
|
|
14
14
|
}
|
|
15
|
-
export const Transfer = memo(({ options
|
|
16
|
-
const [innerValue, setInnerValue] = useControlled(defaultValue, value, onChange);
|
|
15
|
+
export const Transfer = memo(({ options, primaryKey = 'value', fullWidth, allowSelectAll = true, showHeader = true, leftTitle = '选项', rightTitle = '已选', renderButtons, defaultValue, value, onChange, ...props }) => {
|
|
16
|
+
const [innerValue, setInnerValue] = useControlled(defaultValue || [], value, onChange);
|
|
17
17
|
const [leftSelected, setLeftSelected] = useState([]);
|
|
18
18
|
const [rightSelected, setRightSelected] = useState([]);
|
|
19
19
|
const toRight = () => {
|
|
@@ -4,7 +4,8 @@ import { classes } from './transfer.style';
|
|
|
4
4
|
import { Checkbox } from '../checkbox';
|
|
5
5
|
import { useTransferContext } from './transfer';
|
|
6
6
|
import { OptionsBase } from '../optionsBase';
|
|
7
|
-
export const TransferPanel = memo(({ title, type = 'left', selectedValue
|
|
7
|
+
export const TransferPanel = memo(({ title, type = 'left', selectedValue, onChange, renderList, renderItem, ...props }) => {
|
|
8
|
+
selectedValue ||= [];
|
|
8
9
|
const { options, primaryKey, value, allowSelectAll, showHeader } = useTransferContext();
|
|
9
10
|
const selfOptions = useMemo(() => {
|
|
10
11
|
const valueSet = new Set(value);
|
|
@@ -8,7 +8,7 @@ import { clsx, useTreeSearch } from '../../utils';
|
|
|
8
8
|
import { Highlight } from '../highlight';
|
|
9
9
|
import { Placeholder } from '../placeholder';
|
|
10
10
|
import { TreeNode } from './treeNode';
|
|
11
|
-
import { Icon } from '
|
|
11
|
+
import { Icon } from '../icon';
|
|
12
12
|
import { faMagnifyingGlass } from '@fortawesome/free-solid-svg-icons/faMagnifyingGlass';
|
|
13
13
|
const TreeContext = createContext({});
|
|
14
14
|
export function useTreeContext() {
|
|
@@ -7,7 +7,7 @@ import { Button } from '../button';
|
|
|
7
7
|
import { Checkbox } from '../checkbox';
|
|
8
8
|
import { useTreeContext } from './tree';
|
|
9
9
|
import { useSelectionContext } from '../selectionContext';
|
|
10
|
-
import { Icon } from '
|
|
10
|
+
import { Icon } from '../icon';
|
|
11
11
|
import { faChevronRight } from '@fortawesome/free-solid-svg-icons/faChevronRight';
|
|
12
12
|
export const TreeNode = memo(({ value, label, prefix, suffix, disabled, _level = 0, ...props }) => {
|
|
13
13
|
const { expandedSet = new Set(), toggleExpanded, indent, renderExpandIcon, showCheckbox, readOnly, clickLabelToExpand, ...context } = useTreeContext();
|
|
@@ -9,7 +9,7 @@ import { popperStyle } from '../popper/popper.style';
|
|
|
9
9
|
import { Tag } from '../tag';
|
|
10
10
|
import { classes, style } from './treeSelect.style';
|
|
11
11
|
import { useSelection } from '../selectionContext';
|
|
12
|
-
import { Icon } from '
|
|
12
|
+
import { Icon } from '../icon';
|
|
13
13
|
import { faChevronDown } from '@fortawesome/free-solid-svg-icons/faChevronDown';
|
|
14
14
|
export const TreeSelect = memo(({ inputProps, popperProps, popperRef, nodes, options, defaultValue, value, onChange, sizeAdaptable, loading, defaultOpen, open, onOpenChange, renderBackfill,
|
|
15
15
|
// 以下属性转发至<InputBase/>
|
|
@@ -6,7 +6,7 @@ import { Button } from '../button';
|
|
|
6
6
|
import { Tooltip } from '../tooltip';
|
|
7
7
|
import { Input } from '../input';
|
|
8
8
|
import { Textarea } from '../textarea';
|
|
9
|
-
import { Icon } from '
|
|
9
|
+
import { Icon } from '../icon';
|
|
10
10
|
import { faCheck } from '@fortawesome/free-solid-svg-icons/faCheck';
|
|
11
11
|
import { faCopy } from '@fortawesome/free-regular-svg-icons/faCopy';
|
|
12
12
|
import { faPenToSquare } from '@fortawesome/free-regular-svg-icons/faPenToSquare';
|
|
@@ -2,7 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "@emotion/react/jsx-runtime";
|
|
|
2
2
|
import { memo, useEffect, useState } from 'react';
|
|
3
3
|
import { classes, style } from './dropArea.style';
|
|
4
4
|
import { clsx } from '../../utils';
|
|
5
|
-
import { Icon } from '
|
|
5
|
+
import { Icon } from '../icon';
|
|
6
6
|
import { faInbox } from '@fortawesome/free-solid-svg-icons/faInbox';
|
|
7
7
|
export const DropArea = memo(({ description = '点击选择文件,或将文件拖拽到这里', onDrop, ...props }) => {
|
|
8
8
|
const [draggingOver, setDraggingOver] = useState(false);
|
|
@@ -6,7 +6,7 @@ import { Button } from '../button';
|
|
|
6
6
|
import { Progress } from '../progress';
|
|
7
7
|
import { useTheme } from '../theme';
|
|
8
8
|
import { useItemStatus } from './itemStatus';
|
|
9
|
-
import { Icon } from '
|
|
9
|
+
import { Icon } from '../icon';
|
|
10
10
|
import { faCircleCheck } from '@fortawesome/free-solid-svg-icons/faCircleCheck';
|
|
11
11
|
import { faCircleXmark } from '@fortawesome/free-solid-svg-icons/faCircleXmark';
|
|
12
12
|
import { faXmark } from '@fortawesome/free-solid-svg-icons/faXmark';
|
|
@@ -6,7 +6,7 @@ import { Image } from '../image';
|
|
|
6
6
|
import { Button } from '../button';
|
|
7
7
|
import { Progress } from '../progress';
|
|
8
8
|
import { clsx } from '../../utils';
|
|
9
|
-
import { Icon } from '
|
|
9
|
+
import { Icon } from '../icon';
|
|
10
10
|
import { faTrashCan } from '@fortawesome/free-regular-svg-icons/faTrashCan';
|
|
11
11
|
import { faEye } from '@fortawesome/free-regular-svg-icons/faEye';
|
|
12
12
|
export const ImageItem = memo((props) => {
|
|
@@ -11,7 +11,7 @@ import { DndContext } from '@dnd-kit/core';
|
|
|
11
11
|
import { SortableContext } from '@dnd-kit/sortable';
|
|
12
12
|
import { SortableItem } from '../sortableItem';
|
|
13
13
|
import { DropArea } from './dropArea';
|
|
14
|
-
import { Icon } from '
|
|
14
|
+
import { Icon } from '../icon';
|
|
15
15
|
import { faPlus } from '@fortawesome/free-solid-svg-icons/faPlus';
|
|
16
16
|
import { faUpload } from '@fortawesome/free-solid-svg-icons/faUpload';
|
|
17
17
|
const markFileId = (files) => {
|
|
@@ -21,7 +21,7 @@ const markFileId = (files) => {
|
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
};
|
|
24
|
-
export const Upload = memo(({ inputProps, type = 'file', accept = type === 'image' ? 'image/*' : void 0, max = Infinity, showButton = true, buttonProps, buttonText = '选择文件', variant = 'square', sortable, droppable, defaultValue
|
|
24
|
+
export const Upload = memo(({ inputProps, type = 'file', accept = type === 'image' ? 'image/*' : void 0, max = Infinity, showButton = true, buttonProps, buttonText = '选择文件', variant = 'square', sortable, droppable, defaultValue, value, onChange, onUpload, ...props }) => {
|
|
25
25
|
const wrapperRef = useRef(null);
|
|
26
26
|
const itemRefs = useRef(new Map());
|
|
27
27
|
useImperativeHandle(props.ref, () => {
|
|
@@ -51,7 +51,7 @@ export const Upload = memo(({ inputProps, type = 'file', accept = type === 'imag
|
|
|
51
51
|
};
|
|
52
52
|
return wrapperRef.current;
|
|
53
53
|
});
|
|
54
|
-
const [innerValue, setInnerValue] = useControlled(defaultValue, value, value => {
|
|
54
|
+
const [innerValue, setInnerValue] = useControlled(defaultValue || [], value, value => {
|
|
55
55
|
markFileId(value);
|
|
56
56
|
onChange?.(value);
|
|
57
57
|
});
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { cloneElement, useCallback,
|
|
1
|
+
import { cloneElement, useCallback, useEffect, useRef } from 'react';
|
|
2
2
|
import { classes } from './waterfall.style';
|
|
3
3
|
import { cloneRef, clsx } from '../../utils';
|
|
4
4
|
export const WaterfallItem = ({ ref, onLoad, child }) => {
|
|
5
5
|
const innerRef = useRef(null);
|
|
6
|
-
|
|
6
|
+
useEffect(() => {
|
|
7
7
|
const el = innerRef.current;
|
|
8
8
|
if (!el) {
|
|
9
9
|
throw Error(`Children of <Waterfall> must expose 'ref' prop`);
|
|
@@ -7,7 +7,8 @@ import { Button } from '../../components/button';
|
|
|
7
7
|
import { iframeStyle } from './documentViewer.style';
|
|
8
8
|
import { useDerivedState, useLoading } from '../../utils';
|
|
9
9
|
import { PdfViewer } from './pdfViewer';
|
|
10
|
-
import {
|
|
10
|
+
import { Icon } from '../../components/icon';
|
|
11
|
+
import { Gallery } from '../../components/gallery';
|
|
11
12
|
import { faDownload } from '@fortawesome/free-solid-svg-icons/faDownload';
|
|
12
13
|
export const DocumentViewer = memo(({ src, filename, onError, type, extension, setDocumentTitle = true }) => {
|
|
13
14
|
const mimeType = useMemo(() => {
|
|
@@ -61,7 +61,7 @@ export const svgStyle = defineCss(({ spacing, background, divider, text, colors,
|
|
|
61
61
|
background-color: ${background.body};
|
|
62
62
|
overflow: hidden;
|
|
63
63
|
}
|
|
64
|
-
|
|
64
|
+
|
|
65
65
|
.${classes.svgContent}, .${classes.object} {
|
|
66
66
|
width: 100%;
|
|
67
67
|
height: 100%;
|
|
@@ -69,6 +69,7 @@ export const svgStyle = defineCss(({ spacing, background, divider, text, colors,
|
|
|
69
69
|
|
|
70
70
|
.${classes.object} {
|
|
71
71
|
pointer-events: none;
|
|
72
|
+
user-select: none;
|
|
72
73
|
transition: rotate .4s ${easing.easeOut};
|
|
73
74
|
}
|
|
74
75
|
`);
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { ReactZoomPanPinchProps } from 'react-zoom-pan-pinch';
|
|
2
1
|
import { Theme } from '../../components/theme';
|
|
3
2
|
import { LoadingProps } from '../../components/loading';
|
|
4
3
|
import { DocumentViewerBaseProps } from './documentViewer';
|
|
4
|
+
import { PinchableProps } from '../../components/pinchable';
|
|
5
5
|
export interface SvgViewerProps extends DocumentViewerBaseProps, Omit<LoadingProps, 'onError'> {
|
|
6
6
|
/** 是否显示下载按钮,默认为true */
|
|
7
7
|
showDownload?: boolean;
|
|
8
8
|
/** 是否可切换主题,默认为true */
|
|
9
9
|
themeSwitchable?: boolean;
|
|
10
10
|
onThemeChange?(mode: Theme['mode']): void;
|
|
11
|
-
|
|
11
|
+
pinchableProps?: PinchableProps;
|
|
12
12
|
}
|
|
13
13
|
export declare const SvgViewer: import("react").MemoExoticComponent<(props: SvgViewerProps) => import("@emotion/react/jsx-runtime").JSX.Element>;
|