You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

69 lines
1.7 KiB

  1. import getBasePlacement from "./getBasePlacement.js";
  2. import getVariation from "./getVariation.js";
  3. import getMainAxisFromPlacement from "./getMainAxisFromPlacement.js";
  4. import { top, right, bottom, left, start, end } from "../enums.js";
  5. export default function computeOffsets(_ref) {
  6. var reference = _ref.reference,
  7. element = _ref.element,
  8. placement = _ref.placement;
  9. var basePlacement = placement ? getBasePlacement(placement) : null;
  10. var variation = placement ? getVariation(placement) : null;
  11. var commonX = reference.x + reference.width / 2 - element.width / 2;
  12. var commonY = reference.y + reference.height / 2 - element.height / 2;
  13. var offsets;
  14. switch (basePlacement) {
  15. case top:
  16. offsets = {
  17. x: commonX,
  18. y: reference.y - element.height
  19. };
  20. break;
  21. case bottom:
  22. offsets = {
  23. x: commonX,
  24. y: reference.y + reference.height
  25. };
  26. break;
  27. case right:
  28. offsets = {
  29. x: reference.x + reference.width,
  30. y: commonY
  31. };
  32. break;
  33. case left:
  34. offsets = {
  35. x: reference.x - element.width,
  36. y: commonY
  37. };
  38. break;
  39. default:
  40. offsets = {
  41. x: reference.x,
  42. y: reference.y
  43. };
  44. }
  45. var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;
  46. if (mainAxis != null) {
  47. var len = mainAxis === 'y' ? 'height' : 'width';
  48. switch (variation) {
  49. case start:
  50. offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);
  51. break;
  52. case end:
  53. offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);
  54. break;
  55. default:
  56. }
  57. }
  58. return offsets;
  59. }