UNPKG

@gravity-ui/uikit

Version:

Gravity UI base styling and components

82 lines (81 loc) 2.57 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.arrowStylesMiddleware = void 0; exports.getOffsetOptions = getOffsetOptions; exports.getPlacementOptions = getPlacementOptions; const react_1 = require("@floating-ui/react"); const constants_1 = require("./constants.js"); function getOffsetOptions(offsetProp, hasArrow) { let offset = offsetProp; if (hasArrow) { if (typeof offset === 'number') { offset += constants_1.ARROW_SIZE; } else { offset = { ...offset, mainAxis: (offset.mainAxis ?? 0) + constants_1.ARROW_SIZE }; } } return { offset }; } function isAutoPlacement(placement) { return Boolean(placement && constants_1.AUTO_PLACEMENTS.includes(placement)); } function getPlacementOptions(placementProp, disablePortal) { let placement; let middleware; if (Array.isArray(placementProp)) { placement = placementProp[0]; middleware = (0, react_1.flip)({ padding: constants_1.OVERFLOW_PADDING, altBoundary: disablePortal, fallbackPlacements: placementProp.slice(1), }); } else if (isAutoPlacement(placementProp)) { let alignment; if (placementProp === 'auto-start') { alignment = 'start'; } else if (placementProp === 'auto-end') { alignment = 'end'; } placement = undefined; middleware = (0, react_1.autoPlacement)({ padding: constants_1.OVERFLOW_PADDING, altBoundary: disablePortal, alignment, }); } else { let fallbackAxisSideDirection; if (placementProp?.startsWith('top') || placementProp?.startsWith('left')) { fallbackAxisSideDirection = 'start'; } else { fallbackAxisSideDirection = 'end'; } placement = placementProp; middleware = (0, react_1.flip)({ padding: constants_1.OVERFLOW_PADDING, altBoundary: disablePortal, fallbackAxisSideDirection, }); } return { placement, middleware }; } const arrowStylesMiddleware = () => ({ name: 'arrowStyles', fn({ middlewareData }) { if (!middlewareData.arrow) { return {}; } return { data: { left: middlewareData.arrow.x, top: middlewareData.arrow.y, }, }; }, }); exports.arrowStylesMiddleware = arrowStylesMiddleware; //# sourceMappingURL=utils.js.map