insights4you-jekyll-theme 0.2.0 → 0.4.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 (276) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +110 -0
  3. data/README.md +114 -32
  4. data/_data/i4y-colors.json +218 -0
  5. data/_data/i4y-errors.json +32 -0
  6. data/_data/i4y-icons.json +1 -0
  7. data/_data/i4y-illustrations.json +20 -0
  8. data/_data/i4y-social-media.yml +24 -0
  9. data/_includes/card/profile.html +42 -0
  10. data/_includes/layout/footer.html +48 -0
  11. data/_includes/layout/head.html +79 -0
  12. data/_includes/layout/navbar-logo.html +137 -0
  13. data/_includes/layout/navbar.html +82 -0
  14. data/_includes/ui/button.html +13 -14
  15. data/_includes/ui/icon.html +24 -26
  16. data/_includes/ui/spinner.html +2 -0
  17. data/_includes/utils/banner.html +7 -0
  18. data/_includes/utils/settings.html +144 -0
  19. data/_layouts/base.html +63 -0
  20. data/_layouts/default.html +36 -11
  21. data/_sass/_bootstrap-components.scss +31 -0
  22. data/_sass/_bootstrap-config.scss +7 -0
  23. data/_sass/_bootstrap-override.scss +78 -0
  24. data/_sass/_config.scss +9 -0
  25. data/_sass/_core.scss +78 -0
  26. data/_sass/_debug.scss +49 -0
  27. data/_sass/_mixins.scss +2 -0
  28. data/_sass/_props.scss +91 -0
  29. data/_sass/_utilities-marketing.scss +209 -0
  30. data/_sass/_utilities.scss +135 -0
  31. data/_sass/_variables-dark.scss +19 -0
  32. data/_sass/_variables-marketing.scss +0 -0
  33. data/_sass/_variables.scss +1001 -0
  34. data/_sass/bootstrap/LICENSE +21 -0
  35. data/_sass/bootstrap/README.md +246 -0
  36. data/_sass/bootstrap/js/index.esm.js +19 -0
  37. data/_sass/bootstrap/js/index.umd.js +34 -0
  38. data/_sass/bootstrap/js/src/alert.js +87 -0
  39. data/_sass/bootstrap/js/src/base-component.js +85 -0
  40. data/_sass/bootstrap/js/src/button.js +72 -0
  41. data/_sass/bootstrap/js/src/carousel.js +474 -0
  42. data/_sass/bootstrap/js/src/collapse.js +297 -0
  43. data/_sass/bootstrap/js/src/dom/data.js +55 -0
  44. data/_sass/bootstrap/js/src/dom/event-handler.js +317 -0
  45. data/_sass/bootstrap/js/src/dom/manipulator.js +71 -0
  46. data/_sass/bootstrap/js/src/dom/selector-engine.js +126 -0
  47. data/_sass/bootstrap/js/src/dropdown.js +455 -0
  48. data/_sass/bootstrap/js/src/modal.js +378 -0
  49. data/_sass/bootstrap/js/src/offcanvas.js +282 -0
  50. data/_sass/bootstrap/js/src/popover.js +97 -0
  51. data/_sass/bootstrap/js/src/scrollspy.js +296 -0
  52. data/_sass/bootstrap/js/src/tab.js +315 -0
  53. data/_sass/bootstrap/js/src/toast.js +225 -0
  54. data/_sass/bootstrap/js/src/tooltip.js +633 -0
  55. data/_sass/bootstrap/js/src/util/backdrop.js +151 -0
  56. data/_sass/bootstrap/js/src/util/component-functions.js +35 -0
  57. data/_sass/bootstrap/js/src/util/config.js +65 -0
  58. data/_sass/bootstrap/js/src/util/focustrap.js +115 -0
  59. data/_sass/bootstrap/js/src/util/index.js +306 -0
  60. data/_sass/bootstrap/js/src/util/sanitizer.js +117 -0
  61. data/_sass/bootstrap/js/src/util/scrollbar.js +114 -0
  62. data/_sass/bootstrap/js/src/util/swipe.js +146 -0
  63. data/_sass/bootstrap/js/src/util/template-factory.js +160 -0
  64. data/_sass/bootstrap/package.json +184 -0
  65. data/_sass/bootstrap/scss/_accordion.scss +158 -0
  66. data/_sass/bootstrap/scss/_alert.scss +68 -0
  67. data/_sass/bootstrap/scss/_badge.scss +38 -0
  68. data/_sass/bootstrap/scss/_breadcrumb.scss +40 -0
  69. data/_sass/bootstrap/scss/_button-group.scss +142 -0
  70. data/_sass/bootstrap/scss/_buttons.scss +216 -0
  71. data/_sass/bootstrap/scss/_card.scss +239 -0
  72. data/_sass/bootstrap/scss/_carousel.scss +236 -0
  73. data/_sass/bootstrap/scss/_close.scss +63 -0
  74. data/_sass/bootstrap/scss/_containers.scss +41 -0
  75. data/_sass/bootstrap/scss/_dropdown.scss +250 -0
  76. data/_sass/bootstrap/scss/_forms.scss +9 -0
  77. data/_sass/bootstrap/scss/_functions.scss +302 -0
  78. data/_sass/bootstrap/scss/_grid.scss +39 -0
  79. data/_sass/bootstrap/scss/_helpers.scss +12 -0
  80. data/_sass/bootstrap/scss/_images.scss +42 -0
  81. data/_sass/bootstrap/scss/_list-group.scss +197 -0
  82. data/_sass/bootstrap/scss/_maps.scss +174 -0
  83. data/_sass/bootstrap/scss/_mixins.scss +42 -0
  84. data/_sass/bootstrap/scss/_modal.scss +236 -0
  85. data/_sass/bootstrap/scss/_nav.scss +197 -0
  86. data/_sass/bootstrap/scss/_navbar.scss +289 -0
  87. data/_sass/bootstrap/scss/_offcanvas.scss +143 -0
  88. data/_sass/bootstrap/scss/_pagination.scss +109 -0
  89. data/_sass/bootstrap/scss/_placeholders.scss +51 -0
  90. data/_sass/bootstrap/scss/_popover.scss +196 -0
  91. data/_sass/bootstrap/scss/_progress.scss +68 -0
  92. data/_sass/bootstrap/scss/_reboot.scss +611 -0
  93. data/_sass/bootstrap/scss/_root.scss +187 -0
  94. data/_sass/bootstrap/scss/_spinners.scss +85 -0
  95. data/_sass/bootstrap/scss/_tables.scss +171 -0
  96. data/_sass/bootstrap/scss/_toasts.scss +73 -0
  97. data/_sass/bootstrap/scss/_tooltip.scss +119 -0
  98. data/_sass/bootstrap/scss/_transitions.scss +27 -0
  99. data/_sass/bootstrap/scss/_type.scss +106 -0
  100. data/_sass/bootstrap/scss/_utilities.scss +806 -0
  101. data/_sass/bootstrap/scss/_variables-dark.scss +87 -0
  102. data/_sass/bootstrap/scss/_variables.scss +1751 -0
  103. data/_sass/bootstrap/scss/bootstrap-grid.scss +62 -0
  104. data/_sass/bootstrap/scss/bootstrap-reboot.scss +10 -0
  105. data/_sass/bootstrap/scss/bootstrap-utilities.scss +19 -0
  106. data/_sass/bootstrap/scss/bootstrap.scss +52 -0
  107. data/_sass/bootstrap/scss/forms/_floating-labels.scss +95 -0
  108. data/_sass/bootstrap/scss/forms/_form-check.scss +189 -0
  109. data/_sass/bootstrap/scss/forms/_form-control.scss +214 -0
  110. data/_sass/bootstrap/scss/forms/_form-range.scss +91 -0
  111. data/_sass/bootstrap/scss/forms/_form-select.scss +80 -0
  112. data/_sass/bootstrap/scss/forms/_form-text.scss +11 -0
  113. data/_sass/bootstrap/scss/forms/_input-group.scss +132 -0
  114. data/_sass/bootstrap/scss/forms/_labels.scss +36 -0
  115. data/_sass/bootstrap/scss/forms/_validation.scss +12 -0
  116. data/_sass/bootstrap/scss/helpers/_clearfix.scss +3 -0
  117. data/_sass/bootstrap/scss/helpers/_color-bg.scss +7 -0
  118. data/_sass/bootstrap/scss/helpers/_colored-links.scss +30 -0
  119. data/_sass/bootstrap/scss/helpers/_focus-ring.scss +5 -0
  120. data/_sass/bootstrap/scss/helpers/_icon-link.scss +25 -0
  121. data/_sass/bootstrap/scss/helpers/_position.scss +36 -0
  122. data/_sass/bootstrap/scss/helpers/_ratio.scss +26 -0
  123. data/_sass/bootstrap/scss/helpers/_stacks.scss +15 -0
  124. data/_sass/bootstrap/scss/helpers/_stretched-link.scss +15 -0
  125. data/_sass/bootstrap/scss/helpers/_text-truncation.scss +7 -0
  126. data/_sass/bootstrap/scss/helpers/_visually-hidden.scss +8 -0
  127. data/_sass/bootstrap/scss/helpers/_vr.scss +8 -0
  128. data/_sass/bootstrap/scss/mixins/_alert.scss +18 -0
  129. data/_sass/bootstrap/scss/mixins/_backdrop.scss +14 -0
  130. data/_sass/bootstrap/scss/mixins/_banner.scss +7 -0
  131. data/_sass/bootstrap/scss/mixins/_border-radius.scss +78 -0
  132. data/_sass/bootstrap/scss/mixins/_box-shadow.scss +18 -0
  133. data/_sass/bootstrap/scss/mixins/_breakpoints.scss +127 -0
  134. data/_sass/bootstrap/scss/mixins/_buttons.scss +70 -0
  135. data/_sass/bootstrap/scss/mixins/_caret.scss +69 -0
  136. data/_sass/bootstrap/scss/mixins/_clearfix.scss +9 -0
  137. data/_sass/bootstrap/scss/mixins/_color-mode.scss +21 -0
  138. data/_sass/bootstrap/scss/mixins/_color-scheme.scss +7 -0
  139. data/_sass/bootstrap/scss/mixins/_container.scss +11 -0
  140. data/_sass/bootstrap/scss/mixins/_deprecate.scss +10 -0
  141. data/_sass/bootstrap/scss/mixins/_forms.scss +163 -0
  142. data/_sass/bootstrap/scss/mixins/_gradients.scss +47 -0
  143. data/_sass/bootstrap/scss/mixins/_grid.scss +151 -0
  144. data/_sass/bootstrap/scss/mixins/_image.scss +16 -0
  145. data/_sass/bootstrap/scss/mixins/_list-group.scss +26 -0
  146. data/_sass/bootstrap/scss/mixins/_lists.scss +7 -0
  147. data/_sass/bootstrap/scss/mixins/_pagination.scss +10 -0
  148. data/_sass/bootstrap/scss/mixins/_reset-text.scss +17 -0
  149. data/_sass/bootstrap/scss/mixins/_resize.scss +6 -0
  150. data/_sass/bootstrap/scss/mixins/_table-variants.scss +24 -0
  151. data/_sass/bootstrap/scss/mixins/_text-truncate.scss +8 -0
  152. data/_sass/bootstrap/scss/mixins/_transition.scss +26 -0
  153. data/_sass/bootstrap/scss/mixins/_utilities.scss +97 -0
  154. data/_sass/bootstrap/scss/mixins/_visually-hidden.scss +33 -0
  155. data/_sass/bootstrap/scss/utilities/_api.scss +47 -0
  156. data/_sass/fonts/_webfonts.scss +15 -0
  157. data/_sass/helpers/_index.scss +143 -0
  158. data/_sass/layout/_animations.scss +63 -0
  159. data/_sass/layout/_core.scss +62 -0
  160. data/_sass/layout/_dark.scss +77 -0
  161. data/_sass/layout/_footer.scss +12 -0
  162. data/_sass/layout/_navbar.scss +392 -0
  163. data/_sass/layout/_page.scss +169 -0
  164. data/_sass/layout/_root.scss +64 -0
  165. data/_sass/marketing/_browser.scss +67 -0
  166. data/_sass/marketing/_core.scss +8 -0
  167. data/_sass/marketing/_filters.scss +0 -0
  168. data/_sass/marketing/_hero.scss +69 -0
  169. data/_sass/marketing/_pricing.scss +111 -0
  170. data/_sass/marketing/_sections.scss +124 -0
  171. data/_sass/marketing/_shape.scss +31 -0
  172. data/_sass/mixins/_functions.scss +96 -0
  173. data/_sass/mixins/_mixins.scss +68 -0
  174. data/_sass/tabler-flags.scss +2 -0
  175. data/_sass/tabler-marketing.scss +13 -0
  176. data/_sass/tabler-payments.scss +2 -0
  177. data/_sass/tabler-props.scss +1 -0
  178. data/_sass/tabler-socials.scss +2 -0
  179. data/_sass/tabler-themes.scss +121 -0
  180. data/_sass/tabler-vendors.scss +16 -0
  181. data/_sass/tabler.scss +2 -0
  182. data/_sass/ui/_accordion.scss +177 -0
  183. data/_sass/ui/_alerts.scss +99 -0
  184. data/_sass/ui/_avatars.scss +145 -0
  185. data/_sass/ui/_badges.scss +113 -0
  186. data/_sass/ui/_breadcrumbs.scss +50 -0
  187. data/_sass/ui/_button-group.scss +16 -0
  188. data/_sass/ui/_buttons.scss +261 -0
  189. data/_sass/ui/_calendars.scss +104 -0
  190. data/_sass/ui/_cards.scss +594 -0
  191. data/_sass/ui/_carousel.scss +68 -0
  192. data/_sass/ui/_charts.scss +61 -0
  193. data/_sass/ui/_chat.scss +38 -0
  194. data/_sass/ui/_chips.scss +0 -0
  195. data/_sass/ui/_close.scss +60 -0
  196. data/_sass/ui/_datagrid.scss +17 -0
  197. data/_sass/ui/_dropdowns.scss +120 -0
  198. data/_sass/ui/_empty.scss +60 -0
  199. data/_sass/ui/_flags.scss +31 -0
  200. data/_sass/ui/_forms.scss +241 -0
  201. data/_sass/ui/_grid.scss +115 -0
  202. data/_sass/ui/_icons.scss +72 -0
  203. data/_sass/ui/_images.scss +19 -0
  204. data/_sass/ui/_legend.scss +12 -0
  205. data/_sass/ui/_lists.scss +124 -0
  206. data/_sass/ui/_loaders.scss +72 -0
  207. data/_sass/ui/_login.scss +3 -0
  208. data/_sass/ui/_markdown.scss +43 -0
  209. data/_sass/ui/_modals.scss +67 -0
  210. data/_sass/ui/_nav.scss +96 -0
  211. data/_sass/ui/_offcanvas.scss +17 -0
  212. data/_sass/ui/_pagination.scss +58 -0
  213. data/_sass/ui/_payments.scss +28 -0
  214. data/_sass/ui/_placeholder.scss +9 -0
  215. data/_sass/ui/_popovers.scss +2 -0
  216. data/_sass/ui/_progress.scss +107 -0
  217. data/_sass/ui/_ribbons.scss +157 -0
  218. data/_sass/ui/_segmented.scss +101 -0
  219. data/_sass/ui/_signature.scss +15 -0
  220. data/_sass/ui/_social.scss +52 -0
  221. data/_sass/ui/_stars.scss +13 -0
  222. data/_sass/ui/_status.scss +163 -0
  223. data/_sass/ui/_steps.scss +156 -0
  224. data/_sass/ui/_switch-icon.scss +211 -0
  225. data/_sass/ui/_tables.scss +177 -0
  226. data/_sass/ui/_tags.scss +57 -0
  227. data/_sass/ui/_timeline.scss +61 -0
  228. data/_sass/ui/_toasts.scss +18 -0
  229. data/_sass/ui/_toolbar.scss +10 -0
  230. data/_sass/ui/_tracking.scss +29 -0
  231. data/_sass/ui/_type.scss +268 -0
  232. data/_sass/ui/forms/_form-check.scss +91 -0
  233. data/_sass/ui/forms/_form-colorinput.scss +54 -0
  234. data/_sass/ui/forms/_form-custom.scss +28 -0
  235. data/_sass/ui/forms/_form-icon.scss +35 -0
  236. data/_sass/ui/forms/_form-imagecheck.scss +105 -0
  237. data/_sass/ui/forms/_form-selectgroup.scss +153 -0
  238. data/_sass/ui/forms/_validation.scss +13 -0
  239. data/_sass/ui/typo/_hr.scss +77 -0
  240. data/_sass/utils/_background.scss +15 -0
  241. data/_sass/utils/_colors.scss +100 -0
  242. data/_sass/utils/_opacity.scss +7 -0
  243. data/_sass/utils/_scroll.scss +47 -0
  244. data/_sass/utils/_shadow.scss +9 -0
  245. data/_sass/utils/_sizing.scss +6 -0
  246. data/_sass/utils/_text.scss +15 -0
  247. data/_sass/vendors/_apexcharts.scss +48 -0
  248. data/_sass/vendors/_coloris.scss +72 -0
  249. data/_sass/vendors/_dropzone.scss +27 -0
  250. data/_sass/vendors/_fslightbox.scss +13 -0
  251. data/_sass/vendors/_jsvectormap.scss +47 -0
  252. data/_sass/vendors/_litepicker.scss +69 -0
  253. data/_sass/vendors/_nouislider.scss +49 -0
  254. data/_sass/vendors/_plyr.scss +3 -0
  255. data/_sass/vendors/_stars-rating.scss +22 -0
  256. data/_sass/vendors/_tinymce.scss +34 -0
  257. data/_sass/vendors/_tom-select.scss +81 -0
  258. data/_sass/vendors/_turbo.scss +3 -0
  259. data/_sass/vendors/_typed.scss +4 -0
  260. data/_sass/vendors/_wysiwyg.scss +34 -0
  261. data/assets/css/main.scss +10 -0
  262. data/assets/images/i4y-logo.jpg +0 -0
  263. data/assets/images/preview-dark.png +0 -0
  264. data/assets/js/custom.js +175 -0
  265. data/assets/js/custom.min.js +1 -0
  266. data/assets/js/theme.js +11 -30
  267. data/assets/js/theme.min.js +12 -0
  268. data/insights4you-jekyll-theme.gemspec +93 -0
  269. metadata +393 -25
  270. data/_includes/footer.html +0 -45
  271. data/_includes/head.html +0 -63
  272. data/_includes/header-logo.html +0 -179
  273. data/_includes/header-navbar.html +0 -69
  274. data/_includes/header-svg.html +0 -39
  275. data/_layouts/home.html +0 -19
  276. data/assets/css/theme.min.css +0 -90
