@coreui/coreui 4.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +183 -0
  3. package/dist/css/coreui-grid.css +5004 -0
  4. package/dist/css/coreui-grid.css.map +1 -0
  5. package/dist/css/coreui-grid.min.css +8 -0
  6. package/dist/css/coreui-grid.min.css.map +1 -0
  7. package/dist/css/coreui-grid.rtl.css +5011 -0
  8. package/dist/css/coreui-grid.rtl.css.map +1 -0
  9. package/dist/css/coreui-grid.rtl.min.css +14 -0
  10. package/dist/css/coreui-grid.rtl.min.css.map +1 -0
  11. package/dist/css/coreui-reboot.css +440 -0
  12. package/dist/css/coreui-reboot.css.map +1 -0
  13. package/dist/css/coreui-reboot.min.css +8 -0
  14. package/dist/css/coreui-reboot.min.css.map +1 -0
  15. package/dist/css/coreui-reboot.rtl.css +441 -0
  16. package/dist/css/coreui-reboot.rtl.css.map +1 -0
  17. package/dist/css/coreui-reboot.rtl.min.css +14 -0
  18. package/dist/css/coreui-reboot.rtl.min.css.map +1 -0
  19. package/dist/css/coreui-utilities.css +5030 -0
  20. package/dist/css/coreui-utilities.css.map +1 -0
  21. package/dist/css/coreui-utilities.min.css +8 -0
  22. package/dist/css/coreui-utilities.min.css.map +1 -0
  23. package/dist/css/coreui-utilities.rtl.css +5024 -0
  24. package/dist/css/coreui-utilities.rtl.css.map +1 -0
  25. package/dist/css/coreui-utilities.rtl.min.css +14 -0
  26. package/dist/css/coreui-utilities.rtl.min.css.map +1 -0
  27. package/dist/css/coreui.css +12152 -0
  28. package/dist/css/coreui.css.map +1 -0
  29. package/dist/css/coreui.min.css +8 -0
  30. package/dist/css/coreui.min.css.map +1 -0
  31. package/dist/css/coreui.rtl.css +12041 -0
  32. package/dist/css/coreui.rtl.css.map +1 -0
  33. package/dist/css/coreui.rtl.min.css +14 -0
  34. package/dist/css/coreui.rtl.min.css.map +1 -0
  35. package/dist/js/coreui.bundle.js +7437 -0
  36. package/dist/js/coreui.bundle.js.map +1 -0
  37. package/dist/js/coreui.bundle.min.js +7 -0
  38. package/dist/js/coreui.bundle.min.js.map +1 -0
  39. package/dist/js/coreui.esm.js +5622 -0
  40. package/dist/js/coreui.esm.js.map +1 -0
  41. package/dist/js/coreui.esm.min.js +7 -0
  42. package/dist/js/coreui.esm.min.js.map +1 -0
  43. package/dist/js/coreui.js +5673 -0
  44. package/dist/js/coreui.js.map +1 -0
  45. package/dist/js/coreui.min.js +7 -0
  46. package/dist/js/coreui.min.js.map +1 -0
  47. package/js/dist/alert.js +208 -0
  48. package/js/dist/alert.js.map +1 -0
  49. package/js/dist/base-component.js +181 -0
  50. package/js/dist/base-component.js.map +1 -0
  51. package/js/dist/button.js +142 -0
  52. package/js/dist/button.js.map +1 -0
  53. package/js/dist/carousel.js +724 -0
  54. package/js/dist/carousel.js.map +1 -0
  55. package/js/dist/collapse.js +515 -0
  56. package/js/dist/collapse.js.map +1 -0
  57. package/js/dist/dom/data.js +72 -0
  58. package/js/dist/dom/data.js.map +1 -0
  59. package/js/dist/dom/event-handler.js +319 -0
  60. package/js/dist/dom/event-handler.js.map +1 -0
  61. package/js/dist/dom/manipulator.js +92 -0
  62. package/js/dist/dom/manipulator.js.map +1 -0
  63. package/js/dist/dom/selector-engine.js +89 -0
  64. package/js/dist/dom/selector-engine.js.map +1 -0
  65. package/js/dist/dropdown.js +700 -0
  66. package/js/dist/dropdown.js.map +1 -0
  67. package/js/dist/modal.js +891 -0
  68. package/js/dist/modal.js.map +1 -0
  69. package/js/dist/offcanvas.js +724 -0
  70. package/js/dist/offcanvas.js.map +1 -0
  71. package/js/dist/popover.js +220 -0
  72. package/js/dist/popover.js.map +1 -0
  73. package/js/dist/scrollspy.js +387 -0
  74. package/js/dist/scrollspy.js.map +1 -0
  75. package/js/dist/tab.js +317 -0
  76. package/js/dist/tab.js.map +1 -0
  77. package/js/dist/toast.js +331 -0
  78. package/js/dist/toast.js.map +1 -0
  79. package/js/dist/tooltip.js +997 -0
  80. package/js/dist/tooltip.js.map +1 -0
  81. package/js/src/alert.js +128 -0
  82. package/js/src/base-component.js +78 -0
  83. package/js/src/button.js +89 -0
  84. package/js/src/carousel.js +589 -0
  85. package/js/src/collapse.js +391 -0
  86. package/js/src/dom/data.js +60 -0
  87. package/js/src/dom/event-handler.js +352 -0
  88. package/js/src/dom/manipulator.js +83 -0
  89. package/js/src/dom/selector-engine.js +78 -0
  90. package/js/src/dropdown.js +517 -0
  91. package/js/src/modal.js +451 -0
  92. package/js/src/navigation.js +298 -0
  93. package/js/src/offcanvas.js +277 -0
  94. package/js/src/popover.js +173 -0
  95. package/js/src/scrollspy.js +298 -0
  96. package/js/src/sidebar.js +347 -0
  97. package/js/src/tab.js +227 -0
  98. package/js/src/toast.js +245 -0
  99. package/js/src/tooltip.js +750 -0
  100. package/js/src/util/backdrop.js +129 -0
  101. package/js/src/util/index.js +327 -0
  102. package/js/src/util/sanitizer.js +130 -0
  103. package/js/src/util/scrollbar.js +97 -0
  104. package/package.json +166 -0
  105. package/scss/_accordion.scss +118 -0
  106. package/scss/_alert.scss +52 -0
  107. package/scss/_avatar.scss +49 -0
  108. package/scss/_badge.scss +38 -0
  109. package/scss/_breadcrumb.scss +33 -0
  110. package/scss/_button-group.scss +139 -0
  111. package/scss/_buttons.scss +143 -0
  112. package/scss/_callout.scss +16 -0
  113. package/scss/_card.scss +215 -0
  114. package/scss/_carousel.scss +231 -0
  115. package/scss/_close.scss +40 -0
  116. package/scss/_containers.scss +41 -0
  117. package/scss/_dropdown.scss +227 -0
  118. package/scss/_footer.scss +25 -0
  119. package/scss/_forms.scss +9 -0
  120. package/scss/_functions.scss +356 -0
  121. package/scss/_grid.scss +56 -0
  122. package/scss/_header.scss +170 -0
  123. package/scss/_helpers.scss +7 -0
  124. package/scss/_icon.scss +32 -0
  125. package/scss/_images.scss +42 -0
  126. package/scss/_list-group.scss +169 -0
  127. package/scss/_mixins.scss +50 -0
  128. package/scss/_modal.scss +219 -0
  129. package/scss/_nav.scss +140 -0
  130. package/scss/_navbar.scss +254 -0
  131. package/scss/_offcanvas.scss +79 -0
  132. package/scss/_pagination.scss +64 -0
  133. package/scss/_popover.scss +158 -0
  134. package/scss/_progress.scss +91 -0
  135. package/scss/_reboot.scss +632 -0
  136. package/scss/_root.scss +25 -0
  137. package/scss/_sidebar.scss +3 -0
  138. package/scss/_spinners.scss +69 -0
  139. package/scss/_subheader.scss +72 -0
  140. package/scss/_tables.scss +166 -0
  141. package/scss/_toasts.scss +52 -0
  142. package/scss/_tooltip.scss +115 -0
  143. package/scss/_transitions.scss +21 -0
  144. package/scss/_type.scss +104 -0
  145. package/scss/_utilities.scss +678 -0
  146. package/scss/_variables.scss +1801 -0
  147. package/scss/coreui-grid.rtl.scss +12 -0
  148. package/scss/coreui-grid.scss +67 -0
  149. package/scss/coreui-reboot.rtl.scss +12 -0
  150. package/scss/coreui-reboot.scss +15 -0
  151. package/scss/coreui-utilities.rtl.scss +12 -0
  152. package/scss/coreui-utilities.scss +19 -0
  153. package/scss/coreui.rtl.scss +12 -0
  154. package/scss/coreui.scss +61 -0
  155. package/scss/forms/_floating-labels.scss +63 -0
  156. package/scss/forms/_form-check.scss +188 -0
  157. package/scss/forms/_form-control.scss +219 -0
  158. package/scss/forms/_form-range.scss +91 -0
  159. package/scss/forms/_form-select.scss +70 -0
  160. package/scss/forms/_form-text.scss +11 -0
  161. package/scss/forms/_input-group.scss +121 -0
  162. package/scss/forms/_labels.scss +36 -0
  163. package/scss/forms/_validation.scss +12 -0
  164. package/scss/helpers/_clearfix.scss +3 -0
  165. package/scss/helpers/_colored-links.scss +12 -0
  166. package/scss/helpers/_position.scss +30 -0
  167. package/scss/helpers/_ratio.scss +26 -0
  168. package/scss/helpers/_stretched-link.scss +15 -0
  169. package/scss/helpers/_text-truncation.scss +7 -0
  170. package/scss/helpers/_visually-hidden.scss +8 -0
  171. package/scss/mixins/_alert.scss +15 -0
  172. package/scss/mixins/_avatar.scss +10 -0
  173. package/scss/mixins/_border-radius.scss +78 -0
  174. package/scss/mixins/_box-shadow.scss +18 -0
  175. package/scss/mixins/_breakpoints.scss +140 -0
  176. package/scss/mixins/_buttons.scss +101 -0
  177. package/scss/mixins/_caret.scss +64 -0
  178. package/scss/mixins/_clearfix.scss +9 -0
  179. package/scss/mixins/_color-scheme.scss +7 -0
  180. package/scss/mixins/_container.scss +9 -0
  181. package/scss/mixins/_css-vars.scss +87 -0
  182. package/scss/mixins/_deprecate.scss +10 -0
  183. package/scss/mixins/_forms.scss +144 -0
  184. package/scss/mixins/_gradients.scss +47 -0
  185. package/scss/mixins/_grid.scss +132 -0
  186. package/scss/mixins/_icon.scss +6 -0
  187. package/scss/mixins/_image.scss +16 -0
  188. package/scss/mixins/_list-group.scss +18 -0
  189. package/scss/mixins/_lists.scss +7 -0
  190. package/scss/mixins/_ltr-rtl.scss +60 -0
  191. package/scss/mixins/_pagination.scss +31 -0
  192. package/scss/mixins/_reset-text.scss +17 -0
  193. package/scss/mixins/_resize.scss +6 -0
  194. package/scss/mixins/_table-variants.scss +16 -0
  195. package/scss/mixins/_text-truncate.scss +8 -0
  196. package/scss/mixins/_transition.scss +26 -0
  197. package/scss/mixins/_utilities.scss +104 -0
  198. package/scss/mixins/_visually-hidden.scss +29 -0
  199. package/scss/sidebar/_sidebar-narrow.scss +106 -0
  200. package/scss/sidebar/_sidebar-nav.scss +165 -0
  201. package/scss/sidebar/_sidebar.scss +261 -0
  202. package/scss/utilities/_api.scss +47 -0
  203. package/scss/vendor/_rfs.scss +354 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toast.js","sources":["../src/util/index.js","../src/toast.js"],"sourcesContent":["import SelectorEngine from '../dom/selector-engine'\n\n/**\n * --------------------------------------------------------------------------\n * CoreUI (v4.0.2): alert.js\n * Licensed under MIT (https://coreui.io/license)\n *\n * This component is a modified version of the Bootstrap's util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000\nconst MILLISECONDS_MULTIPLIER = 1000\nconst TRANSITION_END = 'transitionend'\n\n// Shoutout AngusCroll (https://goo.gl/pxwQGp)\nconst toType = obj => {\n if (obj === null || obj === undefined) {\n return `${obj}`\n }\n\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\nconst getUID = prefix => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID)\n } while (document.getElementById(prefix))\n\n return prefix\n}\n\nconst getSelector = element => {\n let selector = element.getAttribute('data-coreui-target')\n\n if (!selector || selector === '#') {\n let hrefAttr = element.getAttribute('href')\n\n // The only valid content that could double as a selector are IDs or classes,\n // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n // `document.querySelector` will rightfully complain it is invalid.\n // See https://github.com/twbs/bootstrap/issues/32273\n if (!hrefAttr || (!hrefAttr.includes('#') && !hrefAttr.startsWith('.'))) {\n return null\n }\n\n // Just in case some CMS puts out a full URL with the anchor appended\n if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n hrefAttr = `#${hrefAttr.split('#')[1]}`\n }\n\n selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null\n }\n\n return selector\n}\n\nconst getSelectorFromElement = element => {\n const selector = getSelector(element)\n\n if (selector) {\n return document.querySelector(selector) ? selector : null\n }\n\n return null\n}\n\nconst getElementFromSelector = element => {\n const selector = getSelector(element)\n\n return selector ? document.querySelector(selector) : null\n}\n\nconst getTransitionDurationFromElement = element => {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let { transitionDuration, transitionDelay } = window.getComputedStyle(element)\n\n const floatTransitionDuration = Number.parseFloat(transitionDuration)\n const floatTransitionDelay = Number.parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n}\n\nconst triggerTransitionEnd = element => {\n element.dispatchEvent(new Event(TRANSITION_END))\n}\n\nconst isElement = obj => {\n if (!obj || typeof obj !== 'object') {\n return false\n }\n\n if (typeof obj.jquery !== 'undefined') {\n obj = obj[0]\n }\n\n return typeof obj.nodeType !== 'undefined'\n}\n\nconst getElement = obj => {\n if (isElement(obj)) { // it's a jQuery object or a node element\n return obj.jquery ? obj[0] : obj\n }\n\n if (typeof obj === 'string' && obj.length > 0) {\n return SelectorEngine.findOne(obj)\n }\n\n return null\n}\n\nconst typeCheckConfig = (componentName, config, configTypes) => {\n Object.keys(configTypes).forEach(property => {\n const expectedTypes = configTypes[property]\n const value = config[property]\n const valueType = value && isElement(value) ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(\n `${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`\n )\n }\n })\n}\n\nconst isVisible = element => {\n if (!isElement(element) || element.getClientRects().length === 0) {\n return false\n }\n\n return getComputedStyle(element).getPropertyValue('visibility') === 'visible'\n}\n\nconst isDisabled = element => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true\n }\n\n if (element.classList.contains('disabled')) {\n return true\n }\n\n if (typeof element.disabled !== 'undefined') {\n return element.disabled\n }\n\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'\n}\n\nconst findShadowRoot = element => {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return findShadowRoot(element.parentNode)\n}\n\nconst noop = () => {}\n\nconst reflow = element => element.offsetHeight\n\nconst getjQuery = () => {\n const { jQuery } = window\n\n if (jQuery && !document.body.hasAttribute('data-coreui-no-jquery')) {\n return jQuery\n }\n\n return null\n}\n\nconst DOMContentLoadedCallbacks = []\n\nconst onDOMContentLoaded = callback => {\n if (document.readyState === 'loading') {\n // add listener on the first call when the document is in loading state\n if (!DOMContentLoadedCallbacks.length) {\n document.addEventListener('DOMContentLoaded', () => {\n DOMContentLoadedCallbacks.forEach(callback => callback())\n })\n }\n\n DOMContentLoadedCallbacks.push(callback)\n } else {\n callback()\n }\n}\n\nconst isRTL = () => document.documentElement.dir === 'rtl'\n\nconst defineJQueryPlugin = plugin => {\n onDOMContentLoaded(() => {\n const $ = getjQuery()\n /* istanbul ignore if */\n if ($) {\n const name = plugin.NAME\n const JQUERY_NO_CONFLICT = $.fn[name]\n $.fn[name] = plugin.jQueryInterface\n $.fn[name].Constructor = plugin\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT\n return plugin.jQueryInterface\n }\n }\n })\n}\n\nconst execute = callback => {\n if (typeof callback === 'function') {\n callback()\n }\n}\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n if (!waitForTransition) {\n execute(callback)\n return\n }\n\n const durationPadding = 5\n const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding\n\n let called = false\n\n const handler = ({ target }) => {\n if (target !== transitionElement) {\n return\n }\n\n called = true\n transitionElement.removeEventListener(TRANSITION_END, handler)\n execute(callback)\n }\n\n transitionElement.addEventListener(TRANSITION_END, handler)\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(transitionElement)\n }\n }, emulatedDuration)\n}\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list The list of elements\n * @param activeElement The active element\n * @param shouldGetNext Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n let index = list.indexOf(activeElement)\n\n // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n if (index === -1) {\n return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0]\n }\n\n const listLength = list.length\n\n index += shouldGetNext ? 1 : -1\n\n if (isCycleAllowed) {\n index = (index + listLength) % listLength\n }\n\n return list[Math.max(0, Math.min(index, listLength - 1))]\n}\n\nexport {\n getElement,\n getUID,\n getSelectorFromElement,\n getElementFromSelector,\n getTransitionDurationFromElement,\n triggerTransitionEnd,\n isElement,\n typeCheckConfig,\n isVisible,\n isDisabled,\n findShadowRoot,\n noop,\n getNextActiveElement,\n reflow,\n getjQuery,\n onDOMContentLoaded,\n isRTL,\n defineJQueryPlugin,\n execute,\n executeAfterTransition\n}\n","/**\n * --------------------------------------------------------------------------\n * CoreUI (v4.0.2): toast.js\n * Licensed under MIT (https://coreui.io/license)\n *\n * This component is a modified version of the Bootstrap's toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n reflow,\n typeCheckConfig\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport BaseComponent from './base-component'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'toast'\nconst DATA_KEY = 'coreui.toast'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_HIDE = 'hide'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\n\nconst DefaultType = {\n animation: 'boolean',\n autohide: 'boolean',\n delay: 'number'\n}\n\nconst Default = {\n animation: true,\n autohide: true,\n delay: 5000\n}\n\nconst SELECTOR_DATA_DISMISS = '[data-coreui-dismiss=\"toast\"]'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Toast extends BaseComponent {\n constructor(element, config) {\n super(element)\n\n this._config = this._getConfig(config)\n this._timeout = null\n this._hasMouseInteraction = false\n this._hasKeyboardInteraction = false\n this._setListeners()\n }\n\n // Getters\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n\n show() {\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._clearTimeout()\n\n if (this._config.animation) {\n this._element.classList.add(CLASS_NAME_FADE)\n }\n\n const complete = () => {\n this._element.classList.remove(CLASS_NAME_SHOWING)\n this._element.classList.add(CLASS_NAME_SHOW)\n\n EventHandler.trigger(this._element, EVENT_SHOWN)\n\n this._maybeScheduleHide()\n }\n\n this._element.classList.remove(CLASS_NAME_HIDE)\n reflow(this._element)\n this._element.classList.add(CLASS_NAME_SHOWING)\n\n this._queueCallback(complete, this._element, this._config.animation)\n }\n\n hide() {\n if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const complete = () => {\n this._element.classList.add(CLASS_NAME_HIDE)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n this._queueCallback(complete, this._element, this._config.animation)\n }\n\n dispose() {\n this._clearTimeout()\n\n if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n this._element.classList.remove(CLASS_NAME_SHOW)\n }\n\n super.dispose()\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...Manipulator.getDataAttributes(this._element),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n typeCheckConfig(NAME, config, this.constructor.DefaultType)\n\n return config\n }\n\n _maybeScheduleHide() {\n if (!this._config.autohide) {\n return\n }\n\n if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n return\n }\n\n this._timeout = setTimeout(() => {\n this.hide()\n }, this._config.delay)\n }\n\n _onInteraction(event, isInteracting) {\n switch (event.type) {\n case 'mouseover':\n case 'mouseout':\n this._hasMouseInteraction = isInteracting\n break\n case 'focusin':\n case 'focusout':\n this._hasKeyboardInteraction = isInteracting\n break\n default:\n break\n }\n\n if (isInteracting) {\n this._clearTimeout()\n return\n }\n\n const nextElement = event.relatedTarget\n if (this._element === nextElement || this._element.contains(nextElement)) {\n return\n }\n\n this._maybeScheduleHide()\n }\n\n _setListeners() {\n EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide())\n EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true))\n EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false))\n EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true))\n EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false))\n }\n\n _clearTimeout() {\n clearTimeout(this._timeout)\n this._timeout = null\n }\n\n // Static\n\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Toast.getOrCreateInstance(this, config)\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Toast to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Toast)\n\nexport default Toast\n"],"names":["toType","obj","undefined","toString","call","match","toLowerCase","isElement","jquery","nodeType","typeCheckConfig","componentName","config","configTypes","Object","keys","forEach","property","expectedTypes","value","valueType","RegExp","test","TypeError","toUpperCase","reflow","element","offsetHeight","getjQuery","jQuery","window","document","body","hasAttribute","DOMContentLoadedCallbacks","onDOMContentLoaded","callback","readyState","length","addEventListener","push","defineJQueryPlugin","plugin","$","name","NAME","JQUERY_NO_CONFLICT","fn","jQueryInterface","Constructor","noConflict","DATA_KEY","EVENT_KEY","EVENT_CLICK_DISMISS","EVENT_MOUSEOVER","EVENT_MOUSEOUT","EVENT_FOCUSIN","EVENT_FOCUSOUT","EVENT_HIDE","EVENT_HIDDEN","EVENT_SHOW","EVENT_SHOWN","CLASS_NAME_FADE","CLASS_NAME_HIDE","CLASS_NAME_SHOW","CLASS_NAME_SHOWING","DefaultType","animation","autohide","delay","Default","SELECTOR_DATA_DISMISS","Toast","BaseComponent","constructor","_config","_getConfig","_timeout","_hasMouseInteraction","_hasKeyboardInteraction","_setListeners","show","showEvent","EventHandler","trigger","_element","defaultPrevented","_clearTimeout","classList","add","complete","remove","_maybeScheduleHide","_queueCallback","hide","contains","hideEvent","dispose","Manipulator","getDataAttributes","setTimeout","_onInteraction","event","isInteracting","type","nextElement","relatedTarget","on","clearTimeout","each","data","getOrCreateInstance"],"mappings":"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"}
