UNPKG

@yandex/ui

Version:

Yandex UI components

50 lines (49 loc) 2.43 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.offset = void 0; var directions_1 = require("../directions"); var utils_1 = require("../utils"); /** * Модификатор, устанавливающий отступы для попапа и хвостика. */ exports.offset = { name: 'offset', enabled: true, fn: offsetFn, phase: 'main', requires: ['popperOffsets'], }; // Не используем offset из popper, т.к. нам необходимо // применить дополнительное смещение с учетом хвостика, а также // округлить значения для правильного выравнивания. function offsetFn(_a) { var state = _a.state, options = _a.options; var _b = options.offset, offset = _b === void 0 ? [0, 0] : _b, tailOffset = options.tailOffset; if (state.modifiersData.arrow && tailOffset) { if (state.modifiersData.arrow.x) { state.modifiersData.arrow.x += tailOffset; } if (state.modifiersData.arrow.y) { state.modifiersData.arrow.y += tailOffset; } } if (state.modifiersData.popperOffsets && state.elements.arrow) { var width = utils_1.getLayoutRect(state.elements.arrow).width; // Смещаем хвостик на половину, т.к. он всегда должен быть вписан в квадрат, // для правильного позиционирования во всех направлениях. var _c = utils_1.distanceAndSkiddingToXY(state.placement, [0, width / 2]), x_1 = _c.x, y_1 = _c.y; state.modifiersData.popperOffsets.x += x_1; state.modifiersData.popperOffsets.y += y_1; } var data = directions_1.directions.reduce(function (acc, placement) { acc[placement] = utils_1.distanceAndSkiddingToXY(placement, offset); return acc; }, {}); var _d = data[state.placement], x = _d.x, y = _d.y; if (state.modifiersData.popperOffsets) { state.modifiersData.popperOffsets.x = Math.ceil(state.modifiersData.popperOffsets.x + x); state.modifiersData.popperOffsets.y = Math.ceil(state.modifiersData.popperOffsets.y + y); } // Записываем данные для дальнейшего использования в detectOverflow. state.modifiersData.offset = data; }