@coreui/coreui 4.1.5 → 4.2.1

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 +2 -2
  2. package/README.md +64 -11
  3. package/dist/css/coreui-grid.css +23 -949
  4. package/dist/css/coreui-grid.css.map +1 -1
  5. package/dist/css/coreui-grid.min.css +3 -3
  6. package/dist/css/coreui-grid.min.css.map +1 -1
  7. package/dist/css/coreui-grid.rtl.css +25 -951
  8. package/dist/css/coreui-grid.rtl.css.map +1 -1
  9. package/dist/css/coreui-grid.rtl.min.css +5 -5
  10. package/dist/css/coreui-grid.rtl.min.css.map +1 -1
  11. package/dist/css/coreui-reboot.css +35 -42
  12. package/dist/css/coreui-reboot.css.map +1 -1
  13. package/dist/css/coreui-reboot.min.css +3 -3
  14. package/dist/css/coreui-reboot.min.css.map +1 -1
  15. package/dist/css/coreui-reboot.rtl.css +36 -44
  16. package/dist/css/coreui-reboot.rtl.css.map +1 -1
  17. package/dist/css/coreui-reboot.rtl.min.css +5 -5
  18. package/dist/css/coreui-reboot.rtl.min.css.map +1 -1
  19. package/dist/css/coreui-utilities.css +279 -951
  20. package/dist/css/coreui-utilities.css.map +1 -1
  21. package/dist/css/coreui-utilities.min.css +3 -3
  22. package/dist/css/coreui-utilities.min.css.map +1 -1
  23. package/dist/css/coreui-utilities.rtl.css +275 -953
  24. package/dist/css/coreui-utilities.rtl.css.map +1 -1
  25. package/dist/css/coreui-utilities.rtl.min.css +5 -5
  26. package/dist/css/coreui-utilities.rtl.min.css.map +1 -1
  27. package/dist/css/coreui.css +2179 -2259
  28. package/dist/css/coreui.css.map +1 -1
  29. package/dist/css/coreui.min.css +3 -3
  30. package/dist/css/coreui.min.css.map +1 -1
  31. package/dist/css/coreui.rtl.css +2166 -2253
  32. package/dist/css/coreui.rtl.css.map +1 -1
  33. package/dist/css/coreui.rtl.min.css +5 -5
  34. package/dist/css/coreui.rtl.min.css.map +1 -1
  35. package/dist/js/coreui.bundle.js +2095 -1906
  36. package/dist/js/coreui.bundle.js.map +1 -1
  37. package/dist/js/coreui.bundle.min.js +2 -2
  38. package/dist/js/coreui.bundle.min.js.map +1 -1
  39. package/dist/js/coreui.esm.js +2098 -1909
  40. package/dist/js/coreui.esm.js.map +1 -1
  41. package/dist/js/coreui.esm.min.js +2 -2
  42. package/dist/js/coreui.esm.min.js.map +1 -1
  43. package/dist/js/coreui.js +2099 -1910
  44. package/dist/js/coreui.js.map +1 -1
  45. package/dist/js/coreui.min.js +2 -2
  46. package/dist/js/coreui.min.js.map +1 -1
  47. package/js/dist/alert.js +10 -148
  48. package/js/dist/alert.js.map +1 -1
  49. package/js/dist/base-component.js +36 -122
  50. package/js/dist/base-component.js.map +1 -1
  51. package/js/dist/button.js +9 -76
  52. package/js/dist/button.js.map +1 -1
  53. package/js/dist/carousel.js +212 -507
  54. package/js/dist/carousel.js.map +1 -1
  55. package/js/dist/collapse.js +64 -251
  56. package/js/dist/collapse.js.map +1 -1
  57. package/js/dist/dom/data.js +2 -4
  58. package/js/dist/dom/data.js.map +1 -1
  59. package/js/dist/dom/event-handler.js +82 -133
  60. package/js/dist/dom/event-handler.js.map +1 -1
  61. package/js/dist/dom/manipulator.js +22 -26
  62. package/js/dist/dom/manipulator.js.map +1 -1
  63. package/js/dist/dom/selector-engine.js +16 -81
  64. package/js/dist/dom/selector-engine.js.map +1 -1
  65. package/js/dist/dropdown.js +99 -338
  66. package/js/dist/dropdown.js.map +1 -1
  67. package/js/dist/modal.js +106 -774
  68. package/js/dist/modal.js.map +1 -1
  69. package/js/dist/navigation.js +309 -0
  70. package/js/dist/navigation.js.map +1 -0
  71. package/js/dist/offcanvas.js +88 -680
  72. package/js/dist/offcanvas.js.map +1 -1
  73. package/js/dist/popover.js +35 -120
  74. package/js/dist/popover.js.map +1 -1
  75. package/js/dist/scrollspy.js +178 -264
  76. package/js/dist/scrollspy.js.map +1 -1
  77. package/js/dist/sidebar.js +347 -0
  78. package/js/dist/sidebar.js.map +1 -0
  79. package/js/dist/tab.js +226 -216
  80. package/js/dist/tab.js.map +1 -1
  81. package/js/dist/toast.js +27 -216
  82. package/js/dist/toast.js.map +1 -1
  83. package/js/dist/tooltip.js +271 -618
  84. package/js/dist/tooltip.js.map +1 -1
  85. package/js/dist/util/backdrop.js +166 -0
  86. package/js/dist/util/backdrop.js.map +1 -0
  87. package/js/dist/util/component-functions.js +47 -0
  88. package/js/dist/util/component-functions.js.map +1 -0
  89. package/js/dist/util/config.js +80 -0
  90. package/js/dist/util/config.js.map +1 -0
  91. package/js/dist/util/focustrap.js +130 -0
  92. package/js/dist/util/focustrap.js.map +1 -0
  93. package/js/dist/util/index.js +354 -0
  94. package/js/dist/util/index.js.map +1 -0
  95. package/js/dist/util/sanitizer.js +126 -0
  96. package/js/dist/util/sanitizer.js.map +1 -0
  97. package/js/dist/util/scrollbar.js +139 -0
  98. package/js/dist/util/scrollbar.js.map +1 -0
  99. package/js/dist/util/swipe.js +156 -0
  100. package/js/dist/util/swipe.js.map +1 -0
  101. package/js/dist/util/template-factory.js +178 -0
  102. package/js/dist/util/template-factory.js.map +1 -0
  103. package/js/src/alert.js +3 -15
  104. package/js/src/base-component.js +28 -18
  105. package/js/src/button.js +3 -15
  106. package/js/src/carousel.js +203 -320
  107. package/js/src/collapse.js +61 -94
  108. package/js/src/dom/data.js +1 -3
  109. package/js/src/dom/event-handler.js +74 -107
  110. package/js/src/dom/manipulator.js +22 -31
  111. package/js/src/dom/selector-engine.js +10 -19
  112. package/js/src/dropdown.js +84 -138
  113. package/js/src/modal.js +94 -158
  114. package/js/src/navigation.js +12 -13
  115. package/js/src/offcanvas.js +71 -60
  116. package/js/src/popover.js +31 -62
  117. package/js/src/scrollspy.js +166 -171
  118. package/js/src/sidebar.js +5 -8
  119. package/js/src/tab.js +201 -110
  120. package/js/src/toast.js +19 -41
  121. package/js/src/tooltip.js +264 -374
  122. package/js/src/util/backdrop.js +55 -36
  123. package/js/src/util/component-functions.js +1 -1
  124. package/js/src/util/config.js +66 -0
  125. package/js/src/util/focustrap.js +38 -28
  126. package/js/src/util/index.js +41 -57
  127. package/js/src/util/sanitizer.js +9 -17
  128. package/js/src/util/scrollbar.js +47 -30
  129. package/js/src/util/swipe.js +146 -0
  130. package/js/src/util/template-factory.js +160 -0
  131. package/package.json +40 -40
  132. package/scss/_accordion.scss +53 -25
  133. package/scss/_alert.scss +29 -9
  134. package/scss/_badge.scss +15 -6
  135. package/scss/_breadcrumb.scss +23 -11
  136. package/scss/_button-group.scss +3 -0
  137. package/scss/_buttons.scss +77 -50
  138. package/scss/_callout.scss +18 -6
  139. package/scss/_card.scss +55 -37
  140. package/scss/_carousel.scss +6 -6
  141. package/scss/_close.scss +4 -4
  142. package/scss/_containers.scss +1 -1
  143. package/scss/_dropdown.scss +86 -64
  144. package/scss/_footer.scss +15 -5
  145. package/scss/_functions.scss +11 -24
  146. package/scss/_grid.scss +3 -3
  147. package/scss/_header.scss +59 -34
  148. package/scss/_helpers.scss +1 -0
  149. package/scss/_images.scss +3 -3
  150. package/scss/_list-group.scss +47 -29
  151. package/scss/_maps.scss +54 -0
  152. package/scss/_modal.scss +70 -43
  153. package/scss/_nav.scss +53 -20
  154. package/scss/_navbar.scss +84 -94
  155. package/scss/_offcanvas.scss +120 -60
  156. package/scss/_pagination.scss +66 -21
  157. package/scss/_popover.scss +90 -52
  158. package/scss/_progress.scss +20 -9
  159. package/scss/_reboot.scss +31 -58
  160. package/scss/_root.scss +41 -21
  161. package/scss/_spinners.scss +37 -21
  162. package/scss/_subheader.scss +9 -9
  163. package/scss/_tables.scss +34 -36
  164. package/scss/_toasts.scss +35 -19
  165. package/scss/_tooltip.scss +61 -56
  166. package/scss/_utilities.scss +42 -27
  167. package/scss/_variables.scss +169 -148
  168. package/scss/coreui-grid.rtl.scss +2 -2
  169. package/scss/coreui-grid.scss +3 -2
  170. package/scss/coreui-reboot.rtl.scss +2 -2
  171. package/scss/coreui-reboot.scss +2 -2
  172. package/scss/coreui-utilities.rtl.scss +2 -2
  173. package/scss/coreui-utilities.scss +3 -2
  174. package/scss/coreui.rtl.scss +2 -2
  175. package/scss/coreui.scss +3 -2
  176. package/scss/forms/_floating-labels.scss +14 -3
  177. package/scss/forms/_form-check.scss +42 -19
  178. package/scss/forms/_form-control.scss +25 -50
  179. package/scss/forms/_form-range.scss +8 -8
  180. package/scss/forms/_form-select.scss +8 -8
  181. package/scss/forms/_form-text.scss +1 -1
  182. package/scss/forms/_input-group.scss +3 -3
  183. package/scss/forms/_labels.scss +2 -2
  184. package/scss/helpers/_color-bg.scss +10 -0
  185. package/scss/helpers/_colored-links.scss +2 -2
  186. package/scss/helpers/_position.scss +7 -1
  187. package/scss/helpers/_ratio.scss +2 -2
  188. package/scss/helpers/_vr.scss +1 -0
  189. package/scss/mixins/_alert.scss +10 -10
  190. package/scss/mixins/_breakpoints.scss +8 -8
  191. package/scss/mixins/_buttons.scss +45 -47
  192. package/scss/mixins/_container.scss +4 -2
  193. package/scss/mixins/_css-vars.scss +47 -47
  194. package/scss/mixins/_forms.scss +8 -0
  195. package/scss/mixins/_gradients.scss +1 -1
  196. package/scss/mixins/_grid.scss +11 -11
  197. package/scss/mixins/_list-group.scss +7 -9
  198. package/scss/mixins/_pagination.scss +4 -25
  199. package/scss/mixins/_table-variants.scss +20 -12
  200. package/scss/mixins/_utilities.scss +8 -3
  201. package/scss/sidebar/_sidebar-narrow.scss +10 -10
  202. package/scss/sidebar/_sidebar-nav.scss +33 -32
  203. package/scss/sidebar/_sidebar.scss +110 -56
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * --------------------------------------------------------------------------
3
- * Bootstrap (v5.1.3): util/scrollBar.js
3
+ * Bootstrap (v5.2.0-beta1): util/scrollBar.js
4
4
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5
5
  * --------------------------------------------------------------------------
