@manuscripts/style-guide 3.5.23 → 3.5.26
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/README.md +2 -2
- package/dist/cjs/components/Resizer/Resizer.js +88 -90
- package/dist/cjs/components/Resizer/ResizerButton.js +40 -16
- package/dist/es/components/Resizer/Resizer.js +88 -87
- package/dist/es/components/Resizer/ResizerButton.js +7 -12
- package/dist/types/components/Resizer/Resizer.d.ts +2 -24
- package/dist/types/components/Resizer/ResizerButton.d.ts +5 -10
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Manuscripts Style Guide
|
|
2
2
|
|
|
3
|
-
React components for Manuscripts applications.
|
|
3
|
+
React components for Manuscripts applications.
|
|
4
4
|
|
|
5
5
|
## Example usage
|
|
6
6
|
|
|
@@ -18,7 +18,7 @@ const Example: React.FunctionComponent<{
|
|
|
18
18
|
|
|
19
19
|
## Development
|
|
20
20
|
|
|
21
|
-
Run `yarn build` to build the `dist` folder for distribution.
|
|
21
|
+
Run `yarn build` to build the `dist` folder for distribution.
|
|
22
22
|
|
|
23
23
|
Run `yarn dev` to automatically rebuild when a file is changed.
|
|
24
24
|
|
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.Resizer = void 0;
|
|
7
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
8
|
-
const react_1 =
|
|
5
|
+
const react_1 = require("react");
|
|
9
6
|
const ResizerButton_1 = require("./ResizerButton");
|
|
10
7
|
const ResizerInner_1 = require("./ResizerInner");
|
|
11
8
|
const inners = {
|
|
@@ -18,92 +15,93 @@ const inners = {
|
|
|
18
15
|
start: ResizerInner_1.HorizontalStartResizerInner,
|
|
19
16
|
},
|
|
20
17
|
};
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
18
|
+
const DISABLE_RESIZE_NODE_NAMES = new Set([
|
|
19
|
+
'IFRAME',
|
|
20
|
+
'HTML',
|
|
21
|
+
null,
|
|
22
|
+
]);
|
|
23
|
+
const OUT_OF_BOUNDS_OFFSET = 32;
|
|
24
|
+
const Resizer = ({ collapsed, direction, onResize, onResizeButton, onResizeEnd, side, buttonInner, }) => {
|
|
25
|
+
const resizerRef = (0, react_1.useRef)(null);
|
|
26
|
+
const [isHovering, setIsHovering] = (0, react_1.useState)(false);
|
|
27
|
+
const isResizingRef = (0, react_1.useRef)(false);
|
|
28
|
+
const startPositionRef = (0, react_1.useRef)(0);
|
|
29
|
+
const cleanupRef = (0, react_1.useRef)(null);
|
|
30
|
+
const onResizeRef = (0, react_1.useRef)(onResize);
|
|
31
|
+
const onResizeButtonRef = (0, react_1.useRef)(onResizeButton);
|
|
32
|
+
const onResizeEndRef = (0, react_1.useRef)(onResizeEnd);
|
|
33
|
+
const directionRef = (0, react_1.useRef)(direction);
|
|
34
|
+
const sideRef = (0, react_1.useRef)(side);
|
|
35
|
+
(0, react_1.useEffect)(() => {
|
|
36
|
+
onResizeRef.current = onResize;
|
|
37
|
+
onResizeButtonRef.current = onResizeButton;
|
|
38
|
+
onResizeEndRef.current = onResizeEnd;
|
|
39
|
+
directionRef.current = direction;
|
|
40
|
+
sideRef.current = side;
|
|
41
|
+
}, [onResize, onResizeButton, onResizeEnd, direction, side]);
|
|
42
|
+
const getPosition = (0, react_1.useCallback)((e) => directionRef.current === 'row' ? e.screenX : e.screenY, []);
|
|
43
|
+
const getDelta = (0, react_1.useCallback)((position) => {
|
|
44
|
+
return sideRef.current === 'end'
|
|
45
|
+
? position - startPositionRef.current
|
|
46
|
+
: startPositionRef.current - position;
|
|
47
|
+
}, []);
|
|
48
|
+
const detachListeners = (0, react_1.useCallback)(() => {
|
|
49
|
+
if (cleanupRef.current) {
|
|
50
|
+
cleanupRef.current();
|
|
51
|
+
cleanupRef.current = null;
|
|
52
|
+
}
|
|
53
|
+
}, []);
|
|
54
|
+
(0, react_1.useEffect)(() => {
|
|
55
|
+
return () => detachListeners();
|
|
56
|
+
}, [detachListeners]);
|
|
57
|
+
const mouseUpHandler = (0, react_1.useCallback)((e, outOfBounds = false) => {
|
|
58
|
+
detachListeners();
|
|
59
|
+
isResizingRef.current = false;
|
|
60
|
+
const position = getPosition(e);
|
|
61
|
+
const adjustedPosition = outOfBounds
|
|
62
|
+
? position - OUT_OF_BOUNDS_OFFSET
|
|
63
|
+
: position;
|
|
64
|
+
const delta = getDelta(adjustedPosition);
|
|
65
|
+
if (delta === 0) {
|
|
66
|
+
onResizeButtonRef.current();
|
|
67
|
+
}
|
|
68
|
+
onResizeRef.current(delta);
|
|
69
|
+
onResizeEndRef.current(delta);
|
|
70
|
+
}, [detachListeners, getPosition, getDelta]);
|
|
71
|
+
const mouseMoveHandler = (0, react_1.useCallback)((e) => {
|
|
72
|
+
if (isResizingRef.current) {
|
|
73
|
+
const delta = getDelta(getPosition(e));
|
|
74
|
+
if (delta) {
|
|
75
|
+
onResizeRef.current(delta);
|
|
39
76
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
this.props.onResizeEnd(delta);
|
|
66
|
-
};
|
|
67
|
-
this.mouseMoveHandler = (e) => {
|
|
68
|
-
const position = this.getPosition(e);
|
|
69
|
-
const delta = this.getDelta(position);
|
|
70
|
-
this.scheduleResize(delta);
|
|
77
|
+
}
|
|
78
|
+
}, [getPosition, getDelta]);
|
|
79
|
+
const handleOutOfBounds = (0, react_1.useCallback)((e) => {
|
|
80
|
+
if (isResizingRef.current &&
|
|
81
|
+
DISABLE_RESIZE_NODE_NAMES.has(e.relatedTarget ? e.relatedTarget.nodeName : null)) {
|
|
82
|
+
mouseUpHandler(e, true);
|
|
83
|
+
}
|
|
84
|
+
}, [mouseUpHandler]);
|
|
85
|
+
const mouseDownHandler = (0, react_1.useCallback)((e) => {
|
|
86
|
+
e.preventDefault();
|
|
87
|
+
if (!resizerRef.current || e.target !== resizerRef.current) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
if (isResizingRef.current) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
isResizingRef.current = true;
|
|
94
|
+
startPositionRef.current = getPosition(e);
|
|
95
|
+
window.addEventListener('mousemove', mouseMoveHandler);
|
|
96
|
+
window.addEventListener('mouseup', mouseUpHandler);
|
|
97
|
+
window.addEventListener('mouseout', handleOutOfBounds);
|
|
98
|
+
cleanupRef.current = () => {
|
|
99
|
+
window.removeEventListener('mousemove', mouseMoveHandler);
|
|
100
|
+
window.removeEventListener('mouseup', mouseUpHandler);
|
|
101
|
+
window.removeEventListener('mouseout', handleOutOfBounds);
|
|
71
102
|
};
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
};
|
|
77
|
-
this.mouseLeaveHandler = () => {
|
|
78
|
-
this.setState({
|
|
79
|
-
isHovering: false,
|
|
80
|
-
});
|
|
81
|
-
};
|
|
82
|
-
this.handleOutofBounds = (e) => {
|
|
83
|
-
const disableResizeNodes = [
|
|
84
|
-
'IFRAME',
|
|
85
|
-
'HTML',
|
|
86
|
-
null,
|
|
87
|
-
];
|
|
88
|
-
if (this.state.isResizing &&
|
|
89
|
-
disableResizeNodes.includes(e.relatedTarget && e.relatedTarget.nodeName)) {
|
|
90
|
-
this.mouseUpHandler(e, true);
|
|
91
|
-
}
|
|
92
|
-
};
|
|
93
|
-
this.getDelta = (delta) => {
|
|
94
|
-
const { startPosition } = this.state;
|
|
95
|
-
return this.props.side === 'end'
|
|
96
|
-
? delta - startPosition
|
|
97
|
-
: startPosition - delta;
|
|
98
|
-
};
|
|
99
|
-
this.getPosition = (e) => {
|
|
100
|
-
return this.props.direction === 'row' ? e.screenX : e.screenY;
|
|
101
|
-
};
|
|
102
|
-
}
|
|
103
|
-
render() {
|
|
104
|
-
const { buttonInner, direction, side } = this.props;
|
|
105
|
-
const ResizerInner = inners[direction][side];
|
|
106
|
-
return ((0, jsx_runtime_1.jsx)(ResizerInner, { ref: this.resizerRef, onMouseDown: this.mouseDownHandler, onMouseEnter: this.mouseEnterHandler, onMouseLeave: this.mouseLeaveHandler, children: (0, jsx_runtime_1.jsx)(ResizerButton_1.ResizerButton, { direction: direction, isCollapsed: this.props.collapsed, isVisible: this.state.isHovering, onClick: this.props.onResizeButton, side: side, buttonInner: buttonInner }) }));
|
|
107
|
-
}
|
|
108
|
-
}
|
|
103
|
+
}, [getPosition, mouseMoveHandler, mouseUpHandler, handleOutOfBounds]);
|
|
104
|
+
const ResizerInner = inners[direction][side];
|
|
105
|
+
return ((0, jsx_runtime_1.jsx)(ResizerInner, { ref: resizerRef, onMouseDown: mouseDownHandler, onMouseEnter: () => setIsHovering(true), onMouseLeave: () => setIsHovering(false), children: (0, jsx_runtime_1.jsx)(ResizerButton_1.ResizerButton, { direction: direction, isCollapsed: collapsed, isVisible: isHovering, onClick: onResizeButton, side: side, buttonInner: buttonInner }) }));
|
|
106
|
+
};
|
|
109
107
|
exports.Resizer = Resizer;
|
|
@@ -1,11 +1,41 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
5
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
36
|
exports.ResizerButton = void 0;
|
|
7
37
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
8
|
-
const react_1 =
|
|
38
|
+
const react_1 = __importStar(require("react"));
|
|
9
39
|
const ResizerButtonInner_1 = require("./ResizerButtonInner");
|
|
10
40
|
const inners = {
|
|
11
41
|
column: {
|
|
@@ -17,15 +47,9 @@ const inners = {
|
|
|
17
47
|
start: ResizerButtonInner_1.HorizontalStartResizerButtonInner,
|
|
18
48
|
},
|
|
19
49
|
};
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}
|
|
27
|
-
exports.ResizerButton = ResizerButton;
|
|
28
|
-
ResizerButton.defaultProps = {
|
|
29
|
-
isCollapsed: false,
|
|
30
|
-
isVisible: false,
|
|
31
|
-
};
|
|
50
|
+
exports.ResizerButton = react_1.default.memo(({ buttonInner, direction, side, isCollapsed = false, isVisible = false, onClick, }) => {
|
|
51
|
+
const preventMouseDown = (0, react_1.useCallback)((event) => event.preventDefault(), []);
|
|
52
|
+
const ResizerButtonInner = buttonInner || inners[direction][side];
|
|
53
|
+
return ((0, jsx_runtime_1.jsx)(ResizerButtonInner, { "aria-expanded": !isCollapsed, isCollapsed: isCollapsed, isVisible: isVisible, onClick: onClick, onMouseDown: preventMouseDown, tabIndex: 0 }));
|
|
54
|
+
});
|
|
55
|
+
exports.ResizerButton.displayName = 'ResizerButton';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import
|
|
2
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
3
3
|
import { ResizerButton } from './ResizerButton';
|
|
4
4
|
import { HorizontalEndResizerInner, HorizontalStartResizerInner, VerticalEndResizerInner, VerticalStartResizerInner, } from './ResizerInner';
|
|
5
5
|
const inners = {
|
|
@@ -12,91 +12,92 @@ const inners = {
|
|
|
12
12
|
start: HorizontalStartResizerInner,
|
|
13
13
|
},
|
|
14
14
|
};
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
isHovering: false,
|
|
74
|
-
});
|
|
75
|
-
};
|
|
76
|
-
this.handleOutofBounds = (e) => {
|
|
77
|
-
const disableResizeNodes = [
|
|
78
|
-
'IFRAME',
|
|
79
|
-
'HTML',
|
|
80
|
-
null,
|
|
81
|
-
];
|
|
82
|
-
if (this.state.isResizing &&
|
|
83
|
-
disableResizeNodes.includes(e.relatedTarget && e.relatedTarget.nodeName)) {
|
|
84
|
-
this.mouseUpHandler(e, true);
|
|
15
|
+
const DISABLE_RESIZE_NODE_NAMES = new Set([
|
|
16
|
+
'IFRAME',
|
|
17
|
+
'HTML',
|
|
18
|
+
null,
|
|
19
|
+
]);
|
|
20
|
+
const OUT_OF_BOUNDS_OFFSET = 32;
|
|
21
|
+
export const Resizer = ({ collapsed, direction, onResize, onResizeButton, onResizeEnd, side, buttonInner, }) => {
|
|
22
|
+
const resizerRef = useRef(null);
|
|
23
|
+
const [isHovering, setIsHovering] = useState(false);
|
|
24
|
+
const isResizingRef = useRef(false);
|
|
25
|
+
const startPositionRef = useRef(0);
|
|
26
|
+
const cleanupRef = useRef(null);
|
|
27
|
+
const onResizeRef = useRef(onResize);
|
|
28
|
+
const onResizeButtonRef = useRef(onResizeButton);
|
|
29
|
+
const onResizeEndRef = useRef(onResizeEnd);
|
|
30
|
+
const directionRef = useRef(direction);
|
|
31
|
+
const sideRef = useRef(side);
|
|
32
|
+
useEffect(() => {
|
|
33
|
+
onResizeRef.current = onResize;
|
|
34
|
+
onResizeButtonRef.current = onResizeButton;
|
|
35
|
+
onResizeEndRef.current = onResizeEnd;
|
|
36
|
+
directionRef.current = direction;
|
|
37
|
+
sideRef.current = side;
|
|
38
|
+
}, [onResize, onResizeButton, onResizeEnd, direction, side]);
|
|
39
|
+
const getPosition = useCallback((e) => directionRef.current === 'row' ? e.screenX : e.screenY, []);
|
|
40
|
+
const getDelta = useCallback((position) => {
|
|
41
|
+
return sideRef.current === 'end'
|
|
42
|
+
? position - startPositionRef.current
|
|
43
|
+
: startPositionRef.current - position;
|
|
44
|
+
}, []);
|
|
45
|
+
const detachListeners = useCallback(() => {
|
|
46
|
+
if (cleanupRef.current) {
|
|
47
|
+
cleanupRef.current();
|
|
48
|
+
cleanupRef.current = null;
|
|
49
|
+
}
|
|
50
|
+
}, []);
|
|
51
|
+
useEffect(() => {
|
|
52
|
+
return () => detachListeners();
|
|
53
|
+
}, [detachListeners]);
|
|
54
|
+
const mouseUpHandler = useCallback((e, outOfBounds = false) => {
|
|
55
|
+
detachListeners();
|
|
56
|
+
isResizingRef.current = false;
|
|
57
|
+
const position = getPosition(e);
|
|
58
|
+
const adjustedPosition = outOfBounds
|
|
59
|
+
? position - OUT_OF_BOUNDS_OFFSET
|
|
60
|
+
: position;
|
|
61
|
+
const delta = getDelta(adjustedPosition);
|
|
62
|
+
if (delta === 0) {
|
|
63
|
+
onResizeButtonRef.current();
|
|
64
|
+
}
|
|
65
|
+
onResizeRef.current(delta);
|
|
66
|
+
onResizeEndRef.current(delta);
|
|
67
|
+
}, [detachListeners, getPosition, getDelta]);
|
|
68
|
+
const mouseMoveHandler = useCallback((e) => {
|
|
69
|
+
if (isResizingRef.current) {
|
|
70
|
+
const delta = getDelta(getPosition(e));
|
|
71
|
+
if (delta) {
|
|
72
|
+
onResizeRef.current(delta);
|
|
85
73
|
}
|
|
74
|
+
}
|
|
75
|
+
}, [getPosition, getDelta]);
|
|
76
|
+
const handleOutOfBounds = useCallback((e) => {
|
|
77
|
+
if (isResizingRef.current &&
|
|
78
|
+
DISABLE_RESIZE_NODE_NAMES.has(e.relatedTarget ? e.relatedTarget.nodeName : null)) {
|
|
79
|
+
mouseUpHandler(e, true);
|
|
80
|
+
}
|
|
81
|
+
}, [mouseUpHandler]);
|
|
82
|
+
const mouseDownHandler = useCallback((e) => {
|
|
83
|
+
e.preventDefault();
|
|
84
|
+
if (!resizerRef.current || e.target !== resizerRef.current) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
if (isResizingRef.current) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
isResizingRef.current = true;
|
|
91
|
+
startPositionRef.current = getPosition(e);
|
|
92
|
+
window.addEventListener('mousemove', mouseMoveHandler);
|
|
93
|
+
window.addEventListener('mouseup', mouseUpHandler);
|
|
94
|
+
window.addEventListener('mouseout', handleOutOfBounds);
|
|
95
|
+
cleanupRef.current = () => {
|
|
96
|
+
window.removeEventListener('mousemove', mouseMoveHandler);
|
|
97
|
+
window.removeEventListener('mouseup', mouseUpHandler);
|
|
98
|
+
window.removeEventListener('mouseout', handleOutOfBounds);
|
|
86
99
|
};
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
: startPosition - delta;
|
|
92
|
-
};
|
|
93
|
-
this.getPosition = (e) => {
|
|
94
|
-
return this.props.direction === 'row' ? e.screenX : e.screenY;
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
render() {
|
|
98
|
-
const { buttonInner, direction, side } = this.props;
|
|
99
|
-
const ResizerInner = inners[direction][side];
|
|
100
|
-
return (_jsx(ResizerInner, { ref: this.resizerRef, onMouseDown: this.mouseDownHandler, onMouseEnter: this.mouseEnterHandler, onMouseLeave: this.mouseLeaveHandler, children: _jsx(ResizerButton, { direction: direction, isCollapsed: this.props.collapsed, isVisible: this.state.isHovering, onClick: this.props.onResizeButton, side: side, buttonInner: buttonInner }) }));
|
|
101
|
-
}
|
|
102
|
-
}
|
|
100
|
+
}, [getPosition, mouseMoveHandler, mouseUpHandler, handleOutOfBounds]);
|
|
101
|
+
const ResizerInner = inners[direction][side];
|
|
102
|
+
return (_jsx(ResizerInner, { ref: resizerRef, onMouseDown: mouseDownHandler, onMouseEnter: () => setIsHovering(true), onMouseLeave: () => setIsHovering(false), children: _jsx(ResizerButton, { direction: direction, isCollapsed: collapsed, isVisible: isHovering, onClick: onResizeButton, side: side, buttonInner: buttonInner }) }));
|
|
103
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import React from 'react';
|
|
2
|
+
import React, { useCallback } from 'react';
|
|
3
3
|
import { HorizontalEndResizerButtonInner, HorizontalStartResizerButtonInner, VerticalEndResizerButtonInner, VerticalStartResizerButtonInner, } from './ResizerButtonInner';
|
|
4
4
|
const inners = {
|
|
5
5
|
column: {
|
|
@@ -11,14 +11,9 @@ const inners = {
|
|
|
11
11
|
start: HorizontalStartResizerButtonInner,
|
|
12
12
|
},
|
|
13
13
|
};
|
|
14
|
-
export
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}
|
|
21
|
-
ResizerButton.defaultProps = {
|
|
22
|
-
isCollapsed: false,
|
|
23
|
-
isVisible: false,
|
|
24
|
-
};
|
|
14
|
+
export const ResizerButton = React.memo(({ buttonInner, direction, side, isCollapsed = false, isVisible = false, onClick, }) => {
|
|
15
|
+
const preventMouseDown = useCallback((event) => event.preventDefault(), []);
|
|
16
|
+
const ResizerButtonInner = buttonInner || inners[direction][side];
|
|
17
|
+
return (_jsx(ResizerButtonInner, { "aria-expanded": !isCollapsed, isCollapsed: isCollapsed, isVisible: isVisible, onClick: onClick, onMouseDown: preventMouseDown, tabIndex: 0 }));
|
|
18
|
+
});
|
|
19
|
+
ResizerButton.displayName = 'ResizerButton';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { ResizerButtonInnerProps } from './ResizerButtonInner';
|
|
3
3
|
import { ResizerDirection, ResizerSide } from './types';
|
|
4
|
-
interface
|
|
4
|
+
interface ResizerProps {
|
|
5
5
|
collapsed: boolean;
|
|
6
6
|
direction: ResizerDirection;
|
|
7
7
|
onResize: (resizeDelta: number) => void;
|
|
@@ -10,27 +10,5 @@ interface Props {
|
|
|
10
10
|
side: ResizerSide;
|
|
11
11
|
buttonInner?: React.ComponentType<ResizerButtonInnerProps>;
|
|
12
12
|
}
|
|
13
|
-
|
|
14
|
-
isHovering: boolean;
|
|
15
|
-
isResizing: boolean;
|
|
16
|
-
startPosition: number;
|
|
17
|
-
}
|
|
18
|
-
export declare class Resizer extends React.Component<Props, State> {
|
|
19
|
-
resizerRef: React.RefObject<HTMLDivElement | null>;
|
|
20
|
-
state: {
|
|
21
|
-
isHovering: boolean;
|
|
22
|
-
isResizing: boolean;
|
|
23
|
-
startPosition: number;
|
|
24
|
-
};
|
|
25
|
-
render(): import("react/jsx-runtime").JSX.Element;
|
|
26
|
-
private scheduleResize;
|
|
27
|
-
private mouseDownHandler;
|
|
28
|
-
private mouseUpHandler;
|
|
29
|
-
private mouseMoveHandler;
|
|
30
|
-
private mouseEnterHandler;
|
|
31
|
-
private mouseLeaveHandler;
|
|
32
|
-
private handleOutofBounds;
|
|
33
|
-
private getDelta;
|
|
34
|
-
private getPosition;
|
|
35
|
-
}
|
|
13
|
+
export declare const Resizer: React.FC<ResizerProps>;
|
|
36
14
|
export {};
|
|
@@ -1,18 +1,13 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { ResizerButtonInnerProps } from './ResizerButtonInner';
|
|
3
3
|
import { ResizerDirection, ResizerSide } from './types';
|
|
4
|
-
interface
|
|
4
|
+
interface ResizerButtonProps {
|
|
5
5
|
direction: ResizerDirection;
|
|
6
|
-
isCollapsed
|
|
7
|
-
isVisible
|
|
6
|
+
isCollapsed?: boolean;
|
|
7
|
+
isVisible?: boolean;
|
|
8
|
+
onClick?: React.MouseEventHandler;
|
|
8
9
|
side: ResizerSide;
|
|
9
10
|
buttonInner?: React.ComponentType<ResizerButtonInnerProps>;
|
|
10
11
|
}
|
|
11
|
-
export declare
|
|
12
|
-
static defaultProps: {
|
|
13
|
-
isCollapsed: boolean;
|
|
14
|
-
isVisible: boolean;
|
|
15
|
-
};
|
|
16
|
-
render(): import("react/jsx-runtime").JSX.Element;
|
|
17
|
-
}
|
|
12
|
+
export declare const ResizerButton: React.FC<ResizerButtonProps>;
|
|
18
13
|
export {};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@manuscripts/style-guide",
|
|
3
3
|
"description": "Shared components for Manuscripts applications",
|
|
4
|
-
"version": "3.5.
|
|
4
|
+
"version": "3.5.26",
|
|
5
5
|
"repository": "github:Atypon-OpenSource/manuscripts-style-guide",
|
|
6
6
|
"license": "Apache-2.0",
|
|
7
7
|
"main": "dist/cjs",
|
|
@@ -107,6 +107,6 @@
|
|
|
107
107
|
"typescript": "5.9.2"
|
|
108
108
|
},
|
|
109
109
|
"engines": {
|
|
110
|
-
"node": ">=
|
|
110
|
+
"node": ">=22"
|
|
111
111
|
}
|
|
112
112
|
}
|