@coreui/coreui 4.0.5 → 4.1.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 (143) hide show
  1. package/README.md +4 -7
  2. package/dist/css/coreui-grid.css +254 -205
  3. package/dist/css/coreui-grid.css.map +1 -1
  4. package/dist/css/coreui-grid.min.css +2 -2
  5. package/dist/css/coreui-grid.min.css.map +1 -1
  6. package/dist/css/coreui-grid.rtl.css +255 -206
  7. package/dist/css/coreui-grid.rtl.css.map +1 -1
  8. package/dist/css/coreui-grid.rtl.min.css +3 -3
  9. package/dist/css/coreui-grid.rtl.min.css.map +1 -1
  10. package/dist/css/coreui-reboot.css +63 -8
  11. package/dist/css/coreui-reboot.css.map +1 -1
  12. package/dist/css/coreui-reboot.min.css +2 -2
  13. package/dist/css/coreui-reboot.min.css.map +1 -1
  14. package/dist/css/coreui-reboot.rtl.css +64 -9
  15. package/dist/css/coreui-reboot.rtl.css.map +1 -1
  16. package/dist/css/coreui-reboot.rtl.min.css +3 -3
  17. package/dist/css/coreui-reboot.rtl.min.css.map +1 -1
  18. package/dist/css/coreui-utilities.css +181 -81
  19. package/dist/css/coreui-utilities.css.map +1 -1
  20. package/dist/css/coreui-utilities.min.css +2 -2
  21. package/dist/css/coreui-utilities.min.css.map +1 -1
  22. package/dist/css/coreui-utilities.rtl.css +182 -82
  23. package/dist/css/coreui-utilities.rtl.css.map +1 -1
  24. package/dist/css/coreui-utilities.rtl.min.css +3 -3
  25. package/dist/css/coreui-utilities.rtl.min.css.map +1 -1
  26. package/dist/css/coreui.css +713 -346
  27. package/dist/css/coreui.css.map +1 -1
  28. package/dist/css/coreui.min.css +2 -2
  29. package/dist/css/coreui.min.css.map +1 -1
  30. package/dist/css/coreui.rtl.css +699 -347
  31. package/dist/css/coreui.rtl.css.map +1 -1
  32. package/dist/css/coreui.rtl.min.css +3 -3
  33. package/dist/css/coreui.rtl.min.css.map +1 -1
  34. package/dist/js/coreui.bundle.js +851 -746
  35. package/dist/js/coreui.bundle.js.map +1 -1
  36. package/dist/js/coreui.bundle.min.js +3 -3
  37. package/dist/js/coreui.bundle.min.js.map +1 -1
  38. package/dist/js/coreui.esm.js +704 -644
  39. package/dist/js/coreui.esm.js.map +1 -1
  40. package/dist/js/coreui.esm.min.js +3 -3
  41. package/dist/js/coreui.esm.min.js.map +1 -1
  42. package/dist/js/coreui.js +714 -656
  43. package/dist/js/coreui.js.map +1 -1
  44. package/dist/js/coreui.min.js +3 -3
  45. package/dist/js/coreui.min.js.map +1 -1
  46. package/js/dist/alert.js +82 -49
  47. package/js/dist/alert.js.map +1 -1
  48. package/js/dist/base-component.js +26 -18
  49. package/js/dist/base-component.js.map +1 -1
  50. package/js/dist/button.js +23 -13
  51. package/js/dist/button.js.map +1 -1
  52. package/js/dist/carousel.js +95 -50
  53. package/js/dist/carousel.js.map +1 -1
  54. package/js/dist/collapse.js +125 -139
  55. package/js/dist/collapse.js.map +1 -1
  56. package/js/dist/dom/data.js +6 -6
  57. package/js/dist/dom/data.js.map +1 -1
  58. package/js/dist/dom/event-handler.js +15 -6
  59. package/js/dist/dom/event-handler.js.map +1 -1
  60. package/js/dist/dom/manipulator.js +7 -7
  61. package/js/dist/dom/manipulator.js.map +1 -1
  62. package/js/dist/dom/selector-engine.js +74 -9
  63. package/js/dist/dom/selector-engine.js.map +1 -1
  64. package/js/dist/dropdown.js +125 -112
  65. package/js/dist/dropdown.js.map +1 -1
  66. package/js/dist/modal.js +270 -93
  67. package/js/dist/modal.js.map +1 -1
  68. package/js/dist/offcanvas.js +231 -62
  69. package/js/dist/offcanvas.js.map +1 -1
  70. package/js/dist/popover.js +29 -59
  71. package/js/dist/popover.js.map +1 -1
  72. package/js/dist/scrollspy.js +45 -35
  73. package/js/dist/scrollspy.js.map +1 -1
  74. package/js/dist/tab.js +45 -23
  75. package/js/dist/tab.js.map +1 -1
  76. package/js/dist/toast.js +132 -34
  77. package/js/dist/toast.js.map +1 -1
  78. package/js/dist/tooltip.js +127 -109
  79. package/js/dist/tooltip.js.map +1 -1
  80. package/js/src/alert.js +21 -47
  81. package/js/src/base-component.js +3 -3
  82. package/js/src/button.js +1 -1
  83. package/js/src/carousel.js +10 -4
  84. package/js/src/collapse.js +66 -119
  85. package/js/src/dom/data.js +1 -1
  86. package/js/src/dom/event-handler.js +1 -2
  87. package/js/src/dom/manipulator.js +3 -3
  88. package/js/src/dom/selector-engine.js +18 -1
  89. package/js/src/dropdown.js +53 -68
  90. package/js/src/modal.js +24 -35
  91. package/js/src/navigation.js +1 -1
  92. package/js/src/offcanvas.js +16 -18
  93. package/js/src/popover.js +7 -49
  94. package/js/src/scrollspy.js +1 -1
  95. package/js/src/sidebar.js +21 -27
  96. package/js/src/tab.js +1 -1
  97. package/js/src/toast.js +11 -11
  98. package/js/src/tooltip.js +66 -50
  99. package/js/src/util/backdrop.js +6 -5
  100. package/js/src/util/component-functions.js +34 -0
  101. package/js/src/util/focustrap.js +105 -0
  102. package/js/src/util/index.js +39 -11
  103. package/js/src/util/sanitizer.js +21 -22
  104. package/js/src/util/scrollbar.js +1 -1
  105. package/package.json +54 -55
  106. package/scss/_buttons.scss +1 -2
  107. package/scss/_card.scss +2 -1
  108. package/scss/_dropdown.scss +1 -1
  109. package/scss/_functions.scss +51 -12
  110. package/scss/_grid.scss +0 -23
  111. package/scss/_helpers.scss +2 -0
  112. package/scss/_mixins.scss +1 -0
  113. package/scss/_modal.scss +2 -12
  114. package/scss/_nav.scss +1 -2
  115. package/scss/_navbar.scss +30 -1
  116. package/scss/_offcanvas.scss +6 -2
  117. package/scss/_placeholders.scss +51 -0
  118. package/scss/_reboot.scss +12 -8
  119. package/scss/_root.scss +36 -7
  120. package/scss/_tables.scss +9 -5
  121. package/scss/_toasts.scss +2 -2
  122. package/scss/_transitions.scss +6 -0
  123. package/scss/_utilities.scss +31 -8
  124. package/scss/_variables.scss +188 -13
  125. package/scss/coreui-grid.rtl.scss +1 -1
  126. package/scss/coreui-grid.scss +3 -1
  127. package/scss/coreui-reboot.rtl.scss +1 -1
  128. package/scss/coreui-reboot.scss +2 -4
  129. package/scss/coreui-utilities.rtl.scss +1 -1
  130. package/scss/coreui-utilities.scss +1 -1
  131. package/scss/coreui.rtl.scss +1 -1
  132. package/scss/coreui.scss +2 -1
  133. package/scss/forms/_form-control.scss +1 -1
  134. package/scss/forms/_form-select.scss +2 -0
  135. package/scss/helpers/_stacks.scss +15 -0
  136. package/scss/helpers/_vr.scss +8 -0
  137. package/scss/mixins/_backdrop.scss +14 -0
  138. package/scss/mixins/_grid.scss +26 -7
  139. package/scss/mixins/_ltr-rtl.scss +21 -0
  140. package/scss/mixins/_reset-text.scss +1 -1
  141. package/scss/mixins/_utilities.scss +28 -33
  142. package/scss/mixins/_visually-hidden.scss +1 -1
  143. package/scss/sidebar/_sidebar-nav.scss +1 -0
