mirror of
https://github.com/idanoo/GoScrobble.git
synced 2024-11-26 10:25:14 +00:00
275 lines
8.4 KiB
JavaScript
275 lines
8.4 KiB
JavaScript
|
"use strict";
|
||
|
|
||
|
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
|
||
|
|
||
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
||
|
|
||
|
exports.__esModule = true;
|
||
|
exports["default"] = void 0;
|
||
|
|
||
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
||
|
|
||
|
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
|
||
|
|
||
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
||
|
|
||
|
var _react = _interopRequireWildcard(require("react"));
|
||
|
|
||
|
var _reactDom = _interopRequireDefault(require("react-dom"));
|
||
|
|
||
|
var _useCallbackRef3 = _interopRequireDefault(require("@restart/hooks/useCallbackRef"));
|
||
|
|
||
|
var _useMergedRefs = _interopRequireDefault(require("@restart/hooks/useMergedRefs"));
|
||
|
|
||
|
var _popper = require("./popper");
|
||
|
|
||
|
var _usePopper2 = _interopRequireDefault(require("./usePopper"));
|
||
|
|
||
|
var _useRootClose = _interopRequireDefault(require("./useRootClose"));
|
||
|
|
||
|
var _useWaitForDOMRef = _interopRequireDefault(require("./useWaitForDOMRef"));
|
||
|
|
||
|
var _mergeOptionsWithPopperConfig = _interopRequireDefault(require("./mergeOptionsWithPopperConfig"));
|
||
|
|
||
|
/**
|
||
|
* Built on top of `Popper.js`, the overlay component is
|
||
|
* great for custom tooltip overlays.
|
||
|
*/
|
||
|
var Overlay = /*#__PURE__*/_react["default"].forwardRef(function (props, outerRef) {
|
||
|
var flip = props.flip,
|
||
|
offset = props.offset,
|
||
|
placement = props.placement,
|
||
|
_props$containerPaddi = props.containerPadding,
|
||
|
containerPadding = _props$containerPaddi === void 0 ? 5 : _props$containerPaddi,
|
||
|
_props$popperConfig = props.popperConfig,
|
||
|
popperConfig = _props$popperConfig === void 0 ? {} : _props$popperConfig,
|
||
|
Transition = props.transition;
|
||
|
|
||
|
var _useCallbackRef = (0, _useCallbackRef3["default"])(),
|
||
|
rootElement = _useCallbackRef[0],
|
||
|
attachRef = _useCallbackRef[1];
|
||
|
|
||
|
var _useCallbackRef2 = (0, _useCallbackRef3["default"])(),
|
||
|
arrowElement = _useCallbackRef2[0],
|
||
|
attachArrowRef = _useCallbackRef2[1];
|
||
|
|
||
|
var mergedRef = (0, _useMergedRefs["default"])(attachRef, outerRef);
|
||
|
var container = (0, _useWaitForDOMRef["default"])(props.container);
|
||
|
var target = (0, _useWaitForDOMRef["default"])(props.target);
|
||
|
|
||
|
var _useState = (0, _react.useState)(!props.show),
|
||
|
exited = _useState[0],
|
||
|
setExited = _useState[1];
|
||
|
|
||
|
var _usePopper = (0, _usePopper2["default"])(target, rootElement, (0, _mergeOptionsWithPopperConfig["default"])({
|
||
|
placement: placement,
|
||
|
enableEvents: !!props.show,
|
||
|
containerPadding: containerPadding || 5,
|
||
|
flip: flip,
|
||
|
offset: offset,
|
||
|
arrowElement: arrowElement,
|
||
|
popperConfig: popperConfig
|
||
|
})),
|
||
|
styles = _usePopper.styles,
|
||
|
attributes = _usePopper.attributes,
|
||
|
popper = (0, _objectWithoutPropertiesLoose2["default"])(_usePopper, ["styles", "attributes"]);
|
||
|
|
||
|
if (props.show) {
|
||
|
if (exited) setExited(false);
|
||
|
} else if (!props.transition && !exited) {
|
||
|
setExited(true);
|
||
|
}
|
||
|
|
||
|
var handleHidden = function handleHidden() {
|
||
|
setExited(true);
|
||
|
|
||
|
if (props.onExited) {
|
||
|
props.onExited.apply(props, arguments);
|
||
|
}
|
||
|
}; // Don't un-render the overlay while it's transitioning out.
|
||
|
|
||
|
|
||
|
var mountOverlay = props.show || Transition && !exited;
|
||
|
(0, _useRootClose["default"])(rootElement, props.onHide, {
|
||
|
disabled: !props.rootClose || props.rootCloseDisabled,
|
||
|
clickTrigger: props.rootCloseEvent
|
||
|
});
|
||
|
|
||
|
if (!mountOverlay) {
|
||
|
// Don't bother showing anything if we don't have to.
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
var child = props.children((0, _extends2["default"])({}, popper, {
|
||
|
show: !!props.show,
|
||
|
props: (0, _extends2["default"])({}, attributes.popper, {
|
||
|
style: styles.popper,
|
||
|
ref: mergedRef
|
||
|
}),
|
||
|
arrowProps: (0, _extends2["default"])({}, attributes.arrow, {
|
||
|
style: styles.arrow,
|
||
|
ref: attachArrowRef
|
||
|
})
|
||
|
}));
|
||
|
|
||
|
if (Transition) {
|
||
|
var onExit = props.onExit,
|
||
|
onExiting = props.onExiting,
|
||
|
onEnter = props.onEnter,
|
||
|
onEntering = props.onEntering,
|
||
|
onEntered = props.onEntered;
|
||
|
child = /*#__PURE__*/_react["default"].createElement(Transition, {
|
||
|
"in": props.show,
|
||
|
appear: true,
|
||
|
onExit: onExit,
|
||
|
onExiting: onExiting,
|
||
|
onExited: handleHidden,
|
||
|
onEnter: onEnter,
|
||
|
onEntering: onEntering,
|
||
|
onEntered: onEntered
|
||
|
}, child);
|
||
|
}
|
||
|
|
||
|
return container ? /*#__PURE__*/_reactDom["default"].createPortal(child, container) : null;
|
||
|
});
|
||
|
|
||
|
Overlay.displayName = 'Overlay';
|
||
|
Overlay.propTypes = {
|
||
|
/**
|
||
|
* Set the visibility of the Overlay
|
||
|
*/
|
||
|
show: _propTypes["default"].bool,
|
||
|
|
||
|
/** Specify where the overlay element is positioned in relation to the target element */
|
||
|
placement: _propTypes["default"].oneOf(_popper.placements),
|
||
|
|
||
|
/**
|
||
|
* A DOM Element, Ref to an element, or function that returns either. The `target` element is where
|
||
|
* the overlay is positioned relative to.
|
||
|
*/
|
||
|
target: _propTypes["default"].any,
|
||
|
|
||
|
/**
|
||
|
* A DOM Element, Ref to an element, or function that returns either. The `container` will have the Portal children
|
||
|
* appended to it.
|
||
|
*/
|
||
|
container: _propTypes["default"].any,
|
||
|
|
||
|
/**
|
||
|
* Enables the Popper.js `flip` modifier, allowing the Overlay to
|
||
|
* automatically adjust it's placement in case of overlap with the viewport or toggle.
|
||
|
* Refer to the [flip docs](https://popper.js.org/popper-documentation.html#modifiers..flip.enabled) for more info
|
||
|
*/
|
||
|
flip: _propTypes["default"].bool,
|
||
|
|
||
|
/**
|
||
|
* A render prop that returns an element to overlay and position. See
|
||
|
* the [react-popper documentation](https://github.com/FezVrasta/react-popper#children) for more info.
|
||
|
*
|
||
|
* @type {Function ({
|
||
|
* show: boolean,
|
||
|
* placement: Placement,
|
||
|
* update: () => void,
|
||
|
* forceUpdate: () => void,
|
||
|
* props: {
|
||
|
* ref: (?HTMLElement) => void,
|
||
|
* style: { [string]: string | number },
|
||
|
* aria-labelledby: ?string
|
||
|
* [string]: string | number,
|
||
|
* },
|
||
|
* arrowProps: {
|
||
|
* ref: (?HTMLElement) => void,
|
||
|
* style: { [string]: string | number },
|
||
|
* [string]: string | number,
|
||
|
* },
|
||
|
* }) => React.Element}
|
||
|
*/
|
||
|
children: _propTypes["default"].func.isRequired,
|
||
|
|
||
|
/**
|
||
|
* Control how much space there is between the edge of the boundary element and overlay.
|
||
|
* A convenience shortcut to setting `popperConfig.modfiers.preventOverflow.padding`
|
||
|
*/
|
||
|
containerPadding: _propTypes["default"].number,
|
||
|
|
||
|
/**
|
||
|
* A set of popper options and props passed directly to react-popper's Popper component.
|
||
|
*/
|
||
|
popperConfig: _propTypes["default"].object,
|
||
|
|
||
|
/**
|
||
|
* Specify whether the overlay should trigger `onHide` when the user clicks outside the overlay
|
||
|
*/
|
||
|
rootClose: _propTypes["default"].bool,
|
||
|
|
||
|
/**
|
||
|
* Specify event for toggling overlay
|
||
|
*/
|
||
|
rootCloseEvent: _propTypes["default"].oneOf(['click', 'mousedown']),
|
||
|
|
||
|
/**
|
||
|
* Specify disabled for disable RootCloseWrapper
|
||
|
*/
|
||
|
rootCloseDisabled: _propTypes["default"].bool,
|
||
|
|
||
|
/**
|
||
|
* A Callback fired by the Overlay when it wishes to be hidden.
|
||
|
*
|
||
|
* __required__ when `rootClose` is `true`.
|
||
|
*
|
||
|
* @type func
|
||
|
*/
|
||
|
onHide: function onHide(props) {
|
||
|
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
||
|
args[_key - 1] = arguments[_key];
|
||
|
}
|
||
|
|
||
|
if (props.rootClose) {
|
||
|
var _PropTypes$func;
|
||
|
|
||
|
return (_PropTypes$func = _propTypes["default"].func).isRequired.apply(_PropTypes$func, [props].concat(args));
|
||
|
}
|
||
|
|
||
|
return _propTypes["default"].func.apply(_propTypes["default"], [props].concat(args));
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* A `react-transition-group@2.0.0` `<Transition/>` component
|
||
|
* used to animate the overlay as it changes visibility.
|
||
|
*/
|
||
|
// @ts-ignore
|
||
|
transition: _propTypes["default"].elementType,
|
||
|
|
||
|
/**
|
||
|
* Callback fired before the Overlay transitions in
|
||
|
*/
|
||
|
onEnter: _propTypes["default"].func,
|
||
|
|
||
|
/**
|
||
|
* Callback fired as the Overlay begins to transition in
|
||
|
*/
|
||
|
onEntering: _propTypes["default"].func,
|
||
|
|
||
|
/**
|
||
|
* Callback fired after the Overlay finishes transitioning in
|
||
|
*/
|
||
|
onEntered: _propTypes["default"].func,
|
||
|
|
||
|
/**
|
||
|
* Callback fired right before the Overlay transitions out
|
||
|
*/
|
||
|
onExit: _propTypes["default"].func,
|
||
|
|
||
|
/**
|
||
|
* Callback fired as the Overlay begins to transition out
|
||
|
*/
|
||
|
onExiting: _propTypes["default"].func,
|
||
|
|
||
|
/**
|
||
|
* Callback fired after the Overlay finishes transitioning out
|
||
|
*/
|
||
|
onExited: _propTypes["default"].func
|
||
|
};
|
||
|
var _default = Overlay;
|
||
|
exports["default"] = _default;
|
||
|
module.exports = exports.default;
|