@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
@@ -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,7 +1,7 @@
1
1
  {
2
2
  "name": "@coreui/coreui",
3
- "description": "The most popular front-end framework for developing responsive, mobile-first projects on the web rewritten and maintain by the CoreUI Team",
4
- "version": "4.1.4",
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.2.0",
5
5
  "config": {
6
6
  "version_short": "4.1"
7
7
  },
@@ -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.4",
22
+ "changelog": "auto-changelog --template build/changelog-template.hbs --commit-limit false --package --backfill-limit 0 --starting-version v4.2.0",
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
  }