6
6
  */
@@ -9,14 +9,25 @@ import SelectorEngine from '../dom/selector-engine'
9
9
  import Manipulator from '../dom/manipulator'
10
10
  import { isElement } from './index'
11
11
 
12
+ /**
13
+ * Constants
14
+ */
15
+
12
16
  const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'
13
17
  const SELECTOR_STICKY_CONTENT = '.sticky-top'
18
+ const PROPERTY_PADDING = 'padding-right'
19
+ const PROPERTY_MARGIN = 'margin-right'
20
+
21
+ /**
22
+ * Class definition
23
+ */
14
24
 
15
25
  class ScrollBarHelper {
16
26
  constructor() {
17
27
  this._element = document.body
18
28
  }
19
29
 
30
+ // Public
20
31
  getWidth() {
21
32
  // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes
22
33
  const documentWidth = document.documentElement.clientWidth
@@ -27,55 +38,62 @@ class ScrollBarHelper {
27
38
  const width = this.getWidth()
28
39
  this._disableOverFlow()
29
40
  // give padding to element to balance the hidden scrollbar width
30
- this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width)
41
+ this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width)
31
42
  // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth
32
- this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width)
33
- this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width)
43
+ this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width)
44
+ this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width)
45
+ }
46
+
47
+ reset() {
48
+ this._resetElementAttributes(this._element, 'overflow')
49
+ this._resetElementAttributes(this._element, PROPERTY_PADDING)
50
+ this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING)
51
+ this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN)
52
+ }
53
+
54
+ isOverflowing() {
55
+ return this.getWidth() > 0
34
56
  }
