UNPKG

@atlaskit/popper

Version:

A wrapper for React Popper for situations which require a bespoke popup where other ADS components are deemed unsuitable

93 lines (89 loc) 4.16 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); exports.Popper = Popper; Object.defineProperty(exports, "placements", { enumerable: true, get: function get() { return _core.placements; } }); var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _react = _interopRequireWildcard(require("react")); var _reactPopper = require("react-popper"); var _maxSize = require("./max-size"); var _core = require("@popperjs/core"); function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); } // Export types from PopperJS / React Popper var viewportPadding = 5; var constantModifiers = [{ name: 'flip', options: { flipVariations: false, padding: viewportPadding, boundary: 'clippingParents', rootBoundary: 'viewport' } }]; function defaultChildrenFn() { return null; } var defaultOffset = [0, 8]; function Popper(_ref) { var _ref$children = _ref.children, children = _ref$children === void 0 ? defaultChildrenFn : _ref$children, _ref$offset = _ref.offset, offset = _ref$offset === void 0 ? defaultOffset : _ref$offset, _ref$placement = _ref.placement, placement = _ref$placement === void 0 ? 'bottom-start' : _ref$placement, _ref$referenceElement = _ref.referenceElement, referenceElement = _ref$referenceElement === void 0 ? undefined : _ref$referenceElement, modifiers = _ref.modifiers, _ref$strategy = _ref.strategy, strategy = _ref$strategy === void 0 ? 'fixed' : _ref$strategy, _ref$shouldFitViewpor = _ref.shouldFitViewport, shouldFitViewport = _ref$shouldFitViewpor === void 0 ? false : _ref$shouldFitViewpor; var _offset = (0, _slicedToArray2.default)(offset, 2), offsetX = _offset[0], offsetY = _offset[1]; var internalModifiers = (0, _react.useMemo)(function () { var preventOverflowModifier = { name: 'preventOverflow', options: { padding: viewportPadding, rootBoundary: shouldFitViewport ? 'viewport' : 'document' } }; var offsetModifier = { name: 'offset', options: { offset: [offsetX, offsetY] } }; var maxSizeModifiers = shouldFitViewport ? (0, _maxSize.getMaxSizeModifiers)({ viewportPadding: viewportPadding }) : []; // @ts-ignore Type errors from incompatible @popperjs/core versions between Jira and AFM Platform... we are using ts-ignore here because ts-expect-error will cause an "Unused '@ts-expect-error' directive." error return [].concat(constantModifiers, [preventOverflowModifier, offsetModifier], (0, _toConsumableArray2.default)(maxSizeModifiers)); }, [offsetX, offsetY, shouldFitViewport]); // Merge custom props and memoize var mergedModifiers = (0, _react.useMemo)(function () { if (modifiers == null) { return internalModifiers; } return [].concat((0, _toConsumableArray2.default)(internalModifiers), (0, _toConsumableArray2.default)(modifiers)); }, [internalModifiers, modifiers]); return /*#__PURE__*/_react.default.createElement(_reactPopper.Popper // @ts-expect-error - No overload matches this call // This error was introduced after upgrading to TypeScript 5 , { modifiers: mergedModifiers, placement: placement, strategy: strategy, referenceElement: referenceElement }, children); }