diff options
Diffstat (limited to 'popperjs/package/lib/modifiers/offset.js')
-rw-r--r-- | popperjs/package/lib/modifiers/offset.js | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/popperjs/package/lib/modifiers/offset.js b/popperjs/package/lib/modifiers/offset.js new file mode 100644 index 0000000..12fa007 --- /dev/null +++ b/popperjs/package/lib/modifiers/offset.js @@ -0,0 +1,54 @@ +import getBasePlacement from "../utils/getBasePlacement.js"; +import { top, left, right, placements } from "../enums.js"; // eslint-disable-next-line import/no-unused-modules + +export function distanceAndSkiddingToXY(placement, rects, offset) { + var basePlacement = getBasePlacement(placement); + var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1; + + var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, { + placement: placement + })) : offset, + skidding = _ref[0], + distance = _ref[1]; + + skidding = skidding || 0; + distance = (distance || 0) * invertDistance; + return [left, right].indexOf(basePlacement) >= 0 ? { + x: distance, + y: skidding + } : { + x: skidding, + y: distance + }; +} + +function offset(_ref2) { + var state = _ref2.state, + options = _ref2.options, + name = _ref2.name; + var _options$offset = options.offset, + offset = _options$offset === void 0 ? [0, 0] : _options$offset; + var data = placements.reduce(function (acc, placement) { + acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset); + return acc; + }, {}); + var _data$state$placement = data[state.placement], + x = _data$state$placement.x, + y = _data$state$placement.y; + + if (state.modifiersData.popperOffsets != null) { + state.modifiersData.popperOffsets.x += x; + state.modifiersData.popperOffsets.y += y; + } + + state.modifiersData[name] = data; +} // eslint-disable-next-line import/no-unused-modules + + +export default { + name: 'offset', + enabled: true, + phase: 'main', + requires: ['popperOffsets'], + fn: offset +};
\ No newline at end of file |