@pie-lib/tools 0.29.2-next.0 → 0.29.2-next.164
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/CHANGELOG.md +7 -70
- package/esm/index.css +847 -0
- package/esm/index.js +13155 -0
- package/esm/index.js.map +1 -0
- package/esm/package.json +3 -0
- package/lib/anchor-utils.js +18 -74
- package/lib/anchor-utils.js.map +1 -1
- package/lib/anchor.js +20 -28
- package/lib/anchor.js.map +1 -1
- package/lib/index.js +1 -11
- package/lib/index.js.map +1 -1
- package/lib/protractor/graphic.js +68 -105
- package/lib/protractor/graphic.js.map +1 -1
- package/lib/protractor/index.js +35 -65
- package/lib/protractor/index.js.map +1 -1
- package/lib/rotatable.js +73 -141
- package/lib/rotatable.js.map +1 -1
- package/lib/ruler/graphic.js +29 -66
- package/lib/ruler/graphic.js.map +1 -1
- package/lib/ruler/index.js +43 -75
- package/lib/ruler/index.js.map +1 -1
- package/lib/ruler/unit-type.js +19 -36
- package/lib/ruler/unit-type.js.map +1 -1
- package/lib/ruler/unit.js +51 -88
- package/lib/ruler/unit.js.map +1 -1
- package/lib/style-utils.js +2 -9
- package/lib/style-utils.js.map +1 -1
- package/lib/transform-origin.js +2 -13
- package/lib/transform-origin.js.map +1 -1
- package/package.json +20 -10
- package/src/__tests__/rotatable.test.jsx +84 -41
- package/src/anchor.jsx +15 -16
- package/src/protractor/__tests__/graphic.test.jsx +57 -6
- package/src/protractor/__tests__/index.test.jsx +58 -6
- package/src/protractor/graphic.jsx +49 -54
- package/src/protractor/index.jsx +24 -22
- package/src/rotatable.jsx +23 -28
- package/src/ruler/__tests__/graphic.test.jsx +57 -16
- package/src/ruler/__tests__/index.test.jsx +70 -12
- package/src/ruler/__tests__/unit-type.test.jsx +59 -6
- package/src/ruler/__tests__/unit.test.jsx +61 -8
- package/src/ruler/graphic.jsx +11 -14
- package/src/ruler/index.jsx +25 -28
- package/src/ruler/unit-type.jsx +10 -9
- package/src/ruler/unit.jsx +25 -29
- package/src/__tests__/__snapshots__/rotatable.test.jsx.snap +0 -37
- package/src/protractor/__tests__/__snapshots__/graphic.test.jsx.snap +0 -1234
- package/src/protractor/__tests__/__snapshots__/index.test.jsx.snap +0 -40
- package/src/ruler/__tests__/__snapshots__/graphic.test.jsx.snap +0 -160
- package/src/ruler/__tests__/__snapshots__/index.test.jsx.snap +0 -45
- package/src/ruler/__tests__/__snapshots__/unit-type.test.jsx.snap +0 -12
- package/src/ruler/__tests__/__snapshots__/unit.test.jsx.snap +0 -30
package/lib/ruler/unit.js
CHANGED
|
@@ -1,69 +1,49 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports["default"] = exports.Unit = void 0;
|
|
9
|
-
|
|
10
8
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
|
-
|
|
12
9
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
13
|
-
|
|
14
|
-
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
15
|
-
|
|
16
10
|
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
17
|
-
|
|
18
11
|
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
19
|
-
|
|
12
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
20
13
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
21
|
-
|
|
22
14
|
var _react = _interopRequireDefault(require("react"));
|
|
23
|
-
|
|
24
15
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
25
|
-
|
|
26
|
-
var _styles = require("@material-ui/core/styles");
|
|
27
|
-
|
|
16
|
+
var _styles = require("@mui/material/styles");
|
|
28
17
|
var _styleUtils = require("../style-utils");
|
|
29
|
-
|
|
30
18
|
var _range = _interopRequireDefault(require("lodash/range"));
|
|
31
|
-
|
|
32
|
-
function
|
|
33
|
-
|
|
34
|
-
function _objectSpread(
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
39
|
-
|
|
40
|
-
var Tick = (0, _styles.withStyles)(function (theme) {
|
|
19
|
+
function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
|
|
20
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
21
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
22
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
23
|
+
var StyledTick = (0, _styles.styled)('line')(function (_ref) {
|
|
24
|
+
var theme = _ref.theme;
|
|
41
25
|
return {
|
|
42
|
-
|
|
43
|
-
stroke: (0, _styleUtils.strokeColor)(theme)
|
|
44
|
-
}
|
|
26
|
+
stroke: (0, _styleUtils.strokeColor)(theme)
|
|
45
27
|
};
|
|
46
|
-
})
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
28
|
+
});
|
|
29
|
+
var Tick = function Tick(_ref2) {
|
|
30
|
+
var x = _ref2.x,
|
|
31
|
+
height = _ref2.height,
|
|
32
|
+
bottom = _ref2.bottom,
|
|
33
|
+
major = _ref2.major,
|
|
34
|
+
minor = _ref2.minor;
|
|
53
35
|
var y1 = major ? bottom - height * 2 : minor ? bottom - height * 1.5 : bottom - height;
|
|
54
|
-
return /*#__PURE__*/_react["default"].createElement(
|
|
36
|
+
return /*#__PURE__*/_react["default"].createElement(StyledTick, {
|
|
55
37
|
y1: y1,
|
|
56
38
|
y2: bottom,
|
|
57
39
|
x1: x,
|
|
58
|
-
x2: x
|
|
59
|
-
className: classes.tick
|
|
40
|
+
x2: x
|
|
60
41
|
});
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
var
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
height = _ref2.height;
|
|
42
|
+
};
|
|
43
|
+
var Ticks = function Ticks(_ref3) {
|
|
44
|
+
var count = _ref3.count,
|
|
45
|
+
width = _ref3.width,
|
|
46
|
+
height = _ref3.height;
|
|
67
47
|
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, (0, _range["default"])(1, count).map(function (r) {
|
|
68
48
|
return /*#__PURE__*/_react["default"].createElement(Tick, {
|
|
69
49
|
key: r,
|
|
@@ -76,86 +56,69 @@ var Ticks = function Ticks(_ref2) {
|
|
|
76
56
|
});
|
|
77
57
|
}));
|
|
78
58
|
};
|
|
79
|
-
|
|
80
59
|
Ticks.propTypes = {
|
|
81
60
|
count: _propTypes["default"].number.isRequired,
|
|
82
61
|
width: _propTypes["default"].number.isRequired,
|
|
83
62
|
height: _propTypes["default"].number.isRequired
|
|
84
63
|
};
|
|
85
|
-
|
|
86
|
-
var
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
64
|
+
var StyledEndTick = (0, _styles.styled)('line')(function (_ref4) {
|
|
65
|
+
var theme = _ref4.theme;
|
|
66
|
+
return {
|
|
67
|
+
stroke: (0, _styleUtils.strokeColor)(theme),
|
|
68
|
+
strokeWidth: 1
|
|
69
|
+
};
|
|
70
|
+
});
|
|
71
|
+
var StyledLabel = (0, _styles.styled)('text')(function (_ref5) {
|
|
72
|
+
var theme = _ref5.theme;
|
|
73
|
+
return _objectSpread({
|
|
74
|
+
textAnchor: 'end',
|
|
75
|
+
fontSize: '12px',
|
|
76
|
+
fill: (0, _styleUtils.strokeColor)(theme)
|
|
77
|
+
}, (0, _styleUtils.noSelect)());
|
|
78
|
+
});
|
|
79
|
+
var Unit = exports.Unit = /*#__PURE__*/function (_React$Component) {
|
|
91
80
|
function Unit() {
|
|
92
81
|
(0, _classCallCheck2["default"])(this, Unit);
|
|
93
|
-
return
|
|
82
|
+
return _callSuper(this, Unit, arguments);
|
|
94
83
|
}
|
|
95
|
-
|
|
96
|
-
(0, _createClass2["default"])(Unit, [{
|
|
84
|
+
(0, _inherits2["default"])(Unit, _React$Component);
|
|
85
|
+
return (0, _createClass2["default"])(Unit, [{
|
|
97
86
|
key: "render",
|
|
98
87
|
value: function render() {
|
|
99
88
|
var _this$props = this.props,
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
config = _this$props.config;
|
|
89
|
+
index = _this$props.index,
|
|
90
|
+
width = _this$props.width,
|
|
91
|
+
height = _this$props.height,
|
|
92
|
+
last = _this$props.last,
|
|
93
|
+
config = _this$props.config;
|
|
106
94
|
var style = {
|
|
107
95
|
transform: "translate(".concat(width * (index - 1), "px, 0px)")
|
|
108
96
|
};
|
|
109
97
|
return /*#__PURE__*/_react["default"].createElement("g", {
|
|
110
98
|
style: style
|
|
111
|
-
}, !last && /*#__PURE__*/_react["default"].createElement(
|
|
99
|
+
}, !last && /*#__PURE__*/_react["default"].createElement(StyledEndTick, {
|
|
112
100
|
x1: width,
|
|
113
101
|
y1: 0,
|
|
114
102
|
x2: width,
|
|
115
|
-
y2: height
|
|
116
|
-
className: classes.endTick
|
|
103
|
+
y2: height
|
|
117
104
|
}), /*#__PURE__*/_react["default"].createElement(Ticks, {
|
|
118
105
|
count: config.ticks,
|
|
119
106
|
width: width,
|
|
120
107
|
height: height
|
|
121
|
-
}), /*#__PURE__*/_react["default"].createElement(
|
|
108
|
+
}), /*#__PURE__*/_react["default"].createElement(StyledLabel, {
|
|
122
109
|
width: width,
|
|
123
|
-
className: classes.label,
|
|
124
110
|
x: width - 5,
|
|
125
111
|
y: 15
|
|
126
112
|
}, index));
|
|
127
113
|
}
|
|
128
114
|
}]);
|
|
129
|
-
return Unit;
|
|
130
115
|
}(_react["default"].Component);
|
|
131
|
-
|
|
132
|
-
exports.Unit = Unit;
|
|
133
116
|
(0, _defineProperty2["default"])(Unit, "propTypes", {
|
|
134
117
|
index: _propTypes["default"].number.isRequired,
|
|
135
118
|
width: _propTypes["default"].number.isRequired,
|
|
136
119
|
height: _propTypes["default"].number.isRequired,
|
|
137
|
-
classes: _propTypes["default"].object.isRequired,
|
|
138
120
|
last: _propTypes["default"].bool.isRequired,
|
|
139
121
|
config: _propTypes["default"].object.isRequired
|
|
140
122
|
});
|
|
141
|
-
|
|
142
|
-
var _default = (0, _styles.withStyles)(function (theme) {
|
|
143
|
-
return {
|
|
144
|
-
endTick: {
|
|
145
|
-
stroke: (0, _styleUtils.strokeColor)(theme),
|
|
146
|
-
strokeWidth: 1
|
|
147
|
-
},
|
|
148
|
-
label: _objectSpread({
|
|
149
|
-
textAnchor: 'end',
|
|
150
|
-
fontSize: '12px',
|
|
151
|
-
fill: (0, _styleUtils.strokeColor)(theme)
|
|
152
|
-
}, (0, _styleUtils.noSelect)()),
|
|
153
|
-
base: {
|
|
154
|
-
fill: 'none',
|
|
155
|
-
stroke: 'red'
|
|
156
|
-
}
|
|
157
|
-
};
|
|
158
|
-
})(Unit);
|
|
159
|
-
|
|
160
|
-
exports["default"] = _default;
|
|
123
|
+
var _default = exports["default"] = Unit;
|
|
161
124
|
//# sourceMappingURL=unit.js.map
|
package/lib/ruler/unit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"unit.js","names":["_react","_interopRequireDefault","require","_propTypes","_styles","_styleUtils","_range","_callSuper","t","o","e","_getPrototypeOf2","_possibleConstructorReturn2","_isNativeReflectConstruct","Reflect","construct","constructor","apply","Boolean","prototype","valueOf","call","ownKeys","r","Object","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","enumerable","push","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","StyledTick","styled","_ref","theme","stroke","strokeColor","Tick","_ref2","x","height","bottom","major","minor","y1","createElement","y2","x1","x2","Ticks","_ref3","count","width","Fragment","range","map","key","value","propTypes","PropTypes","number","isRequired","StyledEndTick","_ref4","strokeWidth","StyledLabel","_ref5","textAnchor","fontSize","fill","noSelect","Unit","exports","_React$Component","_classCallCheck2","_inherits2","_createClass2","render","_this$props","props","index","last","config","style","transform","concat","ticks","y","React","Component","bool","object","_default"],"sources":["../../src/ruler/unit.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { styled } from '@mui/material/styles';\nimport { noSelect, strokeColor } from '../style-utils';\nimport range from 'lodash/range';\n\nconst StyledTick = styled('line')(({ theme }) => ({\n stroke: strokeColor(theme),\n}));\n\nconst Tick = ({ x, height, bottom, major, minor }) => {\n const y1 = major ? bottom - height * 2 : minor ? bottom - height * 1.5 : bottom - height;\n\n return <StyledTick y1={y1} y2={bottom} x1={x} x2={x} />;\n};\n\nconst Ticks = ({ count, width, height }) => {\n return (\n <React.Fragment>\n {range(1, count).map((r) => {\n return (\n <Tick\n key={r}\n value={r}\n x={r * (width / count)}\n major={r % (count / 2) === 0}\n minor={r % (count / 4) === 0}\n bottom={height}\n height={10}\n />\n );\n })}\n </React.Fragment>\n );\n};\n\nTicks.propTypes = {\n count: PropTypes.number.isRequired,\n width: PropTypes.number.isRequired,\n height: PropTypes.number.isRequired,\n};\n\nconst StyledEndTick = styled('line')(({ theme }) => ({\n stroke: strokeColor(theme),\n strokeWidth: 1,\n}));\n\nconst StyledLabel = styled('text')(({ theme }) => ({\n textAnchor: 'end',\n fontSize: '12px',\n fill: strokeColor(theme),\n ...noSelect(),\n}));\n\nexport class Unit extends React.Component {\n static propTypes = {\n index: PropTypes.number.isRequired,\n width: PropTypes.number.isRequired,\n height: PropTypes.number.isRequired,\n last: PropTypes.bool.isRequired,\n config: PropTypes.object.isRequired,\n };\n\n render() {\n const { index, width, height, last, config } = this.props;\n\n const style = {\n transform: `translate(${width * (index - 1)}px, 0px)`,\n };\n return (\n <g style={style}>\n {!last && <StyledEndTick x1={width} y1={0} x2={width} y2={height} />}\n\n <Ticks count={config.ticks} width={width} height={height} />\n <StyledLabel width={width} x={width - 5} y={15}>\n {index}\n </StyledLabel>\n </g>\n );\n }\n}\n\nexport default Unit;\n"],"mappings":"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","ignoreList":[]}
|
package/lib/style-utils.js
CHANGED
|
@@ -11,18 +11,11 @@ Object.defineProperty(exports, "noSelect", {
|
|
|
11
11
|
}
|
|
12
12
|
});
|
|
13
13
|
exports.strokeColor = void 0;
|
|
14
|
-
|
|
15
14
|
var _styleUtils = require("@pie-lib/style-utils");
|
|
16
|
-
|
|
17
|
-
var strokeColor = function strokeColor(theme) {
|
|
15
|
+
var strokeColor = exports.strokeColor = function strokeColor(theme) {
|
|
18
16
|
return "var(--ruler-stroke, ".concat(theme.palette.primary.main, ")");
|
|
19
17
|
};
|
|
20
|
-
|
|
21
|
-
exports.strokeColor = strokeColor;
|
|
22
|
-
|
|
23
|
-
var fillColor = function fillColor(theme) {
|
|
18
|
+
var fillColor = exports.fillColor = function fillColor(theme) {
|
|
24
19
|
return "var(--ruler-bg, ".concat(theme.palette.primary.contrastText, ")");
|
|
25
20
|
};
|
|
26
|
-
|
|
27
|
-
exports.fillColor = fillColor;
|
|
28
21
|
//# sourceMappingURL=style-utils.js.map
|
package/lib/style-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"style-utils.js","names":["_styleUtils","require","strokeColor","exports","theme","concat","palette","primary","main","fillColor","contrastText"],"sources":["../src/style-utils.js"],"sourcesContent":["import { noSelect } from '@pie-lib/style-utils';\n\nexport { noSelect };\n\nexport const strokeColor = (theme) => `var(--ruler-stroke, ${theme.palette.primary.main})`;\n\nexport const fillColor = (theme) => `var(--ruler-bg, ${theme.palette.primary.contrastText})`;\n"],"mappings":";;;;;;;;;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AAIO,IAAMC,WAAW,GAAAC,OAAA,CAAAD,WAAA,GAAG,SAAdA,WAAWA,CAAIE,KAAK;EAAA,8BAAAC,MAAA,CAA4BD,KAAK,CAACE,OAAO,CAACC,OAAO,CAACC,IAAI;AAAA,CAAG;AAEnF,IAAMC,SAAS,GAAAN,OAAA,CAAAM,SAAA,GAAG,SAAZA,SAASA,CAAIL,KAAK;EAAA,0BAAAC,MAAA,CAAwBD,KAAK,CAACE,OAAO,CAACC,OAAO,CAACG,YAAY;AAAA,CAAG","ignoreList":[]}
|
package/lib/transform-origin.js
CHANGED
|
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.parse = void 0;
|
|
7
|
-
|
|
8
7
|
var keyWordToPercent = function keyWordToPercent(v) {
|
|
9
8
|
if (v === 'left' || v === 'top') {
|
|
10
9
|
return 0;
|
|
@@ -18,7 +17,6 @@ var keyWordToPercent = function keyWordToPercent(v) {
|
|
|
18
17
|
return v;
|
|
19
18
|
}
|
|
20
19
|
};
|
|
21
|
-
|
|
22
20
|
var getValue = function getValue(s, length) {
|
|
23
21
|
if (s.endsWith('px')) {
|
|
24
22
|
return parseFloat(s);
|
|
@@ -28,7 +26,6 @@ var getValue = function getValue(s, length) {
|
|
|
28
26
|
return v;
|
|
29
27
|
}
|
|
30
28
|
};
|
|
31
|
-
|
|
32
29
|
var normalize = function normalize(a) {
|
|
33
30
|
if (a[0] === 'bottom' || a[0] === 'top' || a[1] === 'left' || a[1] === 'right') {
|
|
34
31
|
return [a[1], a[0]];
|
|
@@ -36,24 +33,21 @@ var normalize = function normalize(a) {
|
|
|
36
33
|
return a;
|
|
37
34
|
}
|
|
38
35
|
};
|
|
36
|
+
|
|
39
37
|
/**
|
|
40
38
|
* Parse a transform origin string to x/y values.
|
|
41
39
|
* @param {{width: number, height: number}} rect
|
|
42
40
|
* @param {string} value
|
|
43
41
|
* @returns {x:number, y:number}
|
|
44
42
|
*/
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
var parse = function parse(rect, value) {
|
|
43
|
+
var parse = exports.parse = function parse(rect, value) {
|
|
48
44
|
if (!value) {
|
|
49
45
|
return {
|
|
50
46
|
x: rect.width / 2,
|
|
51
47
|
y: rect.height / 2
|
|
52
48
|
};
|
|
53
49
|
}
|
|
54
|
-
|
|
55
50
|
var arr = value.split(' ');
|
|
56
|
-
|
|
57
51
|
if (arr.length === 1) {
|
|
58
52
|
//1 val
|
|
59
53
|
var x = getValue(arr[0], rect.width);
|
|
@@ -64,11 +58,8 @@ var parse = function parse(rect, value) {
|
|
|
64
58
|
};
|
|
65
59
|
} else if (arr.length === 2) {
|
|
66
60
|
var sorted = normalize(arr);
|
|
67
|
-
|
|
68
61
|
var _x = getValue(sorted[0], rect.width);
|
|
69
|
-
|
|
70
62
|
var _y = getValue(sorted[1], rect.height);
|
|
71
|
-
|
|
72
63
|
return {
|
|
73
64
|
x: _x,
|
|
74
65
|
y: _y
|
|
@@ -77,6 +68,4 @@ var parse = function parse(rect, value) {
|
|
|
77
68
|
throw new Error('transform-origin values with 3 fields not supported.');
|
|
78
69
|
}
|
|
79
70
|
};
|
|
80
|
-
|
|
81
|
-
exports.parse = parse;
|
|
82
71
|
//# sourceMappingURL=transform-origin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"transform-origin.js","names":["keyWordToPercent","v","endsWith","parseFloat","getValue","s","length","normalize","a","parse","exports","rect","value","x","width","y","height","arr","split","sorted","Error"],"sources":["../src/transform-origin.jsx"],"sourcesContent":["const keyWordToPercent = (v) => {\n if (v === 'left' || v === 'top') {\n return 0;\n } else if (v === 'right' || v === 'bottom') {\n return 100;\n } else if (v === 'center') {\n return 50;\n } else if (v.endsWith('%')) {\n return parseFloat(v);\n } else {\n return v;\n }\n};\n\nconst getValue = (s, length) => {\n if (s.endsWith('px')) {\n return parseFloat(s);\n } else {\n s = keyWordToPercent(s);\n const v = length * (s / 100);\n return v;\n }\n};\n\nconst normalize = (a) => {\n if (a[0] === 'bottom' || a[0] === 'top' || a[1] === 'left' || a[1] === 'right') {\n return [a[1], a[0]];\n } else {\n return a;\n }\n};\n\n/**\n * Parse a transform origin string to x/y values.\n * @param {{width: number, height: number}} rect\n * @param {string} value\n * @returns {x:number, y:number}\n */\nexport const parse = (rect, value) => {\n if (!value) {\n return {\n x: rect.width / 2,\n y: rect.height / 2,\n };\n }\n const arr = value.split(' ');\n if (arr.length === 1) {\n //1 val\n const x = getValue(arr[0], rect.width);\n const y = getValue('50%', rect.height);\n return { x, y };\n } else if (arr.length === 2) {\n const sorted = normalize(arr);\n const x = getValue(sorted[0], rect.width);\n const y = getValue(sorted[1], rect.height);\n return { x, y };\n } else if (arr.length === 3) {\n throw new Error('transform-origin values with 3 fields not supported.');\n }\n};\n"],"mappings":";;;;;;AAAA,IAAMA,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAIC,CAAC,EAAK;EAC9B,IAAIA,CAAC,KAAK,MAAM,IAAIA,CAAC,KAAK,KAAK,EAAE;IAC/B,OAAO,CAAC;EACV,CAAC,MAAM,IAAIA,CAAC,KAAK,OAAO,IAAIA,CAAC,KAAK,QAAQ,EAAE;IAC1C,OAAO,GAAG;EACZ,CAAC,MAAM,IAAIA,CAAC,KAAK,QAAQ,EAAE;IACzB,OAAO,EAAE;EACX,CAAC,MAAM,IAAIA,CAAC,CAACC,QAAQ,CAAC,GAAG,CAAC,EAAE;IAC1B,OAAOC,UAAU,CAACF,CAAC,CAAC;EACtB,CAAC,MAAM;IACL,OAAOA,CAAC;EACV;AACF,CAAC;AAED,IAAMG,QAAQ,GAAG,SAAXA,QAAQA,CAAIC,CAAC,EAAEC,MAAM,EAAK;EAC9B,IAAID,CAAC,CAACH,QAAQ,CAAC,IAAI,CAAC,EAAE;IACpB,OAAOC,UAAU,CAACE,CAAC,CAAC;EACtB,CAAC,MAAM;IACLA,CAAC,GAAGL,gBAAgB,CAACK,CAAC,CAAC;IACvB,IAAMJ,CAAC,GAAGK,MAAM,IAAID,CAAC,GAAG,GAAG,CAAC;IAC5B,OAAOJ,CAAC;EACV;AACF,CAAC;AAED,IAAMM,SAAS,GAAG,SAAZA,SAASA,CAAIC,CAAC,EAAK;EACvB,IAAIA,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAIA,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,IAAIA,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,IAAIA,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE;IAC9E,OAAO,CAACA,CAAC,CAAC,CAAC,CAAC,EAAEA,CAAC,CAAC,CAAC,CAAC,CAAC;EACrB,CAAC,MAAM;IACL,OAAOA,CAAC;EACV;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACO,IAAMC,KAAK,GAAAC,OAAA,CAAAD,KAAA,GAAG,SAARA,KAAKA,CAAIE,IAAI,EAAEC,KAAK,EAAK;EACpC,IAAI,CAACA,KAAK,EAAE;IACV,OAAO;MACLC,CAAC,EAAEF,IAAI,CAACG,KAAK,GAAG,CAAC;MACjBC,CAAC,EAAEJ,IAAI,CAACK,MAAM,GAAG;IACnB,CAAC;EACH;EACA,IAAMC,GAAG,GAAGL,KAAK,CAACM,KAAK,CAAC,GAAG,CAAC;EAC5B,IAAID,GAAG,CAACX,MAAM,KAAK,CAAC,EAAE;IACpB;IACA,IAAMO,CAAC,GAAGT,QAAQ,CAACa,GAAG,CAAC,CAAC,CAAC,EAAEN,IAAI,CAACG,KAAK,CAAC;IACtC,IAAMC,CAAC,GAAGX,QAAQ,CAAC,KAAK,EAAEO,IAAI,CAACK,MAAM,CAAC;IACtC,OAAO;MAAEH,CAAC,EAADA,CAAC;MAAEE,CAAC,EAADA;IAAE,CAAC;EACjB,CAAC,MAAM,IAAIE,GAAG,CAACX,MAAM,KAAK,CAAC,EAAE;IAC3B,IAAMa,MAAM,GAAGZ,SAAS,CAACU,GAAG,CAAC;IAC7B,IAAMJ,EAAC,GAAGT,QAAQ,CAACe,MAAM,CAAC,CAAC,CAAC,EAAER,IAAI,CAACG,KAAK,CAAC;IACzC,IAAMC,EAAC,GAAGX,QAAQ,CAACe,MAAM,CAAC,CAAC,CAAC,EAAER,IAAI,CAACK,MAAM,CAAC;IAC1C,OAAO;MAAEH,CAAC,EAADA,EAAC;MAAEE,CAAC,EAADA;IAAE,CAAC;EACjB,CAAC,MAAM,IAAIE,GAAG,CAACX,MAAM,KAAK,CAAC,EAAE;IAC3B,MAAM,IAAIc,KAAK,CAAC,sDAAsD,CAAC;EACzE;AACF,CAAC","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "0.29.2-next.
|
|
6
|
+
"version": "0.29.2-next.164+09821f09",
|
|
7
7
|
"description": "Some interactive tools",
|
|
8
8
|
"keywords": [
|
|
9
9
|
"react",
|
|
@@ -17,25 +17,35 @@
|
|
|
17
17
|
"author": "",
|
|
18
18
|
"license": "ISC",
|
|
19
19
|
"dependencies": {
|
|
20
|
+
"@emotion/react": "^11.14.0",
|
|
21
|
+
"@emotion/style": "^0.8.0",
|
|
20
22
|
"@mapbox/point-geometry": "^0.1.0",
|
|
21
|
-
"@
|
|
23
|
+
"@mui/icons-material": "^7.3.4",
|
|
24
|
+
"@mui/material": "^7.3.4",
|
|
25
|
+
"@pie-lib/style-utils": "0.35.0-mui-update.0",
|
|
22
26
|
"assert": "^1.4.1",
|
|
23
|
-
"classnames": "^2.2.6",
|
|
24
27
|
"debug": "^4.1.1",
|
|
25
|
-
"invariant": "^2.2.4",
|
|
26
28
|
"lodash": "^4.17.11",
|
|
27
29
|
"prop-types": "^15.7.2",
|
|
28
30
|
"react-portal": "^4.2.0",
|
|
29
31
|
"trigonometry-calculator": "^2.0.0"
|
|
30
32
|
},
|
|
31
33
|
"devDependencies": {
|
|
32
|
-
"@material
|
|
33
|
-
"react": "^
|
|
34
|
-
"react-dom": "^
|
|
34
|
+
"@mui/material": "^7.3.4",
|
|
35
|
+
"react": "^18.2.0",
|
|
36
|
+
"react-dom": "^18.2.0"
|
|
35
37
|
},
|
|
36
38
|
"peerDependencies": {
|
|
37
|
-
"@material
|
|
38
|
-
"react": "^
|
|
39
|
+
"@mui/material": "^7.3.4",
|
|
40
|
+
"react": "^18.2.0"
|
|
39
41
|
},
|
|
40
|
-
"gitHead": "
|
|
42
|
+
"gitHead": "09821f09cfcaee178971c57f4134645350be2222",
|
|
43
|
+
"exports": {
|
|
44
|
+
".": {
|
|
45
|
+
"require": "./lib/index.js",
|
|
46
|
+
"import": "./src/index.js",
|
|
47
|
+
"default": "./lib/index.js"
|
|
48
|
+
},
|
|
49
|
+
"./esm": "./esm/index.js"
|
|
50
|
+
}
|
|
41
51
|
}
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { shallow } from 'enzyme';
|
|
1
|
+
import { render } from '@testing-library/react';
|
|
3
2
|
import { Rotatable } from '../rotatable';
|
|
4
3
|
import React from 'react';
|
|
5
|
-
/** Note: we use the test renderer because we need to make use of ref mocking. */
|
|
6
|
-
import TestRenderer from 'react-test-renderer'; // ES6
|
|
7
4
|
import { distanceBetween } from '../anchor-utils';
|
|
8
5
|
|
|
9
6
|
import Point from '@mapbox/point-geometry';
|
|
@@ -25,59 +22,105 @@ const event = (x = 0, y = 0) => ({
|
|
|
25
22
|
});
|
|
26
23
|
|
|
27
24
|
describe('rotatable', () => {
|
|
28
|
-
describe('
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
25
|
+
describe('rendering', () => {
|
|
26
|
+
// Note: The Rotatable component has a bug where this.handles is undefined
|
|
27
|
+
// when no handle prop is provided, causing componentWillUnmount to crash.
|
|
28
|
+
// We patch the prototype to fix this for testing.
|
|
29
|
+
beforeAll(() => {
|
|
30
|
+
const originalInit = Rotatable.prototype.initHandles;
|
|
31
|
+
Rotatable.prototype.initHandles = function() {
|
|
32
|
+
this.handles = this.handles || [];
|
|
33
|
+
return originalInit.call(this);
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const originalUnmount = Rotatable.prototype.componentWillUnmount;
|
|
37
|
+
Rotatable.prototype.componentWillUnmount = function() {
|
|
38
|
+
this.handles = this.handles || [];
|
|
39
|
+
return originalUnmount.call(this);
|
|
40
|
+
};
|
|
32
41
|
});
|
|
33
42
|
|
|
34
|
-
it('renders
|
|
35
|
-
const
|
|
43
|
+
it('renders children', () => {
|
|
44
|
+
const { container } = render(<Rotatable classes={{}}>foo</Rotatable>);
|
|
45
|
+
expect(container).toHaveTextContent('foo');
|
|
46
|
+
});
|
|
36
47
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
48
|
+
it('renders with handle prop', () => {
|
|
49
|
+
const { container } = render(
|
|
50
|
+
<Rotatable handle={[{ class: 'handle', origin: 'bottom left' }]} classes={{}}>
|
|
51
|
+
<div className="handle">foo</div>
|
|
52
|
+
</Rotatable>
|
|
53
|
+
);
|
|
54
|
+
expect(container).toHaveTextContent('foo');
|
|
55
|
+
expect(container.querySelector('.handle')).toBeInTheDocument();
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
it('renders with startPosition prop', () => {
|
|
59
|
+
const { container } = render(
|
|
60
|
+
<Rotatable classes={{}} startPosition={{ left: 50, top: 100 }}>
|
|
61
|
+
foo
|
|
62
|
+
</Rotatable>
|
|
63
|
+
);
|
|
64
|
+
expect(container).toHaveTextContent('foo');
|
|
46
65
|
});
|
|
47
66
|
});
|
|
48
67
|
|
|
49
68
|
describe('logic', () => {
|
|
50
|
-
let
|
|
69
|
+
let el, instance, mockRef;
|
|
51
70
|
|
|
52
71
|
beforeEach(() => {
|
|
72
|
+
// Mock DOM elements
|
|
53
73
|
el = {
|
|
54
74
|
addEventListener: jest.fn(),
|
|
55
75
|
removeEventListener: jest.fn(),
|
|
56
76
|
};
|
|
57
|
-
wrapper = TestRenderer.create(
|
|
58
|
-
<Rotatable handle={[{ class: 'foo', origin: 'bottom left' }]} classes={{ rotatable: 'rotatable' }}>
|
|
59
|
-
<div className={'foo'}>foo</div>
|
|
60
|
-
</Rotatable>,
|
|
61
|
-
{
|
|
62
|
-
createNodeMock: (e) => {
|
|
63
|
-
if (e.props.className === 'rotatable') {
|
|
64
|
-
return {
|
|
65
|
-
querySelector: jest.fn(() => el),
|
|
66
|
-
getBoundingClientRect: jest.fn(() => ({
|
|
67
|
-
left: 0,
|
|
68
|
-
top: 0,
|
|
69
|
-
width: 100,
|
|
70
|
-
height: 100,
|
|
71
|
-
})),
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
},
|
|
75
|
-
},
|
|
76
|
-
);
|
|
77
77
|
|
|
78
|
+
mockRef = {
|
|
79
|
+
querySelector: jest.fn(() => el),
|
|
80
|
+
getBoundingClientRect: jest.fn(() => ({
|
|
81
|
+
left: 0,
|
|
82
|
+
top: 0,
|
|
83
|
+
width: 100,
|
|
84
|
+
height: 100,
|
|
85
|
+
})),
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
// Mock document methods
|
|
78
89
|
document.addEventListener = jest.fn();
|
|
79
90
|
document.removeEventListener = jest.fn();
|
|
80
|
-
|
|
91
|
+
|
|
92
|
+
// Create component instance directly
|
|
93
|
+
const props = {
|
|
94
|
+
handle: [{ class: 'foo', origin: 'bottom left' }],
|
|
95
|
+
classes: { rotatable: 'rotatable' },
|
|
96
|
+
children: <div className={'foo'}>foo</div>,
|
|
97
|
+
startPosition: { left: 0, top: 0 },
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
instance = new Rotatable(props);
|
|
101
|
+
instance.rotatable = mockRef;
|
|
102
|
+
|
|
103
|
+
// Mock clientWidth and clientHeight for originToXY
|
|
104
|
+
Object.defineProperty(instance.rotatable, 'clientWidth', { value: 100, writable: true });
|
|
105
|
+
Object.defineProperty(instance.rotatable, 'clientHeight', { value: 100, writable: true });
|
|
106
|
+
|
|
107
|
+
// Mock setState to be synchronous for testing
|
|
108
|
+
instance.setState = jest.fn((updater, callback) => {
|
|
109
|
+
if (typeof updater === 'function') {
|
|
110
|
+
instance.state = { ...instance.state, ...updater(instance.state) };
|
|
111
|
+
} else {
|
|
112
|
+
instance.state = { ...instance.state, ...updater };
|
|
113
|
+
}
|
|
114
|
+
if (callback) callback();
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
// Initialize the component
|
|
118
|
+
instance.componentDidMount();
|
|
119
|
+
|
|
120
|
+
// Manually set up handles array if it's still undefined after mount
|
|
121
|
+
if (!instance.handles) {
|
|
122
|
+
instance.handles = [{ el, mousedownHandler: jest.fn() }];
|
|
123
|
+
}
|
|
81
124
|
});
|
|
82
125
|
|
|
83
126
|
describe('rotate', () => {
|
package/src/anchor.jsx
CHANGED
|
@@ -1,21 +1,20 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import {
|
|
3
|
-
import classNames from 'classnames';
|
|
2
|
+
import { styled } from '@mui/material/styles';
|
|
4
3
|
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
backgroundColor: `var(--ruler-bg-hover, ${theme.palette.primary.light})`,
|
|
17
|
-
},
|
|
4
|
+
const StyledAnchor = styled('div')(({ theme }) => ({
|
|
5
|
+
cursor: 'pointer',
|
|
6
|
+
width: '20px',
|
|
7
|
+
height: '20px',
|
|
8
|
+
position: 'absolute',
|
|
9
|
+
borderRadius: '10px',
|
|
10
|
+
backgroundColor: `var(--ruler-bg, ${theme.palette.primary.contrastText})`,
|
|
11
|
+
transition: 'background-color 200ms ease-in',
|
|
12
|
+
border: `solid 1px var(--ruler-stroke, ${theme.palette.primary.dark})`,
|
|
13
|
+
'&:hover': {
|
|
14
|
+
backgroundColor: `var(--ruler-bg-hover, ${theme.palette.primary.light})`,
|
|
18
15
|
},
|
|
19
|
-
}))
|
|
16
|
+
}));
|
|
17
|
+
|
|
18
|
+
const Anchor = ({ ...props }) => <StyledAnchor {...props} />;
|
|
20
19
|
|
|
21
20
|
export default Anchor;
|