bootstrap-italia 2.12.1 → 2.13.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (380) hide show
  1. package/README.EN.md +1 -1
  2. package/README.md +1 -1
  3. package/dist/bootstrap-italia.esm.js +1 -1
  4. package/dist/css/bootstrap-italia.min.css +9 -1
  5. package/dist/css/bootstrap-italia.min.css.map +1 -1
  6. package/dist/js/bootstrap-italia.bundle.min.js +19 -23
  7. package/dist/js/bootstrap-italia.min.js +18 -2
  8. package/dist/plugins/accept-overlay.js +19 -9
  9. package/dist/plugins/accept-overlay.js.map +1 -1
  10. package/dist/plugins/accordion.js +19 -24
  11. package/dist/plugins/accordion.js.map +1 -1
  12. package/dist/plugins/alert.js +67 -2
  13. package/dist/plugins/alert.js.map +1 -1
  14. package/dist/plugins/{backToTop.js → back-to-top.js} +14 -5
  15. package/dist/plugins/back-to-top.js.map +1 -0
  16. package/dist/plugins/base-component.js +91 -0
  17. package/dist/plugins/base-component.js.map +1 -0
  18. package/dist/plugins/button.js +58 -2
  19. package/dist/plugins/button.js.map +1 -1
  20. package/dist/plugins/carousel-bi.js +19 -9
  21. package/dist/plugins/carousel-bi.js.map +1 -1
  22. package/dist/plugins/carousel.js +445 -2
  23. package/dist/plugins/carousel.js.map +1 -1
  24. package/dist/plugins/collapse.js +273 -2
  25. package/dist/plugins/collapse.js.map +1 -1
  26. package/dist/plugins/cookiebar.js +39 -52
  27. package/dist/plugins/cookiebar.js.map +1 -1
  28. package/dist/plugins/dimmer.js +19 -8
  29. package/dist/plugins/dimmer.js.map +1 -1
  30. package/dist/plugins/dom/data.js +61 -0
  31. package/dist/plugins/dom/data.js.map +1 -0
  32. package/dist/plugins/dom/event-handler.js +296 -0
  33. package/dist/plugins/dom/event-handler.js.map +1 -0
  34. package/dist/plugins/dom/manipulator.js +76 -0
  35. package/dist/plugins/dom/manipulator.js.map +1 -0
  36. package/dist/plugins/dom/selector-engine.js +82 -0
  37. package/dist/plugins/dom/selector-engine.js.map +1 -0
  38. package/dist/plugins/dropdown.js +433 -2
  39. package/dist/plugins/dropdown.js.map +1 -1
  40. package/dist/plugins/fonts-loader.js +9 -1
  41. package/dist/plugins/fonts-loader.js.map +1 -1
  42. package/dist/plugins/form-validate.js +22 -8
  43. package/dist/plugins/form-validate.js.map +1 -1
  44. package/dist/plugins/forward.js +21 -18
  45. package/dist/plugins/forward.js.map +1 -1
  46. package/dist/plugins/header-sticky.js +11 -2
  47. package/dist/plugins/header-sticky.js.map +1 -1
  48. package/dist/plugins/history-back.js +17 -17
  49. package/dist/plugins/history-back.js.map +1 -1
  50. package/dist/plugins/init.js +9 -0
  51. package/dist/plugins/init.js.map +1 -1
  52. package/dist/plugins/input-label.js +14 -3
  53. package/dist/plugins/input-label.js.map +1 -1
  54. package/dist/plugins/input-number.js +13 -4
  55. package/dist/plugins/input-number.js.map +1 -1
  56. package/dist/plugins/input-password.js +48 -37
  57. package/dist/plugins/input-password.js.map +1 -1
  58. package/dist/plugins/input-search-autocomplete.js +9 -11
  59. package/dist/plugins/input-search-autocomplete.js.map +1 -1
  60. package/dist/plugins/input.js +12 -3
  61. package/dist/plugins/input.js.map +1 -1
  62. package/dist/plugins/list.js +23 -12
  63. package/dist/plugins/list.js.map +1 -1
  64. package/dist/plugins/masonry.js +29 -29
  65. package/dist/plugins/masonry.js.map +1 -1
  66. package/dist/plugins/modal.js +358 -2
  67. package/dist/plugins/modal.js.map +1 -1
  68. package/dist/plugins/navbar-collapsible.js +55 -45
  69. package/dist/plugins/navbar-collapsible.js.map +1 -1
  70. package/dist/plugins/navscroll.js +16 -23
  71. package/dist/plugins/navscroll.js.map +1 -1
  72. package/dist/plugins/notification.js +34 -23
  73. package/dist/plugins/notification.js.map +1 -1
  74. package/dist/plugins/offcanvas.js +259 -2
  75. package/dist/plugins/offcanvas.js.map +1 -1
  76. package/dist/plugins/popover.js +76 -2
  77. package/dist/plugins/popover.js.map +1 -1
  78. package/dist/plugins/progress-donut.js +19 -12
  79. package/dist/plugins/progress-donut.js.map +1 -1
  80. package/dist/plugins/scrollspy.js +273 -2
  81. package/dist/plugins/scrollspy.js.map +1 -1
  82. package/dist/plugins/select-autocomplete.js +10 -1
  83. package/dist/plugins/select-autocomplete.js.map +1 -1
  84. package/dist/plugins/sticky.js +21 -18
  85. package/dist/plugins/sticky.js.map +1 -1
  86. package/dist/plugins/tab.js +244 -27
  87. package/dist/plugins/tab.js.map +1 -1
  88. package/dist/plugins/toast.js +203 -2
  89. package/dist/plugins/toast.js.map +1 -1
  90. package/dist/plugins/tooltip.js +602 -2
  91. package/dist/plugins/tooltip.js.map +1 -1
  92. package/dist/plugins/track-focus.js +8 -0
  93. package/dist/plugins/track-focus.js.map +1 -1
  94. package/dist/plugins/transfer.js +11 -16
  95. package/dist/plugins/transfer.js.map +1 -1
  96. package/dist/plugins/upload-dragdrop.js +13 -4
  97. package/dist/plugins/upload-dragdrop.js.map +1 -1
  98. package/dist/plugins/util/backdrop.js +155 -0
  99. package/dist/plugins/util/backdrop.js.map +1 -0
  100. package/dist/plugins/util/component-functions.js +38 -0
  101. package/dist/plugins/util/component-functions.js.map +1 -0
  102. package/dist/plugins/util/config.js +70 -0
  103. package/dist/plugins/util/config.js.map +1 -0
  104. package/dist/plugins/util/cookies.js +8 -0
  105. package/dist/plugins/util/cookies.js.map +1 -1
  106. package/dist/plugins/util/device.js +0 -3
  107. package/dist/plugins/util/device.js.map +1 -1
  108. package/dist/plugins/util/dom.js +8 -0
  109. package/dist/plugins/util/dom.js.map +1 -1
  110. package/dist/plugins/util/focustrap.js +121 -0
  111. package/dist/plugins/util/focustrap.js.map +1 -0
  112. package/dist/plugins/util/index.js +280 -0
  113. package/dist/plugins/util/index.js.map +1 -0
  114. package/dist/plugins/util/observer.js +8 -0
  115. package/dist/plugins/util/observer.js.map +1 -1
  116. package/dist/plugins/util/on-document-scroll.js +20 -9
  117. package/dist/plugins/util/on-document-scroll.js.map +1 -1
  118. package/dist/plugins/util/pageScroll.js +8 -0
  119. package/dist/plugins/util/pageScroll.js.map +1 -1
  120. package/dist/plugins/util/sanitizer.js +115 -0
  121. package/dist/plugins/util/sanitizer.js.map +1 -0
  122. package/dist/plugins/util/scrollbar.js +120 -0
  123. package/dist/plugins/util/scrollbar.js.map +1 -0
  124. package/dist/plugins/util/swipe.js +150 -0
  125. package/dist/plugins/util/swipe.js.map +1 -0
  126. package/dist/plugins/util/template-factory.js +166 -0
  127. package/dist/plugins/util/template-factory.js.map +1 -0
  128. package/dist/plugins/util/tween.js +10 -1
  129. package/dist/plugins/util/tween.js.map +1 -1
  130. package/dist/plugins/util/youtube-video.js +12 -21
  131. package/dist/plugins/util/youtube-video.js.map +1 -1
  132. package/dist/plugins/videoplayer.js +19 -8
  133. package/dist/plugins/videoplayer.js.map +1 -1
  134. package/dist/version.js +10 -3
  135. package/dist/version.js.map +1 -1
  136. package/package.json +6 -7
  137. package/src/js/bootstrap-italia.entry.js +8 -0
  138. package/src/js/bootstrap-italia.esm.js +9 -1
  139. package/src/js/icons.js +8 -0
  140. package/src/js/load-plugin.js +8 -0
  141. package/src/js/plugins/accept-overlay.js +18 -10
  142. package/src/js/plugins/accordion.js +16 -22
  143. package/src/js/plugins/alert.js +66 -2
  144. package/src/js/plugins/{backToTop.js → back-to-top.js} +12 -4
  145. package/src/js/plugins/base-component.js +89 -0
  146. package/src/js/plugins/button.js +57 -2
  147. package/src/js/plugins/carousel-bi.js +18 -9
  148. package/src/js/plugins/carousel.js +444 -2
  149. package/src/js/plugins/collapse.js +272 -2
  150. package/src/js/plugins/cookiebar.js +37 -60
  151. package/src/js/plugins/dimmer.js +18 -8
  152. package/src/js/plugins/dom/data.js +58 -0
  153. package/src/js/plugins/dom/event-handler.js +301 -0
  154. package/src/js/plugins/dom/manipulator.js +75 -0
  155. package/src/js/plugins/dom/selector-engine.js +80 -0
  156. package/src/js/plugins/dropdown.js +432 -2
  157. package/src/js/plugins/fonts-loader.js +9 -1
  158. package/src/js/plugins/form-validate.js +21 -8
  159. package/src/js/plugins/form.js +11 -3
  160. package/src/js/plugins/forward.js +18 -16
  161. package/src/js/plugins/header-sticky.js +10 -2
  162. package/src/js/plugins/history-back.js +14 -14
  163. package/src/js/plugins/init.js +8 -0
  164. package/src/js/plugins/input-label.js +13 -3
  165. package/src/js/plugins/input-number.js +12 -4
  166. package/src/js/plugins/input-password.js +46 -36
  167. package/src/js/plugins/input-search-autocomplete.js +9 -13
  168. package/src/js/plugins/input.js +11 -3
  169. package/src/js/plugins/list.js +22 -12
  170. package/src/js/plugins/masonry.js +26 -27
  171. package/src/js/plugins/modal.js +357 -2
  172. package/src/js/plugins/navbar-collapsible.js +55 -53
  173. package/src/js/plugins/navscroll.js +16 -23
  174. package/src/js/plugins/notification.js +33 -23
  175. package/src/js/plugins/offcanvas.js +258 -2
  176. package/src/js/plugins/popover.js +75 -2
  177. package/src/js/plugins/progress-donut.js +17 -13
  178. package/src/js/plugins/scrollspy.js +272 -2
  179. package/src/js/plugins/select-autocomplete.js +9 -1
  180. package/src/js/plugins/sticky.js +21 -23
  181. package/src/js/plugins/tab.js +243 -27
  182. package/src/js/plugins/toast.js +206 -2
  183. package/src/js/plugins/tooltip.js +601 -2
  184. package/src/js/plugins/track-focus.js +8 -0
  185. package/src/js/plugins/transfer.js +12 -24
  186. package/src/js/plugins/upload-dragdrop.js +12 -4
  187. package/src/js/plugins/util/backdrop.js +153 -0
  188. package/src/js/plugins/util/component-functions.js +36 -0
  189. package/src/js/plugins/util/config.js +68 -0
  190. package/src/js/plugins/util/cookies.js +8 -0
  191. package/src/js/plugins/util/device.js +0 -3
  192. package/src/js/plugins/util/dom.js +8 -0
  193. package/src/js/plugins/util/focustrap.js +119 -0
  194. package/src/js/plugins/util/index.js +317 -0
  195. package/src/js/plugins/util/observer.js +8 -0
  196. package/src/js/plugins/util/on-document-scroll.js +19 -9
  197. package/src/js/plugins/util/pageScroll.js +8 -0
  198. package/src/js/plugins/util/sanitizer.js +112 -0
  199. package/src/js/plugins/util/scrollbar.js +118 -0
  200. package/src/js/plugins/util/swipe.js +148 -0
  201. package/src/js/plugins/util/template-factory.js +164 -0
  202. package/src/js/plugins/util/tween.js +9 -1
  203. package/src/js/plugins/util/youtube-video.js +12 -21
  204. package/src/js/plugins/videoplayer.js +18 -8
  205. package/src/js/version.js +10 -3
  206. package/src/scss/base/_containers.scss +41 -0
  207. package/src/scss/base/_functions.scss +373 -0
  208. package/src/scss/base/_helpers.scss +10 -0
  209. package/src/scss/base/_maps.scss +54 -0
  210. package/src/scss/base/_mixins.scss +44 -0
  211. package/src/scss/base/_reboot.scss +590 -0
  212. package/src/scss/base/_root.scss +73 -0
  213. package/src/scss/base/_transitions.scss +27 -0
  214. package/src/scss/base/_utilities.scss +742 -0
  215. package/src/scss/base/_variables.scss +2123 -0
  216. package/src/scss/base/_version.scss +3 -0
  217. package/src/scss/base/helpers/_clearfix.scss +3 -0
  218. package/src/scss/base/helpers/_color-bg.scss +10 -0
  219. package/src/scss/base/helpers/_colored-links.scss +16 -0
  220. package/src/scss/base/helpers/_position.scss +36 -0
  221. package/src/scss/base/helpers/_ratio.scss +26 -0
  222. package/src/scss/base/helpers/_stacks.scss +15 -0
  223. package/src/scss/base/helpers/_stretched-link.scss +15 -0
  224. package/src/scss/base/helpers/_text-truncation.scss +7 -0
  225. package/src/scss/base/helpers/_visually-hidden.scss +8 -0
  226. package/src/scss/base/helpers/_vr.scss +8 -0
  227. package/src/scss/base/mixins/_alert.scss +15 -0
  228. package/src/scss/base/mixins/_backdrop.scss +18 -0
  229. package/src/scss/base/mixins/_banner.scss +11 -0
  230. package/src/scss/base/mixins/_border-radius.scss +77 -0
  231. package/src/scss/base/mixins/_box-shadow.scss +18 -0
  232. package/src/scss/base/mixins/_breakpoints.scss +127 -0
  233. package/src/scss/base/mixins/_buttons.scss +141 -0
  234. package/src/scss/base/mixins/_caret.scss +64 -0
  235. package/src/scss/base/mixins/_clearfix.scss +9 -0
  236. package/src/scss/base/mixins/_color-scheme.scss +7 -0
  237. package/src/scss/base/mixins/_container.scss +11 -0
  238. package/src/scss/base/mixins/_deprecate.scss +10 -0
  239. package/src/scss/base/mixins/_forms.scss +152 -0
  240. package/src/scss/base/mixins/_gradients.scss +47 -0
  241. package/src/scss/base/mixins/_grid.scss +151 -0
  242. package/src/scss/base/mixins/_image.scss +15 -0
  243. package/src/scss/base/mixins/_list-group.scss +24 -0
  244. package/src/scss/base/mixins/_lists.scss +7 -0
  245. package/src/scss/base/mixins/_pagination.scss +10 -0
  246. package/src/scss/base/mixins/_reset-text.scss +17 -0
  247. package/src/scss/base/mixins/_resize.scss +6 -0
  248. package/src/scss/base/mixins/_table-variants.scss +24 -0
  249. package/src/scss/base/mixins/_text-truncate.scss +8 -0
  250. package/src/scss/base/mixins/_transition.scss +26 -0
  251. package/src/scss/base/mixins/_utilities.scss +96 -0
  252. package/src/scss/base/mixins/_visually-hidden.scss +29 -0
  253. package/src/scss/base/utilities/_api.scss +45 -0
  254. package/src/scss/base/vendor/_rfs.scss +337 -0
  255. package/src/scss/bootstrap-italia.scss +137 -156
  256. package/src/scss/{custom → components}/_accept-overlay.scss +2 -1
  257. package/src/scss/components/_accordion.scss +297 -0
  258. package/src/scss/components/_badge.scss +60 -0
  259. package/src/scss/components/_breadcrumb.scss +95 -0
  260. package/src/scss/components/_button-group.scss +143 -0
  261. package/src/scss/components/_buttons.scss +467 -0
  262. package/src/scss/{custom → components}/_card.scss +228 -0
  263. package/src/scss/{custom → components}/_carousel.scss +225 -3
  264. package/src/scss/components/_dropdown.scss +480 -0
  265. package/src/scss/{custom → components}/_grid.scss +33 -0
  266. package/src/scss/{custom → components}/_gridlist.scss +7 -0
  267. package/src/scss/{custom → components}/_hero.scss +23 -57
  268. package/src/scss/components/_images.scss +48 -0
  269. package/src/scss/{custom → components}/_linklist.scss +0 -1
  270. package/src/scss/components/_list-group.scss +190 -0
  271. package/src/scss/components/_modal.scss +475 -0
  272. package/src/scss/components/_nav.scss +169 -0
  273. package/src/scss/components/_navbar.scss +274 -0
  274. package/src/scss/components/_offcanvas.scss +144 -0
  275. package/src/scss/components/_pagination.scss +108 -0
  276. package/src/scss/components/_placeholders.scss +51 -0
  277. package/src/scss/components/_popover.scss +298 -0
  278. package/src/scss/components/_progress-bars.scss +126 -0
  279. package/src/scss/{custom → components}/_steppers.scss +2 -2
  280. package/src/scss/{custom → components}/_tab.scss +3 -7
  281. package/src/scss/components/_tables.scss +171 -0
  282. package/src/scss/components/_toasts.scss +73 -0
  283. package/src/scss/{custom → components}/_toolbar.scss +19 -12
  284. package/src/scss/components/_tooltip.scss +139 -0
  285. package/src/scss/{custom → components}/_type.scss +92 -0
  286. package/src/scss/forms/_accessible-autocomplete.scss +188 -0
  287. package/src/scss/forms/_floating-labels.scss +75 -0
  288. package/src/scss/forms/_form-check.scss +163 -0
  289. package/src/scss/forms/_form-control.scss +201 -0
  290. package/src/scss/forms/_form-range.scss +95 -0
  291. package/src/scss/{custom → forms}/_form-select.scss +72 -0
  292. package/src/scss/forms/_form-text.scss +11 -0
  293. package/src/scss/{custom → forms}/_forms.scss +8 -12
  294. package/src/scss/forms/_input-group.scss +129 -0
  295. package/src/scss/forms/_labels.scss +36 -0
  296. package/src/scss/forms/_validation.scss +12 -0
  297. package/src/scss/utilities/icons.scss +5 -5
  298. package/types/index.d.ts +4 -1
  299. package/types/plugins/video.ts +33 -0
  300. package/dist/plugins/backToTop.js.map +0 -1
  301. package/src/scss/_functions.scss +0 -38
  302. package/src/scss/_variables.scss +0 -639
  303. package/src/scss/custom/_accessible-autocomplete.scss +0 -30
  304. package/src/scss/custom/_accordion.scss +0 -176
  305. package/src/scss/custom/_badge.scss +0 -29
  306. package/src/scss/custom/_breadcrumb.scss +0 -51
  307. package/src/scss/custom/_buttons.scss +0 -235
  308. package/src/scss/custom/_componente-base.scss +0 -6
  309. package/src/scss/custom/_dropdown.scss +0 -248
  310. package/src/scss/custom/_form-datepicker.scss +0 -604
  311. package/src/scss/custom/_images.scss +0 -10
  312. package/src/scss/custom/_modal.scss +0 -248
  313. package/src/scss/custom/_popover.scss +0 -106
  314. package/src/scss/custom/_progress-bars.scss +0 -70
  315. package/src/scss/custom/_tables.scss +0 -11
  316. package/src/scss/custom/_timepicker.scss +0 -252
  317. package/src/scss/custom/_tooltip.scss +0 -33
  318. package/src/scss/custom/_version.scss +0 -3
  319. package/src/scss/custom/mixins/_buttons.scss +0 -67
  320. package/src/scss/utilities/colors_vars.scss +0 -426
  321. /package/src/scss/{custom → base}/mixins/_text-emphasis.scss +0 -0
  322. /package/src/scss/{custom → components}/_affix.scss +0 -0
  323. /package/src/scss/{custom → components}/_alert.scss +0 -0
  324. /package/src/scss/{custom → components}/_anchor.scss +0 -0
  325. /package/src/scss/{custom → components}/_avatar.scss +0 -0
  326. /package/src/scss/{custom → components}/_back-to-top.scss +0 -0
  327. /package/src/scss/{custom → components}/_bottomnav.scss +0 -0
  328. /package/src/scss/{custom → components}/_calendar.scss +0 -0
  329. /package/src/scss/{custom → components}/_callout.scss +0 -0
  330. /package/src/scss/{custom → components}/_chips.scss +0 -0
  331. /package/src/scss/{custom → components}/_code.scss +0 -0
  332. /package/src/scss/{custom → components}/_cookiebar.scss +0 -0
  333. /package/src/scss/{custom → components}/_dimmer.scss +0 -0
  334. /package/src/scss/{custom → components}/_figcaption.scss +0 -0
  335. /package/src/scss/{custom → components}/_font.scss +0 -0
  336. /package/src/scss/{custom → components}/_footer.scss +0 -0
  337. /package/src/scss/{custom → components}/_forward.scss +0 -0
  338. /package/src/scss/{custom → components}/_header.scss +0 -0
  339. /package/src/scss/{custom → components}/_headercenter.scss +0 -0
  340. /package/src/scss/{custom → components}/_headercentertheme.scss +0 -0
  341. /package/src/scss/{custom → components}/_headernavbar.scss +0 -0
  342. /package/src/scss/{custom → components}/_headernavbartheme.scss +0 -0
  343. /package/src/scss/{custom → components}/_headerslim.scss +0 -0
  344. /package/src/scss/{custom → components}/_headerslimtheme.scss +0 -0
  345. /package/src/scss/{custom → components}/_imgresponsive.scss +0 -0
  346. /package/src/scss/{custom → components}/_list.scss +0 -0
  347. /package/src/scss/{custom → components}/_map.scss +0 -0
  348. /package/src/scss/{custom → components}/_masonry-loader.scss +0 -0
  349. /package/src/scss/{custom → components}/_megamenu.scss +0 -0
  350. /package/src/scss/{custom → components}/_navigation.scss +0 -0
  351. /package/src/scss/{custom → components}/_navigationtheme.scss +0 -0
  352. /package/src/scss/{custom → components}/_navscroll.scss +0 -0
  353. /package/src/scss/{custom → components}/_navscrolltheme.scss +0 -0
  354. /package/src/scss/{custom → components}/_notifications.scss +0 -0
  355. /package/src/scss/{custom → components}/_overlay-panel.scss +0 -0
  356. /package/src/scss/{custom → components}/_page-scroll.scss +0 -0
  357. /package/src/scss/{custom → components}/_pager.scss +0 -0
  358. /package/src/scss/{custom → components}/_point-list.scss +0 -0
  359. /package/src/scss/{custom → components}/_print.scss +0 -0
  360. /package/src/scss/{custom → components}/_progress-donuts.scss +0 -0
  361. /package/src/scss/{custom → components}/_progress-spinners.scss +0 -0
  362. /package/src/scss/{custom → components}/_rating-list.scss +0 -0
  363. /package/src/scss/{custom → components}/_rating.scss +0 -0
  364. /package/src/scss/{custom → components}/_sections.scss +0 -0
  365. /package/src/scss/{custom → components}/_sidebar.scss +0 -0
  366. /package/src/scss/{custom → components}/_sidebarthemes.scss +0 -0
  367. /package/src/scss/{custom → components}/_skiplinks.scss +0 -0
  368. /package/src/scss/{custom → components}/_sticky.scss +0 -0
  369. /package/src/scss/{custom → components}/_thumbnav.scss +0 -0
  370. /package/src/scss/{custom → components}/_timeline.scss +0 -0
  371. /package/src/scss/{custom → components}/_videoplayer.scss +0 -0
  372. /package/src/scss/{custom → forms}/_autocomplete.scss +0 -0
  373. /package/src/scss/{custom → forms}/_form-input-file.scss +0 -0
  374. /package/src/scss/{custom → forms}/_form-input-number.scss +0 -0
  375. /package/src/scss/{custom → forms}/_form-input-upload.scss +0 -0
  376. /package/src/scss/{custom → forms}/_form-password.scss +0 -0
  377. /package/src/scss/{custom → forms}/_form-toggles.scss +0 -0
  378. /package/src/scss/{custom → forms}/_form-transfer.scss +0 -0
  379. /package/src/scss/{custom → forms}/_just-validate.scss +0 -0
  380. /package/types/plugins/{backToTop.d.ts → back-to-top.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"popover.js","sources":["../../src/js/plugins/popover.js"],"sourcesContent":["import { default as BSPopover } from 'bootstrap/js/src/popover'\n\nclass Popover extends BSPopover {}\n\nexport default Popover\n"],"names":[],"mappings":";;AAEA,MAAM,OAAO,SAAS,SAAS,CAAC;;;;"}
