@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,377 @@
1
+ /**
2
+ * --------------------------------------------------------------------------
3
+ * Bootstrap (v5.2.3): modal.js
4
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5
+ * --------------------------------------------------------------------------
6
+ */
7
+
8
+ import { defineJQueryPlugin, getElementFromSelector, isRTL, isVisible, reflow } from './util/index'
9
+ import EventHandler from './dom/event-handler'
10
+ import SelectorEngine from './dom/selector-engine'
11
+ import ScrollBarHelper from './util/scrollbar'
12
+ import BaseComponent from './base-component'
13
+ import Backdrop from './util/backdrop'
14
+ import FocusTrap from './util/focustrap'
15
+ import { enableDismissTrigger } from './util/component-functions'
16
+
17
+ /**
18
+ * Constants
19
+ */
20
+
21
+ const NAME = 'modal'
22
+ const DATA_KEY = 'bs.modal'
23
+ const EVENT_KEY = `.${DATA_KEY}`
24
+ const DATA_API_KEY = '.data-api'
25
+ const ESCAPE_KEY = 'Escape'
26
+
27
+ const EVENT_HIDE = `hide${EVENT_KEY}`
28
+ const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`
29
+ const EVENT_HIDDEN = `hidden${EVENT_KEY}`
30
+ const EVENT_SHOW = `show${EVENT_KEY}`
31
+ const EVENT_SHOWN = `shown${EVENT_KEY}`
32
+ const EVENT_RESIZE = `resize${EVENT_KEY}`
33
+ const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`
34
+ const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`
35
+ const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`
36
+ const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`
37
+
38
+ const CLASS_NAME_OPEN = 'modal-open'
39
+ const CLASS_NAME_FADE = 'fade'
40
+ const CLASS_NAME_SHOW = 'show'
41
+ const CLASS_NAME_STATIC = 'modal-static'
42
+
43
+ const OPEN_SELECTOR = '.modal.show'
44
+ const SELECTOR_DIALOG = '.modal-dialog'
45
+ const SELECTOR_MODAL_BODY = '.modal-body'
46
+ const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="modal"]'
47
+
48
+ const Default = {
49
+ backdrop: true,
50
+ focus: true,
51
+ keyboard: true
52
+ }
53
+
54
+ const DefaultType = {
55
+ backdrop: '(boolean|string)',
56
+ focus: 'boolean',
57
+ keyboard: 'boolean'
58
+ }
59
+
60
+ /**
61
+ * Class definition
62
+ */
63
+
64
+ class Modal extends BaseComponent {
65
+ constructor(element, config) {
66
+ super(element, config)
67
+
68
+ this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element)
69
+ this._backdrop = this._initializeBackDrop()
70
+ this._focustrap = this._initializeFocusTrap()
71
+ this._isShown = false
72
+ this._isTransitioning = false
73
+ this._scrollBar = new ScrollBarHelper()
74
+
75
+ this._addEventListeners()
76
+ }
77
+
78
+ // Getters
79
+ static get Default() {
80
+ return Default
81
+ }
82
+
83
+ static get DefaultType() {
84
+ return DefaultType
85
+ }
86
+
87
+ static get NAME() {
88
+ return NAME
89
+ }
90
+
91
+ // Public
92
+ toggle(relatedTarget) {
93
+ return this._isShown ? this.hide() : this.show(relatedTarget)
94
+ }
95
+
96
+ show(relatedTarget) {
97
+ if (this._isShown || this._isTransitioning) {
98
+ return
99
+ }
100
+
101
+ const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {
102
+ relatedTarget
103
+ })
104
+
105
+ if (showEvent.defaultPrevented) {
106
+ return
107
+ }
108
+
109
+ this._isShown = true
110
+ this._isTransitioning = true
111
+
112
+ this._scrollBar.hide()
113
+
114
+ document.body.classList.add(CLASS_NAME_OPEN)
115
+
116
+ this._adjustDialog()
117
+
118
+ this._backdrop.show(() => this._showElement(relatedTarget))
119
+ }
120
+
121
+ hide() {
122
+ if (!this._isShown || this._isTransitioning) {
123
+ return
124
+ }
125
+
126
+ const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)
127
+
128
+ if (hideEvent.defaultPrevented) {
129
+ return
130
+ }
131
+
132
+ this._isShown = false
133
+ this._isTransitioning = true
134
+ this._focustrap.deactivate()
135
+
136
+ this._element.classList.remove(CLASS_NAME_SHOW)
137
+
138
+ this._queueCallback(() => this._hideModal(), this._element, this._isAnimated())
139
+ }
140
+
141
+ dispose() {
142
+ for (const htmlElement of [window, this._dialog]) {
143
+ EventHandler.off(htmlElement, EVENT_KEY)
144
+ }
145
+
146
+ this._backdrop.dispose()
147
+ this._focustrap.deactivate()
148
+ super.dispose()
149
+ }
150
+
151
+ handleUpdate() {
152
+ this._adjustDialog()
153
+ }
154
+
155
+ // Private
156
+ _initializeBackDrop() {
157
+ return new Backdrop({
158
+ isVisible: Boolean(this._config.backdrop), // 'static' option will be translated to true, and booleans will keep their value,
159
+ isAnimated: this._isAnimated()
160
+ })
161
+ }
162
+
163
+ _initializeFocusTrap() {
164
+ return new FocusTrap({
165
+ trapElement: this._element
166
+ })
167
+ }
168
+
169
+ _showElement(relatedTarget) {
170
+ // try to append dynamic modal
171
+ if (!document.body.contains(this._element)) {
172
+ document.body.append(this._element)
173
+ }
174
+
175
+ this._element.style.display = 'block'
176
+ this._element.removeAttribute('aria-hidden')
177
+ this._element.setAttribute('aria-modal', true)
178
+ this._element.setAttribute('role', 'dialog')
179
+ this._element.scrollTop = 0
180
+
181
+ const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog)
182
+ if (modalBody) {
183
+ modalBody.scrollTop = 0
184
+ }
185
+
186
+ reflow(this._element)
187
+
188
+ this._element.classList.add(CLASS_NAME_SHOW)
189
+
190
+ const transitionComplete = () => {
191
+ if (this._config.focus) {
192
+ this._focustrap.activate()
193
+ }
194
+
195
+ this._isTransitioning = false
196
+ EventHandler.trigger(this._element, EVENT_SHOWN, {
197
+ relatedTarget
198
+ })
199
+ }
200
+
201
+ this._queueCallback(transitionComplete, this._dialog, this._isAnimated())
202
+ }
203
+
204
+ _addEventListeners() {
205
+ EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {
206
+ if (event.key !== ESCAPE_KEY) {
207
+ return
208
+ }
209
+
210
+ if (this._config.keyboard) {
211
+ event.preventDefault()
212
+ this.hide()
213
+ return
214
+ }
215
+
216
+ this._triggerBackdropTransition()
217
+ })
218
+
219
+ EventHandler.on(window, EVENT_RESIZE, () => {
220
+ if (this._isShown && !this._isTransitioning) {
221
+ this._adjustDialog()
222
+ }
223
+ })
224
+
225
+ EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {
226
+ // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks
227
+ EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {
228
+ if (this._element !== event.target || this._element !== event2.target) {
229
+ return
230
+ }
231
+
232
+ if (this._config.backdrop === 'static') {
233
+ this._triggerBackdropTransition()
234
+ return
235
+ }
236
+
237
+ if (this._config.backdrop) {
238
+ this.hide()
239
+ }
240
+ })
241
+ })
242
+ }
243
+
244
+ _hideModal() {
245
+ this._element.style.display = 'none'
246
+ this._element.setAttribute('aria-hidden', true)
247
+ this._element.removeAttribute('aria-modal')
248
+ this._element.removeAttribute('role')
249
+ this._isTransitioning = false
250
+
251
+ this._backdrop.hide(() => {
252
+ document.body.classList.remove(CLASS_NAME_OPEN)
253
+ this._resetAdjustments()
254
+ this._scrollBar.reset()
255
+ EventHandler.trigger(this._element, EVENT_HIDDEN)
256
+ })
257
+ }
258
+
259
+ _isAnimated() {
260
+ return this._element.classList.contains(CLASS_NAME_FADE)
261
+ }
262
+
263
+ _triggerBackdropTransition() {
264
+ const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)
265
+ if (hideEvent.defaultPrevented) {
266
+ return
267
+ }
268
+
269
+ const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight
270
+ const initialOverflowY = this._element.style.overflowY
271
+ // return if the following background transition hasn't yet completed
272
+ if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {
273
+ return
274
+ }
275
+
276
+ if (!isModalOverflowing) {
277
+ this._element.style.overflowY = 'hidden'
278
+ }
279
+
280
+ this._element.classList.add(CLASS_NAME_STATIC)
281
+ this._queueCallback(() => {
282
+ this._element.classList.remove(CLASS_NAME_STATIC)
283
+ this._queueCallback(() => {
284
+ this._element.style.overflowY = initialOverflowY
285
+ }, this._dialog)
286
+ }, this._dialog)
287
+
288
+ this._element.focus()
289
+ }
290
+
291
+ /**
292
+ * The following methods are used to handle overflowing modals
293
+ */
294
+
295
+ _adjustDialog() {
296
+ const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight
297
+ const scrollbarWidth = this._scrollBar.getWidth()
298
+ const isBodyOverflowing = scrollbarWidth > 0
299
+
300
+ if (isBodyOverflowing && !isModalOverflowing) {
301
+ const property = isRTL() ? 'paddingLeft' : 'paddingRight'
302
+ this._element.style[property] = `${scrollbarWidth}px`
303
+ }
304
+
305
+ if (!isBodyOverflowing && isModalOverflowing) {
306
+ const property = isRTL() ? 'paddingRight' : 'paddingLeft'
307
+ this._element.style[property] = `${scrollbarWidth}px`
308
+ }
309
+ }
310
+
311
+ _resetAdjustments() {
312
+ this._element.style.paddingLeft = ''
313
+ this._element.style.paddingRight = ''
314
+ }
315
+
316
+ // Static
317
+ static jQueryInterface(config, relatedTarget) {
318
+ return this.each(function () {
319
+ const data = Modal.getOrCreateInstance(this, config)
320
+
321
+ if (typeof config !== 'string') {
322
+ return
323
+ }
324
+
325
+ if (typeof data[config] === 'undefined') {
326
+ throw new TypeError(`No method named "${config}"`)
327
+ }
328
+
329
+ data[config](relatedTarget)
330
+ })
331
+ }
332
+ }
333
+
334
+ /**
335
+ * Data API implementation
336
+ */
337
+
338
+ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
339
+ const target = getElementFromSelector(this)
340
+
341
+ if (['A', 'AREA'].includes(this.tagName)) {
342
+ event.preventDefault()
343
+ }
344
+
345
+ EventHandler.one(target, EVENT_SHOW, showEvent => {
346
+ if (showEvent.defaultPrevented) {
347
+ // only register focus restorer if modal will actually get shown
348
+ return
349
+ }
350
+
351
+ EventHandler.one(target, EVENT_HIDDEN, () => {
352
+ if (isVisible(this)) {
353
+ this.focus()
354
+ }
355
+ })
356
+ })
357
+
358
+ // avoid conflict when clicking modal toggler while another one is open
359
+ const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)
360
+ if (alreadyOpen) {
361
+ Modal.getInstance(alreadyOpen).hide()
362
+ }
363
+
364
+ const data = Modal.getOrCreateInstance(target)
365
+
366
+ data.toggle(this)
367
+ })
368
+
369
+ enableDismissTrigger(Modal)
370
+
371
+ /**
372
+ * jQuery
373
+ */
374
+
375
+ defineJQueryPlugin(Modal)
376
+
377
+ export default Modal
@@ -0,0 +1,283 @@
1
+ /**
2
+ * --------------------------------------------------------------------------
3
+ * Bootstrap (v5.2.3): offcanvas.js
4
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5
+ * --------------------------------------------------------------------------
6
+ */
7
+
8
+ import {
9
+ defineJQueryPlugin,
10
+ getElementFromSelector,
11
+ isDisabled,
12
+ isVisible
13
+ } from './util/index'
14
+ import ScrollBarHelper from './util/scrollbar'
15
+ import EventHandler from './dom/event-handler'
16
+ import BaseComponent from './base-component'
17
+ import SelectorEngine from './dom/selector-engine'
18
+ import Backdrop from './util/backdrop'
19
+ import FocusTrap from './util/focustrap'
20
+ import { enableDismissTrigger } from './util/component-functions'
21
+
22
+ /**
23
+ * Constants
24
+ */
25
+
26
+ const NAME = 'offcanvas'
27
+ const DATA_KEY = 'bs.offcanvas'
28
+ const EVENT_KEY = `.${DATA_KEY}`
29
+ const DATA_API_KEY = '.data-api'
30
+ const EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`
31
+ const ESCAPE_KEY = 'Escape'
32
+
33
+ const CLASS_NAME_SHOW = 'show'
34
+ const CLASS_NAME_SHOWING = 'showing'
35
+ const CLASS_NAME_HIDING = 'hiding'
36
+ const CLASS_NAME_BACKDROP = 'offcanvas-backdrop'
37
+ const OPEN_SELECTOR = '.offcanvas.show'
38
+
39
+ const EVENT_SHOW = `show${EVENT_KEY}`
40
+ const EVENT_SHOWN = `shown${EVENT_KEY}`
41
+ const EVENT_HIDE = `hide${EVENT_KEY}`
42
+ const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`
43
+ const EVENT_HIDDEN = `hidden${EVENT_KEY}`
44
+ const EVENT_RESIZE = `resize${EVENT_KEY}`
45
+ const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`
46
+ const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`
47
+
48
+ const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="offcanvas"]'
49
+
50
+ const Default = {
51
+ backdrop: true,
52
+ keyboard: true,
53
+ scroll: false
54
+ }
55
+
56
+ const DefaultType = {
57
+ backdrop: '(boolean|string)',
58
+ keyboard: 'boolean',
59
+ scroll: 'boolean'
60
+ }
61
+
62
+ /**
63
+ * Class definition
64
+ */
65
+
66
+ class Offcanvas extends BaseComponent {
67
+ constructor(element, config) {
68
+ super(element, config)
69
+
70
+ this._isShown = false
71
+ this._backdrop = this._initializeBackDrop()
72
+ this._focustrap = this._initializeFocusTrap()
73
+ this._addEventListeners()
74
+ }
75
+
76
+ // Getters
77
+ static get Default() {
78
+ return Default
79
+ }
80
+
81
+ static get DefaultType() {
82
+ return DefaultType
83
+ }
84
+
85
+ static get NAME() {
86
+ return NAME
87
+ }
88
+
89
+ // Public
90
+ toggle(relatedTarget) {
91
+ return this._isShown ? this.hide() : this.show(relatedTarget)
92
+ }
93
+
94
+ show(relatedTarget) {
95
+ if (this._isShown) {
96
+ return
97
+ }
98
+
99
+ const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, { relatedTarget })
100
+
101
+ if (showEvent.defaultPrevented) {
102
+ return
103
+ }
104
+
105
+ this._isShown = true
106
+ this._backdrop.show()
107
+
108
+ if (!this._config.scroll) {
109
+ new ScrollBarHelper().hide()
110
+ }
111
+
112
+ this._element.setAttribute('aria-modal', true)
113
+ this._element.setAttribute('role', 'dialog')
114
+ this._element.classList.add(CLASS_NAME_SHOWING)
115
+
116
+ const completeCallBack = () => {
117
+ if (!this._config.scroll || this._config.backdrop) {
118
+ this._focustrap.activate()
119
+ }
120
+
121
+ this._element.classList.add(CLASS_NAME_SHOW)
122
+ this._element.classList.remove(CLASS_NAME_SHOWING)
123
+ EventHandler.trigger(this._element, EVENT_SHOWN, { relatedTarget })
124
+ }
125
+
126
+ this._queueCallback(completeCallBack, this._element, true)
127
+ }
128
+
129
+ hide() {
130
+ if (!this._isShown) {
131
+ return
132
+ }
133
+
134
+ const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)
135
+
136
+ if (hideEvent.defaultPrevented) {
137
+ return
138
+ }
139
+
140
+ this._focustrap.deactivate()
141
+ this._element.blur()
142
+ this._isShown = false
143
+ this._element.classList.add(CLASS_NAME_HIDING)
144
+ this._backdrop.hide()
145
+
146
+ const completeCallback = () => {
147
+ this._element.classList.remove(CLASS_NAME_SHOW, CLASS_NAME_HIDING)
148
+ this._element.removeAttribute('aria-modal')
149
+ this._element.removeAttribute('role')
150
+
151
+ if (!this._config.scroll) {
152
+ new ScrollBarHelper().reset()
153
+ }
154
+
155
+ EventHandler.trigger(this._element, EVENT_HIDDEN)
156
+ }
157
+
158
+ this._queueCallback(completeCallback, this._element, true)
159
+ }
160
+
161
+ dispose() {
162
+ this._backdrop.dispose()
163
+ this._focustrap.deactivate()
164
+ super.dispose()
165
+ }
166
+
167
+ // Private
168
+ _initializeBackDrop() {
169
+ const clickCallback = () => {
170
+ if (this._config.backdrop === 'static') {
171
+ EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)
172
+ return
173
+ }
174
+
175
+ this.hide()
176
+ }
177
+
178
+ // 'static' option will be translated to true, and booleans will keep their value
179
+ const isVisible = Boolean(this._config.backdrop)
180
+
181
+ return new Backdrop({
182
+ className: CLASS_NAME_BACKDROP,
183
+ isVisible,
184
+ isAnimated: true,
185
+ rootElement: this._element.parentNode,
186
+ clickCallback: isVisible ? clickCallback : null
187
+ })
188
+ }
189
+
190
+ _initializeFocusTrap() {
191
+ return new FocusTrap({
192
+ trapElement: this._element
193
+ })
194
+ }
195
+
196
+ _addEventListeners() {
197
+ EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {
198
+ if (event.key !== ESCAPE_KEY) {
199
+ return
200
+ }
201
+
202
+ if (!this._config.keyboard) {
203
+ EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)
204
+ return
205
+ }
206
+
207
+ this.hide()
208
+ })
209
+ }
210
+
211
+ // Static
212
+ static jQueryInterface(config) {
213
+ return this.each(function () {
214
+ const data = Offcanvas.getOrCreateInstance(this, config)
215
+
216
+ if (typeof config !== 'string') {
217
+ return
218
+ }
219
+
220
+ if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
221
+ throw new TypeError(`No method named "${config}"`)
222
+ }
223
+
224
+ data[config](this)
225
+ })
226
+ }
227
+ }
228
+
229
+ /**
230
+ * Data API implementation
231
+ */
232
+
233
+ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
234
+ const target = getElementFromSelector(this)
235
+
236
+ if (['A', 'AREA'].includes(this.tagName)) {
237
+ event.preventDefault()
238
+ }
239
+
240
+ if (isDisabled(this)) {
241
+ return
242
+ }
243
+
244
+ EventHandler.one(target, EVENT_HIDDEN, () => {
245
+ // focus on trigger when it is closed
246
+ if (isVisible(this)) {
247
+ this.focus()
248
+ }
249
+ })
250
+
251
+ // avoid conflict when clicking a toggler of an offcanvas, while another is open
252
+ const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)
253
+ if (alreadyOpen && alreadyOpen !== target) {
254
+ Offcanvas.getInstance(alreadyOpen).hide()
255
+ }
256
+
257
+ const data = Offcanvas.getOrCreateInstance(target)
258
+ data.toggle(this)
259
+ })
260
+
261
+ EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
262
+ for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {
263
+ Offcanvas.getOrCreateInstance(selector).show()
264
+ }
265
+ })
266
+
267
+ EventHandler.on(window, EVENT_RESIZE, () => {
268
+ for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {
269
+ if (getComputedStyle(element).position !== 'fixed') {
270
+ Offcanvas.getOrCreateInstance(element).hide()
271
+ }
272
+ }
273
+ })
274
+
275
+ enableDismissTrigger(Offcanvas)
276
+
277
+ /**
278
+ * jQuery
279
+ */
280
+
281
+ defineJQueryPlugin(Offcanvas)
282
+
283
+ export default Offcanvas