Files
Speedtest-Tracker/conf/site/node_modules/react-bootstrap/esm/usePopperMarginModifiers.js
Henry Whitaker 3a99dc5495 Updated to v1.3.3
2020-05-05 09:34:02 +01:00

59 lines
1.6 KiB
JavaScript
Vendored

import { useCallback, useRef, useMemo } from 'react';
import hasClass from 'dom-helpers/hasClass';
function getMargins(element) {
var styles = getComputedStyle(element);
var top = parseFloat(styles.marginTop) || 0;
var right = parseFloat(styles.marginRight) || 0;
var bottom = parseFloat(styles.marginBottom) || 0;
var left = parseFloat(styles.marginLeft) || 0;
return {
top: top,
right: right,
bottom: bottom,
left: left
};
}
export default function usePopperMarginModifiers() {
var overlayRef = useRef(null);
var margins = useRef(null);
return [useCallback(function (overlay) {
if (!overlay || !(hasClass(overlay, 'popover') || hasClass(overlay, 'dropdown-menu'))) return;
margins.current = getMargins(overlay);
overlay.style.margin = 0;
overlayRef.current = overlay;
}, []), [useMemo(function () {
return {
name: 'offset',
options: {
offset: function offset(_ref) {
var placement = _ref.placement;
if (!margins.current) return [0, 0];
var _margins$current = margins.current,
top = _margins$current.top,
left = _margins$current.left,
bottom = _margins$current.bottom,
right = _margins$current.right;
switch (placement.split('-')[0]) {
case 'top':
return [0, bottom];
case 'left':
return [0, right];
case 'bottom':
return [0, top];
case 'right':
return [0, left];
default:
return [0, 0];
}
}
}
};
}, [margins])]];
}