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.

53 lines
1.6 KiB

2 months ago
  1. import getBasePlacement from "../utils/getBasePlacement.js";
  2. import { top, left, right, placements } from "../enums.js"; // eslint-disable-next-line import/no-unused-modules
  3. export function distanceAndSkiddingToXY(placement, rects, offset) {
  4. var basePlacement = getBasePlacement(placement);
  5. var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;
  6. var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {
  7. placement: placement
  8. })) : offset,
  9. skidding = _ref[0],
  10. distance = _ref[1];
  11. skidding = skidding || 0;
  12. distance = (distance || 0) * invertDistance;
  13. return [left, right].indexOf(basePlacement) >= 0 ? {
  14. x: distance,
  15. y: skidding
  16. } : {
  17. x: skidding,
  18. y: distance
  19. };
  20. }
  21. function offset(_ref2) {
  22. var state = _ref2.state,
  23. options = _ref2.options,
  24. name = _ref2.name;
  25. var _options$offset = options.offset,
  26. offset = _options$offset === void 0 ? [0, 0] : _options$offset;
  27. var data = placements.reduce(function (acc, placement) {
  28. acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);
  29. return acc;
  30. }, {});
  31. var _data$state$placement = data[state.placement],
  32. x = _data$state$placement.x,
  33. y = _data$state$placement.y;
  34. if (state.modifiersData.popperOffsets != null) {
  35. state.modifiersData.popperOffsets.x += x;
  36. state.modifiersData.popperOffsets.y += y;
  37. }
  38. state.modifiersData[name] = data;
  39. } // eslint-disable-next-line import/no-unused-modules
  40. export default {
  41. name: 'offset',
  42. enabled: true,
  43. phase: 'main',
  44. requires: ['popperOffsets'],
  45. fn: offset
  46. };