package/js/src/modal.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * --------------------------------------------------------------------------
3
- * CoreUI (v4.0.5): modal.js
3
+ * CoreUI (v4.1.2): 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
@@ -22,6 +22,8 @@ import SelectorEngine from './dom/selector-engine'
22
22
  import ScrollBarHelper from './util/scrollbar'
23
23
  import BaseComponent from './base-component'
24
24
  import Backdrop from './util/backdrop'
25
+ import FocusTrap from './util/focustrap'
26
+ import { enableDismissTrigger } from './util/component-functions'
25
27
 
26
28
  /**
27
29
  * ------------------------------------------------------------------------
@@ -52,7 +54,6 @@ const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`
52
54
  const EVENT_HIDDEN = `hidden${EVENT_KEY}`
53
55
  const EVENT_SHOW = `show${EVENT_KEY}`
54
56
  const EVENT_SHOWN = `shown${EVENT_KEY}`
55
- const EVENT_FOCUSIN = `focusin${EVENT_KEY}`
56
57
  const EVENT_RESIZE = `resize${EVENT_KEY}`
57
58
  const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`
58
59
  const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`
@@ -65,10 +66,10 @@ const CLASS_NAME_FADE = 'fade'
65
66
  const CLASS_NAME_SHOW = 'show'
66
67
  const CLASS_NAME_STATIC = 'modal-static'
67
68
 
69
+ const OPEN_SELECTOR = '.modal.show'
68
70
  const SELECTOR_DIALOG = '.modal-dialog'
69
71
  const SELECTOR_MODAL_BODY = '.modal-body'
70
72
  const SELECTOR_DATA_TOGGLE = '[data-coreui-toggle="modal"]'
71
- const SELECTOR_DATA_DISMISS = '[data-coreui-dismiss="modal"]'
72
73
 
73
74
  /**
74
75
  * ------------------------------------------------------------------------
@@ -83,6 +84,7 @@ class Modal extends BaseComponent {
83
84
  this._config = this._getConfig(config)
84
85
  this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element)
85
86
  this._backdrop = this._initializeBackDrop()
87
+ this._focustrap = this._initializeFocusTrap()
86
88
  this._isShown = false
87
89
  this._ignoreBackdropClick = false
88
90
  this._isTransitioning = false
@@ -133,8 +135,6 @@ class Modal extends BaseComponent {
133
135
  this._setEscapeEvent()
134
136
  this._setResizeEvent()
135
137
 
136
- EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, event => this.hide(event))
137
-
138
138
  EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {
139
139
  EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {
140
140
  if (event.target === this._element) {
@@ -146,11 +146,7 @@ class Modal extends BaseComponent {
146
146
  this._showBackdrop(() => this._showElement(relatedTarget))
147
147
  }
148
148
 
149
- hide(event) {
150
- if (event && ['A', 'AREA'].includes(event.target.tagName)) {
151
- event.preventDefault()
152
- }
153
-
149
+ hide() {
154
150
  if (!this._isShown || this._isTransitioning) {
155
151
  return
156
152
  }
@@ -171,7 +167,7 @@ class Modal extends BaseComponent {
171
167
  this._setEscapeEvent()
172
168
  this._setResizeEvent()
173
169
 
174
- EventHandler.off(document, EVENT_FOCUSIN)
170
+ this._focustrap.deactivate()
175
171
 
176
172
  this._element.classList.remove(CLASS_NAME_SHOW)
177
173
 
@@ -186,14 +182,8 @@ class Modal extends BaseComponent {
186
182
  .forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY))
187
183
 
188
184
  this._backdrop.dispose()
185
+ this._focustrap.deactivate()
189
186
  super.dispose()
190
-
191
- /**
192
- * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`
193
- * Do not move `document` in `htmlElements` array
194
- * It will remove `EVENT_CLICK_DATA_API` event that should remain
195
- */
196
- EventHandler.off(document, EVENT_FOCUSIN)
197
187
  }