35
57
 
58
+ // Private
36
59
  _disableOverFlow() {
37
60
  this._saveInitialAttribute(this._element, 'overflow')
38
61
  this._element.style.overflow = 'hidden'
39
62
  }
40
63
 
41
- _setElementAttributes(selector, styleProp, callback) {
64
+ _setElementAttributes(selector, styleProperty, callback) {
42
65
  const scrollbarWidth = this.getWidth()
43
66
  const manipulationCallBack = element => {
44
67
  if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {
45
68
  return
46
69
  }
47
70
 
48
- this._saveInitialAttribute(element, styleProp)
49
- const calculatedValue = window.getComputedStyle(element)[styleProp]
50
- element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`
71
+ this._saveInitialAttribute(element, styleProperty)
72
+ const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty)
73
+ element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`)
51
74
  }
52
75
 
53
76
  this._applyManipulationCallback(selector, manipulationCallBack)
54
77
  }
55
78
 
56
- reset() {
57
- this._resetElementAttributes(this._element, 'overflow')
58
- this._resetElementAttributes(this._element, 'paddingRight')
59
- this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight')
60
- this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight')
61
- }
62
-
63
- _saveInitialAttribute(element, styleProp) {
64
- const actualValue = element.style[styleProp]
79
+ _saveInitialAttribute(element, styleProperty) {
80
+ const actualValue = element.style.getPropertyValue(styleProperty)
65
81
  if (actualValue) {
66
- Manipulator.setDataAttribute(element, styleProp, actualValue)
82
+ Manipulator.setDataAttribute(element, styleProperty, actualValue)
67
83
  }
68
84
  }
69
85
 
70
- _resetElementAttributes(selector, styleProp) {
86
+ _resetElementAttributes(selector, styleProperty) {
71
87
  const manipulationCallBack = element => {
72
- const value = Manipulator.getDataAttribute(element, styleProp)
73
- if (typeof value === 'undefined') {
74
- element.style.removeProperty(styleProp)
75
- } else {
76
- Manipulator.removeDataAttribute(element, styleProp)
77
- element.style[styleProp] = value
88
+ const value = Manipulator.getDataAttribute(element, styleProperty)
89
+ // We only want to remove the property if the value is `null`; the value can also be zero
90
+ if (value === null) {
91
+ element.style.removeProperty(styleProperty)
92
+ return
78
93
  }
94
+
95
+ Manipulator.removeDataAttribute(element, styleProperty)
96
+ element.style.setProperty(styleProperty, value)
79
97
  }
80
98
 
81
99
  this._applyManipulationCallback(selector, manipulationCallBack)
@@ -84,13 +102,12 @@ class ScrollBarHelper {
84
102
  _applyManipulationCallback(selector, callBack) {
85
103
  if (isElement(selector)) {
86
104
  callBack(selector)
87
- } else {
88
- SelectorEngine.find(selector, this._element).forEach(callBack)
105
+ return
89
106
  }
90
- }
91
107
 
92
- isOverflowing() {
93
- return this.getWidth() > 0
108
+ for (const sel of SelectorEngine.find(selector, this._element)) {
109
+ callBack(sel)
110
+ }
94
111
  }
95
112
  }
96
113
 
@@ -0,0 +1,146 @@
1
+ /**
2
+ * --------------------------------------------------------------------------
3
+ * Bootstrap (v5.2.0-beta1): util/swipe.js
4
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5
+ * --------------------------------------------------------------------------
6
+ */
7
+
8
+ import Config from './config'
9
+ import EventHandler from '../dom/event-handler'
10
+ import { execute } from './index'
11
+
12
+ /**
13
+ * Constants
14
+ */
15
+
16
+ const NAME = 'swipe'
17
+ const EVENT_KEY = '.coreui.swipe'
18
+ const EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`
19
+ const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`
20
+ const EVENT_TOUCHEND = `touchend${EVENT_KEY}`
21
+ const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`
22
+ const EVENT_POINTERUP = `pointerup${EVENT_KEY}`
23
+ const POINTER_TYPE_TOUCH = 'touch'
24
+ const POINTER_TYPE_PEN = 'pen'
25
+ const CLASS_NAME_POINTER_EVENT = 'pointer-event'
26
+ const SWIPE_THRESHOLD = 40
27
+
28
+ const Default = {
29
+ endCallback: null,
30
+ leftCallback: null,
31
+ rightCallback: null
32
+ }
33
+
34
+ const DefaultType = {
35
+ endCallback: '(function|null)',
36
+ leftCallback: '(function|null)',
37
+ rightCallback: '(function|null)'
38
+ }
39
+
40
+ /**
41
+ * Class definition
42
+ */
43
+
44
+ class Swipe extends Config {
45
+ constructor(element, config) {
46
+ super()
47
+ this._element = element
48
+
49
+ if (!element || !Swipe.isSupported()) {
50
+ return
51
+ }
52
+
53
+ this._config = this._getConfig(config)
54
+ this._deltaX = 0
55
+ this._supportPointerEvents = Boolean(window.PointerEvent)
56
+ this._initEvents()
57
+ }
58
+
59
+ // Getters
60
+ static get Default() {
61
+ return Default
62
+ }
63
+
64
+ static get DefaultType() {
65
+ return DefaultType
66
+ }
67
+
68
+ static get NAME() {
69
+ return NAME
70
+ }
71
+
72
+ // Public
73
+ dispose() {
74
+ EventHandler.off(this._element, EVENT_KEY)
75
+ }
76
+
77
+ // Private
78
+ _start(event) {
79
+ if (!this._supportPointerEvents) {
80
+ this._deltaX = event.touches[0].clientX
81
+
82
+ return
83
+ }
84
+
85
+ if (this._eventIsPointerPenTouch(event)) {
86
+ this._deltaX = event.clientX
87
+ }
88
+ }
89
+
90
+ _end(event) {
91
+ if (this._eventIsPointerPenTouch(event)) {
92
+ this._deltaX = event.clientX - this._deltaX
93
+ }
94
+
95
+ this._handleSwipe()
96
+ execute(this._config.endCallback)
97
+ }
98
+
99
+ _move(event) {
100
+ this._deltaX = event.touches && event.touches.length > 1 ?
101
+ 0 :
102
+ event.touches[0].clientX - this._deltaX
103
+ }
104
+
105
+ _handleSwipe() {
106
+ const absDeltaX = Math.abs(this._deltaX)
107
+
108
+ if (absDeltaX <= SWIPE_THRESHOLD) {
109
+ return
110
+ }
111
+
112
+ const direction = absDeltaX / this._deltaX
113
+
114
+ this._deltaX = 0
115
+
116
+ if (!direction) {
117
+ return
118
+ }
119
+
120
+ execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback)
121
+ }
122
+
123
+ _initEvents() {
124
+ if (this._supportPointerEvents) {
125
+ EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event))
126
+ EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event))
127
+
128
+ this._element.classList.add(CLASS_NAME_POINTER_EVENT)
129
+ } else {
130
+ EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event))
131
+ EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event))
132
+ EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event))
133
+ }
134
+ }
135
+
136
+ _eventIsPointerPenTouch(event) {
137
+ return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)
138
+ }
139
+
140
+ // Static
141
+ static isSupported() {
142
+ return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0
143
+ }
144
+ }
145
+
146
+ export default Swipe
@@ -0,0 +1,160 @@
1
+ /**
2
+ * --------------------------------------------------------------------------
3
+ * Bootstrap (v5.2.0-beta1): util/template-factory.js
4
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5
+ * --------------------------------------------------------------------------
6
+ */
7
+
8
+ import { DefaultAllowlist, sanitizeHtml } from './sanitizer'
9
+ import { getElement, isElement } from '../util/index'
10
+ import SelectorEngine from '../dom/selector-engine'
11
+ import Config from './config'
12
+
13
+ /**
14
+ * Constants
15
+ */
16
+
17
+ const NAME = 'TemplateFactory'
18
+
19
+ const Default = {
20
+ allowList: DefaultAllowlist,
21
+ content: {}, // { selector : text , selector2 : text2 , }
22
+ extraClass: '',
23
+ html: false,
24
+ sanitize: true,
25
+ sanitizeFn: null,
26
+ template: '<div></div>'
27
+ }
28
+
29
+ const DefaultType = {
30
+ allowList: 'object',
31
+ content: 'object',
32
+ extraClass: '(string|function)',
33
+ html: 'boolean',
34
+ sanitize: 'boolean',
35
+ sanitizeFn: '(null|function)',
36
+ template: 'string'
37
+ }
38
+
39
+ const DefaultContentType = {
40
+ entry: '(string|element|function|null)',
41
+ selector: '(string|element)'
42
+ }
43
+
44
+ /**
45
+ * Class definition
46
+ */
47
+
48
+ class TemplateFactory extends Config {
49
+ constructor(config) {
50
+ super()
51
+ this._config = this._getConfig(config)
52
+ }
53
+
54
+ // Getters
55
+ static get Default() {
56
+ return Default
57
+ }
58
+
59
+ static get DefaultType() {
60
+ return DefaultType
61
+ }
62
+
63
+ static get NAME() {
64
+ return NAME
65
+ }
66
+
67
+ // Public
68
+ getContent() {
69
+ return Object.values(this._config.content)
70
+ .map(config => this._resolvePossibleFunction(config))
71
+ .filter(Boolean)
72
+ }
73
+
74
+ hasContent() {
75
+ return this.getContent().length > 0
76
+ }
77
+
78
+ changeContent(content) {
79
+ this._checkContent(content)
80
+ this._config.content = { ...this._config.content, ...content }
81
+ return this
82
+ }
83
+
84
+ toHtml() {
85
+ const templateWrapper = document.createElement('div')
86
+ templateWrapper.innerHTML = this._maybeSanitize(this._config.template)
87
+
88
+ for (const [selector, text] of Object.entries(this._config.content)) {
89
+ this._setContent(templateWrapper, text, selector)
90
+ }
91
+
92
+ const template = templateWrapper.children[0]
93
+ const extraClass = this._resolvePossibleFunction(this._config.extraClass)
94
+
95
+ if (extraClass) {
96
+ template.classList.add(...extraClass.split(' '))
97
+ }
98
+
99
+ return template
100
+ }
101
+
102
+ // Private
103
+ _typeCheckConfig(config) {
104
+ super._typeCheckConfig(config)
105
+ this._checkContent(config.content)
106
+ }
107
+
108
+ _checkContent(arg) {
109
+ for (const [selector, content] of Object.entries(arg)) {
110
+ super._typeCheckConfig({ selector, entry: content }, DefaultContentType)
111
+ }
112
+ }
113
+
114
+ _setContent(template, content, selector) {
115
+ const templateElement = SelectorEngine.findOne(selector, template)
116
+
117
+ if (!templateElement) {
118
+ return
119
+ }
120
+
121
+ content = this._resolvePossibleFunction(content)
122
+
123
+ if (!content) {
124
+ templateElement.remove()
125
+ return
126
+ }
127
+
128
+ if (isElement(content)) {
129
+ this._putElementInTemplate(getElement(content), templateElement)
130
+ return
131
+ }
132
+
133
+ if (this._config.html) {
134
+ templateElement.innerHTML = this._maybeSanitize(content)
135
+ return
136
+ }
137
+
138
+ templateElement.textContent = content
139
+ }
140
+
141
+ _maybeSanitize(arg) {
142
+ return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg
143
+ }
144
+
145
+ _resolvePossibleFunction(arg) {
146
+ return typeof arg === 'function' ? arg(this) : arg
147
+ }
148
+
149
+ _putElementInTemplate(element, templateElement) {
150
+ if (this._config.html) {
151
+ templateElement.innerHTML = ''
152
+ templateElement.append(element)
153
+ return
154
+ }
155
+
156
+ templateElement.textContent = element.textContent
157
+ }
158
+ }
159
+
160
+ export default TemplateFactory
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@coreui/coreui",
3
3
  "description": "The most popular front-end framework for developing responsive, mobile-first projects on the web rewritten and maintained by the CoreUI Team",
4
- "version": "4.1.5",
4
+ "version": "4.2.1",
5
5
  "config": {
6
- "version_short": "4.1"
6
+ "version_short": "4.2"
7
7
  },
8
8
  "keywords": [
9
9
  "css",
@@ -19,7 +19,7 @@
19
19
  "scripts": {
20
20
  "start": "npm-run-all --parallel watch docs-serve",
21
21
  "bundlewatch": "bundlewatch --config .bundlewatch.config.json",
22
- "changelog": "auto-changelog --template build/changelog-template.hbs --commit-limit false --package --backfill-limit 0 --starting-version v4.1.5",
22
+ "changelog": "auto-changelog --template build/changelog-template.hbs --commit-limit false --package --backfill-limit 0 --starting-version v4.2.1",
23
23
  "css": "npm-run-all css-compile css-prefix css-minify",
24
24
  "css-compile": "sass --style expanded --source-map --embed-sources --no-error-css scss/:dist/css/",
25
25
  "css-lint": "npm-run-all --aggregate-output --continue-on-error --parallel css-lint-*",
@@ -57,7 +57,7 @@
57
57
  "docs-serve": "hugo server --port 9001 --disableFastRender",
58
58
  "docs-serve-only": "npx sirv-cli _gh_pages --port 9001",
59
59
  "lockfile-lint": "lockfile-lint --allowed-hosts npm --allowed-schemes https: --empty-hostname false --type npm --path package-lock.json",
60
- "update-deps": "ncu -u -x globby,karma-browserstack-launcher && npm update && echo Manually update docs/assets/js/vendor",
60
+ "update-deps": "ncu -u -x globby,karma-browserstack-launcher,karma-rollup-preprocessor && echo Manually update site/assets/js/vendor",
61
61
  "release": "npm-run-all dist release-sri docs-build release-zip*",
62
62
  "release-sri": "node build/generate-sri.js",
63
63
  "release-version": "node build/change-version.js",
@@ -83,57 +83,54 @@
83
83
  },
84
84
  "license": "MIT",
85
85
  "peerDependencies": {
86
- "@popperjs/core": "^2.11.2"
86
+ "@popperjs/core": "^2.11.5"
87
87
  },
88
88
  "devDependencies": {
89
- "@babel/cli": "^7.17.6",
90
- "@babel/core": "^7.17.5",
91
- "@babel/preset-env": "^7.16.11",
92
- "@popperjs/core": "^2.11.2",
89
+ "@babel/cli": "^7.17.10",
90
+ "@babel/core": "^7.18.5",
91
+ "@babel/preset-env": "^7.18.2",
92
+ "@popperjs/core": "^2.11.5",
93
93
  "@rollup/plugin-babel": "^5.3.1",
94
- "@rollup/plugin-commonjs": "^21.0.2",
95
- "@rollup/plugin-node-resolve": "^13.1.3",
94
+ "@rollup/plugin-commonjs": "^22.0.0",
95
+ "@rollup/plugin-node-resolve": "^13.3.0",
96
96
  "@rollup/plugin-replace": "^4.0.0",
97
- "auto-changelog": "^2.4.0",
98
- "autoprefixer": "^10.4.2",
97
+ "autoprefixer": "^10.4.7",
99
98
  "bundlewatch": "^0.3.3",
100
- "clean-css-cli": "^5.5.2",
99
+ "clean-css-cli": "^5.6.0",
101
100
  "cross-env": "^7.0.3",
102
- "eslint": "^8.10.0",
103
- "eslint-config-xo": "^0.40.0",
104
- "eslint-plugin-import": "^2.25.4",
105
- "eslint-plugin-unicorn": "^41.0.0",
106
- "find-unused-sass-variables": "^4.0.3",
107
- "glob": "^7.2.0",
108
- "globby": "^11.0.4",
101
+ "eslint": "^8.17.0",
102
+ "eslint-config-xo": "^0.41.0",
103
+ "eslint-plugin-import": "^2.26.0",
104
+ "eslint-plugin-markdown": "^2.2.1",
105
+ "eslint-plugin-unicorn": "^42.0.0",
106
+ "find-unused-sass-variables": "^4.0.4",
107
+ "globby": "^11.1.0",
109
108
  "hammer-simulator": "0.0.1",
110
- "hugo-bin": "^0.81.1",
111
- "ip": "^1.1.5",
109
+ "hugo-bin": "^0.88.2",
110
+ "ip": "^2.0.0",
112
111
  "jquery": "^3.6.0",
113
- "karma": "^6.3.17",
114
- "karma-browserstack-launcher": "1.6.0",
115
- "karma-chrome-launcher": "^3.1.0",
112
+ "karma": "^6.4.0",
113
+ "karma-browserstack-launcher": "1.4.0",
114
+ "karma-chrome-launcher": "^3.1.1",
116
115
  "karma-coverage-istanbul-reporter": "^3.0.3",
117
116
  "karma-detect-browsers": "^2.3.3",
118
117
  "karma-firefox-launcher": "^2.1.2",
119
- "karma-jasmine": "^4.0.1",
120
- "karma-jasmine-html-reporter": "^1.7.0",
121
- "karma-rollup-preprocessor": "^7.0.8",
122
- "linkinator": "^3.0.3",
123
- "lockfile-lint": "^4.6.2",
124
- "nodemon": "^2.0.15",
118
+ "karma-jasmine": "^5.0.1",
119
+ "karma-jasmine-html-reporter": "^2.0.0",
120
+ "karma-rollup-preprocessor": "7.0.7",
121
+ "lockfile-lint": "^4.7.5",
122
+ "nodemon": "^2.0.16",
125
123
  "npm-run-all": "^4.1.5",
126
- "postcss": "^8.4.7",
124
+ "postcss": "^8.4.14",
127
125
  "postcss-cli": "^9.1.0",
128
- "postcss-combine-duplicated-selectors": "^10.0.3",
129
- "rollup": "^2.69.0",
126
+ "rollup": "^2.75.6",
130
127
  "rollup-plugin-istanbul": "^3.0.0",
131
128
  "rtlcss": "^3.5.0",
132
- "sass": "^1.49.9",
129
+ "sass": "^1.52.3",
133
130
  "shelljs": "^0.8.5",
134
- "stylelint": "^14.5.3",
135
- "stylelint-config-twbs-bootstrap": "^3.0.1",
136
- "terser": "^5.12.0",
131
+ "stylelint": "^14.9.1",
132
+ "stylelint-config-twbs-bootstrap": "^4.0.0",
133
+ "terser": "^5.14.1",
137
134
  "vnu-jar": "21.10.12"
138
135
  },
139
136
  "files": [
@@ -159,7 +156,10 @@
159
156
  },
160
157
  "dependencies": {},
161
158
  "peerDependencies": {
162
- "@popperjs/core": "^2.11.2"
159
+ "@popperjs/core": "^2.11.5"
163
160
  }
161
+ },
162
+ "dependencies": {
163
+ "postcss-combine-duplicated-selectors": "^10.0.3"
164
164
  }
165
165
  }