tooltip.js 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734
  1. (function (global, factory) {
  2. typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('popper.js'), require('./util.js')) :
  3. typeof define === 'function' && define.amd ? define(['jquery', 'popper.js', './util.js'], factory) :
  4. (global.Tooltip = factory(global.jQuery,global.Popper,global.Util));
  5. }(this, (function ($,Popper,Util) { 'use strict';
  6. $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
  7. Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper;
  8. Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;
  9. function _defineProperties(target, props) {
  10. for (var i = 0; i < props.length; i++) {
  11. var descriptor = props[i];
  12. descriptor.enumerable = descriptor.enumerable || false;
  13. descriptor.configurable = true;
  14. if ("value" in descriptor) descriptor.writable = true;
  15. Object.defineProperty(target, descriptor.key, descriptor);
  16. }
  17. }
  18. function _createClass(Constructor, protoProps, staticProps) {
  19. if (protoProps) _defineProperties(Constructor.prototype, protoProps);
  20. if (staticProps) _defineProperties(Constructor, staticProps);
  21. return Constructor;
  22. }
  23. function _defineProperty(obj, key, value) {
  24. if (key in obj) {
  25. Object.defineProperty(obj, key, {
  26. value: value,
  27. enumerable: true,
  28. configurable: true,
  29. writable: true
  30. });
  31. } else {
  32. obj[key] = value;
  33. }
  34. return obj;
  35. }
  36. function _objectSpread(target) {
  37. for (var i = 1; i < arguments.length; i++) {
  38. var source = arguments[i] != null ? arguments[i] : {};
  39. var ownKeys = Object.keys(source);
  40. if (typeof Object.getOwnPropertySymbols === 'function') {
  41. ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
  42. return Object.getOwnPropertyDescriptor(source, sym).enumerable;
  43. }));
  44. }
  45. ownKeys.forEach(function (key) {
  46. _defineProperty(target, key, source[key]);
  47. });
  48. }
  49. return target;
  50. }
  51. /**
  52. * --------------------------------------------------------------------------
  53. * Bootstrap (v4.1.3): tooltip.js
  54. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
  55. * --------------------------------------------------------------------------
  56. */
  57. var Tooltip = function ($$$1) {
  58. /**
  59. * ------------------------------------------------------------------------
  60. * Constants
  61. * ------------------------------------------------------------------------
  62. */
  63. var NAME = 'tooltip';
  64. var VERSION = '4.1.3';
  65. var DATA_KEY = 'bs.tooltip';
  66. var EVENT_KEY = "." + DATA_KEY;
  67. var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
  68. var CLASS_PREFIX = 'bs-tooltip';
  69. var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
  70. var DefaultType = {
  71. animation: 'boolean',
  72. template: 'string',
  73. title: '(string|element|function)',
  74. trigger: 'string',
  75. delay: '(number|object)',
  76. html: 'boolean',
  77. selector: '(string|boolean)',
  78. placement: '(string|function)',
  79. offset: '(number|string)',
  80. container: '(string|element|boolean)',
  81. fallbackPlacement: '(string|array)',
  82. boundary: '(string|element)'
  83. };
  84. var AttachmentMap = {
  85. AUTO: 'auto',
  86. TOP: 'top',
  87. RIGHT: 'right',
  88. BOTTOM: 'bottom',
  89. LEFT: 'left'
  90. };
  91. var Default = {
  92. animation: true,
  93. template: '<div class="tooltip" role="tooltip">' + '<div class="arrow"></div>' + '<div class="tooltip-inner"></div></div>',
  94. trigger: 'hover focus',
  95. title: '',
  96. delay: 0,
  97. html: false,
  98. selector: false,
  99. placement: 'top',
  100. offset: 0,
  101. container: false,
  102. fallbackPlacement: 'flip',
  103. boundary: 'scrollParent'
  104. };
  105. var HoverState = {
  106. SHOW: 'show',
  107. OUT: 'out'
  108. };
  109. var Event = {
  110. HIDE: "hide" + EVENT_KEY,
  111. HIDDEN: "hidden" + EVENT_KEY,
  112. SHOW: "show" + EVENT_KEY,
  113. SHOWN: "shown" + EVENT_KEY,
  114. INSERTED: "inserted" + EVENT_KEY,
  115. CLICK: "click" + EVENT_KEY,
  116. FOCUSIN: "focusin" + EVENT_KEY,
  117. FOCUSOUT: "focusout" + EVENT_KEY,
  118. MOUSEENTER: "mouseenter" + EVENT_KEY,
  119. MOUSELEAVE: "mouseleave" + EVENT_KEY
  120. };
  121. var ClassName = {
  122. FADE: 'fade',
  123. SHOW: 'show'
  124. };
  125. var Selector = {
  126. TOOLTIP: '.tooltip',
  127. TOOLTIP_INNER: '.tooltip-inner',
  128. ARROW: '.arrow'
  129. };
  130. var Trigger = {
  131. HOVER: 'hover',
  132. FOCUS: 'focus',
  133. CLICK: 'click',
  134. MANUAL: 'manual'
  135. /**
  136. * ------------------------------------------------------------------------
  137. * Class Definition
  138. * ------------------------------------------------------------------------
  139. */
  140. };
  141. var Tooltip =
  142. /*#__PURE__*/
  143. function () {
  144. function Tooltip(element, config) {
  145. /**
  146. * Check for Popper dependency
  147. * Popper - https://popper.js.org
  148. */
  149. if (typeof Popper === 'undefined') {
  150. throw new TypeError('Bootstrap tooltips require Popper.js (https://popper.js.org)');
  151. } // private
  152. this._isEnabled = true;
  153. this._timeout = 0;
  154. this._hoverState = '';
  155. this._activeTrigger = {};
  156. this._popper = null; // Protected
  157. this.element = element;
  158. this.config = this._getConfig(config);
  159. this.tip = null;
  160. this._setListeners();
  161. } // Getters
  162. var _proto = Tooltip.prototype;
  163. // Public
  164. _proto.enable = function enable() {
  165. this._isEnabled = true;
  166. };
  167. _proto.disable = function disable() {
  168. this._isEnabled = false;
  169. };
  170. _proto.toggleEnabled = function toggleEnabled() {
  171. this._isEnabled = !this._isEnabled;
  172. };
  173. _proto.toggle = function toggle(event) {
  174. if (!this._isEnabled) {
  175. return;
  176. }
  177. if (event) {
  178. var dataKey = this.constructor.DATA_KEY;
  179. var context = $$$1(event.currentTarget).data(dataKey);
  180. if (!context) {
  181. context = new this.constructor(event.currentTarget, this._getDelegateConfig());
  182. $$$1(event.currentTarget).data(dataKey, context);
  183. }
  184. context._activeTrigger.click = !context._activeTrigger.click;
  185. if (context._isWithActiveTrigger()) {
  186. context._enter(null, context);
  187. } else {
  188. context._leave(null, context);
  189. }
  190. } else {
  191. if ($$$1(this.getTipElement()).hasClass(ClassName.SHOW)) {
  192. this._leave(null, this);
  193. return;
  194. }
  195. this._enter(null, this);
  196. }
  197. };
  198. _proto.dispose = function dispose() {
  199. clearTimeout(this._timeout);
  200. $$$1.removeData(this.element, this.constructor.DATA_KEY);
  201. $$$1(this.element).off(this.constructor.EVENT_KEY);
  202. $$$1(this.element).closest('.modal').off('hide.bs.modal');
  203. if (this.tip) {
  204. $$$1(this.tip).remove();
  205. }
  206. this._isEnabled = null;
  207. this._timeout = null;
  208. this._hoverState = null;
  209. this._activeTrigger = null;
  210. if (this._popper !== null) {
  211. this._popper.destroy();
  212. }
  213. this._popper = null;
  214. this.element = null;
  215. this.config = null;
  216. this.tip = null;
  217. };
  218. _proto.show = function show() {
  219. var _this = this;
  220. if ($$$1(this.element).css('display') === 'none') {
  221. throw new Error('Please use show on visible elements');
  222. }
  223. var showEvent = $$$1.Event(this.constructor.Event.SHOW);
  224. if (this.isWithContent() && this._isEnabled) {
  225. $$$1(this.element).trigger(showEvent);
  226. var isInTheDom = $$$1.contains(this.element.ownerDocument.documentElement, this.element);
  227. if (showEvent.isDefaultPrevented() || !isInTheDom) {
  228. return;
  229. }
  230. var tip = this.getTipElement();
  231. var tipId = Util.getUID(this.constructor.NAME);
  232. tip.setAttribute('id', tipId);
  233. this.element.setAttribute('aria-describedby', tipId);
  234. this.setContent();
  235. if (this.config.animation) {
  236. $$$1(tip).addClass(ClassName.FADE);
  237. }
  238. var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;
  239. var attachment = this._getAttachment(placement);
  240. this.addAttachmentClass(attachment);
  241. var container = this.config.container === false ? document.body : $$$1(document).find(this.config.container);
  242. $$$1(tip).data(this.constructor.DATA_KEY, this);
  243. if (!$$$1.contains(this.element.ownerDocument.documentElement, this.tip)) {
  244. $$$1(tip).appendTo(container);
  245. }
  246. $$$1(this.element).trigger(this.constructor.Event.INSERTED);
  247. this._popper = new Popper(this.element, tip, {
  248. placement: attachment,
  249. modifiers: {
  250. offset: {
  251. offset: this.config.offset
  252. },
  253. flip: {
  254. behavior: this.config.fallbackPlacement
  255. },
  256. arrow: {
  257. element: Selector.ARROW
  258. },
  259. preventOverflow: {
  260. boundariesElement: this.config.boundary
  261. }
  262. },
  263. onCreate: function onCreate(data) {
  264. if (data.originalPlacement !== data.placement) {
  265. _this._handlePopperPlacementChange(data);
  266. }
  267. },
  268. onUpdate: function onUpdate(data) {
  269. _this._handlePopperPlacementChange(data);
  270. }
  271. });
  272. $$$1(tip).addClass(ClassName.SHOW); // If this is a touch-enabled device we add extra
  273. // empty mouseover listeners to the body's immediate children;
  274. // only needed because of broken event delegation on iOS
  275. // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
  276. if ('ontouchstart' in document.documentElement) {
  277. $$$1(document.body).children().on('mouseover', null, $$$1.noop);
  278. }
  279. var complete = function complete() {
  280. if (_this.config.animation) {
  281. _this._fixTransition();
  282. }
  283. var prevHoverState = _this._hoverState;
  284. _this._hoverState = null;
  285. $$$1(_this.element).trigger(_this.constructor.Event.SHOWN);
  286. if (prevHoverState === HoverState.OUT) {
  287. _this._leave(null, _this);
  288. }
  289. };
  290. if ($$$1(this.tip).hasClass(ClassName.FADE)) {
  291. var transitionDuration = Util.getTransitionDurationFromElement(this.tip);
  292. $$$1(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
  293. } else {
  294. complete();
  295. }
  296. }
  297. };
  298. _proto.hide = function hide(callback) {
  299. var _this2 = this;
  300. var tip = this.getTipElement();
  301. var hideEvent = $$$1.Event(this.constructor.Event.HIDE);
  302. var complete = function complete() {
  303. if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) {
  304. tip.parentNode.removeChild(tip);
  305. }
  306. _this2._cleanTipClass();
  307. _this2.element.removeAttribute('aria-describedby');
  308. $$$1(_this2.element).trigger(_this2.constructor.Event.HIDDEN);
  309. if (_this2._popper !== null) {
  310. _this2._popper.destroy();
  311. }
  312. if (callback) {
  313. callback();
  314. }
  315. };
  316. $$$1(this.element).trigger(hideEvent);
  317. if (hideEvent.isDefaultPrevented()) {
  318. return;
  319. }
  320. $$$1(tip).removeClass(ClassName.SHOW); // If this is a touch-enabled device we remove the extra
  321. // empty mouseover listeners we added for iOS support
  322. if ('ontouchstart' in document.documentElement) {
  323. $$$1(document.body).children().off('mouseover', null, $$$1.noop);
  324. }
  325. this._activeTrigger[Trigger.CLICK] = false;
  326. this._activeTrigger[Trigger.FOCUS] = false;
  327. this._activeTrigger[Trigger.HOVER] = false;
  328. if ($$$1(this.tip).hasClass(ClassName.FADE)) {
  329. var transitionDuration = Util.getTransitionDurationFromElement(tip);
  330. $$$1(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
  331. } else {
  332. complete();
  333. }
  334. this._hoverState = '';
  335. };
  336. _proto.update = function update() {
  337. if (this._popper !== null) {
  338. this._popper.scheduleUpdate();
  339. }
  340. }; // Protected
  341. _proto.isWithContent = function isWithContent() {
  342. return Boolean(this.getTitle());
  343. };
  344. _proto.addAttachmentClass = function addAttachmentClass(attachment) {
  345. $$$1(this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment);
  346. };
  347. _proto.getTipElement = function getTipElement() {
  348. this.tip = this.tip || $$$1(this.config.template)[0];
  349. return this.tip;
  350. };
  351. _proto.setContent = function setContent() {
  352. var tip = this.getTipElement();
  353. this.setElementContent($$$1(tip.querySelectorAll(Selector.TOOLTIP_INNER)), this.getTitle());
  354. $$$1(tip).removeClass(ClassName.FADE + " " + ClassName.SHOW);
  355. };
  356. _proto.setElementContent = function setElementContent($element, content) {
  357. var html = this.config.html;
  358. if (typeof content === 'object' && (content.nodeType || content.jquery)) {
  359. // Content is a DOM node or a jQuery
  360. if (html) {
  361. if (!$$$1(content).parent().is($element)) {
  362. $element.empty().append(content);
  363. }
  364. } else {
  365. $element.text($$$1(content).text());
  366. }
  367. } else {
  368. $element[html ? 'html' : 'text'](content);
  369. }
  370. };
  371. _proto.getTitle = function getTitle() {
  372. var title = this.element.getAttribute('data-original-title');
  373. if (!title) {
  374. title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;
  375. }
  376. return title;
  377. }; // Private
  378. _proto._getAttachment = function _getAttachment(placement) {
  379. return AttachmentMap[placement.toUpperCase()];
  380. };
  381. _proto._setListeners = function _setListeners() {
  382. var _this3 = this;
  383. var triggers = this.config.trigger.split(' ');
  384. triggers.forEach(function (trigger) {
  385. if (trigger === 'click') {
  386. $$$1(_this3.element).on(_this3.constructor.Event.CLICK, _this3.config.selector, function (event) {
  387. return _this3.toggle(event);
  388. });
  389. } else if (trigger !== Trigger.MANUAL) {
  390. var eventIn = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSEENTER : _this3.constructor.Event.FOCUSIN;
  391. var eventOut = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSELEAVE : _this3.constructor.Event.FOCUSOUT;
  392. $$$1(_this3.element).on(eventIn, _this3.config.selector, function (event) {
  393. return _this3._enter(event);
  394. }).on(eventOut, _this3.config.selector, function (event) {
  395. return _this3._leave(event);
  396. });
  397. }
  398. $$$1(_this3.element).closest('.modal').on('hide.bs.modal', function () {
  399. return _this3.hide();
  400. });
  401. });
  402. if (this.config.selector) {
  403. this.config = _objectSpread({}, this.config, {
  404. trigger: 'manual',
  405. selector: ''
  406. });
  407. } else {
  408. this._fixTitle();
  409. }
  410. };
  411. _proto._fixTitle = function _fixTitle() {
  412. var titleType = typeof this.element.getAttribute('data-original-title');
  413. if (this.element.getAttribute('title') || titleType !== 'string') {
  414. this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');
  415. this.element.setAttribute('title', '');
  416. }
  417. };
  418. _proto._enter = function _enter(event, context) {
  419. var dataKey = this.constructor.DATA_KEY;
  420. context = context || $$$1(event.currentTarget).data(dataKey);
  421. if (!context) {
  422. context = new this.constructor(event.currentTarget, this._getDelegateConfig());
  423. $$$1(event.currentTarget).data(dataKey, context);
  424. }
  425. if (event) {
  426. context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true;
  427. }
  428. if ($$$1(context.getTipElement()).hasClass(ClassName.SHOW) || context._hoverState === HoverState.SHOW) {
  429. context._hoverState = HoverState.SHOW;
  430. return;
  431. }
  432. clearTimeout(context._timeout);
  433. context._hoverState = HoverState.SHOW;
  434. if (!context.config.delay || !context.config.delay.show) {
  435. context.show();
  436. return;
  437. }
  438. context._timeout = setTimeout(function () {
  439. if (context._hoverState === HoverState.SHOW) {
  440. context.show();
  441. }
  442. }, context.config.delay.show);
  443. };
  444. _proto._leave = function _leave(event, context) {
  445. var dataKey = this.constructor.DATA_KEY;
  446. context = context || $$$1(event.currentTarget).data(dataKey);
  447. if (!context) {
  448. context = new this.constructor(event.currentTarget, this._getDelegateConfig());
  449. $$$1(event.currentTarget).data(dataKey, context);
  450. }
  451. if (event) {
  452. context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false;
  453. }
  454. if (context._isWithActiveTrigger()) {
  455. return;
  456. }
  457. clearTimeout(context._timeout);
  458. context._hoverState = HoverState.OUT;
  459. if (!context.config.delay || !context.config.delay.hide) {
  460. context.hide();
  461. return;
  462. }
  463. context._timeout = setTimeout(function () {
  464. if (context._hoverState === HoverState.OUT) {
  465. context.hide();
  466. }
  467. }, context.config.delay.hide);
  468. };
  469. _proto._isWithActiveTrigger = function _isWithActiveTrigger() {
  470. for (var trigger in this._activeTrigger) {
  471. if (this._activeTrigger[trigger]) {
  472. return true;
  473. }
  474. }
  475. return false;
  476. };
  477. _proto._getConfig = function _getConfig(config) {
  478. config = _objectSpread({}, this.constructor.Default, $$$1(this.element).data(), typeof config === 'object' && config ? config : {});
  479. if (typeof config.delay === 'number') {
  480. config.delay = {
  481. show: config.delay,
  482. hide: config.delay
  483. };
  484. }
  485. if (typeof config.title === 'number') {
  486. config.title = config.title.toString();
  487. }
  488. if (typeof config.content === 'number') {
  489. config.content = config.content.toString();
  490. }
  491. Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);
  492. return config;
  493. };
  494. _proto._getDelegateConfig = function _getDelegateConfig() {
  495. var config = {};
  496. if (this.config) {
  497. for (var key in this.config) {
  498. if (this.constructor.Default[key] !== this.config[key]) {
  499. config[key] = this.config[key];
  500. }
  501. }
  502. }
  503. return config;
  504. };
  505. _proto._cleanTipClass = function _cleanTipClass() {
  506. var $tip = $$$1(this.getTipElement());
  507. var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);
  508. if (tabClass !== null && tabClass.length) {
  509. $tip.removeClass(tabClass.join(''));
  510. }
  511. };
  512. _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {
  513. var popperInstance = popperData.instance;
  514. this.tip = popperInstance.popper;
  515. this._cleanTipClass();
  516. this.addAttachmentClass(this._getAttachment(popperData.placement));
  517. };
  518. _proto._fixTransition = function _fixTransition() {
  519. var tip = this.getTipElement();
  520. var initConfigAnimation = this.config.animation;
  521. if (tip.getAttribute('x-placement') !== null) {
  522. return;
  523. }
  524. $$$1(tip).removeClass(ClassName.FADE);
  525. this.config.animation = false;
  526. this.hide();
  527. this.show();
  528. this.config.animation = initConfigAnimation;
  529. }; // Static
  530. Tooltip._jQueryInterface = function _jQueryInterface(config) {
  531. return this.each(function () {
  532. var data = $$$1(this).data(DATA_KEY);
  533. var _config = typeof config === 'object' && config;
  534. if (!data && /dispose|hide/.test(config)) {
  535. return;
  536. }
  537. if (!data) {
  538. data = new Tooltip(this, _config);
  539. $$$1(this).data(DATA_KEY, data);
  540. }
  541. if (typeof config === 'string') {
  542. if (typeof data[config] === 'undefined') {
  543. throw new TypeError("No method named \"" + config + "\"");
  544. }
  545. data[config]();
  546. }
  547. });
  548. };
  549. _createClass(Tooltip, null, [{
  550. key: "VERSION",
  551. get: function get() {
  552. return VERSION;
  553. }
  554. }, {
  555. key: "Default",
  556. get: function get() {
  557. return Default;
  558. }
  559. }, {
  560. key: "NAME",
  561. get: function get() {
  562. return NAME;
  563. }
  564. }, {
  565. key: "DATA_KEY",
  566. get: function get() {
  567. return DATA_KEY;
  568. }
  569. }, {
  570. key: "Event",
  571. get: function get() {
  572. return Event;
  573. }
  574. }, {
  575. key: "EVENT_KEY",
  576. get: function get() {
  577. return EVENT_KEY;
  578. }
  579. }, {
  580. key: "DefaultType",
  581. get: function get() {
  582. return DefaultType;
  583. }
  584. }]);
  585. return Tooltip;
  586. }();
  587. /**
  588. * ------------------------------------------------------------------------
  589. * jQuery
  590. * ------------------------------------------------------------------------
  591. */
  592. $$$1.fn[NAME] = Tooltip._jQueryInterface;
  593. $$$1.fn[NAME].Constructor = Tooltip;
  594. $$$1.fn[NAME].noConflict = function () {
  595. $$$1.fn[NAME] = JQUERY_NO_CONFLICT;
  596. return Tooltip._jQueryInterface;
  597. };
  598. return Tooltip;
  599. }($, Popper);
  600. return Tooltip;
  601. })));
  602. //# sourceMappingURL=tooltip.js.map