@dtjoy/dt-design 1.0.2 → 1.0.3
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/esm/blockHeader/index.js +4 -4
- package/esm/blockHeader/style/index.less +1 -1
- package/esm/collapsible/index.js +1 -1
- package/esm/flex/index.js +1 -1
- package/esm/flex/utils.js +1 -1
- package/esm/index.d.ts +1 -1
- package/esm/index.js +1 -1
- package/esm/overflowList/index.d.ts +39 -0
- package/esm/overflowList/index.js +165 -0
- package/esm/overflowList/style/index.d.ts +2 -0
- package/esm/overflowList/style/index.js +2 -0
- package/esm/overflowList/style/index.less +9 -0
- package/esm/resizeObserver/index.d.ts +45 -0
- package/esm/resizeObserver/index.js +175 -0
- package/esm/splitter/SplitBar.js +1 -1
- package/esm/splitter/Splitter.js +3 -21
- package/esm/statusTag/index.js +9 -9
- package/lib/blockHeader/index.js +5 -5
- package/lib/blockHeader/style/index.less +1 -1
- package/lib/collapsible/index.js +3 -3
- package/lib/flex/index.js +2 -2
- package/lib/flex/utils.js +3 -2
- package/lib/index.d.ts +1 -1
- package/lib/index.js +8 -1
- package/lib/overflowList/index.d.ts +39 -0
- package/lib/overflowList/index.js +143 -0
- package/lib/overflowList/style/index.d.ts +2 -0
- package/lib/overflowList/style/index.js +4 -0
- package/lib/overflowList/style/index.less +9 -0
- package/lib/resizeObserver/index.d.ts +45 -0
- package/lib/resizeObserver/index.js +136 -0
- package/lib/splitter/SplitBar.js +3 -3
- package/lib/splitter/Splitter.js +4 -20
- package/lib/statusTag/index.js +9 -9
- package/package.json +133 -142
package/esm/statusTag/index.js
CHANGED
|
@@ -9,7 +9,7 @@ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e
|
|
|
9
9
|
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
10
10
|
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
11
11
|
import React, { useMemo } from 'react';
|
|
12
|
-
import {
|
|
12
|
+
import { LoadingOutlined } from '@ant-design/icons';
|
|
13
13
|
import { Spin } from 'antd';
|
|
14
14
|
import { globalConfig } from 'antd/es/config-provider';
|
|
15
15
|
import classNames from 'classnames';
|
|
@@ -17,19 +17,19 @@ import "./style";
|
|
|
17
17
|
export var PRESET_COLOR_TYPES = Object.freeze(['blue', 'yellow', 'green', 'gray', 'red', 'purple', 'cyan', 'pink']);
|
|
18
18
|
export var STATUS_TAG_TYPES = Object.freeze(['default', 'outline', 'fill']);
|
|
19
19
|
var DEFAULT_OPACITY = 0.15;
|
|
20
|
-
/**
|
|
21
|
-
* 校验是否为预设颜色
|
|
22
|
-
* @param color 待校验颜色值
|
|
20
|
+
/**
|
|
21
|
+
* 校验是否为预设颜色
|
|
22
|
+
* @param color 待校验颜色值
|
|
23
23
|
*/
|
|
24
24
|
function isPresetColor(color) {
|
|
25
25
|
if (!color || typeof color !== 'string') return false;
|
|
26
26
|
return PRESET_COLOR_TYPES.includes(color);
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
/**
|
|
30
|
-
* 计算颜色的透明版本
|
|
31
|
-
* @param color 原始颜色(支持hex/rgb/rgba)
|
|
32
|
-
* @param opacity 透明度(默认0.15)
|
|
29
|
+
/**
|
|
30
|
+
* 计算颜色的透明版本
|
|
31
|
+
* @param color 原始颜色(支持hex/rgb/rgba)
|
|
32
|
+
* @param opacity 透明度(默认0.15)
|
|
33
33
|
*/
|
|
34
34
|
function calculateTransparentColor(color) {
|
|
35
35
|
var opacity = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_OPACITY;
|
|
@@ -95,7 +95,7 @@ var StatusTag = /*#__PURE__*/React.memo(function (props) {
|
|
|
95
95
|
};
|
|
96
96
|
}, [color, icon, prefixCls]);
|
|
97
97
|
var loadingIndicator = useMemo(function () {
|
|
98
|
-
return /*#__PURE__*/React.createElement(
|
|
98
|
+
return /*#__PURE__*/React.createElement(LoadingOutlined, {
|
|
99
99
|
className: "".concat(prefixCls, "__icon ").concat(prefixCls, "__icon--loading")
|
|
100
100
|
});
|
|
101
101
|
}, [prefixCls]);
|
package/lib/blockHeader/index.js
CHANGED
|
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
var _react = _interopRequireWildcard(require("react"));
|
|
8
|
-
var
|
|
8
|
+
var _icons = require("@ant-design/icons");
|
|
9
9
|
var _antd = require("antd");
|
|
10
10
|
var _configProvider = require("antd/es/config-provider");
|
|
11
11
|
var _classnames = _interopRequireDefault(require("classnames"));
|
|
@@ -82,8 +82,8 @@ const BlockHeader = function (props) {
|
|
|
82
82
|
}, title), tooltipProps?.title ? /*#__PURE__*/_react.default.createElement("div", {
|
|
83
83
|
className: `title__tooltip`
|
|
84
84
|
}, /*#__PURE__*/_react.default.createElement(_antd.Tooltip, _extends({}, tooltipProps, {
|
|
85
|
-
className: (0, _classnames.default)(tooltipProps?.className
|
|
86
|
-
}), /*#__PURE__*/_react.default.createElement(
|
|
85
|
+
className: (0, _classnames.default)(tooltipProps?.className)
|
|
86
|
+
}), /*#__PURE__*/_react.default.createElement(_icons.QuestionCircleOutlined, null))) : null, description ? /*#__PURE__*/_react.default.createElement("div", {
|
|
87
87
|
className: `title__description`
|
|
88
88
|
}, description) : null), addonAfter && /*#__PURE__*/_react.default.createElement("div", {
|
|
89
89
|
className: `title__addon-after`
|
|
@@ -91,8 +91,8 @@ const BlockHeader = function (props) {
|
|
|
91
91
|
className: `title__collapse`
|
|
92
92
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
93
93
|
className: "collapse__text"
|
|
94
|
-
}, currentExpand ? '收起' : '展开'), /*#__PURE__*/_react.default.createElement(
|
|
95
|
-
className: (0, _classnames.default)('collapse__icon',
|
|
94
|
+
}, currentExpand ? '收起' : '展开'), /*#__PURE__*/_react.default.createElement(_icons.UpOutlined, {
|
|
95
|
+
className: (0, _classnames.default)('collapse__icon', {
|
|
96
96
|
'collapse__icon--up': currentExpand,
|
|
97
97
|
'collapse__icon--down': !currentExpand
|
|
98
98
|
})
|
package/lib/collapsible/index.js
CHANGED
|
@@ -7,7 +7,7 @@ exports.default = void 0;
|
|
|
7
7
|
var _react = _interopRequireDefault(require("react"));
|
|
8
8
|
var _configProvider = require("antd/es/config-provider");
|
|
9
9
|
var _classnames = _interopRequireDefault(require("classnames"));
|
|
10
|
-
var
|
|
10
|
+
var _lodashEs = require("lodash-es");
|
|
11
11
|
require("./style");
|
|
12
12
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
13
|
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
@@ -126,8 +126,8 @@ class Collapsible extends _react.default.Component {
|
|
|
126
126
|
return newState;
|
|
127
127
|
}
|
|
128
128
|
componentDidUpdate(prevProps, prevState) {
|
|
129
|
-
const changedPropKeys = Object.keys((0,
|
|
130
|
-
const changedStateKeys = Object.keys((0,
|
|
129
|
+
const changedPropKeys = Object.keys((0, _lodashEs.pick)(this.props, ['reCalcKey'])).filter(key => !(0, _lodashEs.isEqual)(this.props[key], prevProps[key]));
|
|
130
|
+
const changedStateKeys = Object.keys((0, _lodashEs.pick)(this.state, ['domInRenderTree'])).filter(key => !(0, _lodashEs.isEqual)(this.state[key], prevState[key]));
|
|
131
131
|
if (changedPropKeys.includes('reCalcKey') && this.domRef.current) {
|
|
132
132
|
this.foundation.updateDOMHeight(this.domRef.current.scrollHeight);
|
|
133
133
|
}
|
package/lib/flex/index.js
CHANGED
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
var _react = _interopRequireDefault(require("react"));
|
|
8
8
|
var _configProvider = require("antd/es/config-provider");
|
|
9
|
-
var
|
|
9
|
+
var _classnames = _interopRequireDefault(require("classnames"));
|
|
10
10
|
var _lodashEs = require("lodash-es");
|
|
11
11
|
require("./style");
|
|
12
12
|
var _gapSize = require("../_util/gapSize");
|
|
@@ -34,7 +34,7 @@ const Flex = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
|
|
|
34
34
|
} = _react.default.useContext(_configProvider.ConfigContext);
|
|
35
35
|
const prefixCls = customizePrefixCls || (0, _configProvider.globalConfig)().getPrefixCls('flex');
|
|
36
36
|
const [mergedVertical] = (0, _hooks.useOrientation)(orientation, vertical);
|
|
37
|
-
const mergedCls = (0,
|
|
37
|
+
const mergedCls = (0, _classnames.default)(className, rootClassName, prefixCls, (0, _utils.default)(prefixCls, props), {
|
|
38
38
|
[`${prefixCls}-rtl`]: ctxDirection === 'rtl',
|
|
39
39
|
[`${prefixCls}-gap-${gap}`]: (0, _gapSize.isPresetSize)(gap),
|
|
40
40
|
[`${prefixCls}-vertical`]: mergedVertical === 'vertical'
|
package/lib/flex/utils.js
CHANGED
|
@@ -4,7 +4,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.justifyContentValues = exports.flexWrapValues = exports.default = exports.alignItemsValues = void 0;
|
|
7
|
-
var
|
|
7
|
+
var _classnames = _interopRequireDefault(require("classnames"));
|
|
8
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
8
9
|
const flexWrapValues = exports.flexWrapValues = ['wrap', 'nowrap', 'wrap-reverse'];
|
|
9
10
|
const justifyContentValues = exports.justifyContentValues = ['flex-start', 'flex-end', 'start', 'end', 'center', 'space-between', 'space-around', 'space-evenly', 'stretch', 'normal', 'left', 'right'];
|
|
10
11
|
const alignItemsValues = exports.alignItemsValues = ['center', 'start', 'end', 'flex-start', 'flex-end', 'self-start', 'self-end', 'baseline', 'normal', 'stretch'];
|
|
@@ -30,7 +31,7 @@ const genClsJustify = (prefixCls, props) => {
|
|
|
30
31
|
return justifyCls;
|
|
31
32
|
};
|
|
32
33
|
const createFlexClassNames = (prefixCls, props) => {
|
|
33
|
-
return (0,
|
|
34
|
+
return (0, _classnames.default)({
|
|
34
35
|
...genClsWrap(prefixCls, props),
|
|
35
36
|
...genClsAlign(prefixCls, props),
|
|
36
37
|
...genClsJustify(prefixCls, props)
|
package/lib/index.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import '@dtinsight/react-icons/dist/index.css';
|
|
2
1
|
export { default as BlockHeader } from './blockHeader';
|
|
3
2
|
export type { ButtonProps } from './button';
|
|
4
3
|
export { default as Button } from './button';
|
|
5
4
|
export { default as Flex } from './flex';
|
|
6
5
|
export type { FlexProps } from './flex/interface';
|
|
7
6
|
export { default as CollapsibleActionItems } from './collapsibleActionItems';
|
|
7
|
+
export { default as OverflowList } from './overflowList';
|
|
8
8
|
export { default as Resize } from './resize';
|
|
9
9
|
export { default as Splitter } from './splitter';
|
|
10
10
|
export * from './splitter';
|
package/lib/index.js
CHANGED
|
@@ -8,6 +8,7 @@ var _exportNames = {
|
|
|
8
8
|
Button: true,
|
|
9
9
|
Flex: true,
|
|
10
10
|
CollapsibleActionItems: true,
|
|
11
|
+
OverflowList: true,
|
|
11
12
|
Resize: true,
|
|
12
13
|
Splitter: true,
|
|
13
14
|
Collapsible: true,
|
|
@@ -43,6 +44,12 @@ Object.defineProperty(exports, "Flex", {
|
|
|
43
44
|
return _flex.default;
|
|
44
45
|
}
|
|
45
46
|
});
|
|
47
|
+
Object.defineProperty(exports, "OverflowList", {
|
|
48
|
+
enumerable: true,
|
|
49
|
+
get: function () {
|
|
50
|
+
return _overflowList.default;
|
|
51
|
+
}
|
|
52
|
+
});
|
|
46
53
|
Object.defineProperty(exports, "Resize", {
|
|
47
54
|
enumerable: true,
|
|
48
55
|
get: function () {
|
|
@@ -61,11 +68,11 @@ Object.defineProperty(exports, "StatusTag", {
|
|
|
61
68
|
return _statusTag.default;
|
|
62
69
|
}
|
|
63
70
|
});
|
|
64
|
-
require("@dtinsight/react-icons/dist/index.css");
|
|
65
71
|
var _blockHeader = _interopRequireDefault(require("./blockHeader"));
|
|
66
72
|
var _button = _interopRequireDefault(require("./button"));
|
|
67
73
|
var _flex = _interopRequireDefault(require("./flex"));
|
|
68
74
|
var _collapsibleActionItems = _interopRequireDefault(require("./collapsibleActionItems"));
|
|
75
|
+
var _overflowList = _interopRequireDefault(require("./overflowList"));
|
|
69
76
|
var _resize = _interopRequireDefault(require("./resize"));
|
|
70
77
|
var _splitter = _interopRequireWildcard(require("./splitter"));
|
|
71
78
|
Object.keys(_splitter).forEach(function (key) {
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import React, { Component, ReactElement, ReactNode } from 'react';
|
|
2
|
+
import './style';
|
|
3
|
+
export declare type OverflowItem<T = Record<string, any>> = T;
|
|
4
|
+
export interface OverflowListProps<T = Record<string, any>> {
|
|
5
|
+
items: OverflowItem<T>[];
|
|
6
|
+
visibleItemRenderer: (item: OverflowItem<T>, index: number) => ReactElement;
|
|
7
|
+
overflowRenderer: (overflowItems: OverflowItem<T>[]) => ReactNode | ReactNode[];
|
|
8
|
+
className?: string;
|
|
9
|
+
style?: React.CSSProperties;
|
|
10
|
+
renderMode?: 'collapse' | 'scroll';
|
|
11
|
+
collapseFrom?: 'start' | 'end';
|
|
12
|
+
minVisibleItems?: number;
|
|
13
|
+
onOverflow?: (overflowItems: OverflowItem<T>[]) => void;
|
|
14
|
+
}
|
|
15
|
+
interface OverflowListState {
|
|
16
|
+
visibleCount: number;
|
|
17
|
+
isMeasuring: boolean;
|
|
18
|
+
}
|
|
19
|
+
declare class OverflowList<T extends object> extends Component<OverflowListProps<T>, OverflowListState> {
|
|
20
|
+
static defaultProps: {
|
|
21
|
+
items: never[];
|
|
22
|
+
collapseFrom: string;
|
|
23
|
+
minVisibleItems: number;
|
|
24
|
+
renderMode: string;
|
|
25
|
+
};
|
|
26
|
+
static displayName: string;
|
|
27
|
+
private containerRef;
|
|
28
|
+
private overflowRef;
|
|
29
|
+
private itemRefs;
|
|
30
|
+
private prefixCls;
|
|
31
|
+
constructor(props: OverflowListProps<T>);
|
|
32
|
+
componentDidMount(): void;
|
|
33
|
+
componentUpdate(prevProps: OverflowListProps<T>): void;
|
|
34
|
+
private measureAndAdjust;
|
|
35
|
+
private getOverflowItems;
|
|
36
|
+
renderCollapse(): React.JSX.Element;
|
|
37
|
+
render(): React.JSX.Element;
|
|
38
|
+
}
|
|
39
|
+
export default OverflowList;
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
8
|
+
var _configProvider = require("antd/es/config-provider");
|
|
9
|
+
var _classnames = _interopRequireDefault(require("classnames"));
|
|
10
|
+
require("./style");
|
|
11
|
+
var _resizeObserver = _interopRequireDefault(require("../resizeObserver"));
|
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
14
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
15
|
+
class OverflowList extends _react.Component {
|
|
16
|
+
static defaultProps = {
|
|
17
|
+
items: [],
|
|
18
|
+
collapseFrom: 'end',
|
|
19
|
+
minVisibleItems: 0,
|
|
20
|
+
renderMode: 'collapse'
|
|
21
|
+
};
|
|
22
|
+
static displayName;
|
|
23
|
+
containerRef = /*#__PURE__*/(0, _react.createRef)();
|
|
24
|
+
overflowRef = /*#__PURE__*/(0, _react.createRef)();
|
|
25
|
+
itemRefs = new Map();
|
|
26
|
+
prefixCls = 'overflow-list';
|
|
27
|
+
constructor(props) {
|
|
28
|
+
super(props);
|
|
29
|
+
this.prefixCls = (0, _configProvider.globalConfig)().getPrefixCls(this.prefixCls);
|
|
30
|
+
this.state = {
|
|
31
|
+
visibleCount: props.items.length,
|
|
32
|
+
isMeasuring: props.renderMode === 'collapse'
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
componentDidMount() {
|
|
36
|
+
if (this.props.renderMode === 'collapse') {
|
|
37
|
+
this.measureAndAdjust();
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
componentUpdate(prevProps) {
|
|
41
|
+
if (prevProps.items !== this.props.items || prevProps.renderMode !== this.props.renderMode) {
|
|
42
|
+
this.setState({
|
|
43
|
+
isMeasuring: true,
|
|
44
|
+
visibleCount: this.props.items.length
|
|
45
|
+
}, this.measureAndAdjust);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
measureAndAdjust = () => {
|
|
49
|
+
const container = this.containerRef.current;
|
|
50
|
+
if (!container || this.props.renderMode !== 'collapse') return;
|
|
51
|
+
const {
|
|
52
|
+
items,
|
|
53
|
+
minVisibleItems,
|
|
54
|
+
collapseFrom,
|
|
55
|
+
onOverflow
|
|
56
|
+
} = this.props;
|
|
57
|
+
const containerWidth = container.offsetWidth;
|
|
58
|
+
const overflowWidth = this.overflowRef.current?.offsetWidth ?? 0;
|
|
59
|
+
let totalWidth = 0;
|
|
60
|
+
let newVisibleCount = 0;
|
|
61
|
+
for (let i = 0; i < items.length; i++) {
|
|
62
|
+
const index = collapseFrom === 'end' ? i : items.length - 1 - i;
|
|
63
|
+
const itemWidth = this.itemRefs.get(index)?.getBoundingClientRect().width ?? 0;
|
|
64
|
+
const isLast = i === items.length - 1;
|
|
65
|
+
const limit = isLast ? containerWidth : containerWidth - overflowWidth;
|
|
66
|
+
if (totalWidth + itemWidth <= limit || newVisibleCount < (minVisibleItems || 0)) {
|
|
67
|
+
totalWidth += itemWidth;
|
|
68
|
+
newVisibleCount++;
|
|
69
|
+
} else {
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
this.setState({
|
|
74
|
+
visibleCount: newVisibleCount,
|
|
75
|
+
isMeasuring: false
|
|
76
|
+
}, () => {
|
|
77
|
+
if (onOverflow) {
|
|
78
|
+
onOverflow(this.getOverflowItems(newVisibleCount));
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
};
|
|
82
|
+
getOverflowItems = count => {
|
|
83
|
+
const {
|
|
84
|
+
items,
|
|
85
|
+
collapseFrom
|
|
86
|
+
} = this.props;
|
|
87
|
+
return collapseFrom === 'end' ? items.slice(count) : items.slice(0, items.length - count);
|
|
88
|
+
};
|
|
89
|
+
renderCollapse() {
|
|
90
|
+
const {
|
|
91
|
+
items,
|
|
92
|
+
visibleItemRenderer,
|
|
93
|
+
overflowRenderer,
|
|
94
|
+
collapseFrom,
|
|
95
|
+
style,
|
|
96
|
+
className
|
|
97
|
+
} = this.props;
|
|
98
|
+
const {
|
|
99
|
+
visibleCount,
|
|
100
|
+
isMeasuring
|
|
101
|
+
} = this.state;
|
|
102
|
+
const overflowItems = this.getOverflowItems(visibleCount);
|
|
103
|
+
const hasOverflow = overflowItems.length > 0;
|
|
104
|
+
const containerStyle = {
|
|
105
|
+
maxWidth: '100%',
|
|
106
|
+
visibility: 'visible',
|
|
107
|
+
...style
|
|
108
|
+
};
|
|
109
|
+
const renderItems = () => {
|
|
110
|
+
return items.map((item, i) => {
|
|
111
|
+
const isVisible = isMeasuring || (collapseFrom === 'end' ? i < visibleCount : i >= items.length - visibleCount);
|
|
112
|
+
if (!isVisible) return null;
|
|
113
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
|
114
|
+
key: i,
|
|
115
|
+
ref: el => {
|
|
116
|
+
if (el) this.itemRefs.set(i, el);else this.itemRefs.delete(i);
|
|
117
|
+
},
|
|
118
|
+
className: `${this.prefixCls}-item`
|
|
119
|
+
}, visibleItemRenderer(item, i));
|
|
120
|
+
});
|
|
121
|
+
};
|
|
122
|
+
const overflowNode = (hasOverflow || isMeasuring) && /*#__PURE__*/_react.default.createElement("div", {
|
|
123
|
+
ref: this.overflowRef,
|
|
124
|
+
className: `${this.prefixCls}-overflow`
|
|
125
|
+
}, overflowRenderer(isMeasuring ? items : overflowItems));
|
|
126
|
+
return /*#__PURE__*/_react.default.createElement(_resizeObserver.default, {
|
|
127
|
+
onResize: () => this.setState({
|
|
128
|
+
isMeasuring: true
|
|
129
|
+
}, this.measureAndAdjust)
|
|
130
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
131
|
+
ref: this.containerRef,
|
|
132
|
+
className: (0, _classnames.default)(this.prefixCls, className),
|
|
133
|
+
style: containerStyle
|
|
134
|
+
}, collapseFrom === 'start' && overflowNode, renderItems(), collapseFrom === 'end' && overflowNode));
|
|
135
|
+
}
|
|
136
|
+
render() {
|
|
137
|
+
return this.renderCollapse();
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
if (process.env.NODE_ENV === 'development') {
|
|
141
|
+
OverflowList.displayName = 'OverflowList';
|
|
142
|
+
}
|
|
143
|
+
var _default = exports.default = OverflowList;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface BaseProps {
|
|
3
|
+
className?: string;
|
|
4
|
+
style?: React.CSSProperties;
|
|
5
|
+
[key: string]: any;
|
|
6
|
+
}
|
|
7
|
+
export interface ResizeEntry {
|
|
8
|
+
contentRect: DOMRectReadOnly;
|
|
9
|
+
target: Element;
|
|
10
|
+
}
|
|
11
|
+
export interface ReactResizeObserverProps extends BaseProps {
|
|
12
|
+
onResize?: (entries: ResizeEntry[]) => void;
|
|
13
|
+
observeParent?: boolean;
|
|
14
|
+
observerProperty?: ObserverProperty;
|
|
15
|
+
delayTick?: number;
|
|
16
|
+
children: React.ReactElement;
|
|
17
|
+
}
|
|
18
|
+
export declare enum ObserverProperty {
|
|
19
|
+
Width = "width",
|
|
20
|
+
Height = "height",
|
|
21
|
+
All = "all"
|
|
22
|
+
}
|
|
23
|
+
export default class ReactResizeObserver extends React.Component<ReactResizeObserverProps> {
|
|
24
|
+
static defaultProps: {
|
|
25
|
+
onResize: () => void;
|
|
26
|
+
observeParent: boolean;
|
|
27
|
+
observerProperty: ObserverProperty;
|
|
28
|
+
delayTick: number;
|
|
29
|
+
};
|
|
30
|
+
observer: ResizeObserver | null;
|
|
31
|
+
childNode: HTMLElement | null;
|
|
32
|
+
element: Element | null;
|
|
33
|
+
_parentNode: HTMLElement | null;
|
|
34
|
+
formerPropertyValue: Map<Element, number>;
|
|
35
|
+
constructor(props: ReactResizeObserverProps);
|
|
36
|
+
getElement: () => Element | null;
|
|
37
|
+
handleResizeEventTriggered: (entries: ResizeEntry[]) => void;
|
|
38
|
+
observeElement: (force?: boolean) => void;
|
|
39
|
+
mergeRef: (ref: React.Ref<any>, node: HTMLElement) => void;
|
|
40
|
+
componentDidMount(): void;
|
|
41
|
+
componentDidUpdate(prevProps: ReactResizeObserverProps): void;
|
|
42
|
+
componentWillUnmount(): void;
|
|
43
|
+
render(): React.ReactElement;
|
|
44
|
+
}
|
|
45
|
+
export {};
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = exports.ObserverProperty = void 0;
|
|
7
|
+
var _react = _interopRequireDefault(require("react"));
|
|
8
|
+
var _reactDom = require("react-dom");
|
|
9
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
10
|
+
let ObserverProperty = exports.ObserverProperty = /*#__PURE__*/function (ObserverProperty) {
|
|
11
|
+
ObserverProperty["Width"] = "width";
|
|
12
|
+
ObserverProperty["Height"] = "height";
|
|
13
|
+
ObserverProperty["All"] = "all";
|
|
14
|
+
return ObserverProperty;
|
|
15
|
+
}({});
|
|
16
|
+
class ReactResizeObserver extends _react.default.Component {
|
|
17
|
+
static defaultProps = {
|
|
18
|
+
onResize: () => {},
|
|
19
|
+
observeParent: false,
|
|
20
|
+
observerProperty: ObserverProperty.All,
|
|
21
|
+
delayTick: 0
|
|
22
|
+
};
|
|
23
|
+
observer = null;
|
|
24
|
+
childNode = null;
|
|
25
|
+
element = null;
|
|
26
|
+
_parentNode = null;
|
|
27
|
+
formerPropertyValue = new Map();
|
|
28
|
+
constructor(props) {
|
|
29
|
+
super(props);
|
|
30
|
+
if (typeof window !== 'undefined' && window.ResizeObserver) {
|
|
31
|
+
this.observer = new window.ResizeObserver(this.handleResizeEventTriggered);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
getElement = () => {
|
|
35
|
+
try {
|
|
36
|
+
// eslint-disable-next-line react/no-find-dom-node
|
|
37
|
+
return (0, _reactDom.findDOMNode)(this.childNode || this);
|
|
38
|
+
} catch (error) {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
handleResizeEventTriggered = entries => {
|
|
43
|
+
const {
|
|
44
|
+
observerProperty,
|
|
45
|
+
onResize
|
|
46
|
+
} = this.props;
|
|
47
|
+
if (observerProperty === ObserverProperty.All) {
|
|
48
|
+
onResize?.(entries);
|
|
49
|
+
} else {
|
|
50
|
+
const finalEntries = [];
|
|
51
|
+
for (const entry of entries) {
|
|
52
|
+
const currentValue = entry.contentRect[observerProperty];
|
|
53
|
+
if (this.formerPropertyValue.has(entry.target)) {
|
|
54
|
+
if (currentValue !== this.formerPropertyValue.get(entry.target)) {
|
|
55
|
+
this.formerPropertyValue.set(entry.target, currentValue);
|
|
56
|
+
finalEntries.push(entry);
|
|
57
|
+
}
|
|
58
|
+
} else {
|
|
59
|
+
this.formerPropertyValue.set(entry.target, currentValue);
|
|
60
|
+
finalEntries.push(entry);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (finalEntries.length > 0) {
|
|
64
|
+
onResize?.(finalEntries);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
observeElement = (force = false) => {
|
|
69
|
+
if (!this.observer) return;
|
|
70
|
+
const element = this.getElement();
|
|
71
|
+
if (!(element && element instanceof Element)) {
|
|
72
|
+
this.observer.disconnect();
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
if (element === this.element && !force) {
|
|
76
|
+
return;
|
|
77
|
+
} else {
|
|
78
|
+
this.observer.disconnect();
|
|
79
|
+
this.element = element;
|
|
80
|
+
}
|
|
81
|
+
this.observer.observe(element);
|
|
82
|
+
if (this.props.observeParent && element.parentNode) {
|
|
83
|
+
const parentNode = element.parentNode;
|
|
84
|
+
if (parentNode.ownerDocument && parentNode.ownerDocument.defaultView && parentNode instanceof parentNode.ownerDocument.defaultView.HTMLElement) {
|
|
85
|
+
this._parentNode = parentNode;
|
|
86
|
+
this.observer.observe(parentNode);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
mergeRef = (ref, node) => {
|
|
91
|
+
this.childNode = node;
|
|
92
|
+
// 转发外部ref
|
|
93
|
+
if (typeof ref === 'function') {
|
|
94
|
+
ref(node);
|
|
95
|
+
} else if (typeof ref === 'object' && ref && 'current' in ref) {
|
|
96
|
+
ref.current = node;
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
componentDidMount() {
|
|
100
|
+
this.observeElement?.();
|
|
101
|
+
}
|
|
102
|
+
componentDidUpdate(prevProps) {
|
|
103
|
+
if (this.props.observeParent !== prevProps.observeParent) {
|
|
104
|
+
this.observeElement?.(true);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
componentWillUnmount() {
|
|
108
|
+
if (this.observer) {
|
|
109
|
+
this.observer.disconnect();
|
|
110
|
+
this.observer = null;
|
|
111
|
+
}
|
|
112
|
+
this.element = null;
|
|
113
|
+
this._parentNode = null;
|
|
114
|
+
this.formerPropertyValue.clear();
|
|
115
|
+
}
|
|
116
|
+
render() {
|
|
117
|
+
const {
|
|
118
|
+
children,
|
|
119
|
+
className,
|
|
120
|
+
style,
|
|
121
|
+
...rest
|
|
122
|
+
} = this.props;
|
|
123
|
+
const child = _react.default.Children.only(children);
|
|
124
|
+
const childRef = child.ref;
|
|
125
|
+
return /*#__PURE__*/_react.default.cloneElement(child, {
|
|
126
|
+
...rest,
|
|
127
|
+
className: className ? `${child.props.className || ''} ${className}` : child.props.className,
|
|
128
|
+
style: {
|
|
129
|
+
...child.props.style,
|
|
130
|
+
...style
|
|
131
|
+
},
|
|
132
|
+
ref: node => this.mergeRef(childRef, node)
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
exports.default = ReactResizeObserver;
|
package/lib/splitter/SplitBar.js
CHANGED
|
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
var _react = _interopRequireWildcard(require("react"));
|
|
8
|
-
var
|
|
8
|
+
var _icons = require("@ant-design/icons");
|
|
9
9
|
var _classnames = _interopRequireDefault(require("classnames"));
|
|
10
10
|
var _useEvent = _interopRequireDefault(require("rc-util/lib/hooks/useEvent"));
|
|
11
11
|
var _useLayoutEffect = _interopRequireDefault(require("rc-util/lib/hooks/useLayoutEffect"));
|
|
@@ -144,8 +144,8 @@ const SplitBar = props => {
|
|
|
144
144
|
const transformStyle = {
|
|
145
145
|
[`--${splitBarPrefixCls}-preview-offset`]: `${constrainedOffset}px`
|
|
146
146
|
};
|
|
147
|
-
const StartIcon = vertical ?
|
|
148
|
-
const EndIcon = vertical ?
|
|
147
|
+
const StartIcon = vertical ? _icons.UpOutlined : _icons.LeftOutlined;
|
|
148
|
+
const EndIcon = vertical ? _icons.DownOutlined : _icons.RightOutlined;
|
|
149
149
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
150
150
|
className: splitBarPrefixCls,
|
|
151
151
|
role: "separator",
|
package/lib/splitter/Splitter.js
CHANGED
|
@@ -8,8 +8,8 @@ var _react = _interopRequireWildcard(require("react"));
|
|
|
8
8
|
var _configProvider = require("antd/es/config-provider");
|
|
9
9
|
var _classnames = _interopRequireDefault(require("classnames"));
|
|
10
10
|
var _rcResizeObserver = _interopRequireDefault(require("rc-resize-observer"));
|
|
11
|
-
var _useEvent = _interopRequireDefault(require("rc-util/
|
|
12
|
-
var _warning = _interopRequireDefault(require("rc-util/
|
|
11
|
+
var _useEvent = _interopRequireDefault(require("rc-util/es/hooks/useEvent"));
|
|
12
|
+
var _warning = _interopRequireDefault(require("rc-util/es/warning"));
|
|
13
13
|
var _useItems = _interopRequireDefault(require("./hooks/useItems"));
|
|
14
14
|
var _useResizable = _interopRequireDefault(require("./hooks/useResizable"));
|
|
15
15
|
var _useResize = _interopRequireDefault(require("./hooks/useResize"));
|
|
@@ -20,8 +20,7 @@ require("./style/index.less");
|
|
|
20
20
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
21
21
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
22
22
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
23
|
-
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
24
|
-
// 替换 devUseWarning 为 v4 原生 warning
|
|
23
|
+
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
25
24
|
const Splitter = props => {
|
|
26
25
|
const {
|
|
27
26
|
prefixCls: customizePrefixCls,
|
|
@@ -110,18 +109,9 @@ const Splitter = props => {
|
|
|
110
109
|
onResize?.(nextSizes);
|
|
111
110
|
onResizeEnd?.(nextSizes);
|
|
112
111
|
});
|
|
113
|
-
|
|
114
|
-
// ======================== Styles ========================
|
|
115
|
-
// 构建 v4 风格类名(移除 cssinjs 相关 hash 和变量类)
|
|
116
112
|
const containerClassName = (0, _classnames.default)(prefixCls, className, `${prefixCls}-${layout}`, {
|
|
117
113
|
[`${prefixCls}-rtl`]: isRTL
|
|
118
|
-
}, rootClassName
|
|
119
|
-
// 移除 v5 cssinjs 类名
|
|
120
|
-
// contextClassName,
|
|
121
|
-
// cssVarCls,
|
|
122
|
-
// rootCls,
|
|
123
|
-
// hashId
|
|
124
|
-
);
|
|
114
|
+
}, rootClassName);
|
|
125
115
|
|
|
126
116
|
// ======================== Render ========================
|
|
127
117
|
const maskCls = `${prefixCls}-mask`;
|
|
@@ -134,13 +124,9 @@ const Splitter = props => {
|
|
|
134
124
|
}
|
|
135
125
|
return mergedSizes;
|
|
136
126
|
}, [itemPtgSizes]);
|
|
137
|
-
|
|
138
|
-
// 合并样式(移除 v5 上下文样式)
|
|
139
127
|
const mergedStyle = {
|
|
140
128
|
...style
|
|
141
129
|
};
|
|
142
|
-
|
|
143
|
-
// 移除 wrapCSSVar 包装(v4 无需 cssinjs 变量注入)
|
|
144
130
|
return /*#__PURE__*/_react.default.createElement(_rcResizeObserver.default, {
|
|
145
131
|
onResize: onContainerResize
|
|
146
132
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
@@ -152,8 +138,6 @@ const Splitter = props => {
|
|
|
152
138
|
prefixCls: prefixCls,
|
|
153
139
|
size: panelSizes[idx]
|
|
154
140
|
}));
|
|
155
|
-
|
|
156
|
-
// Split Bar
|
|
157
141
|
let splitBar = null;
|
|
158
142
|
const resizableInfo = resizableInfos[idx];
|
|
159
143
|
if (resizableInfo) {
|