@@ -0,0 +1,297 @@
1
+ /**
2
+ * --------------------------------------------------------------------------
3
+ * Bootstrap collapse.js
4
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5
+ * --------------------------------------------------------------------------
6
+ */
7
+
8
+ import BaseComponent from './base-component.js'
9
+ import EventHandler from './dom/event-handler.js'
10
+ import SelectorEngine from './dom/selector-engine.js'
11
+ import {
12
+ defineJQueryPlugin,
13
+ getElement,
14
+ reflow
15
+ } from './util/index.js'
16
+
17
+ /**
18
+ * Constants
19
+ */
20
+
21
+ const NAME = 'collapse'
22
+ const DATA_KEY = 'bs.collapse'
23
+ const EVENT_KEY = `.${DATA_KEY}`
24
+ const DATA_API_KEY = '.data-api'
25
+
26
+ const EVENT_SHOW = `show${EVENT_KEY}`
27
+ const EVENT_SHOWN = `shown${EVENT_KEY}`
28
+ const EVENT_HIDE = `hide${EVENT_KEY}`
29
+ const EVENT_HIDDEN = `hidden${EVENT_KEY}`
30
+ const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`
31
+
32
+ const CLASS_NAME_SHOW = 'show'
33
+ const CLASS_NAME_COLLAPSE = 'collapse'
34
+ const CLASS_NAME_COLLAPSING = 'collapsing'
35
+ const CLASS_NAME_COLLAPSED = 'collapsed'
36
+ const CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`
37
+ const CLASS_NAME_HORIZONTAL = 'collapse-horizontal'
38
+
39
+ const WIDTH = 'width'
40
+ const HEIGHT = 'height'
41
+
42
+ const SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'
43
+ const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="collapse"]'
44
+
45
+ const Default = {
46
+ parent: null,
47
+ toggle: true
48
+ }
49
+
50
+ const DefaultType = {
51
+ parent: '(null|element)',
52
+ toggle: 'boolean'
53
+ }
54
+
55
+ /**
56
+ * Class definition
57
+ */
58
+
59
+ class Collapse extends BaseComponent {
60
+ constructor(element, config) {
61
+ super(element, config)
62
+
63
+ this._isTransitioning = false
64
+ this._triggerArray = []
65
+
66
+ const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE)
67
+
68
+ for (const elem of toggleList) {
69
+ const selector = SelectorEngine.getSelectorFromElement(elem)
70
+ const filterElement = SelectorEngine.find(selector)
71
+ .filter(foundElement => foundElement === this._element)
72
+
73
+ if (selector !== null && filterElement.length) {
74
+ this._triggerArray.push(elem)
75
+ }
76
+ }
77
+
78
+ this._initializeChildren()
79
+
80
+ if (!this._config.parent) {
81
+ this._addAriaAndCollapsedClass(this._triggerArray, this._isShown())
82
+ }
83
+
84
+ if (this._config.toggle) {
85
+ this.toggle()
86
+ }
87
+ }
88
+
89
+ // Getters
90
+ static get Default() {
91
+ return Default
92
+ }
93
+
94
+ static get DefaultType() {
95
+ return DefaultType
96
+ }
97
+
98
+ static get NAME() {
99
+ return NAME
100
+ }
101
+
102
+ // Public
103
+ toggle() {
104
+ if (this._isShown()) {
105
+ this.hide()
106
+ } else {
107
+ this.show()
108
+ }
109
+ }
110
+
111
+ show() {
112
+ if (this._isTransitioning || this._isShown()) {
113
+ return
114
+ }
115
+
116
+ let activeChildren = []
117
+
118
+ // find active children
119
+ if (this._config.parent) {
120
+ activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES)
121
+ .filter(element => element !== this._element)
122
+ .map(element => Collapse.getOrCreateInstance(element, { toggle: false }))
123
+ }
124
+
125
+ if (activeChildren.length && activeChildren[0]._isTransitioning) {
126
+ return
127
+ }
128
+
129
+ const startEvent = EventHandler.trigger(this._element, EVENT_SHOW)
130
+ if (startEvent.defaultPrevented) {
131
+ return
132
+ }
133
+
134
+ for (const activeInstance of activeChildren) {
135
+ activeInstance.hide()
136
+ }
137
+
138
+ const dimension = this._getDimension()
139
+
140
+ this._element.classList.remove(CLASS_NAME_COLLAPSE)
141
+ this._element.classList.add(CLASS_NAME_COLLAPSING)
142
+
143
+ this._element.style[dimension] = 0
144
+
145
+ this._addAriaAndCollapsedClass(this._triggerArray, true)
146
+ this._isTransitioning = true
147
+
148
+ const complete = () => {
149
+ this._isTransitioning = false
150
+
151
+ this._element.classList.remove(CLASS_NAME_COLLAPSING)
152
+ this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)
153
+
154
+ this._element.style[dimension] = ''
155
+
156
+ EventHandler.trigger(this._element, EVENT_SHOWN)
157
+ }
158
+
159
+ const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)
160
+ const scrollSize = `scroll${capitalizedDimension}`
161
+
162
+ this._queueCallback(complete, this._element, true)
163
+ this._element.style[dimension] = `${this._element[scrollSize]}px`
164
+ }
165
+
166
+ hide() {
167
+ if (this._isTransitioning || !this._isShown()) {
168
+ return
169
+ }
170
+
171
+ const startEvent = EventHandler.trigger(this._element, EVENT_HIDE)
172
+ if (startEvent.defaultPrevented) {
173
+ return
174
+ }
175
+
176
+ const dimension = this._getDimension()
177
+
178
+ this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`
179
+
180
+ reflow(this._element)
181
+
182
+ this._element.classList.add(CLASS_NAME_COLLAPSING)
183
+ this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)
184
+
185
+ for (const trigger of this._triggerArray) {
186
+ const element = SelectorEngine.getElementFromSelector(trigger)
187
+
188
+ if (element && !this._isShown(element)) {
189
+ this._addAriaAndCollapsedClass([trigger], false)
190
+ }
191
+ }
192
+
193
+ this._isTransitioning = true
194
+
195
+ const complete = () => {
196
+ this._isTransitioning = false
197
+ this._element.classList.remove(CLASS_NAME_COLLAPSING)
198
+ this._element.classList.add(CLASS_NAME_COLLAPSE)
199
+ EventHandler.trigger(this._element, EVENT_HIDDEN)
200
+ }
201
+
202
+ this._element.style[dimension] = ''
203
+
204
+ this._queueCallback(complete, this._element, true)
205
+ }
206
+
207
+ _isShown(element = this._element) {
208
+ return element.classList.contains(CLASS_NAME_SHOW)
209
+ }
210
+
211
+ // Private
212
+ _configAfterMerge(config) {
213
+ config.toggle = Boolean(config.toggle) // Coerce string values
214
+ config.parent = getElement(config.parent)
215
+ return config
216
+ }
217
+
218
+ _getDimension() {
219
+ return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT
220
+ }
221
+
222
+ _initializeChildren() {
223
+ if (!this._config.parent) {
224
+ return
225
+ }
226
+
227
+ const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE)
228
+
229
+ for (const element of children) {
230
+ const selected = SelectorEngine.getElementFromSelector(element)
231
+
232
+ if (selected) {
233
+ this._addAriaAndCollapsedClass([element], this._isShown(selected))
234
+ }
235
+ }
236
+ }
237
+
238
+ _getFirstLevelChildren(selector) {
239
+ const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent)
240
+ // remove children if greater depth
241
+ return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element))
242
+ }
243
+
244
+ _addAriaAndCollapsedClass(triggerArray, isOpen) {
245
+ if (!triggerArray.length) {
246
+ return
247
+ }
248
+
249
+ for (const element of triggerArray) {
250
+ element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen)
251
+ element.setAttribute('aria-expanded', isOpen)
252
+ }
253
+ }
254
+
255
+ // Static
256
+ static jQueryInterface(config) {
257
+ const _config = {}
258
+ if (typeof config === 'string' && /show|hide/.test(config)) {
259
+ _config.toggle = false
260
+ }
261
+
262
+ return this.each(function () {
263
+ const data = Collapse.getOrCreateInstance(this, _config)
264
+
265
+ if (typeof config === 'string') {
266
+ if (typeof data[config] === 'undefined') {
267
+ throw new TypeError(`No method named "${config}"`)
268
+ }
269
+
270
+ data[config]()
271
+ }
272
+ })
273
+ }
274
+ }
275
+
276
+ /**
277
+ * Data API implementation
278
+ */
279
+
280
+ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
281
+ // preventDefault only for <a> elements (which change the URL) not inside the collapsible element
282
+ if (event.target.tagName === 'A' || (event.delegateTarget && event.delegateTarget.tagName === 'A')) {
283
+ event.preventDefault()
284
+ }
285
+
286
+ for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {
287
+ Collapse.getOrCreateInstance(element, { toggle: false }).toggle()
288
+ }
289
+ })
290
+
291
+ /**
292
+ * jQuery
293
+ */
294
+
295
+ defineJQueryPlugin(Collapse)
296
+
297
+ export default Collapse
@@ -0,0 +1,55 @@
1
+ /**
2
+ * --------------------------------------------------------------------------
3
+ * Bootstrap dom/data.js
4
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5
+ * --------------------------------------------------------------------------
6
+ */
7
+
8
+ /**
9
+ * Constants
10
+ */
11
+
12
+ const elementMap = new Map()
13
+
14
+ export default {
15
+ set(element, key, instance) {
16
+ if (!elementMap.has(element)) {
17
+ elementMap.set(element, new Map())
18
+ }
19
+
20
+ const instanceMap = elementMap.get(element)
21
+
22
+ // make it clear we only want one instance per element
23
+ // can be removed later when multiple key/instances are fine to be used
24
+ if (!instanceMap.has(key) && instanceMap.size !== 0) {
25
+ // eslint-disable-next-line no-console
26
+ console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`)
27
+ return
28
+ }
29
+
30
+ instanceMap.set(key, instance)
31
+ },
32
+
33
+ get(element, key) {
34
+ if (elementMap.has(element)) {
35
+ return elementMap.get(element).get(key) || null
36
+ }
37
+
38
+ return null
39
+ },
40
+
41
+ remove(element, key) {
42
+ if (!elementMap.has(element)) {
43
+ return
44
+ }
45
+
46
+ const instanceMap = elementMap.get(element)
47
+
48
+ instanceMap.delete(key)
49
+
50
+ // free up element references if there are no instances left for an element
51
+ if (instanceMap.size === 0) {
52
+ elementMap.delete(element)
53
+ }
54
+ }
55
+ }
@@ -0,0 +1,317 @@
1
+ /**
2
+ * --------------------------------------------------------------------------
3
+ * Bootstrap dom/event-handler.js
4
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5
+ * --------------------------------------------------------------------------
6
+ */
7
+
8
+ import { getjQuery } from '../util/index.js'
9
+
10
+ /**
11
+ * Constants
12
+ */
13
+
14
+ const namespaceRegex = /[^.]*(?=\..*)\.|.*/
15
+ const stripNameRegex = /\..*/
16
+ const stripUidRegex = /::\d+$/
17
+ const eventRegistry = {} // Events storage
18
+ let uidEvent = 1
19
+ const customEvents = {
20
+ mouseenter: 'mouseover',
21
+ mouseleave: 'mouseout'
22
+ }
23
+
24
+ const nativeEvents = new Set([
25
+ 'click',
26
+ 'dblclick',
27
+ 'mouseup',
28
+ 'mousedown',
29
+ 'contextmenu',
30
+ 'mousewheel',
31
+ 'DOMMouseScroll',
32
+ 'mouseover',
33
+ 'mouseout',
34
+ 'mousemove',
35
+ 'selectstart',
36
+ 'selectend',
37
+ 'keydown',
38
+ 'keypress',
39
+ 'keyup',
40
+ 'orientationchange',
41
+ 'touchstart',
42
+ 'touchmove',
43
+ 'touchend',
44
+ 'touchcancel',
45
+ 'pointerdown',
46
+ 'pointermove',
47
+ 'pointerup',
48
+ 'pointerleave',
49
+ 'pointercancel',
50
+ 'gesturestart',
51
+ 'gesturechange',
52
+ 'gestureend',
53
+ 'focus',
54
+ 'blur',
55
+ 'change',
56
+ 'reset',
57
+ 'select',
58
+ 'submit',
59
+ 'focusin',
60
+ 'focusout',
61
+ 'load',
62
+ 'unload',
63
+ 'beforeunload',
64
+ 'resize',
65
+ 'move',
66
+ 'DOMContentLoaded',
67
+ 'readystatechange',
68
+ 'error',
69
+ 'abort',
70
+ 'scroll'
71
+ ])
72
+
73
+ /**
74
+ * Private methods
75
+ */
76
+
77
+ function makeEventUid(element, uid) {
78
+ return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++
79
+ }
80
+
81
+ function getElementEvents(element) {
82
+ const uid = makeEventUid(element)
83
+
84
+ element.uidEvent = uid
85
+ eventRegistry[uid] = eventRegistry[uid] || {}
86
+
87
+ return eventRegistry[uid]
88
+ }
89
+
90
+ function bootstrapHandler(element, fn) {
91
+ return function handler(event) {
92
+ hydrateObj(event, { delegateTarget: element })
93
+
94
+ if (handler.oneOff) {
95
+ EventHandler.off(element, event.type, fn)
96
+ }
97
+
98
+ return fn.apply(element, [event])
99
+ }
100
+ }
101
+
102
+ function bootstrapDelegationHandler(element, selector, fn) {
103
+ return function handler(event) {
104
+ const domElements = element.querySelectorAll(selector)
105
+
106
+ for (let { target } = event; target && target !== this; target = target.parentNode) {
107
+ for (const domElement of domElements) {
108
+ if (domElement !== target) {
109
+ continue
110
+ }
111
+
112
+ hydrateObj(event, { delegateTarget: target })
113
+
114
+ if (handler.oneOff) {
115
+ EventHandler.off(element, event.type, selector, fn)
116
+ }
117
+
118
+ return fn.apply(target, [event])
119
+ }
120
+ }
121
+ }
122
+ }
123
+
124
+ function findHandler(events, callable, delegationSelector = null) {
125
+ return Object.values(events)
126
+ .find(event => event.callable === callable && event.delegationSelector === delegationSelector)
127
+ }
128
+
129
+ function normalizeParameters(originalTypeEvent, handler, delegationFunction) {
130
+ const isDelegated = typeof handler === 'string'
131
+ // TODO: tooltip passes `false` instead of selector, so we need to check
132
+ const callable = isDelegated ? delegationFunction : (handler || delegationFunction)
133
+ let typeEvent = getTypeEvent(originalTypeEvent)
134
+
135
+ if (!nativeEvents.has(typeEvent)) {
136
+ typeEvent = originalTypeEvent
137
+ }
138
+
139
+ return [isDelegated, callable, typeEvent]
140
+ }
141
+
142
+ function addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {
143
+ if (typeof originalTypeEvent !== 'string' || !element) {
144
+ return
145
+ }
146
+
147
+ let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)
148
+
149
+ // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position
150
+ // this prevents the handler from being dispatched the same way as mouseover or mouseout does
151
+ if (originalTypeEvent in customEvents) {
152
+ const wrapFunction = fn => {
153
+ return function (event) {
154
+ if (!event.relatedTarget || (event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget))) {
155
+ return fn.call(this, event)
156
+ }
157
+ }
158
+ }
159
+
160
+ callable = wrapFunction(callable)
161
+ }
162
+
163
+ const events = getElementEvents(element)
164
+ const handlers = events[typeEvent] || (events[typeEvent] = {})
165
+ const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null)
166
+
167
+ if (previousFunction) {
168
+ previousFunction.oneOff = previousFunction.oneOff && oneOff
169
+
170
+ return
171
+ }
172
+
173
+ const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''))
174
+ const fn = isDelegated ?
175
+ bootstrapDelegationHandler(element, handler, callable) :
176
+ bootstrapHandler(element, callable)
177
+
178
+ fn.delegationSelector = isDelegated ? handler : null
179
+ fn.callable = callable
180
+ fn.oneOff = oneOff
181
+ fn.uidEvent = uid
182
+ handlers[uid] = fn
183
+
184
+ element.addEventListener(typeEvent, fn, isDelegated)
185
+ }
186
+
187
+ function removeHandler(element, events, typeEvent, handler, delegationSelector) {
188
+ const fn = findHandler(events[typeEvent], handler, delegationSelector)
189
+
190
+ if (!fn) {
191
+ return
192
+ }
193
+
194
+ element.removeEventListener(typeEvent, fn, Boolean(delegationSelector))
195
+ delete events[typeEvent][fn.uidEvent]
196
+ }
197
+
198
+ function removeNamespacedHandlers(element, events, typeEvent, namespace) {
199
+ const storeElementEvent = events[typeEvent] || {}
200
+
201
+ for (const [handlerKey, event] of Object.entries(storeElementEvent)) {
202
+ if (handlerKey.includes(namespace)) {
203
+ removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)
204
+ }
205
+ }
206
+ }
207
+
208
+ function getTypeEvent(event) {
209
+ // allow to get the native events from namespaced events ('click.bs.button' --> 'click')
210
+ event = event.replace(stripNameRegex, '')
211
+ return customEvents[event] || event
212
+ }
213
+
214
+ const EventHandler = {
215
+ on(element, event, handler, delegationFunction) {
216
+ addHandler(element, event, handler, delegationFunction, false)
217
+ },
218
+
219
+ one(element, event, handler, delegationFunction) {
220
+ addHandler(element, event, handler, delegationFunction, true)
221
+ },
222
+
223
+ off(element, originalTypeEvent, handler, delegationFunction) {
224
+ if (typeof originalTypeEvent !== 'string' || !element) {
225
+ return
226
+ }
227
+
228
+ const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)
229
+ const inNamespace = typeEvent !== originalTypeEvent
230
+ const events = getElementEvents(element)
231
+ const storeElementEvent = events[typeEvent] || {}
232
+ const isNamespace = originalTypeEvent.startsWith('.')
233
+
234
+ if (typeof callable !== 'undefined') {
235
+ // Simplest case: handler is passed, remove that listener ONLY.
236
+ if (!Object.keys(storeElementEvent).length) {
237
+ return
238
+ }
239
+
240
+ removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null)
241
+ return
242
+ }
243
+
244
+ if (isNamespace) {
245
+ for (const elementEvent of Object.keys(events)) {
246
+ removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1))
247
+ }
248
+ }
249
+
250
+ for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {
251
+ const handlerKey = keyHandlers.replace(stripUidRegex, '')
252
+
253
+ if (!inNamespace || originalTypeEvent.includes(handlerKey)) {
254
+ removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)
255
+ }
256
+ }
257
+ },
258
+
259
+ trigger(element, event, args) {
260
+ if (typeof event !== 'string' || !element) {
261
+ return null
262
+ }
263
+
264
+ const $ = getjQuery()
265
+ const typeEvent = getTypeEvent(event)
266
+ const inNamespace = event !== typeEvent
267
+
268
+ let jQueryEvent = null
269
+ let bubbles = true
270
+ let nativeDispatch = true
271
+ let defaultPrevented = false
272
+
273
+ if (inNamespace && $) {
274
+ jQueryEvent = $.Event(event, args)
275
+
276
+ $(element).trigger(jQueryEvent)
277
+ bubbles = !jQueryEvent.isPropagationStopped()
278
+ nativeDispatch = !jQueryEvent.isImmediatePropagationStopped()
279
+ defaultPrevented = jQueryEvent.isDefaultPrevented()
280
+ }
281
+
282
+ const evt = hydrateObj(new Event(event, { bubbles, cancelable: true }), args)
283
+
284
+ if (defaultPrevented) {
285
+ evt.preventDefault()
286
+ }
287
+
288
+ if (nativeDispatch) {
289
+ element.dispatchEvent(evt)
290
+ }
291
+
292
+ if (evt.defaultPrevented && jQueryEvent) {
293
+ jQueryEvent.preventDefault()
294
+ }
295
+
296
+ return evt
297
+ }
298
+ }
299
+
300
+ function hydrateObj(obj, meta = {}) {
301
+ for (const [key, value] of Object.entries(meta)) {
302
+ try {
303
+ obj[key] = value
304
+ } catch {
305
+ Object.defineProperty(obj, key, {
306
+ configurable: true,
307
+ get() {
308
+ return value
309
+ }
310
+ })
311
+ }
312
+ }
313
+
314
+ return obj
315
+ }
316
+
317
+ export default EventHandler