Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.
 
 
 
 

281 rinda
8.4 KiB

  1. "use strict";
  2. var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
  3. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  4. exports.__esModule = true;
  5. exports["default"] = void 0;
  6. var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
  7. var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
  8. var _popper = _interopRequireDefault(require("popper.js"));
  9. var _propTypes = _interopRequireDefault(require("prop-types"));
  10. var _react = _interopRequireWildcard(require("react"));
  11. var _reactDom = _interopRequireDefault(require("react-dom"));
  12. var _useCallbackRef3 = _interopRequireDefault(require("@restart/hooks/useCallbackRef"));
  13. var _useMergedRefs = _interopRequireDefault(require("@restart/hooks/useMergedRefs"));
  14. var _usePopper2 = _interopRequireDefault(require("./usePopper"));
  15. var _useRootClose = _interopRequireDefault(require("./useRootClose"));
  16. var _useWaitForDOMRef = _interopRequireDefault(require("./utils/useWaitForDOMRef"));
  17. /**
  18. * Built on top of `Popper.js`, the overlay component is
  19. * great for custom tooltip overlays.
  20. */
  21. var Overlay = _react["default"].forwardRef(function (props, outerRef) {
  22. var flip = props.flip,
  23. placement = props.placement,
  24. containerPadding = props.containerPadding,
  25. _props$popperConfig = props.popperConfig,
  26. popperConfig = _props$popperConfig === void 0 ? {} : _props$popperConfig,
  27. Transition = props.transition;
  28. var _useCallbackRef = (0, _useCallbackRef3["default"])(),
  29. rootElement = _useCallbackRef[0],
  30. attachRef = _useCallbackRef[1];
  31. var _useCallbackRef2 = (0, _useCallbackRef3["default"])(),
  32. arrowElement = _useCallbackRef2[0],
  33. attachArrowRef = _useCallbackRef2[1];
  34. var mergedRef = (0, _useMergedRefs["default"])(attachRef, outerRef);
  35. var container = (0, _useWaitForDOMRef["default"])(props.container);
  36. var target = (0, _useWaitForDOMRef["default"])(props.target);
  37. var _useState = (0, _react.useState)(!props.show),
  38. exited = _useState[0],
  39. setExited = _useState[1];
  40. var _popperConfig$modifie = popperConfig.modifiers,
  41. modifiers = _popperConfig$modifie === void 0 ? {} : _popperConfig$modifie;
  42. var _usePopper = (0, _usePopper2["default"])(target, rootElement, (0, _extends2["default"])({}, popperConfig, {
  43. placement: placement || 'bottom',
  44. enableEvents: props.show,
  45. modifiers: (0, _extends2["default"])({}, modifiers, {
  46. preventOverflow: (0, _extends2["default"])({
  47. padding: containerPadding || 5
  48. }, modifiers.preventOverflow),
  49. arrow: (0, _extends2["default"])({}, modifiers.arrow, {
  50. enabled: !!arrowElement,
  51. element: arrowElement
  52. }),
  53. flip: (0, _extends2["default"])({
  54. enabled: !!flip
  55. }, modifiers.preventOverflow)
  56. })
  57. })),
  58. styles = _usePopper.styles,
  59. arrowStyles = _usePopper.arrowStyles,
  60. popper = (0, _objectWithoutPropertiesLoose2["default"])(_usePopper, ["styles", "arrowStyles"]);
  61. if (props.show) {
  62. if (exited) setExited(false);
  63. } else if (!props.transition && !exited) {
  64. setExited(true);
  65. }
  66. var handleHidden = function handleHidden() {
  67. setExited(true);
  68. if (props.onExited) {
  69. props.onExited.apply(props, arguments);
  70. }
  71. }; // Don't un-render the overlay while it's transitioning out.
  72. var mountOverlay = props.show || Transition && !exited;
  73. (0, _useRootClose["default"])(rootElement, props.onHide, {
  74. disabled: !props.rootClose || props.rootCloseDisabled,
  75. clickTrigger: props.rootCloseEvent
  76. });
  77. if (!mountOverlay) {
  78. // Don't bother showing anything if we don't have to.
  79. return null;
  80. }
  81. var child = props.children((0, _extends2["default"])({}, popper, {
  82. show: props.show,
  83. props: {
  84. style: styles,
  85. ref: mergedRef
  86. },
  87. arrowProps: {
  88. style: arrowStyles,
  89. ref: attachArrowRef
  90. }
  91. }));
  92. if (Transition) {
  93. var onExit = props.onExit,
  94. onExiting = props.onExiting,
  95. onEnter = props.onEnter,
  96. onEntering = props.onEntering,
  97. onEntered = props.onEntered;
  98. child = _react["default"].createElement(Transition, {
  99. "in": props.show,
  100. appear: true,
  101. onExit: onExit,
  102. onExiting: onExiting,
  103. onExited: handleHidden,
  104. onEnter: onEnter,
  105. onEntering: onEntering,
  106. onEntered: onEntered
  107. }, child);
  108. }
  109. return container ? _reactDom["default"].createPortal(child, container) : null;
  110. });
  111. Overlay.displayName = 'Overlay';
  112. Overlay.propTypes = {
  113. /**
  114. * Set the visibility of the Overlay
  115. */
  116. show: _propTypes["default"].bool,
  117. /** Specify where the overlay element is positioned in relation to the target element */
  118. placement: _propTypes["default"].oneOf(_popper["default"].placements),
  119. /**
  120. * A DOM Element, Ref to an element, or function that returns either. The `target` element is where
  121. * the overlay is positioned relative to.
  122. */
  123. target: _propTypes["default"].any,
  124. /**
  125. * A DOM Element, Ref to an element, or function that returns either. The `container` will have the Portal children
  126. * appended to it.
  127. */
  128. container: _propTypes["default"].any,
  129. /**
  130. * Enables the Popper.js `flip` modifier, allowing the Overlay to
  131. * automatically adjust it's placement in case of overlap with the viewport or toggle.
  132. * Refer to the [flip docs](https://popper.js.org/popper-documentation.html#modifiers..flip.enabled) for more info
  133. */
  134. flip: _propTypes["default"].bool,
  135. /**
  136. * A render prop that returns an element to overlay and position. See
  137. * the [react-popper documentation](https://github.com/FezVrasta/react-popper#children) for more info.
  138. *
  139. * @type {Function ({
  140. * show: boolean,
  141. * placement: Placement,
  142. * outOfBoundaries: ?boolean,
  143. * scheduleUpdate: () => void,
  144. * props: {
  145. * ref: (?HTMLElement) => void,
  146. * style: { [string]: string | number },
  147. * aria-labelledby: ?string
  148. * },
  149. * arrowProps: {
  150. * ref: (?HTMLElement) => void,
  151. * style: { [string]: string | number },
  152. * },
  153. * }) => React.Element}
  154. */
  155. children: _propTypes["default"].func.isRequired,
  156. /**
  157. * Control how much space there is between the edge of the boundary element and overlay.
  158. * A convenience shortcut to setting `popperConfig.modfiers.preventOverflow.padding`
  159. */
  160. containerPadding: _propTypes["default"].number,
  161. /**
  162. * A set of popper options and props passed directly to react-popper's Popper component.
  163. */
  164. popperConfig: _propTypes["default"].object,
  165. /**
  166. * Specify whether the overlay should trigger `onHide` when the user clicks outside the overlay
  167. */
  168. rootClose: _propTypes["default"].bool,
  169. /**
  170. * Specify event for toggling overlay
  171. */
  172. rootCloseEvent: _propTypes["default"].oneOf(['click', 'mousedown']),
  173. /**
  174. * Specify disabled for disable RootCloseWrapper
  175. */
  176. rootCloseDisabled: _propTypes["default"].bool,
  177. /**
  178. * A Callback fired by the Overlay when it wishes to be hidden.
  179. *
  180. * __required__ when `rootClose` is `true`.
  181. *
  182. * @type func
  183. */
  184. onHide: function onHide(props) {
  185. var propType = _propTypes["default"].func;
  186. if (props.rootClose) {
  187. propType = propType.isRequired;
  188. }
  189. for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
  190. args[_key - 1] = arguments[_key];
  191. }
  192. return propType.apply(void 0, [props].concat(args));
  193. },
  194. /**
  195. * A `react-transition-group@2.0.0` `<Transition/>` component
  196. * used to animate the overlay as it changes visibility.
  197. */
  198. transition: _propTypes["default"].elementType,
  199. /**
  200. * Callback fired before the Overlay transitions in
  201. */
  202. onEnter: _propTypes["default"].func,
  203. /**
  204. * Callback fired as the Overlay begins to transition in
  205. */
  206. onEntering: _propTypes["default"].func,
  207. /**
  208. * Callback fired after the Overlay finishes transitioning in
  209. */
  210. onEntered: _propTypes["default"].func,
  211. /**
  212. * Callback fired right before the Overlay transitions out
  213. */
  214. onExit: _propTypes["default"].func,
  215. /**
  216. * Callback fired as the Overlay begins to transition out
  217. */
  218. onExiting: _propTypes["default"].func,
  219. /**
  220. * Callback fired after the Overlay finishes transitioning out
  221. */
  222. onExited: _propTypes["default"].func
  223. };
  224. Overlay.defaultProps = {
  225. containerPadding: 5
  226. };
  227. var _default = Overlay;
  228. exports["default"] = _default;
  229. module.exports = exports.default;