@iamproperty/components 3.4.6 → 3.5.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 (304) hide show
  1. package/assets/bootstrap/LICENSE +22 -0
  2. package/assets/bootstrap/README.md +246 -0
  3. package/assets/bootstrap/js/src/alert.js +87 -0
  4. package/assets/bootstrap/js/src/base-component.js +85 -0
  5. package/assets/bootstrap/js/src/button.js +72 -0
  6. package/assets/bootstrap/js/src/carousel.js +475 -0
  7. package/assets/bootstrap/js/src/collapse.js +302 -0
  8. package/assets/bootstrap/js/src/dom/data.js +55 -0
  9. package/assets/bootstrap/js/src/dom/event-handler.js +320 -0
  10. package/assets/bootstrap/js/src/dom/manipulator.js +71 -0
  11. package/assets/bootstrap/js/src/dom/selector-engine.js +83 -0
  12. package/assets/bootstrap/js/src/dropdown.js +454 -0
  13. package/assets/bootstrap/js/src/modal.js +377 -0
  14. package/assets/bootstrap/js/src/offcanvas.js +283 -0
  15. package/assets/bootstrap/js/src/popover.js +97 -0
  16. package/assets/bootstrap/js/src/scrollspy.js +294 -0
  17. package/assets/bootstrap/js/src/tab.js +305 -0
  18. package/assets/bootstrap/js/src/toast.js +225 -0
  19. package/assets/bootstrap/js/src/tooltip.js +633 -0
  20. package/assets/bootstrap/js/src/util/backdrop.js +149 -0
  21. package/assets/bootstrap/js/src/util/component-functions.js +34 -0
  22. package/assets/bootstrap/js/src/util/config.js +66 -0
  23. package/assets/bootstrap/js/src/util/focustrap.js +115 -0
  24. package/assets/bootstrap/js/src/util/index.js +336 -0
  25. package/assets/bootstrap/js/src/util/sanitizer.js +118 -0
  26. package/assets/bootstrap/js/src/util/scrollbar.js +114 -0
  27. package/assets/bootstrap/js/src/util/swipe.js +146 -0
  28. package/assets/bootstrap/js/src/util/template-factory.js +160 -0
  29. package/assets/bootstrap/package.json +181 -0
  30. package/assets/bootstrap/scss/_accordion.scss +149 -0
  31. package/assets/bootstrap/scss/_alert.scss +71 -0
  32. package/assets/bootstrap/scss/_badge.scss +38 -0
  33. package/assets/bootstrap/scss/_breadcrumb.scss +40 -0
  34. package/assets/bootstrap/scss/_button-group.scss +142 -0
  35. package/assets/bootstrap/scss/_buttons.scss +207 -0
  36. package/assets/bootstrap/scss/_card.scss +234 -0
  37. package/assets/bootstrap/scss/_carousel.scss +226 -0
  38. package/assets/bootstrap/scss/_close.scss +40 -0
  39. package/assets/bootstrap/scss/_containers.scss +41 -0
  40. package/assets/bootstrap/scss/_dropdown.scss +249 -0
  41. package/assets/bootstrap/scss/_forms.scss +9 -0
  42. package/assets/bootstrap/scss/_functions.scss +302 -0
  43. package/assets/bootstrap/scss/_grid.scss +33 -0
  44. package/assets/bootstrap/scss/_helpers.scss +10 -0
  45. package/assets/bootstrap/scss/_images.scss +42 -0
  46. package/assets/bootstrap/scss/_list-group.scss +192 -0
  47. package/assets/bootstrap/scss/_maps.scss +54 -0
  48. package/assets/bootstrap/scss/_mixins.scss +43 -0
  49. package/assets/bootstrap/scss/_modal.scss +237 -0
  50. package/assets/bootstrap/scss/_nav.scss +172 -0
  51. package/assets/bootstrap/scss/_navbar.scss +278 -0
  52. package/assets/bootstrap/scss/_offcanvas.scss +144 -0
  53. package/assets/bootstrap/scss/_pagination.scss +109 -0
  54. package/assets/bootstrap/scss/_placeholders.scss +51 -0
  55. package/assets/bootstrap/scss/_popover.scss +196 -0
  56. package/assets/bootstrap/scss/_progress.scss +59 -0
  57. package/assets/bootstrap/scss/_reboot.scss +610 -0
  58. package/assets/bootstrap/scss/_root.scss +73 -0
  59. package/assets/bootstrap/scss/_spinners.scss +85 -0
  60. package/assets/bootstrap/scss/_tables.scss +164 -0
  61. package/assets/bootstrap/scss/_toasts.scss +73 -0
  62. package/assets/bootstrap/scss/_tooltip.scss +120 -0
  63. package/assets/bootstrap/scss/_transitions.scss +27 -0
  64. package/assets/bootstrap/scss/_type.scss +106 -0
  65. package/assets/bootstrap/scss/_utilities.scss +647 -0
  66. package/assets/bootstrap/scss/_variables.scss +1634 -0
  67. package/assets/bootstrap/scss/bootstrap-grid.scss +64 -0
  68. package/assets/bootstrap/scss/bootstrap-reboot.scss +9 -0
  69. package/assets/bootstrap/scss/bootstrap-utilities.scss +18 -0
  70. package/assets/bootstrap/scss/bootstrap.scss +51 -0
  71. package/assets/bootstrap/scss/forms/_floating-labels.scss +75 -0
  72. package/assets/bootstrap/scss/forms/_form-check.scss +175 -0
  73. package/assets/bootstrap/scss/forms/_form-control.scss +194 -0
  74. package/assets/bootstrap/scss/forms/_form-range.scss +91 -0
  75. package/assets/bootstrap/scss/forms/_form-select.scss +71 -0
  76. package/assets/bootstrap/scss/forms/_form-text.scss +11 -0
  77. package/assets/bootstrap/scss/forms/_input-group.scss +132 -0
  78. package/assets/bootstrap/scss/forms/_labels.scss +36 -0
  79. package/assets/bootstrap/scss/forms/_validation.scss +12 -0
  80. package/assets/bootstrap/scss/helpers/_clearfix.scss +3 -0
  81. package/assets/bootstrap/scss/helpers/_color-bg.scss +10 -0
  82. package/assets/bootstrap/scss/helpers/_colored-links.scss +12 -0
  83. package/assets/bootstrap/scss/helpers/_position.scss +36 -0
  84. package/assets/bootstrap/scss/helpers/_ratio.scss +26 -0
  85. package/assets/bootstrap/scss/helpers/_stacks.scss +15 -0
  86. package/assets/bootstrap/scss/helpers/_stretched-link.scss +15 -0
  87. package/assets/bootstrap/scss/helpers/_text-truncation.scss +7 -0
  88. package/assets/bootstrap/scss/helpers/_visually-hidden.scss +8 -0
  89. package/assets/bootstrap/scss/helpers/_vr.scss +8 -0
  90. package/assets/bootstrap/scss/mixins/_alert.scss +15 -0
  91. package/assets/bootstrap/scss/mixins/_backdrop.scss +14 -0
  92. package/assets/bootstrap/scss/mixins/_banner.scss +9 -0
  93. package/assets/bootstrap/scss/mixins/_border-radius.scss +78 -0
  94. package/assets/bootstrap/scss/mixins/_box-shadow.scss +18 -0
  95. package/assets/bootstrap/scss/mixins/_breakpoints.scss +127 -0
  96. package/assets/bootstrap/scss/mixins/_buttons.scss +70 -0
  97. package/assets/bootstrap/scss/mixins/_caret.scss +64 -0
  98. package/assets/bootstrap/scss/mixins/_clearfix.scss +9 -0
  99. package/assets/bootstrap/scss/mixins/_color-scheme.scss +7 -0
  100. package/assets/bootstrap/scss/mixins/_container.scss +11 -0
  101. package/assets/bootstrap/scss/mixins/_deprecate.scss +10 -0
  102. package/assets/bootstrap/scss/mixins/_forms.scss +152 -0
  103. package/assets/bootstrap/scss/mixins/_gradients.scss +47 -0
  104. package/assets/bootstrap/scss/mixins/_grid.scss +151 -0
  105. package/assets/bootstrap/scss/mixins/_image.scss +16 -0
  106. package/assets/bootstrap/scss/mixins/_list-group.scss +24 -0
  107. package/assets/bootstrap/scss/mixins/_lists.scss +7 -0
  108. package/assets/bootstrap/scss/mixins/_pagination.scss +10 -0
  109. package/assets/bootstrap/scss/mixins/_reset-text.scss +17 -0
  110. package/assets/bootstrap/scss/mixins/_resize.scss +6 -0
  111. package/assets/bootstrap/scss/mixins/_table-variants.scss +24 -0
  112. package/assets/bootstrap/scss/mixins/_text-truncate.scss +8 -0
  113. package/assets/bootstrap/scss/mixins/_transition.scss +26 -0
  114. package/assets/bootstrap/scss/mixins/_utilities.scss +97 -0
  115. package/assets/bootstrap/scss/mixins/_visually-hidden.scss +29 -0
  116. package/assets/bootstrap/scss/utilities/_api.scss +47 -0
  117. package/assets/bootstrap/scss/vendor/_rfs.scss +354 -0
  118. package/assets/css/components/accordion.css +1 -1
  119. package/assets/css/components/accordion.css.map +1 -1
  120. package/assets/css/components/admin-panel.css +1 -0
  121. package/assets/css/components/admin-panel.css.map +1 -0
  122. package/assets/css/components/alert.css +1 -1
  123. package/assets/css/components/alert.css.map +1 -1
  124. package/assets/css/components/applied-filters.css +1 -0
  125. package/assets/css/components/applied-filters.css.map +1 -0
  126. package/assets/css/components/card.css +1 -1
  127. package/assets/css/components/card.css.map +1 -1
  128. package/assets/css/components/carousel.css +1 -1
  129. package/assets/css/components/carousel.css.map +1 -1
  130. package/assets/css/components/charts.css +1 -1
  131. package/assets/css/components/charts.css.map +1 -1
  132. package/assets/css/components/container.css +1 -1
  133. package/assets/css/components/container.css.map +1 -1
  134. package/assets/css/components/dialog.css +1 -0
  135. package/assets/css/components/dialog.css.map +1 -0
  136. package/assets/css/components/forms.css +1 -1
  137. package/assets/css/components/forms.css.map +1 -1
  138. package/assets/css/components/header.css +1 -1
  139. package/assets/css/components/header.css.map +1 -1
  140. package/assets/css/components/lists.css +1 -1
  141. package/assets/css/components/lists.css.map +1 -1
  142. package/assets/css/components/nav.css +1 -1
  143. package/assets/css/components/nav.css.map +1 -1
  144. package/assets/css/components/pagination.css +1 -0
  145. package/assets/css/components/pagination.css.map +1 -0
  146. package/assets/css/components/property-searchbar.css +1 -1
  147. package/assets/css/components/property-searchbar.css.map +1 -1
  148. package/assets/css/components/stepper.css +1 -1
  149. package/assets/css/components/stepper.css.map +1 -1
  150. package/assets/css/components/table.css +1 -0
  151. package/assets/css/components/table.css.map +1 -0
  152. package/assets/css/components/tabs.css +1 -1
  153. package/assets/css/components/tabs.css.map +1 -1
  154. package/assets/css/components/tooltips.css +1 -1
  155. package/assets/css/components/tooltips.css.map +1 -1
  156. package/assets/css/core.min.css +1 -1
  157. package/assets/css/core.min.css.map +1 -1
  158. package/assets/css/style.min.css +1 -1
  159. package/assets/css/style.min.css.map +1 -1
  160. package/assets/js/bundle.js +18 -11
  161. package/assets/js/components/accordion/accordion.component.js +6 -0
  162. package/assets/js/components/accordion/accordion.component.min.js +3 -3
  163. package/assets/js/components/accordion/accordion.component.min.js.map +1 -1
  164. package/assets/js/components/applied-filters/applied-filters.component.js +26 -0
  165. package/assets/js/components/card/card.component.js +91 -0
  166. package/assets/js/components/card/card.component.min.js +21 -0
  167. package/assets/js/components/card/card.component.min.js.map +1 -0
  168. package/assets/js/components/filterlist/filterlist.component.js +49 -0
  169. package/assets/js/components/filterlist/filterlist.component.min.js +23 -0
  170. package/assets/js/components/filterlist/filterlist.component.min.js.map +1 -0
  171. package/assets/js/components/header/header.component.js +6 -0
  172. package/assets/js/components/header/header.component.min.js +5 -5
  173. package/assets/js/components/header/header.component.min.js.map +1 -1
  174. package/assets/js/components/pagination/pagination.component.js +34 -0
  175. package/assets/js/components/table/table.component.js +108 -0
  176. package/assets/js/components/table/table.component.min.js +24 -0
  177. package/assets/js/components/table/table.component.min.js.map +1 -0
  178. package/assets/js/components/tabs/tabs.component.js +6 -0
  179. package/assets/js/components/tabs/tabs.component.min.js +17 -0
  180. package/assets/js/components/tabs/tabs.component.min.js.map +1 -0
  181. package/assets/js/dynamic.js +7 -18
  182. package/assets/js/dynamic.min.js +2 -53
  183. package/assets/js/dynamic.min.js.map +1 -1
  184. package/assets/js/flat-components.js +27 -9
  185. package/assets/js/modules/applied-filters.js +100 -0
  186. package/assets/js/modules/data-layer.js +45 -0
  187. package/assets/js/modules/filterlist.js +32 -0
  188. package/assets/js/modules/helpers.js +102 -49
  189. package/assets/js/modules/pagination.js +33 -0
  190. package/assets/js/modules/table.js +506 -420
  191. package/assets/js/modules/tabs.js +6 -0
  192. package/assets/js/modules/youtubevideo.js +53 -61
  193. package/assets/js/scripts.bundle.js +77 -62
  194. package/assets/js/scripts.bundle.js.map +1 -1
  195. package/assets/js/scripts.bundle.min.js +2 -2
  196. package/assets/js/scripts.bundle.min.js.map +1 -1
  197. package/assets/js/tests/filterlist.spec.js +22 -0
  198. package/assets/js/tests/pagination.spec.js +15 -0
  199. package/assets/js/tests/table.spec.js +149 -0
  200. package/assets/sass/_components.scss +1 -2
  201. package/assets/sass/_corefiles.scss +20 -19
  202. package/assets/sass/_forms.scss +7 -7
  203. package/assets/sass/_functions/functions.scss +1 -1
  204. package/assets/sass/_functions/mixins.scss +19 -21
  205. package/assets/sass/_functions/utilities.scss +67 -9
  206. package/assets/sass/_functions/variables.scss +109 -55
  207. package/assets/sass/_tests/colours.spec.scss +8 -22
  208. package/assets/sass/components/accordion.scss +13 -0
  209. package/assets/sass/components/admin-panel.scss +106 -0
  210. package/assets/sass/components/alert.scss +22 -0
  211. package/assets/sass/components/applied-filters.scss +65 -0
  212. package/assets/sass/components/card.scss +177 -233
  213. package/assets/sass/components/carousel.scss +72 -0
  214. package/assets/sass/components/charts.scss +41 -1
  215. package/assets/sass/components/container.scss +8 -3
  216. package/assets/sass/components/dialog.scss +208 -0
  217. package/assets/sass/components/forms.scss +37 -5
  218. package/assets/sass/components/lists.scss +29 -0
  219. package/assets/sass/components/nav.scss +6 -2
  220. package/assets/sass/components/pagination.scss +140 -0
  221. package/assets/sass/components/stepper.scss +3 -3
  222. package/assets/sass/components/table.scss +423 -0
  223. package/assets/sass/components/tabs.scss +20 -7
  224. package/assets/sass/components/tooltips.scss +1 -1
  225. package/assets/sass/foundations/buttons.scss +366 -0
  226. package/assets/sass/foundations/icons.scss +1 -1
  227. package/assets/sass/foundations/links.scss +125 -0
  228. package/assets/sass/foundations/media.scss +1 -1
  229. package/assets/sass/foundations/reboot.scss +21 -17
  230. package/assets/sass/foundations/root.scss +9 -29
  231. package/assets/sass/foundations/type.scss +1 -1
  232. package/assets/svg/illustrations/table.svg +165 -0
  233. package/assets/ts/bundle.ts +23 -12
  234. package/assets/ts/components/accordion/accordion.component.ts +7 -0
  235. package/assets/ts/components/applied-filters/README.md +5 -0
  236. package/assets/ts/components/applied-filters/applied-filters.component.ts +33 -0
  237. package/assets/ts/components/card/README.md +22 -0
  238. package/assets/ts/components/card/card.component.ts +117 -0
  239. package/assets/ts/components/filterlist/README.md +17 -0
  240. package/assets/ts/components/filterlist/filterlist.component.ts +60 -0
  241. package/assets/ts/components/header/header.component.ts +8 -0
  242. package/assets/ts/components/pagination/README.md +11 -0
  243. package/assets/ts/components/pagination/pagination.component.ts +45 -0
  244. package/assets/ts/components/table/README.md +23 -0
  245. package/assets/ts/components/table/table.component.ts +133 -0
  246. package/assets/ts/components/tabs/tabs.component.ts +7 -0
  247. package/assets/ts/dynamic.ts +12 -19
  248. package/assets/ts/flat-components.ts +37 -9
  249. package/assets/ts/modules/applied-filters.ts +146 -0
  250. package/assets/ts/modules/data-layer.ts +58 -0
  251. package/assets/ts/modules/filterlist.ts +46 -0
  252. package/assets/ts/modules/helpers.ts +129 -58
  253. package/assets/ts/modules/pagination.ts +44 -0
  254. package/assets/ts/modules/table.ts +598 -433
  255. package/assets/ts/modules/tabs.ts +8 -1
  256. package/assets/ts/modules/youtubevideo.ts +58 -63
  257. package/assets/ts/tests/filterlist.spec.ts +29 -0
  258. package/assets/ts/tests/pagination.spec.ts +21 -0
  259. package/assets/ts/tests/table.spec.ts +194 -0
  260. package/dist/components.es.js +1267 -1295
  261. package/dist/components.umd.js +70 -65
  262. package/dist/style.css +1 -1
  263. package/package.json +8 -5
  264. package/src/components/AppliedFilters/AppliedFilters.vue +20 -0
  265. package/src/components/AppliedFilters/README.md +5 -0
  266. package/src/components/Card/Card.vue +11 -112
  267. package/src/components/Card/README.md +16 -18
  268. package/src/components/Carousel/Carousel.vue +49 -10
  269. package/src/components/Chart/Chart.vue +46 -4
  270. package/src/components/Filterlist/Filterlist.vue +20 -0
  271. package/src/components/Filterlist/README.md +17 -0
  272. package/src/components/Pagination/Pagination.vue +30 -0
  273. package/src/components/Pagination/README.md +11 -0
  274. package/src/components/Table/README.md +29 -44
  275. package/src/components/Table/Table.spec.js +5 -37
  276. package/src/components/Table/Table.vue +16 -91
  277. package/src/foundations/YoutubeVideo/YoutubeVideo.vue +1 -1
  278. package/src/index.js +3 -2
  279. package/assets/css/components/buttons.css +0 -1
  280. package/assets/css/components/buttons.css.map +0 -1
  281. package/assets/css/components/cardDeck.css +0 -1
  282. package/assets/css/components/cardDeck.css.map +0 -1
  283. package/assets/css/components/links.css +0 -1
  284. package/assets/css/components/links.css.map +0 -1
  285. package/assets/css/components/modal.css +0 -1
  286. package/assets/css/components/modal.css.map +0 -1
  287. package/assets/css/components/panel.css +0 -1
  288. package/assets/css/components/panel.css.map +0 -1
  289. package/assets/css/components/tables.css +0 -1
  290. package/assets/css/components/tables.css.map +0 -1
  291. package/assets/js/modules/modal.js +0 -69
  292. package/assets/sass/components/buttons.scss +0 -252
  293. package/assets/sass/components/cardDeck.scss +0 -108
  294. package/assets/sass/components/links.scss +0 -99
  295. package/assets/sass/components/modal.scss +0 -136
  296. package/assets/sass/components/panel.scss +0 -161
  297. package/assets/sass/components/tables.scss +0 -291
  298. package/assets/ts/modules/modal.ts +0 -91
  299. package/src/components/CardDeck/CardDeck.spec.js +0 -99
  300. package/src/components/CardDeck/CardDeck.vue +0 -77
  301. package/src/components/CardDeck/README.md +0 -25
  302. package/src/components/Modal/Modal.spec.js +0 -22
  303. package/src/components/Modal/Modal.vue +0 -43
  304. package/src/components/Modal/README.md +0 -20
