@rainbow-oh/yee-c 0.14.2 → 0.14.4
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/Form/index.d.ts +1 -1
- package/dist/cjs/Splitter/demo/animation.d.ts +3 -0
- package/dist/cjs/Splitter/demo/animation.js +43 -0
- package/dist/cjs/Splitter/hooks/useMove.d.ts +1 -1
- package/dist/cjs/Splitter/hooks/useMove.js +3 -1
- package/dist/cjs/Splitter/interface.d.ts +6 -0
- package/dist/cjs/Splitter/splitter-handler.d.ts +3 -1
- package/dist/cjs/Splitter/splitter-handler.js +3 -2
- package/dist/cjs/Splitter/splitter.js +79 -11
- package/dist/cjs/style/themes.css +1 -1
- package/dist/cjs/style/variables.css +1 -1
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/esm/Form/index.d.ts +1 -1
- package/dist/esm/Splitter/demo/animation.d.ts +3 -0
- package/dist/esm/Splitter/demo/animation.js +51 -0
- package/dist/esm/Splitter/hooks/useMove.d.ts +1 -1
- package/dist/esm/Splitter/hooks/useMove.js +3 -1
- package/dist/esm/Splitter/interface.d.ts +6 -0
- package/dist/esm/Splitter/splitter-handler.d.ts +3 -1
- package/dist/esm/Splitter/splitter-handler.js +3 -2
- package/dist/esm/Splitter/splitter.js +107 -14
- package/dist/esm/style/themes.css +1 -1
- package/dist/esm/style/variables.css +1 -1
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/umd/yee-c.min.js +1 -1
- package/package.json +1 -1
- package/src/Form/index.ts +1 -0
- package/src/Splitter/demo/animation.tsx +29 -0
- package/src/Splitter/hooks/useMove.ts +3 -0
- package/src/Splitter/index.en-US.md +2 -0
- package/src/Splitter/index.zh-CN.md +2 -0
- package/src/Splitter/interface.ts +6 -0
- package/src/Splitter/splitter-handler.tsx +4 -1
- package/src/Splitter/splitter.tsx +93 -6
- package/src/version.ts +1 -1
package/dist/cjs/Form/index.d.ts
CHANGED
|
@@ -16,5 +16,5 @@ type FormInterface = typeof InternalForm & {
|
|
|
16
16
|
List: typeof List;
|
|
17
17
|
};
|
|
18
18
|
declare const Form: FormInterface;
|
|
19
|
-
export type { FieldGroupProps, FieldStatus, FieldStatusData, FormInstance, FormListProps, FormProps, ValidateMessage, } from './interface';
|
|
19
|
+
export type { FieldGroupProps, FieldStatus, FieldStatusData, FormInstance, FormListProps, FormProps, Rule as FormRule, ValidateMessage, } from './interface';
|
|
20
20
|
export default Form;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
+
mod
|
|
26
|
+
));
|
|
27
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
+
|
|
29
|
+
// src/Splitter/demo/animation.tsx
|
|
30
|
+
var animation_exports = {};
|
|
31
|
+
__export(animation_exports, {
|
|
32
|
+
default: () => animation_default
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(animation_exports);
|
|
35
|
+
var import_yee_c = require("../..");
|
|
36
|
+
var import_react = __toESM(require("react"));
|
|
37
|
+
var animation_default = () => {
|
|
38
|
+
const [open, setOpen] = import_react.default.useState(false);
|
|
39
|
+
return /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement("div", { style: { marginBottom: 8 } }, /* @__PURE__ */ import_react.default.createElement(import_yee_c.Button, { type: "primary", onClick: () => setOpen((v) => !v) }, open ? "Close Panel" : "Open Panel")), /* @__PURE__ */ import_react.default.createElement("div", { style: { height: 300 } }, /* @__PURE__ */ import_react.default.createElement(import_yee_c.Splitter, { animation: true }, /* @__PURE__ */ import_react.default.createElement(import_yee_c.Splitter.Item, { min: "30%" }, /* @__PURE__ */ import_react.default.createElement("div", { style: { padding: 16, backgroundColor: "#f0f0f0" } }, "Content Panel")), open ? (
|
|
40
|
+
// 条件渲染的面板:挂载时从 0 展开到目标尺寸,卸载时过渡收合到 0 后移除
|
|
41
|
+
/* @__PURE__ */ import_react.default.createElement(import_yee_c.Splitter.Item, { size: "40%", min: "200px", max: "60%" }, /* @__PURE__ */ import_react.default.createElement("div", { style: { padding: 16, backgroundColor: "#e0e0e0" } }, "Assistant Panel"))
|
|
42
|
+
) : null)));
|
|
43
|
+
};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
export default function useMove(handler: React.RefObject<HTMLDivElement | null>, direction: 'horizontal' | 'vertical', onMove: (dis: number) => void): boolean[];
|
|
2
|
+
export default function useMove(handler: React.RefObject<HTMLDivElement | null>, direction: 'horizontal' | 'vertical', onMove: (dis: number) => void, onMovingChange?: (moving: boolean) => void): boolean[];
|
|
@@ -34,7 +34,7 @@ __export(useMove_exports, {
|
|
|
34
34
|
module.exports = __toCommonJS(useMove_exports);
|
|
35
35
|
var React = __toESM(require("react"));
|
|
36
36
|
var import_debounce = __toESM(require("../../utils/debounce"));
|
|
37
|
-
function useMove(handler, direction, onMove) {
|
|
37
|
+
function useMove(handler, direction, onMove, onMovingChange) {
|
|
38
38
|
const [moving, setMoving] = React.useState(false);
|
|
39
39
|
const moveTarget = (distance) => {
|
|
40
40
|
onMove(distance);
|
|
@@ -48,6 +48,7 @@ function useMove(handler, direction, onMove) {
|
|
|
48
48
|
let x = e.pageX;
|
|
49
49
|
let y = e.pageY;
|
|
50
50
|
setMoving(true);
|
|
51
|
+
onMovingChange == null ? void 0 : onMovingChange(true);
|
|
51
52
|
const onMouseMove = (0, import_debounce.default)((e2) => {
|
|
52
53
|
document.body.style.userSelect = "none";
|
|
53
54
|
document.body.style.cursor = direction === "horizontal" ? "col-resize" : "row-resize";
|
|
@@ -63,6 +64,7 @@ function useMove(handler, direction, onMove) {
|
|
|
63
64
|
}, 5);
|
|
64
65
|
const onMouseUp = () => {
|
|
65
66
|
setMoving(false);
|
|
67
|
+
onMovingChange == null ? void 0 : onMovingChange(false);
|
|
66
68
|
window.removeEventListener("mousemove", onMouseMove);
|
|
67
69
|
window.removeEventListener("mouseup", onMouseUp);
|
|
68
70
|
ele.removeEventListener("mouseup", onMouseUp);
|
|
@@ -83,4 +83,10 @@ export interface SplitterProps extends DataAttributeProps {
|
|
|
83
83
|
* panel size change event
|
|
84
84
|
* */
|
|
85
85
|
onResize?: (sizes: PanelRect[]) => void;
|
|
86
|
+
/**
|
|
87
|
+
* animate programmatic size changes and panel mount/unmount with a
|
|
88
|
+
* flex-basis transition; dragging always tracks the pointer in real time
|
|
89
|
+
* @default false
|
|
90
|
+
*/
|
|
91
|
+
animation?: boolean;
|
|
86
92
|
}
|
|
@@ -17,6 +17,8 @@ interface SplitterHandlerProps {
|
|
|
17
17
|
start: HTMLDivElement;
|
|
18
18
|
end: HTMLDivElement;
|
|
19
19
|
}) => void;
|
|
20
|
+
/** 拖拽开始/结束回调(animation 模式下拖拽期间需关闭 flex-basis 过渡) */
|
|
21
|
+
onDraggingChange?: (dragging: boolean) => void;
|
|
20
22
|
}
|
|
21
|
-
declare const SplitterHandler: ({ layout, resizable, collapsible, index, records, setRecords, onClick, }: SplitterHandlerProps) => React.JSX.Element;
|
|
23
|
+
declare const SplitterHandler: ({ layout, resizable, collapsible, index, records, setRecords, onClick, onDraggingChange, }: SplitterHandlerProps) => React.JSX.Element;
|
|
22
24
|
export default SplitterHandler;
|
|
@@ -61,7 +61,8 @@ var SplitterHandler = ({
|
|
|
61
61
|
index,
|
|
62
62
|
records,
|
|
63
63
|
setRecords,
|
|
64
|
-
onClick
|
|
64
|
+
onClick,
|
|
65
|
+
onDraggingChange
|
|
65
66
|
}) => {
|
|
66
67
|
const { start, end } = collapsible ? typeof collapsible === "boolean" ? { start: true, end: true } : collapsible : {};
|
|
67
68
|
const cref = (0, import_react.useRef)(null);
|
|
@@ -108,7 +109,7 @@ var SplitterHandler = ({
|
|
|
108
109
|
return newState;
|
|
109
110
|
});
|
|
110
111
|
};
|
|
111
|
-
(0, import_useMove.default)(handler, layout, onMove);
|
|
112
|
+
(0, import_useMove.default)(handler, layout, onMove, onDraggingChange);
|
|
112
113
|
const handleClick = (action) => {
|
|
113
114
|
const eles = refs.current;
|
|
114
115
|
const { el: start2 } = eles[`item${index}`];
|
|
@@ -80,10 +80,11 @@ var getPanelSize = (children, {
|
|
|
80
80
|
layout
|
|
81
81
|
}) => {
|
|
82
82
|
const panelsRect = [];
|
|
83
|
-
const
|
|
83
|
+
const items = import_react.default.Children.toArray(children);
|
|
84
|
+
const count = items.length;
|
|
84
85
|
let remainingSize = totalSize;
|
|
85
86
|
let remainingItem = count;
|
|
86
|
-
|
|
87
|
+
items.forEach((child) => {
|
|
87
88
|
if (import_react.default.isValidElement(child)) {
|
|
88
89
|
const { style, size, defaultSize, min, max } = child.props || {};
|
|
89
90
|
const styleSize = style ? layout === "horizontal" ? style.width : style.height : void 0;
|
|
@@ -140,6 +141,7 @@ var getPanelSize = (children, {
|
|
|
140
141
|
});
|
|
141
142
|
panelsRect.forEach((item) => {
|
|
142
143
|
if (item.type === "default") {
|
|
144
|
+
item.currentSize = item.size;
|
|
143
145
|
remainingSize -= item.size || 0;
|
|
144
146
|
remainingItem--;
|
|
145
147
|
} else if (item.type === "percent") {
|
|
@@ -152,7 +154,7 @@ var getPanelSize = (children, {
|
|
|
152
154
|
if (remainingItem > 0) {
|
|
153
155
|
panelsRect.forEach((item) => {
|
|
154
156
|
if (item.type === "auto") {
|
|
155
|
-
item.size = remainingSize / remainingItem;
|
|
157
|
+
item.size = Math.max(0, remainingSize / remainingItem);
|
|
156
158
|
item.currentSize = item.size;
|
|
157
159
|
}
|
|
158
160
|
});
|
|
@@ -160,11 +162,25 @@ var getPanelSize = (children, {
|
|
|
160
162
|
return panelsRect;
|
|
161
163
|
};
|
|
162
164
|
var Wrapper = (_a) => {
|
|
163
|
-
var _b = _a, {
|
|
165
|
+
var _b = _a, {
|
|
166
|
+
children,
|
|
167
|
+
itemsSize,
|
|
168
|
+
itemTransition,
|
|
169
|
+
animation,
|
|
170
|
+
onDraggingChange,
|
|
171
|
+
onClick
|
|
172
|
+
} = _b, props = __objRest(_b, [
|
|
173
|
+
"children",
|
|
174
|
+
"itemsSize",
|
|
175
|
+
"itemTransition",
|
|
176
|
+
"animation",
|
|
177
|
+
"onDraggingChange",
|
|
178
|
+
"onClick"
|
|
179
|
+
]);
|
|
164
180
|
const wrappered = [];
|
|
165
181
|
const refs = (0, import_react.useRef)({});
|
|
166
182
|
const arr = import_react.default.Children.toArray(children);
|
|
167
|
-
|
|
183
|
+
arr.forEach((child, index) => {
|
|
168
184
|
if (import_react.default.isValidElement(child)) {
|
|
169
185
|
const n = index + 1;
|
|
170
186
|
const { style } = child.props || {};
|
|
@@ -179,7 +195,9 @@ var Wrapper = (_a) => {
|
|
|
179
195
|
// @ts-ignore
|
|
180
196
|
style: __spreadProps(__spreadValues({}, style), {
|
|
181
197
|
// If there is a border or other size-related design, it may cause calculation issues
|
|
182
|
-
flexBasis: currentSize
|
|
198
|
+
flexBasis: currentSize,
|
|
199
|
+
// animation 模式下受控尺寸变更走 flex-basis 过渡;拖拽期间为 undefined 保证跟手
|
|
200
|
+
transition: itemTransition
|
|
183
201
|
}),
|
|
184
202
|
min,
|
|
185
203
|
max,
|
|
@@ -215,13 +233,43 @@ var Wrapper = (_a) => {
|
|
|
215
233
|
flexable,
|
|
216
234
|
expandable: _expandable,
|
|
217
235
|
onClick,
|
|
236
|
+
onDraggingChange,
|
|
218
237
|
key: `handler-${n}`
|
|
219
238
|
})
|
|
220
239
|
)
|
|
221
240
|
);
|
|
222
241
|
}
|
|
223
242
|
});
|
|
224
|
-
|
|
243
|
+
const prevCountRef = import_react.default.useRef(arr.length);
|
|
244
|
+
const prevClonesRef = import_react.default.useRef([]);
|
|
245
|
+
const [exiting, setExiting] = import_react.default.useState([]);
|
|
246
|
+
import_react.default.useEffect(() => {
|
|
247
|
+
const prevCount = prevCountRef.current;
|
|
248
|
+
prevCountRef.current = arr.length;
|
|
249
|
+
if (!animation || arr.length >= prevCount) {
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
const removed = prevClonesRef.current.slice(arr.length);
|
|
253
|
+
if (!removed.length) {
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
256
|
+
setExiting(removed);
|
|
257
|
+
const raf = requestAnimationFrame(() => {
|
|
258
|
+
setExiting(
|
|
259
|
+
(list) => list.map((el) => import_react.default.cloneElement(el, { style: __spreadProps(__spreadValues({}, el.props.style), { flexBasis: 0 }) }))
|
|
260
|
+
);
|
|
261
|
+
});
|
|
262
|
+
const timer = window.setTimeout(() => setExiting([]), 320);
|
|
263
|
+
return () => {
|
|
264
|
+
cancelAnimationFrame(raf);
|
|
265
|
+
window.clearTimeout(timer);
|
|
266
|
+
setExiting([]);
|
|
267
|
+
};
|
|
268
|
+
}, [arr.length, animation]);
|
|
269
|
+
import_react.default.useEffect(() => {
|
|
270
|
+
prevClonesRef.current = wrappered;
|
|
271
|
+
});
|
|
272
|
+
return /* @__PURE__ */ import_react.default.createElement(SplitterWrapperCtx.Provider, { value: { refs } }, wrappered, exiting);
|
|
225
273
|
};
|
|
226
274
|
var Splitter = import_react.default.forwardRef(
|
|
227
275
|
(baseprops, ref) => {
|
|
@@ -233,18 +281,22 @@ var Splitter = import_react.default.forwardRef(
|
|
|
233
281
|
layout = "horizontal",
|
|
234
282
|
children,
|
|
235
283
|
bordered,
|
|
236
|
-
onResize
|
|
284
|
+
onResize,
|
|
285
|
+
animation
|
|
237
286
|
} = _a, rest = __objRest(_a, [
|
|
238
287
|
"prefixCls",
|
|
239
288
|
"className",
|
|
240
289
|
"layout",
|
|
241
290
|
"children",
|
|
242
291
|
"bordered",
|
|
243
|
-
"onResize"
|
|
292
|
+
"onResize",
|
|
293
|
+
"animation"
|
|
244
294
|
]);
|
|
245
295
|
const internalRef = (0, import_react.useRef)(null);
|
|
246
296
|
const componentRef = ref || internalRef;
|
|
247
297
|
const [records, setRecords] = (0, import_react.useState)([]);
|
|
298
|
+
const [dragging, setDragging] = import_react.default.useState(false);
|
|
299
|
+
const itemTransition = animation ? dragging ? void 0 : "flex-basis 0.28s cubic-bezier(0.22, 0.61, 0.36, 1)" : void 0;
|
|
248
300
|
const handleClick = (index, action) => {
|
|
249
301
|
const c = index - 1;
|
|
250
302
|
const newRecords = [...records];
|
|
@@ -294,15 +346,28 @@ var Splitter = import_react.default.forwardRef(
|
|
|
294
346
|
};
|
|
295
347
|
}
|
|
296
348
|
}, [layout]);
|
|
349
|
+
const prevPanelCountRef = import_react.default.useRef(-1);
|
|
297
350
|
import_react.default.useEffect(() => {
|
|
298
351
|
if (totalSize) {
|
|
299
352
|
const panelsSize = getPanelSize(children, {
|
|
300
353
|
totalSize,
|
|
301
354
|
layout
|
|
302
355
|
});
|
|
356
|
+
const prevCount = prevPanelCountRef.current;
|
|
357
|
+
prevPanelCountRef.current = panelsSize.length;
|
|
358
|
+
if (animation && prevCount >= 0 && panelsSize.length > prevCount) {
|
|
359
|
+
panelsSize.slice(prevCount).forEach((item) => {
|
|
360
|
+
item.currentSize = 0;
|
|
361
|
+
});
|
|
362
|
+
setRecords(panelsSize);
|
|
363
|
+
const raf = requestAnimationFrame(() => {
|
|
364
|
+
setRecords(getPanelSize(children, { totalSize, layout }));
|
|
365
|
+
});
|
|
366
|
+
return () => cancelAnimationFrame(raf);
|
|
367
|
+
}
|
|
303
368
|
setRecords(panelsSize);
|
|
304
369
|
}
|
|
305
|
-
}, [children, totalSize, layout]);
|
|
370
|
+
}, [children, totalSize, layout, animation]);
|
|
306
371
|
return /* @__PURE__ */ import_react.default.createElement("div", __spreadProps(__spreadValues({ className: cls }, rest), { ref: componentRef }), /* @__PURE__ */ import_react.default.createElement(SplitterCtx.Provider, { value: { prefixCls, onResize } }, /* @__PURE__ */ import_react.default.createElement(
|
|
307
372
|
Wrapper,
|
|
308
373
|
{
|
|
@@ -311,7 +376,10 @@ var Splitter = import_react.default.forwardRef(
|
|
|
311
376
|
setRecords,
|
|
312
377
|
totalSize,
|
|
313
378
|
itemsSize: records,
|
|
314
|
-
onClick: handleClick
|
|
379
|
+
onClick: handleClick,
|
|
380
|
+
animation,
|
|
381
|
+
itemTransition,
|
|
382
|
+
onDraggingChange: setDragging
|
|
315
383
|
},
|
|
316
384
|
children
|
|
317
385
|
)));
|
package/dist/cjs/version.d.ts
CHANGED
package/dist/cjs/version.js
CHANGED
package/dist/esm/Form/index.d.ts
CHANGED
|
@@ -16,5 +16,5 @@ type FormInterface = typeof InternalForm & {
|
|
|
16
16
|
List: typeof List;
|
|
17
17
|
};
|
|
18
18
|
declare const Form: FormInterface;
|
|
19
|
-
export type { FieldGroupProps, FieldStatus, FieldStatusData, FormInstance, FormListProps, FormProps, ValidateMessage, } from './interface';
|
|
19
|
+
export type { FieldGroupProps, FieldStatus, FieldStatusData, FormInstance, FormListProps, FormProps, Rule as FormRule, ValidateMessage, } from './interface';
|
|
20
20
|
export default Form;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
2
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
4
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
5
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
6
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
7
|
+
import { Button, Splitter } from "../..";
|
|
8
|
+
import React from 'react';
|
|
9
|
+
export default (function () {
|
|
10
|
+
var _React$useState = React.useState(false),
|
|
11
|
+
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
12
|
+
open = _React$useState2[0],
|
|
13
|
+
setOpen = _React$useState2[1];
|
|
14
|
+
return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
|
|
15
|
+
style: {
|
|
16
|
+
marginBottom: 8
|
|
17
|
+
}
|
|
18
|
+
}, /*#__PURE__*/React.createElement(Button, {
|
|
19
|
+
type: "primary",
|
|
20
|
+
onClick: function onClick() {
|
|
21
|
+
return setOpen(function (v) {
|
|
22
|
+
return !v;
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
}, open ? 'Close Panel' : 'Open Panel')), /*#__PURE__*/React.createElement("div", {
|
|
26
|
+
style: {
|
|
27
|
+
height: 300
|
|
28
|
+
}
|
|
29
|
+
}, /*#__PURE__*/React.createElement(Splitter, {
|
|
30
|
+
animation: true
|
|
31
|
+
}, /*#__PURE__*/React.createElement(Splitter.Item, {
|
|
32
|
+
min: "30%"
|
|
33
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
34
|
+
style: {
|
|
35
|
+
padding: 16,
|
|
36
|
+
backgroundColor: '#f0f0f0'
|
|
37
|
+
}
|
|
38
|
+
}, "Content Panel")), open ?
|
|
39
|
+
/*#__PURE__*/
|
|
40
|
+
// 条件渲染的面板:挂载时从 0 展开到目标尺寸,卸载时过渡收合到 0 后移除
|
|
41
|
+
React.createElement(Splitter.Item, {
|
|
42
|
+
size: "40%",
|
|
43
|
+
min: "200px",
|
|
44
|
+
max: "60%"
|
|
45
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
46
|
+
style: {
|
|
47
|
+
padding: 16,
|
|
48
|
+
backgroundColor: '#e0e0e0'
|
|
49
|
+
}
|
|
50
|
+
}, "Assistant Panel")) : null)));
|
|
51
|
+
});
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
export default function useMove(handler: React.RefObject<HTMLDivElement | null>, direction: 'horizontal' | 'vertical', onMove: (dis: number) => void): boolean[];
|
|
2
|
+
export default function useMove(handler: React.RefObject<HTMLDivElement | null>, direction: 'horizontal' | 'vertical', onMove: (dis: number) => void, onMovingChange?: (moving: boolean) => void): boolean[];
|
|
@@ -6,7 +6,7 @@ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" !=
|
|
|
6
6
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
7
7
|
import * as React from 'react';
|
|
8
8
|
import debounce from "../../utils/debounce";
|
|
9
|
-
export default function useMove(handler, direction, onMove) {
|
|
9
|
+
export default function useMove(handler, direction, onMove, onMovingChange) {
|
|
10
10
|
var _React$useState = React.useState(false),
|
|
11
11
|
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
12
12
|
moving = _React$useState2[0],
|
|
@@ -22,6 +22,7 @@ export default function useMove(handler, direction, onMove) {
|
|
|
22
22
|
var x = e.pageX;
|
|
23
23
|
var y = e.pageY;
|
|
24
24
|
setMoving(true);
|
|
25
|
+
onMovingChange === null || onMovingChange === void 0 || onMovingChange(true);
|
|
25
26
|
var onMouseMove = debounce(function (e) {
|
|
26
27
|
document.body.style.userSelect = 'none';
|
|
27
28
|
document.body.style.cursor = direction === 'horizontal' ? 'col-resize' : 'row-resize';
|
|
@@ -37,6 +38,7 @@ export default function useMove(handler, direction, onMove) {
|
|
|
37
38
|
}, 5);
|
|
38
39
|
var onMouseUp = function onMouseUp() {
|
|
39
40
|
setMoving(false);
|
|
41
|
+
onMovingChange === null || onMovingChange === void 0 || onMovingChange(false);
|
|
40
42
|
window.removeEventListener('mousemove', onMouseMove);
|
|
41
43
|
window.removeEventListener('mouseup', onMouseUp);
|
|
42
44
|
ele.removeEventListener('mouseup', onMouseUp);
|
|
@@ -83,4 +83,10 @@ export interface SplitterProps extends DataAttributeProps {
|
|
|
83
83
|
* panel size change event
|
|
84
84
|
* */
|
|
85
85
|
onResize?: (sizes: PanelRect[]) => void;
|
|
86
|
+
/**
|
|
87
|
+
* animate programmatic size changes and panel mount/unmount with a
|
|
88
|
+
* flex-basis transition; dragging always tracks the pointer in real time
|
|
89
|
+
* @default false
|
|
90
|
+
*/
|
|
91
|
+
animation?: boolean;
|
|
86
92
|
}
|
|
@@ -17,6 +17,8 @@ interface SplitterHandlerProps {
|
|
|
17
17
|
start: HTMLDivElement;
|
|
18
18
|
end: HTMLDivElement;
|
|
19
19
|
}) => void;
|
|
20
|
+
/** 拖拽开始/结束回调(animation 模式下拖拽期间需关闭 flex-basis 过渡) */
|
|
21
|
+
onDraggingChange?: (dragging: boolean) => void;
|
|
20
22
|
}
|
|
21
|
-
declare const SplitterHandler: ({ layout, resizable, collapsible, index, records, setRecords, onClick, }: SplitterHandlerProps) => React.JSX.Element;
|
|
23
|
+
declare const SplitterHandler: ({ layout, resizable, collapsible, index, records, setRecords, onClick, onDraggingChange, }: SplitterHandlerProps) => React.JSX.Element;
|
|
22
24
|
export default SplitterHandler;
|
|
@@ -23,7 +23,8 @@ var SplitterHandler = function SplitterHandler(_ref) {
|
|
|
23
23
|
index = _ref.index,
|
|
24
24
|
records = _ref.records,
|
|
25
25
|
setRecords = _ref.setRecords,
|
|
26
|
-
onClick = _ref.onClick
|
|
26
|
+
onClick = _ref.onClick,
|
|
27
|
+
onDraggingChange = _ref.onDraggingChange;
|
|
27
28
|
// eslint-disable-line @typescript-eslint/no-unused-vars
|
|
28
29
|
var _ref2 = collapsible ? typeof collapsible === 'boolean' ? {
|
|
29
30
|
start: true,
|
|
@@ -85,7 +86,7 @@ var SplitterHandler = function SplitterHandler(_ref) {
|
|
|
85
86
|
return newState;
|
|
86
87
|
});
|
|
87
88
|
};
|
|
88
|
-
useMove(handler, layout, onMove);
|
|
89
|
+
useMove(handler, layout, onMove, onDraggingChange);
|
|
89
90
|
var handleClick = function handleClick(action) {
|
|
90
91
|
var eles = refs.current;
|
|
91
92
|
var start = eles["item".concat(index)].el;
|