@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":"button.js","sources":["../src/util/index.js","../src/button.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): alert.js\n * Licensed under MIT (https://coreui.io/license)\n *\n * This component is a modified version of the Bootstrap's button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'button'\nconst DATA_KEY = 'coreui.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_TOGGLE = '[data-coreui-toggle=\"button\"]'\n\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button extends BaseComponent {\n // Getters\n\n static get NAME() {\n return NAME\n }\n\n // Public\n\n toggle() {\n // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE))\n }\n\n // Static\n\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Button.getOrCreateInstance(this)\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {\n event.preventDefault()\n\n const button = event.target.closest(SELECTOR_DATA_TOGGLE)\n const data = Button.getOrCreateInstance(button)\n\n data.toggle()\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Button to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Button)\n\nexport default Button\n"],"names":["getjQuery","jQuery","window","document","body","hasAttribute","DOMContentLoadedCallbacks","onDOMContentLoaded","callback","readyState","length","addEventListener","forEach","push","defineJQueryPlugin","plugin","$","name","NAME","JQUERY_NO_CONFLICT","fn","jQueryInterface","Constructor","noConflict","DATA_KEY","EVENT_KEY","DATA_API_KEY","CLASS_NAME_ACTIVE","SELECTOR_DATA_TOGGLE","EVENT_CLICK_DATA_API","Button","BaseComponent","toggle","_element","setAttribute","classList","config","each","data","getOrCreateInstance","EventHandler","on","event","preventDefault","button","target","closest"],"mappings":";;;;;;;;;;;;;;;;EAoMA,MAAMA,SAAS,GAAG,MAAM;EACtB,QAAM;EAAEC,IAAAA;EAAF,MAAaC,MAAnB;;EAEA,MAAID,MAAM,IAAI,CAACE,QAAQ,CAACC,IAAT,CAAcC,YAAd,CAA2B,uBAA3B,CAAf,EAAoE;EAClE,WAAOJ,MAAP;EACD;;EAED,SAAO,IAAP;EACD,CARD;;EAUA,MAAMK,yBAAyB,GAAG,EAAlC;;EAEA,MAAMC,kBAAkB,GAAGC,QAAQ,IAAI;EACrC,MAAIL,QAAQ,CAACM,UAAT,KAAwB,SAA5B,EAAuC;EACrC;EACA,QAAI,CAACH,yBAAyB,CAACI,MAA/B,EAAuC;EACrCP,MAAAA,QAAQ,CAACQ,gBAAT,CAA0B,kBAA1B,EAA8C,MAAM;EAClDL,QAAAA,yBAAyB,CAACM,OAA1B,CAAkCJ,QAAQ,IAAIA,QAAQ,EAAtD;EACD,OAFD;EAGD;;EAEDF,IAAAA,yBAAyB,CAACO,IAA1B,CAA+BL,QAA/B;EACD,GATD,MASO;EACLA,IAAAA,QAAQ;EACT;EACF,CAbD;;EAiBA,MAAMM,kBAAkB,GAAGC,MAAM,IAAI;EACnCR,EAAAA,kBAAkB,CAAC,MAAM;EACvB,UAAMS,CAAC,GAAGhB,SAAS,EAAnB;EACA;;EACA,QAAIgB,CAAJ,EAAO;EACL,YAAMC,IAAI,GAAGF,MAAM,CAACG,IAApB;EACA,YAAMC,kBAAkB,GAAGH,CAAC,CAACI,EAAF,CAAKH,IAAL,CAA3B;EACAD,MAAAA,CAAC,CAACI,EAAF,CAAKH,IAAL,IAAaF,MAAM,CAACM,eAApB;EACAL,MAAAA,CAAC,CAACI,EAAF,CAAKH,IAAL,EAAWK,WAAX,GAAyBP,MAAzB;;EACAC,MAAAA,CAAC,CAACI,EAAF,CAAKH,IAAL,EAAWM,UAAX,GAAwB,MAAM;EAC5BP,QAAAA,CAAC,CAACI,EAAF,CAAKH,IAAL,IAAaE,kBAAb;EACA,eAAOJ,MAAM,CAACM,eAAd;EACD,OAHD;EAID;EACF,GAbiB,CAAlB;EAcD,CAfD;;ECjOA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAMA;EACA;EACA;EACA;EACA;;EAEA,MAAMH,IAAI,GAAG,QAAb;EACA,MAAMM,QAAQ,GAAG,eAAjB;EACA,MAAMC,SAAS,GAAI,IAAGD,QAAS,EAA/B;EACA,MAAME,YAAY,GAAG,WAArB;EAEA,MAAMC,iBAAiB,GAAG,QAA1B;EAEA,MAAMC,oBAAoB,GAAG,+BAA7B;EAEA,MAAMC,oBAAoB,GAAI,QAAOJ,SAAU,GAAEC,YAAa,EAA9D;EAEA;EACA;EACA;EACA;EACA;;EAEA,MAAMI,MAAN,SAAqBC,iCAArB,CAAmC;EACjC;EAEe,aAAJb,IAAI,GAAG;EAChB,WAAOA,IAAP;EACD,GALgC;;;EASjCc,EAAAA,MAAM,GAAG;EACP;EACA,SAAKC,QAAL,CAAcC,YAAd,CAA2B,cAA3B,EAA2C,KAAKD,QAAL,CAAcE,SAAd,CAAwBH,MAAxB,CAA+BL,iBAA/B,CAA3C;EACD,GAZgC;;;EAgBX,SAAfN,eAAe,CAACe,MAAD,EAAS;EAC7B,WAAO,KAAKC,IAAL,CAAU,YAAY;EAC3B,YAAMC,IAAI,GAAGR,MAAM,CAACS,mBAAP,CAA2B,IAA3B,CAAb;;EAEA,UAAIH,MAAM,KAAK,QAAf,EAAyB;EACvBE,QAAAA,IAAI,CAACF,MAAD,CAAJ;EACD;EACF,KANM,CAAP;EAOD;;EAxBgC;EA2BnC;EACA;EACA;EACA;EACA;;;AAEAI,kCAAY,CAACC,EAAb,CAAgBtC,QAAhB,EAA0B0B,oBAA1B,EAAgDD,oBAAhD,EAAsEc,KAAK,IAAI;EAC7EA,EAAAA,KAAK,CAACC,cAAN;EAEA,QAAMC,MAAM,GAAGF,KAAK,CAACG,MAAN,CAAaC,OAAb,CAAqBlB,oBAArB,CAAf;EACA,QAAMU,IAAI,GAAGR,MAAM,CAACS,mBAAP,CAA2BK,MAA3B,CAAb;EAEAN,EAAAA,IAAI,CAACN,MAAL;EACD,CAPD;EASA;EACA;EACA;EACA;EACA;EACA;;EAEAlB,kBAAkB,CAACgB,MAAD,CAAlB;;;;;;;;"}
@@ -0,0 +1,724 @@
1
+ /*!
2
+ * CoreUI carousel.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('./dom/selector-engine.js'), require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('./base-component.js')) :
8
+ typeof define === 'function' && define.amd ? define(['./dom/selector-engine', './dom/event-handler', './dom/manipulator', './base-component'], factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Carousel = factory(global.SelectorEngine, global.EventHandler, global.Manipulator, global.Base));
10
+ }(this, (function (SelectorEngine, EventHandler, Manipulator, BaseComponent) { 'use strict';
11
+
12
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
13
+
14
+ var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
15
+ var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
16
+ var Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
17
+ var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
18
+
19
+ const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
20
+
21
+ const toType = obj => {
22
+ if (obj === null || obj === undefined) {
23
+ return `${obj}`;
24
+ }
25
+
26
+ return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
27
+ };
28
+
29
+ const getSelector = element => {
30
+ let selector = element.getAttribute('data-coreui-target');
31
+
32
+ if (!selector || selector === '#') {
33
+ let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
34
+ // so everything starting with `#` or `.`. If a "real" URL is used as the selector,
35
+ // `document.querySelector` will rightfully complain it is invalid.
36
+ // See https://github.com/twbs/bootstrap/issues/32273
37
+
38
+ if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {
39
+ return null;
40
+ } // Just in case some CMS puts out a full URL with the anchor appended
41
+
42
+
43
+ if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {
44
+ hrefAttr = `#${hrefAttr.split('#')[1]}`;
45
+ }
46
+
47
+ selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
48
+ }
49
+
50
+ return selector;
51
+ };
52
+
53
+ const getElementFromSelector = element => {
54
+ const selector = getSelector(element);
55
+ return selector ? document.querySelector(selector) : null;
56
+ };
57
+
58
+ const triggerTransitionEnd = element => {
59
+ element.dispatchEvent(new Event(TRANSITION_END));
60
+ };
61
+
62
+ const isElement = obj => {
63
+ if (!obj || typeof obj !== 'object') {
64
+ return false;
65
+ }
66
+
67
+ if (typeof obj.jquery !== 'undefined') {
68
+ obj = obj[0];
69
+ }
70
+
71
+ return typeof obj.nodeType !== 'undefined';
72
+ };
73
+
74
+ const typeCheckConfig = (componentName, config, configTypes) => {
75
+ Object.keys(configTypes).forEach(property => {
76
+ const expectedTypes = configTypes[property];
77
+ const value = config[property];
78
+ const valueType = value && isElement(value) ? 'element' : toType(value);
79
+
80
+ if (!new RegExp(expectedTypes).test(valueType)) {
81
+ throw new TypeError(`${componentName.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`);
82
+ }
83
+ });
84
+ };
85
+
86
+ const isVisible = element => {
87
+ if (!isElement(element) || element.getClientRects().length === 0) {
88
+ return false;
89
+ }
90
+
91
+ return getComputedStyle(element).getPropertyValue('visibility') === 'visible';
92
+ };
93
+
94
+ const reflow = element => element.offsetHeight;
95
+
96
+ const getjQuery = () => {
97
+ const {
98
+ jQuery
99
+ } = window;
100
+
101
+ if (jQuery && !document.body.hasAttribute('data-coreui-no-jquery')) {
102
+ return jQuery;
103
+ }
104
+
105
+ return null;
106
+ };
107
+
108
+ const DOMContentLoadedCallbacks = [];
109
+
110
+ const onDOMContentLoaded = callback => {
111
+ if (document.readyState === 'loading') {
112
+ // add listener on the first call when the document is in loading state
113
+ if (!DOMContentLoadedCallbacks.length) {
114
+ document.addEventListener('DOMContentLoaded', () => {
115
+ DOMContentLoadedCallbacks.forEach(callback => callback());
116
+ });
117
+ }
118
+
119
+ DOMContentLoadedCallbacks.push(callback);
120
+ } else {
121
+ callback();
122
+ }
123
+ };
124
+
125
+ const isRTL = () => document.documentElement.dir === 'rtl';
126
+
127
+ const defineJQueryPlugin = plugin => {
128
+ onDOMContentLoaded(() => {
129
+ const $ = getjQuery();
130
+ /* istanbul ignore if */
131
+
132
+ if ($) {
133
+ const name = plugin.NAME;
134
+ const JQUERY_NO_CONFLICT = $.fn[name];
135
+ $.fn[name] = plugin.jQueryInterface;
136
+ $.fn[name].Constructor = plugin;
137
+
138
+ $.fn[name].noConflict = () => {
139
+ $.fn[name] = JQUERY_NO_CONFLICT;
140
+ return plugin.jQueryInterface;
141
+ };
142
+ }
143
+ });
144
+ };
145
+ /**
146
+ * Return the previous/next element of a list.
147
+ *
148
+ * @param {array} list The list of elements
149
+ * @param activeElement The active element
150
+ * @param shouldGetNext Choose to get next or previous element
151
+ * @param isCycleAllowed
152
+ * @return {Element|elem} The proper element
153
+ */
154
+
155
+
156
+ const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {
157
+ let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed
158
+
159
+ if (index === -1) {
160
+ return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];
161
+ }
162
+
163
+ const listLength = list.length;
164
+ index += shouldGetNext ? 1 : -1;
165
+
166
+ if (isCycleAllowed) {
167
+ index = (index + listLength) % listLength;
168
+ }
169
+
170
+ return list[Math.max(0, Math.min(index, listLength - 1))];
171
+ };
172
+
173
+ /**
174
+ * --------------------------------------------------------------------------
175
+ * CoreUI (v4.0.2): carousel.js
176
+ * Licensed under MIT (https://coreui.io/license)
177
+ *
178
+ * This component is a modified version of the Bootstrap's carousel.js
179
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
180
+ * --------------------------------------------------------------------------
181
+ */
182
+ /**
183
+ * ------------------------------------------------------------------------
184
+ * Constants
185
+ * ------------------------------------------------------------------------
186
+ */
187
+
188
+ const NAME = 'carousel';
189
+ const DATA_KEY = 'coreui.carousel';
190
+ const EVENT_KEY = `.${DATA_KEY}`;
191
+ const DATA_API_KEY = '.data-api';
192
+ const ARROW_LEFT_KEY = 'ArrowLeft';
193
+ const ARROW_RIGHT_KEY = 'ArrowRight';
194
+ const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch
195
+
196
+ const SWIPE_THRESHOLD = 40;
197
+ const Default = {
198
+ interval: 5000,
199
+ keyboard: true,
200
+ slide: false,
201
+ pause: 'hover',
202
+ wrap: true,
203
+ touch: true
204
+ };
205
+ const DefaultType = {
206
+ interval: '(number|boolean)',
207
+ keyboard: 'boolean',
208
+ slide: '(boolean|string)',
209
+ pause: '(string|boolean)',
210
+ wrap: 'boolean',
211
+ touch: 'boolean'
212
+ };
213
+ const ORDER_NEXT = 'next';
214
+ const ORDER_PREV = 'prev';
215
+ const DIRECTION_LEFT = 'left';
216
+ const DIRECTION_RIGHT = 'right';
217
+ const KEY_TO_DIRECTION = {
218
+ [ARROW_LEFT_KEY]: DIRECTION_RIGHT,
219
+ [ARROW_RIGHT_KEY]: DIRECTION_LEFT
220
+ };
221
+ const EVENT_SLIDE = `slide${EVENT_KEY}`;
222
+ const EVENT_SLID = `slid${EVENT_KEY}`;
223
+ const EVENT_KEYDOWN = `keydown${EVENT_KEY}`;
224
+ const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`;
225
+ const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`;
226
+ const EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`;
227
+ const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`;
228
+ const EVENT_TOUCHEND = `touchend${EVENT_KEY}`;
229
+ const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`;
230
+ const EVENT_POINTERUP = `pointerup${EVENT_KEY}`;
231
+ const EVENT_DRAG_START = `dragstart${EVENT_KEY}`;
232
+ const EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`;
233
+ const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;
234
+ const CLASS_NAME_CAROUSEL = 'carousel';
235
+ const CLASS_NAME_ACTIVE = 'active';
236
+ const CLASS_NAME_SLIDE = 'slide';
237
+ const CLASS_NAME_END = 'carousel-item-end';
238
+ const CLASS_NAME_START = 'carousel-item-start';
239
+ const CLASS_NAME_NEXT = 'carousel-item-next';
240
+ const CLASS_NAME_PREV = 'carousel-item-prev';
241
+ const CLASS_NAME_POINTER_EVENT = 'pointer-event';
242
+ const SELECTOR_ACTIVE = '.active';
243
+ const SELECTOR_ACTIVE_ITEM = '.active.carousel-item';
244
+ const SELECTOR_ITEM = '.carousel-item';
245
+ const SELECTOR_ITEM_IMG = '.carousel-item img';
246
+ const SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';
247
+ const SELECTOR_INDICATORS = '.carousel-indicators';
248
+ const SELECTOR_INDICATOR = '[data-coreui-target]';
249
+ const SELECTOR_DATA_SLIDE = '[data-coreui-slide], [data-coreui-slide-to]';
250
+ const SELECTOR_DATA_RIDE = '[data-coreui-ride="carousel"]';
251
+ const POINTER_TYPE_TOUCH = 'touch';
252
+ const POINTER_TYPE_PEN = 'pen';
253
+ /**
254
+ * ------------------------------------------------------------------------
255
+ * Class Definition
256
+ * ------------------------------------------------------------------------
257
+ */
258
+
259
+ class Carousel extends BaseComponent__default['default'] {
260
+ constructor(element, config) {
261
+ super(element);
262
+ this._items = null;
263
+ this._interval = null;
264
+ this._activeElement = null;
265
+ this._isPaused = false;
266
+ this._isSliding = false;
267
+ this.touchTimeout = null;
268
+ this.touchStartX = 0;
269
+ this.touchDeltaX = 0;
270
+ this._config = this._getConfig(config);
271
+ this._indicatorsElement = SelectorEngine__default['default'].findOne(SELECTOR_INDICATORS, this._element);
272
+ this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;
273
+ this._pointerEvent = Boolean(window.PointerEvent);
274
+
275
+ this._addEventListeners();
276
+ } // Getters
277
+
278
+
279
+ static get Default() {
280
+ return Default;
281
+ }
282
+
283
+ static get NAME() {
284
+ return NAME;
285
+ } // Public
286
+
287
+
288
+ next() {
289
+ this._slide(ORDER_NEXT);
290
+ }
291
+
292
+ nextWhenVisible() {
293
+ // Don't call next when the page isn't visible
294
+ // or the carousel or its parent isn't visible
295
+ if (!document.hidden && isVisible(this._element)) {
296
+ this.next();
297
+ }
298
+ }
299
+
300
+ prev() {
301
+ this._slide(ORDER_PREV);
302
+ }
303
+
304
+ pause(event) {
305
+ if (!event) {
306
+ this._isPaused = true;
307
+ }
308
+
309
+ if (SelectorEngine__default['default'].findOne(SELECTOR_NEXT_PREV, this._element)) {
310
+ triggerTransitionEnd(this._element);
311
+ this.cycle(true);
312
+ }
313
+
314
+ clearInterval(this._interval);
315
+ this._interval = null;
316
+ }
317
+
318
+ cycle(event) {
319
+ if (!event) {
320
+ this._isPaused = false;
321
+ }
322
+
323
+ if (this._interval) {
324
+ clearInterval(this._interval);
325
+ this._interval = null;
326
+ }
327
+
328
+ if (this._config && this._config.interval && !this._isPaused) {
329
+ this._updateInterval();
330
+
331
+ this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);
332
+ }
333
+ }
334
+
335
+ to(index) {
336
+ this._activeElement = SelectorEngine__default['default'].findOne(SELECTOR_ACTIVE_ITEM, this._element);
337
+
338
+ const activeIndex = this._getItemIndex(this._activeElement);
339
+
340
+ if (index > this._items.length - 1 || index < 0) {
341
+ return;
342
+ }
343
+
344
+ if (this._isSliding) {
345
+ EventHandler__default['default'].one(this._element, EVENT_SLID, () => this.to(index));
346
+ return;
347
+ }
348
+
349
+ if (activeIndex === index) {
350
+ this.pause();
351
+ this.cycle();
352
+ return;
353
+ }
354
+
355
+ const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;
356
+
357
+ this._slide(order, this._items[index]);
358
+ } // Private
359
+
360
+
361
+ _getConfig(config) {
362
+ config = { ...Default,
363
+ ...Manipulator__default['default'].getDataAttributes(this._element),
364
+ ...(typeof config === 'object' ? config : {})
365
+ };
366
+ typeCheckConfig(NAME, config, DefaultType);
367
+ return config;
368
+ }
369
+
370
+ _handleSwipe() {
371
+ const absDeltax = Math.abs(this.touchDeltaX);
372
+
373
+ if (absDeltax <= SWIPE_THRESHOLD) {
374
+ return;
375
+ }
376
+
377
+ const direction = absDeltax / this.touchDeltaX;
378
+ this.touchDeltaX = 0;
379
+
380
+ if (!direction) {
381
+ return;
382
+ }
383
+
384
+ this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);
385
+ }
386
+
387
+ _addEventListeners() {
388
+ if (this._config.keyboard) {
389
+ EventHandler__default['default'].on(this._element, EVENT_KEYDOWN, event => this._keydown(event));
390
+ }
391
+
392
+ if (this._config.pause === 'hover') {
393
+ EventHandler__default['default'].on(this._element, EVENT_MOUSEENTER, event => this.pause(event));
394
+ EventHandler__default['default'].on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));
395
+ }
396
+
397
+ if (this._config.touch && this._touchSupported) {
398
+ this._addTouchEventListeners();
399
+ }
400
+ }
401
+
402
+ _addTouchEventListeners() {
403
+ const start = event => {
404
+ if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {
405
+ this.touchStartX = event.clientX;
406
+ } else if (!this._pointerEvent) {
407
+ this.touchStartX = event.touches[0].clientX;
408
+ }
409
+ };
410
+
411
+ const move = event => {
412
+ // ensure swiping with one touch and not pinching
413
+ this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;
414
+ };
415
+
416
+ const end = event => {
417
+ if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {
418
+ this.touchDeltaX = event.clientX - this.touchStartX;
419
+ }
420
+
421
+ this._handleSwipe();
422
+
423
+ if (this._config.pause === 'hover') {
424
+ // If it's a touch-enabled device, mouseenter/leave are fired as
425
+ // part of the mouse compatibility events on first tap - the carousel
426
+ // would stop cycling until user tapped out of it;
427
+ // here, we listen for touchend, explicitly pause the carousel
428
+ // (as if it's the second time we tap on it, mouseenter compat event
429
+ // is NOT fired) and after a timeout (to allow for mouse compatibility
430
+ // events to fire) we explicitly restart cycling
431
+ this.pause();
432
+
433
+ if (this.touchTimeout) {
434
+ clearTimeout(this.touchTimeout);
435
+ }
436
+
437
+ this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);
438
+ }
439
+ };
440
+
441
+ SelectorEngine__default['default'].find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {
442
+ EventHandler__default['default'].on(itemImg, EVENT_DRAG_START, e => e.preventDefault());
443
+ });
444
+
445
+ if (this._pointerEvent) {
446
+ EventHandler__default['default'].on(this._element, EVENT_POINTERDOWN, event => start(event));
447
+ EventHandler__default['default'].on(this._element, EVENT_POINTERUP, event => end(event));
448
+
449
+ this._element.classList.add(CLASS_NAME_POINTER_EVENT);
450
+ } else {
451
+ EventHandler__default['default'].on(this._element, EVENT_TOUCHSTART, event => start(event));
452
+ EventHandler__default['default'].on(this._element, EVENT_TOUCHMOVE, event => move(event));
453
+ EventHandler__default['default'].on(this._element, EVENT_TOUCHEND, event => end(event));
454
+ }
455
+ }
456
+
457
+ _keydown(event) {
458
+ if (/input|textarea/i.test(event.target.tagName)) {
459
+ return;
460
+ }
461
+
462
+ const direction = KEY_TO_DIRECTION[event.key];
463
+
464
+ if (direction) {
465
+ event.preventDefault();
466
+
467
+ this._slide(direction);
468
+ }
469
+ }
470
+
471
+ _getItemIndex(element) {
472
+ this._items = element && element.parentNode ? SelectorEngine__default['default'].find(SELECTOR_ITEM, element.parentNode) : [];
473
+ return this._items.indexOf(element);
474
+ }
475
+
476
+ _getItemByOrder(order, activeElement) {
477
+ const isNext = order === ORDER_NEXT;
478
+ return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);
479
+ }
480
+
481
+ _triggerSlideEvent(relatedTarget, eventDirectionName) {
482
+ const targetIndex = this._getItemIndex(relatedTarget);
483
+
484
+ const fromIndex = this._getItemIndex(SelectorEngine__default['default'].findOne(SELECTOR_ACTIVE_ITEM, this._element));
485
+
486
+ return EventHandler__default['default'].trigger(this._element, EVENT_SLIDE, {
487
+ relatedTarget,
488
+ direction: eventDirectionName,
489
+ from: fromIndex,
490
+ to: targetIndex
491
+ });
492
+ }
493
+
494
+ _setActiveIndicatorElement(element) {
495
+ if (this._indicatorsElement) {
496
+ const activeIndicator = SelectorEngine__default['default'].findOne(SELECTOR_ACTIVE, this._indicatorsElement);
497
+ activeIndicator.classList.remove(CLASS_NAME_ACTIVE);
498
+ activeIndicator.removeAttribute('aria-current');
499
+ const indicators = SelectorEngine__default['default'].find(SELECTOR_INDICATOR, this._indicatorsElement);
500
+
501
+ for (let i = 0; i < indicators.length; i++) {
502
+ if (Number.parseInt(indicators[i].getAttribute('data-coreui-slide-to'), 10) === this._getItemIndex(element)) {
503
+ indicators[i].classList.add(CLASS_NAME_ACTIVE);
504
+ indicators[i].setAttribute('aria-current', 'true');
505
+ break;
506
+ }
507
+ }
508
+ }
509
+ }
510
+
511
+ _updateInterval() {
512
+ const element = this._activeElement || SelectorEngine__default['default'].findOne(SELECTOR_ACTIVE_ITEM, this._element);
513
+
514
+ if (!element) {
515
+ return;
516
+ }
517
+
518
+ const elementInterval = Number.parseInt(element.getAttribute('data-coreui-interval'), 10);
519
+
520
+ if (elementInterval) {
521
+ this._config.defaultInterval = this._config.defaultInterval || this._config.interval;
522
+ this._config.interval = elementInterval;
523
+ } else {
524
+ this._config.interval = this._config.defaultInterval || this._config.interval;
525
+ }
526
+ }
527
+
528
+ _slide(directionOrOrder, element) {
529
+ const order = this._directionToOrder(directionOrOrder);
530
+
531
+ const activeElement = SelectorEngine__default['default'].findOne(SELECTOR_ACTIVE_ITEM, this._element);
532
+
533
+ const activeElementIndex = this._getItemIndex(activeElement);
534
+
535
+ const nextElement = element || this._getItemByOrder(order, activeElement);
536
+
537
+ const nextElementIndex = this._getItemIndex(nextElement);
538
+
539
+ const isCycling = Boolean(this._interval);
540
+ const isNext = order === ORDER_NEXT;
541
+ const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;
542
+ const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;
543
+
544
+ const eventDirectionName = this._orderToDirection(order);
545
+
546
+ if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE)) {
547
+ this._isSliding = false;
548
+ return;
549
+ }
550
+
551
+ if (this._isSliding) {
552
+ return;
553
+ }
554
+
555
+ const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);
556
+
557
+ if (slideEvent.defaultPrevented) {
558
+ return;
559
+ }
560
+
561
+ if (!activeElement || !nextElement) {
562
+ // Some weirdness is happening, so we bail
563
+ return;
564
+ }
565
+
566
+ this._isSliding = true;
567
+
568
+ if (isCycling) {
569
+ this.pause();
570
+ }
571
+
572
+ this._setActiveIndicatorElement(nextElement);
573
+
574
+ this._activeElement = nextElement;
575
+
576
+ const triggerSlidEvent = () => {
577
+ EventHandler__default['default'].trigger(this._element, EVENT_SLID, {
578
+ relatedTarget: nextElement,
579
+ direction: eventDirectionName,
580
+ from: activeElementIndex,
581
+ to: nextElementIndex
582
+ });
583
+ };
584
+
585
+ if (this._element.classList.contains(CLASS_NAME_SLIDE)) {
586
+ nextElement.classList.add(orderClassName);
587
+ reflow(nextElement);
588
+ activeElement.classList.add(directionalClassName);
589
+ nextElement.classList.add(directionalClassName);
590
+
591
+ const completeCallBack = () => {
592
+ nextElement.classList.remove(directionalClassName, orderClassName);
593
+ nextElement.classList.add(CLASS_NAME_ACTIVE);
594
+ activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName);
595
+ this._isSliding = false;
596
+ setTimeout(triggerSlidEvent, 0);
597
+ };
598
+
599
+ this._queueCallback(completeCallBack, activeElement, true);
600
+ } else {
601
+ activeElement.classList.remove(CLASS_NAME_ACTIVE);
602
+ nextElement.classList.add(CLASS_NAME_ACTIVE);
603
+ this._isSliding = false;
604
+ triggerSlidEvent();
605
+ }
606
+
607
+ if (isCycling) {
608
+ this.cycle();
609
+ }
610
+ }
611
+
612
+ _directionToOrder(direction) {
613
+ if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {
614
+ return direction;
615
+ }
616
+
617
+ if (isRTL()) {
618
+ return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;
619
+ }
620
+
621
+ return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;
622
+ }
623
+
624
+ _orderToDirection(order) {
625
+ if (![ORDER_NEXT, ORDER_PREV].includes(order)) {
626
+ return order;
627
+ }
628
+
629
+ if (isRTL()) {
630
+ return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;
631
+ }
632
+
633
+ return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;
634
+ } // Static
635
+
636
+
637
+ static carouselInterface(element, config) {
638
+ const data = Carousel.getOrCreateInstance(element, config);
639
+ let {
640
+ _config
641
+ } = data;
642
+
643
+ if (typeof config === 'object') {
644
+ _config = { ..._config,
645
+ ...config
646
+ };
647
+ }
648
+
649
+ const action = typeof config === 'string' ? config : _config.slide;
650
+
651
+ if (typeof config === 'number') {
652
+ data.to(config);
653
+ } else if (typeof action === 'string') {
654
+ if (typeof data[action] === 'undefined') {
655
+ throw new TypeError(`No method named "${action}"`);
656
+ }
657
+
658
+ data[action]();
659
+ } else if (_config.interval && _config.ride) {
660
+ data.pause();
661
+ data.cycle();
662
+ }
663
+ }
664
+
665
+ static jQueryInterface(config) {
666
+ return this.each(function () {
667
+ Carousel.carouselInterface(this, config);
668
+ });
669
+ }
670
+
671
+ static dataApiClickHandler(event) {
672
+ const target = getElementFromSelector(this);
673
+
674
+ if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {
675
+ return;
676
+ }
677
+
678
+ const config = { ...Manipulator__default['default'].getDataAttributes(target),
679
+ ...Manipulator__default['default'].getDataAttributes(this)
680
+ };
681
+ const slideIndex = this.getAttribute('data-coreui-slide-to');
682
+
683
+ if (slideIndex) {
684
+ config.interval = false;
685
+ }
686
+
687
+ Carousel.carouselInterface(target, config);
688
+
689
+ if (slideIndex) {
690
+ Carousel.getInstance(target).to(slideIndex);
691
+ }
692
+
693
+ event.preventDefault();
694
+ }
695
+
696
+ }
697
+ /**
698
+ * ------------------------------------------------------------------------
699
+ * Data Api implementation
700
+ * ------------------------------------------------------------------------
701
+ */
702
+
703
+
704
+ EventHandler__default['default'].on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);
705
+ EventHandler__default['default'].on(window, EVENT_LOAD_DATA_API, () => {
706
+ const carousels = SelectorEngine__default['default'].find(SELECTOR_DATA_RIDE);
707
+
708
+ for (let i = 0, len = carousels.length; i < len; i++) {
709
+ Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));
710
+ }
711
+ });
712
+ /**
713
+ * ------------------------------------------------------------------------
714
+ * jQuery
715
+ * ------------------------------------------------------------------------
716
+ * add .Carousel to jQuery only if jQuery is present
717
+ */
718
+
719
+ defineJQueryPlugin(Carousel);
720
+
721
+ return Carousel;
722
+
723
+ })));
724
+ //# sourceMappingURL=carousel.js.map