@dtjoy/dt-design 1.0.1 → 1.0.2
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/_util/gapSize.d.ts +3 -0
- package/esm/_util/gapSize.js +10 -0
- package/esm/_util/hooks/index.d.ts +1 -0
- package/esm/_util/hooks/index.js +1 -0
- package/esm/_util/hooks/useOrientation.d.ts +2 -0
- package/esm/_util/hooks/useOrientation.js +19 -0
- package/esm/_util/isNonNullable.d.ts +2 -0
- package/esm/_util/isNonNullable.js +4 -0
- package/esm/_util/type.d.ts +2 -1
- package/esm/blockHeader/index.js +12 -11
- package/esm/blockHeader/style/index.d.ts +1 -1
- package/esm/blockHeader/style/index.js +1 -1
- package/esm/blockHeader/style/index.less +8 -7
- package/esm/button/style/index.less +60 -46
- package/esm/button/style/mixin.less +47 -0
- package/esm/collapsible/index.d.ts +97 -0
- package/esm/collapsible/index.js +234 -0
- package/esm/collapsible/style/index.d.ts +1 -0
- package/esm/collapsible/style/index.js +1 -0
- package/esm/collapsible/style/index.less +24 -0
- package/esm/collapsibleActionItems/index.d.ts +24 -0
- package/esm/collapsibleActionItems/index.js +74 -0
- package/esm/collapsibleActionItems/style/index.d.ts +2 -0
- package/esm/collapsibleActionItems/style/index.js +2 -0
- package/esm/collapsibleActionItems/style/index.less +7 -0
- package/esm/flex/index.d.ts +7 -0
- package/esm/flex/index.js +62 -0
- package/esm/flex/interface.d.ts +16 -0
- package/esm/flex/interface.js +1 -0
- package/esm/flex/style/index.d.ts +2 -0
- package/esm/flex/style/index.js +2 -0
- package/esm/flex/style/index.less +77 -0
- package/esm/flex/utils.d.ts +7 -0
- package/esm/flex/utils.js +33 -0
- package/esm/index.d.ts +9 -0
- package/esm/index.js +7 -5
- package/esm/resize/index.d.ts +8 -0
- package/esm/resize/index.js +29 -0
- package/esm/splitter/Panel.d.ts +7 -0
- package/esm/splitter/Panel.js +38 -0
- package/esm/splitter/SplitBar.d.ts +24 -0
- package/esm/splitter/SplitBar.js +185 -0
- package/esm/splitter/Splitter.d.ts +5 -0
- package/esm/splitter/Splitter.js +215 -0
- package/esm/splitter/hooks/sizeUtil.d.ts +3 -0
- package/esm/splitter/hooks/sizeUtil.js +63 -0
- package/esm/splitter/hooks/useItems.d.ts +14 -0
- package/esm/splitter/hooks/useItems.js +44 -0
- package/esm/splitter/hooks/useResizable.d.ts +10 -0
- package/esm/splitter/hooks/useResizable.js +73 -0
- package/esm/splitter/hooks/useResize.d.ts +6 -0
- package/esm/splitter/hooks/useResize.js +158 -0
- package/esm/splitter/hooks/useSizes.d.ts +4 -0
- package/esm/splitter/hooks/useSizes.js +80 -0
- package/esm/splitter/index.d.ts +8 -0
- package/esm/splitter/index.js +5 -0
- package/esm/splitter/interface.d.ts +68 -0
- package/esm/splitter/interface.js +1 -0
- package/esm/splitter/style/index.d.ts +2 -0
- package/esm/splitter/style/index.js +2 -0
- package/esm/splitter/style/index.less +312 -0
- package/esm/statusTag/index.d.ts +28 -0
- package/esm/statusTag/index.js +122 -0
- package/esm/statusTag/style/index.d.ts +2 -0
- package/esm/statusTag/style/index.js +2 -0
- package/esm/statusTag/style/index.less +70 -0
- package/esm/statusTag/style/mixin.less +39 -0
- package/esm/style/mixins/index.less +0 -0
- package/esm/style/themes/index.less +2 -1
- package/esm/style/themes/variable.less +1 -0
- package/lib/_util/gapSize.d.ts +3 -0
- package/lib/_util/gapSize.js +17 -0
- package/lib/_util/hooks/index.d.ts +1 -0
- package/lib/_util/hooks/index.js +16 -0
- package/lib/_util/hooks/useOrientation.d.ts +2 -0
- package/lib/_util/hooks/useOrientation.js +26 -0
- package/lib/_util/isNonNullable.d.ts +2 -0
- package/lib/_util/isNonNullable.js +10 -0
- package/lib/_util/type.d.ts +2 -1
- package/lib/blockHeader/index.js +12 -12
- package/lib/blockHeader/style/index.d.ts +1 -1
- package/lib/blockHeader/style/index.js +1 -1
- package/lib/blockHeader/style/index.less +8 -7
- package/lib/button/style/index.less +60 -46
- package/lib/button/style/mixin.less +47 -0
- package/lib/collapsible/index.d.ts +97 -0
- package/lib/collapsible/index.js +199 -0
- package/lib/collapsible/style/index.d.ts +1 -0
- package/lib/collapsible/style/index.js +3 -0
- package/lib/collapsible/style/index.less +24 -0
- package/lib/collapsibleActionItems/index.d.ts +24 -0
- package/lib/collapsibleActionItems/index.js +68 -0
- package/lib/collapsibleActionItems/style/index.d.ts +2 -0
- package/lib/collapsibleActionItems/style/index.js +4 -0
- package/lib/collapsibleActionItems/style/index.less +7 -0
- package/lib/flex/index.d.ts +7 -0
- package/lib/flex/index.js +60 -0
- package/lib/flex/interface.d.ts +16 -0
- package/lib/flex/interface.js +5 -0
- package/lib/flex/style/index.d.ts +2 -0
- package/lib/flex/style/index.js +4 -0
- package/lib/flex/style/index.less +77 -0
- package/lib/flex/utils.d.ts +7 -0
- package/lib/flex/utils.js +39 -0
- package/lib/index.d.ts +9 -0
- package/lib/index.js +65 -0
- package/lib/resize/index.d.ts +8 -0
- package/lib/resize/index.js +38 -0
- package/lib/splitter/Panel.d.ts +7 -0
- package/lib/splitter/Panel.js +44 -0
- package/lib/splitter/SplitBar.d.ts +24 -0
- package/lib/splitter/SplitBar.js +179 -0
- package/lib/splitter/Splitter.d.ts +5 -0
- package/lib/splitter/Splitter.js +202 -0
- package/lib/splitter/hooks/sizeUtil.d.ts +3 -0
- package/lib/splitter/hooks/sizeUtil.js +56 -0
- package/lib/splitter/hooks/useItems.d.ts +14 -0
- package/lib/splitter/hooks/useItems.js +46 -0
- package/lib/splitter/hooks/useResizable.d.ts +10 -0
- package/lib/splitter/hooks/useResizable.js +83 -0
- package/lib/splitter/hooks/useResize.d.ts +6 -0
- package/lib/splitter/hooks/useResize.js +142 -0
- package/lib/splitter/hooks/useSizes.d.ts +4 -0
- package/lib/splitter/hooks/useSizes.js +62 -0
- package/lib/splitter/index.d.ts +8 -0
- package/lib/splitter/index.js +12 -0
- package/lib/splitter/interface.d.ts +68 -0
- package/lib/splitter/interface.js +5 -0
- package/lib/splitter/style/index.d.ts +2 -0
- package/lib/splitter/style/index.js +4 -0
- package/lib/splitter/style/index.less +312 -0
- package/lib/statusTag/index.d.ts +28 -0
- package/lib/statusTag/index.js +125 -0
- package/lib/statusTag/style/index.d.ts +2 -0
- package/lib/statusTag/style/index.js +4 -0
- package/lib/statusTag/style/index.less +70 -0
- package/lib/statusTag/style/mixin.less +39 -0
- package/lib/style/mixins/index.less +0 -0
- package/lib/style/themes/index.less +2 -1
- package/lib/style/themes/variable.less +1 -0
- package/package.json +142 -141
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = useResize;
|
|
7
|
+
var React = _interopRequireWildcard(require("react"));
|
|
8
|
+
var _useSizes = require("./useSizes");
|
|
9
|
+
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); }
|
|
10
|
+
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; }
|
|
11
|
+
/**
|
|
12
|
+
* Handle user drag resize logic.
|
|
13
|
+
*/
|
|
14
|
+
function useResize(items, resizableInfos, percentSizes, containerSize, updateSizes, isRTL) {
|
|
15
|
+
const limitSizes = items.map(item => [item.min, item.max]);
|
|
16
|
+
const mergedContainerSize = containerSize || 0;
|
|
17
|
+
const ptg2px = ptg => ptg * mergedContainerSize;
|
|
18
|
+
|
|
19
|
+
// ======================== Resize ========================
|
|
20
|
+
function getLimitSize(str, defaultLimit) {
|
|
21
|
+
if (typeof str === 'string') {
|
|
22
|
+
return ptg2px((0, _useSizes.getPtg)(str));
|
|
23
|
+
}
|
|
24
|
+
return str ?? defaultLimit;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Real px sizes
|
|
28
|
+
const [cacheSizes, setCacheSizes] = React.useState([]);
|
|
29
|
+
const cacheCollapsedSize = React.useRef([]);
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* When start drag, check the direct is `start` or `end`.
|
|
33
|
+
* This will handle when 2 splitter bar are in the same position.
|
|
34
|
+
*/
|
|
35
|
+
const [movingIndex, setMovingIndex] = React.useState(null);
|
|
36
|
+
const getPxSizes = () => percentSizes.map(ptg2px);
|
|
37
|
+
const onOffsetStart = index => {
|
|
38
|
+
setCacheSizes(getPxSizes());
|
|
39
|
+
setMovingIndex({
|
|
40
|
+
index,
|
|
41
|
+
confirmed: false
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
const onOffsetUpdate = (index, offset) => {
|
|
45
|
+
// First time trigger move index update is not sync in the state
|
|
46
|
+
let confirmedIndex = null;
|
|
47
|
+
|
|
48
|
+
// We need to know what the real index is.
|
|
49
|
+
if ((!movingIndex || !movingIndex.confirmed) && offset !== 0) {
|
|
50
|
+
// Search for the real index
|
|
51
|
+
if (offset > 0) {
|
|
52
|
+
confirmedIndex = index;
|
|
53
|
+
setMovingIndex({
|
|
54
|
+
index,
|
|
55
|
+
confirmed: true
|
|
56
|
+
});
|
|
57
|
+
} else {
|
|
58
|
+
for (let i = index; i >= 0; i -= 1) {
|
|
59
|
+
if (cacheSizes[i] > 0 && resizableInfos[i].resizable) {
|
|
60
|
+
confirmedIndex = i;
|
|
61
|
+
setMovingIndex({
|
|
62
|
+
index: i,
|
|
63
|
+
confirmed: true
|
|
64
|
+
});
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
const mergedIndex = confirmedIndex ?? movingIndex?.index ?? index;
|
|
71
|
+
const numSizes = [...cacheSizes];
|
|
72
|
+
const nextIndex = mergedIndex + 1;
|
|
73
|
+
|
|
74
|
+
// Get boundary
|
|
75
|
+
const startMinSize = getLimitSize(limitSizes[mergedIndex][0], 0);
|
|
76
|
+
const endMinSize = getLimitSize(limitSizes[nextIndex][0], 0);
|
|
77
|
+
const startMaxSize = getLimitSize(limitSizes[mergedIndex][1], mergedContainerSize);
|
|
78
|
+
const endMaxSize = getLimitSize(limitSizes[nextIndex][1], mergedContainerSize);
|
|
79
|
+
let mergedOffset = offset;
|
|
80
|
+
|
|
81
|
+
// Align with the boundary
|
|
82
|
+
if (numSizes[mergedIndex] + mergedOffset < startMinSize) {
|
|
83
|
+
mergedOffset = startMinSize - numSizes[mergedIndex];
|
|
84
|
+
}
|
|
85
|
+
if (numSizes[nextIndex] - mergedOffset < endMinSize) {
|
|
86
|
+
mergedOffset = numSizes[nextIndex] - endMinSize;
|
|
87
|
+
}
|
|
88
|
+
if (numSizes[mergedIndex] + mergedOffset > startMaxSize) {
|
|
89
|
+
mergedOffset = startMaxSize - numSizes[mergedIndex];
|
|
90
|
+
}
|
|
91
|
+
if (numSizes[nextIndex] - mergedOffset > endMaxSize) {
|
|
92
|
+
mergedOffset = numSizes[nextIndex] - endMaxSize;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Do offset
|
|
96
|
+
numSizes[mergedIndex] += mergedOffset;
|
|
97
|
+
numSizes[nextIndex] -= mergedOffset;
|
|
98
|
+
updateSizes(numSizes);
|
|
99
|
+
return numSizes;
|
|
100
|
+
};
|
|
101
|
+
const onOffsetEnd = () => {
|
|
102
|
+
setMovingIndex(null);
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
// ======================= Collapse =======================
|
|
106
|
+
const onCollapse = (index, type) => {
|
|
107
|
+
const currentSizes = getPxSizes();
|
|
108
|
+
const adjustedType = isRTL ? type === 'start' ? 'end' : 'start' : type;
|
|
109
|
+
const currentIndex = adjustedType === 'start' ? index : index + 1;
|
|
110
|
+
const targetIndex = adjustedType === 'start' ? index + 1 : index;
|
|
111
|
+
const currentSize = currentSizes[currentIndex];
|
|
112
|
+
const targetSize = currentSizes[targetIndex];
|
|
113
|
+
if (currentSize !== 0 && targetSize !== 0) {
|
|
114
|
+
// Collapse directly
|
|
115
|
+
currentSizes[currentIndex] = 0;
|
|
116
|
+
currentSizes[targetIndex] += currentSize;
|
|
117
|
+
cacheCollapsedSize.current[index] = currentSize;
|
|
118
|
+
} else {
|
|
119
|
+
const totalSize = currentSize + targetSize;
|
|
120
|
+
const currentSizeMin = getLimitSize(limitSizes[currentIndex][0], 0);
|
|
121
|
+
const currentSizeMax = getLimitSize(limitSizes[currentIndex][1], mergedContainerSize);
|
|
122
|
+
const targetSizeMin = getLimitSize(limitSizes[targetIndex][0], 0);
|
|
123
|
+
const targetSizeMax = getLimitSize(limitSizes[targetIndex][1], mergedContainerSize);
|
|
124
|
+
const limitStart = Math.max(currentSizeMin, totalSize - targetSizeMax);
|
|
125
|
+
const limitEnd = Math.min(currentSizeMax, totalSize - targetSizeMin);
|
|
126
|
+
const halfOffset = targetSizeMin || (limitEnd - limitStart) / 2;
|
|
127
|
+
const targetCacheCollapsedSize = cacheCollapsedSize.current[index];
|
|
128
|
+
const currentCacheCollapsedSize = totalSize - targetCacheCollapsedSize;
|
|
129
|
+
const shouldUseCache = targetCacheCollapsedSize && targetCacheCollapsedSize <= targetSizeMax && targetCacheCollapsedSize >= targetSizeMin && currentCacheCollapsedSize <= currentSizeMax && currentCacheCollapsedSize >= currentSizeMin;
|
|
130
|
+
if (shouldUseCache) {
|
|
131
|
+
currentSizes[targetIndex] = targetCacheCollapsedSize;
|
|
132
|
+
currentSizes[currentIndex] = currentCacheCollapsedSize;
|
|
133
|
+
} else {
|
|
134
|
+
currentSizes[currentIndex] -= halfOffset;
|
|
135
|
+
currentSizes[targetIndex] += halfOffset;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
updateSizes(currentSizes);
|
|
139
|
+
return currentSizes;
|
|
140
|
+
};
|
|
141
|
+
return [onOffsetStart, onOffsetUpdate, onOffsetEnd, onCollapse, movingIndex?.index];
|
|
142
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { PanelProps } from '../interface';
|
|
3
|
+
export declare function getPtg(str: string): number;
|
|
4
|
+
export default function useSizes(items: PanelProps[], containerSize?: number): readonly [(string | number | undefined)[], number[], number[], number[], number[], React.Dispatch<React.SetStateAction<(string | number | undefined)[]>>];
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = useSizes;
|
|
7
|
+
exports.getPtg = getPtg;
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
var _sizeUtil = require("./sizeUtil");
|
|
10
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
+
function getPtg(str) {
|
|
12
|
+
return Number(str.slice(0, -1)) / 100;
|
|
13
|
+
}
|
|
14
|
+
function isPtg(itemSize) {
|
|
15
|
+
return typeof itemSize === 'string' && itemSize.endsWith('%');
|
|
16
|
+
}
|
|
17
|
+
function useSizes(items, containerSize) {
|
|
18
|
+
const propSizes = items.map(item => item.size);
|
|
19
|
+
const itemsCount = items.length;
|
|
20
|
+
const mergedContainerSize = containerSize || 0;
|
|
21
|
+
const ptg2px = ptg => ptg * mergedContainerSize;
|
|
22
|
+
const [innerSizes, setInnerSizes] = _react.default.useState(() => items.map(item => item.defaultSize));
|
|
23
|
+
const sizes = _react.default.useMemo(() => {
|
|
24
|
+
const mergedSizes = [];
|
|
25
|
+
for (let i = 0; i < itemsCount; i += 1) {
|
|
26
|
+
mergedSizes[i] = propSizes[i] ?? innerSizes[i];
|
|
27
|
+
}
|
|
28
|
+
return mergedSizes;
|
|
29
|
+
}, [itemsCount, innerSizes, propSizes]);
|
|
30
|
+
const postPercentMinSizes = _react.default.useMemo(() => items.map(item => {
|
|
31
|
+
if (isPtg(item.min)) {
|
|
32
|
+
return getPtg(item.min);
|
|
33
|
+
}
|
|
34
|
+
return (item.min || 0) / mergedContainerSize;
|
|
35
|
+
}), [items, mergedContainerSize]);
|
|
36
|
+
const postPercentMaxSizes = _react.default.useMemo(() => items.map(item => {
|
|
37
|
+
if (isPtg(item.max)) {
|
|
38
|
+
return getPtg(item.max);
|
|
39
|
+
}
|
|
40
|
+
return (item.max || mergedContainerSize) / mergedContainerSize;
|
|
41
|
+
}), [items, mergedContainerSize]);
|
|
42
|
+
const postPercentSizes = _react.default.useMemo(() => {
|
|
43
|
+
const ptgList = [];
|
|
44
|
+
for (let i = 0; i < itemsCount; i += 1) {
|
|
45
|
+
const itemSize = sizes[i];
|
|
46
|
+
if (isPtg(itemSize)) {
|
|
47
|
+
ptgList[i] = getPtg(itemSize);
|
|
48
|
+
} else if (itemSize || itemSize === 0) {
|
|
49
|
+
const num = Number(itemSize);
|
|
50
|
+
if (!Number.isNaN(num)) {
|
|
51
|
+
ptgList[i] = num / mergedContainerSize;
|
|
52
|
+
}
|
|
53
|
+
} else {
|
|
54
|
+
ptgList[i] = undefined;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return (0, _sizeUtil.autoPtgSizes)(ptgList, postPercentMinSizes, postPercentMaxSizes);
|
|
58
|
+
}, [sizes, mergedContainerSize, postPercentMinSizes, postPercentMaxSizes]);
|
|
59
|
+
const postPxSizes = _react.default.useMemo(() => postPercentSizes.map(ptg2px), [postPercentSizes, mergedContainerSize]);
|
|
60
|
+
const panelSizes = _react.default.useMemo(() => containerSize ? postPxSizes : sizes, [postPxSizes, containerSize]);
|
|
61
|
+
return [panelSizes, postPxSizes, postPercentSizes, postPercentMinSizes, postPercentMaxSizes, setInnerSizes];
|
|
62
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import Panel from './Panel';
|
|
2
|
+
import SplitterComp from './Splitter';
|
|
3
|
+
export type { SplitterProps } from './interface';
|
|
4
|
+
declare type CompoundedComponent = typeof SplitterComp & {
|
|
5
|
+
Panel: typeof Panel;
|
|
6
|
+
};
|
|
7
|
+
declare const Splitter: CompoundedComponent;
|
|
8
|
+
export default Splitter;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _Panel = _interopRequireDefault(require("./Panel"));
|
|
8
|
+
var _Splitter = _interopRequireDefault(require("./Splitter"));
|
|
9
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
10
|
+
const Splitter = _Splitter.default;
|
|
11
|
+
Splitter.Panel = _Panel.default;
|
|
12
|
+
var _default = exports.default = Splitter;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { ShowCollapsibleIconMode } from './SplitBar';
|
|
3
|
+
export interface SplitterProps {
|
|
4
|
+
prefixCls?: string;
|
|
5
|
+
className?: string;
|
|
6
|
+
style?: React.CSSProperties;
|
|
7
|
+
rootClassName?: string;
|
|
8
|
+
layout?: 'horizontal' | 'vertical';
|
|
9
|
+
onResizeStart?: (sizes: number[]) => void;
|
|
10
|
+
onResize?: (sizes: number[]) => void;
|
|
11
|
+
onResizeEnd?: (sizes: number[]) => void;
|
|
12
|
+
lazy?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export interface PanelProps {
|
|
15
|
+
className?: string;
|
|
16
|
+
style?: React.CSSProperties;
|
|
17
|
+
min?: number | string;
|
|
18
|
+
max?: number | string;
|
|
19
|
+
size?: number | string;
|
|
20
|
+
collapsible?: boolean | {
|
|
21
|
+
start?: boolean;
|
|
22
|
+
end?: boolean;
|
|
23
|
+
showCollapsibleIcon?: ShowCollapsibleIconMode;
|
|
24
|
+
};
|
|
25
|
+
resizable?: boolean;
|
|
26
|
+
defaultSize?: number | string;
|
|
27
|
+
}
|
|
28
|
+
export interface InternalPanelProps extends PanelProps {
|
|
29
|
+
className?: string;
|
|
30
|
+
prefixCls?: string;
|
|
31
|
+
}
|
|
32
|
+
export interface UseResizeProps extends Pick<SplitterProps, 'onResize'> {
|
|
33
|
+
basicsState: number[];
|
|
34
|
+
items: PanelProps[];
|
|
35
|
+
panelsRef: React.RefObject<(HTMLDivElement | null)[]>;
|
|
36
|
+
reverse: boolean;
|
|
37
|
+
setBasicsState: React.Dispatch<React.SetStateAction<number[]>>;
|
|
38
|
+
}
|
|
39
|
+
export interface UseResize {
|
|
40
|
+
setSize: (data: {
|
|
41
|
+
size: number;
|
|
42
|
+
index: number;
|
|
43
|
+
}[]) => void;
|
|
44
|
+
setOffset: (offset: number, containerSize: number, index: number) => void;
|
|
45
|
+
}
|
|
46
|
+
export interface UseHandleProps extends Pick<SplitterProps, 'layout' | 'onResizeStart' | 'onResizeEnd'> {
|
|
47
|
+
basicsState: number[];
|
|
48
|
+
containerRef?: React.RefObject<HTMLDivElement | null>;
|
|
49
|
+
setOffset: UseResize['setOffset'];
|
|
50
|
+
setResizing: React.Dispatch<React.SetStateAction<boolean>>;
|
|
51
|
+
}
|
|
52
|
+
export interface UseHandle {
|
|
53
|
+
onStart: (x: number, y: number, index: number) => void;
|
|
54
|
+
}
|
|
55
|
+
export interface UseCollapsibleProps {
|
|
56
|
+
basicsState: number[];
|
|
57
|
+
collapsible?: PanelProps['collapsible'];
|
|
58
|
+
index: number;
|
|
59
|
+
reverse: boolean;
|
|
60
|
+
setSize?: UseResize['setSize'];
|
|
61
|
+
}
|
|
62
|
+
export interface UseCollapsible {
|
|
63
|
+
nextIcon: boolean;
|
|
64
|
+
overlap: boolean;
|
|
65
|
+
previousIcon: boolean;
|
|
66
|
+
onFold: (type: 'previous' | 'next') => void;
|
|
67
|
+
setOldBasics: () => void;
|
|
68
|
+
}
|
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
@import '../../style/themes/index.less';
|
|
2
|
+
|
|
3
|
+
@splitter-prefix-cls: ~'@{ant-prefix}-splitter';
|
|
4
|
+
|
|
5
|
+
@splitter-resize-spinner-size: 20px;
|
|
6
|
+
@splitter-split-bar-draggable-size: @splitter-resize-spinner-size;
|
|
7
|
+
@splitter-split-bar-size: 2px;
|
|
8
|
+
@splitter-split-trigger-size: 6px;
|
|
9
|
+
|
|
10
|
+
@splitterBarPreviewOffsetVar: ~'@{splitter-prefix-cls}-bar-preview-offset';
|
|
11
|
+
@splitter-transform-x: ~'translateX(var(--@{splitterBarPreviewOffsetVar}))';
|
|
12
|
+
@splitter-transform-y: ~'translateY(var(--@{splitterBarPreviewOffsetVar}))';
|
|
13
|
+
|
|
14
|
+
.center-position() {
|
|
15
|
+
position: absolute;
|
|
16
|
+
top: 50%;
|
|
17
|
+
left: 50%;
|
|
18
|
+
transform: translate(-50%, -50%);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.@{splitter-prefix-cls} {
|
|
22
|
+
display: flex;
|
|
23
|
+
width: 100%;
|
|
24
|
+
height: 100%;
|
|
25
|
+
align-items: stretch;
|
|
26
|
+
|
|
27
|
+
& > .@{splitter-prefix-cls}-bar {
|
|
28
|
+
flex: none;
|
|
29
|
+
position: relative;
|
|
30
|
+
user-select: none;
|
|
31
|
+
|
|
32
|
+
.@{splitter-prefix-cls}-bar-dragger {
|
|
33
|
+
.center-position();
|
|
34
|
+
z-index: 1;
|
|
35
|
+
pointer-events: auto;
|
|
36
|
+
|
|
37
|
+
&::before {
|
|
38
|
+
content: '';
|
|
39
|
+
background: @item-hover-bg;
|
|
40
|
+
.center-position();
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
&::after {
|
|
44
|
+
content: '';
|
|
45
|
+
background: rgba(0, 0, 0, 0.15);
|
|
46
|
+
.center-position();
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
&:hover:not(.@{splitter-prefix-cls}-bar-dragger-active) {
|
|
50
|
+
&::before {
|
|
51
|
+
background: @item-active-bg;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
&.@{splitter-prefix-cls}-bar-dragger-active {
|
|
56
|
+
z-index: 2;
|
|
57
|
+
|
|
58
|
+
&::before {
|
|
59
|
+
background: @item-active-bg;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
&.@{splitter-prefix-cls}-bar-dragger-disabled {
|
|
64
|
+
z-index: 0;
|
|
65
|
+
cursor: default;
|
|
66
|
+
|
|
67
|
+
&,
|
|
68
|
+
&:hover,
|
|
69
|
+
&.@{splitter-prefix-cls}-bar-dragger-active {
|
|
70
|
+
&::before {
|
|
71
|
+
background: @disabled-bg;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
&::after {
|
|
76
|
+
display: none;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.@{splitter-prefix-cls}-bar-collapse-bar {
|
|
82
|
+
.center-position();
|
|
83
|
+
z-index: @zindex-popover;
|
|
84
|
+
background: @item-hover-bg;
|
|
85
|
+
font-size: @font-size-base;
|
|
86
|
+
border-radius: @border-radius-base;
|
|
87
|
+
color: @text-color;
|
|
88
|
+
cursor: pointer;
|
|
89
|
+
opacity: 0;
|
|
90
|
+
display: flex;
|
|
91
|
+
align-items: center;
|
|
92
|
+
justify-content: center;
|
|
93
|
+
|
|
94
|
+
&:hover {
|
|
95
|
+
background: @item-active-bg;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
&:active {
|
|
99
|
+
background: @item-active-bg;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
&:hover,
|
|
104
|
+
&:active {
|
|
105
|
+
.@{splitter-prefix-cls}-bar-collapse-bar-hover-only {
|
|
106
|
+
opacity: 1;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.@{splitter-prefix-cls}-bar-collapse-bar-hover-only {
|
|
111
|
+
@media (hover: none) {
|
|
112
|
+
opacity: 1;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.@{splitter-prefix-cls}-bar-collapse-bar-always-hidden {
|
|
117
|
+
display: none;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.@{splitter-prefix-cls}-bar-collapse-bar-always-visible {
|
|
121
|
+
opacity: 1;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.@{splitter-prefix-cls}-mask {
|
|
126
|
+
position: fixed;
|
|
127
|
+
z-index: 9999;
|
|
128
|
+
top: 0;
|
|
129
|
+
right: 0;
|
|
130
|
+
bottom: 0;
|
|
131
|
+
left: 0;
|
|
132
|
+
background: transparent;
|
|
133
|
+
|
|
134
|
+
&.@{splitter-prefix-cls}-mask-horizontal {
|
|
135
|
+
cursor: col-resize;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
&.@{splitter-prefix-cls}-mask-vertical {
|
|
139
|
+
cursor: row-resize;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
&.@{splitter-prefix-cls}-horizontal {
|
|
144
|
+
flex-direction: row;
|
|
145
|
+
|
|
146
|
+
& > .@{splitter-prefix-cls}-bar {
|
|
147
|
+
width: 0;
|
|
148
|
+
|
|
149
|
+
.@{splitter-prefix-cls}-bar-preview {
|
|
150
|
+
height: 100%;
|
|
151
|
+
width: @splitter-split-bar-size;
|
|
152
|
+
position: absolute;
|
|
153
|
+
background: @primary-color;
|
|
154
|
+
opacity: 0.2;
|
|
155
|
+
pointer-events: none;
|
|
156
|
+
transition: none;
|
|
157
|
+
z-index: 1;
|
|
158
|
+
display: none;
|
|
159
|
+
|
|
160
|
+
&.@{splitter-prefix-cls}-bar-preview-active {
|
|
161
|
+
display: block;
|
|
162
|
+
|
|
163
|
+
transform: @splitter-transform-x;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
.@{splitter-prefix-cls}-bar-dragger {
|
|
168
|
+
cursor: col-resize;
|
|
169
|
+
height: 100%;
|
|
170
|
+
width: @splitter-split-trigger-size;
|
|
171
|
+
|
|
172
|
+
&::before {
|
|
173
|
+
height: 100%;
|
|
174
|
+
width: @splitter-split-bar-size;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
&::after {
|
|
178
|
+
height: @splitter-split-bar-draggable-size;
|
|
179
|
+
width: @splitter-split-bar-size;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
.@{splitter-prefix-cls}-bar-collapse-bar {
|
|
184
|
+
width: @font-size-sm;
|
|
185
|
+
height: @btn-height-sm;
|
|
186
|
+
|
|
187
|
+
&.@{splitter-prefix-cls}-bar-collapse-bar-start {
|
|
188
|
+
left: auto;
|
|
189
|
+
right: (@splitter-split-trigger-size / 2);
|
|
190
|
+
transform: translateY(-50%);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
&.@{splitter-prefix-cls}-bar-collapse-bar-end {
|
|
194
|
+
left: (@splitter-split-trigger-size / 2);
|
|
195
|
+
right: auto;
|
|
196
|
+
transform: translateY(-50%);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
&.@{splitter-prefix-cls}-vertical {
|
|
203
|
+
flex-direction: column;
|
|
204
|
+
|
|
205
|
+
& > .@{splitter-prefix-cls}-bar {
|
|
206
|
+
height: 0;
|
|
207
|
+
|
|
208
|
+
.@{splitter-prefix-cls}-bar-preview {
|
|
209
|
+
height: @splitter-split-bar-size;
|
|
210
|
+
width: 100%;
|
|
211
|
+
position: absolute;
|
|
212
|
+
background: @primary-color;
|
|
213
|
+
opacity: 0.2;
|
|
214
|
+
pointer-events: none;
|
|
215
|
+
transition: none;
|
|
216
|
+
z-index: 1;
|
|
217
|
+
display: none;
|
|
218
|
+
|
|
219
|
+
&.@{splitter-prefix-cls}-bar-preview-active {
|
|
220
|
+
display: block;
|
|
221
|
+
transform: @splitter-transform-y;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
.@{splitter-prefix-cls}-bar-dragger {
|
|
226
|
+
cursor: row-resize;
|
|
227
|
+
width: 100%;
|
|
228
|
+
height: @splitter-split-trigger-size;
|
|
229
|
+
|
|
230
|
+
&::before {
|
|
231
|
+
width: 100%;
|
|
232
|
+
height: @splitter-split-bar-size;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
&::after {
|
|
236
|
+
width: @splitter-split-bar-draggable-size;
|
|
237
|
+
height: @splitter-split-bar-size;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
.@{splitter-prefix-cls}-bar-collapse-bar {
|
|
242
|
+
height: @font-size-sm;
|
|
243
|
+
width: @btn-height-sm;
|
|
244
|
+
|
|
245
|
+
&.@{splitter-prefix-cls}-bar-collapse-bar-start {
|
|
246
|
+
top: auto;
|
|
247
|
+
bottom: (@splitter-split-trigger-size / 2);
|
|
248
|
+
transform: translateX(-50%);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
&.@{splitter-prefix-cls}-bar-collapse-bar-end {
|
|
252
|
+
top: (@splitter-split-trigger-size / 2);
|
|
253
|
+
bottom: auto;
|
|
254
|
+
transform: translateX(-50%);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
.@{splitter-prefix-cls}-panel {
|
|
261
|
+
overflow: auto;
|
|
262
|
+
padding: 0 1px;
|
|
263
|
+
box-sizing: border-box;
|
|
264
|
+
|
|
265
|
+
&::-webkit-scrollbar {
|
|
266
|
+
width: 8px;
|
|
267
|
+
height: 8px;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
&::-webkit-scrollbar-thumb {
|
|
271
|
+
background: @table-sticky-scroll-bar-bg;
|
|
272
|
+
border-radius: @table-sticky-scroll-bar-radius;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
&.@{splitter-prefix-cls}-panel-hidden {
|
|
276
|
+
padding: 0;
|
|
277
|
+
overflow: hidden;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
&:has(.@{splitter-prefix-cls}:only-child) {
|
|
281
|
+
overflow: hidden;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
&.@{ant-prefix}-rtl.@{splitter-prefix-cls}-horizontal {
|
|
286
|
+
& > .@{splitter-prefix-cls}-bar {
|
|
287
|
+
.@{splitter-prefix-cls}-bar-collapse-previous {
|
|
288
|
+
right: 0;
|
|
289
|
+
left: unset;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
.@{splitter-prefix-cls}-bar-collapse-next {
|
|
293
|
+
right: unset;
|
|
294
|
+
left: 0;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
&.@{ant-prefix}-rtl.@{splitter-prefix-cls}-vertical {
|
|
300
|
+
& > .@{splitter-prefix-cls}-bar {
|
|
301
|
+
.@{splitter-prefix-cls}-bar-collapse-previous {
|
|
302
|
+
right: 50%;
|
|
303
|
+
left: unset;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
.@{splitter-prefix-cls}-bar-collapse-next {
|
|
307
|
+
right: 50%;
|
|
308
|
+
left: unset;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import React, { CSSProperties, HTMLAttributes, ReactNode } from 'react';
|
|
2
|
+
import './style';
|
|
3
|
+
export declare const PRESET_COLOR_TYPES: readonly ["blue", "yellow", "green", "gray", "red", "purple", "cyan", "pink"];
|
|
4
|
+
export declare const STATUS_TAG_TYPES: readonly ["default", "outline", "fill"];
|
|
5
|
+
export declare type PresetColorType = (typeof PRESET_COLOR_TYPES)[number] | (string & {});
|
|
6
|
+
export declare type StatusTagType = (typeof STATUS_TAG_TYPES)[number];
|
|
7
|
+
export interface IStatusTagProps extends HTMLAttributes<HTMLDivElement> {
|
|
8
|
+
/** 状态类型 */
|
|
9
|
+
type?: StatusTagType;
|
|
10
|
+
/** 是否圆角 */
|
|
11
|
+
rounded?: boolean;
|
|
12
|
+
/** 状态颜色(支持预设值/自定义十六进制/RGB) */
|
|
13
|
+
color?: PresetColorType;
|
|
14
|
+
/** 是否加载中 */
|
|
15
|
+
loading?: boolean;
|
|
16
|
+
/** 自定义图标 */
|
|
17
|
+
icon?: ReactNode;
|
|
18
|
+
/** 背景颜色(仅fill类型生效),未设置时使用color的0.15透明度 */
|
|
19
|
+
background?: string;
|
|
20
|
+
/** 类名 */
|
|
21
|
+
className?: string;
|
|
22
|
+
/** 子节点 */
|
|
23
|
+
children?: ReactNode;
|
|
24
|
+
/** 自定义样式 */
|
|
25
|
+
style?: CSSProperties;
|
|
26
|
+
}
|
|
27
|
+
declare const StatusTag: React.FC<IStatusTagProps>;
|
|
28
|
+
export default StatusTag;
|