maycur-business
Version:
maycur business react components of web
487 lines (378 loc) • 17.9 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _globals = require("./core/globals");
var _reactDom = _interopRequireDefault(require("react-dom"));
var _init = _interopRequireDefault(require("./core/init"));
var _defer = _interopRequireDefault(require("./utils/defer"));
var _find = _interopRequireDefault(require("./utils/find"));
var _findIndex = _interopRequireDefault(require("./utils/findIndex"));
var _removeTitle = _interopRequireDefault(require("./utils/removeTitle"));
var _elementIsInViewport = _interopRequireDefault(require("./utils/elementIsInViewport"));
var _triggerReflow = _interopRequireDefault(require("./utils/triggerReflow"));
var _modifyClassList = _interopRequireDefault(require("./utils/modifyClassList"));
var _getInnerElements4 = _interopRequireDefault(require("./utils/getInnerElements"));
var _applyTransitionDuration = _interopRequireDefault(require("./utils/applyTransitionDuration"));
var _isVisible = _interopRequireDefault(require("./utils/isVisible"));
var _noop = _interopRequireDefault(require("./utils/noop"));
var _followCursorHandler = _interopRequireDefault(require("./core/followCursorHandler"));
var _getArrayOfElements = _interopRequireDefault(require("./core/getArrayOfElements"));
var _onTransitionEnd = _interopRequireDefault(require("./core/onTransitionEnd"));
var _mountPopper = _interopRequireDefault(require("./core/mountPopper"));
var _makeSticky = _interopRequireDefault(require("./core/makeSticky"));
var _createTooltips = _interopRequireDefault(require("./core/createTooltips"));
var _utils = _interopRequireDefault(require("../../utils/utils"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
var prefix = _utils["default"].prefixCls;
/**
* @param {String|Element|Element[]} selector
* @param {Object} settings (optional) - the object of settings to be applied to the instance
*/
var Tippy =
/*#__PURE__*/
function () {
function Tippy(selector) {
var settings = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
_classCallCheck(this, Tippy);
// Use default browser tooltip on unsupported browsers
if (!_globals.Browser.SUPPORTED) return;
(0, _init["default"])();
this.state = {
destroyed: false
};
this.selector = selector;
this.hide = this.hide;
this.destroy = this.destroy;
this.settings = _objectSpread({}, _globals.Defaults, {}, settings);
if (settings.show || settings.shown || settings.hide || settings.hidden) {
console.warn('Callbacks without the `on` prefix are deprecated (with the exception of `wait`).' + ' Use onShow, onShown, onHide, and onHidden instead.');
}
this.callbacks = {
wait: settings.wait,
show: settings.onShow || settings.show || _noop["default"],
shown: settings.onShown || settings.shown || _noop["default"],
hide: settings.onHide || settings.hide || _noop["default"],
hidden: settings.onHidden || settings.hidden || _noop["default"]
};
this.store = _createTooltips["default"].call(this, (0, _getArrayOfElements["default"])(selector));
_globals.Store.push.apply(_globals.Store, this.store);
}
/**
* Returns the reference element's popper element
* @param {Element} el
* @return {Element}
*/
_createClass(Tippy, [{
key: "getPopperElement",
value: function getPopperElement(el) {
try {
return (0, _find["default"])(this.store, function (data) {
return data.el === el;
}).popper;
} catch (e) {
console.error('[getPopperElement]: Element passed as the argument does not exist in the instance');
}
}
/**
* Returns a popper's reference element
* @param {Element} popper
* @return {Element}
*/
}, {
key: "getReferenceElement",
value: function getReferenceElement(popper) {
try {
return (0, _find["default"])(this.store, function (data) {
return data.popper === popper;
}).el;
} catch (e) {
console.error('[getReferenceElement]: Popper passed as the argument does not exist in the instance');
}
}
/**
* Returns the reference data object from either the reference element or popper element
* @param {Element} x (reference element or popper)
* @return {Object}
*/
}, {
key: "getReferenceData",
value: function getReferenceData(x) {
return (0, _find["default"])(this.store, function (data) {
return data.el === x || data.popper === x;
});
}
/**
* Update settings
* @param {DOMElement} - popper
* @param {string} - name
* @param {string} - value
*/
}, {
key: "updateSettings",
value: function updateSettings(popper, name, value) {
var data = (0, _find["default"])(this.store, function (data) {
return data.popper === popper;
});
if (!data) return;
var newSettings = _objectSpread({}, data.settings, _defineProperty({}, name, value));
data.settings = newSettings;
}
}, {
key: "updateForReact",
/**
* Update for React
* @param {DOMElement} - popper
* @param {ReactElement} - content
*/
value: function updateForReact(popper, updatedContent) {
var tooltipContent = popper.querySelector(_globals.Selectors.CONTENT);
var data = (0, _find["default"])(this.store, function (data) {
return data.popper === popper;
});
if (!data) return;
var useContext = data.settings.useContext;
if (useContext) {
_reactDom["default"].unstable_renderSubtreeIntoContainer(data.settings.reactInstance, updatedContent, tooltipContent);
} else {
_reactDom["default"].render(updatedContent, tooltipContent);
}
}
/**
* Shows a popper
* @param {Element} popper
* @param {Number} customDuration (optional)
*/
}, {
key: "show",
value: function show(popper, customDuration) {
var _this = this;
if (this.state.destroyed) return;
var data = (0, _find["default"])(this.store, function (data) {
return data.popper === popper;
});
if (!data) return;
var _getInnerElements = (0, _getInnerElements4["default"])(popper),
tooltip = _getInnerElements.tooltip,
circle = _getInnerElements.circle,
content = _getInnerElements.content;
if (!document.body.contains(data.el)) {
this.destroy(popper);
return;
}
this.callbacks.show.call(popper); // Custom react
if (data.settings && data.settings.open === false) {
return;
}
if (data.settings.reactDOM) {
this.updateForReact(popper, data.settings.reactDOM);
} // end: Custom react
var el = data.el,
_data$settings = data.settings,
sticky = _data$settings.sticky,
interactive = _data$settings.interactive,
followCursor = _data$settings.followCursor,
flipDuration = _data$settings.flipDuration,
duration = _data$settings.duration,
dynamicTitle = _data$settings.dynamicTitle;
if (dynamicTitle) {
var title = el.getAttribute('title');
if (title) {
content.innerHTML = title;
(0, _removeTitle["default"])(el);
}
}
var _duration = customDuration !== undefined ? customDuration : Array.isArray(duration) ? duration[0] : duration; // Prevent a transition when popper changes position
(0, _applyTransitionDuration["default"])([popper, tooltip, circle], 0);
(0, _mountPopper["default"])(data);
popper.style.visibility = 'visible';
popper.setAttribute('aria-hidden', 'false'); // Wait for popper's position to update
(0, _defer["default"])(function () {
// Sometimes the arrow will not be in the correct position, force another update
if (!followCursor || _globals.Browser.touch) {
data.popperInstance.update();
(0, _applyTransitionDuration["default"])([popper], flipDuration);
} // Re-apply transition durations
(0, _applyTransitionDuration["default"])([tooltip, circle], _duration); // Make content fade out a bit faster than the tooltip if `animateFill`
if (circle) content.style.opacity = 1; // Interactive tooltips receive a class of 'active'
interactive && el.classList.add('active'); // Update popper's position on every animation frame
sticky && (0, _makeSticky["default"])(data); // Repaint/reflow is required for CSS transition when appending
(0, _triggerReflow["default"])(tooltip, circle);
(0, _modifyClassList["default"])([tooltip, circle], function (list) {
list.contains("".concat(prefix, "-tippy-notransition")) && list.remove("".concat(prefix, "-tippy-notransition"));
list.remove('leave');
list.add('enter');
}); // Wait for transitions to complete
(0, _onTransitionEnd["default"])(data, _duration, function () {
if (!(0, _isVisible["default"])(popper) || data._onShownFired) return; // Focus interactive tooltips only
interactive && popper.focus(); // Remove transitions from tooltip
tooltip.classList.add("".concat(prefix, "-tippy-notransition")); // Prevents shown() from firing more than once from early transition cancellations
data._onShownFired = true;
_this.callbacks.shown.call(popper);
});
});
}
/**
* Hides a popper
* @param {Element} popper
* @param {Number} customDuration (optional)
*/
}, {
key: "hide",
value: function hide(popper, customDuration) {
var _this2 = this;
if (this.state.destroyed) return;
this.callbacks.hide.call(popper);
var data = (0, _find["default"])(this.store, function (data) {
return data.popper === popper;
});
if (!data) return;
var _getInnerElements2 = (0, _getInnerElements4["default"])(popper),
tooltip = _getInnerElements2.tooltip,
circle = _getInnerElements2.circle,
content = _getInnerElements2.content; // custom react
// Prevent hide if open
if (data.settings.disabled === false && data.settings.open) {
return;
}
var isUnmount = data && data.settings && data.settings.unmountHTMLWhenHide && data.settings.reactDOM; // end: custom react
var el = data.el,
_data$settings2 = data.settings,
appendTo = _data$settings2.appendTo,
interactive = _data$settings2.interactive,
html = _data$settings2.html,
trigger = _data$settings2.trigger,
duration = _data$settings2.duration;
var _duration = customDuration !== undefined ? customDuration : Array.isArray(duration) ? duration[1] : duration;
data._onShownFired = false;
interactive && el.classList.remove('active');
popper.style.visibility = 'hidden';
popper.setAttribute('aria-hidden', 'true');
(0, _applyTransitionDuration["default"])([tooltip, circle, circle ? content : null], _duration);
if (circle) content.style.opacity = 0;
(0, _modifyClassList["default"])([tooltip, circle], function (list) {
list.contains("".concat(prefix, "-tippy-tooltip")) && list.remove("".concat(prefix, "-tippy-notransition"));
list.remove('enter');
list.add('leave');
}); // Re-focus click-triggered html elements
// and the tooltipped element IS in the viewport (otherwise it causes unsightly scrolling
// if the tooltip is closed and the element isn't in the viewport anymore)
if (html && trigger.indexOf('click') !== -1 && (0, _elementIsInViewport["default"])(el)) {
el.focus();
} // Wait for transitions to complete
(0, _onTransitionEnd["default"])(data, _duration, function () {
// `isVisible` is not completely reliable to determine if we shouldn't
// run the hidden callback, we need to check the computed opacity style.
// This prevents glitchy behavior of the transition when quickly showing
// and hiding a tooltip.
if ((0, _isVisible["default"])(popper) || !appendTo.contains(popper) || getComputedStyle(tooltip).opacity === '1') return;
el.removeEventListener('mousemove', _followCursorHandler["default"]);
data.popperInstance.disableEventListeners();
appendTo.removeChild(popper);
_this2.callbacks.hidden.call(popper); // custom react
if (isUnmount) {
_reactDom["default"].unmountComponentAtNode(content);
}
});
}
/**
* Updates a popper with new content
* @param {Element} popper
*/
}, {
key: "update",
value: function update(popper) {
if (this.state.destroyed) return;
var data = (0, _find["default"])(this.store, function (data) {
return data.popper === popper;
});
if (!data) return;
var _getInnerElements3 = (0, _getInnerElements4["default"])(popper),
content = _getInnerElements3.content;
var el = data.el,
html = data.settings.html;
if (html instanceof Element) {
console.warn('Aborted: update() should not be used if `html` is a DOM element');
return;
}
content.innerHTML = html ? document.getElementById(html.replace('#', '')).innerHTML : el.getAttribute('title') || el.getAttribute('data-original-title');
if (!html) (0, _removeTitle["default"])(el);
}
/**
* Destroys a popper
* @param {Element} popper
* @param {Boolean} _isLast - private param used by destroyAll to optimize
*/
}, {
key: "destroy",
value: function destroy(popper, _isLast) {
var _this3 = this;
if (this.state.destroyed) return;
var data = (0, _find["default"])(this.store, function (data) {
return data.popper === popper;
});
if (!data) return;
var el = data.el,
popperInstance = data.popperInstance,
listeners = data.listeners,
_mutationObserver = data._mutationObserver; // Ensure the popper is hidden
if ((0, _isVisible["default"])(popper)) {
this.hide(popper, 0);
} // Remove Tippy-only event listeners from tooltipped element
listeners.forEach(function (listener) {
return el.removeEventListener(listener.event, listener.handler);
}); // Restore original title
el.setAttribute('title', el.getAttribute('data-original-title'));
el.removeAttribute('data-original-title');
el.removeAttribute('data-tooltipped');
el.removeAttribute('aria-describedby');
popperInstance && popperInstance.destroy();
_mutationObserver && _mutationObserver.disconnect(); // Remove from store
_globals.Store.splice((0, _findIndex["default"])(_globals.Store, function (data) {
return data.popper === popper;
}), 1); // Ensure filter is called only once
if (_isLast === undefined || _isLast) {
this.store = _globals.Store.filter(function (data) {
return data.tippyInstance === _this3;
});
}
}
/**
* Destroys all tooltips created by the instance
*/
}, {
key: "destroyAll",
value: function destroyAll() {
var _this4 = this;
if (this.state.destroyed) return;
var storeLength = this.store.length;
this.store.forEach(function (_ref, index) {
var popper = _ref.popper;
_this4.destroy(popper, index === storeLength - 1);
});
this.store = null;
this.state.destroyed = true;
}
}]);
return Tippy;
}();
function tippy(selector, settings) {
return new Tippy(selector, settings);
}
tippy.Browser = _globals.Browser;
tippy.Defaults = _globals.Defaults;
tippy.disableDynamicInputDetection = function () {
return _globals.Browser.dynamicInputDetection = false;
};
tippy.enableDynamicInputDetection = function () {
return _globals.Browser.dynamicInputDetection = true;
};
var _default = tippy;
exports["default"] = _default;