@@ -0,0 +1,997 @@
1
+ /*!
2
+ * CoreUI tooltip.js v4.0.2 (https://coreui.io)
3
+ * Copyright 2021 The CoreUI Team (https://github.com/orgs/coreui/people)
4
+ * Licensed under MIT (https://coreui.io)
5
+ */
6
+ (function (global, factory) {
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('@popperjs/core'), require('./dom/selector-engine.js'), require('./dom/data.js'), require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('./base-component.js')) :
8
+ typeof define === 'function' && define.amd ? define(['@popperjs/core', './dom/selector-engine', './dom/data', './dom/event-handler', './dom/manipulator', './base-component'], factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Tooltip = factory(global.Popper, global.SelectorEngine, global.Data, global.EventHandler, global.Manipulator, global.Base));
10
+ }(this, (function (Popper, SelectorEngine, Data, EventHandler, Manipulator, BaseComponent) { 'use strict';
11
+
12
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
13
+
14
+ function _interopNamespace(e) {
15
+ if (e && e.__esModule) return e;
16
+ var n = Object.create(null);
17
+ if (e) {
18
+ Object.keys(e).forEach(function (k) {
19
+ if (k !== 'default') {
20
+ var d = Object.getOwnPropertyDescriptor(e, k);
21
+ Object.defineProperty(n, k, d.get ? d : {
22
+ enumerable: true,
23
+ get: function () {
24
+ return e[k];
25
+ }
26
+ });
27
+ }
28
+ });
29
+ }
30
+ n['default'] = e;
31
+ return Object.freeze(n);
32
+ }
33
+
34
+ var Popper__namespace = /*#__PURE__*/_interopNamespace(Popper);
35
+ var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
36
+ var Data__default = /*#__PURE__*/_interopDefaultLegacy(Data);
37
+ var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
38
+ var Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
39
+ var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
40
+
41
+ /**
42
+ * --------------------------------------------------------------------------
43
+ * CoreUI (v4.0.2): alert.js
44
+ * Licensed under MIT (https://coreui.io/license)
45
+ *
46
+ * This component is a modified version of the Bootstrap's util/index.js
47
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
48
+ * --------------------------------------------------------------------------
49
+ */
50
+
51
+ const MAX_UID = 1000000;
52
+
53
+ const toType = obj => {
54
+ if (obj === null || obj === undefined) {
55
+ return `${obj}`;
56
+ }
57
+
58
+ return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
59
+ };
60
+ /**
61
+ * --------------------------------------------------------------------------
62
+ * Public Util Api
63
+ * --------------------------------------------------------------------------
64
+ */
65
+
66
+
67
+ const getUID = prefix => {
68
+ do {
69
+ prefix += Math.floor(Math.random() * MAX_UID);
70
+ } while (document.getElementById(prefix));
71
+
72
+ return prefix;
73
+ };
74
+
75
+ const isElement = obj => {
76
+ if (!obj || typeof obj !== 'object') {
77
+ return false;
78
+ }
79
+
80
+ if (typeof obj.jquery !== 'undefined') {
81
+ obj = obj[0];
82
+ }
83
+
84
+ return typeof obj.nodeType !== 'undefined';
85
+ };
86
+
87
+ const getElement = obj => {
88
+ if (isElement(obj)) {
89
+ // it's a jQuery object or a node element
90
+ return obj.jquery ? obj[0] : obj;
91
+ }
92
+
93
+ if (typeof obj === 'string' && obj.length > 0) {
94
+ return SelectorEngine__default['default'].findOne(obj);
95
+ }
96
+
97
+ return null;
98
+ };
99
+
100
+ const typeCheckConfig = (componentName, config, configTypes) => {
101
+ Object.keys(configTypes).forEach(property => {
102
+ const expectedTypes = configTypes[property];
103
+ const value = config[property];
104
+ const valueType = value && isElement(value) ? 'element' : toType(value);
105
+
106
+ if (!new RegExp(expectedTypes).test(valueType)) {
107
+ throw new TypeError(`${componentName.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`);
108
+ }
109
+ });
110
+ };
111
+
112
+ const findShadowRoot = element => {
113
+ if (!document.documentElement.attachShadow) {
114
+ return null;
115
+ } // Can find the shadow root otherwise it'll return the document
116
+
117
+
118
+ if (typeof element.getRootNode === 'function') {
119
+ const root = element.getRootNode();
120
+ return root instanceof ShadowRoot ? root : null;
121
+ }
122
+
123
+ if (element instanceof ShadowRoot) {
124
+ return element;
125
+ } // when we don't find a shadow root
126
+
127
+
128
+ if (!element.parentNode) {
129
+ return null;
130
+ }
131
+
132
+ return findShadowRoot(element.parentNode);
133
+ };
134
+
135
+ const noop = () => {};
136
+
137
+ const getjQuery = () => {
138
+ const {
139
+ jQuery
140
+ } = window;
141
+
142
+ if (jQuery && !document.body.hasAttribute('data-coreui-no-jquery')) {
143
+ return jQuery;
144
+ }
145
+
146
+ return null;
147
+ };
148
+
149
+ const DOMContentLoadedCallbacks = [];
150
+
151
+ const onDOMContentLoaded = callback => {
152
+ if (document.readyState === 'loading') {
153
+ // add listener on the first call when the document is in loading state
154
+ if (!DOMContentLoadedCallbacks.length) {
155
+ document.addEventListener('DOMContentLoaded', () => {
156
+ DOMContentLoadedCallbacks.forEach(callback => callback());
157
+ });
158
+ }
159
+
160
+ DOMContentLoadedCallbacks.push(callback);
161
+ } else {
162
+ callback();
163
+ }
164
+ };
165
+
166
+ const isRTL = () => document.documentElement.dir === 'rtl';
167
+
168
+ const defineJQueryPlugin = plugin => {
169
+ onDOMContentLoaded(() => {
170
+ const $ = getjQuery();
171
+ /* istanbul ignore if */
172
+
173
+ if ($) {
174
+ const name = plugin.NAME;
175
+ const JQUERY_NO_CONFLICT = $.fn[name];
176
+ $.fn[name] = plugin.jQueryInterface;
177
+ $.fn[name].Constructor = plugin;
178
+
179
+ $.fn[name].noConflict = () => {
180
+ $.fn[name] = JQUERY_NO_CONFLICT;
181
+ return plugin.jQueryInterface;
182
+ };
183
+ }
184
+ });
185
+ };
186
+
187
+ /**
188
+ * --------------------------------------------------------------------------
189
+ * CoreUI (v4.0.2): alert.js
190
+ * Licensed under MIT (https://coreui.io/license)
191
+ *
192
+ * This component is a modified version of the Bootstrap's util/sanitizer.js
193
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
194
+ * --------------------------------------------------------------------------
195
+ */
196
+ const uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);
197
+ const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
198
+ /**
199
+ * A pattern that recognizes a commonly useful subset of URLs that are safe.
200
+ *
201
+ * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
202
+ */
203
+
204
+ const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;
205
+ /**
206
+ * A pattern that matches safe data URLs. Only matches image, video and audio types.
207
+ *
208
+ * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
209
+ */
210
+
211
+ const DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;
212
+
213
+ const allowedAttribute = (attr, allowedAttributeList) => {
214
+ const attrName = attr.nodeName.toLowerCase();
215
+
216
+ if (allowedAttributeList.includes(attrName)) {
217
+ if (uriAttrs.has(attrName)) {
218
+ return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));
219
+ }
220
+
221
+ return true;
222
+ }
223
+
224
+ const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.
225
+
226
+ for (let i = 0, len = regExp.length; i < len; i++) {
227
+ if (regExp[i].test(attrName)) {
228
+ return true;
229
+ }
230
+ }
231
+
232
+ return false;
233
+ };
234
+
235
+ const DefaultAllowlist = {
236
+ // Global attributes allowed on any supplied element below.
237
+ '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
238
+ a: ['target', 'href', 'title', 'rel'],
239
+ area: [],
240
+ b: [],
241
+ br: [],
242
+ col: [],
243
+ code: [],
244
+ div: [],
245
+ em: [],
246
+ hr: [],
247
+ h1: [],
248
+ h2: [],
249
+ h3: [],
250
+ h4: [],
251
+ h5: [],
252
+ h6: [],
253
+ i: [],
254
+ img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],
255
+ li: [],
256
+ ol: [],
257
+ p: [],
258
+ pre: [],
259
+ s: [],
260
+ small: [],
261
+ span: [],
262
+ sub: [],
263
+ sup: [],
264
+ strong: [],
265
+ u: [],
266
+ ul: []
267
+ };
268
+ function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {
269
+ if (!unsafeHtml.length) {
270
+ return unsafeHtml;
271
+ }
272
+
273
+ if (sanitizeFn && typeof sanitizeFn === 'function') {
274
+ return sanitizeFn(unsafeHtml);
275
+ }
276
+
277
+ const domParser = new window.DOMParser();
278
+ const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');
279
+ const allowlistKeys = Object.keys(allowList);
280
+ const elements = [].concat(...createdDocument.body.querySelectorAll('*'));
281
+
282
+ for (let i = 0, len = elements.length; i < len; i++) {
283
+ const el = elements[i];
284
+ const elName = el.nodeName.toLowerCase();
285
+
286
+ if (!allowlistKeys.includes(elName)) {
287
+ el.remove();
288
+ continue;
289
+ }
290
+
291
+ const attributeList = [].concat(...el.attributes);
292
+ const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);
293
+ attributeList.forEach(attr => {
294
+ if (!allowedAttribute(attr, allowedAttributes)) {
295
+ el.removeAttribute(attr.nodeName);
296
+ }
297
+ });
298
+ }
299
+
300
+ return createdDocument.body.innerHTML;
301
+ }
302
+
303
+ /**
304
+ * --------------------------------------------------------------------------
305
+ * CoreUI (v4.0.2): tooltip.js
306
+ * Licensed under MIT (https://coreui.io/license)
307
+ *
308
+ * This component is a modified version of the Bootstrap's tooltip.js
309
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
310
+ * --------------------------------------------------------------------------
311
+ */
312
+ /**
313
+ * ------------------------------------------------------------------------
314
+ * Constants
315
+ * ------------------------------------------------------------------------
316
+ */
317
+
318
+ const NAME = 'tooltip';
319
+ const DATA_KEY = 'coreui.tooltip';
320
+ const EVENT_KEY = `.${DATA_KEY}`;
321
+ const CLASS_PREFIX = 'bs-tooltip';
322
+ const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\s)${CLASS_PREFIX}\\S+`, 'g');
323
+ const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);
324
+ const DefaultType = {
325
+ animation: 'boolean',
326
+ template: 'string',
327
+ title: '(string|element|function)',
328
+ trigger: 'string',
329
+ delay: '(number|object)',
330
+ html: 'boolean',
331
+ selector: '(string|boolean)',
332
+ placement: '(string|function)',
333
+ offset: '(array|string|function)',
334
+ container: '(string|element|boolean)',
335
+ fallbackPlacements: 'array',
336
+ boundary: '(string|element)',
337
+ customClass: '(string|function)',
338
+ sanitize: 'boolean',
339
+ sanitizeFn: '(null|function)',
340
+ allowList: 'object',
341
+ popperConfig: '(null|object|function)'
342
+ };
343
+ const AttachmentMap = {
344
+ AUTO: 'auto',
345
+ TOP: 'top',
346
+ RIGHT: isRTL() ? 'left' : 'right',
347
+ BOTTOM: 'bottom',
348
+ LEFT: isRTL() ? 'right' : 'left'
349
+ };
350
+ const Default = {
351
+ animation: true,
352
+ template: '<div class="tooltip" role="tooltip">' + '<div class="tooltip-arrow"></div>' + '<div class="tooltip-inner"></div>' + '</div>',
353
+ trigger: 'hover focus',
354
+ title: '',
355
+ delay: 0,
356
+ html: false,
357
+ selector: false,
358
+ placement: 'top',
359
+ offset: [0, 0],
360
+ container: false,
361
+ fallbackPlacements: ['top', 'right', 'bottom', 'left'],
362
+ boundary: 'clippingParents',
363
+ customClass: '',
364
+ sanitize: true,
365
+ sanitizeFn: null,
366
+ allowList: DefaultAllowlist,
367
+ popperConfig: null
368
+ };
369
+ const Event = {
370
+ HIDE: `hide${EVENT_KEY}`,
371
+ HIDDEN: `hidden${EVENT_KEY}`,
372
+ SHOW: `show${EVENT_KEY}`,
373
+ SHOWN: `shown${EVENT_KEY}`,
374
+ INSERTED: `inserted${EVENT_KEY}`,
375
+ CLICK: `click${EVENT_KEY}`,
376
+ FOCUSIN: `focusin${EVENT_KEY}`,
377
+ FOCUSOUT: `focusout${EVENT_KEY}`,
378
+ MOUSEENTER: `mouseenter${EVENT_KEY}`,
379
+ MOUSELEAVE: `mouseleave${EVENT_KEY}`
380
+ };
381
+ const CLASS_NAME_FADE = 'fade';
382
+ const CLASS_NAME_MODAL = 'modal';
383
+ const CLASS_NAME_SHOW = 'show';
384
+ const HOVER_STATE_SHOW = 'show';
385
+ const HOVER_STATE_OUT = 'out';
386
+ const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';
387
+ const TRIGGER_HOVER = 'hover';
388
+ const TRIGGER_FOCUS = 'focus';
389
+ const TRIGGER_CLICK = 'click';
390
+ const TRIGGER_MANUAL = 'manual';
391
+ /**
392
+ * ------------------------------------------------------------------------
393
+ * Class Definition
394
+ * ------------------------------------------------------------------------
395
+ */
396
+
397
+ class Tooltip extends BaseComponent__default['default'] {
398
+ constructor(element, config) {
399
+ if (typeof Popper__namespace === 'undefined') {
400
+ throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)');
401
+ }
402
+
403
+ super(element); // private
404
+
405
+ this._isEnabled = true;
406
+ this._timeout = 0;
407
+ this._hoverState = '';
408
+ this._activeTrigger = {};
409
+ this._popper = null; // Protected
410
+
411
+ this._config = this._getConfig(config);
412
+ this.tip = null;
413
+
414
+ this._setListeners();
415
+ } // Getters
416
+
417
+
418
+ static get Default() {
419
+ return Default;
420
+ }
421
+
422
+ static get NAME() {
423
+ return NAME;
424
+ }
425
+
426
+ static get Event() {
427
+ return Event;
428
+ }
429
+
430
+ static get DefaultType() {
431
+ return DefaultType;
432
+ } // Public
433
+
434
+
435
+ enable() {
436
+ this._isEnabled = true;
437
+ }
438
+
439
+ disable() {
440
+ this._isEnabled = false;
441
+ }
442
+
443
+ toggleEnabled() {
444
+ this._isEnabled = !this._isEnabled;
445
+ }
446
+
447
+ toggle(event) {
448
+ if (!this._isEnabled) {
449
+ return;
450
+ }
451
+
452
+ if (event) {
453
+ const context = this._initializeOnDelegatedTarget(event);
454
+
455
+ context._activeTrigger.click = !context._activeTrigger.click;
456
+
457
+ if (context._isWithActiveTrigger()) {
458
+ context._enter(null, context);
459
+ } else {
460
+ context._leave(null, context);
461
+ }
462
+ } else {
463
+ if (this.getTipElement().classList.contains(CLASS_NAME_SHOW)) {
464
+ this._leave(null, this);
465
+
466
+ return;
467
+ }
468
+
469
+ this._enter(null, this);
470
+ }
471
+ }
472
+
473
+ dispose() {
474
+ clearTimeout(this._timeout);
475
+ EventHandler__default['default'].off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.coreui.modal', this._hideModalHandler);
476
+
477
+ if (this.tip) {
478
+ this.tip.remove();
479
+ }
480
+
481
+ if (this._popper) {
482
+ this._popper.destroy();
483
+ }
484
+
485
+ super.dispose();
486
+ }
487
+
488
+ show() {
489
+ if (this._element.style.display === 'none') {
490
+ throw new Error('Please use show on visible elements');
491
+ }
492
+
493
+ if (!(this.isWithContent() && this._isEnabled)) {
494
+ return;
495
+ }
496
+
497
+ const showEvent = EventHandler__default['default'].trigger(this._element, this.constructor.Event.SHOW);
498
+ const shadowRoot = findShadowRoot(this._element);
499
+ const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);
500
+
501
+ if (showEvent.defaultPrevented || !isInTheDom) {
502
+ return;
503
+ }
504
+
505
+ const tip = this.getTipElement();
506
+ const tipId = getUID(this.constructor.NAME);
507
+ tip.setAttribute('id', tipId);
508
+
509
+ this._element.setAttribute('aria-describedby', tipId);
510
+
511
+ this.setContent();
512
+
513
+ if (this._config.animation) {
514
+ tip.classList.add(CLASS_NAME_FADE);
515
+ }
516
+
517
+ const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;
518
+
519
+ const attachment = this._getAttachment(placement);
520
+
521
+ this._addAttachmentClass(attachment);
522
+
523
+ const {
524
+ container
525
+ } = this._config;
526
+ Data__default['default'].set(tip, this.constructor.DATA_KEY, this);
527
+
528
+ if (!this._element.ownerDocument.documentElement.contains(this.tip)) {
529
+ container.appendChild(tip);
530
+ EventHandler__default['default'].trigger(this._element, this.constructor.Event.INSERTED);
531
+ }
532
+
533
+ if (this._popper) {
534
+ this._popper.update();
535
+ } else {
536
+ this._popper = Popper__namespace.createPopper(this._element, tip, this._getPopperConfig(attachment));
537
+ }
538
+
539
+ tip.classList.add(CLASS_NAME_SHOW);
540
+ const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;
541
+
542
+ if (customClass) {
543
+ tip.classList.add(...customClass.split(' '));
544
+ } // If this is a touch-enabled device we add extra
545
+ // empty mouseover listeners to the body's immediate children;
546
+ // only needed because of broken event delegation on iOS
547
+ // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
548
+
549
+
550
+ if ('ontouchstart' in document.documentElement) {
551
+ [].concat(...document.body.children).forEach(element => {
552
+ EventHandler__default['default'].on(element, 'mouseover', noop);
553
+ });
554
+ }
555
+
556
+ const complete = () => {
557
+ const prevHoverState = this._hoverState;
558
+ this._hoverState = null;
559
+ EventHandler__default['default'].trigger(this._element, this.constructor.Event.SHOWN);
560
+
561
+ if (prevHoverState === HOVER_STATE_OUT) {
562
+ this._leave(null, this);
563
+ }
564
+ };
565
+
566
+ const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE);
567
+
568
+ this._queueCallback(complete, this.tip, isAnimated);
569
+ }
570
+
571
+ hide() {
572
+ if (!this._popper) {
573
+ return;
574
+ }
575
+
576
+ const tip = this.getTipElement();
577
+
578
+ const complete = () => {
579
+ if (this._isWithActiveTrigger()) {
580
+ return;
581
+ }
582
+
583
+ if (this._hoverState !== HOVER_STATE_SHOW) {
584
+ tip.remove();
585
+ }
586
+
587
+ this._cleanTipClass();
588
+
589
+ this._element.removeAttribute('aria-describedby');
590
+
591
+ EventHandler__default['default'].trigger(this._element, this.constructor.Event.HIDDEN);
592
+
593
+ if (this._popper) {
594
+ this._popper.destroy();
595
+
596
+ this._popper = null;
597
+ }
598
+ };
599
+
600
+ const hideEvent = EventHandler__default['default'].trigger(this._element, this.constructor.Event.HIDE);
601
+
602
+ if (hideEvent.defaultPrevented) {
603
+ return;
604
+ }
605
+
606
+ tip.classList.remove(CLASS_NAME_SHOW); // If this is a touch-enabled device we remove the extra
607
+ // empty mouseover listeners we added for iOS support
608
+
609
+ if ('ontouchstart' in document.documentElement) {
610
+ [].concat(...document.body.children).forEach(element => EventHandler__default['default'].off(element, 'mouseover', noop));
611
+ }
612
+
613
+ this._activeTrigger[TRIGGER_CLICK] = false;
614
+ this._activeTrigger[TRIGGER_FOCUS] = false;
615
+ this._activeTrigger[TRIGGER_HOVER] = false;
616
+ const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE);
617
+
618
+ this._queueCallback(complete, this.tip, isAnimated);
619
+
620
+ this._hoverState = '';
621
+ }
622
+
623
+ update() {
624
+ if (this._popper !== null) {
625
+ this._popper.update();
626
+ }
627
+ } // Protected
628
+
629
+
630
+ isWithContent() {
631
+ return Boolean(this.getTitle());
632
+ }
633
+
634
+ getTipElement() {
635
+ if (this.tip) {
636
+ return this.tip;
637
+ }
638
+
639
+ const element = document.createElement('div');
640
+ element.innerHTML = this._config.template;
641
+ this.tip = element.children[0];
642
+ return this.tip;
643
+ }
644
+
645
+ setContent() {
646
+ const tip = this.getTipElement();
647
+ this.setElementContent(SelectorEngine__default['default'].findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());
648
+ tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW);
649
+ }
650
+
651
+ setElementContent(element, content) {
652
+ if (element === null) {
653
+ return;
654
+ }
655
+
656
+ if (isElement(content)) {
657
+ content = getElement(content); // content is a DOM node or a jQuery
658
+
659
+ if (this._config.html) {
660
+ if (content.parentNode !== element) {
661
+ element.innerHTML = '';
662
+ element.appendChild(content);
663
+ }
664
+ } else {
665
+ element.textContent = content.textContent;
666
+ }
667
+
668
+ return;
669
+ }
670
+
671
+ if (this._config.html) {
672
+ if (this._config.sanitize) {
673
+ content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);
674
+ }
675
+
676
+ element.innerHTML = content;
677
+ } else {
678
+ element.textContent = content;
679
+ }
680
+ }
681
+
682
+ getTitle() {
683
+ let title = this._element.getAttribute('data-coreui-original-title');
684
+
685
+ if (!title) {
686
+ title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;
687
+ }
688
+
689
+ return title;
690
+ }
691
+
692
+ updateAttachment(attachment) {
693
+ if (attachment === 'right') {
694
+ return 'end';
695
+ }
696
+
697
+ if (attachment === 'left') {
698
+ return 'start';
699
+ }
700
+
701
+ return attachment;
702
+ } // Private
703
+
704
+
705
+ _initializeOnDelegatedTarget(event, context) {
706
+ const dataKey = this.constructor.DATA_KEY;
707
+ context = context || Data__default['default'].get(event.delegateTarget, dataKey);
708
+
709
+ if (!context) {
710
+ context = new this.constructor(event.delegateTarget, this._getDelegateConfig());
711
+ Data__default['default'].set(event.delegateTarget, dataKey, context);
712
+ }
713
+
714
+ return context;
715
+ }
716
+
717
+ _getOffset() {
718
+ const {
719
+ offset
720
+ } = this._config;
721
+
722
+ if (typeof offset === 'string') {
723
+ return offset.split(',').map(val => Number.parseInt(val, 10));
724
+ }
725
+
726
+ if (typeof offset === 'function') {
727
+ return popperData => offset(popperData, this._element);
728
+ }
729
+
730
+ return offset;
731
+ }
732
+
733
+ _getPopperConfig(attachment) {
734
+ const defaultBsPopperConfig = {
735
+ placement: attachment,
736
+ modifiers: [{
737
+ name: 'flip',
738
+ options: {
739
+ fallbackPlacements: this._config.fallbackPlacements
740
+ }
741
+ }, {
742
+ name: 'offset',
743
+ options: {
744
+ offset: this._getOffset()
745
+ }
746
+ }, {
747
+ name: 'preventOverflow',
748
+ options: {
749
+ boundary: this._config.boundary
750
+ }
751
+ }, {
752
+ name: 'arrow',
753
+ options: {
754
+ element: `.${this.constructor.NAME}-arrow`
755
+ }
756
+ }, {
757
+ name: 'onChange',
758
+ enabled: true,
759
+ phase: 'afterWrite',
760
+ fn: data => this._handlePopperPlacementChange(data)
761
+ }],
762
+ onFirstUpdate: data => {
763
+ if (data.options.placement !== data.placement) {
764
+ this._handlePopperPlacementChange(data);
765
+ }
766
+ }
767
+ };
768
+ return { ...defaultBsPopperConfig,
769
+ ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)
770
+ };
771
+ }
772
+
773
+ _addAttachmentClass(attachment) {
774
+ this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);
775
+ }
776
+
777
+ _getAttachment(placement) {
778
+ return AttachmentMap[placement.toUpperCase()];
779
+ }
780
+
781
+ _setListeners() {
782
+ const triggers = this._config.trigger.split(' ');
783
+
784
+ triggers.forEach(trigger => {
785
+ if (trigger === 'click') {
786
+ EventHandler__default['default'].on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));
787
+ } else if (trigger !== TRIGGER_MANUAL) {
788
+ const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;
789
+ const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;
790
+ EventHandler__default['default'].on(this._element, eventIn, this._config.selector, event => this._enter(event));
791
+ EventHandler__default['default'].on(this._element, eventOut, this._config.selector, event => this._leave(event));
792
+ }
793
+ });
794
+
795
+ this._hideModalHandler = () => {
796
+ if (this._element) {
797
+ this.hide();
798
+ }
799
+ };
800
+
801
+ EventHandler__default['default'].on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.coreui.modal', this._hideModalHandler);
802
+
803
+ if (this._config.selector) {
804
+ this._config = { ...this._config,
805
+ trigger: 'manual',
806
+ selector: ''
807
+ };
808
+ } else {
809
+ this._fixTitle();
810
+ }
811
+ }
812
+
813
+ _fixTitle() {
814
+ const title = this._element.getAttribute('title');
815
+
816
+ const originalTitleType = typeof this._element.getAttribute('data-coreui-original-title');
817
+
818
+ if (title || originalTitleType !== 'string') {
819
+ this._element.setAttribute('data-coreui-original-title', title || '');
820
+
821
+ if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {
822
+ this._element.setAttribute('aria-label', title);
823
+ }
824
+
825
+ this._element.setAttribute('title', '');
826
+ }
827
+ }
828
+
829
+ _enter(event, context) {
830
+ context = this._initializeOnDelegatedTarget(event, context);
831
+
832
+ if (event) {
833
+ context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;
834
+ }
835
+
836
+ if (context.getTipElement().classList.contains(CLASS_NAME_SHOW) || context._hoverState === HOVER_STATE_SHOW) {
837
+ context._hoverState = HOVER_STATE_SHOW;
838
+ return;
839
+ }
840
+
841
+ clearTimeout(context._timeout);
842
+ context._hoverState = HOVER_STATE_SHOW;
843
+
844
+ if (!context._config.delay || !context._config.delay.show) {
845
+ context.show();
846
+ return;
847
+ }
848
+
849
+ context._timeout = setTimeout(() => {
850
+ if (context._hoverState === HOVER_STATE_SHOW) {
851
+ context.show();
852
+ }
853
+ }, context._config.delay.show);
854
+ }
855
+
856
+ _leave(event, context) {
857
+ context = this._initializeOnDelegatedTarget(event, context);
858
+
859
+ if (event) {
860
+ context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);
861
+ }
862
+
863
+ if (context._isWithActiveTrigger()) {
864
+ return;
865
+ }
866
+
867
+ clearTimeout(context._timeout);
868
+ context._hoverState = HOVER_STATE_OUT;
869
+
870
+ if (!context._config.delay || !context._config.delay.hide) {
871
+ context.hide();
872
+ return;
873
+ }
874
+
875
+ context._timeout = setTimeout(() => {
876
+ if (context._hoverState === HOVER_STATE_OUT) {
877
+ context.hide();
878
+ }
879
+ }, context._config.delay.hide);
880
+ }
881
+
882
+ _isWithActiveTrigger() {
883
+ for (const trigger in this._activeTrigger) {
884
+ if (this._activeTrigger[trigger]) {
885
+ return true;
886
+ }
887
+ }
888
+
889
+ return false;
890
+ }
891
+
892
+ _getConfig(config) {
893
+ const dataAttributes = Manipulator__default['default'].getDataAttributes(this._element);
894
+ Object.keys(dataAttributes).forEach(dataAttr => {
895
+ if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {
896
+ delete dataAttributes[dataAttr];
897
+ }
898
+ });
899
+ config = { ...this.constructor.Default,
900
+ ...dataAttributes,
901
+ ...(typeof config === 'object' && config ? config : {})
902
+ };
903
+ config.container = config.container === false ? document.body : getElement(config.container);
904
+
905
+ if (typeof config.delay === 'number') {
906
+ config.delay = {
907
+ show: config.delay,
908
+ hide: config.delay
909
+ };
910
+ }
911
+
912
+ if (typeof config.title === 'number') {
913
+ config.title = config.title.toString();
914
+ }
915
+
916
+ if (typeof config.content === 'number') {
917
+ config.content = config.content.toString();
918
+ }
919
+
920
+ typeCheckConfig(NAME, config, this.constructor.DefaultType);
921
+
922
+ if (config.sanitize) {
923
+ config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);
924
+ }
925
+
926
+ return config;
927
+ }
928
+
929
+ _getDelegateConfig() {
930
+ const config = {};
931
+
932
+ if (this._config) {
933
+ for (const key in this._config) {
934
+ if (this.constructor.Default[key] !== this._config[key]) {
935
+ config[key] = this._config[key];
936
+ }
937
+ }
938
+ }
939
+
940
+ return config;
941
+ }
942
+
943
+ _cleanTipClass() {
944
+ const tip = this.getTipElement();
945
+ const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);
946
+
947
+ if (tabClass !== null && tabClass.length > 0) {
948
+ tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));
949
+ }
950
+ }
951
+
952
+ _handlePopperPlacementChange(popperData) {
953
+ const {
954
+ state
955
+ } = popperData;
956
+
957
+ if (!state) {
958
+ return;
959
+ }
960
+
961
+ this.tip = state.elements.popper;
962
+
963
+ this._cleanTipClass();
964
+
965
+ this._addAttachmentClass(this._getAttachment(state.placement));
966
+ } // Static
967
+
968
+
969
+ static jQueryInterface(config) {
970
+ return this.each(function () {
971
+ const data = Tooltip.getOrCreateInstance(this, config);
972
+
973
+ if (typeof config === 'string') {
974
+ if (typeof data[config] === 'undefined') {
975
+ throw new TypeError(`No method named "${config}"`);
976
+ }
977
+
978
+ data[config]();
979
+ }
980
+ });
981
+ }
982
+
983
+ }
984
+ /**
985
+ * ------------------------------------------------------------------------
986
+ * jQuery
987
+ * ------------------------------------------------------------------------
988
+ * add .Tooltip to jQuery only if jQuery is present
989
+ */
990
+
991
+
992
+ defineJQueryPlugin(Tooltip);
993
+
994
+ return Tooltip;
995
+
996
+ })));
997
+ //# sourceMappingURL=tooltip.js.map