198
188
 
199
189
  handleUpdate() {
@@ -209,6 +199,12 @@ class Modal extends BaseComponent {
209
199
  })
210
200
  }
211
201
 
202
+ _initializeFocusTrap() {
203
+ return new FocusTrap({
204
+ trapElement: this._element
205
+ })
206
+ }
207
+
212
208
  _getConfig(config) {
213
209
  config = {
214
210
  ...Default,
@@ -225,7 +221,7 @@ class Modal extends BaseComponent {
225
221
 
226
222
  if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
227
223
  // Don't move modal's DOM position
228
- document.body.appendChild(this._element)
224
+ document.body.append(this._element)
229
225
  }
230
226
 
231
227
  this._element.style.display = 'block'
@@ -244,13 +240,9 @@ class Modal extends BaseComponent {
244
240
 
245
241
  this._element.classList.add(CLASS_NAME_SHOW)
246
242
 
247
- if (this._config.focus) {
248
- this._enforceFocus()
249
- }
250
-
251
243
  const transitionComplete = () => {
252
244
  if (this._config.focus) {
253
- this._element.focus()
245
+ this._focustrap.activate()
254
246
  }
255
247
 
256
248
  this._isTransitioning = false
@@ -262,17 +254,6 @@ class Modal extends BaseComponent {
262
254
  this._queueCallback(transitionComplete, this._dialog, isAnimated)
263
255
  }
264
256
 
265
- _enforceFocus() {
266
- EventHandler.off(document, EVENT_FOCUSIN) // guard against infinite focus loop
267
- EventHandler.on(document, EVENT_FOCUSIN, event => {
268
- if (document !== event.target &&
269
- this._element !== event.target &&
270
- !this._element.contains(event.target)) {
271
- this._element.focus()
272
- }
273
- })
274
- }
275
-
276
257
  _setEscapeEvent() {
277
258
  if (this._isShown) {
278
259
  EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {
@@ -434,11 +415,19 @@ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (
434
415
  })
435
416
  })
436
417
 
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()
422
+ }
423
+
437
424
  const data = Modal.getOrCreateInstance(target)
438
425
 
439
426
  data.toggle(this)
440
427
  })
441
428
 
429
+ enableDismissTrigger(Modal)
430
+
442
431
  /**
443
432
  * ------------------------------------------------------------------------
444
433
  * jQuery
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * --------------------------------------------------------------------------
3
- * CoreUI (v4.0.5): navigation.js
3
+ * CoreUI (v4.1.2): navigation.js
4
4
  * Licensed under MIT (https://coreui.io/license)
5
5
  * --------------------------------------------------------------------------
6
6
  */
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * --------------------------------------------------------------------------
3
- * CoreUI (v4.0.5): dropdown.js
3
+ * CoreUI (v4.1.2): dropdown.js
4
4
  * Licensed under MIT (https://coreui.io/license)
5
5
  *
6
6
  * This component is a modified version of the Bootstrap's offcanvas.js
@@ -21,6 +21,8 @@ import BaseComponent from './base-component'
21
21
  import SelectorEngine from './dom/selector-engine'
22
22
  import Manipulator from './dom/manipulator'
23
23
  import Backdrop from './util/backdrop'
24
+ import FocusTrap from './util/focustrap'
25
+ import { enableDismissTrigger } from './util/component-functions'
24
26
 
25
27
  /**
26
28
  * ------------------------------------------------------------------------
@@ -48,18 +50,16 @@ const DefaultType = {
48
50
  }
49
51
 
50
52
  const CLASS_NAME_SHOW = 'show'
53
+ const CLASS_NAME_BACKDROP = 'offcanvas-backdrop'
51
54
  const OPEN_SELECTOR = '.offcanvas.show'
52
55
 
53
56
  const EVENT_SHOW = `show${EVENT_KEY}`
54
57
  const EVENT_SHOWN = `shown${EVENT_KEY}`
55
58
  const EVENT_HIDE = `hide${EVENT_KEY}`
56
59
  const EVENT_HIDDEN = `hidden${EVENT_KEY}`
57
- const EVENT_FOCUSIN = `focusin${EVENT_KEY}`
58
60
  const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`
59
- const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`
60
61
  const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`
61
62
 
62
- const SELECTOR_DATA_DISMISS = '[data-coreui-dismiss="offcanvas"]'
63
63
  const SELECTOR_DATA_TOGGLE = '[data-coreui-toggle="offcanvas"]'
64
64
 
65
65
  /**
@@ -75,6 +75,7 @@ class Offcanvas extends BaseComponent {
75
75
  this._config = this._getConfig(config)
76
76
  this._isShown = false
77
77
  this._backdrop = this._initializeBackDrop()
78
+ this._focustrap = this._initializeFocusTrap()
78
79
  this._addEventListeners()
79
80
  }
80
81
 
@@ -112,7 +113,6 @@ class Offcanvas extends BaseComponent {
112
113
 
113
114
  if (!this._config.scroll) {
114
115
  new ScrollBarHelper().hide()
115
- this._enforceFocusOnElement(this._element)
116
116
  }
117
117
 
118
118
  this._element.removeAttribute('aria-hidden')
@@ -121,6 +121,10 @@ class Offcanvas extends BaseComponent {
121
121
  this._element.classList.add(CLASS_NAME_SHOW)
122
122
 
123
123
  const completeCallBack = () => {
124
+ if (!this._config.scroll) {
125
+ this._focustrap.activate()
126
+ }
127
+
124
128
  EventHandler.trigger(this._element, EVENT_SHOWN, { relatedTarget })
125
129
  }
126
130
 
@@ -138,7 +142,7 @@ class Offcanvas extends BaseComponent {
138
142
  return
139
143
  }
140
144
 
141
- EventHandler.off(document, EVENT_FOCUSIN)
145
+ this._focustrap.deactivate()
142
146
  this._element.blur()
143
147
  this._isShown = false
144
148
  this._element.classList.remove(CLASS_NAME_SHOW)
@@ -162,8 +166,8 @@ class Offcanvas extends BaseComponent {
162
166
 
163
167
  dispose() {
164
168
  this._backdrop.dispose()
169
+ this._focustrap.deactivate()
165
170
  super.dispose()
166
- EventHandler.off(document, EVENT_FOCUSIN)
167
171
  }
168
172
 
169
173
  // Private
@@ -180,6 +184,7 @@ class Offcanvas extends BaseComponent {
180
184
 
181
185
  _initializeBackDrop() {
182
186
  return new Backdrop({
187
+ className: CLASS_NAME_BACKDROP,
183
188
  isVisible: this._config.backdrop,
184
189
  isAnimated: true,
185
190
  rootElement: this._element.parentNode,
@@ -187,21 +192,13 @@ class Offcanvas extends BaseComponent {
187
192
  })
188
193
  }
189
194
 
190
- _enforceFocusOnElement(element) {
191
- EventHandler.off(document, EVENT_FOCUSIN) // guard against infinite focus loop
192
- EventHandler.on(document, EVENT_FOCUSIN, event => {
193
- if (document !== event.target &&
194
- element !== event.target &&
195
- !element.contains(event.target)) {
196
- element.focus()
197
- }
195
+ _initializeFocusTrap() {
196
+ return new FocusTrap({
197
+ trapElement: this._element
198
198
  })
199
- element.focus()
200
199
  }
201
200
 
202
201
  _addEventListeners() {
203
- EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide())
204
-
205
202
  EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {
206
203
  if (this._config.keyboard && event.key === ESCAPE_KEY) {
207
204
  this.hide()
@@ -266,6 +263,7 @@ EventHandler.on(window, EVENT_LOAD_DATA_API, () =>
266
263
  SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show())
267
264
  )
268
265
 
266
+ enableDismissTrigger(Offcanvas)
269
267
  /**
270
268
  * ------------------------------------------------------------------------
271
269
  * jQuery
package/js/src/popover.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * --------------------------------------------------------------------------
3
- * CoreUI (v4.0.5): popover.js
3
+ * CoreUI (v4.1.2): popover.js
4
4
  * Licensed under MIT (https://coreui.io/license)
5
5
  *
6
6
  * This component is a modified version of the Bootstrap's popover.js
@@ -9,7 +9,6 @@
9
9
  */
10
10
 
11
11
  import { defineJQueryPlugin } from './util/index'
12
- import SelectorEngine from './dom/selector-engine'
13
12
  import Tooltip from './tooltip'
14
13
 
15
14
  /**
@@ -22,7 +21,6 @@ const NAME = 'popover'
22
21
  const DATA_KEY = 'coreui.popover'
23
22
  const EVENT_KEY = `.${DATA_KEY}`
24
23
  const CLASS_PREFIX = 'bs-popover'
25
- const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\s)${CLASS_PREFIX}\\S+`, 'g')
26
24
 
27
25
  const Default = {
28
26
  ...Tooltip.Default,
@@ -55,9 +53,6 @@ const Event = {
55
53
  MOUSELEAVE: `mouseleave${EVENT_KEY}`
56
54
  }
57
55
 
58
- const CLASS_NAME_FADE = 'fade'
59
- const CLASS_NAME_SHOW = 'show'
60
-
61
56
  const SELECTOR_TITLE = '.popover-header'
62
57
  const SELECTOR_CONTENT = '.popover-body'
63
58
 
@@ -92,56 +87,19 @@ class Popover extends Tooltip {
92
87
  return this.getTitle() || this._getContent()
93
88
  }
94
89
 
95
- getTipElement() {
96
- if (this.tip) {
97
- return this.tip
98
- }
99
-
100
- this.tip = super.getTipElement()
101
-
102
- if (!this.getTitle()) {
103
- SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove()
104
- }
105
-
106
- if (!this._getContent()) {
107
- SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove()
108
- }
109
-
110
- return this.tip
111
- }
112
-
113
- setContent() {
114
- const tip = this.getTipElement()
115
-
116
- // we use append for html objects to maintain js events
117
- this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle())
118
- let content = this._getContent()
119
- if (typeof content === 'function') {
120
- content = content.call(this._element)
121
- }
122
-
123
- this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content)
124
-
125
- tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW)
90
+ setContent(tip) {
91
+ this._sanitizeAndSetContent(tip, this.getTitle(), SELECTOR_TITLE)
92
+ this._sanitizeAndSetContent(tip, this._getContent(), SELECTOR_CONTENT)
126
93
  }
127
94
 
128
95
  // Private
129
96
 
130
- _addAttachmentClass(attachment) {
131
- this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`)
132
- }
133
-
134
97
  _getContent() {
135
- return this._element.getAttribute('data-coreui-content') || this._config.content
98
+ return this._resolvePossibleFunction(this._config.content)
136
99
  }
137
100
 
138
- _cleanTipClass() {
139
- const tip = this.getTipElement()
140
- const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX)
141
- if (tabClass !== null && tabClass.length > 0) {
142
- tabClass.map(token => token.trim())
143
- .forEach(tClass => tip.classList.remove(tClass))
144
- }
101
+ _getBasicClassPrefix() {
102
+ return CLASS_PREFIX
145
103
  }
146
104
 
147
105
  // Static
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * --------------------------------------------------------------------------
3
- * CoreUI (v4.0.5): scrollspy.js
3
+ * CoreUI (v4.1.2): scrollspy.js
4
4
  * Licensed under MIT (https://coreui.io/license)
5
5
  *
6
6
  * This component is a modified version of the Bootstrap's scrollspy.js
package/js/src/sidebar.js CHANGED
@@ -1,18 +1,19 @@
1
1
  /**
2
2
  * --------------------------------------------------------------------------
3
- * CoreUI (v4.0.5): sidebar.js
3
+ * CoreUI (v4.1.2): sidebar.js
4
4
  * Licensed under MIT (https://coreui.io/license)
5
5
  * --------------------------------------------------------------------------
6
6
  */
7
7
 
8
8
  import {
9
9
  defineJQueryPlugin,
10
- reflow,
11
10
  typeCheckConfig
12
11
  } from './util/index'
12
+ import ScrollBarHelper from './util/scrollbar'
13
13
  import EventHandler from './dom/event-handler'
14
- import Manipulator from './dom/manipulator'
15
14
  import BaseComponent from './base-component'
15
+ import Manipulator from './dom/manipulator'
16
+ import Backdrop from './util/backdrop'
16
17
 
17
18
  /**
18
19
  * ------------------------------------------------------------------------
@@ -30,7 +31,6 @@ const Default = {}
30
31
  const DefaultType = {}
31
32
 
32
33
  const CLASS_NAME_BACKDROP = 'sidebar-backdrop'
33
- const CLASS_NAME_FADE = 'fade'
34
34
  const CLASS_NAME_HIDE = 'hide'
35
35
  const CLASS_NAME_SHOW = 'show'
36
36
  const CLASS_NAME_SIDEBAR_NARROW = 'sidebar-narrow'
@@ -66,8 +66,7 @@ class Sidebar extends BaseComponent {
66
66
  this._overlaid = this._isOverlaid()
67
67
  this._narrow = this._isNarrow()
68
68
  this._unfoldable = this._isUnfoldable()
69
- this._backdrop = null
70
-
69
+ this._backdrop = this._initializeBackDrop()
71
70
  this._addEventListeners()
72
71
  }
73
72
 
@@ -96,7 +95,8 @@ class Sidebar extends BaseComponent {
96
95
 
97
96
  if (this._isMobile()) {
98
97
  this._element.classList.add(CLASS_NAME_SHOW)
99
- this._showBackdrop()
98
+ this._backdrop.show()
99
+ new ScrollBarHelper().hide()
100
100
  }
101
101
 
102
102
  const complete = () => {
@@ -121,7 +121,8 @@ class Sidebar extends BaseComponent {
121
121
  }
122
122
 
123
123
  if (this._isMobile()) {
124
- this._removeBackdrop()
124
+ this._backdrop.hide()
125
+ new ScrollBarHelper().reset()
125
126
  } else {
126
127
  this._element.classList.add(CLASS_NAME_HIDE)
127
128
  }
@@ -207,6 +208,16 @@ class Sidebar extends BaseComponent {
207
208
  return config
208
209
  }
209
210
 
211
+ _initializeBackDrop() {
212
+ return new Backdrop({
213
+ className: CLASS_NAME_BACKDROP,
214
+ isVisible: this._isMobile(),
215
+ isAnimated: true,
216
+ rootElement: this._element.parentNode,
217
+ clickCallback: () => this.hide()
218
+ })
219
+ }
220
+
210
221
  _isMobile() {
211
222
  return Boolean(window.getComputedStyle(this._element, null).getPropertyValue('--cui-is-mobile'))
212
223
  }
@@ -226,7 +237,7 @@ class Sidebar extends BaseComponent {
226
237
  _isVisible() {
227
238
  const rect = this._element.getBoundingClientRect()
228
239
  return (
229
- rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && rect.right <= (window.innerWidth || document.documentElement.clientWidth)
240
+ rect.top >= 0 && rect.left >= 0 && Math.floor(rect.bottom) <= (window.innerHeight || document.documentElement.clientHeight) && Math.floor(rect.right) <= (window.innerWidth || document.documentElement.clientWidth)
230
241
  )
231
242
  }
232
243
 
@@ -234,24 +245,6 @@ class Sidebar extends BaseComponent {
234
245
  this._element.classList.add(className)
235
246
  }
236
247
 
237
- _removeBackdrop() {
238
- if (this._backdrop) {
239
- this._backdrop.parentNode.removeChild(this._backdrop)
240
- this._backdrop = null
241
- }
242
- }
243
-
244
- _showBackdrop() {
245
- if (!this._backdrop) {
246
- this._backdrop = document.createElement('div')
247
- this._backdrop.className = CLASS_NAME_BACKDROP
248
- this._backdrop.classList.add(CLASS_NAME_FADE)
249
- document.body.appendChild(this._backdrop)
250
- reflow(this._backdrop)
251
- this._backdrop.classList.add(CLASS_NAME_SHOW)
252
- }
253
- }
254
-
255
248
  _clickOutListener(event, sidebar) {
256
249
  if (event.target.closest(SELECTOR_SIDEBAR) === null) {
257
250
  event.preventDefault()
@@ -301,6 +294,7 @@ class Sidebar extends BaseComponent {
301
294
  EventHandler.on(window, EVENT_RESIZE, () => {
302
295
  if (this._isMobile() && this._isVisible()) {
303
296
  this.hide()
297
+ this._backdrop = this._initializeBackDrop()
304
298
  }
305
299
  })
306
300
  }
package/js/src/tab.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * --------------------------------------------------------------------------
3
- * CoreUI (v4.0.5): tab.js
3
+ * CoreUI (v4.1.2): tab.js
4
4
  * Licensed under MIT (https://coreui.io/license)
5
5
  *
6
6
  * This component is a modified version of the Bootstrap's tab.js
package/js/src/toast.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * --------------------------------------------------------------------------
3
- * CoreUI (v4.0.5): toast.js
3
+ * CoreUI (v4.1.2): toast.js
4
4
  * Licensed under MIT (https://coreui.io/license)
5
5
  *
6
6
  * This component is a modified version of the Bootstrap's toast.js
@@ -16,6 +16,7 @@ import {
16
16
  import EventHandler from './dom/event-handler'
17
17
  import Manipulator from './dom/manipulator'
18
18
  import BaseComponent from './base-component'
19
+ import { enableDismissTrigger } from './util/component-functions'
19
20
 
20
21
  /**
21
22
  * ------------------------------------------------------------------------
@@ -27,7 +28,6 @@ const NAME = 'toast'
27
28
  const DATA_KEY = 'coreui.toast'
28
29
  const EVENT_KEY = `.${DATA_KEY}`
29
30
 
30
- const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`
31
31
  const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`
32
32
  const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`
33
33
  const EVENT_FOCUSIN = `focusin${EVENT_KEY}`
@@ -38,7 +38,7 @@ const EVENT_SHOW = `show${EVENT_KEY}`
38
38
  const EVENT_SHOWN = `shown${EVENT_KEY}`
39
39
 
40
40
  const CLASS_NAME_FADE = 'fade'
41
- const CLASS_NAME_HIDE = 'hide'
41
+ const CLASS_NAME_HIDE = 'hide' // @deprecated - kept here only for backwards compatibility
42
42
  const CLASS_NAME_SHOW = 'show'
43
43
  const CLASS_NAME_SHOWING = 'showing'
44
44
 
@@ -54,8 +54,6 @@ const Default = {
54
54
  delay: 5000
55
55
  }
56
56
 
57
- const SELECTOR_DATA_DISMISS = '[data-coreui-dismiss="toast"]'
58
-
59
57
  /**
60
58
  * ------------------------------------------------------------------------
61
59
  * Class Definition
@@ -104,15 +102,14 @@ class Toast extends BaseComponent {
104
102
 
105
103
  const complete = () => {
106
104
  this._element.classList.remove(CLASS_NAME_SHOWING)
107
- this._element.classList.add(CLASS_NAME_SHOW)
108
-
109
105
  EventHandler.trigger(this._element, EVENT_SHOWN)
110
106
 
111
107
  this._maybeScheduleHide()
112
108
  }
113
109
 
114
- this._element.classList.remove(CLASS_NAME_HIDE)
110
+ this._element.classList.remove(CLASS_NAME_HIDE) // @deprecated
115
111
  reflow(this._element)
112
+ this._element.classList.add(CLASS_NAME_SHOW)
116
113
  this._element.classList.add(CLASS_NAME_SHOWING)
117
114
 
118
115
  this._queueCallback(complete, this._element, this._config.animation)
@@ -130,11 +127,13 @@ class Toast extends BaseComponent {
130
127
  }
131
128
 
132
129
  const complete = () => {
133
- this._element.classList.add(CLASS_NAME_HIDE)
130
+ this._element.classList.add(CLASS_NAME_HIDE) // @deprecated
131
+ this._element.classList.remove(CLASS_NAME_SHOWING)
132
+ this._element.classList.remove(CLASS_NAME_SHOW)
134
133
  EventHandler.trigger(this._element, EVENT_HIDDEN)
135
134
  }
136
135
 
137
- this._element.classList.remove(CLASS_NAME_SHOW)
136
+ this._element.classList.add(CLASS_NAME_SHOWING)
138
137
  this._queueCallback(complete, this._element, this._config.animation)
139
138
  }
140
139
 
@@ -204,7 +203,6 @@ class Toast extends BaseComponent {
204
203
  }
205
204
 
206
205
  _setListeners() {
207
- EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide())
208
206
  EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true))
209
207
  EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false))
210
208
  EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true))
@@ -233,6 +231,8 @@ class Toast extends BaseComponent {
233
231
  }
234
232
  }
235
233
 
234
+ enableDismissTrigger(Toast)
235
+
236
236
  /**
237
237
  * ------------------------------------------------------------------------
238
238
  * jQuery