@ucloud-fe/react-components 1.3.24 → 1.3.27

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.
@@ -0,0 +1,244 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _newArrowCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/newArrowCheck"));
11
+
12
+ var _utils = _interopRequireDefault(require("../utils"));
13
+
14
+ var _getVisibleRectForElement = _interopRequireDefault(require("../getVisibleRectForElement"));
15
+
16
+ var _adjustForViewport = _interopRequireDefault(require("../adjustForViewport"));
17
+
18
+ var _getRegion = _interopRequireDefault(require("../getRegion"));
19
+
20
+ var _getElFuturePos = _interopRequireDefault(require("../getElFuturePos"));
21
+
22
+ /**
23
+ * align dom node flexibly
24
+ * @author yiminghe@gmail.com
25
+ */
26
+ // http://yiminghe.iteye.com/blog/1124720
27
+ function isFailX(elFuturePos, elRegion, visibleRect) {
28
+ return elFuturePos.left < visibleRect.left || elFuturePos.left + elRegion.width > visibleRect.right;
29
+ }
30
+
31
+ function isFailY(elFuturePos, elRegion, visibleRect) {
32
+ return elFuturePos.top < visibleRect.top || elFuturePos.top + elRegion.height > visibleRect.bottom;
33
+ }
34
+
35
+ function isCompleteFailX(elFuturePos, elRegion, visibleRect) {
36
+ return elFuturePos.left > visibleRect.right || elFuturePos.left + elRegion.width < visibleRect.left;
37
+ }
38
+
39
+ function isCompleteFailY(elFuturePos, elRegion, visibleRect) {
40
+ return elFuturePos.top > visibleRect.bottom || elFuturePos.top + elRegion.height < visibleRect.top;
41
+ }
42
+
43
+ function flip(points, reg, map) {
44
+ var _this = this;
45
+
46
+ var ret = [];
47
+
48
+ _utils.default.each(points, function (p) {
49
+ var _this2 = this;
50
+
51
+ (0, _newArrowCheck2.default)(this, _this);
52
+ ret.push(p.replace(reg, function (m) {
53
+ (0, _newArrowCheck2.default)(this, _this2);
54
+ return map[m];
55
+ }.bind(this)));
56
+ }.bind(this));
57
+
58
+ return ret;
59
+ }
60
+
61
+ function flipOffset(offset, index) {
62
+ offset[index] = -offset[index];
63
+ return offset;
64
+ }
65
+
66
+ function convertOffset(str, offsetLen) {
67
+ var n;
68
+
69
+ if (/%$/.test(str)) {
70
+ n = parseInt(str.substring(0, str.length - 1), 10) / 100 * offsetLen;
71
+ } else {
72
+ n = parseInt(str, 10);
73
+ }
74
+
75
+ return n || 0;
76
+ }
77
+
78
+ function normalizeOffset(offset, el) {
79
+ offset[0] = convertOffset(offset[0], el.width);
80
+ offset[1] = convertOffset(offset[1], el.height);
81
+ }
82
+ /**
83
+ * @param el
84
+ * @param tgtRegion 参照节点所占的区域: { left, top, width, height }
85
+ * @param align
86
+ */
87
+
88
+
89
+ function doAlign(el, tgtRegion, align, isTgtRegionVisible) {
90
+ var points = align.points;
91
+ var offset = align.offset || [0, 0];
92
+ var targetOffset = align.targetOffset || [0, 0];
93
+ var overflow = align.overflow;
94
+ var source = align.source || el;
95
+ offset = [].concat(offset);
96
+ targetOffset = [].concat(targetOffset);
97
+ overflow = overflow || {};
98
+ var newOverflowCfg = {};
99
+ var fail = 0;
100
+ var alwaysByViewport = !!(overflow && overflow.alwaysByViewport); // 当前节点可以被放置的显示区域
101
+
102
+ var visibleRect = (0, _getVisibleRectForElement.default)(source, alwaysByViewport); // 当前节点所占的区域, left/top/width/height
103
+
104
+ var elRegion = (0, _getRegion.default)(source); // 将 offset 转换成数值,支持百分比
105
+
106
+ normalizeOffset(offset, elRegion);
107
+ normalizeOffset(targetOffset, tgtRegion); // 当前节点将要被放置的位置
108
+
109
+ var elFuturePos = (0, _getElFuturePos.default)(elRegion, tgtRegion, points, offset, targetOffset); // 当前节点将要所处的区域
110
+
111
+ var newElRegion = _utils.default.merge(elRegion, elFuturePos); // 如果可视区域不能完全放置当前节点时允许调整
112
+
113
+
114
+ if (visibleRect && (overflow.adjustX || overflow.adjustY) && isTgtRegionVisible) {
115
+ if (overflow.adjustX) {
116
+ // 如果横向不能放下
117
+ if (isFailX(elFuturePos, elRegion, visibleRect)) {
118
+ // 对齐位置反下
119
+ var newPoints = flip(points, /[lr]/gi, {
120
+ l: 'r',
121
+ r: 'l'
122
+ }); // 偏移量也反下
123
+
124
+ var newOffset = flipOffset(offset, 0);
125
+ var newTargetOffset = flipOffset(targetOffset, 0);
126
+ var newElFuturePos = (0, _getElFuturePos.default)(elRegion, tgtRegion, newPoints, newOffset, newTargetOffset);
127
+
128
+ if (!isCompleteFailX(newElFuturePos, elRegion, visibleRect)) {
129
+ fail = 1;
130
+ points = newPoints;
131
+ offset = newOffset;
132
+ targetOffset = newTargetOffset;
133
+ }
134
+ }
135
+ }
136
+
137
+ if (overflow.adjustY) {
138
+ // 如果纵向不能放下
139
+ if (isFailY(elFuturePos, elRegion, visibleRect)) {
140
+ // 对齐位置反下
141
+ var _newPoints = flip(points, /[tb]/gi, {
142
+ t: 'b',
143
+ b: 't'
144
+ }); // 偏移量也反下
145
+
146
+
147
+ var _newOffset = flipOffset(offset, 1);
148
+
149
+ var _newTargetOffset = flipOffset(targetOffset, 1);
150
+
151
+ var _newElFuturePos = (0, _getElFuturePos.default)(elRegion, tgtRegion, _newPoints, _newOffset, _newTargetOffset);
152
+
153
+ if (!isCompleteFailY(_newElFuturePos, elRegion, visibleRect)) {
154
+ fail = 1;
155
+ points = _newPoints;
156
+ offset = _newOffset;
157
+ targetOffset = _newTargetOffset;
158
+ }
159
+ }
160
+ } // 如果失败,重新计算当前节点将要被放置的位置
161
+
162
+
163
+ if (fail) {
164
+ elFuturePos = (0, _getElFuturePos.default)(elRegion, tgtRegion, points, offset, targetOffset);
165
+
166
+ _utils.default.mix(newElRegion, elFuturePos);
167
+ }
168
+
169
+ var isStillFailX = isFailX(elFuturePos, elRegion, visibleRect);
170
+ var isStillFailY = isFailY(elFuturePos, elRegion, visibleRect); // 检查反下后的位置是否可以放下了,如果仍然放不下:
171
+ // 1. 复原修改过的定位参数
172
+
173
+ if (isStillFailX || isStillFailY) {
174
+ var _newPoints2 = points; // 重置对应部分的翻转逻辑
175
+
176
+ if (isStillFailX) {
177
+ _newPoints2 = flip(points, /[lr]/gi, {
178
+ l: 'r',
179
+ r: 'l'
180
+ });
181
+ }
182
+
183
+ if (isStillFailY) {
184
+ _newPoints2 = flip(points, /[tb]/gi, {
185
+ t: 'b',
186
+ b: 't'
187
+ });
188
+ }
189
+
190
+ points = _newPoints2;
191
+ offset = align.offset || [0, 0];
192
+ targetOffset = align.targetOffset || [0, 0];
193
+ } // 2. 只有指定了可以调整当前方向才调整
194
+
195
+
196
+ newOverflowCfg.adjustX = overflow.adjustX && isStillFailX;
197
+ newOverflowCfg.adjustY = overflow.adjustY && isStillFailY; // 确实要调整,甚至可能会调整高度宽度
198
+
199
+ if (newOverflowCfg.adjustX || newOverflowCfg.adjustY) {
200
+ newElRegion = (0, _adjustForViewport.default)(elFuturePos, elRegion, visibleRect, newOverflowCfg);
201
+ }
202
+ } // need judge to in case set fixed with in css on height auto element
203
+
204
+
205
+ if (newElRegion.width !== elRegion.width) {
206
+ _utils.default.css(source, 'width', _utils.default.width(source) + newElRegion.width - elRegion.width);
207
+ }
208
+
209
+ if (newElRegion.height !== elRegion.height) {
210
+ _utils.default.css(source, 'height', _utils.default.height(source) + newElRegion.height - elRegion.height);
211
+ } // https://github.com/kissyteam/kissy/issues/190
212
+ // 相对于屏幕位置没变,而 left/top 变了
213
+ // 例如 <div 'relative'><el absolute></div>
214
+
215
+
216
+ _utils.default.offset(source, {
217
+ left: newElRegion.left,
218
+ top: newElRegion.top
219
+ }, {
220
+ useCssRight: align.useCssRight,
221
+ useCssBottom: align.useCssBottom,
222
+ useCssTransform: align.useCssTransform,
223
+ ignoreShake: align.ignoreShake
224
+ });
225
+
226
+ return {
227
+ points: points,
228
+ offset: offset,
229
+ targetOffset: targetOffset,
230
+ overflow: newOverflowCfg
231
+ };
232
+ }
233
+
234
+ var _default = doAlign;
235
+ /**
236
+ * 2012-04-26 yiminghe@gmail.com
237
+ * - 优化智能对齐算法
238
+ * - 慎用 resizeXX
239
+ *
240
+ * 2011-07-13 yiminghe@gmail.com note:
241
+ * - 增加智能对齐,以及大小调整选项
242
+ **/
243
+
244
+ exports.default = _default;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _align = _interopRequireDefault(require("./align"));
11
+
12
+ var _getOffsetParent = _interopRequireDefault(require("../getOffsetParent"));
13
+
14
+ var _getVisibleRectForElement = _interopRequireDefault(require("../getVisibleRectForElement"));
15
+
16
+ var _getRegion = _interopRequireDefault(require("../getRegion"));
17
+
18
+ function isOutOfVisibleRect(target, alwaysByViewport) {
19
+ var visibleRect = (0, _getVisibleRectForElement.default)(target, alwaysByViewport);
20
+ var targetRegion = (0, _getRegion.default)(target);
21
+ return !visibleRect || targetRegion.left + targetRegion.width <= visibleRect.left || targetRegion.top + targetRegion.height <= visibleRect.top || targetRegion.left >= visibleRect.right || targetRegion.top >= visibleRect.bottom;
22
+ }
23
+
24
+ function alignElement(el, refNode, align) {
25
+ var target = align.target || refNode;
26
+ var refNodeRegion = (0, _getRegion.default)(target);
27
+ var isTargetNotOutOfVisible = !isOutOfVisibleRect(target, align.overflow && align.overflow.alwaysByViewport);
28
+ return (0, _align.default)(el, refNodeRegion, align, isTargetNotOutOfVisible);
29
+ }
30
+
31
+ alignElement.__getOffsetParent = _getOffsetParent.default;
32
+ alignElement.__getVisibleRectForElement = _getVisibleRectForElement.default;
33
+ var _default = alignElement;
34
+ exports.default = _default;
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+
12
+ var _utils = _interopRequireDefault(require("../utils"));
13
+
14
+ var _align = _interopRequireDefault(require("./align"));
15
+
16
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
17
+
18
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
19
+
20
+ /**
21
+ * `tgtPoint`: { pageX, pageY } or { clientX, clientY }.
22
+ * If client position provided, will internal convert to page position.
23
+ */
24
+ function alignPoint(el, tgtPoint, align) {
25
+ var pageX;
26
+ var pageY;
27
+
28
+ var doc = _utils.default.getDocument(el);
29
+
30
+ var win = doc.defaultView || doc.parentWindow;
31
+
32
+ var scrollX = _utils.default.getWindowScrollLeft(win);
33
+
34
+ var scrollY = _utils.default.getWindowScrollTop(win);
35
+
36
+ var viewportWidth = _utils.default.viewportWidth(win);
37
+
38
+ var viewportHeight = _utils.default.viewportHeight(win);
39
+
40
+ if ('pageX' in tgtPoint) {
41
+ pageX = tgtPoint.pageX;
42
+ } else {
43
+ pageX = scrollX + tgtPoint.clientX;
44
+ }
45
+
46
+ if ('pageY' in tgtPoint) {
47
+ pageY = tgtPoint.pageY;
48
+ } else {
49
+ pageY = scrollY + tgtPoint.clientY;
50
+ }
51
+
52
+ var tgtRegion = {
53
+ left: pageX,
54
+ top: pageY,
55
+ width: 0,
56
+ height: 0
57
+ };
58
+ var pointInView = pageX >= 0 && pageX <= scrollX + viewportWidth && pageY >= 0 && pageY <= scrollY + viewportHeight; // Provide default target point
59
+
60
+ var points = [align.points[0], 'cc'];
61
+ return (0, _align.default)(el, tgtRegion, _objectSpread(_objectSpread({}, align), {}, {
62
+ points: points
63
+ }), pointInView);
64
+ }
65
+
66
+ var _default = alignPoint;
67
+ exports.default = _default;
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ /**
9
+ * 获取 node 上的 align 对齐点 相对于页面的坐标
10
+ */
11
+ function getAlignOffset(region, align) {
12
+ var V = align.charAt(0);
13
+ var H = align.charAt(1);
14
+ var w = region.width;
15
+ var h = region.height;
16
+ var x = region.left;
17
+ var y = region.top;
18
+
19
+ if (V === 'c') {
20
+ y += h / 2;
21
+ } else if (V === 'b') {
22
+ y += h;
23
+ }
24
+
25
+ if (H === 'c') {
26
+ x += w / 2;
27
+ } else if (H === 'r') {
28
+ x += w;
29
+ }
30
+
31
+ return {
32
+ left: x,
33
+ top: y
34
+ };
35
+ }
36
+
37
+ var _default = getAlignOffset;
38
+ exports.default = _default;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _getAlignOffset = _interopRequireDefault(require("./getAlignOffset"));
11
+
12
+ function getElFuturePos(elRegion, refNodeRegion, points, offset, targetOffset) {
13
+ var p1 = (0, _getAlignOffset.default)(refNodeRegion, points[1]);
14
+ var p2 = (0, _getAlignOffset.default)(elRegion, points[0]);
15
+ var diff = [p2.left - p1.left, p2.top - p1.top];
16
+ return {
17
+ left: Math.round(elRegion.left - diff[0] + offset[0] - targetOffset[0]),
18
+ top: Math.round(elRegion.top - diff[1] + offset[1] - targetOffset[1])
19
+ };
20
+ }
21
+
22
+ var _default = getElFuturePos;
23
+ exports.default = _default;
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _utils = _interopRequireDefault(require("./utils"));
11
+
12
+ /**
13
+ * 得到会导致元素显示不全的祖先元素
14
+ */
15
+ var getParent = _utils.default.getParent;
16
+
17
+ function getOffsetParent(element) {
18
+ if (_utils.default.isWindow(element) || element.nodeType === 9) {
19
+ return null;
20
+ } // ie 这个也不是完全可行
21
+
22
+ /*
23
+ <div style="width: 50px;height: 100px;overflow: hidden">
24
+ <div style="width: 50px;height: 100px;position: relative;" id="d6">
25
+ 元素 6 高 100px 宽 50px<br/>
26
+ </div>
27
+ </div>
28
+ */
29
+ // element.offsetParent does the right thing in ie7 and below. Return parent with layout!
30
+ // In other browsers it only includes elements with position absolute, relative or
31
+ // fixed, not elements with overflow set to auto or scroll.
32
+ // if (UA.ie && ieMode < 8) {
33
+ // return element.offsetParent;
34
+ // }
35
+ // 统一的 offsetParent 方法
36
+
37
+
38
+ var doc = _utils.default.getDocument(element);
39
+
40
+ var body = doc.body;
41
+ var parent;
42
+
43
+ var positionStyle = _utils.default.css(element, 'position');
44
+
45
+ var skipStatic = positionStyle === 'fixed' || positionStyle === 'absolute';
46
+
47
+ if (!skipStatic) {
48
+ return element.nodeName.toLowerCase() === 'html' ? null : getParent(element);
49
+ }
50
+
51
+ for (parent = getParent(element); parent && parent !== body && parent.nodeType !== 9; parent = getParent(parent)) {
52
+ positionStyle = _utils.default.css(parent, 'position');
53
+
54
+ if (positionStyle !== 'static') {
55
+ return parent;
56
+ }
57
+ }
58
+
59
+ return null;
60
+ }
61
+
62
+ var _default = getOffsetParent;
63
+ exports.default = _default;
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _utils = _interopRequireDefault(require("./utils"));
11
+
12
+ function getRegion(node) {
13
+ var offset;
14
+ var w;
15
+ var h;
16
+
17
+ if (!_utils.default.isWindow(node) && node.nodeType !== 9) {
18
+ offset = _utils.default.offset(node);
19
+ w = _utils.default.outerWidth(node);
20
+ h = _utils.default.outerHeight(node);
21
+ } else {
22
+ var win = _utils.default.getWindow(node);
23
+
24
+ offset = {
25
+ left: _utils.default.getWindowScrollLeft(win),
26
+ top: _utils.default.getWindowScrollTop(win)
27
+ };
28
+ w = _utils.default.viewportWidth(win);
29
+ h = _utils.default.viewportHeight(win);
30
+ }
31
+
32
+ offset.width = w;
33
+ offset.height = h;
34
+ return offset;
35
+ }
36
+
37
+ var _default = getRegion;
38
+ exports.default = _default;
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _utils = _interopRequireDefault(require("./utils"));
11
+
12
+ var _getOffsetParent = _interopRequireDefault(require("./getOffsetParent"));
13
+
14
+ var _isAncestorFixed = _interopRequireDefault(require("./isAncestorFixed"));
15
+
16
+ /**
17
+ * 获得元素的显示部分的区域
18
+ */
19
+ function getVisibleRectForElement(element, alwaysByViewport) {
20
+ var visibleRect = {
21
+ left: 0,
22
+ right: Infinity,
23
+ top: 0,
24
+ bottom: Infinity
25
+ };
26
+ var el = (0, _getOffsetParent.default)(element);
27
+
28
+ var doc = _utils.default.getDocument(element);
29
+
30
+ var win = doc.defaultView || doc.parentWindow;
31
+ var body = doc.body;
32
+ var documentElement = doc.documentElement; // Determine the size of the visible rect by climbing the dom accounting for
33
+ // all scrollable containers.
34
+
35
+ while (el) {
36
+ // clientWidth is zero for inline block elements in ie.
37
+ if ((navigator.userAgent.indexOf('MSIE') === -1 || el.clientWidth !== 0) && // body may have overflow set on it, yet we still get the entire
38
+ // viewport. In some browsers, el.offsetParent may be
39
+ // document.documentElement, so check for that too.
40
+ el !== body && el !== documentElement && _utils.default.css(el, 'overflow') !== 'visible') {
41
+ var pos = _utils.default.offset(el); // add border
42
+
43
+
44
+ pos.left += el.clientLeft;
45
+ pos.top += el.clientTop;
46
+ visibleRect.top = Math.max(visibleRect.top, pos.top);
47
+ visibleRect.right = Math.min(visibleRect.right, // consider area without scrollBar
48
+ pos.left + el.clientWidth);
49
+ visibleRect.bottom = Math.min(visibleRect.bottom, pos.top + el.clientHeight);
50
+ visibleRect.left = Math.max(visibleRect.left, pos.left);
51
+ } else if (el === body || el === documentElement) {
52
+ break;
53
+ }
54
+
55
+ el = (0, _getOffsetParent.default)(el);
56
+ } // Set element position to fixed
57
+ // make sure absolute element itself don't affect it's visible area
58
+ // https://github.com/ant-design/ant-design/issues/7601
59
+
60
+
61
+ var originalPosition = null;
62
+
63
+ if (!_utils.default.isWindow(element) && element.nodeType !== 9) {
64
+ originalPosition = element.style.position;
65
+
66
+ var position = _utils.default.css(element, 'position');
67
+
68
+ if (position === 'absolute') {
69
+ element.style.position = 'fixed';
70
+ }
71
+ }
72
+
73
+ var scrollX = _utils.default.getWindowScrollLeft(win);
74
+
75
+ var scrollY = _utils.default.getWindowScrollTop(win);
76
+
77
+ var viewportWidth = _utils.default.viewportWidth(win);
78
+
79
+ var viewportHeight = _utils.default.viewportHeight(win);
80
+
81
+ var documentWidth = documentElement.scrollWidth;
82
+ var documentHeight = documentElement.scrollHeight; // scrollXXX on html is sync with body which means overflow: hidden on body gets wrong scrollXXX.
83
+ // We should cut this ourself.
84
+
85
+ var bodyStyle = window.getComputedStyle(body);
86
+
87
+ if (bodyStyle.overflowX === 'hidden') {
88
+ documentWidth = win.innerWidth;
89
+ }
90
+
91
+ if (bodyStyle.overflowY === 'hidden') {
92
+ documentHeight = win.innerHeight;
93
+ } // Reset element position after calculate the visible area
94
+
95
+
96
+ if (element.style) {
97
+ element.style.position = originalPosition;
98
+ }
99
+
100
+ if (alwaysByViewport || (0, _isAncestorFixed.default)(element)) {
101
+ // Clip by viewport's size.
102
+ visibleRect.left = Math.max(visibleRect.left, scrollX);
103
+ visibleRect.top = Math.max(visibleRect.top, scrollY);
104
+ visibleRect.right = Math.min(visibleRect.right, scrollX + viewportWidth);
105
+ visibleRect.bottom = Math.min(visibleRect.bottom, scrollY + viewportHeight);
106
+ } else {
107
+ // Clip by document's size.
108
+ var maxVisibleWidth = Math.max(documentWidth, scrollX + viewportWidth);
109
+ visibleRect.right = Math.min(visibleRect.right, maxVisibleWidth);
110
+ var maxVisibleHeight = Math.max(documentHeight, scrollY + viewportHeight);
111
+ visibleRect.bottom = Math.min(visibleRect.bottom, maxVisibleHeight);
112
+ }
113
+
114
+ return visibleRect.top >= 0 && visibleRect.left >= 0 && visibleRect.bottom > visibleRect.top && visibleRect.right > visibleRect.left ? visibleRect : null;
115
+ }
116
+
117
+ var _default = getVisibleRectForElement;
118
+ exports.default = _default;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ Object.defineProperty(exports, "alignElement", {
9
+ enumerable: true,
10
+ get: function get() {
11
+ return _alignElement.default;
12
+ }
13
+ });
14
+ Object.defineProperty(exports, "alignPoint", {
15
+ enumerable: true,
16
+ get: function get() {
17
+ return _alignPoint.default;
18
+ }
19
+ });
20
+ exports.default = void 0;
21
+
22
+ var _alignElement = _interopRequireDefault(require("./align/alignElement"));
23
+
24
+ var _alignPoint = _interopRequireDefault(require("./align/alignPoint"));
25
+
26
+ var _default = _alignElement.default;
27
+ exports.default = _default;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = isAncestorFixed;
9
+
10
+ var _utils = _interopRequireDefault(require("./utils"));
11
+
12
+ var getParent = _utils.default.getParent;
13
+
14
+ function isAncestorFixed(element) {
15
+ if (_utils.default.isWindow(element) || element.nodeType === 9) {
16
+ return false;
17
+ }
18
+
19
+ var doc = _utils.default.getDocument(element);
20
+
21
+ var body = doc.body;
22
+ var parent = null;
23
+
24
+ for (parent = getParent(element); // 修复元素位于 document.documentElement 下导致崩溃问题
25
+ parent && parent !== body && parent !== doc; parent = getParent(parent)) {
26
+ var positionStyle = _utils.default.css(parent, 'position');
27
+
28
+ if (positionStyle === 'fixed') {
29
+ return true;
30
+ }
31
+ }
32
+
33
+ return false;
34
+ }