@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
package/js/src/tab.js ADDED
@@ -0,0 +1,227 @@
1
+ /**
2
+ * --------------------------------------------------------------------------
3
+ * CoreUI (v4.0.2): tab.js
4
+ * Licensed under MIT (https://coreui.io/license)
5
+ *
6
+ * This component is a modified version of the Bootstrap's tab.js
7
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
8
+ * --------------------------------------------------------------------------
9
+ */
10
+
11
+ import {
12
+ defineJQueryPlugin,
13
+ getElementFromSelector,
14
+ isDisabled,
15
+ reflow
16
+ } from './util/index'
17
+ import EventHandler from './dom/event-handler'
18
+ import SelectorEngine from './dom/selector-engine'
19
+ import BaseComponent from './base-component'
20
+
21
+ /**
22
+ * ------------------------------------------------------------------------
23
+ * Constants
24
+ * ------------------------------------------------------------------------
25
+ */
26
+
27
+ const NAME = 'tab'
28
+ const DATA_KEY = 'coreui.tab'
29
+ const EVENT_KEY = `.${DATA_KEY}`
30
+ const DATA_API_KEY = '.data-api'
31
+
32
+ const EVENT_HIDE = `hide${EVENT_KEY}`
33
+ const EVENT_HIDDEN = `hidden${EVENT_KEY}`
34
+ const EVENT_SHOW = `show${EVENT_KEY}`
35
+ const EVENT_SHOWN = `shown${EVENT_KEY}`
36
+ const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`
37
+
38
+ const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu'
39
+ const CLASS_NAME_ACTIVE = 'active'
40
+ const CLASS_NAME_FADE = 'fade'
41
+ const CLASS_NAME_SHOW = 'show'
42
+
43
+ const SELECTOR_DROPDOWN = '.dropdown'
44
+ const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'
45
+ const SELECTOR_ACTIVE = '.active'
46
+ const SELECTOR_ACTIVE_UL = ':scope > li > .active'
47
+ const SELECTOR_DATA_TOGGLE = '[data-coreui-toggle="tab"], [data-coreui-toggle="pill"], [data-coreui-toggle="list"]'
48
+ const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'
49
+ const SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active'
50
+
51
+ /**
52
+ * ------------------------------------------------------------------------
53
+ * Class Definition
54
+ * ------------------------------------------------------------------------
55
+ */
56
+
57
+ class Tab extends BaseComponent {
58
+ // Getters
59
+
60
+ static get NAME() {
61
+ return NAME
62
+ }
63
+
64
+ // Public
65
+
66
+ show() {
67
+ if ((this._element.parentNode &&
68
+ this._element.parentNode.nodeType === Node.ELEMENT_NODE &&
69
+ this._element.classList.contains(CLASS_NAME_ACTIVE))) {
70
+ return
71
+ }
72
+
73
+ let previous
74
+ const target = getElementFromSelector(this._element)
75
+ const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP)
76
+
77
+ if (listElement) {
78
+ const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE
79
+ previous = SelectorEngine.find(itemSelector, listElement)
80
+ previous = previous[previous.length - 1]
81
+ }
82
+
83
+ const hideEvent = previous ?
84
+ EventHandler.trigger(previous, EVENT_HIDE, {
85
+ relatedTarget: this._element
86
+ }) :
87
+ null
88
+
89
+ const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {
90
+ relatedTarget: previous
91
+ })
92
+
93
+ if (showEvent.defaultPrevented || (hideEvent !== null && hideEvent.defaultPrevented)) {
94
+ return
95
+ }
96
+
97
+ this._activate(this._element, listElement)
98
+
99
+ const complete = () => {
100
+ EventHandler.trigger(previous, EVENT_HIDDEN, {
101
+ relatedTarget: this._element
102
+ })
103
+ EventHandler.trigger(this._element, EVENT_SHOWN, {
104
+ relatedTarget: previous
105
+ })
106
+ }
107
+
108
+ if (target) {
109
+ this._activate(target, target.parentNode, complete)
110
+ } else {
111
+ complete()
112
+ }
113
+ }
114
+
115
+ // Private
116
+
117
+ _activate(element, container, callback) {
118
+ const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ?
119
+ SelectorEngine.find(SELECTOR_ACTIVE_UL, container) :
120
+ SelectorEngine.children(container, SELECTOR_ACTIVE)
121
+
122
+ const active = activeElements[0]
123
+ const isTransitioning = callback && (active && active.classList.contains(CLASS_NAME_FADE))
124
+
125
+ const complete = () => this._transitionComplete(element, active, callback)
126
+
127
+ if (active && isTransitioning) {
128
+ active.classList.remove(CLASS_NAME_SHOW)
129
+ this._queueCallback(complete, element, true)
130
+ } else {
131
+ complete()
132
+ }
133
+ }
134
+
135
+ _transitionComplete(element, active, callback) {
136
+ if (active) {
137
+ active.classList.remove(CLASS_NAME_ACTIVE)
138
+
139
+ const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode)
140
+
141
+ if (dropdownChild) {
142
+ dropdownChild.classList.remove(CLASS_NAME_ACTIVE)
143
+ }
144
+
145
+ if (active.getAttribute('role') === 'tab') {
146
+ active.setAttribute('aria-selected', false)
147
+ }
148
+ }
149
+
150
+ element.classList.add(CLASS_NAME_ACTIVE)
151
+ if (element.getAttribute('role') === 'tab') {
152
+ element.setAttribute('aria-selected', true)
153
+ }
154
+
155
+ reflow(element)
156
+
157
+ if (element.classList.contains(CLASS_NAME_FADE)) {
158
+ element.classList.add(CLASS_NAME_SHOW)
159
+ }
160
+
161
+ let parent = element.parentNode
162
+ if (parent && parent.nodeName === 'LI') {
163
+ parent = parent.parentNode
164
+ }
165
+
166
+ if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {
167
+ const dropdownElement = element.closest(SELECTOR_DROPDOWN)
168
+
169
+ if (dropdownElement) {
170
+ SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement)
171
+ .forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE))
172
+ }
173
+
174
+ element.setAttribute('aria-expanded', true)
175
+ }
176
+
177
+ if (callback) {
178
+ callback()
179
+ }
180
+ }
181
+
182
+ // Static
183
+
184
+ static jQueryInterface(config) {
185
+ return this.each(function () {
186
+ const data = Tab.getOrCreateInstance(this)
187
+
188
+ if (typeof config === 'string') {
189
+ if (typeof data[config] === 'undefined') {
190
+ throw new TypeError(`No method named "${config}"`)
191
+ }
192
+
193
+ data[config]()
194
+ }
195
+ })
196
+ }
197
+ }
198
+
199
+ /**
200
+ * ------------------------------------------------------------------------
201
+ * Data Api implementation
202
+ * ------------------------------------------------------------------------
203
+ */
204
+
205
+ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
206
+ if (['A', 'AREA'].includes(this.tagName)) {
207
+ event.preventDefault()
208
+ }
209
+
210
+ if (isDisabled(this)) {
211
+ return
212
+ }
213
+
214
+ const data = Tab.getOrCreateInstance(this)
215
+ data.show()
216
+ })
217
+
218
+ /**
219
+ * ------------------------------------------------------------------------
220
+ * jQuery
221
+ * ------------------------------------------------------------------------
222
+ * add .Tab to jQuery only if jQuery is present
223
+ */
224
+
225
+ defineJQueryPlugin(Tab)
226
+
227
+ export default Tab
@@ -0,0 +1,245 @@
1
+ /**
2
+ * --------------------------------------------------------------------------
3
+ * CoreUI (v4.0.2): toast.js
4
+ * Licensed under MIT (https://coreui.io/license)
5
+ *
6
+ * This component is a modified version of the Bootstrap's toast.js
7
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
8
+ * --------------------------------------------------------------------------
9
+ */
10
+
11
+ import {
12
+ defineJQueryPlugin,
13
+ reflow,
14
+ typeCheckConfig
15
+ } from './util/index'
16
+ import EventHandler from './dom/event-handler'
17
+ import Manipulator from './dom/manipulator'
18
+ import BaseComponent from './base-component'
19
+
20
+ /**
21
+ * ------------------------------------------------------------------------
22
+ * Constants
23
+ * ------------------------------------------------------------------------
24
+ */
25
+
26
+ const NAME = 'toast'
27
+ const DATA_KEY = 'coreui.toast'
28
+ const EVENT_KEY = `.${DATA_KEY}`
29
+
30
+ const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`
31
+ const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`
32
+ const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`
33
+ const EVENT_FOCUSIN = `focusin${EVENT_KEY}`
34
+ const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`
35
+ const EVENT_HIDE = `hide${EVENT_KEY}`
36
+ const EVENT_HIDDEN = `hidden${EVENT_KEY}`
37
+ const EVENT_SHOW = `show${EVENT_KEY}`
38
+ const EVENT_SHOWN = `shown${EVENT_KEY}`
39
+
40
+ const CLASS_NAME_FADE = 'fade'
41
+ const CLASS_NAME_HIDE = 'hide'
42
+ const CLASS_NAME_SHOW = 'show'
43
+ const CLASS_NAME_SHOWING = 'showing'
44
+
45
+ const DefaultType = {
46
+ animation: 'boolean',
47
+ autohide: 'boolean',
48
+ delay: 'number'
49
+ }
50
+
51
+ const Default = {
52
+ animation: true,
53
+ autohide: true,
54
+ delay: 5000
55
+ }
56
+
57
+ const SELECTOR_DATA_DISMISS = '[data-coreui-dismiss="toast"]'
58
+
59
+ /**
60
+ * ------------------------------------------------------------------------
61
+ * Class Definition
62
+ * ------------------------------------------------------------------------
63
+ */
64
+
65
+ class Toast extends BaseComponent {
66
+ constructor(element, config) {
67
+ super(element)
68
+
69
+ this._config = this._getConfig(config)
70
+ this._timeout = null
71
+ this._hasMouseInteraction = false
72
+ this._hasKeyboardInteraction = false
73
+ this._setListeners()
74
+ }
75
+
76
+ // Getters
77
+
78
+ static get DefaultType() {
79
+ return DefaultType
80
+ }
81
+
82
+ static get Default() {
83
+ return Default
84
+ }
85
+
86
+ static get NAME() {
87
+ return NAME
88
+ }
89
+
90
+ // Public
91
+
92
+ show() {
93
+ const showEvent = EventHandler.trigger(this._element, EVENT_SHOW)
94
+
95
+ if (showEvent.defaultPrevented) {
96
+ return
97
+ }
98
+
99
+ this._clearTimeout()
100
+
101
+ if (this._config.animation) {
102
+ this._element.classList.add(CLASS_NAME_FADE)
103
+ }
104
+
105
+ const complete = () => {
106
+ this._element.classList.remove(CLASS_NAME_SHOWING)
107
+ this._element.classList.add(CLASS_NAME_SHOW)
108
+
109
+ EventHandler.trigger(this._element, EVENT_SHOWN)
110
+
111
+ this._maybeScheduleHide()
112
+ }
113
+
114
+ this._element.classList.remove(CLASS_NAME_HIDE)
115
+ reflow(this._element)
116
+ this._element.classList.add(CLASS_NAME_SHOWING)
117
+
118
+ this._queueCallback(complete, this._element, this._config.animation)
119
+ }
120
+
121
+ hide() {
122
+ if (!this._element.classList.contains(CLASS_NAME_SHOW)) {
123
+ return
124
+ }
125
+
126
+ const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)
127
+
128
+ if (hideEvent.defaultPrevented) {
129
+ return
130
+ }
131
+
132
+ const complete = () => {
133
+ this._element.classList.add(CLASS_NAME_HIDE)
134
+ EventHandler.trigger(this._element, EVENT_HIDDEN)
135
+ }
136
+
137
+ this._element.classList.remove(CLASS_NAME_SHOW)
138
+ this._queueCallback(complete, this._element, this._config.animation)
139
+ }
140
+
141
+ dispose() {
142
+ this._clearTimeout()
143
+
144
+ if (this._element.classList.contains(CLASS_NAME_SHOW)) {
145
+ this._element.classList.remove(CLASS_NAME_SHOW)
146
+ }
147
+
148
+ super.dispose()
149
+ }
150
+
151
+ // Private
152
+
153
+ _getConfig(config) {
154
+ config = {
155
+ ...Default,
156
+ ...Manipulator.getDataAttributes(this._element),
157
+ ...(typeof config === 'object' && config ? config : {})
158
+ }
159
+
160
+ typeCheckConfig(NAME, config, this.constructor.DefaultType)
161
+
162
+ return config
163
+ }
164
+
165
+ _maybeScheduleHide() {
166
+ if (!this._config.autohide) {
167
+ return
168
+ }
169
+
170
+ if (this._hasMouseInteraction || this._hasKeyboardInteraction) {
171
+ return
172
+ }
173
+
174
+ this._timeout = setTimeout(() => {
175
+ this.hide()
176
+ }, this._config.delay)
177
+ }
178
+
179
+ _onInteraction(event, isInteracting) {
180
+ switch (event.type) {
181
+ case 'mouseover':
182
+ case 'mouseout':
183
+ this._hasMouseInteraction = isInteracting
184
+ break
185
+ case 'focusin':
186
+ case 'focusout':
187
+ this._hasKeyboardInteraction = isInteracting
188
+ break
189
+ default:
190
+ break
191
+ }
192
+
193
+ if (isInteracting) {
194
+ this._clearTimeout()
195
+ return
196
+ }
197
+
198
+ const nextElement = event.relatedTarget
199
+ if (this._element === nextElement || this._element.contains(nextElement)) {
200
+ return
201
+ }
202
+
203
+ this._maybeScheduleHide()
204
+ }
205
+
206
+ _setListeners() {
207
+ EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide())
208
+ EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true))
209
+ EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false))
210
+ EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true))
211
+ EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false))
212
+ }
213
+
214
+ _clearTimeout() {
215
+ clearTimeout(this._timeout)
216
+ this._timeout = null
217
+ }
218
+
219
+ // Static
220
+
221
+ static jQueryInterface(config) {
222
+ return this.each(function () {
223
+ const data = Toast.getOrCreateInstance(this, config)
224
+
225
+ if (typeof config === 'string') {
226
+ if (typeof data[config] === 'undefined') {
227
+ throw new TypeError(`No method named "${config}"`)
228
+ }
229
+
230
+ data[config](this)
231
+ }
232
+ })
233
+ }
234
+ }
235
+
236
+ /**
237
+ * ------------------------------------------------------------------------
238
+ * jQuery
239
+ * ------------------------------------------------------------------------
240
+ * add .Toast to jQuery only if jQuery is present
241
+ */
242
+
243
+ defineJQueryPlugin(Toast)
244
+
245
+ export default Toast