25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.
 
 
 
 

59 satır
1.6 KiB

  1. import { useCallback, useRef, useMemo } from 'react';
  2. import hasClass from 'dom-helpers/hasClass';
  3. function getMargins(element) {
  4. var styles = getComputedStyle(element);
  5. var top = parseFloat(styles.marginTop) || 0;
  6. var right = parseFloat(styles.marginRight) || 0;
  7. var bottom = parseFloat(styles.marginBottom) || 0;
  8. var left = parseFloat(styles.marginLeft) || 0;
  9. return {
  10. top: top,
  11. right: right,
  12. bottom: bottom,
  13. left: left
  14. };
  15. }
  16. export default function usePopperMarginModifiers() {
  17. var overlayRef = useRef(null);
  18. var margins = useRef(null);
  19. return [useCallback(function (overlay) {
  20. if (!overlay || !(hasClass(overlay, 'popover') || hasClass(overlay, 'dropdown-menu'))) return;
  21. margins.current = getMargins(overlay);
  22. overlay.style.margin = 0;
  23. overlayRef.current = overlay;
  24. }, []), [useMemo(function () {
  25. return {
  26. name: 'offset',
  27. options: {
  28. offset: function offset(_ref) {
  29. var placement = _ref.placement;
  30. if (!margins.current) return [0, 0];
  31. var _margins$current = margins.current,
  32. top = _margins$current.top,
  33. left = _margins$current.left,
  34. bottom = _margins$current.bottom,
  35. right = _margins$current.right;
  36. switch (placement.split('-')[0]) {
  37. case 'top':
  38. return [0, bottom];
  39. case 'left':
  40. return [0, right];
  41. case 'bottom':
  42. return [0, top];
  43. case 'right':
  44. return [0, left];
  45. default:
  46. return [0, 0];
  47. }
  48. }
  49. }
  50. };
  51. }, [margins])]];
  52. }