1
+ {"version":3,"file":"popover.js","sources":["../../src/js/plugins/popover.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap Italia (https://italia.github.io/bootstrap-italia/)\n * Authors: https://github.com/italia/bootstrap-italia/blob/main/AUTHORS\n * Licensed under BSD-3-Clause license (https://github.com/italia/bootstrap-italia/blob/main/LICENSE)\n * This a fork of Bootstrap: Initial license and original file name below\n * Bootstrap (v5.2.3): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Tooltip from './tooltip'\n\n/**\n * Constants\n */\n\nconst NAME = 'popover'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Default = {\n ...Tooltip.Default,\n content: '',\n offset: [0, 8],\n placement: 'right',\n template:\n '<div class=\"popover\" role=\"tooltip\">' +\n '<div class=\"popover-arrow\"></div>' +\n '<h3 class=\"popover-header\"></h3>' +\n '<div class=\"popover-body\"></div>' +\n '</div>',\n trigger: 'click',\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(null|string|element|function)',\n}\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Overrides\n _isWithContent() {\n return this._getTitle() || this._getContent()\n }\n\n // Private\n _getContentForTemplate() {\n return {\n [SELECTOR_TITLE]: this._getTitle(),\n [SELECTOR_CONTENT]: this._getContent(),\n }\n }\n\n _getContent() {\n return this._resolvePossibleFunction(this._config.content)\n }\n}\n\nexport default Popover\n"],"names":[],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAIA;AACA;AACA;;AAEA,MAAM,IAAI,GAAG;;AAEb,MAAM,cAAc,GAAG;AACvB,MAAM,gBAAgB,GAAG;;AAEzB,MAAM,OAAO,GAAG;AAChB,EAAE,GAAG,OAAO,CAAC,OAAO;AACpB,EAAE,OAAO,EAAE,EAAE;AACb,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AAChB,EAAE,SAAS,EAAE,OAAO;AACpB,EAAE,QAAQ;AACV,IAAI,sCAAsC;AAC1C,IAAI,mCAAmC;AACvC,IAAI,kCAAkC;AACtC,IAAI,kCAAkC;AACtC,IAAI,QAAQ;AACZ,EAAE,OAAO,EAAE,OAAO;AAClB;;AAEA,MAAM,WAAW,GAAG;AACpB,EAAE,GAAG,OAAO,CAAC,WAAW;AACxB,EAAE,OAAO,EAAE,gCAAgC;AAC3C;;AAEA;AACA;AACA;;AAEA,MAAM,OAAO,SAAS,OAAO,CAAC;AAC9B;AACA,EAAE,WAAW,OAAO,GAAG;AACvB,IAAI,OAAO;AACX;;AAEA,EAAE,WAAW,WAAW,GAAG;AAC3B,IAAI,OAAO;AACX;;AAEA,EAAE,WAAW,IAAI,GAAG;AACpB,IAAI,OAAO;AACX;;AAEA;AACA,EAAE,cAAc,GAAG;AACnB,IAAI,OAAO,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,WAAW;AAC/C;;AAEA;AACA,EAAE,sBAAsB,GAAG;AAC3B,IAAI,OAAO;AACX,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,EAAE;AACxC,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,EAAE;AAC5C;AACA;;AAEA,EAAE,WAAW,GAAG;AAChB,IAAI,OAAO,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO;AAC7D;AACA;;;;"}
@@ -1,13 +1,18 @@
1
- import ProgressBar from 'progressbar.js';
2
- import BaseComponent from 'bootstrap/js/src/base-component.js';
3
- import SelectorEngine from 'bootstrap/js/src/dom/selector-engine';
4
- import Manipulator from 'bootstrap/js/src/dom/manipulator';
1
+ import Circle from 'progressbar.js/src/circle.js';
2
+ import BaseComponent from './base-component.js';
3
+ import SelectorEngine from './dom/selector-engine.js';
4
+ import Manipulator from './dom/manipulator.js';
5
5
 
6
- const NAME = 'progressdonut';
7
- //const DATA_KEY = 'bs.progressdonut'
8
- //const EVENT_KEY = `.${DATA_KEY}`
9
- //const DATA_API_KEY = '.data-api'
6
+ /**
7
+ * --------------------------------------------------------------------------
8
+ * Bootstrap Italia (https://italia.github.io/bootstrap-italia/)
9
+ * Authors: https://github.com/italia/bootstrap-italia/blob/main/AUTHORS
10
+ * Licensed under BSD-3-Clause license (https://github.com/italia/bootstrap-italia/blob/main/LICENSE)
11
+ * --------------------------------------------------------------------------
12
+ */
10
13
 
14
+
15
+ const NAME = 'progressdonut';
11
16
  const SELECTOR_DONUT = '[data-bs-progress-donut]';
12
17
 
13
18
  const Default = {
@@ -87,7 +92,7 @@ class ProgressDonut extends BaseComponent {
87
92
  }
88
93
 
89
94
  _init() {
90
- this._bar = new ProgressBar.Circle(this._element, this._config);
95
+ this._bar = new Circle(this._element, this._config);
91
96
 
92
97
  if (this._config.value > 0) {
93
98
  this.set(this._config.value);
@@ -101,9 +106,11 @@ class ProgressDonut extends BaseComponent {
101
106
  * ------------------------------------------------------------------------
102
107
  */
103
108
 
104
- SelectorEngine.find(SELECTOR_DONUT).forEach((donut) => {
105
- ProgressDonut.getOrCreateInstance(donut);
106
- });
109
+ if (typeof window !== 'undefined' && typeof document !== 'undefined') {
110
+ SelectorEngine.find(SELECTOR_DONUT).forEach((donut) => {
111
+ ProgressDonut.getOrCreateInstance(donut);
112
+ });
113
+ }
107
114
 
108
115
  export { ProgressDonut as default };
109
116
  //# sourceMappingURL=progress-donut.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"progress-donut.js","sources":["../../src/js/plugins/progress-donut.js"],"sourcesContent":["import ProgressBar from 'progressbar.js'\nimport BaseComponent from 'bootstrap/js/src/base-component.js'\n\n//import EventHandler from 'bootstrap/js/src/dom/event-handler'\nimport SelectorEngine from 'bootstrap/js/src/dom/selector-engine'\nimport Manipulator from 'bootstrap/js/src/dom/manipulator'\n\nconst NAME = 'progressdonut'\n//const DATA_KEY = 'bs.progressdonut'\n//const EVENT_KEY = `.${DATA_KEY}`\n//const DATA_API_KEY = '.data-api'\n\nconst SELECTOR_DONUT = '[data-bs-progress-donut]'\n\nconst Default = {\n color: '#5C6F82',\n trailColor: '#D9DADB',\n // This has to be the same size as the maximum width to\n // prevent clipping\n strokeWidth: 24,\n trailWidth: 12,\n easing: 'easeInOut',\n duration: 1400,\n text: {\n autoStyleContainer: false,\n },\n animate: true,\n value: 0,\n //from: { color: '#aaa', width: 1 },\n //to: { color: '#333', width: 4 },\n}\n\nclass ProgressDonut extends BaseComponent {\n constructor(element, config) {\n super(element)\n\n this._config = this._getConfig(config)\n this._bar = null\n\n this._init()\n }\n\n // Getters\n\n static get NAME() {\n return NAME\n }\n\n // Public\n set(progess) {\n if (this._config.animate) {\n this._bar.animate(progess)\n } else {\n this._bar.set(progess)\n }\n }\n\n dispose() {\n this._bar.destroy()\n\n super.dispose()\n }\n\n // Private\n _getConfig(config) {\n config = {\n ...Default,\n ...{ step: this._getStepCallback() },\n ...Manipulator.getDataAttributes(this._element),\n ...(typeof config === 'object' ? config : {}),\n }\n //config.value = parseFloat(config.value)\n return config\n }\n\n _getStepCallback() {\n return (state, circle) => {\n //circle.path.setAttribute('stroke', state.color)\n //circle.path.setAttribute('stroke-width', state.width)\n\n const value = Math.round(circle.value() * 100)\n circle.setText(value + '%')\n /*if (value === 0) {\n circle.setText('')\n } else {\n circle.setText(value)\n }*/\n }\n }\n\n _init() {\n this._bar = new ProgressBar.Circle(this._element, this._config)\n\n if (this._config.value > 0) {\n this.set(this._config.value)\n }\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nSelectorEngine.find(SELECTOR_DONUT).forEach((donut) => {\n ProgressDonut.getOrCreateInstance(donut)\n})\n\nexport default ProgressDonut\n"],"names":[],"mappings":";;;;;AAOA,MAAM,IAAI,GAAG;AACb;AACA;AACA;;AAEA,MAAM,cAAc,GAAG;;AAEvB,MAAM,OAAO,GAAG;AAChB,EAAE,KAAK,EAAE,SAAS;AAClB,EAAE,UAAU,EAAE,SAAS;AACvB;AACA;AACA,EAAE,WAAW,EAAE,EAAE;AACjB,EAAE,UAAU,EAAE,EAAE;AAChB,EAAE,MAAM,EAAE,WAAW;AACrB,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,IAAI,EAAE;AACR,IAAI,kBAAkB,EAAE,KAAK;AAC7B,GAAG;AACH,EAAE,OAAO,EAAE,IAAI;AACf,EAAE,KAAK,EAAE,CAAC;AACV;AACA;AACA;;AAEA,MAAM,aAAa,SAAS,aAAa,CAAC;AAC1C,EAAE,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE;AAC/B,IAAI,KAAK,CAAC,OAAO;;AAEjB,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM;AACzC,IAAI,IAAI,CAAC,IAAI,GAAG;;AAEhB,IAAI,IAAI,CAAC,KAAK;AACd;;AAEA;;AAEA,EAAE,WAAW,IAAI,GAAG;AACpB,IAAI,OAAO;AACX;;AAEA;AACA,EAAE,GAAG,CAAC,OAAO,EAAE;AACf,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;AAC9B,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO;AAC/B,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO;AAC3B;AACA;;AAEA,EAAE,OAAO,GAAG;AACZ,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO;;AAErB,IAAI,KAAK,CAAC,OAAO;AACjB;;AAEA;AACA,EAAE,UAAU,CAAC,MAAM,EAAE;AACrB,IAAI,MAAM,GAAG;AACb,MAAM,GAAG,OAAO;AAChB,MAAM,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,EAAE;AAC1C,MAAM,GAAG,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC;AACrD,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM,GAAG,EAAE,CAAC;AACnD;AACA;AACA,IAAI,OAAO;AACX;;AAEA,EAAE,gBAAgB,GAAG;AACrB,IAAI,OAAO,CAAC,KAAK,EAAE,MAAM,KAAK;AAC9B;AACA;;AAEA,MAAM,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,GAAG;AACnD,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,GAAG;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAE,KAAK,GAAG;AACV,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO;;AAElE,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE;AAChC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK;AACjC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK;AACvD,EAAE,aAAa,CAAC,mBAAmB,CAAC,KAAK;AACzC,CAAC;;;;"}
1
+ {"version":3,"file":"progress-donut.js","sources":["../../src/js/plugins/progress-donut.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap Italia (https://italia.github.io/bootstrap-italia/)\n * Authors: https://github.com/italia/bootstrap-italia/blob/main/AUTHORS\n * Licensed under BSD-3-Clause license (https://github.com/italia/bootstrap-italia/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Circle from 'progressbar.js/src/circle.js'\nimport BaseComponent from './base-component.js'\nimport SelectorEngine from './dom/selector-engine'\nimport Manipulator from './dom/manipulator'\n\nconst NAME = 'progressdonut'\nconst SELECTOR_DONUT = '[data-bs-progress-donut]'\n\nconst Default = {\n color: '#5C6F82',\n trailColor: '#D9DADB',\n // This has to be the same size as the maximum width to\n // prevent clipping\n strokeWidth: 24,\n trailWidth: 12,\n easing: 'easeInOut',\n duration: 1400,\n text: {\n autoStyleContainer: false,\n },\n animate: true,\n value: 0,\n //from: { color: '#aaa', width: 1 },\n //to: { color: '#333', width: 4 },\n}\n\nclass ProgressDonut extends BaseComponent {\n constructor(element, config) {\n super(element)\n\n this._config = this._getConfig(config)\n this._bar = null\n\n this._init()\n }\n\n // Getters\n\n static get NAME() {\n return NAME\n }\n\n // Public\n set(progess) {\n if (this._config.animate) {\n this._bar.animate(progess)\n } else {\n this._bar.set(progess)\n }\n }\n\n dispose() {\n this._bar.destroy()\n\n super.dispose()\n }\n\n // Private\n _getConfig(config) {\n config = {\n ...Default,\n ...{ step: this._getStepCallback() },\n ...Manipulator.getDataAttributes(this._element),\n ...(typeof config === 'object' ? config : {}),\n }\n //config.value = parseFloat(config.value)\n return config\n }\n\n _getStepCallback() {\n return (state, circle) => {\n //circle.path.setAttribute('stroke', state.color)\n //circle.path.setAttribute('stroke-width', state.width)\n\n const value = Math.round(circle.value() * 100)\n circle.setText(value + '%')\n /*if (value === 0) {\n circle.setText('')\n } else {\n circle.setText(value)\n }*/\n }\n }\n\n _init() {\n this._bar = new Circle(this._element, this._config)\n\n if (this._config.value > 0) {\n this.set(this._config.value)\n }\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nif (typeof window !== 'undefined' && typeof document !== 'undefined') {\n SelectorEngine.find(SELECTOR_DONUT).forEach((donut) => {\n ProgressDonut.getOrCreateInstance(donut)\n })\n}\n\nexport default ProgressDonut\n"],"names":[],"mappings":";;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAOA,MAAM,IAAI,GAAG;AACb,MAAM,cAAc,GAAG;;AAEvB,MAAM,OAAO,GAAG;AAChB,EAAE,KAAK,EAAE,SAAS;AAClB,EAAE,UAAU,EAAE,SAAS;AACvB;AACA;AACA,EAAE,WAAW,EAAE,EAAE;AACjB,EAAE,UAAU,EAAE,EAAE;AAChB,EAAE,MAAM,EAAE,WAAW;AACrB,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,IAAI,EAAE;AACR,IAAI,kBAAkB,EAAE,KAAK;AAC7B,GAAG;AACH,EAAE,OAAO,EAAE,IAAI;AACf,EAAE,KAAK,EAAE,CAAC;AACV;AACA;AACA;;AAEA,MAAM,aAAa,SAAS,aAAa,CAAC;AAC1C,EAAE,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE;AAC/B,IAAI,KAAK,CAAC,OAAO;;AAEjB,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM;AACzC,IAAI,IAAI,CAAC,IAAI,GAAG;;AAEhB,IAAI,IAAI,CAAC,KAAK;AACd;;AAEA;;AAEA,EAAE,WAAW,IAAI,GAAG;AACpB,IAAI,OAAO;AACX;;AAEA;AACA,EAAE,GAAG,CAAC,OAAO,EAAE;AACf,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;AAC9B,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO;AAC/B,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO;AAC3B;AACA;;AAEA,EAAE,OAAO,GAAG;AACZ,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO;;AAErB,IAAI,KAAK,CAAC,OAAO;AACjB;;AAEA;AACA,EAAE,UAAU,CAAC,MAAM,EAAE;AACrB,IAAI,MAAM,GAAG;AACb,MAAM,GAAG,OAAO;AAChB,MAAM,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,EAAE;AAC1C,MAAM,GAAG,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC;AACrD,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM,GAAG,EAAE,CAAC;AACnD;AACA;AACA,IAAI,OAAO;AACX;;AAEA,EAAE,gBAAgB,GAAG;AACrB,IAAI,OAAO,CAAC,KAAK,EAAE,MAAM,KAAK;AAC9B;AACA;;AAEA,MAAM,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,GAAG;AACnD,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,GAAG;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAE,KAAK,GAAG;AACV,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO;;AAEtD,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE;AAChC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK;AACjC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;AACtE,EAAE,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK;AACzD,IAAI,aAAa,CAAC,mBAAmB,CAAC,KAAK;AAC3C,GAAG;AACH;;;;"}
@@ -1,6 +1,277 @@
1
- import BSScrollSpy from 'bootstrap/js/src/scrollspy';
1
+ import { getElement, isDisabled, isVisible } from './util/index.js';
2
+ import EventHandler from './dom/event-handler.js';
3
+ import SelectorEngine from './dom/selector-engine.js';
4
+ import BaseComponent from './base-component.js';
2
5
 
3
- class ScrollSpy extends BSScrollSpy {}
6
+ /**
7
+ * --------------------------------------------------------------------------
8
+ * Bootstrap Italia (https://italia.github.io/bootstrap-italia/)
9
+ * Authors: https://github.com/italia/bootstrap-italia/blob/main/AUTHORS
10
+ * Licensed under BSD-3-Clause license (https://github.com/italia/bootstrap-italia/blob/main/LICENSE)
11
+ * This a fork of Bootstrap: Initial license and original file name below
12
+ * Bootstrap (v5.2.3): scrollspy.js
13
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
14
+ * --------------------------------------------------------------------------
15
+ */
16
+
17
+
18
+ /**
19
+ * Constants
20
+ */
21
+
22
+ const NAME = 'scrollspy';
23
+ const DATA_KEY = 'bs.scrollspy';
24
+ const EVENT_KEY = `.${DATA_KEY}`;
25
+ const DATA_API_KEY = '.data-api';
26
+
27
+ const EVENT_ACTIVATE = `activate${EVENT_KEY}`;
28
+ const EVENT_CLICK = `click${EVENT_KEY}`;
29
+ const EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`;
30
+
31
+ const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';
32
+ const CLASS_NAME_ACTIVE = 'active';
33
+
34
+ const SELECTOR_DATA_SPY = '[data-bs-spy="scroll"]';
35
+ const SELECTOR_TARGET_LINKS = '[href]';
36
+ const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
37
+ const SELECTOR_NAV_LINKS = '.nav-link';
38
+ const SELECTOR_NAV_ITEMS = '.nav-item';
39
+ const SELECTOR_LIST_ITEMS = '.list-group-item';
40
+ const SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`;
41
+ const SELECTOR_DROPDOWN = '.dropdown';
42
+ const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
43
+
44
+ const Default = {
45
+ offset: null, // TODO: v6 @deprecated, keep it for backwards compatibility reasons
46
+ rootMargin: '0px 0px -25%',
47
+ smoothScroll: false,
48
+ target: null,
49
+ threshold: [0.1, 0.5, 1],
50
+ };
51
+
52
+ const DefaultType = {
53
+ offset: '(number|null)', // TODO v6 @deprecated, keep it for backwards compatibility reasons
54
+ rootMargin: 'string',
55
+ smoothScroll: 'boolean',
56
+ target: 'element',
57
+ threshold: 'array',
58
+ };
59
+
60
+ /**
61
+ * Class definition
62
+ */
63
+
64
+ class ScrollSpy extends BaseComponent {
65
+ constructor(element, config) {
66
+ super(element, config);
67
+
68
+ // this._element is the observablesContainer and config.target the menu links wrapper
69
+ this._targetLinks = new Map();
70
+ this._observableSections = new Map();
71
+ this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element;
72
+ this._activeTarget = null;
73
+ this._observer = null;
74
+ this._previousScrollData = {
75
+ visibleEntryTop: 0,
76
+ parentScrollTop: 0,
77
+ };
78
+ this.refresh(); // initialize
79
+ }
80
+
81
+ // Getters
82
+ static get Default() {
83
+ return Default
84
+ }
85
+
86
+ static get DefaultType() {
87
+ return DefaultType
88
+ }
89
+
90
+ static get NAME() {
91
+ return NAME
92
+ }
93
+
94
+ // Public
95
+ refresh() {
96
+ this._initializeTargetsAndObservables();
97
+ this._maybeEnableSmoothScroll();
98
+
99
+ if (this._observer) {
100
+ this._observer.disconnect();
101
+ } else {
102
+ this._observer = this._getNewObserver();
103
+ }
104
+
105
+ for (const section of this._observableSections.values()) {
106
+ this._observer.observe(section);
107
+ }
108
+ }
109
+
110
+ dispose() {
111
+ this._observer.disconnect();
112
+ super.dispose();
113
+ }
114
+
115
+ // Private
116
+ _configAfterMerge(config) {
117
+ // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case
118
+ config.target = getElement(config.target) || document.body;
119
+
120
+ // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only
121
+ config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin;
122
+
123
+ if (typeof config.threshold === 'string') {
124
+ config.threshold = config.threshold.split(',').map((value) => Number.parseFloat(value));
125
+ }
126
+
127
+ return config
128
+ }
129
+
130
+ _maybeEnableSmoothScroll() {
131
+ if (!this._config.smoothScroll) {
132
+ return
133
+ }
134
+
135
+ // unregister any previous listeners
136
+ EventHandler.off(this._config.target, EVENT_CLICK);
137
+
138
+ EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, (event) => {
139
+ const observableSection = this._observableSections.get(event.target.hash);
140
+ if (observableSection) {
141
+ event.preventDefault();
142
+ const root = this._rootElement || window;
143
+ const height = observableSection.offsetTop - this._element.offsetTop;
144
+ if (root.scrollTo) {
145
+ root.scrollTo({ top: height, behavior: 'smooth' });
146
+ return
147
+ }
148
+
149
+ // Chrome 60 doesn't support `scrollTo`
150
+ root.scrollTop = height;
151
+ }
152
+ });
153
+ }
154
+
155
+ _getNewObserver() {
156
+ const options = {
157
+ root: this._rootElement,
158
+ threshold: this._config.threshold,
159
+ rootMargin: this._config.rootMargin,
160
+ };
161
+
162
+ return new IntersectionObserver((entries) => this._observerCallback(entries), options)
163
+ }
164
+
165
+ // The logic of selection
166
+ _observerCallback(entries) {
167
+ const targetElement = (entry) => this._targetLinks.get(`#${entry.target.id}`);
168
+ const activate = (entry) => {
169
+ this._previousScrollData.visibleEntryTop = entry.target.offsetTop;
170
+ this._process(targetElement(entry));
171
+ };
172
+
173
+ const parentScrollTop = (this._rootElement || document.documentElement).scrollTop;
174
+ const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;
175
+ this._previousScrollData.parentScrollTop = parentScrollTop;
176
+
177
+ for (const entry of entries) {
178
+ if (!entry.isIntersecting) {
179
+ this._activeTarget = null;
180
+ this._clearActiveClass(targetElement(entry));
181
+
182
+ continue
183
+ }
184
+
185
+ const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop;
186
+ // if we are scrolling down, pick the bigger offsetTop
187
+ if (userScrollsDown && entryIsLowerThanPrevious) {
188
+ activate(entry);
189
+ // if parent isn't scrolled, let's keep the first visible item, breaking the iteration
190
+ if (!parentScrollTop) {
191
+ return
192
+ }
193
+
194
+ continue
195
+ }
196
+
197
+ // if we are scrolling up, pick the smallest offsetTop
198
+ if (!userScrollsDown && !entryIsLowerThanPrevious) {
199
+ activate(entry);
200
+ }
201
+ }
202
+ }
203
+
204
+ _initializeTargetsAndObservables() {
205
+ this._targetLinks = new Map();
206
+ this._observableSections = new Map();
207
+
208
+ const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target);
209
+
210
+ for (const anchor of targetLinks) {
211
+ // ensure that the anchor has an id and is not disabled
212
+ if (!anchor.hash || isDisabled(anchor)) {
213
+ continue
214
+ }
215
+
216
+ const observableSection = SelectorEngine.findOne(anchor.hash, this._element);
217
+
218
+ // ensure that the observableSection exists & is visible
219
+ if (isVisible(observableSection)) {
220
+ this._targetLinks.set(anchor.hash, anchor);
221
+ this._observableSections.set(anchor.hash, observableSection);
222
+ }
223
+ }
224
+ }
225
+
226
+ _process(target) {
227
+ if (this._activeTarget === target) {
228
+ return
229
+ }
230
+
231
+ this._clearActiveClass(this._config.target);
232
+ this._activeTarget = target;
233
+ target.classList.add(CLASS_NAME_ACTIVE);
234
+ this._activateParents(target);
235
+
236
+ EventHandler.trigger(this._element, EVENT_ACTIVATE, { relatedTarget: target });
237
+ }
238
+
239
+ _activateParents(target) {
240
+ // Activate dropdown parents
241
+ if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {
242
+ SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE);
243
+ return
244
+ }
245
+
246
+ for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {
247
+ // Set triggered links parents as active
248
+ // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
249
+ for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {
250
+ item.classList.add(CLASS_NAME_ACTIVE);
251
+ }
252
+ }
253
+ }
254
+
255
+ _clearActiveClass(parent) {
256
+ parent.classList.remove(CLASS_NAME_ACTIVE);
257
+
258
+ const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE}`, parent);
259
+ for (const node of activeNodes) {
260
+ node.classList.remove(CLASS_NAME_ACTIVE);
261
+ }
262
+ }
263
+ }
264
+
265
+ /**
266
+ * Data API implementation
267
+ */
268
+ if (typeof window !== 'undefined' && typeof document !== 'undefined') {
269
+ EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
270
+ for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {
271
+ ScrollSpy.getOrCreateInstance(spy);
272
+ }
273
+ });
274
+ }
4
275
 
5
276
  export { ScrollSpy as default };
6
277
  //# sourceMappingURL=scrollspy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scrollspy.js","sources":["../../src/js/plugins/scrollspy.js"],"sourcesContent":["import { default as BSScrollSpy } from 'bootstrap/js/src/scrollspy'\n\nclass ScrollSpy extends BSScrollSpy {}\n\nexport default ScrollSpy\n"],"names":[],"mappings":";;AAEA,MAAM,SAAS,SAAS,WAAW,CAAC;;;;"}
1
+ {"version":3,"file":"scrollspy.js","sources":["../../src/js/plugins/scrollspy.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap Italia (https://italia.github.io/bootstrap-italia/)\n * Authors: https://github.com/italia/bootstrap-italia/blob/main/AUTHORS\n * Licensed under BSD-3-Clause license (https://github.com/italia/bootstrap-italia/blob/main/LICENSE)\n * This a fork of Bootstrap: Initial license and original file name below\n * Bootstrap (v5.2.3): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getElement, isDisabled, isVisible } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'scrollspy'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]'\nconst SELECTOR_TARGET_LINKS = '[href]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst Default = {\n offset: null, // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: '0px 0px -25%',\n smoothScroll: false,\n target: null,\n threshold: [0.1, 0.5, 1],\n}\n\nconst DefaultType = {\n offset: '(number|null)', // TODO v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: 'string',\n smoothScroll: 'boolean',\n target: 'element',\n threshold: 'array',\n}\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n // this._element is the observablesContainer and config.target the menu links wrapper\n this._targetLinks = new Map()\n this._observableSections = new Map()\n this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element\n this._activeTarget = null\n this._observer = null\n this._previousScrollData = {\n visibleEntryTop: 0,\n parentScrollTop: 0,\n }\n this.refresh() // initialize\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n refresh() {\n this._initializeTargetsAndObservables()\n this._maybeEnableSmoothScroll()\n\n if (this._observer) {\n this._observer.disconnect()\n } else {\n this._observer = this._getNewObserver()\n }\n\n for (const section of this._observableSections.values()) {\n this._observer.observe(section)\n }\n }\n\n dispose() {\n this._observer.disconnect()\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n config.target = getElement(config.target) || document.body\n\n // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin\n\n if (typeof config.threshold === 'string') {\n config.threshold = config.threshold.split(',').map((value) => Number.parseFloat(value))\n }\n\n return config\n }\n\n _maybeEnableSmoothScroll() {\n if (!this._config.smoothScroll) {\n return\n }\n\n // unregister any previous listeners\n EventHandler.off(this._config.target, EVENT_CLICK)\n\n EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, (event) => {\n const observableSection = this._observableSections.get(event.target.hash)\n if (observableSection) {\n event.preventDefault()\n const root = this._rootElement || window\n const height = observableSection.offsetTop - this._element.offsetTop\n if (root.scrollTo) {\n root.scrollTo({ top: height, behavior: 'smooth' })\n return\n }\n\n // Chrome 60 doesn't support `scrollTo`\n root.scrollTop = height\n }\n })\n }\n\n _getNewObserver() {\n const options = {\n root: this._rootElement,\n threshold: this._config.threshold,\n rootMargin: this._config.rootMargin,\n }\n\n return new IntersectionObserver((entries) => this._observerCallback(entries), options)\n }\n\n // The logic of selection\n _observerCallback(entries) {\n const targetElement = (entry) => this._targetLinks.get(`#${entry.target.id}`)\n const activate = (entry) => {\n this._previousScrollData.visibleEntryTop = entry.target.offsetTop\n this._process(targetElement(entry))\n }\n\n const parentScrollTop = (this._rootElement || document.documentElement).scrollTop\n const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop\n this._previousScrollData.parentScrollTop = parentScrollTop\n\n for (const entry of entries) {\n if (!entry.isIntersecting) {\n this._activeTarget = null\n this._clearActiveClass(targetElement(entry))\n\n continue\n }\n\n const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop\n // if we are scrolling down, pick the bigger offsetTop\n if (userScrollsDown && entryIsLowerThanPrevious) {\n activate(entry)\n // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n if (!parentScrollTop) {\n return\n }\n\n continue\n }\n\n // if we are scrolling up, pick the smallest offsetTop\n if (!userScrollsDown && !entryIsLowerThanPrevious) {\n activate(entry)\n }\n }\n }\n\n _initializeTargetsAndObservables() {\n this._targetLinks = new Map()\n this._observableSections = new Map()\n\n const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target)\n\n for (const anchor of targetLinks) {\n // ensure that the anchor has an id and is not disabled\n if (!anchor.hash || isDisabled(anchor)) {\n continue\n }\n\n const observableSection = SelectorEngine.findOne(anchor.hash, this._element)\n\n // ensure that the observableSection exists & is visible\n if (isVisible(observableSection)) {\n this._targetLinks.set(anchor.hash, anchor)\n this._observableSections.set(anchor.hash, observableSection)\n }\n }\n }\n\n _process(target) {\n if (this._activeTarget === target) {\n return\n }\n\n this._clearActiveClass(this._config.target)\n this._activeTarget = target\n target.classList.add(CLASS_NAME_ACTIVE)\n this._activateParents(target)\n\n EventHandler.trigger(this._element, EVENT_ACTIVATE, { relatedTarget: target })\n }\n\n _activateParents(target) {\n // Activate dropdown parents\n if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE)\n return\n }\n\n for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {\n item.classList.add(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n _clearActiveClass(parent) {\n parent.classList.remove(CLASS_NAME_ACTIVE)\n\n const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE}`, parent)\n for (const node of activeNodes) {\n node.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n}\n\n/**\n * Data API implementation\n */\nif (typeof window !== 'undefined' && typeof document !== 'undefined') {\n EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {\n ScrollSpy.getOrCreateInstance(spy)\n }\n })\n}\n\nexport default ScrollSpy\n"],"names":[],"mappings":"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"}
@@ -1,5 +1,14 @@
1
1
  import accessibleAutocomplete from 'accessible-autocomplete';
2
- import BaseComponent from 'bootstrap/js/src/base-component.js';
2
+ import BaseComponent from './base-component.js';
3
+
4
+ /**
5
+ * --------------------------------------------------------------------------
6
+ * Bootstrap Italia (https://italia.github.io/bootstrap-italia/)
7
+ * Authors: https://github.com/italia/bootstrap-italia/blob/main/AUTHORS
8
+ * Licensed under BSD-3-Clause license (https://github.com/italia/bootstrap-italia/blob/main/LICENSE)
9
+ * --------------------------------------------------------------------------
10
+ */
11
+
3
12
 
4
13
  const NAME = 'selectautocomplete';
5
14
 
@@ -1 +1 @@
1
- {"version":3,"file":"select-autocomplete.js","sources":["../../src/js/plugins/select-autocomplete.js"],"sourcesContent":["import accessibleAutocomplete from 'accessible-autocomplete'\n\nimport BaseComponent from 'bootstrap/js/src/base-component.js'\n\nconst NAME = 'selectautocomplete'\n\nfunction onClassChange(element, callback) {\n const observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (mutation.type === 'attributes' && mutation.attributeName === 'class') {\n callback(mutation.target)\n }\n })\n })\n observer.observe(element, { attributes: true })\n return observer.disconnect\n}\n\nclass SelectAutocomplete extends BaseComponent {\n constructor(element, config) {\n super(element)\n this._hasFormControl = element.classList.contains('form-control')\n this.element_original_id = this._element.id\n this._config = config\n if (!this._config.tAssistiveHint)\n this._config.tAssistiveHint = () =>\n 'Quando i risultati del completamento automatico sono disponibili, usa le frecce su e giù per rivedere e Invio per selezionare. Utenti di dispositivi touch, esplora tramite tocco o con gesti di scorrimento'\n if (!this._config.tNoResults) this._config.tNoResults = () => 'Nessun risultato trovato'\n if (!this._config.tStatusQueryTooShort)\n this._config.tStatusQueryTooShort = (minQueryLength) => `Digita ${minQueryLength} o più caratteri per mostrare le opzioni di ricerca`\n if (!this._config.tStatusNoResults) this._config.tStatusNoResults = () => 'Nessun risultato di ricerca'\n if (!this._config.tStatusSelectedOption)\n this._config.tStatusSelectedOption = (selectedOption, length, index) => `${selectedOption} ${index + 1} di ${length} è sottolineato`\n if (!this._config.tStatusResults)\n this._config.tStatusResults = (length, contentSelectedOption) => {\n const words = {\n result: length === 1 ? 'risultato' : 'risultati',\n is: length === 1 ? 'è' : 'sono',\n available: length === 1 ? 'disponibile' : 'disponibili',\n }\n\n return `${length} ${words.result} ${words.is} ${words.available}. ${contentSelectedOption}`\n }\n this._enhance()\n }\n\n // Getters\n\n static get NAME() {\n return NAME\n }\n\n // Private\n _enhance() {\n accessibleAutocomplete.enhanceSelectElement(Object.assign({}, { selectElement: this._element }, this._config))\n setTimeout(() => {\n if (this._hasFormControl) {\n if (typeof document === 'undefined') {\n return\n }\n const inputField = document.getElementById(this.element_original_id)\n inputField.classList.add('form-control')\n onClassChange(inputField, (node) => {\n if (!node.classList.contains('form-control')) {\n node.classList.add('form-control')\n }\n })\n }\n }, 100)\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nexport default SelectAutocomplete\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"select-autocomplete.js","sources":["../../src/js/plugins/select-autocomplete.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap Italia (https://italia.github.io/bootstrap-italia/)\n * Authors: https://github.com/italia/bootstrap-italia/blob/main/AUTHORS\n * Licensed under BSD-3-Clause license (https://github.com/italia/bootstrap-italia/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport accessibleAutocomplete from 'accessible-autocomplete'\n\nimport BaseComponent from './base-component.js'\n\nconst NAME = 'selectautocomplete'\n\nfunction onClassChange(element, callback) {\n const observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (mutation.type === 'attributes' && mutation.attributeName === 'class') {\n callback(mutation.target)\n }\n })\n })\n observer.observe(element, { attributes: true })\n return observer.disconnect\n}\n\nclass SelectAutocomplete extends BaseComponent {\n constructor(element, config) {\n super(element)\n this._hasFormControl = element.classList.contains('form-control')\n this.element_original_id = this._element.id\n this._config = config\n if (!this._config.tAssistiveHint)\n this._config.tAssistiveHint = () =>\n 'Quando i risultati del completamento automatico sono disponibili, usa le frecce su e giù per rivedere e Invio per selezionare. Utenti di dispositivi touch, esplora tramite tocco o con gesti di scorrimento'\n if (!this._config.tNoResults) this._config.tNoResults = () => 'Nessun risultato trovato'\n if (!this._config.tStatusQueryTooShort)\n this._config.tStatusQueryTooShort = (minQueryLength) => `Digita ${minQueryLength} o più caratteri per mostrare le opzioni di ricerca`\n if (!this._config.tStatusNoResults) this._config.tStatusNoResults = () => 'Nessun risultato di ricerca'\n if (!this._config.tStatusSelectedOption)\n this._config.tStatusSelectedOption = (selectedOption, length, index) => `${selectedOption} ${index + 1} di ${length} è sottolineato`\n if (!this._config.tStatusResults)\n this._config.tStatusResults = (length, contentSelectedOption) => {\n const words = {\n result: length === 1 ? 'risultato' : 'risultati',\n is: length === 1 ? 'è' : 'sono',\n available: length === 1 ? 'disponibile' : 'disponibili',\n }\n\n return `${length} ${words.result} ${words.is} ${words.available}. ${contentSelectedOption}`\n }\n this._enhance()\n }\n\n // Getters\n\n static get NAME() {\n return NAME\n }\n\n // Private\n _enhance() {\n accessibleAutocomplete.enhanceSelectElement(Object.assign({}, { selectElement: this._element }, this._config))\n setTimeout(() => {\n if (this._hasFormControl) {\n if (typeof document === 'undefined') {\n return\n }\n const inputField = document.getElementById(this.element_original_id)\n inputField.classList.add('form-control')\n onClassChange(inputField, (node) => {\n if (!node.classList.contains('form-control')) {\n node.classList.add('form-control')\n }\n })\n }\n }, 100)\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nexport default SelectAutocomplete\n"],"names":[],"mappings":"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"}
@@ -1,17 +1,15 @@
1
- import BaseComponent from 'bootstrap/js/src/base-component.js';
2
- import { getSelectorFromElement } from 'bootstrap/js/src/util';
3
- import EventHandler from 'bootstrap/js/src/dom/event-handler';
4
- import SelectorEngine from 'bootstrap/js/src/dom/selector-engine';
5
- import Manipulator from 'bootstrap/js/src/dom/manipulator';
1
+ import BaseComponent from './base-component.js';
2
+ import { getSelectorFromElement } from './util/index.js';
3
+ import EventHandler from './dom/event-handler.js';
4
+ import SelectorEngine from './dom/selector-engine.js';
5
+ import Manipulator from './dom/manipulator.js';
6
6
  import { isScreenMobile } from './util/device.js';
7
7
  import onDocumentScroll from './util/on-document-scroll.js';
8
8
 
9
9
  const NAME = 'sticky';
10
10
  const DATA_KEY = 'bs.sticky';
11
11
  const EVENT_KEY = `.${DATA_KEY}`;
12
- //const DATA_API_KEY = '.data-api'
13
12
 
14
- //const EVENT_SCROLL = `scroll${EVENT_KEY}`
15
13
  const EVENT_RESIZE = `resize${EVENT_KEY}`;
16
14
  const EVENT_STICKY_ON = `on${EVENT_KEY}`;
17
15
  const EVENT_STICKY_OFF = `off${EVENT_KEY}`;
@@ -57,10 +55,12 @@ class Sticky extends BaseComponent {
57
55
  }
58
56
 
59
57
  dispose() {
60
- EventHandler.off(window, EVENT_RESIZE);
61
- this._scrollCb.dispose();
58
+ if (typeof window !== 'undefined' && typeof document !== 'undefined') {
59
+ EventHandler.off(window, EVENT_RESIZE);
60
+ this._scrollCb.dispose();
62
61
 
63
- super.dispose();
62
+ super.dispose();
63
+ }
64
64
  }
65
65
  // Getters
66
66
 
@@ -81,9 +81,10 @@ class Sticky extends BaseComponent {
81
81
  }
82
82
 
83
83
  _bindEvents() {
84
- EventHandler.on(window, EVENT_RESIZE, () => this._onResize());
85
- //EventHandler.on(window, EVENT_SCROLL, () => this._onScroll())
86
- this._scrollCb = onDocumentScroll(() => this._onScroll());
84
+ if (typeof window !== 'undefined' && typeof document !== 'undefined') {
85
+ EventHandler.on(window, EVENT_RESIZE, () => this._onResize());
86
+ this._scrollCb = onDocumentScroll(() => this._onScroll());
87
+ }
87
88
  }
88
89
 
89
90
  _onResize() {
@@ -237,12 +238,14 @@ class Sticky extends BaseComponent {
237
238
  * ------------------------------------------------------------------------
238
239
  */
239
240
 
240
- onDocumentScroll(() => {
241
- const stickies = SelectorEngine.find(SELECTOR_DATA_TOGGLE);
242
- stickies.map((sticky) => {
243
- Sticky.getOrCreateInstance(sticky);
241
+ if (typeof window !== 'undefined' && typeof document !== 'undefined') {
242
+ onDocumentScroll(() => {
243
+ const stickies = SelectorEngine.find(SELECTOR_DATA_TOGGLE);
244
+ stickies.map((sticky) => {
245
+ Sticky.getOrCreateInstance(sticky);
246
+ });
244
247
  });
245
- });
248
+ }
246
249
 
247
250
  export { Sticky as default };
248
251
  //# sourceMappingURL=sticky.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sticky.js","sources":["../../src/js/plugins/sticky.js"],"sourcesContent":["import BaseComponent from 'bootstrap/js/src/base-component.js'\n\nimport {\n //defineJQueryPlugin,\n //getElementFromSelector,\n //isVisible,\n //reflow,\n //typeCheckConfig,\n getSelectorFromElement, //in base al bs-target\n} from 'bootstrap/js/src/util'\nimport EventHandler from 'bootstrap/js/src/dom/event-handler'\nimport SelectorEngine from 'bootstrap/js/src/dom/selector-engine'\nimport Manipulator from 'bootstrap/js/src/dom/manipulator'\n\nimport { isScreenMobile } from './util/device'\nimport onDocumentScroll from './util/on-document-scroll'\n\nconst NAME = 'sticky'\nconst DATA_KEY = 'bs.sticky'\nconst EVENT_KEY = `.${DATA_KEY}`\n//const DATA_API_KEY = '.data-api'\n\n//const EVENT_SCROLL = `scroll${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_STICKY_ON = `on${EVENT_KEY}`\nconst EVENT_STICKY_OFF = `off${EVENT_KEY}`\n\nconst CLASS_NAME_WRAPPER = 'bs-it-sticky-wrapper'\nconst CLASS_NAME_STICKY = 'bs-is-sticky'\nconst CLASS_NAME_FIXED = 'bs-is-fixed'\n\nconst DATA_TARGET_MOBILE = 'data-bs-target-mobile'\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"sticky\"]'\n\nconst Default = {\n positionType: 'sticky', //fixed\n stickyClassName: '',\n stackable: false,\n paddingTop: 0,\n}\n\nclass Sticky extends BaseComponent {\n constructor(element, config) {\n super(element)\n\n this._config = this._getConfig(config)\n\n this._isSticky = false\n this._wrapper = null\n\n this._stickyTarget = SelectorEngine.findOne(getSelectorFromElement(this._element), this._element) || this._element\n this._stickyTargetMobile = SelectorEngine.findOne(this._element.getAttribute(DATA_TARGET_MOBILE), this._element) || this._stickyTarget //needed?\n this._stickyLimit = 0\n this._stickyLimitMobile = 0\n this._setLimit()\n\n this._scrollCb = null\n\n this._isMobile = isScreenMobile()\n\n this._prevTop = 0\n\n this._onScroll()\n this._bindEvents()\n }\n\n dispose() {\n EventHandler.off(window, EVENT_RESIZE)\n this._scrollCb.dispose()\n\n super.dispose()\n }\n // Getters\n\n static get NAME() {\n return NAME\n }\n\n // Public\n\n // Private\n _getConfig(config) {\n config = {\n ...Default,\n ...Manipulator.getDataAttributes(this._element),\n ...(typeof config === 'object' ? config : {}),\n }\n return config\n }\n\n _bindEvents() {\n EventHandler.on(window, EVENT_RESIZE, () => this._onResize())\n //EventHandler.on(window, EVENT_SCROLL, () => this._onScroll())\n this._scrollCb = onDocumentScroll(() => this._onScroll())\n }\n\n _onResize() {\n this._isMobile = isScreenMobile()\n this._setLimit()\n }\n\n _onScroll() {\n this._checkSticky()\n }\n\n _setLimit() {\n this._stickyLimit = this._cumulativeOffset(this._stickyTarget).top\n this._stickyLimitMobile = this._cumulativeOffset(this._stickyTargetMobile).top\n }\n\n _getLimit() {\n let newLimit = this._isMobile ? this._stickyLimitMobile : this._stickyLimit\n if (this._config.stackable) {\n this._getStickySimblings().forEach((sticky, idx) => {\n const data = sticky.getBoundingClientRect()\n newLimit -= data.height + (idx === 0 ? parseFloat(sticky.style.top) : 0)\n })\n }\n return newLimit > 0 ? newLimit : 0\n }\n\n /**\n * get the absolute position of an element\n * @param {*} element - the target element\n * @returns {Object} - absolute position top and left of the element\n */\n _cumulativeOffset(element) {\n let top = 0\n let left = 0\n do {\n top += element.offsetTop || 0\n left += element.offsetLeft || 0\n element = element.offsetParent\n } while (element)\n\n return {\n top: top,\n left: left,\n }\n }\n\n _isTypeSticky() {\n return this._config.positionType === 'sticky'\n }\n\n _checkSticky() {\n if (!this._isSticky) {\n //the target position can change dinamically\n this._setLimit()\n }\n const limit = this._getLimit()\n if (typeof window !== 'undefined' && window.pageYOffset > limit) {\n this._setSticky()\n } else {\n this._unsetSticky()\n }\n }\n _setSticky() {\n if (!this._isSticky) {\n this._isSticky = true\n let cssClass = CLASS_NAME_STICKY\n if (!this._isTypeSticky()) {\n cssClass = CLASS_NAME_FIXED\n this._wrapper = this._createWrapper()\n }\n this._element.classList.add(cssClass)\n if (this._config.stickyClassName) {\n this._element.classList.add(this._config.stickyClassName)\n }\n this._prevTop = this._element.style.top\n this._element.style.top = this._getPositionTop() + 'px'\n EventHandler.trigger(this._element, EVENT_STICKY_ON)\n }\n }\n _unsetSticky() {\n if (this._isSticky) {\n let cssClass = CLASS_NAME_STICKY\n if (!this._isTypeSticky()) {\n cssClass = CLASS_NAME_FIXED\n this._destroyWrapper()\n }\n this._element.classList.remove(cssClass)\n if (this._config.stickyClassName) {\n this._element.classList.remove(this._config.stickyClassName)\n }\n this._element.style.top = this._prevTop\n this._isSticky = false\n EventHandler.trigger(this._element, EVENT_STICKY_OFF)\n }\n }\n\n _createWrapper() {\n if (typeof document === 'undefined') {\n return\n }\n const wrapper = document.createElement('div')\n wrapper.classList.add(CLASS_NAME_WRAPPER)\n wrapper.style.width = '100%' //this._element.getBoundingClientRect().width + 'px'\n wrapper.style.height = this._element.getBoundingClientRect().height + 'px'\n wrapper.style.overflow = 'hidden'\n // insert wrapper before el in the DOM tree\n this._element.parentNode.insertBefore(wrapper, this._element)\n // move el into wrapper\n wrapper.appendChild(this._element)\n return wrapper\n }\n _destroyWrapper() {\n if (this._wrapper) {\n this._wrapper.parentNode.insertBefore(this._element, this._wrapper)\n this._wrapper.remove()\n }\n }\n\n _getStickySimblings() {\n const stickies = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n return stickies.filter((sticky) => {\n const instance = Sticky.getInstance(sticky)\n if (instance && instance._isSticky && sticky !== this._element) {\n return true\n }\n return false\n })\n }\n\n /**\n * returns the top position of the element considering the config and the other sticky elements\n */\n _getPositionTop() {\n let newTop = 0\n if (this._config.stackable) {\n this._getStickySimblings().forEach((sticky, idx) => {\n const data = sticky.getBoundingClientRect()\n newTop += data.height + (idx === 0 ? parseFloat(sticky.style.top) : 0)\n })\n return newTop\n } else {\n return newTop + this._config.paddingTop\n }\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nonDocumentScroll(() => {\n const stickies = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n stickies.map((sticky) => {\n Sticky.getOrCreateInstance(sticky)\n })\n})\n\nexport default Sticky\n"],"names":[],"mappings":";;;;;;;;AAiBA,MAAM,IAAI,GAAG;AACb,MAAM,QAAQ,GAAG;AACjB,MAAM,SAAS,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC;AAC/B;;AAEA;AACA,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC;AACxC,MAAM,eAAe,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC;AACvC,MAAM,gBAAgB,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC;;AAEzC,MAAM,kBAAkB,GAAG;AAC3B,MAAM,iBAAiB,GAAG;AAC1B,MAAM,gBAAgB,GAAG;;AAEzB,MAAM,kBAAkB,GAAG;;AAE3B,MAAM,oBAAoB,GAAG;;AAE7B,MAAM,OAAO,GAAG;AAChB,EAAE,YAAY,EAAE,QAAQ;AACxB,EAAE,eAAe,EAAE,EAAE;AACrB,EAAE,SAAS,EAAE,KAAK;AAClB,EAAE,UAAU,EAAE,CAAC;AACf;;AAEA,MAAM,MAAM,SAAS,aAAa,CAAC;AACnC,EAAE,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE;AAC/B,IAAI,KAAK,CAAC,OAAO;;AAEjB,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM;;AAEzC,IAAI,IAAI,CAAC,SAAS,GAAG;AACrB,IAAI,IAAI,CAAC,QAAQ,GAAG;;AAEpB,IAAI,IAAI,CAAC,aAAa,GAAG,cAAc,CAAC,OAAO,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC;AAC9G,IAAI,IAAI,CAAC,mBAAmB,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,kBAAkB,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,cAAa;AAC1I,IAAI,IAAI,CAAC,YAAY,GAAG;AACxB,IAAI,IAAI,CAAC,kBAAkB,GAAG;AAC9B,IAAI,IAAI,CAAC,SAAS;;AAElB,IAAI,IAAI,CAAC,SAAS,GAAG;;AAErB,IAAI,IAAI,CAAC,SAAS,GAAG,cAAc;;AAEnC,IAAI,IAAI,CAAC,QAAQ,GAAG;;AAEpB,IAAI,IAAI,CAAC,SAAS;AAClB,IAAI,IAAI,CAAC,WAAW;AACpB;;AAEA,EAAE,OAAO,GAAG;AACZ,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY;AACzC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO;;AAE1B,IAAI,KAAK,CAAC,OAAO;AACjB;AACA;;AAEA,EAAE,WAAW,IAAI,GAAG;AACpB,IAAI,OAAO;AACX;;AAEA;;AAEA;AACA,EAAE,UAAU,CAAC,MAAM,EAAE;AACrB,IAAI,MAAM,GAAG;AACb,MAAM,GAAG,OAAO;AAChB,MAAM,GAAG,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC;AACrD,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM,GAAG,EAAE,CAAC;AACnD;AACA,IAAI,OAAO;AACX;;AAEA,EAAE,WAAW,GAAG;AAChB,IAAI,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC,SAAS,EAAE;AAChE;AACA,IAAI,IAAI,CAAC,SAAS,GAAG,gBAAgB,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE;AAC5D;;AAEA,EAAE,SAAS,GAAG;AACd,IAAI,IAAI,CAAC,SAAS,GAAG,cAAc;AACnC,IAAI,IAAI,CAAC,SAAS;AAClB;;AAEA,EAAE,SAAS,GAAG;AACd,IAAI,IAAI,CAAC,YAAY;AACrB;;AAEA,EAAE,SAAS,GAAG;AACd,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACnE,IAAI,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;AAC/E;;AAEA,EAAE,SAAS,GAAG;AACd,IAAI,IAAI,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;AACnE,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AAChC,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,GAAG,KAAK;AAC1D,QAAQ,MAAM,IAAI,GAAG,MAAM,CAAC,qBAAqB;AACjD,QAAQ,QAAQ,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;AAC/E,OAAO;AACP;AACA,IAAI,OAAO,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG;AACrC;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,OAAO,EAAE;AAC7B,IAAI,IAAI,GAAG,GAAG;AACd,IAAI,IAAI,IAAI,GAAG;AACf,IAAI,GAAG;AACP,MAAM,GAAG,IAAI,OAAO,CAAC,SAAS,IAAI;AAClC,MAAM,IAAI,IAAI,OAAO,CAAC,UAAU,IAAI;AACpC,MAAM,OAAO,GAAG,OAAO,CAAC;AACxB,KAAK,QAAQ,OAAO;;AAEpB,IAAI,OAAO;AACX,MAAM,GAAG,EAAE,GAAG;AACd,MAAM,IAAI,EAAE,IAAI;AAChB;AACA;;AAEA,EAAE,aAAa,GAAG;AAClB,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,KAAK;AACzC;;AAEA,EAAE,YAAY,GAAG;AACjB,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACzB;AACA,MAAM,IAAI,CAAC,SAAS;AACpB;AACA,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS;AAChC,IAAI,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,WAAW,GAAG,KAAK,EAAE;AACrE,MAAM,IAAI,CAAC,UAAU;AACrB,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,YAAY;AACvB;AACA;AACA,EAAE,UAAU,GAAG;AACf,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACzB,MAAM,IAAI,CAAC,SAAS,GAAG;AACvB,MAAM,IAAI,QAAQ,GAAG;AACrB,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;AACjC,QAAQ,QAAQ,GAAG;AACnB,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc;AAC3C;AACA,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ;AAC1C,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;AACxC,QAAQ,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe;AAChE;AACA,MAAM,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC1C,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,GAAG;AACzD,MAAM,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe;AACzD;AACA;AACA,EAAE,YAAY,GAAG;AACjB,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE;AACxB,MAAM,IAAI,QAAQ,GAAG;AACrB,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;AACjC,QAAQ,QAAQ,GAAG;AACnB,QAAQ,IAAI,CAAC,eAAe;AAC5B;AACA,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ;AAC7C,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;AACxC,QAAQ,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe;AACnE;AACA,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC;AACrC,MAAM,IAAI,CAAC,SAAS,GAAG;AACvB,MAAM,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,gBAAgB;AAC1D;AACA;;AAEA,EAAE,cAAc,GAAG;AACnB,IAAI,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;AACzC,MAAM;AACN;AACA,IAAI,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK;AAChD,IAAI,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,kBAAkB;AAC5C,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,OAAM;AAChC,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,qBAAqB,EAAE,CAAC,MAAM,GAAG;AAC1E,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG;AAC7B;AACA,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ;AAChE;AACA,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ;AACrC,IAAI,OAAO;AACX;AACA,EAAE,eAAe,GAAG;AACpB,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;AACvB,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACxE,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM;AAC1B;AACA;;AAEA,EAAE,mBAAmB,GAAG;AACxB,IAAI,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,oBAAoB;AAC7D,IAAI,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK;AACvC,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM;AAChD,MAAM,IAAI,QAAQ,IAAI,QAAQ,CAAC,SAAS,IAAI,MAAM,KAAK,IAAI,CAAC,QAAQ,EAAE;AACtE,QAAQ,OAAO;AACf;AACA,MAAM,OAAO;AACb,KAAK;AACL;;AAEA;AACA;AACA;AACA,EAAE,eAAe,GAAG;AACpB,IAAI,IAAI,MAAM,GAAG;AACjB,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AAChC,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,GAAG,KAAK;AAC1D,QAAQ,MAAM,IAAI,GAAG,MAAM,CAAC,qBAAqB;AACjD,QAAQ,MAAM,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;AAC7E,OAAO;AACP,MAAM,OAAO;AACb,KAAK,MAAM;AACX,MAAM,OAAO,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;AACnC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,CAAC,MAAM;AACvB,EAAE,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,oBAAoB;AAC3D,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK;AAC3B,IAAI,MAAM,CAAC,mBAAmB,CAAC,MAAM;AACrC,GAAG;AACH,CAAC;;;;"}
1
+ {"version":3,"file":"sticky.js","sources":["../../src/js/plugins/sticky.js"],"sourcesContent":["import BaseComponent from './base-component.js'\n\nimport {\n getSelectorFromElement, //in base al bs-target\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport SelectorEngine from './dom/selector-engine'\nimport Manipulator from './dom/manipulator'\n\nimport { isScreenMobile } from './util/device'\nimport onDocumentScroll from './util/on-document-scroll'\n\nconst NAME = 'sticky'\nconst DATA_KEY = 'bs.sticky'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_STICKY_ON = `on${EVENT_KEY}`\nconst EVENT_STICKY_OFF = `off${EVENT_KEY}`\n\nconst CLASS_NAME_WRAPPER = 'bs-it-sticky-wrapper'\nconst CLASS_NAME_STICKY = 'bs-is-sticky'\nconst CLASS_NAME_FIXED = 'bs-is-fixed'\n\nconst DATA_TARGET_MOBILE = 'data-bs-target-mobile'\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"sticky\"]'\n\nconst Default = {\n positionType: 'sticky', //fixed\n stickyClassName: '',\n stackable: false,\n paddingTop: 0,\n}\n\nclass Sticky extends BaseComponent {\n constructor(element, config) {\n super(element)\n\n this._config = this._getConfig(config)\n\n this._isSticky = false\n this._wrapper = null\n\n this._stickyTarget = SelectorEngine.findOne(getSelectorFromElement(this._element), this._element) || this._element\n this._stickyTargetMobile = SelectorEngine.findOne(this._element.getAttribute(DATA_TARGET_MOBILE), this._element) || this._stickyTarget //needed?\n this._stickyLimit = 0\n this._stickyLimitMobile = 0\n this._setLimit()\n\n this._scrollCb = null\n\n this._isMobile = isScreenMobile()\n\n this._prevTop = 0\n\n this._onScroll()\n this._bindEvents()\n }\n\n dispose() {\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n EventHandler.off(window, EVENT_RESIZE)\n this._scrollCb.dispose()\n\n super.dispose()\n }\n }\n // Getters\n\n static get NAME() {\n return NAME\n }\n\n // Public\n\n // Private\n _getConfig(config) {\n config = {\n ...Default,\n ...Manipulator.getDataAttributes(this._element),\n ...(typeof config === 'object' ? config : {}),\n }\n return config\n }\n\n _bindEvents() {\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n EventHandler.on(window, EVENT_RESIZE, () => this._onResize())\n this._scrollCb = onDocumentScroll(() => this._onScroll())\n }\n }\n\n _onResize() {\n this._isMobile = isScreenMobile()\n this._setLimit()\n }\n\n _onScroll() {\n this._checkSticky()\n }\n\n _setLimit() {\n this._stickyLimit = this._cumulativeOffset(this._stickyTarget).top\n this._stickyLimitMobile = this._cumulativeOffset(this._stickyTargetMobile).top\n }\n\n _getLimit() {\n let newLimit = this._isMobile ? this._stickyLimitMobile : this._stickyLimit\n if (this._config.stackable) {\n this._getStickySimblings().forEach((sticky, idx) => {\n const data = sticky.getBoundingClientRect()\n newLimit -= data.height + (idx === 0 ? parseFloat(sticky.style.top) : 0)\n })\n }\n return newLimit > 0 ? newLimit : 0\n }\n\n /**\n * get the absolute position of an element\n * @param {*} element - the target element\n * @returns {Object} - absolute position top and left of the element\n */\n _cumulativeOffset(element) {\n let top = 0\n let left = 0\n do {\n top += element.offsetTop || 0\n left += element.offsetLeft || 0\n element = element.offsetParent\n } while (element)\n\n return {\n top: top,\n left: left,\n }\n }\n\n _isTypeSticky() {\n return this._config.positionType === 'sticky'\n }\n\n _checkSticky() {\n if (!this._isSticky) {\n //the target position can change dinamically\n this._setLimit()\n }\n const limit = this._getLimit()\n if (typeof window !== 'undefined' && window.pageYOffset > limit) {\n this._setSticky()\n } else {\n this._unsetSticky()\n }\n }\n _setSticky() {\n if (!this._isSticky) {\n this._isSticky = true\n let cssClass = CLASS_NAME_STICKY\n if (!this._isTypeSticky()) {\n cssClass = CLASS_NAME_FIXED\n this._wrapper = this._createWrapper()\n }\n this._element.classList.add(cssClass)\n if (this._config.stickyClassName) {\n this._element.classList.add(this._config.stickyClassName)\n }\n this._prevTop = this._element.style.top\n this._element.style.top = this._getPositionTop() + 'px'\n EventHandler.trigger(this._element, EVENT_STICKY_ON)\n }\n }\n _unsetSticky() {\n if (this._isSticky) {\n let cssClass = CLASS_NAME_STICKY\n if (!this._isTypeSticky()) {\n cssClass = CLASS_NAME_FIXED\n this._destroyWrapper()\n }\n this._element.classList.remove(cssClass)\n if (this._config.stickyClassName) {\n this._element.classList.remove(this._config.stickyClassName)\n }\n this._element.style.top = this._prevTop\n this._isSticky = false\n EventHandler.trigger(this._element, EVENT_STICKY_OFF)\n }\n }\n\n _createWrapper() {\n if (typeof document === 'undefined') {\n return\n }\n const wrapper = document.createElement('div')\n wrapper.classList.add(CLASS_NAME_WRAPPER)\n wrapper.style.width = '100%' //this._element.getBoundingClientRect().width + 'px'\n wrapper.style.height = this._element.getBoundingClientRect().height + 'px'\n wrapper.style.overflow = 'hidden'\n // insert wrapper before el in the DOM tree\n this._element.parentNode.insertBefore(wrapper, this._element)\n // move el into wrapper\n wrapper.appendChild(this._element)\n return wrapper\n }\n _destroyWrapper() {\n if (this._wrapper) {\n this._wrapper.parentNode.insertBefore(this._element, this._wrapper)\n this._wrapper.remove()\n }\n }\n\n _getStickySimblings() {\n const stickies = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n return stickies.filter((sticky) => {\n const instance = Sticky.getInstance(sticky)\n if (instance && instance._isSticky && sticky !== this._element) {\n return true\n }\n return false\n })\n }\n\n /**\n * returns the top position of the element considering the config and the other sticky elements\n */\n _getPositionTop() {\n let newTop = 0\n if (this._config.stackable) {\n this._getStickySimblings().forEach((sticky, idx) => {\n const data = sticky.getBoundingClientRect()\n newTop += data.height + (idx === 0 ? parseFloat(sticky.style.top) : 0)\n })\n return newTop\n } else {\n return newTop + this._config.paddingTop\n }\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nif (typeof window !== 'undefined' && typeof document !== 'undefined') {\n onDocumentScroll(() => {\n const stickies = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n stickies.map((sticky) => {\n Sticky.getOrCreateInstance(sticky)\n })\n })\n}\n\nexport default Sticky\n"],"names":[],"mappings":"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"}