@rc-component/trigger 1.4.2 → 1.5.1
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/es/hooks/useAlign.js +31 -10
- package/es/index.js +8 -8
- package/lib/hooks/useAlign.js +31 -10
- package/lib/index.js +8 -8
- package/package.json +1 -1
package/es/hooks/useAlign.js
CHANGED
|
@@ -122,6 +122,8 @@ export default function useAlign(open, popupEle, target, placement, builtinPlace
|
|
|
122
122
|
scrollLeft = _doc$documentElement.scrollLeft;
|
|
123
123
|
var popupHeight = popupRect.height;
|
|
124
124
|
var popupWidth = popupRect.width;
|
|
125
|
+
var targetHeight = targetRect.height;
|
|
126
|
+
var targetWidth = targetRect.width;
|
|
125
127
|
|
|
126
128
|
// Get bounding of visible area
|
|
127
129
|
var visibleArea = placementInfo.htmlRegion === 'scroll' ?
|
|
@@ -224,16 +226,25 @@ export default function useAlign(open, popupEle, target, placement, builtinPlace
|
|
|
224
226
|
var nextPopupY = popupRect.y + nextOffsetY;
|
|
225
227
|
var nextPopupBottom = nextPopupY + popupHeight;
|
|
226
228
|
var needAdjustY = supportAdjust(adjustY);
|
|
229
|
+
var sameTB = popupPoints[0] === targetPoints[0];
|
|
227
230
|
|
|
228
231
|
// Bottom to Top
|
|
229
232
|
if (needAdjustY && popupPoints[0] === 't' && nextPopupBottom > visibleArea.bottom) {
|
|
230
|
-
|
|
233
|
+
if (sameTB) {
|
|
234
|
+
nextOffsetY -= popupHeight - targetHeight;
|
|
235
|
+
} else {
|
|
236
|
+
nextOffsetY = targetAlignPointTL.y - popupAlignPointBR.y - popupOffsetY;
|
|
237
|
+
}
|
|
231
238
|
nextAlignInfo.points = [reversePoints(popupPoints, 0), reversePoints(targetPoints, 0)];
|
|
232
239
|
}
|
|
233
240
|
|
|
234
241
|
// Top to Bottom
|
|
235
242
|
if (needAdjustY && popupPoints[0] === 'b' && nextPopupY < visibleArea.top) {
|
|
236
|
-
|
|
243
|
+
if (sameTB) {
|
|
244
|
+
nextOffsetY += popupHeight - targetHeight;
|
|
245
|
+
} else {
|
|
246
|
+
nextOffsetY = targetAlignPointBR.y - popupAlignPointTL.y - popupOffsetY;
|
|
247
|
+
}
|
|
237
248
|
nextAlignInfo.points = [reversePoints(popupPoints, 0), reversePoints(targetPoints, 0)];
|
|
238
249
|
}
|
|
239
250
|
|
|
@@ -243,15 +254,25 @@ export default function useAlign(open, popupEle, target, placement, builtinPlace
|
|
|
243
254
|
var needAdjustX = supportAdjust(adjustX);
|
|
244
255
|
|
|
245
256
|
// >>>>> Flip
|
|
257
|
+
var sameLR = popupPoints[1] === targetPoints[1];
|
|
258
|
+
|
|
246
259
|
// Right to Left
|
|
247
260
|
if (needAdjustX && popupPoints[1] === 'l' && nextPopupRight > visibleArea.right) {
|
|
248
|
-
|
|
261
|
+
if (sameLR) {
|
|
262
|
+
nextOffsetX -= popupWidth - targetWidth;
|
|
263
|
+
} else {
|
|
264
|
+
nextOffsetX = targetAlignPointTL.x - popupAlignPointBR.x - popupOffsetX;
|
|
265
|
+
}
|
|
249
266
|
nextAlignInfo.points = [reversePoints(popupPoints, 1), reversePoints(targetPoints, 1)];
|
|
250
267
|
}
|
|
251
268
|
|
|
252
269
|
// Left to Right
|
|
253
270
|
if (needAdjustX && popupPoints[1] === 'r' && nextPopupX < visibleArea.left) {
|
|
254
|
-
|
|
271
|
+
if (sameLR) {
|
|
272
|
+
nextOffsetX += popupWidth - targetWidth;
|
|
273
|
+
} else {
|
|
274
|
+
nextOffsetX = targetAlignPointBR.x - popupAlignPointTL.x - popupOffsetX;
|
|
275
|
+
}
|
|
255
276
|
nextAlignInfo.points = [reversePoints(popupPoints, 1), reversePoints(targetPoints, 1)];
|
|
256
277
|
}
|
|
257
278
|
|
|
@@ -261,8 +282,8 @@ export default function useAlign(open, popupEle, target, placement, builtinPlace
|
|
|
261
282
|
// Left
|
|
262
283
|
if (nextPopupX < visibleArea.left) {
|
|
263
284
|
nextOffsetX -= nextPopupX - visibleArea.left;
|
|
264
|
-
if (targetRect.x +
|
|
265
|
-
nextOffsetX += targetRect.x - visibleArea.left +
|
|
285
|
+
if (targetRect.x + targetWidth < visibleArea.left + numShiftX) {
|
|
286
|
+
nextOffsetX += targetRect.x - visibleArea.left + targetWidth - numShiftX;
|
|
266
287
|
}
|
|
267
288
|
}
|
|
268
289
|
|
|
@@ -279,8 +300,8 @@ export default function useAlign(open, popupEle, target, placement, builtinPlace
|
|
|
279
300
|
// Top
|
|
280
301
|
if (nextPopupY < visibleArea.top) {
|
|
281
302
|
nextOffsetY -= nextPopupY - visibleArea.top;
|
|
282
|
-
if (targetRect.y +
|
|
283
|
-
nextOffsetY += targetRect.y - visibleArea.top +
|
|
303
|
+
if (targetRect.y + targetHeight < visibleArea.top + numShiftY) {
|
|
304
|
+
nextOffsetY += targetRect.y - visibleArea.top + targetHeight - numShiftY;
|
|
284
305
|
}
|
|
285
306
|
}
|
|
286
307
|
|
|
@@ -299,9 +320,9 @@ export default function useAlign(open, popupEle, target, placement, builtinPlace
|
|
|
299
320
|
var popupTop = popupRect.y + nextOffsetY;
|
|
300
321
|
var popupBottom = popupTop + popupHeight;
|
|
301
322
|
var targetLeft = targetRect.x;
|
|
302
|
-
var targetRight = targetLeft +
|
|
323
|
+
var targetRight = targetLeft + targetWidth;
|
|
303
324
|
var targetTop = targetRect.y;
|
|
304
|
-
var targetBottom = targetTop +
|
|
325
|
+
var targetBottom = targetTop + targetHeight;
|
|
305
326
|
var maxLeft = Math.max(popupLeft, targetLeft);
|
|
306
327
|
var minRight = Math.min(popupRight, targetRight);
|
|
307
328
|
var xCenter = (maxLeft + minRight) / 2;
|
package/es/index.js
CHANGED
|
@@ -399,7 +399,13 @@ export function generateTrigger() {
|
|
|
399
399
|
var triggerNode = /*#__PURE__*/React.cloneElement(child, _objectSpread(_objectSpread({}, mergedChildrenProps), passedProps));
|
|
400
400
|
|
|
401
401
|
// Render
|
|
402
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(
|
|
402
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ResizeObserver, {
|
|
403
|
+
disabled: !mergedOpen,
|
|
404
|
+
ref: setTargetRef,
|
|
405
|
+
onResize: onTargetResize
|
|
406
|
+
}, /*#__PURE__*/React.createElement(TriggerWrapper, {
|
|
407
|
+
getTriggerDOMNode: getTriggerDOMNode
|
|
408
|
+
}, triggerNode)), /*#__PURE__*/React.createElement(TriggerContext.Provider, {
|
|
403
409
|
value: context
|
|
404
410
|
}, /*#__PURE__*/React.createElement(Popup, {
|
|
405
411
|
portal: PortalComponent,
|
|
@@ -450,13 +456,7 @@ export function generateTrigger() {
|
|
|
450
456
|
stretch: stretch,
|
|
451
457
|
targetWidth: targetWidth / scaleX,
|
|
452
458
|
targetHeight: targetHeight / scaleY
|
|
453
|
-
}))
|
|
454
|
-
disabled: !mergedOpen,
|
|
455
|
-
ref: setTargetRef,
|
|
456
|
-
onResize: onTargetResize
|
|
457
|
-
}, /*#__PURE__*/React.createElement(TriggerWrapper, {
|
|
458
|
-
getTriggerDOMNode: getTriggerDOMNode
|
|
459
|
-
}, triggerNode)));
|
|
459
|
+
})));
|
|
460
460
|
});
|
|
461
461
|
if (process.env.NODE_ENV !== 'production') {
|
|
462
462
|
Trigger.displayName = 'Trigger';
|
package/lib/hooks/useAlign.js
CHANGED
|
@@ -130,6 +130,8 @@ function useAlign(open, popupEle, target, placement, builtinPlacements, popupAli
|
|
|
130
130
|
scrollLeft = _doc$documentElement.scrollLeft;
|
|
131
131
|
var popupHeight = popupRect.height;
|
|
132
132
|
var popupWidth = popupRect.width;
|
|
133
|
+
var targetHeight = targetRect.height;
|
|
134
|
+
var targetWidth = targetRect.width;
|
|
133
135
|
|
|
134
136
|
// Get bounding of visible area
|
|
135
137
|
var visibleArea = placementInfo.htmlRegion === 'scroll' ?
|
|
@@ -232,16 +234,25 @@ function useAlign(open, popupEle, target, placement, builtinPlacements, popupAli
|
|
|
232
234
|
var nextPopupY = popupRect.y + nextOffsetY;
|
|
233
235
|
var nextPopupBottom = nextPopupY + popupHeight;
|
|
234
236
|
var needAdjustY = supportAdjust(adjustY);
|
|
237
|
+
var sameTB = popupPoints[0] === targetPoints[0];
|
|
235
238
|
|
|
236
239
|
// Bottom to Top
|
|
237
240
|
if (needAdjustY && popupPoints[0] === 't' && nextPopupBottom > visibleArea.bottom) {
|
|
238
|
-
|
|
241
|
+
if (sameTB) {
|
|
242
|
+
nextOffsetY -= popupHeight - targetHeight;
|
|
243
|
+
} else {
|
|
244
|
+
nextOffsetY = targetAlignPointTL.y - popupAlignPointBR.y - popupOffsetY;
|
|
245
|
+
}
|
|
239
246
|
nextAlignInfo.points = [reversePoints(popupPoints, 0), reversePoints(targetPoints, 0)];
|
|
240
247
|
}
|
|
241
248
|
|
|
242
249
|
// Top to Bottom
|
|
243
250
|
if (needAdjustY && popupPoints[0] === 'b' && nextPopupY < visibleArea.top) {
|
|
244
|
-
|
|
251
|
+
if (sameTB) {
|
|
252
|
+
nextOffsetY += popupHeight - targetHeight;
|
|
253
|
+
} else {
|
|
254
|
+
nextOffsetY = targetAlignPointBR.y - popupAlignPointTL.y - popupOffsetY;
|
|
255
|
+
}
|
|
245
256
|
nextAlignInfo.points = [reversePoints(popupPoints, 0), reversePoints(targetPoints, 0)];
|
|
246
257
|
}
|
|
247
258
|
|
|
@@ -251,15 +262,25 @@ function useAlign(open, popupEle, target, placement, builtinPlacements, popupAli
|
|
|
251
262
|
var needAdjustX = supportAdjust(adjustX);
|
|
252
263
|
|
|
253
264
|
// >>>>> Flip
|
|
265
|
+
var sameLR = popupPoints[1] === targetPoints[1];
|
|
266
|
+
|
|
254
267
|
// Right to Left
|
|
255
268
|
if (needAdjustX && popupPoints[1] === 'l' && nextPopupRight > visibleArea.right) {
|
|
256
|
-
|
|
269
|
+
if (sameLR) {
|
|
270
|
+
nextOffsetX -= popupWidth - targetWidth;
|
|
271
|
+
} else {
|
|
272
|
+
nextOffsetX = targetAlignPointTL.x - popupAlignPointBR.x - popupOffsetX;
|
|
273
|
+
}
|
|
257
274
|
nextAlignInfo.points = [reversePoints(popupPoints, 1), reversePoints(targetPoints, 1)];
|
|
258
275
|
}
|
|
259
276
|
|
|
260
277
|
// Left to Right
|
|
261
278
|
if (needAdjustX && popupPoints[1] === 'r' && nextPopupX < visibleArea.left) {
|
|
262
|
-
|
|
279
|
+
if (sameLR) {
|
|
280
|
+
nextOffsetX += popupWidth - targetWidth;
|
|
281
|
+
} else {
|
|
282
|
+
nextOffsetX = targetAlignPointBR.x - popupAlignPointTL.x - popupOffsetX;
|
|
283
|
+
}
|
|
263
284
|
nextAlignInfo.points = [reversePoints(popupPoints, 1), reversePoints(targetPoints, 1)];
|
|
264
285
|
}
|
|
265
286
|
|
|
@@ -269,8 +290,8 @@ function useAlign(open, popupEle, target, placement, builtinPlacements, popupAli
|
|
|
269
290
|
// Left
|
|
270
291
|
if (nextPopupX < visibleArea.left) {
|
|
271
292
|
nextOffsetX -= nextPopupX - visibleArea.left;
|
|
272
|
-
if (targetRect.x +
|
|
273
|
-
nextOffsetX += targetRect.x - visibleArea.left +
|
|
293
|
+
if (targetRect.x + targetWidth < visibleArea.left + numShiftX) {
|
|
294
|
+
nextOffsetX += targetRect.x - visibleArea.left + targetWidth - numShiftX;
|
|
274
295
|
}
|
|
275
296
|
}
|
|
276
297
|
|
|
@@ -287,8 +308,8 @@ function useAlign(open, popupEle, target, placement, builtinPlacements, popupAli
|
|
|
287
308
|
// Top
|
|
288
309
|
if (nextPopupY < visibleArea.top) {
|
|
289
310
|
nextOffsetY -= nextPopupY - visibleArea.top;
|
|
290
|
-
if (targetRect.y +
|
|
291
|
-
nextOffsetY += targetRect.y - visibleArea.top +
|
|
311
|
+
if (targetRect.y + targetHeight < visibleArea.top + numShiftY) {
|
|
312
|
+
nextOffsetY += targetRect.y - visibleArea.top + targetHeight - numShiftY;
|
|
292
313
|
}
|
|
293
314
|
}
|
|
294
315
|
|
|
@@ -307,9 +328,9 @@ function useAlign(open, popupEle, target, placement, builtinPlacements, popupAli
|
|
|
307
328
|
var popupTop = popupRect.y + nextOffsetY;
|
|
308
329
|
var popupBottom = popupTop + popupHeight;
|
|
309
330
|
var targetLeft = targetRect.x;
|
|
310
|
-
var targetRight = targetLeft +
|
|
331
|
+
var targetRight = targetLeft + targetWidth;
|
|
311
332
|
var targetTop = targetRect.y;
|
|
312
|
-
var targetBottom = targetTop +
|
|
333
|
+
var targetBottom = targetTop + targetHeight;
|
|
313
334
|
var maxLeft = Math.max(popupLeft, targetLeft);
|
|
314
335
|
var minRight = Math.min(popupRight, targetRight);
|
|
315
336
|
var xCenter = (maxLeft + minRight) / 2;
|
package/lib/index.js
CHANGED
|
@@ -408,7 +408,13 @@ function generateTrigger() {
|
|
|
408
408
|
var triggerNode = /*#__PURE__*/React.cloneElement(child, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, mergedChildrenProps), passedProps));
|
|
409
409
|
|
|
410
410
|
// Render
|
|
411
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(
|
|
411
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_rcResizeObserver.default, {
|
|
412
|
+
disabled: !mergedOpen,
|
|
413
|
+
ref: setTargetRef,
|
|
414
|
+
onResize: onTargetResize
|
|
415
|
+
}, /*#__PURE__*/React.createElement(_TriggerWrapper.default, {
|
|
416
|
+
getTriggerDOMNode: getTriggerDOMNode
|
|
417
|
+
}, triggerNode)), /*#__PURE__*/React.createElement(_context.default.Provider, {
|
|
412
418
|
value: context
|
|
413
419
|
}, /*#__PURE__*/React.createElement(_Popup.default, {
|
|
414
420
|
portal: PortalComponent,
|
|
@@ -459,13 +465,7 @@ function generateTrigger() {
|
|
|
459
465
|
stretch: stretch,
|
|
460
466
|
targetWidth: targetWidth / scaleX,
|
|
461
467
|
targetHeight: targetHeight / scaleY
|
|
462
|
-
}))
|
|
463
|
-
disabled: !mergedOpen,
|
|
464
|
-
ref: setTargetRef,
|
|
465
|
-
onResize: onTargetResize
|
|
466
|
-
}, /*#__PURE__*/React.createElement(_TriggerWrapper.default, {
|
|
467
|
-
getTriggerDOMNode: getTriggerDOMNode
|
|
468
|
-
}, triggerNode)));
|
|
468
|
+
})));
|
|
469
469
|
});
|
|
470
470
|
if (process.env.NODE_ENV !== 'production') {
|
|
471
471
|
Trigger.displayName = 'Trigger';
|