@coreui/coreui 4.1.4 → 4.2.0

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 (208) hide show
  1. package/LICENSE +2 -2
  2. package/README.md +64 -11
  3. package/dist/css/bootstrap-reboot.css +488 -0
  4. package/dist/css/bootstrap-reboot.css.map +1 -0
  5. package/dist/css/bootstrap-reboot.min.css +8 -0
  6. package/dist/css/bootstrap-reboot.min.css.map +1 -0
  7. package/dist/css/coreui-grid.css +23 -949
  8. package/dist/css/coreui-grid.css.map +1 -1
  9. package/dist/css/coreui-grid.min.css +3 -3
  10. package/dist/css/coreui-grid.min.css.map +1 -1
  11. package/dist/css/coreui-grid.rtl.css +25 -951
  12. package/dist/css/coreui-grid.rtl.css.map +1 -1
  13. package/dist/css/coreui-grid.rtl.min.css +5 -5
  14. package/dist/css/coreui-grid.rtl.min.css.map +1 -1
  15. package/dist/css/coreui-reboot.css +35 -42
  16. package/dist/css/coreui-reboot.css.map +1 -1
  17. package/dist/css/coreui-reboot.min.css +3 -3
  18. package/dist/css/coreui-reboot.min.css.map +1 -1
  19. package/dist/css/coreui-reboot.rtl.css +36 -44
  20. package/dist/css/coreui-reboot.rtl.css.map +1 -1
  21. package/dist/css/coreui-reboot.rtl.min.css +5 -5
  22. package/dist/css/coreui-reboot.rtl.min.css.map +1 -1
  23. package/dist/css/coreui-utilities.css +279 -951
  24. package/dist/css/coreui-utilities.css.map +1 -1
  25. package/dist/css/coreui-utilities.min.css +3 -3
  26. package/dist/css/coreui-utilities.min.css.map +1 -1
  27. package/dist/css/coreui-utilities.rtl.css +275 -953
  28. package/dist/css/coreui-utilities.rtl.css.map +1 -1
  29. package/dist/css/coreui-utilities.rtl.min.css +5 -5
  30. package/dist/css/coreui-utilities.rtl.min.css.map +1 -1
  31. package/dist/css/coreui.css +2203 -2295
  32. package/dist/css/coreui.css.map +1 -1
  33. package/dist/css/coreui.min.css +3 -3
  34. package/dist/css/coreui.min.css.map +1 -1
  35. package/dist/css/coreui.rtl.css +2190 -2289
  36. package/dist/css/coreui.rtl.css.map +1 -1
  37. package/dist/css/coreui.rtl.min.css +5 -5
  38. package/dist/css/coreui.rtl.min.css.map +1 -1
  39. package/dist/js/coreui.bundle.js +2101 -1908
  40. package/dist/js/coreui.bundle.js.map +1 -1
  41. package/dist/js/coreui.bundle.min.js +2 -2
  42. package/dist/js/coreui.bundle.min.js.map +1 -1
  43. package/dist/js/coreui.esm.js +2098 -1909
  44. package/dist/js/coreui.esm.js.map +1 -1
  45. package/dist/js/coreui.esm.min.js +2 -2
  46. package/dist/js/coreui.esm.min.js.map +1 -1
  47. package/dist/js/coreui.js +2099 -1910
  48. package/dist/js/coreui.js.map +1 -1
  49. package/dist/js/coreui.min.js +2 -2
  50. package/dist/js/coreui.min.js.map +1 -1
  51. package/js/dist/alert.js +10 -148
  52. package/js/dist/alert.js.map +1 -1
  53. package/js/dist/base-component.js +36 -122
  54. package/js/dist/base-component.js.map +1 -1
  55. package/js/dist/button.js +9 -76
  56. package/js/dist/button.js.map +1 -1
  57. package/js/dist/carousel.js +212 -507
  58. package/js/dist/carousel.js.map +1 -1
  59. package/js/dist/collapse.js +64 -251
  60. package/js/dist/collapse.js.map +1 -1
  61. package/js/dist/dom/data.js +2 -4
  62. package/js/dist/dom/data.js.map +1 -1
  63. package/js/dist/dom/event-handler.js +82 -133
  64. package/js/dist/dom/event-handler.js.map +1 -1
  65. package/js/dist/dom/manipulator.js +22 -26
  66. package/js/dist/dom/manipulator.js.map +1 -1
  67. package/js/dist/dom/selector-engine.js +16 -81
  68. package/js/dist/dom/selector-engine.js.map +1 -1
  69. package/js/dist/dropdown.js +99 -338
  70. package/js/dist/dropdown.js.map +1 -1
  71. package/js/dist/modal.js +106 -774
  72. package/js/dist/modal.js.map +1 -1
  73. package/js/dist/navigation.js +309 -0
  74. package/js/dist/navigation.js.map +1 -0
  75. package/js/dist/offcanvas.js +88 -680
  76. package/js/dist/offcanvas.js.map +1 -1
  77. package/js/dist/popover.js +35 -120
  78. package/js/dist/popover.js.map +1 -1
  79. package/js/dist/scrollspy.js +178 -264
  80. package/js/dist/scrollspy.js.map +1 -1
  81. package/js/dist/sidebar.js +347 -0
  82. package/js/dist/sidebar.js.map +1 -0
  83. package/js/dist/tab.js +226 -216
  84. package/js/dist/tab.js.map +1 -1
  85. package/js/dist/toast.js +27 -216
  86. package/js/dist/toast.js.map +1 -1
  87. package/js/dist/tooltip.js +271 -618
  88. package/js/dist/tooltip.js.map +1 -1
  89. package/js/dist/util/backdrop.js +166 -0
  90. package/js/dist/util/backdrop.js.map +1 -0
  91. package/js/dist/util/component-functions.js +47 -0
  92. package/js/dist/util/component-functions.js.map +1 -0
  93. package/js/dist/util/config.js +80 -0
  94. package/js/dist/util/config.js.map +1 -0
  95. package/js/dist/util/focustrap.js +130 -0
  96. package/js/dist/util/focustrap.js.map +1 -0
  97. package/js/dist/util/index.js +354 -0
  98. package/js/dist/util/index.js.map +1 -0
  99. package/js/dist/util/sanitizer.js +126 -0
  100. package/js/dist/util/sanitizer.js.map +1 -0
  101. package/js/dist/util/scrollbar.js +139 -0
  102. package/js/dist/util/scrollbar.js.map +1 -0
  103. package/js/dist/util/swipe.js +156 -0
  104. package/js/dist/util/swipe.js.map +1 -0
  105. package/js/dist/util/template-factory.js +178 -0
  106. package/js/dist/util/template-factory.js.map +1 -0
  107. package/js/src/alert.js +3 -15
  108. package/js/src/base-component.js +28 -18
  109. package/js/src/button.js +3 -15
  110. package/js/src/carousel.js +203 -320
  111. package/js/src/collapse.js +61 -94
  112. package/js/src/dom/data.js +1 -3
  113. package/js/src/dom/event-handler.js +74 -107
  114. package/js/src/dom/manipulator.js +22 -31
  115. package/js/src/dom/selector-engine.js +10 -19
  116. package/js/src/dropdown.js +84 -138
  117. package/js/src/modal.js +94 -158
  118. package/js/src/navigation.js +12 -13
  119. package/js/src/offcanvas.js +71 -60
  120. package/js/src/popover.js +31 -62
  121. package/js/src/scrollspy.js +166 -171
  122. package/js/src/sidebar.js +5 -8
  123. package/js/src/tab.js +201 -110
  124. package/js/src/toast.js +19 -41
  125. package/js/src/tooltip.js +264 -374
  126. package/js/src/util/backdrop.js +55 -36
  127. package/js/src/util/component-functions.js +1 -1
  128. package/js/src/util/config.js +66 -0
  129. package/js/src/util/focustrap.js +38 -28
  130. package/js/src/util/index.js +41 -57
  131. package/js/src/util/sanitizer.js +9 -17
  132. package/js/src/util/scrollbar.js +47 -30
  133. package/js/src/util/swipe.js +146 -0
  134. package/js/src/util/template-factory.js +160 -0
  135. package/package.json +40 -40
  136. package/scss/_accordion.scss +53 -25
  137. package/scss/_alert.scss +29 -9
  138. package/scss/_badge.scss +15 -6
  139. package/scss/_breadcrumb.scss +23 -11
  140. package/scss/_button-group.scss +3 -0
  141. package/scss/_buttons.scss +71 -50
  142. package/scss/_callout.scss +18 -6
  143. package/scss/_card.scss +55 -37
  144. package/scss/_carousel.scss +6 -6
  145. package/scss/_close.scss +4 -4
  146. package/scss/_containers.scss +1 -1
  147. package/scss/_dropdown.scss +86 -64
  148. package/scss/_footer.scss +15 -5
  149. package/scss/_functions.scss +11 -24
  150. package/scss/_grid.scss +3 -3
  151. package/scss/_header.scss +59 -34
  152. package/scss/_helpers.scss +1 -0
  153. package/scss/_images.scss +3 -3
  154. package/scss/_list-group.scss +47 -29
  155. package/scss/_maps.scss +54 -0
  156. package/scss/_modal.scss +70 -43
  157. package/scss/_nav.scss +53 -20
  158. package/scss/_navbar.scss +84 -94
  159. package/scss/_offcanvas.scss +120 -60
  160. package/scss/_pagination.scss +66 -21
  161. package/scss/_popover.scss +90 -52
  162. package/scss/_progress.scss +20 -9
  163. package/scss/_reboot.scss +31 -58
  164. package/scss/_root.scss +41 -21
  165. package/scss/_spinners.scss +37 -21
  166. package/scss/_subheader.scss +9 -9
  167. package/scss/_tables.scss +34 -36
  168. package/scss/_toasts.scss +35 -19
  169. package/scss/_tooltip.scss +61 -56
  170. package/scss/_utilities.scss +42 -27
  171. package/scss/_variables.scss +169 -148
  172. package/scss/bootstrap-reboot.scss +14 -0
  173. package/scss/coreui-grid.rtl.scss +2 -2
  174. package/scss/coreui-grid.scss +3 -2
  175. package/scss/coreui-reboot.rtl.scss +2 -2
  176. package/scss/coreui-reboot.scss +2 -2
  177. package/scss/coreui-utilities.rtl.scss +2 -2
  178. package/scss/coreui-utilities.scss +3 -2
  179. package/scss/coreui.rtl.scss +2 -2
  180. package/scss/coreui.scss +3 -2
  181. package/scss/forms/_floating-labels.scss +14 -3
  182. package/scss/forms/_form-check.scss +42 -19
  183. package/scss/forms/_form-control.scss +25 -50
  184. package/scss/forms/_form-range.scss +8 -8
  185. package/scss/forms/_form-select.scss +8 -8
  186. package/scss/forms/_form-text.scss +1 -1
  187. package/scss/forms/_input-group.scss +3 -3
  188. package/scss/forms/_labels.scss +2 -2
  189. package/scss/helpers/_color-bg.scss +10 -0
  190. package/scss/helpers/_colored-links.scss +2 -2
  191. package/scss/helpers/_position.scss +7 -1
  192. package/scss/helpers/_ratio.scss +2 -2
  193. package/scss/helpers/_vr.scss +1 -0
  194. package/scss/mixins/_alert.scss +10 -10
  195. package/scss/mixins/_breakpoints.scss +8 -8
  196. package/scss/mixins/_buttons.scss +45 -47
  197. package/scss/mixins/_container.scss +4 -2
  198. package/scss/mixins/_css-vars.scss +47 -47
  199. package/scss/mixins/_forms.scss +10 -2
  200. package/scss/mixins/_gradients.scss +1 -1
  201. package/scss/mixins/_grid.scss +11 -11
  202. package/scss/mixins/_list-group.scss +7 -9
  203. package/scss/mixins/_pagination.scss +4 -25
  204. package/scss/mixins/_table-variants.scss +20 -12
  205. package/scss/mixins/_utilities.scss +8 -3
  206. package/scss/sidebar/_sidebar-narrow.scss +10 -10
  207. package/scss/sidebar/_sidebar-nav.scss +33 -32
  208. package/scss/sidebar/_sidebar.scss +110 -56