@@ -0,0 +1,475 @@
1
+ /**
2
+ * --------------------------------------------------------------------------
3
+ * Bootstrap (v5.2.3): carousel.js
4
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5
+ * --------------------------------------------------------------------------
6
+ */
7
+
8
+ import {
9
+ defineJQueryPlugin,
10
+ getElementFromSelector,
11
+ getNextActiveElement,
12
+ isRTL,
13
+ isVisible,
14
+ reflow,
15
+ triggerTransitionEnd
16
+ } from './util/index'
17
+ import EventHandler from './dom/event-handler'
18
+ import Manipulator from './dom/manipulator'
19
+ import SelectorEngine from './dom/selector-engine'
20
+ import Swipe from './util/swipe'
21
+ import BaseComponent from './base-component'
22
+
23
+ /**
24
+ * Constants
25
+ */
26
+
27
+ const NAME = 'carousel'
28
+ const DATA_KEY = 'bs.carousel'
29
+ const EVENT_KEY = `.${DATA_KEY}`
30
+ const DATA_API_KEY = '.data-api'
31
+
32
+ const ARROW_LEFT_KEY = 'ArrowLeft'
33
+ const ARROW_RIGHT_KEY = 'ArrowRight'
34
+ const TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch
35
+
36
+ const ORDER_NEXT = 'next'
37
+ const ORDER_PREV = 'prev'
38
+ const DIRECTION_LEFT = 'left'
39
+ const DIRECTION_RIGHT = 'right'
40
+
41
+ const EVENT_SLIDE = `slide${EVENT_KEY}`
42
+ const EVENT_SLID = `slid${EVENT_KEY}`
43
+ const EVENT_KEYDOWN = `keydown${EVENT_KEY}`
44
+ const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`
45
+ const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`
46
+ const EVENT_DRAG_START = `dragstart${EVENT_KEY}`
47
+ const EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`
48
+ const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`
49
+
50
+ const CLASS_NAME_CAROUSEL = 'carousel'
51
+ const CLASS_NAME_ACTIVE = 'active'
52
+ const CLASS_NAME_SLIDE = 'slide'
53
+ const CLASS_NAME_END = 'carousel-item-end'
54
+ const CLASS_NAME_START = 'carousel-item-start'
55
+ const CLASS_NAME_NEXT = 'carousel-item-next'
56
+ const CLASS_NAME_PREV = 'carousel-item-prev'
57
+
58
+ const SELECTOR_ACTIVE = '.active'
59
+ const SELECTOR_ITEM = '.carousel-item'
60
+ const SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM
61
+ const SELECTOR_ITEM_IMG = '.carousel-item img'
62
+ const SELECTOR_INDICATORS = '.carousel-indicators'
63
+ const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]'
64
+ const SELECTOR_DATA_RIDE = '[data-bs-ride="carousel"]'
65
+
66
+ const KEY_TO_DIRECTION = {
67
+ [ARROW_LEFT_KEY]: DIRECTION_RIGHT,
68
+ [ARROW_RIGHT_KEY]: DIRECTION_LEFT
69
+ }
70
+
71
+ const Default = {
72
+ interval: 5000,
73
+ keyboard: true,
74
+ pause: 'hover',
75
+ ride: false,
76
+ touch: true,
77
+ wrap: true
78
+ }
79
+
80
+ const DefaultType = {
81
+ interval: '(number|boolean)', // TODO:v6 remove boolean support
82
+ keyboard: 'boolean',
83
+ pause: '(string|boolean)',
84
+ ride: '(boolean|string)',
85
+ touch: 'boolean',
86
+ wrap: 'boolean'
87
+ }
88
+
89
+ /**
90
+ * Class definition
91
+ */
92
+
93
+ class Carousel extends BaseComponent {
94
+ constructor(element, config) {
95
+ super(element, config)
96
+
97
+ this._interval = null
98
+ this._activeElement = null
99
+ this._isSliding = false
100
+ this.touchTimeout = null
101
+ this._swipeHelper = null
102
+
103
+ this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element)
104
+ this._addEventListeners()
105
+
106
+ if (this._config.ride === CLASS_NAME_CAROUSEL) {
107
+ this.cycle()
108
+ }
109
+ }
110
+
111
+ // Getters
112
+ static get Default() {
113
+ return Default
114
+ }
115
+
116
+ static get DefaultType() {
117
+ return DefaultType
118
+ }
119
+
120
+ static get NAME() {
121
+ return NAME
122
+ }
123
+
124
+ // Public
125
+ next() {
126
+ this._slide(ORDER_NEXT)
127
+ }
128
+
129
+ nextWhenVisible() {
130
+ // FIXME TODO use `document.visibilityState`
131
+ // Don't call next when the page isn't visible
132
+ // or the carousel or its parent isn't visible
133
+ if (!document.hidden && isVisible(this._element)) {
134
+ this.next()
135
+ }
136
+ }
137
+
138
+ prev() {
139
+ this._slide(ORDER_PREV)
140
+ }
141
+
142
+ pause() {
143
+ if (this._isSliding) {
144
+ triggerTransitionEnd(this._element)
145
+ }
146
+
147
+ this._clearInterval()
148
+ }
149
+
150
+ cycle() {
151
+ this._clearInterval()
152
+ this._updateInterval()
153
+
154
+ this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval)
155
+ }
156
+
157
+ _maybeEnableCycle() {
158
+ if (!this._config.ride) {
159
+ return
160
+ }
161
+
162
+ if (this._isSliding) {
163
+ EventHandler.one(this._element, EVENT_SLID, () => this.cycle())
164
+ return
165
+ }
166
+
167
+ this.cycle()
168
+ }
169
+
170
+ to(index) {
171
+ const items = this._getItems()
172
+ if (index > items.length - 1 || index < 0) {
173
+ return
174
+ }
175
+
176
+ if (this._isSliding) {
177
+ EventHandler.one(this._element, EVENT_SLID, () => this.to(index))
178
+ return
179
+ }
180
+
181
+ const activeIndex = this._getItemIndex(this._getActive())
182
+ if (activeIndex === index) {
183
+ return
184
+ }
185
+
186
+ const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV
187
+
188
+ this._slide(order, items[index])
189
+ }
190
+
191
+ dispose() {
192
+ if (this._swipeHelper) {
193
+ this._swipeHelper.dispose()
194
+ }
195
+
196
+ super.dispose()
197
+ }
198
+
199
+ // Private
200
+ _configAfterMerge(config) {
201
+ config.defaultInterval = config.interval
202
+ return config
203
+ }
204
+
205
+ _addEventListeners() {
206
+ if (this._config.keyboard) {
207
+ EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))
208
+ }
209
+
210
+ if (this._config.pause === 'hover') {
211
+ EventHandler.on(this._element, EVENT_MOUSEENTER, () => this.pause())
212
+ EventHandler.on(this._element, EVENT_MOUSELEAVE, () => this._maybeEnableCycle())
213
+ }
214
+
215
+ if (this._config.touch && Swipe.isSupported()) {
216
+ this._addTouchEventListeners()
217
+ }
218
+ }
219
+
220
+ _addTouchEventListeners() {
221
+ for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {
222
+ EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault())
223
+ }
224
+
225
+ const endCallBack = () => {
226
+ if (this._config.pause !== 'hover') {
227
+ return
228
+ }
229
+
230
+ // If it's a touch-enabled device, mouseenter/leave are fired as
231
+ // part of the mouse compatibility events on first tap - the carousel
232
+ // would stop cycling until user tapped out of it;
233
+ // here, we listen for touchend, explicitly pause the carousel
234
+ // (as if it's the second time we tap on it, mouseenter compat event
235
+ // is NOT fired) and after a timeout (to allow for mouse compatibility
236
+ // events to fire) we explicitly restart cycling
237
+
238
+ this.pause()
239
+ if (this.touchTimeout) {
240
+ clearTimeout(this.touchTimeout)
241
+ }
242
+
243
+ this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval)
244
+ }
245
+
246
+ const swipeConfig = {
247
+ leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),
248
+ rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),
249
+ endCallback: endCallBack
250
+ }
251
+
252
+ this._swipeHelper = new Swipe(this._element, swipeConfig)
253
+ }
254
+
255
+ _keydown(event) {
256
+ if (/input|textarea/i.test(event.target.tagName)) {
257
+ return
258
+ }
259
+
260
+ const direction = KEY_TO_DIRECTION[event.key]
261
+ if (direction) {
262
+ event.preventDefault()
263
+ this._slide(this._directionToOrder(direction))
264
+ }
265
+ }
266
+
267
+ _getItemIndex(element) {
268
+ return this._getItems().indexOf(element)
269
+ }
270
+
271
+ _setActiveIndicatorElement(index) {
272
+ if (!this._indicatorsElement) {
273
+ return
274
+ }
275
+
276
+ const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement)
277
+
278
+ activeIndicator.classList.remove(CLASS_NAME_ACTIVE)
279
+ activeIndicator.removeAttribute('aria-current')
280
+
281
+ const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to="${index}"]`, this._indicatorsElement)
282
+
283
+ if (newActiveIndicator) {
284
+ newActiveIndicator.classList.add(CLASS_NAME_ACTIVE)
285
+ newActiveIndicator.setAttribute('aria-current', 'true')
286
+ }
287
+ }
288
+
289
+ _updateInterval() {
290
+ const element = this._activeElement || this._getActive()
291
+
292
+ if (!element) {
293
+ return
294
+ }
295
+
296
+ const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10)
297
+
298
+ this._config.interval = elementInterval || this._config.defaultInterval
299
+ }
300
+
301
+ _slide(order, element = null) {
302
+ if (this._isSliding) {
303
+ return
304
+ }
305
+
306
+ const activeElement = this._getActive()
307
+ const isNext = order === ORDER_NEXT
308
+ const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap)
309
+
310
+ if (nextElement === activeElement) {
311
+ return
312
+ }
313
+
314
+ const nextElementIndex = this._getItemIndex(nextElement)
315
+
316
+ const triggerEvent = eventName => {
317
+ return EventHandler.trigger(this._element, eventName, {
318
+ relatedTarget: nextElement,
319
+ direction: this._orderToDirection(order),
320
+ from: this._getItemIndex(activeElement),
321
+ to: nextElementIndex
322
+ })
323
+ }
324
+
325
+ const slideEvent = triggerEvent(EVENT_SLIDE)
326
+
327
+ if (slideEvent.defaultPrevented) {
328
+ return
329
+ }
330
+
331
+ if (!activeElement || !nextElement) {
332
+ // Some weirdness is happening, so we bail
333
+ // todo: change tests that use empty divs to avoid this check
334
+ return
335
+ }
336
+
337
+ const isCycling = Boolean(this._interval)
338
+ this.pause()
339
+
340
+ this._isSliding = true
341
+
342
+ this._setActiveIndicatorElement(nextElementIndex)
343
+ this._activeElement = nextElement
344
+
345
+ const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END
346
+ const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV
347
+
348
+ nextElement.classList.add(orderClassName)
349
+
350
+ reflow(nextElement)
351
+
352
+ activeElement.classList.add(directionalClassName)
353
+ nextElement.classList.add(directionalClassName)
354
+
355
+ const completeCallBack = () => {
356
+ nextElement.classList.remove(directionalClassName, orderClassName)
357
+ nextElement.classList.add(CLASS_NAME_ACTIVE)
358
+
359
+ activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName)
360
+
361
+ this._isSliding = false
362
+
363
+ triggerEvent(EVENT_SLID)
364
+ }
365
+
366
+ this._queueCallback(completeCallBack, activeElement, this._isAnimated())
367
+
368
+ if (isCycling) {
369
+ this.cycle()
370
+ }
371
+ }
372
+
373
+ _isAnimated() {
374
+ return this._element.classList.contains(CLASS_NAME_SLIDE)
375
+ }
376
+
377
+ _getActive() {
378
+ return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)
379
+ }
380
+
381
+ _getItems() {
382
+ return SelectorEngine.find(SELECTOR_ITEM, this._element)
383
+ }
384
+
385
+ _clearInterval() {
386
+ if (this._interval) {
387
+ clearInterval(this._interval)
388
+ this._interval = null
389
+ }
390
+ }
391
+
392
+ _directionToOrder(direction) {
393
+ if (isRTL()) {
394
+ return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT
395
+ }
396
+
397
+ return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV
398
+ }
399
+
400
+ _orderToDirection(order) {
401
+ if (isRTL()) {
402
+ return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT
403
+ }
404
+
405
+ return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT
406
+ }
407
+
408
+ // Static
409
+ static jQueryInterface(config) {
410
+ return this.each(function () {
411
+ const data = Carousel.getOrCreateInstance(this, config)
412
+
413
+ if (typeof config === 'number') {
414
+ data.to(config)
415
+ return
416
+ }
417
+
418
+ if (typeof config === 'string') {
419
+ if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
420
+ throw new TypeError(`No method named "${config}"`)
421
+ }
422
+
423
+ data[config]()
424
+ }
425
+ })
426
+ }
427
+ }
428
+
429
+ /**
430
+ * Data API implementation
431
+ */
432
+
433
+ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (event) {
434
+ const target = getElementFromSelector(this)
435
+
436
+ if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {
437
+ return
438
+ }
439
+
440
+ event.preventDefault()
441
+
442
+ const carousel = Carousel.getOrCreateInstance(target)
443
+ const slideIndex = this.getAttribute('data-bs-slide-to')
444
+
445
+ if (slideIndex) {
446
+ carousel.to(slideIndex)
447
+ carousel._maybeEnableCycle()
448
+ return
449
+ }
450
+
451
+ if (Manipulator.getDataAttribute(this, 'slide') === 'next') {
452
+ carousel.next()
453
+ carousel._maybeEnableCycle()
454
+ return
455
+ }
456
+
457
+ carousel.prev()
458
+ carousel._maybeEnableCycle()
459
+ })
460
+
461
+ EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
462
+ const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE)
463
+
464
+ for (const carousel of carousels) {
465
+ Carousel.getOrCreateInstance(carousel)
466
+ }
467
+ })
468
+
469
+ /**
470
+ * jQuery
471
+ */
472
+
473
+ defineJQueryPlugin(Carousel)
474
+
475
+ export default Carousel