package/js/src/modal.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * --------------------------------------------------------------------------
3
- * CoreUI (v4.1.4): modal.js
3
+ * CoreUI (v4.2.0): modal.js
4
4
  * Licensed under MIT (https://coreui.io/license)
5
5
  *
6
6
  * This component is a modified version of the Bootstrap's modal.js
@@ -8,16 +8,8 @@
8
8
  * --------------------------------------------------------------------------
9
9
  */
10
10
 
11
- import {
12
- defineJQueryPlugin,
13
- getElementFromSelector,
14
- isRTL,
15
- isVisible,
16
- reflow,
17
- typeCheckConfig
18
- } from './util/index'
11
+ import { defineJQueryPlugin, getElementFromSelector, isRTL, isVisible, reflow } from './util/index'
19
12
  import EventHandler from './dom/event-handler'
20
- import Manipulator from './dom/manipulator'
21
13
  import SelectorEngine from './dom/selector-engine'
22
14
  import ScrollBarHelper from './util/scrollbar'
23
15
  import BaseComponent from './base-component'
@@ -26,9 +18,7 @@ import FocusTrap from './util/focustrap'
26
18
  import { enableDismissTrigger } from './util/component-functions'
27
19
 
28
20
  /**
29
- * ------------------------------------------------------------------------
30
21
  * Constants
31
- * ------------------------------------------------------------------------
32
22
  */
33
23
 
34
24
  const NAME = 'modal'
@@ -37,28 +27,14 @@ const EVENT_KEY = `.${DATA_KEY}`
37
27
  const DATA_API_KEY = '.data-api'
38
28
  const ESCAPE_KEY = 'Escape'
39
29
 
40
- const Default = {
41
- backdrop: true,
42
- keyboard: true,
43
- focus: true
44
- }
45
-
46
- const DefaultType = {
47
- backdrop: '(boolean|string)',
48
- keyboard: 'boolean',
49
- focus: 'boolean'
50
- }
51
-
52
30
  const EVENT_HIDE = `hide${EVENT_KEY}`
53
31
  const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`
54
32
  const EVENT_HIDDEN = `hidden${EVENT_KEY}`
55
33
  const EVENT_SHOW = `show${EVENT_KEY}`
56
34
  const EVENT_SHOWN = `shown${EVENT_KEY}`
57
35
  const EVENT_RESIZE = `resize${EVENT_KEY}`
58
- const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`
59
- const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`
60
- const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY}`
61
36
  const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`
37
+ const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`
62
38
  const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`
63
39
 
64
40
  const CLASS_NAME_OPEN = 'modal-open'
@@ -71,38 +47,50 @@ const SELECTOR_DIALOG = '.modal-dialog'
71
47
  const SELECTOR_MODAL_BODY = '.modal-body'
72
48
  const SELECTOR_DATA_TOGGLE = '[data-coreui-toggle="modal"]'
73
49
 
50
+ const Default = {
51
+ backdrop: true,
52
+ focus: true,
53
+ keyboard: true
54
+ }
55
+
56
+ const DefaultType = {
57
+ backdrop: '(boolean|string)',
58
+ focus: 'boolean',
59
+ keyboard: 'boolean'
60
+ }
61
+
74
62
  /**
75
- * ------------------------------------------------------------------------
76
- * Class Definition
77
- * ------------------------------------------------------------------------
63
+ * Class definition
78
64
  */
79
65
 
80
66
  class Modal extends BaseComponent {
81
67
  constructor(element, config) {
82
- super(element)
68
+ super(element, config)
83
69
 
84
- this._config = this._getConfig(config)
85
70
  this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element)
86
71
  this._backdrop = this._initializeBackDrop()
87
72
  this._focustrap = this._initializeFocusTrap()
88
73
  this._isShown = false
89
- this._ignoreBackdropClick = false
90
74
  this._isTransitioning = false
91
75
  this._scrollBar = new ScrollBarHelper()
76
+
77
+ this._addEventListeners()
92
78
  }
93
79
 
94
80
  // Getters
95
-
96
81
  static get Default() {
97
82
  return Default
98
83
  }
99
84
 
85
+ static get DefaultType() {
86
+ return DefaultType
87
+ }
88
+
100
89
  static get NAME() {
101
90
  return NAME
102
91
  }
103
92
 
104
93
  // Public
105
-
106
94
  toggle(relatedTarget) {
107
95
  return this._isShown ? this.hide() : this.show(relatedTarget)
108
96
  }
@@ -121,10 +109,7 @@ class Modal extends BaseComponent {
121
109
  }
122
110
 
123
111
  this._isShown = true
124
-
125
- if (this._isAnimated()) {
126
- this._isTransitioning = true
127
- }
112
+ this._isTransitioning = true
128
113
 
129
114
  this._scrollBar.hide()
130
115
 
@@ -132,18 +117,7 @@ class Modal extends BaseComponent {
132
117
 
133
118
  this._adjustDialog()
134
119
 
135
- this._setEscapeEvent()
136
- this._setResizeEvent()
137
-
138
- EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {
139
- EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {
140
- if (event.target === this._element) {
141
- this._ignoreBackdropClick = true
142
- }
143
- })
144
- })
145
-
146
- this._showBackdrop(() => this._showElement(relatedTarget))
120
+ this._backdrop.show(() => this._showElement(relatedTarget))
147
121
  }
148
122
 
149
123
  hide() {
@@ -158,28 +132,18 @@ class Modal extends BaseComponent {
158
132
  }
159
133
 
160
134
  this._isShown = false
161
- const isAnimated = this._isAnimated()
162
-
163
- if (isAnimated) {
164
- this._isTransitioning = true
165
- }
166
-
167
- this._setEscapeEvent()
168
- this._setResizeEvent()
169
-
135
+ this._isTransitioning = true
170
136
  this._focustrap.deactivate()
171
137
 
172
138
  this._element.classList.remove(CLASS_NAME_SHOW)
173
139
 
174
- EventHandler.off(this._element, EVENT_CLICK_DISMISS)
175
- EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS)
176
-
177
- this._queueCallback(() => this._hideModal(), this._element, isAnimated)
140
+ this._queueCallback(() => this._hideModal(), this._element, this._isAnimated())
178
141
  }
179
142
 
180
143
  dispose() {
181
- [window, this._dialog]
182
- .forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY))
144
+ for (const htmlElement of [window, this._dialog]) {
145
+ EventHandler.off(htmlElement, EVENT_KEY)
146
+ }
183
147
 
184
148
  this._backdrop.dispose()
185
149
  this._focustrap.deactivate()
@@ -191,10 +155,9 @@ class Modal extends BaseComponent {
191
155
  }
192
156
 
193
157
  // Private
194
-
195
158
  _initializeBackDrop() {
196
159
  return new Backdrop({
197
- isVisible: Boolean(this._config.backdrop), // 'static' option will be translated to true, and booleans will keep their value
160
+ isVisible: Boolean(this._config.backdrop), // 'static' option will be translated to true, and booleans will keep their value,
198
161
  isAnimated: this._isAnimated()
199
162
  })
200
163
  }
@@ -205,22 +168,9 @@ class Modal extends BaseComponent {
205
168
  })
206
169
  }
207
170
 
208
- _getConfig(config) {
209
- config = {
210
- ...Default,
211
- ...Manipulator.getDataAttributes(this._element),
212
- ...(typeof config === 'object' ? config : {})
213
- }
214
- typeCheckConfig(NAME, config, DefaultType)
215
- return config
216
- }
217
-
218
171
  _showElement(relatedTarget) {
219
- const isAnimated = this._isAnimated()
220
- const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog)
221
-
222
- if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
223
- // Don't move modal's DOM position
172
+ // try to append dynamic modal
173
+ if (!document.body.contains(this._element)) {
224
174
  document.body.append(this._element)
225
175
  }
226
176
 
@@ -230,13 +180,12 @@ class Modal extends BaseComponent {
230
180
  this._element.setAttribute('role', 'dialog')
231
181
  this._element.scrollTop = 0
232
182
 
183
+ const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog)
233
184
  if (modalBody) {
234
185
  modalBody.scrollTop = 0
235
186
  }
236
187
 
237
- if (isAnimated) {
238
- reflow(this._element)
239
- }
188
+ reflow(this._element)
240
189
 
241
190
  this._element.classList.add(CLASS_NAME_SHOW)
242
191
 
@@ -251,30 +200,44 @@ class Modal extends BaseComponent {
251
200
  })
252
201
  }
253
202
 
254
- this._queueCallback(transitionComplete, this._dialog, isAnimated)
203
+ this._queueCallback(transitionComplete, this._dialog, this._isAnimated())
255
204
  }
256
205
 
257
- _setEscapeEvent() {
258
- if (this._isShown) {
259
- EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {
260
- if (this._config.keyboard && event.key === ESCAPE_KEY) {
261
- event.preventDefault()
262
- this.hide()
263
- } else if (!this._config.keyboard && event.key === ESCAPE_KEY) {
264
- this._triggerBackdropTransition()
265
- }
266
- })
267
- } else {
268
- EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS)
269
- }
270
- }
206
+ _addEventListeners() {
207
+ EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {
208
+ if (event.key !== ESCAPE_KEY) {
209
+ return
210
+ }
271
211
 
272
- _setResizeEvent() {
273
- if (this._isShown) {
274
- EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog())
275
- } else {
276
- EventHandler.off(window, EVENT_RESIZE)
277
- }
212
+ if (this._config.keyboard) {
213
+ event.preventDefault()
214
+ this.hide()
215
+ return
216
+ }
217
+
218
+ this._triggerBackdropTransition()
219
+ })
220
+
221
+ EventHandler.on(window, EVENT_RESIZE, () => {
222
+ if (this._isShown && !this._isTransitioning) {
223
+ this._adjustDialog()
224
+ }
225
+ })
226
+
227
+ EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {
228
+ if (event.target !== event.currentTarget) { // click is inside modal-dialog
229
+ return
230
+ }
231
+
232
+ if (this._config.backdrop === 'static') {
233
+ this._triggerBackdropTransition()
234
+ return
235
+ }
236
+
237
+ if (this._config.backdrop) {
238
+ this.hide()
239
+ }
240
+ })
278
241
  }
279
242
 
280
243
  _hideModal() {
@@ -283,6 +246,7 @@ class Modal extends BaseComponent {
283
246
  this._element.removeAttribute('aria-modal')
284
247
  this._element.removeAttribute('role')
285
248
  this._isTransitioning = false
249
+
286
250
  this._backdrop.hide(() => {
287
251
  document.body.classList.remove(CLASS_NAME_OPEN)
288
252
  this._resetAdjustments()
@@ -291,27 +255,6 @@ class Modal extends BaseComponent {
291
255
  })
292
256
  }
293
257
 
294
- _showBackdrop(callback) {
295
- EventHandler.on(this._element, EVENT_CLICK_DISMISS, event => {
296
- if (this._ignoreBackdropClick) {
297
- this._ignoreBackdropClick = false
298
- return
299
- }
300
-
301
- if (event.target !== event.currentTarget) {
302
- return
303
- }
304
-
305
- if (this._config.backdrop === true) {
306
- this.hide()
307
- } else if (this._config.backdrop === 'static') {
308
- this._triggerBackdropTransition()
309
- }
310
- })
311
-
312
- this._backdrop.show(callback)
313
- }
314
-
315
258
  _isAnimated() {
316
259
  return this._element.classList.contains(CLASS_NAME_FADE)
317
260
  }
@@ -322,46 +265,45 @@ class Modal extends BaseComponent {
322
265
  return
323
266
  }
324
267
 
325
- const { classList, scrollHeight, style } = this._element
326
- const isModalOverflowing = scrollHeight > document.documentElement.clientHeight
327
-
268
+ const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight
269
+ const initialOverflowY = this._element.style.overflowY
328
270
  // return if the following background transition hasn't yet completed
329
- if ((!isModalOverflowing && style.overflowY === 'hidden') || classList.contains(CLASS_NAME_STATIC)) {
271
+ if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {
330
272
  return
331
273
  }
332
274
 
333
275
  if (!isModalOverflowing) {
334
- style.overflowY = 'hidden'
276
+ this._element.style.overflowY = 'hidden'
335
277
  }
336
278
 
337
- classList.add(CLASS_NAME_STATIC)
279
+ this._element.classList.add(CLASS_NAME_STATIC)
338
280
  this._queueCallback(() => {
339
- classList.remove(CLASS_NAME_STATIC)
340
- if (!isModalOverflowing) {
341
- this._queueCallback(() => {
342
- style.overflowY = ''
343
- }, this._dialog)
344
- }
281
+ this._element.classList.remove(CLASS_NAME_STATIC)
282
+ this._queueCallback(() => {
283
+ this._element.style.overflowY = initialOverflowY
284
+ }, this._dialog)
345
285
  }, this._dialog)
346
286
 
347
287
  this._element.focus()
348
288
  }
349
289
 
350
- // ----------------------------------------------------------------------
351
- // the following methods are used to handle overflowing modals
352
- // ----------------------------------------------------------------------
290
+ /**
291
+ * The following methods are used to handle overflowing modals
292
+ */
353
293
 
354
294
  _adjustDialog() {
355
295
  const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight
356
296
  const scrollbarWidth = this._scrollBar.getWidth()
357
297
  const isBodyOverflowing = scrollbarWidth > 0
358
298
 
359
- if ((!isBodyOverflowing && isModalOverflowing && !isRTL()) || (isBodyOverflowing && !isModalOverflowing && isRTL())) {
360
- this._element.style.paddingLeft = `${scrollbarWidth}px`
299
+ if (isBodyOverflowing && !isModalOverflowing) {
300
+ const property = isRTL() ? 'paddingLeft' : 'paddingRight'
301
+ this._element.style[property] = `${scrollbarWidth}px`
361
302
  }
362
303
 
363
- if ((isBodyOverflowing && !isModalOverflowing && !isRTL()) || (!isBodyOverflowing && isModalOverflowing && isRTL())) {
364
- this._element.style.paddingRight = `${scrollbarWidth}px`
304
+ if (!isBodyOverflowing && isModalOverflowing) {
305
+ const property = isRTL() ? 'paddingRight' : 'paddingLeft'
306
+ this._element.style[property] = `${scrollbarWidth}px`
365
307
  }
366
308
  }
367
309
 
@@ -371,7 +313,6 @@ class Modal extends BaseComponent {
371
313
  }
372
314
 
373
315
  // Static
374
-
375
316
  static jQueryInterface(config, relatedTarget) {
376
317
  return this.each(function () {
377
318
  const data = Modal.getOrCreateInstance(this, config)
@@ -390,9 +331,7 @@ class Modal extends BaseComponent {
390
331
  }
391
332
 
392
333
  /**
393
- * ------------------------------------------------------------------------
394
- * Data Api implementation
395
- * ------------------------------------------------------------------------
334
+ * Data API implementation
396
335
  */
397
336
 
398
337
  EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
@@ -415,10 +354,10 @@ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (
415
354
  })
416
355
  })
417
356
 
418
- // avoid conflict when clicking moddal toggler while another one is open
419
- const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)
420
- if (allReadyOpen) {
421
- Modal.getInstance(allReadyOpen).hide()
357
+ // avoid conflict when clicking modal toggler while another one is open
358
+ const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)
359
+ if (alreadyOpen) {
360
+ Modal.getInstance(alreadyOpen).hide()
422
361
  }
423
362
 
424
363
  const data = Modal.getOrCreateInstance(target)
@@ -429,10 +368,7 @@ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (
429
368
  enableDismissTrigger(Modal)
430
369
 
431
370
  /**
432
- * ------------------------------------------------------------------------
433
371
  * jQuery
434
- * ------------------------------------------------------------------------
435
- * add .Modal to jQuery only if jQuery is present
436
372
  */
437
373
 
438
374
  defineJQueryPlugin(Modal)
@@ -1,14 +1,11 @@
1
1
  /**
2
2
  * --------------------------------------------------------------------------
3
- * CoreUI (v4.1.4): navigation.js
3
+ * CoreUI (v4.2.0): navigation.js
4
4
  * Licensed under MIT (https://coreui.io/license)
5
5
  * --------------------------------------------------------------------------
6
6
  */
7
7
 
8
- import {
9
- defineJQueryPlugin,
10
- typeCheckConfig
11
- } from './util/index'
8
+ import { defineJQueryPlugin } from './util/index'
12
9
  import Data from './dom/data'
13
10
  import EventHandler from './dom/event-handler'
14
11
  import Manipulator from './dom/manipulator'
@@ -92,14 +89,14 @@ class Navigation extends BaseComponent {
92
89
  ...Manipulator.getDataAttributes(this._element),
93
90
  ...(typeof config === 'object' ? config : {})
94
91
  }
95
- typeCheckConfig(NAME, config, DefaultType)
92
+
96
93
  return config
97
94
  }
98
95
 
99
96
  _setActiveLink() {
100
- Array.from(this._element.querySelectorAll(SELECTOR_NAV_LINK)).forEach(element => {
97
+ for (const element of Array.from(this._element.querySelectorAll(SELECTOR_NAV_LINK))) {
101
98
  if (element.classList.contains(CLASS_NAME_NAV_GROUP_TOGGLE)) {
102
- return
99
+ continue
103
100
  }
104
101
 
105
102
  let currentUrl = String(window.location)
@@ -118,6 +115,7 @@ class Navigation extends BaseComponent {
118
115
 
119
116
  if (this._config.activeLinksExact && element.href === currentUrl) {
120
117
  element.classList.add(CLASS_NAME_ACTIVE)
118
+ // eslint-disable-next-line unicorn/no-array-for-each
121
119
  Array.from(this._getParents(element, SELECTOR_NAV_GROUP)).forEach(element => {
122
120
  element.classList.add(CLASS_NAME_SHOW)
123
121
  element.setAttribute('aria-expanded', true)
@@ -126,12 +124,13 @@ class Navigation extends BaseComponent {
126
124
 
127
125
  if (!this._config.activeLinksExact && element.href.startsWith(currentUrl)) {
128
126
  element.classList.add(CLASS_NAME_ACTIVE)
127
+ // eslint-disable-next-line unicorn/no-array-for-each
129
128
  Array.from(this._getParents(element, SELECTOR_NAV_GROUP)).forEach(element => {
130
129
  element.classList.add(CLASS_NAME_SHOW)
131
130
  element.setAttribute('aria-expanded', true)
132
131
  })
133
132
  }
134
- })
133
+ }
135
134
  }
136
135
 
137
136
  _getParents(element, selector) {
@@ -228,12 +227,12 @@ class Navigation extends BaseComponent {
228
227
 
229
228
  // Close other groups
230
229
  if (this._config.groupsAutoCollapse === true) {
231
- this._getSiblings(toggler.parentNode, filter).forEach(element => {
230
+ for (const element of this._getSiblings(toggler.parentNode, filter)) {
232
231
  this._slideUp(SelectorEngine.findOne(SELECTOR_NAV_GROUP_ITEMS, element), () => {
233
232
  element.classList.remove(CLASS_NAME_SHOW)
234
233
  element.setAttribute('aria-expanded', false)
235
234
  })
236
- })
235
+ }
237
236
  }
238
237
 
239
238
  if (toggler.parentNode.classList.contains(CLASS_NAME_SHOW)) {
@@ -283,9 +282,9 @@ class Navigation extends BaseComponent {
283
282
  * ------------------------------------------------------------------------
284
283
  */
285
284
  EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
286
- Array.from(document.querySelectorAll(SELECTOR_DATA_NAVIGATION)).forEach(element => {
285
+ for (const element of Array.from(document.querySelectorAll(SELECTOR_DATA_NAVIGATION))) {
287
286
  Navigation.navigationInterface(element)
288
- })
287
+ }
289
288
  })
290
289
 
291
290
  /**