maz-ui 4.0.0-alpha.4 → 4.0.0-alpha.5

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 (435) hide show
  1. package/dist/assets/{CountrySelector.Cnqbl3xF.css → CountrySelector.BQiHy60b.css} +1 -1
  2. package/dist/assets/{MazAccordion.DaqF3ZAX.css → MazAccordion.BE-38uDK.css} +1 -1
  3. package/dist/assets/{MazAnimatedCounter.DYYlw_wl.css → MazAnimatedCounter.ButbqlDb.css} +1 -1
  4. package/dist/assets/{MazAnimatedText.Dk4QO4xF.css → MazAnimatedText.BM3XYGO2.css} +1 -1
  5. package/dist/assets/{MazAvatar.L1UreldR.css → MazAvatar.udTL0S0c.css} +1 -1
  6. package/dist/assets/{MazBadge.RMWNkgZL.css → MazBadge.Cgfo0F7e.css} +1 -1
  7. package/dist/assets/{MazBottomSheet.Dqr-kpLb.css → MazBottomSheet.FbcAQBpM.css} +1 -1
  8. package/dist/assets/MazBtn.Bz7wwOFh.css +1 -0
  9. package/dist/assets/{MazCard.Cod9pIM4.css → MazCard.BayiNvpH.css} +1 -1
  10. package/dist/assets/{MazCardSpotlight.DuZac0w4.css → MazCardSpotlight.Y7PEY9QV.css} +1 -1
  11. package/dist/assets/{MazCarousel.BQIrqJ8T.css → MazCarousel.CB32PQvq.css} +1 -1
  12. package/dist/assets/{MazCheckbox.BQVJ7EUB.css → MazCheckbox.5EI5lIDK.css} +1 -1
  13. package/dist/assets/{MazChecklist.5ArDAEhG.css → MazChecklist.BGnIiTsI.css} +1 -1
  14. package/dist/assets/{MazCircularProgressBar.DywLXEfR.css → MazCircularProgressBar.0-JvCHgE.css} +1 -1
  15. package/dist/assets/{MazDialog.BLzdH8aa.css → MazDialog.BJMxj6he.css} +1 -1
  16. package/dist/assets/{MazDrawer.Cu4KVc_z.css → MazDrawer.BqaLe_QM.css} +1 -1
  17. package/dist/assets/{MazFullscreenLoader.DTW_WUM6.css → MazFullscreenLoader.Dkg4LB9B.css} +1 -1
  18. package/dist/assets/MazGallery.BoPDBMcv.css +1 -0
  19. package/dist/assets/MazInput.DMFoUNTH.css +1 -0
  20. package/dist/assets/MazInputCode.C0rRpNFq.css +1 -0
  21. package/dist/assets/{MazInputPhoneNumber.DKac4ZYj.css → MazInputPhoneNumber.Ill3zwW5.css} +1 -1
  22. package/dist/assets/{MazInputTags.eygPFBJC.css → MazInputTags.ewDauXwM.css} +1 -1
  23. package/dist/assets/{MazLazyImg.BvztvWbf.css → MazLazyImg.B6kyFMu0.css} +1 -1
  24. package/dist/assets/MazLink.C905PoWd.css +1 -0
  25. package/dist/assets/MazLoadingBar.BVDaL2oq.css +1 -0
  26. package/dist/assets/{MazPagination.DSYY_yu7.css → MazPagination.DxqlYYDI.css} +1 -1
  27. package/dist/assets/MazPicker.oSzqOK82.css +1 -0
  28. package/dist/assets/{MazPickerCalendar.K1FbevcF.css → MazPickerCalendar.9hsvH81G.css} +1 -1
  29. package/dist/assets/MazPickerCalendarMonth.DoG1aIdE.css +1 -0
  30. package/dist/assets/{MazPickerCalendarSwitcher.23EFP_7Y.css → MazPickerCalendarSwitcher.Cwm0pn-f.css} +1 -1
  31. package/dist/assets/{MazPickerHeader.CfwpRnA1.css → MazPickerHeader.BH5Uy1iP.css} +1 -1
  32. package/dist/assets/{MazPickerMonthSwitcher.Cl1WlZpR.css → MazPickerMonthSwitcher.D9wXQnld.css} +1 -1
  33. package/dist/assets/{MazPickerShortcuts.B1ASAi7L.css → MazPickerShortcuts.CLZ4NUtN.css} +1 -1
  34. package/dist/assets/{MazPickerTime.5J3qaKGo.css → MazPickerTime.B-Ym15z4.css} +1 -1
  35. package/dist/assets/{MazPickerYearSwitcher.Bt0efux6.css → MazPickerYearSwitcher.9YqgG2Jv.css} +1 -1
  36. package/dist/assets/{MazPullToRefresh.BdvKaU9N.css → MazPullToRefresh.BSBm9qbV.css} +1 -1
  37. package/dist/assets/{MazRadio.zYTBn9Pj.css → MazRadio.OJL8pfy2.css} +1 -1
  38. package/dist/assets/{MazRadioButtons.CIq38oX6.css → MazRadioButtons.u111N9bH.css} +1 -1
  39. package/dist/assets/MazReadingProgressBar.CT2EjYkv.css +1 -0
  40. package/dist/assets/{MazSelect.CH_76PSg.css → MazSelect.DG-B1UJ6.css} +1 -1
  41. package/dist/assets/{MazSlider.D08gO9DD.css → MazSlider.KrU-f4K4.css} +1 -1
  42. package/dist/assets/MazSpinner.C2jmWJte.css +1 -0
  43. package/dist/assets/{MazStepper.BE3Mm9rm.css → MazStepper.CFdY5O1y.css} +1 -1
  44. package/dist/assets/MazTable.uvNQLDVh.css +1 -0
  45. package/dist/assets/MazTableCell.DCsBuRdY.css +1 -0
  46. package/dist/assets/MazTableRow.B4o1JJ00.css +1 -0
  47. package/dist/assets/MazTableTitle.CA6gYzgP.css +1 -0
  48. package/dist/assets/{MazTabsBar.-q3BbMXe.css → MazTabsBar.Bfij2njx.css} +1 -1
  49. package/dist/assets/{MazTabsContentItem.C0ygFU51.css → MazTabsContentItem.C9kvAsC7.css} +1 -1
  50. package/dist/assets/{MazTextarea.QTMu0OQv.css → MazTextarea.BML1BVBM.css} +1 -1
  51. package/dist/assets/PhoneInput.BBnKae_d.css +1 -0
  52. package/dist/assets/{fullscreen-img.hjNozahA.css → fullscreen-img.Dnt1uj_5.css} +1 -1
  53. package/dist/assets/{toaster.C9zhIkIO.css → toaster.BfTrtY6B.css} +1 -1
  54. package/dist/chunks/{CountrySelector.mFGaqpPf.cjs → CountrySelector.1nlVeBqW.cjs} +2 -2
  55. package/dist/chunks/CountrySelector.1nlVeBqW.cjs.map +1 -0
  56. package/dist/chunks/{CountrySelector.C5XZelLY.mjs → CountrySelector.qQCR0FE6.mjs} +14 -14
  57. package/dist/chunks/CountrySelector.qQCR0FE6.mjs.map +1 -0
  58. package/dist/chunks/MazDialogPromise.vue_vue_type_script_setup_true_lang.CS5GU9Q2.cjs.map +1 -1
  59. package/dist/chunks/MazDialogPromise.vue_vue_type_script_setup_true_lang.bPYjg0yY.mjs.map +1 -1
  60. package/dist/chunks/MazDropdown.vue_vue_type_script_setup_true_lang.B5kO0VJW.mjs.map +1 -1
  61. package/dist/chunks/MazDropdown.vue_vue_type_script_setup_true_lang.DLWmXVjB.cjs.map +1 -1
  62. package/dist/chunks/MazIcon.vue_vue_type_script_setup_true_lang.C5NwBerh.cjs.map +1 -1
  63. package/dist/chunks/MazIcon.vue_vue_type_script_setup_true_lang.CLoEj0Zf.mjs.map +1 -1
  64. package/dist/chunks/{MazInputNumber.vue_vue_type_script_setup_true_lang.DiawfWBC.cjs → MazInputNumber.vue_vue_type_script_setup_true_lang.BM2uHjda.cjs} +2 -2
  65. package/dist/chunks/MazInputNumber.vue_vue_type_script_setup_true_lang.BM2uHjda.cjs.map +1 -0
  66. package/dist/chunks/{MazInputNumber.vue_vue_type_script_setup_true_lang.Bbod2mLd.mjs → MazInputNumber.vue_vue_type_script_setup_true_lang.CsH-SPhu.mjs} +5 -5
  67. package/dist/chunks/MazInputNumber.vue_vue_type_script_setup_true_lang.CsH-SPhu.mjs.map +1 -0
  68. package/dist/chunks/{MazInputPhoneNumber.B173m1hd.mjs → MazInputPhoneNumber.BluSBPXE.mjs} +10 -10
  69. package/dist/chunks/{MazInputPhoneNumber.B173m1hd.mjs.map → MazInputPhoneNumber.BluSBPXE.mjs.map} +1 -1
  70. package/dist/chunks/{MazInputPhoneNumber.EZVh1Yx5.cjs → MazInputPhoneNumber.TorVuc9s.cjs} +2 -2
  71. package/dist/chunks/{MazInputPhoneNumber.EZVh1Yx5.cjs.map → MazInputPhoneNumber.TorVuc9s.cjs.map} +1 -1
  72. package/dist/chunks/{MazInputPrice.vue_vue_type_script_setup_true_lang.C3X2lwRl.mjs → MazInputPrice.vue_vue_type_script_setup_true_lang.C873_Haj.mjs} +5 -5
  73. package/dist/chunks/MazInputPrice.vue_vue_type_script_setup_true_lang.C873_Haj.mjs.map +1 -0
  74. package/dist/chunks/{MazInputPrice.vue_vue_type_script_setup_true_lang.CCatmP_L.cjs → MazInputPrice.vue_vue_type_script_setup_true_lang.Ovh3fdmh.cjs} +2 -2
  75. package/dist/chunks/MazInputPrice.vue_vue_type_script_setup_true_lang.Ovh3fdmh.cjs.map +1 -0
  76. package/dist/chunks/{MazPicker.BZE8cw36.cjs → MazPicker.D2ra6fVy.cjs} +2 -2
  77. package/dist/chunks/MazPicker.D2ra6fVy.cjs.map +1 -0
  78. package/dist/chunks/{MazPicker.DCnOkRvv.mjs → MazPicker.hoqM5DbN.mjs} +20 -20
  79. package/dist/chunks/MazPicker.hoqM5DbN.mjs.map +1 -0
  80. package/dist/chunks/{MazPickerCalendar.NeYLrtl-.mjs → MazPickerCalendar.Ban3DAo1.mjs} +4 -4
  81. package/dist/chunks/MazPickerCalendar.Ban3DAo1.mjs.map +1 -0
  82. package/dist/chunks/{MazPickerCalendar.CVZ8VoYr.cjs → MazPickerCalendar.CEJcAKlj.cjs} +2 -2
  83. package/dist/chunks/MazPickerCalendar.CEJcAKlj.cjs.map +1 -0
  84. package/dist/chunks/{MazPickerCalendarMonth.rnaiDHFM.mjs → MazPickerCalendarMonth.D4Ink4If.mjs} +14 -14
  85. package/dist/chunks/MazPickerCalendarMonth.D4Ink4If.mjs.map +1 -0
  86. package/dist/chunks/{MazPickerCalendarMonth.DpvQC45k.cjs → MazPickerCalendarMonth.DBDcSR1B.cjs} +2 -2
  87. package/dist/chunks/MazPickerCalendarMonth.DBDcSR1B.cjs.map +1 -0
  88. package/dist/chunks/{MazPickerCalendarSwitcher.DC2wff_J.cjs → MazPickerCalendarSwitcher.CyjRYcya.cjs} +2 -2
  89. package/dist/chunks/MazPickerCalendarSwitcher.CyjRYcya.cjs.map +1 -0
  90. package/dist/chunks/{MazPickerCalendarSwitcher.DFGrD6Cr.mjs → MazPickerCalendarSwitcher.DTDyFG7S.mjs} +19 -19
  91. package/dist/chunks/MazPickerCalendarSwitcher.DTDyFG7S.mjs.map +1 -0
  92. package/dist/chunks/{MazPickerHeader.B7YY9SJI.mjs → MazPickerHeader.C1asX8dz.mjs} +8 -8
  93. package/dist/chunks/MazPickerHeader.C1asX8dz.mjs.map +1 -0
  94. package/dist/chunks/{MazPickerHeader.l7NcmiGH.cjs → MazPickerHeader.COT92ysE.cjs} +2 -2
  95. package/dist/chunks/MazPickerHeader.COT92ysE.cjs.map +1 -0
  96. package/dist/chunks/{MazPickerMonthSwitcher.CbplWFfL.cjs → MazPickerMonthSwitcher.Cw82Rq9C.cjs} +2 -2
  97. package/dist/chunks/MazPickerMonthSwitcher.Cw82Rq9C.cjs.map +1 -0
  98. package/dist/chunks/{MazPickerMonthSwitcher.CAPx3PCt.mjs → MazPickerMonthSwitcher.jPGBQm-N.mjs} +9 -9
  99. package/dist/chunks/MazPickerMonthSwitcher.jPGBQm-N.mjs.map +1 -0
  100. package/dist/chunks/{MazPickerShortcuts.Bawm0q33.mjs → MazPickerShortcuts.Dvs1sJMi.mjs} +3 -3
  101. package/dist/chunks/MazPickerShortcuts.Dvs1sJMi.mjs.map +1 -0
  102. package/dist/chunks/{MazPickerShortcuts.LxFs0Y6N.cjs → MazPickerShortcuts.GUfnNHPI.cjs} +2 -2
  103. package/dist/chunks/MazPickerShortcuts.GUfnNHPI.cjs.map +1 -0
  104. package/dist/chunks/{MazPickerTime.C27aFPPw.mjs → MazPickerTime.C1LitEcr.mjs} +5 -5
  105. package/dist/chunks/MazPickerTime.C1LitEcr.mjs.map +1 -0
  106. package/dist/chunks/{MazPickerTime.7cxq-Qac.cjs → MazPickerTime.wlOm39gv.cjs} +2 -2
  107. package/dist/chunks/MazPickerTime.wlOm39gv.cjs.map +1 -0
  108. package/dist/chunks/{MazPickerYearSwitcher.Dku2IMIJ.cjs → MazPickerYearSwitcher.CPREj35R.cjs} +2 -2
  109. package/dist/chunks/MazPickerYearSwitcher.CPREj35R.cjs.map +1 -0
  110. package/dist/chunks/{MazPickerYearSwitcher.DMBOaMYy.mjs → MazPickerYearSwitcher.D_onf-0L.mjs} +17 -17
  111. package/dist/chunks/MazPickerYearSwitcher.D_onf-0L.mjs.map +1 -0
  112. package/dist/chunks/MazSwitch.vue_vue_type_script_setup_true_lang.C74s_H37.cjs.map +1 -1
  113. package/dist/chunks/MazSwitch.vue_vue_type_script_setup_true_lang.jyNV3g3U.mjs.map +1 -1
  114. package/dist/chunks/{MazTable.vue_vue_type_style_index_0_scoped_4101f1d3_lang.Ctmf2NVE.cjs → MazTable.vue_vue_type_style_index_0_scoped_cd8655c9_lang.BnCH1CvT.cjs} +2 -2
  115. package/dist/chunks/MazTable.vue_vue_type_style_index_0_scoped_cd8655c9_lang.BnCH1CvT.cjs.map +1 -0
  116. package/dist/chunks/{MazTable.vue_vue_type_style_index_0_scoped_4101f1d3_lang.Dwkx-V96.mjs → MazTable.vue_vue_type_style_index_0_scoped_cd8655c9_lang.Dj2OkfOV.mjs} +4 -4
  117. package/dist/chunks/MazTable.vue_vue_type_style_index_0_scoped_cd8655c9_lang.Dj2OkfOV.mjs.map +1 -0
  118. package/dist/chunks/MazTabsContent.vue_vue_type_script_setup_true_lang.BGqO0ynq.mjs.map +1 -1
  119. package/dist/chunks/MazTabsContent.vue_vue_type_script_setup_true_lang.DariT_zv.cjs.map +1 -1
  120. package/dist/chunks/{PhoneInput.9GQJbL9x.mjs → PhoneInput.DYm0yzgy.mjs} +11 -11
  121. package/dist/chunks/PhoneInput.DYm0yzgy.mjs.map +1 -0
  122. package/dist/chunks/{PhoneInput.D5DG4S60.cjs → PhoneInput.wXP8tsCy.cjs} +2 -2
  123. package/dist/chunks/PhoneInput.wXP8tsCy.cjs.map +1 -0
  124. package/dist/chunks/{fullscreen-img.directive.CrLLYi0D.mjs → fullscreen-img.directive.CEBhPyiD.mjs} +22 -22
  125. package/dist/chunks/fullscreen-img.directive.CEBhPyiD.mjs.map +1 -0
  126. package/dist/chunks/{fullscreen-img.directive.CeREtf7H.cjs → fullscreen-img.directive.CK-8DToy.cjs} +2 -2
  127. package/dist/chunks/fullscreen-img.directive.CK-8DToy.cjs.map +1 -0
  128. package/dist/chunks/lazy-img.directive.BeENE6S9.cjs.map +1 -1
  129. package/dist/chunks/lazy-img.directive.DqXA0UFo.mjs.map +1 -1
  130. package/dist/chunks/{utils.Bex2hM45.mjs → utils.BxNCknPj.mjs} +11 -11
  131. package/dist/chunks/utils.BxNCknPj.mjs.map +1 -0
  132. package/dist/chunks/{utils.vGzCTXH5.cjs → utils.K864VNFX.cjs} +2 -2
  133. package/dist/chunks/utils.K864VNFX.cjs.map +1 -0
  134. package/dist/components/MazAccordion.cjs +1 -1
  135. package/dist/components/MazAccordion.cjs.map +1 -1
  136. package/dist/components/MazAccordion.mjs +13 -13
  137. package/dist/components/MazAccordion.mjs.map +1 -1
  138. package/dist/components/MazAnimatedCounter.cjs +1 -1
  139. package/dist/components/MazAnimatedCounter.cjs.map +1 -1
  140. package/dist/components/MazAnimatedCounter.mjs +2 -2
  141. package/dist/components/MazAnimatedCounter.mjs.map +1 -1
  142. package/dist/components/MazAnimatedText.cjs +1 -1
  143. package/dist/components/MazAnimatedText.cjs.map +1 -1
  144. package/dist/components/MazAnimatedText.mjs +11 -11
  145. package/dist/components/MazAnimatedText.mjs.map +1 -1
  146. package/dist/components/MazAvatar.cjs +1 -1
  147. package/dist/components/MazAvatar.cjs.map +1 -1
  148. package/dist/components/MazAvatar.mjs +2 -2
  149. package/dist/components/MazAvatar.mjs.map +1 -1
  150. package/dist/components/MazBadge.cjs +1 -1
  151. package/dist/components/MazBadge.mjs +2 -2
  152. package/dist/components/MazBottomSheet.cjs +1 -1
  153. package/dist/components/MazBottomSheet.cjs.map +1 -1
  154. package/dist/components/MazBottomSheet.mjs +10 -10
  155. package/dist/components/MazBottomSheet.mjs.map +1 -1
  156. package/dist/components/MazBtn.cjs +1 -1
  157. package/dist/components/MazBtn.cjs.map +1 -1
  158. package/dist/components/MazBtn.mjs +2 -2
  159. package/dist/components/MazBtn.mjs.map +1 -1
  160. package/dist/components/MazCard.cjs +1 -1
  161. package/dist/components/MazCard.cjs.map +1 -1
  162. package/dist/components/MazCard.mjs +2 -2
  163. package/dist/components/MazCard.mjs.map +1 -1
  164. package/dist/components/MazCardSpotlight.cjs +1 -1
  165. package/dist/components/MazCardSpotlight.cjs.map +1 -1
  166. package/dist/components/MazCardSpotlight.mjs +2 -2
  167. package/dist/components/MazCardSpotlight.mjs.map +1 -1
  168. package/dist/components/MazCarousel.cjs +1 -1
  169. package/dist/components/MazCarousel.cjs.map +1 -1
  170. package/dist/components/MazCarousel.mjs +2 -2
  171. package/dist/components/MazCarousel.mjs.map +1 -1
  172. package/dist/components/MazCheckbox.cjs +1 -1
  173. package/dist/components/MazCheckbox.cjs.map +1 -1
  174. package/dist/components/MazCheckbox.mjs +6 -6
  175. package/dist/components/MazCheckbox.mjs.map +1 -1
  176. package/dist/components/MazChecklist.cjs +1 -1
  177. package/dist/components/MazChecklist.cjs.map +1 -1
  178. package/dist/components/MazChecklist.mjs +3 -3
  179. package/dist/components/MazChecklist.mjs.map +1 -1
  180. package/dist/components/MazCircularProgressBar.cjs +1 -1
  181. package/dist/components/MazCircularProgressBar.cjs.map +1 -1
  182. package/dist/components/MazCircularProgressBar.mjs +2 -2
  183. package/dist/components/MazCircularProgressBar.mjs.map +1 -1
  184. package/dist/components/MazDialog.cjs +1 -1
  185. package/dist/components/MazDialog.cjs.map +1 -1
  186. package/dist/components/MazDialog.mjs +2 -2
  187. package/dist/components/MazDialog.mjs.map +1 -1
  188. package/dist/components/MazDrawer.cjs +1 -1
  189. package/dist/components/MazDrawer.cjs.map +1 -1
  190. package/dist/components/MazDrawer.mjs +8 -8
  191. package/dist/components/MazDrawer.mjs.map +1 -1
  192. package/dist/components/MazDropzone.cjs.map +1 -1
  193. package/dist/components/MazDropzone.mjs.map +1 -1
  194. package/dist/components/MazFullscreenLoader.cjs +1 -1
  195. package/dist/components/MazFullscreenLoader.cjs.map +1 -1
  196. package/dist/components/MazFullscreenLoader.mjs +2 -2
  197. package/dist/components/MazFullscreenLoader.mjs.map +1 -1
  198. package/dist/components/MazGallery.cjs +1 -1
  199. package/dist/components/MazGallery.cjs.map +1 -1
  200. package/dist/components/MazGallery.mjs +3 -3
  201. package/dist/components/MazGallery.mjs.map +1 -1
  202. package/dist/components/MazInput.cjs +1 -1
  203. package/dist/components/MazInput.cjs.map +1 -1
  204. package/dist/components/MazInput.mjs +2 -2
  205. package/dist/components/MazInput.mjs.map +1 -1
  206. package/dist/components/MazInputCode.cjs +1 -1
  207. package/dist/components/MazInputCode.cjs.map +1 -1
  208. package/dist/components/MazInputCode.mjs +5 -5
  209. package/dist/components/MazInputCode.mjs.map +1 -1
  210. package/dist/components/MazInputNumber.cjs +1 -1
  211. package/dist/components/MazInputNumber.mjs +1 -1
  212. package/dist/components/MazInputPhoneNumber.cjs +1 -1
  213. package/dist/components/MazInputPhoneNumber.mjs +1 -1
  214. package/dist/components/MazInputPrice.cjs +1 -1
  215. package/dist/components/MazInputPrice.mjs +1 -1
  216. package/dist/components/MazInputTags.cjs +1 -1
  217. package/dist/components/MazInputTags.cjs.map +1 -1
  218. package/dist/components/MazInputTags.mjs +8 -8
  219. package/dist/components/MazInputTags.mjs.map +1 -1
  220. package/dist/components/MazLazyImg.cjs +1 -1
  221. package/dist/components/MazLazyImg.cjs.map +1 -1
  222. package/dist/components/MazLazyImg.mjs +5 -5
  223. package/dist/components/MazLazyImg.mjs.map +1 -1
  224. package/dist/components/MazLink.cjs +1 -1
  225. package/dist/components/MazLink.cjs.map +1 -1
  226. package/dist/components/MazLink.mjs +2 -2
  227. package/dist/components/MazLink.mjs.map +1 -1
  228. package/dist/components/MazLoadingBar.cjs +1 -1
  229. package/dist/components/MazLoadingBar.cjs.map +1 -1
  230. package/dist/components/MazLoadingBar.mjs +4 -4
  231. package/dist/components/MazLoadingBar.mjs.map +1 -1
  232. package/dist/components/MazPagination.cjs +1 -1
  233. package/dist/components/MazPagination.cjs.map +1 -1
  234. package/dist/components/MazPagination.mjs +2 -2
  235. package/dist/components/MazPagination.mjs.map +1 -1
  236. package/dist/components/MazPicker.cjs +1 -1
  237. package/dist/components/MazPicker.mjs +1 -1
  238. package/dist/components/MazPullToRefresh.cjs +1 -1
  239. package/dist/components/MazPullToRefresh.cjs.map +1 -1
  240. package/dist/components/MazPullToRefresh.mjs +2 -2
  241. package/dist/components/MazPullToRefresh.mjs.map +1 -1
  242. package/dist/components/MazRadio.cjs +1 -1
  243. package/dist/components/MazRadio.cjs.map +1 -1
  244. package/dist/components/MazRadio.mjs +7 -7
  245. package/dist/components/MazRadio.mjs.map +1 -1
  246. package/dist/components/MazRadioButtons.cjs +1 -1
  247. package/dist/components/MazRadioButtons.cjs.map +1 -1
  248. package/dist/components/MazRadioButtons.mjs +2 -2
  249. package/dist/components/MazRadioButtons.mjs.map +1 -1
  250. package/dist/components/MazReadingProgressBar.cjs +1 -1
  251. package/dist/components/MazReadingProgressBar.cjs.map +1 -1
  252. package/dist/components/MazReadingProgressBar.mjs +7 -7
  253. package/dist/components/MazReadingProgressBar.mjs.map +1 -1
  254. package/dist/components/MazSelect.cjs +1 -1
  255. package/dist/components/MazSelect.cjs.map +1 -1
  256. package/dist/components/MazSelect.mjs +7 -7
  257. package/dist/components/MazSelect.mjs.map +1 -1
  258. package/dist/components/MazSlider.cjs +1 -1
  259. package/dist/components/MazSlider.cjs.map +1 -1
  260. package/dist/components/MazSlider.mjs +11 -11
  261. package/dist/components/MazSlider.mjs.map +1 -1
  262. package/dist/components/MazSpinner.cjs +1 -1
  263. package/dist/components/MazSpinner.mjs +2 -2
  264. package/dist/components/MazStepper.cjs +1 -1
  265. package/dist/components/MazStepper.cjs.map +1 -1
  266. package/dist/components/MazStepper.mjs +22 -22
  267. package/dist/components/MazStepper.mjs.map +1 -1
  268. package/dist/components/MazTable.cjs +1 -1
  269. package/dist/components/MazTable.mjs +3 -3
  270. package/dist/components/MazTableCell.cjs +1 -1
  271. package/dist/components/MazTableCell.cjs.map +1 -1
  272. package/dist/components/MazTableCell.mjs +7 -7
  273. package/dist/components/MazTableCell.mjs.map +1 -1
  274. package/dist/components/MazTableRow.cjs +1 -1
  275. package/dist/components/MazTableRow.cjs.map +1 -1
  276. package/dist/components/MazTableRow.mjs +7 -7
  277. package/dist/components/MazTableRow.mjs.map +1 -1
  278. package/dist/components/MazTableTitle.cjs +1 -1
  279. package/dist/components/MazTableTitle.cjs.map +1 -1
  280. package/dist/components/MazTableTitle.mjs +3 -3
  281. package/dist/components/MazTableTitle.mjs.map +1 -1
  282. package/dist/components/MazTabsBar.cjs +1 -1
  283. package/dist/components/MazTabsBar.cjs.map +1 -1
  284. package/dist/components/MazTabsBar.mjs +2 -2
  285. package/dist/components/MazTabsBar.mjs.map +1 -1
  286. package/dist/components/MazTabsContentItem.cjs +1 -1
  287. package/dist/components/MazTabsContentItem.cjs.map +1 -1
  288. package/dist/components/MazTabsContentItem.mjs +2 -2
  289. package/dist/components/MazTabsContentItem.mjs.map +1 -1
  290. package/dist/components/MazTextarea.cjs +1 -1
  291. package/dist/components/MazTextarea.cjs.map +1 -1
  292. package/dist/components/MazTextarea.mjs +6 -6
  293. package/dist/components/MazTextarea.mjs.map +1 -1
  294. package/dist/composables/useAos.cjs.map +1 -1
  295. package/dist/composables/useAos.mjs.map +1 -1
  296. package/dist/composables/useDialog.cjs.map +1 -1
  297. package/dist/composables/useDialog.mjs.map +1 -1
  298. package/dist/composables/useFormField.cjs +1 -1
  299. package/dist/composables/useFormField.cjs.map +1 -1
  300. package/dist/composables/useFormField.mjs +19 -19
  301. package/dist/composables/useFormField.mjs.map +1 -1
  302. package/dist/composables/useFormValidator.cjs +1 -1
  303. package/dist/composables/useFormValidator.cjs.map +1 -1
  304. package/dist/composables/useFormValidator.mjs +11 -11
  305. package/dist/composables/useFormValidator.mjs.map +1 -1
  306. package/dist/composables/useIdleTimeout.cjs.map +1 -1
  307. package/dist/composables/useIdleTimeout.mjs.map +1 -1
  308. package/dist/composables/useStringMatching.cjs +1 -1
  309. package/dist/composables/useStringMatching.cjs.map +1 -1
  310. package/dist/composables/useStringMatching.mjs +1 -1
  311. package/dist/composables/useStringMatching.mjs.map +1 -1
  312. package/dist/composables/useSwipe.cjs +1 -1
  313. package/dist/composables/useSwipe.cjs.map +1 -1
  314. package/dist/composables/useSwipe.mjs +3 -3
  315. package/dist/composables/useSwipe.mjs.map +1 -1
  316. package/dist/composables/useThemeHandler.cjs +1 -1
  317. package/dist/composables/useThemeHandler.cjs.map +1 -1
  318. package/dist/composables/useThemeHandler.mjs +1 -1
  319. package/dist/composables/useThemeHandler.mjs.map +1 -1
  320. package/dist/composables/useToast.cjs.map +1 -1
  321. package/dist/composables/useToast.mjs.map +1 -1
  322. package/dist/composables/useUserVisibilty.cjs.map +1 -1
  323. package/dist/composables/useUserVisibilty.mjs.map +1 -1
  324. package/dist/composables/useWait.cjs.map +1 -1
  325. package/dist/composables/useWait.mjs.map +1 -1
  326. package/dist/composables/useWindowSize.cjs +1 -1
  327. package/dist/composables/useWindowSize.cjs.map +1 -1
  328. package/dist/composables/useWindowSize.mjs +5 -5
  329. package/dist/composables/useWindowSize.mjs.map +1 -1
  330. package/dist/directives/vClickOutside.cjs.map +1 -1
  331. package/dist/directives/vClickOutside.mjs.map +1 -1
  332. package/dist/directives/vClosable.cjs.map +1 -1
  333. package/dist/directives/vClosable.mjs.map +1 -1
  334. package/dist/directives/vFullscreenImg.cjs +1 -1
  335. package/dist/directives/vFullscreenImg.mjs +1 -1
  336. package/dist/directives/vLazyImg.cjs.map +1 -1
  337. package/dist/directives/vLazyImg.mjs.map +1 -1
  338. package/dist/directives/vTooltip.cjs.map +1 -1
  339. package/dist/directives/vTooltip.mjs.map +1 -1
  340. package/dist/filters/pascalCase.cjs.map +1 -1
  341. package/dist/filters/pascalCase.mjs.map +1 -1
  342. package/dist/helpers/countryCodeToUnicodeFlag.cjs.map +1 -1
  343. package/dist/helpers/countryCodeToUnicodeFlag.mjs.map +1 -1
  344. package/dist/index.cjs +1 -1
  345. package/dist/index.mjs +5 -5
  346. package/dist/nuxt/module.d.mts +1 -1
  347. package/dist/nuxt/module.d.ts +1 -1
  348. package/dist/nuxt/module.json +1 -1
  349. package/dist/nuxt/module.mjs +13 -8
  350. package/dist/nuxt/runtime/plugins/dialog.js +2 -2
  351. package/dist/plugins/aos.cjs.map +1 -1
  352. package/dist/plugins/aos.mjs.map +1 -1
  353. package/dist/plugins/dialog.cjs.map +1 -1
  354. package/dist/plugins/dialog.mjs.map +1 -1
  355. package/dist/plugins/toaster.cjs +1 -1
  356. package/dist/plugins/toaster.cjs.map +1 -1
  357. package/dist/plugins/toaster.mjs +2 -2
  358. package/dist/plugins/toaster.mjs.map +1 -1
  359. package/dist/resolvers/UnpluginVueComponentsResolver.cjs.map +1 -1
  360. package/dist/resolvers/UnpluginVueComponentsResolver.mjs.map +1 -1
  361. package/dist/types/components/MazAvatar.vue.d.ts +1 -1
  362. package/dist/types/components/MazCard.vue.d.ts +1 -1
  363. package/dist/types/components/MazDialogPromise/useMazDialogPromise.d.ts +1 -1
  364. package/dist/types/components/MazDropdown.vue.d.ts +1 -1
  365. package/dist/types/components/MazInputPhoneNumber/CountrySelector.vue.d.ts +3 -3
  366. package/dist/types/components/MazInputPhoneNumber/types.d.ts +1 -1
  367. package/dist/types/components/MazInputPhoneNumber.vue.d.ts +1 -1
  368. package/dist/types/components/MazLazyImg.vue.d.ts +1 -1
  369. package/dist/types/components/MazLink.vue.d.ts +1 -1
  370. package/dist/types/components/MazPicker/MazPickerCalendar.vue.d.ts +1 -1
  371. package/dist/types/components/MazPicker/MazPickerCalendarMonth/MazPickerCalendarGrid.vue.d.ts +1 -1
  372. package/dist/types/components/MazPicker/MazPickerCalendarMonth/MazPickerCalendarMonth.vue.d.ts +1 -1
  373. package/dist/types/components/MazPicker/MazPickerContainer.vue.d.ts +1 -1
  374. package/dist/types/components/MazPicker/MazPickerHeader.vue.d.ts +1 -1
  375. package/dist/types/components/MazPicker/MazPickerShortcuts.vue.d.ts +1 -1
  376. package/dist/types/components/MazPicker/MazPickerTime.vue.d.ts +2 -2
  377. package/dist/types/components/MazPicker/utils.d.ts +1 -1
  378. package/dist/types/components/MazSlider.vue.d.ts +1 -1
  379. package/dist/types/components/constantes.d.ts +1 -2
  380. package/dist/types/components/types.d.ts +2 -1
  381. package/dist/types/composables/useFormField.d.ts +2 -2
  382. package/dist/types/composables/useFormValidator/types.d.ts +3 -3
  383. package/dist/types/composables/useFormValidator.d.ts +3 -3
  384. package/dist/types/directives/vClickOutside.d.ts +1 -1
  385. package/dist/types/directives/vClosable.d.ts +1 -1
  386. package/dist/types/directives/vLazyImg.d.ts +2 -1
  387. package/dist/types/directives/vTooltip.d.ts +1 -1
  388. package/package.json +3 -4
  389. package/dist/assets/MazBtn.7QWd6o3M.css +0 -1
  390. package/dist/assets/MazGallery.ChuEM3_y.css +0 -1
  391. package/dist/assets/MazInput.C5uUOQLJ.css +0 -1
  392. package/dist/assets/MazInputCode.C1Mlb3p3.css +0 -1
  393. package/dist/assets/MazLink.DQ7r1i9T.css +0 -1
  394. package/dist/assets/MazLoadingBar.C6sNjytz.css +0 -1
  395. package/dist/assets/MazPicker.fY2qT4ER.css +0 -1
  396. package/dist/assets/MazPickerCalendarMonth.GACBSeof.css +0 -1
  397. package/dist/assets/MazReadingProgressBar.CbqVvC8N.css +0 -1
  398. package/dist/assets/MazSpinner.DTuz1RdS.css +0 -1
  399. package/dist/assets/MazTable.D06R_2nI.css +0 -1
  400. package/dist/assets/MazTableCell.BDmda4j7.css +0 -1
  401. package/dist/assets/MazTableRow.Copw9RJN.css +0 -1
  402. package/dist/assets/MazTableTitle.Cspgmj1g.css +0 -1
  403. package/dist/assets/PhoneInput.utJQQXVJ.css +0 -1
  404. package/dist/chunks/CountrySelector.C5XZelLY.mjs.map +0 -1
  405. package/dist/chunks/CountrySelector.mFGaqpPf.cjs.map +0 -1
  406. package/dist/chunks/MazInputNumber.vue_vue_type_script_setup_true_lang.Bbod2mLd.mjs.map +0 -1
  407. package/dist/chunks/MazInputNumber.vue_vue_type_script_setup_true_lang.DiawfWBC.cjs.map +0 -1
  408. package/dist/chunks/MazInputPrice.vue_vue_type_script_setup_true_lang.C3X2lwRl.mjs.map +0 -1
  409. package/dist/chunks/MazInputPrice.vue_vue_type_script_setup_true_lang.CCatmP_L.cjs.map +0 -1
  410. package/dist/chunks/MazPicker.BZE8cw36.cjs.map +0 -1
  411. package/dist/chunks/MazPicker.DCnOkRvv.mjs.map +0 -1
  412. package/dist/chunks/MazPickerCalendar.CVZ8VoYr.cjs.map +0 -1
  413. package/dist/chunks/MazPickerCalendar.NeYLrtl-.mjs.map +0 -1
  414. package/dist/chunks/MazPickerCalendarMonth.DpvQC45k.cjs.map +0 -1
  415. package/dist/chunks/MazPickerCalendarMonth.rnaiDHFM.mjs.map +0 -1
  416. package/dist/chunks/MazPickerCalendarSwitcher.DC2wff_J.cjs.map +0 -1
  417. package/dist/chunks/MazPickerCalendarSwitcher.DFGrD6Cr.mjs.map +0 -1
  418. package/dist/chunks/MazPickerHeader.B7YY9SJI.mjs.map +0 -1
  419. package/dist/chunks/MazPickerHeader.l7NcmiGH.cjs.map +0 -1
  420. package/dist/chunks/MazPickerMonthSwitcher.CAPx3PCt.mjs.map +0 -1
  421. package/dist/chunks/MazPickerMonthSwitcher.CbplWFfL.cjs.map +0 -1
  422. package/dist/chunks/MazPickerShortcuts.Bawm0q33.mjs.map +0 -1
  423. package/dist/chunks/MazPickerShortcuts.LxFs0Y6N.cjs.map +0 -1
  424. package/dist/chunks/MazPickerTime.7cxq-Qac.cjs.map +0 -1
  425. package/dist/chunks/MazPickerTime.C27aFPPw.mjs.map +0 -1
  426. package/dist/chunks/MazPickerYearSwitcher.DMBOaMYy.mjs.map +0 -1
  427. package/dist/chunks/MazPickerYearSwitcher.Dku2IMIJ.cjs.map +0 -1
  428. package/dist/chunks/MazTable.vue_vue_type_style_index_0_scoped_4101f1d3_lang.Ctmf2NVE.cjs.map +0 -1
  429. package/dist/chunks/MazTable.vue_vue_type_style_index_0_scoped_4101f1d3_lang.Dwkx-V96.mjs.map +0 -1
  430. package/dist/chunks/PhoneInput.9GQJbL9x.mjs.map +0 -1
  431. package/dist/chunks/PhoneInput.D5DG4S60.cjs.map +0 -1
  432. package/dist/chunks/fullscreen-img.directive.CeREtf7H.cjs.map +0 -1
  433. package/dist/chunks/fullscreen-img.directive.CrLLYi0D.mjs.map +0 -1
  434. package/dist/chunks/utils.Bex2hM45.mjs.map +0 -1
  435. package/dist/chunks/utils.vGzCTXH5.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"lazy-img.directive.BeENE6S9.cjs","sources":["../../src/directives/vLazyImg/lazy-img.handler.ts","../../src/directives/vLazyImg/lazy-img.directive.ts"],"sourcesContent":["import type { ClassOptions, vLazyImgBinding, vLazyImgOptions } from './types'\n\nexport * from './types'\n\nconst EMPTY_PHOTO = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'\n\nexport const DEFAULT_OPTIONS: ClassOptions = {\n baseClass: 'm-lazy-img',\n loadedClass: 'm-lazy-loaded',\n loadingClass: 'm-lazy-loading',\n errorClass: 'm-lazy-error',\n noPhotoClass: 'm-lazy-no-photo',\n noPhoto: false,\n observerOnce: true,\n loadOnce: false,\n noUseErrorPhoto: false,\n observerOptions: {\n threshold: 0.1,\n },\n}\n\nexport class LazyImg {\n private observers: IntersectionObserver[] = []\n private readonly defaultOptions: ClassOptions = DEFAULT_OPTIONS\n private options: ClassOptions\n private onImgLoadedCallback: (el: HTMLElement) => void\n private onImgErrorCallback: (el: HTMLElement, err: ErrorEvent) => void\n private hasImgLoaded = false\n\n constructor(opts: vLazyImgOptions = {}) {\n this.options = this.buildOptions(opts)\n this.onImgLoadedCallback = this.imageIsLoaded.bind(this)\n this.onImgErrorCallback = this.imageHasError.bind(this)\n }\n\n private async loadErrorPhoto() {\n const { default: photo } = await import('@icons/no-photography.svg?url')\n return photo\n }\n\n private buildOptions(opts: vLazyImgOptions): ClassOptions {\n return {\n ...this.defaultOptions,\n ...opts,\n observerOptions: {\n ...this.defaultOptions.observerOptions,\n ...opts.observerOptions,\n },\n }\n }\n\n private removeClass(el: HTMLElement, className: string) {\n el.classList.remove(className)\n }\n\n private addClass(el: HTMLElement, className: string) {\n el.classList.add(className)\n }\n\n private removeAllStateClasses(el: HTMLElement) {\n this.removeClass(el, this.options.loadedClass)\n this.removeClass(el, this.options.loadingClass)\n this.removeClass(el, this.options.errorClass)\n this.removeClass(el, this.options.noPhotoClass)\n }\n\n private setBaseClass(el: HTMLElement) {\n this.addClass(el, this.options.baseClass)\n }\n\n private imageIsLoading(el: HTMLElement) {\n this.addClass(el, this.options.loadingClass)\n this.options.onLoading?.(el)\n }\n\n private imageHasNoPhoto(el: HTMLElement) {\n this.removeClass(el, this.options.loadingClass)\n this.addClass(el, this.options.noPhotoClass)\n\n this.setDefaultPhoto(el)\n }\n\n private imageIsLoaded(el: HTMLElement): void {\n this.hasImgLoaded = true\n this.removeClass(el, this.options.loadingClass)\n this.addClass(el, this.options.loadedClass)\n this.options.onLoaded?.(el)\n }\n\n private imageHasError(el: HTMLElement): void {\n this.removeClass(el, this.options.loadingClass)\n this.addClass(el, this.options.errorClass)\n\n this.options.onError?.(el)\n\n this.setDefaultPhoto(el)\n }\n\n private getSrc(binding: vLazyImgBinding) {\n return typeof binding.value === 'object' ? binding.value.src : binding.value\n }\n\n private getImageUrl(el: HTMLElement, binding: vLazyImgBinding): string | null | undefined {\n const dataSrc = this.getImgElement(el).getAttribute('data-lazy-src')\n if (dataSrc)\n return dataSrc\n\n return this.getSrc(binding)\n }\n\n private async setPictureSourceUrls(el: HTMLElement): Promise<void> {\n const sourceElements = el.querySelectorAll('source')\n\n if (sourceElements.length > 0) {\n for await (const source of sourceElements) {\n const srcSet = source.getAttribute('data-lazy-srcset')\n if (srcSet) {\n source.srcset = srcSet\n }\n else {\n return this.imageHasError(el)\n }\n }\n }\n else {\n this.imageHasError(el)\n }\n }\n\n private hasBgImgMode(binding: vLazyImgBinding): boolean {\n return binding.arg === 'bg-image'\n }\n\n private isPictureElement(el: HTMLElement): boolean {\n return el instanceof HTMLPictureElement\n }\n\n private getImgElement(el: HTMLElement): HTMLImageElement {\n const isPictureElement = this.isPictureElement(el)\n return (isPictureElement ? el.querySelector('img') : el) as HTMLImageElement\n }\n\n private async setDefaultPhoto(el: HTMLElement) {\n if (this.options.noUseErrorPhoto)\n return\n\n const fallbackSrc = this.options.fallbackSrc ?? this.options.errorPhoto\n\n if (typeof fallbackSrc === 'string') {\n this.addClass(el, this.options.noPhotoClass)\n }\n\n const errorPhoto = fallbackSrc ?? (await this.loadErrorPhoto())\n\n const sourceElements = el.querySelectorAll('source')\n if (sourceElements.length > 0) {\n for await (const source of sourceElements) {\n source.srcset = errorPhoto\n }\n }\n else {\n this.setImgSrc(el, errorPhoto)\n }\n }\n\n private addEventListenerToImg(el: HTMLElement) {\n const imgElement = this.getImgElement(el)\n imgElement.addEventListener('load', () => this.onImgLoadedCallback(el), {\n once: true,\n })\n imgElement.addEventListener('error', err => this.onImgErrorCallback(el, err), { once: true })\n }\n\n private async loadImage(el: HTMLElement, binding: vLazyImgBinding): Promise<void> {\n this.imageIsLoading(el)\n\n if (this.isPictureElement(el)) {\n this.addEventListenerToImg(el)\n\n await this.setPictureSourceUrls(el)\n }\n else {\n const imageUrl = this.getImageUrl(el, binding)\n\n if (!imageUrl)\n return this.imageHasError(el)\n\n if (this.hasBgImgMode(binding)) {\n el.style.backgroundImage = `url('${imageUrl}')`\n this.imageIsLoaded(el)\n }\n else {\n this.addEventListenerToImg(el)\n\n this.setImgSrc(el, imageUrl)\n }\n }\n }\n\n public setImgSrc(el: HTMLElement, src: string) {\n const imgElement = this.getImgElement(el)\n imgElement.src = src\n }\n\n private handleIntersectionObserver(\n el: HTMLElement,\n binding: vLazyImgBinding,\n entries: IntersectionObserverEntry[],\n observer: IntersectionObserver,\n ) {\n this.observers.push(observer)\n\n for (const entry of entries) {\n if (entry.isIntersecting) {\n this.options.onIntersecting?.(entry.target)\n\n if (this.options.observerOnce) {\n observer.unobserve(el)\n }\n\n if (this.options.loadOnce && this.hasImgLoaded)\n return\n this.loadImage(el, binding)\n }\n }\n }\n\n private createObserver(el: HTMLElement, binding: vLazyImgBinding) {\n const observerCallback = (\n entries: IntersectionObserverEntry[],\n intersectionObserver: IntersectionObserver,\n ) => {\n this.handleIntersectionObserver(el, binding, entries, intersectionObserver)\n }\n\n const observerOptions: ClassOptions['observerOptions'] = this.options.observerOptions\n const observer = new IntersectionObserver(observerCallback, observerOptions)\n\n observer.observe(el)\n }\n\n private async imageHandler(\n el: HTMLElement,\n binding: vLazyImgBinding,\n type: 'bind' | 'update',\n ): Promise<void> {\n if (type === 'update') {\n // Clean all previous observers\n for await (const observer of this.observers) observer.unobserve(el)\n }\n\n if (window.IntersectionObserver) {\n this.createObserver(el, binding)\n }\n else {\n this.loadImage(el, binding)\n }\n }\n\n private async bindUpdateHandler(\n el: HTMLElement,\n binding: vLazyImgBinding,\n type: 'bind' | 'update',\n ): Promise<void> {\n if (this.options.noPhoto)\n return this.imageHasNoPhoto(el)\n\n await this.imageHandler(el, binding, type)\n }\n\n public async add(el: HTMLElement, binding: vLazyImgBinding): Promise<void> {\n if (this.hasBgImgMode(binding) && this.isPictureElement(el)) {\n throw new Error(`[MazLazyImg] You can't use the \"bg-image\" mode with \"<picture />\" element`)\n }\n\n setTimeout(() => this.setBaseClass(el), 0)\n\n if (!el.getAttribute('src')) {\n this.setImgSrc(el, EMPTY_PHOTO)\n }\n\n await this.bindUpdateHandler(el, binding, 'bind')\n }\n\n public async update(el: HTMLElement, binding: vLazyImgBinding): Promise<void> {\n if (binding.value !== binding.oldValue) {\n this.hasImgLoaded = false\n this.removeAllStateClasses(el)\n\n await this.bindUpdateHandler(el, binding, 'update')\n }\n }\n\n public remove(el: HTMLElement, binding: vLazyImgBinding) {\n this.hasImgLoaded = false\n if (this.hasBgImgMode(binding)) {\n el.style.backgroundImage = ''\n }\n\n this.removeAllStateClasses(el)\n\n for (const observer of this.observers) {\n observer.unobserve(el)\n }\n\n this.observers = []\n }\n}\n","import type { ObjectDirective } from 'vue'\nimport { LazyImg, type vLazyImgBindingValue } from './lazy-img.handler'\n\nlet instance: LazyImg\n\nconst directive = {\n created(el, binding) {\n const options = typeof binding.value === 'object' ? binding.value : {}\n instance = new LazyImg(options)\n instance.add(el, binding)\n },\n updated(el, binding): void {\n instance.update(el, binding)\n },\n unmounted(el, binding): void {\n instance.remove(el, binding)\n },\n} satisfies ObjectDirective<HTMLElement, vLazyImgBindingValue>\n\nexport { directive as vLazyImg }\n"],"names":["EMPTY_PHOTO","DEFAULT_OPTIONS","LazyImg","opts","__publicField","photo","el","className","_b","_a","binding","dataSrc","sourceElements","source","srcSet","fallbackSrc","errorPhoto","imgElement","err","imageUrl","src","entries","observer","entry","observerCallback","intersectionObserver","observerOptions","type","instance","directive","options"],"mappings":"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"}
1
+ {"version":3,"file":"lazy-img.directive.BeENE6S9.cjs","sources":["../../src/directives/vLazyImg/lazy-img.handler.ts","../../src/directives/vLazyImg/lazy-img.directive.ts"],"sourcesContent":["import type { ClassOptions, vLazyImgBinding, vLazyImgOptions } from './types'\n\nexport * from './types'\n\nconst EMPTY_PHOTO = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'\n\nexport const DEFAULT_OPTIONS: ClassOptions = {\n baseClass: 'm-lazy-img',\n loadedClass: 'm-lazy-loaded',\n loadingClass: 'm-lazy-loading',\n errorClass: 'm-lazy-error',\n noPhotoClass: 'm-lazy-no-photo',\n noPhoto: false,\n observerOnce: true,\n loadOnce: false,\n noUseErrorPhoto: false,\n observerOptions: {\n threshold: 0.1,\n },\n}\n\nexport class LazyImg {\n private observers: IntersectionObserver[] = []\n private readonly defaultOptions: ClassOptions = DEFAULT_OPTIONS\n private options: ClassOptions\n private onImgLoadedCallback: (el: HTMLElement) => void\n private onImgErrorCallback: (el: HTMLElement, err: ErrorEvent) => void\n private hasImgLoaded = false\n\n constructor(opts: vLazyImgOptions = {}) {\n this.options = this.buildOptions(opts)\n this.onImgLoadedCallback = this.imageIsLoaded.bind(this)\n this.onImgErrorCallback = this.imageHasError.bind(this)\n }\n\n private async loadErrorPhoto() {\n const { default: photo } = await import('../../../icons/no-photography.svg?url')\n return photo\n }\n\n private buildOptions(opts: vLazyImgOptions): ClassOptions {\n return {\n ...this.defaultOptions,\n ...opts,\n observerOptions: {\n ...this.defaultOptions.observerOptions,\n ...opts.observerOptions,\n },\n }\n }\n\n private removeClass(el: HTMLElement, className: string) {\n el.classList.remove(className)\n }\n\n private addClass(el: HTMLElement, className: string) {\n el.classList.add(className)\n }\n\n private removeAllStateClasses(el: HTMLElement) {\n this.removeClass(el, this.options.loadedClass)\n this.removeClass(el, this.options.loadingClass)\n this.removeClass(el, this.options.errorClass)\n this.removeClass(el, this.options.noPhotoClass)\n }\n\n private setBaseClass(el: HTMLElement) {\n this.addClass(el, this.options.baseClass)\n }\n\n private imageIsLoading(el: HTMLElement) {\n this.addClass(el, this.options.loadingClass)\n this.options.onLoading?.(el)\n }\n\n private imageHasNoPhoto(el: HTMLElement) {\n this.removeClass(el, this.options.loadingClass)\n this.addClass(el, this.options.noPhotoClass)\n\n this.setDefaultPhoto(el)\n }\n\n private imageIsLoaded(el: HTMLElement): void {\n this.hasImgLoaded = true\n this.removeClass(el, this.options.loadingClass)\n this.addClass(el, this.options.loadedClass)\n this.options.onLoaded?.(el)\n }\n\n private imageHasError(el: HTMLElement): void {\n this.removeClass(el, this.options.loadingClass)\n this.addClass(el, this.options.errorClass)\n\n this.options.onError?.(el)\n\n this.setDefaultPhoto(el)\n }\n\n private getSrc(binding: vLazyImgBinding) {\n return typeof binding.value === 'object' ? binding.value.src : binding.value\n }\n\n private getImageUrl(el: HTMLElement, binding: vLazyImgBinding): string | null | undefined {\n const dataSrc = this.getImgElement(el).getAttribute('data-lazy-src')\n if (dataSrc)\n return dataSrc\n\n return this.getSrc(binding)\n }\n\n private async setPictureSourceUrls(el: HTMLElement): Promise<void> {\n const sourceElements = el.querySelectorAll('source')\n\n if (sourceElements.length > 0) {\n for await (const source of sourceElements) {\n const srcSet = source.getAttribute('data-lazy-srcset')\n if (srcSet) {\n source.srcset = srcSet\n }\n else {\n return this.imageHasError(el)\n }\n }\n }\n else {\n this.imageHasError(el)\n }\n }\n\n private hasBgImgMode(binding: vLazyImgBinding): boolean {\n return binding.arg === 'bg-image'\n }\n\n private isPictureElement(el: HTMLElement): boolean {\n return el instanceof HTMLPictureElement\n }\n\n private getImgElement(el: HTMLElement): HTMLImageElement {\n const isPictureElement = this.isPictureElement(el)\n return (isPictureElement ? el.querySelector('img') : el) as HTMLImageElement\n }\n\n private async setDefaultPhoto(el: HTMLElement) {\n if (this.options.noUseErrorPhoto)\n return\n\n const fallbackSrc = this.options.fallbackSrc ?? this.options.errorPhoto\n\n if (typeof fallbackSrc === 'string') {\n this.addClass(el, this.options.noPhotoClass)\n }\n\n const errorPhoto = fallbackSrc ?? (await this.loadErrorPhoto())\n\n const sourceElements = el.querySelectorAll('source')\n if (sourceElements.length > 0) {\n for await (const source of sourceElements) {\n source.srcset = errorPhoto\n }\n }\n else {\n this.setImgSrc(el, errorPhoto)\n }\n }\n\n private addEventListenerToImg(el: HTMLElement) {\n const imgElement = this.getImgElement(el)\n imgElement.addEventListener('load', () => this.onImgLoadedCallback(el), {\n once: true,\n })\n imgElement.addEventListener('error', err => this.onImgErrorCallback(el, err), { once: true })\n }\n\n private async loadImage(el: HTMLElement, binding: vLazyImgBinding): Promise<void> {\n this.imageIsLoading(el)\n\n if (this.isPictureElement(el)) {\n this.addEventListenerToImg(el)\n\n await this.setPictureSourceUrls(el)\n }\n else {\n const imageUrl = this.getImageUrl(el, binding)\n\n if (!imageUrl)\n return this.imageHasError(el)\n\n if (this.hasBgImgMode(binding)) {\n el.style.backgroundImage = `url('${imageUrl}')`\n this.imageIsLoaded(el)\n }\n else {\n this.addEventListenerToImg(el)\n\n this.setImgSrc(el, imageUrl)\n }\n }\n }\n\n public setImgSrc(el: HTMLElement, src: string) {\n const imgElement = this.getImgElement(el)\n imgElement.src = src\n }\n\n private handleIntersectionObserver(\n el: HTMLElement,\n binding: vLazyImgBinding,\n entries: IntersectionObserverEntry[],\n observer: IntersectionObserver,\n ) {\n this.observers.push(observer)\n\n for (const entry of entries) {\n if (entry.isIntersecting) {\n this.options.onIntersecting?.(entry.target)\n\n if (this.options.observerOnce) {\n observer.unobserve(el)\n }\n\n if (this.options.loadOnce && this.hasImgLoaded)\n return\n this.loadImage(el, binding)\n }\n }\n }\n\n private createObserver(el: HTMLElement, binding: vLazyImgBinding) {\n const observerCallback = (\n entries: IntersectionObserverEntry[],\n intersectionObserver: IntersectionObserver,\n ) => {\n this.handleIntersectionObserver(el, binding, entries, intersectionObserver)\n }\n\n const observerOptions: ClassOptions['observerOptions'] = this.options.observerOptions\n const observer = new IntersectionObserver(observerCallback, observerOptions)\n\n observer.observe(el)\n }\n\n private async imageHandler(\n el: HTMLElement,\n binding: vLazyImgBinding,\n type: 'bind' | 'update',\n ): Promise<void> {\n if (type === 'update') {\n // Clean all previous observers\n for await (const observer of this.observers) observer.unobserve(el)\n }\n\n if (window.IntersectionObserver) {\n this.createObserver(el, binding)\n }\n else {\n this.loadImage(el, binding)\n }\n }\n\n private async bindUpdateHandler(\n el: HTMLElement,\n binding: vLazyImgBinding,\n type: 'bind' | 'update',\n ): Promise<void> {\n if (this.options.noPhoto)\n return this.imageHasNoPhoto(el)\n\n await this.imageHandler(el, binding, type)\n }\n\n public async add(el: HTMLElement, binding: vLazyImgBinding): Promise<void> {\n if (this.hasBgImgMode(binding) && this.isPictureElement(el)) {\n throw new Error(`[MazLazyImg] You can't use the \"bg-image\" mode with \"<picture />\" element`)\n }\n\n setTimeout(() => this.setBaseClass(el), 0)\n\n if (!el.getAttribute('src')) {\n this.setImgSrc(el, EMPTY_PHOTO)\n }\n\n await this.bindUpdateHandler(el, binding, 'bind')\n }\n\n public async update(el: HTMLElement, binding: vLazyImgBinding): Promise<void> {\n if (binding.value !== binding.oldValue) {\n this.hasImgLoaded = false\n this.removeAllStateClasses(el)\n\n await this.bindUpdateHandler(el, binding, 'update')\n }\n }\n\n public remove(el: HTMLElement, binding: vLazyImgBinding) {\n this.hasImgLoaded = false\n if (this.hasBgImgMode(binding)) {\n el.style.backgroundImage = ''\n }\n\n this.removeAllStateClasses(el)\n\n for (const observer of this.observers) {\n observer.unobserve(el)\n }\n\n this.observers = []\n }\n}\n","import type { ObjectDirective } from 'vue'\nimport { LazyImg, type vLazyImgBindingValue } from './lazy-img.handler'\n\nlet instance: LazyImg\n\nconst directive = {\n created(el, binding) {\n const options = typeof binding.value === 'object' ? binding.value : {}\n instance = new LazyImg(options)\n instance.add(el, binding)\n },\n updated(el, binding): void {\n instance.update(el, binding)\n },\n unmounted(el, binding): void {\n instance.remove(el, binding)\n },\n} satisfies ObjectDirective<HTMLElement, vLazyImgBindingValue>\n\nexport { directive as vLazyImg }\n"],"names":["EMPTY_PHOTO","DEFAULT_OPTIONS","LazyImg","opts","__publicField","photo","el","className","_b","_a","binding","dataSrc","sourceElements","source","srcSet","fallbackSrc","errorPhoto","imgElement","err","imageUrl","src","entries","observer","entry","observerCallback","intersectionObserver","observerOptions","type","instance","directive","options"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"lazy-img.directive.DqXA0UFo.mjs","sources":["../../src/directives/vLazyImg/lazy-img.handler.ts","../../src/directives/vLazyImg/lazy-img.directive.ts"],"sourcesContent":["import type { ClassOptions, vLazyImgBinding, vLazyImgOptions } from './types'\n\nexport * from './types'\n\nconst EMPTY_PHOTO = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'\n\nexport const DEFAULT_OPTIONS: ClassOptions = {\n baseClass: 'm-lazy-img',\n loadedClass: 'm-lazy-loaded',\n loadingClass: 'm-lazy-loading',\n errorClass: 'm-lazy-error',\n noPhotoClass: 'm-lazy-no-photo',\n noPhoto: false,\n observerOnce: true,\n loadOnce: false,\n noUseErrorPhoto: false,\n observerOptions: {\n threshold: 0.1,\n },\n}\n\nexport class LazyImg {\n private observers: IntersectionObserver[] = []\n private readonly defaultOptions: ClassOptions = DEFAULT_OPTIONS\n private options: ClassOptions\n private onImgLoadedCallback: (el: HTMLElement) => void\n private onImgErrorCallback: (el: HTMLElement, err: ErrorEvent) => void\n private hasImgLoaded = false\n\n constructor(opts: vLazyImgOptions = {}) {\n this.options = this.buildOptions(opts)\n this.onImgLoadedCallback = this.imageIsLoaded.bind(this)\n this.onImgErrorCallback = this.imageHasError.bind(this)\n }\n\n private async loadErrorPhoto() {\n const { default: photo } = await import('@icons/no-photography.svg?url')\n return photo\n }\n\n private buildOptions(opts: vLazyImgOptions): ClassOptions {\n return {\n ...this.defaultOptions,\n ...opts,\n observerOptions: {\n ...this.defaultOptions.observerOptions,\n ...opts.observerOptions,\n },\n }\n }\n\n private removeClass(el: HTMLElement, className: string) {\n el.classList.remove(className)\n }\n\n private addClass(el: HTMLElement, className: string) {\n el.classList.add(className)\n }\n\n private removeAllStateClasses(el: HTMLElement) {\n this.removeClass(el, this.options.loadedClass)\n this.removeClass(el, this.options.loadingClass)\n this.removeClass(el, this.options.errorClass)\n this.removeClass(el, this.options.noPhotoClass)\n }\n\n private setBaseClass(el: HTMLElement) {\n this.addClass(el, this.options.baseClass)\n }\n\n private imageIsLoading(el: HTMLElement) {\n this.addClass(el, this.options.loadingClass)\n this.options.onLoading?.(el)\n }\n\n private imageHasNoPhoto(el: HTMLElement) {\n this.removeClass(el, this.options.loadingClass)\n this.addClass(el, this.options.noPhotoClass)\n\n this.setDefaultPhoto(el)\n }\n\n private imageIsLoaded(el: HTMLElement): void {\n this.hasImgLoaded = true\n this.removeClass(el, this.options.loadingClass)\n this.addClass(el, this.options.loadedClass)\n this.options.onLoaded?.(el)\n }\n\n private imageHasError(el: HTMLElement): void {\n this.removeClass(el, this.options.loadingClass)\n this.addClass(el, this.options.errorClass)\n\n this.options.onError?.(el)\n\n this.setDefaultPhoto(el)\n }\n\n private getSrc(binding: vLazyImgBinding) {\n return typeof binding.value === 'object' ? binding.value.src : binding.value\n }\n\n private getImageUrl(el: HTMLElement, binding: vLazyImgBinding): string | null | undefined {\n const dataSrc = this.getImgElement(el).getAttribute('data-lazy-src')\n if (dataSrc)\n return dataSrc\n\n return this.getSrc(binding)\n }\n\n private async setPictureSourceUrls(el: HTMLElement): Promise<void> {\n const sourceElements = el.querySelectorAll('source')\n\n if (sourceElements.length > 0) {\n for await (const source of sourceElements) {\n const srcSet = source.getAttribute('data-lazy-srcset')\n if (srcSet) {\n source.srcset = srcSet\n }\n else {\n return this.imageHasError(el)\n }\n }\n }\n else {\n this.imageHasError(el)\n }\n }\n\n private hasBgImgMode(binding: vLazyImgBinding): boolean {\n return binding.arg === 'bg-image'\n }\n\n private isPictureElement(el: HTMLElement): boolean {\n return el instanceof HTMLPictureElement\n }\n\n private getImgElement(el: HTMLElement): HTMLImageElement {\n const isPictureElement = this.isPictureElement(el)\n return (isPictureElement ? el.querySelector('img') : el) as HTMLImageElement\n }\n\n private async setDefaultPhoto(el: HTMLElement) {\n if (this.options.noUseErrorPhoto)\n return\n\n const fallbackSrc = this.options.fallbackSrc ?? this.options.errorPhoto\n\n if (typeof fallbackSrc === 'string') {\n this.addClass(el, this.options.noPhotoClass)\n }\n\n const errorPhoto = fallbackSrc ?? (await this.loadErrorPhoto())\n\n const sourceElements = el.querySelectorAll('source')\n if (sourceElements.length > 0) {\n for await (const source of sourceElements) {\n source.srcset = errorPhoto\n }\n }\n else {\n this.setImgSrc(el, errorPhoto)\n }\n }\n\n private addEventListenerToImg(el: HTMLElement) {\n const imgElement = this.getImgElement(el)\n imgElement.addEventListener('load', () => this.onImgLoadedCallback(el), {\n once: true,\n })\n imgElement.addEventListener('error', err => this.onImgErrorCallback(el, err), { once: true })\n }\n\n private async loadImage(el: HTMLElement, binding: vLazyImgBinding): Promise<void> {\n this.imageIsLoading(el)\n\n if (this.isPictureElement(el)) {\n this.addEventListenerToImg(el)\n\n await this.setPictureSourceUrls(el)\n }\n else {\n const imageUrl = this.getImageUrl(el, binding)\n\n if (!imageUrl)\n return this.imageHasError(el)\n\n if (this.hasBgImgMode(binding)) {\n el.style.backgroundImage = `url('${imageUrl}')`\n this.imageIsLoaded(el)\n }\n else {\n this.addEventListenerToImg(el)\n\n this.setImgSrc(el, imageUrl)\n }\n }\n }\n\n public setImgSrc(el: HTMLElement, src: string) {\n const imgElement = this.getImgElement(el)\n imgElement.src = src\n }\n\n private handleIntersectionObserver(\n el: HTMLElement,\n binding: vLazyImgBinding,\n entries: IntersectionObserverEntry[],\n observer: IntersectionObserver,\n ) {\n this.observers.push(observer)\n\n for (const entry of entries) {\n if (entry.isIntersecting) {\n this.options.onIntersecting?.(entry.target)\n\n if (this.options.observerOnce) {\n observer.unobserve(el)\n }\n\n if (this.options.loadOnce && this.hasImgLoaded)\n return\n this.loadImage(el, binding)\n }\n }\n }\n\n private createObserver(el: HTMLElement, binding: vLazyImgBinding) {\n const observerCallback = (\n entries: IntersectionObserverEntry[],\n intersectionObserver: IntersectionObserver,\n ) => {\n this.handleIntersectionObserver(el, binding, entries, intersectionObserver)\n }\n\n const observerOptions: ClassOptions['observerOptions'] = this.options.observerOptions\n const observer = new IntersectionObserver(observerCallback, observerOptions)\n\n observer.observe(el)\n }\n\n private async imageHandler(\n el: HTMLElement,\n binding: vLazyImgBinding,\n type: 'bind' | 'update',\n ): Promise<void> {\n if (type === 'update') {\n // Clean all previous observers\n for await (const observer of this.observers) observer.unobserve(el)\n }\n\n if (window.IntersectionObserver) {\n this.createObserver(el, binding)\n }\n else {\n this.loadImage(el, binding)\n }\n }\n\n private async bindUpdateHandler(\n el: HTMLElement,\n binding: vLazyImgBinding,\n type: 'bind' | 'update',\n ): Promise<void> {\n if (this.options.noPhoto)\n return this.imageHasNoPhoto(el)\n\n await this.imageHandler(el, binding, type)\n }\n\n public async add(el: HTMLElement, binding: vLazyImgBinding): Promise<void> {\n if (this.hasBgImgMode(binding) && this.isPictureElement(el)) {\n throw new Error(`[MazLazyImg] You can't use the \"bg-image\" mode with \"<picture />\" element`)\n }\n\n setTimeout(() => this.setBaseClass(el), 0)\n\n if (!el.getAttribute('src')) {\n this.setImgSrc(el, EMPTY_PHOTO)\n }\n\n await this.bindUpdateHandler(el, binding, 'bind')\n }\n\n public async update(el: HTMLElement, binding: vLazyImgBinding): Promise<void> {\n if (binding.value !== binding.oldValue) {\n this.hasImgLoaded = false\n this.removeAllStateClasses(el)\n\n await this.bindUpdateHandler(el, binding, 'update')\n }\n }\n\n public remove(el: HTMLElement, binding: vLazyImgBinding) {\n this.hasImgLoaded = false\n if (this.hasBgImgMode(binding)) {\n el.style.backgroundImage = ''\n }\n\n this.removeAllStateClasses(el)\n\n for (const observer of this.observers) {\n observer.unobserve(el)\n }\n\n this.observers = []\n }\n}\n","import type { ObjectDirective } from 'vue'\nimport { LazyImg, type vLazyImgBindingValue } from './lazy-img.handler'\n\nlet instance: LazyImg\n\nconst directive = {\n created(el, binding) {\n const options = typeof binding.value === 'object' ? binding.value : {}\n instance = new LazyImg(options)\n instance.add(el, binding)\n },\n updated(el, binding): void {\n instance.update(el, binding)\n },\n unmounted(el, binding): void {\n instance.remove(el, binding)\n },\n} satisfies ObjectDirective<HTMLElement, vLazyImgBindingValue>\n\nexport { directive as vLazyImg }\n"],"names":["EMPTY_PHOTO","DEFAULT_OPTIONS","LazyImg","opts","__publicField","photo","el","className","_a","_b","binding","dataSrc","sourceElements","source","srcSet","fallbackSrc","errorPhoto","imgElement","err","imageUrl","src","entries","observer","entry","observerCallback","intersectionObserver","observerOptions","type","instance","directive","options"],"mappings":"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"}
1
+ {"version":3,"file":"lazy-img.directive.DqXA0UFo.mjs","sources":["../../src/directives/vLazyImg/lazy-img.handler.ts","../../src/directives/vLazyImg/lazy-img.directive.ts"],"sourcesContent":["import type { ClassOptions, vLazyImgBinding, vLazyImgOptions } from './types'\n\nexport * from './types'\n\nconst EMPTY_PHOTO = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'\n\nexport const DEFAULT_OPTIONS: ClassOptions = {\n baseClass: 'm-lazy-img',\n loadedClass: 'm-lazy-loaded',\n loadingClass: 'm-lazy-loading',\n errorClass: 'm-lazy-error',\n noPhotoClass: 'm-lazy-no-photo',\n noPhoto: false,\n observerOnce: true,\n loadOnce: false,\n noUseErrorPhoto: false,\n observerOptions: {\n threshold: 0.1,\n },\n}\n\nexport class LazyImg {\n private observers: IntersectionObserver[] = []\n private readonly defaultOptions: ClassOptions = DEFAULT_OPTIONS\n private options: ClassOptions\n private onImgLoadedCallback: (el: HTMLElement) => void\n private onImgErrorCallback: (el: HTMLElement, err: ErrorEvent) => void\n private hasImgLoaded = false\n\n constructor(opts: vLazyImgOptions = {}) {\n this.options = this.buildOptions(opts)\n this.onImgLoadedCallback = this.imageIsLoaded.bind(this)\n this.onImgErrorCallback = this.imageHasError.bind(this)\n }\n\n private async loadErrorPhoto() {\n const { default: photo } = await import('../../../icons/no-photography.svg?url')\n return photo\n }\n\n private buildOptions(opts: vLazyImgOptions): ClassOptions {\n return {\n ...this.defaultOptions,\n ...opts,\n observerOptions: {\n ...this.defaultOptions.observerOptions,\n ...opts.observerOptions,\n },\n }\n }\n\n private removeClass(el: HTMLElement, className: string) {\n el.classList.remove(className)\n }\n\n private addClass(el: HTMLElement, className: string) {\n el.classList.add(className)\n }\n\n private removeAllStateClasses(el: HTMLElement) {\n this.removeClass(el, this.options.loadedClass)\n this.removeClass(el, this.options.loadingClass)\n this.removeClass(el, this.options.errorClass)\n this.removeClass(el, this.options.noPhotoClass)\n }\n\n private setBaseClass(el: HTMLElement) {\n this.addClass(el, this.options.baseClass)\n }\n\n private imageIsLoading(el: HTMLElement) {\n this.addClass(el, this.options.loadingClass)\n this.options.onLoading?.(el)\n }\n\n private imageHasNoPhoto(el: HTMLElement) {\n this.removeClass(el, this.options.loadingClass)\n this.addClass(el, this.options.noPhotoClass)\n\n this.setDefaultPhoto(el)\n }\n\n private imageIsLoaded(el: HTMLElement): void {\n this.hasImgLoaded = true\n this.removeClass(el, this.options.loadingClass)\n this.addClass(el, this.options.loadedClass)\n this.options.onLoaded?.(el)\n }\n\n private imageHasError(el: HTMLElement): void {\n this.removeClass(el, this.options.loadingClass)\n this.addClass(el, this.options.errorClass)\n\n this.options.onError?.(el)\n\n this.setDefaultPhoto(el)\n }\n\n private getSrc(binding: vLazyImgBinding) {\n return typeof binding.value === 'object' ? binding.value.src : binding.value\n }\n\n private getImageUrl(el: HTMLElement, binding: vLazyImgBinding): string | null | undefined {\n const dataSrc = this.getImgElement(el).getAttribute('data-lazy-src')\n if (dataSrc)\n return dataSrc\n\n return this.getSrc(binding)\n }\n\n private async setPictureSourceUrls(el: HTMLElement): Promise<void> {\n const sourceElements = el.querySelectorAll('source')\n\n if (sourceElements.length > 0) {\n for await (const source of sourceElements) {\n const srcSet = source.getAttribute('data-lazy-srcset')\n if (srcSet) {\n source.srcset = srcSet\n }\n else {\n return this.imageHasError(el)\n }\n }\n }\n else {\n this.imageHasError(el)\n }\n }\n\n private hasBgImgMode(binding: vLazyImgBinding): boolean {\n return binding.arg === 'bg-image'\n }\n\n private isPictureElement(el: HTMLElement): boolean {\n return el instanceof HTMLPictureElement\n }\n\n private getImgElement(el: HTMLElement): HTMLImageElement {\n const isPictureElement = this.isPictureElement(el)\n return (isPictureElement ? el.querySelector('img') : el) as HTMLImageElement\n }\n\n private async setDefaultPhoto(el: HTMLElement) {\n if (this.options.noUseErrorPhoto)\n return\n\n const fallbackSrc = this.options.fallbackSrc ?? this.options.errorPhoto\n\n if (typeof fallbackSrc === 'string') {\n this.addClass(el, this.options.noPhotoClass)\n }\n\n const errorPhoto = fallbackSrc ?? (await this.loadErrorPhoto())\n\n const sourceElements = el.querySelectorAll('source')\n if (sourceElements.length > 0) {\n for await (const source of sourceElements) {\n source.srcset = errorPhoto\n }\n }\n else {\n this.setImgSrc(el, errorPhoto)\n }\n }\n\n private addEventListenerToImg(el: HTMLElement) {\n const imgElement = this.getImgElement(el)\n imgElement.addEventListener('load', () => this.onImgLoadedCallback(el), {\n once: true,\n })\n imgElement.addEventListener('error', err => this.onImgErrorCallback(el, err), { once: true })\n }\n\n private async loadImage(el: HTMLElement, binding: vLazyImgBinding): Promise<void> {\n this.imageIsLoading(el)\n\n if (this.isPictureElement(el)) {\n this.addEventListenerToImg(el)\n\n await this.setPictureSourceUrls(el)\n }\n else {\n const imageUrl = this.getImageUrl(el, binding)\n\n if (!imageUrl)\n return this.imageHasError(el)\n\n if (this.hasBgImgMode(binding)) {\n el.style.backgroundImage = `url('${imageUrl}')`\n this.imageIsLoaded(el)\n }\n else {\n this.addEventListenerToImg(el)\n\n this.setImgSrc(el, imageUrl)\n }\n }\n }\n\n public setImgSrc(el: HTMLElement, src: string) {\n const imgElement = this.getImgElement(el)\n imgElement.src = src\n }\n\n private handleIntersectionObserver(\n el: HTMLElement,\n binding: vLazyImgBinding,\n entries: IntersectionObserverEntry[],\n observer: IntersectionObserver,\n ) {\n this.observers.push(observer)\n\n for (const entry of entries) {\n if (entry.isIntersecting) {\n this.options.onIntersecting?.(entry.target)\n\n if (this.options.observerOnce) {\n observer.unobserve(el)\n }\n\n if (this.options.loadOnce && this.hasImgLoaded)\n return\n this.loadImage(el, binding)\n }\n }\n }\n\n private createObserver(el: HTMLElement, binding: vLazyImgBinding) {\n const observerCallback = (\n entries: IntersectionObserverEntry[],\n intersectionObserver: IntersectionObserver,\n ) => {\n this.handleIntersectionObserver(el, binding, entries, intersectionObserver)\n }\n\n const observerOptions: ClassOptions['observerOptions'] = this.options.observerOptions\n const observer = new IntersectionObserver(observerCallback, observerOptions)\n\n observer.observe(el)\n }\n\n private async imageHandler(\n el: HTMLElement,\n binding: vLazyImgBinding,\n type: 'bind' | 'update',\n ): Promise<void> {\n if (type === 'update') {\n // Clean all previous observers\n for await (const observer of this.observers) observer.unobserve(el)\n }\n\n if (window.IntersectionObserver) {\n this.createObserver(el, binding)\n }\n else {\n this.loadImage(el, binding)\n }\n }\n\n private async bindUpdateHandler(\n el: HTMLElement,\n binding: vLazyImgBinding,\n type: 'bind' | 'update',\n ): Promise<void> {\n if (this.options.noPhoto)\n return this.imageHasNoPhoto(el)\n\n await this.imageHandler(el, binding, type)\n }\n\n public async add(el: HTMLElement, binding: vLazyImgBinding): Promise<void> {\n if (this.hasBgImgMode(binding) && this.isPictureElement(el)) {\n throw new Error(`[MazLazyImg] You can't use the \"bg-image\" mode with \"<picture />\" element`)\n }\n\n setTimeout(() => this.setBaseClass(el), 0)\n\n if (!el.getAttribute('src')) {\n this.setImgSrc(el, EMPTY_PHOTO)\n }\n\n await this.bindUpdateHandler(el, binding, 'bind')\n }\n\n public async update(el: HTMLElement, binding: vLazyImgBinding): Promise<void> {\n if (binding.value !== binding.oldValue) {\n this.hasImgLoaded = false\n this.removeAllStateClasses(el)\n\n await this.bindUpdateHandler(el, binding, 'update')\n }\n }\n\n public remove(el: HTMLElement, binding: vLazyImgBinding) {\n this.hasImgLoaded = false\n if (this.hasBgImgMode(binding)) {\n el.style.backgroundImage = ''\n }\n\n this.removeAllStateClasses(el)\n\n for (const observer of this.observers) {\n observer.unobserve(el)\n }\n\n this.observers = []\n }\n}\n","import type { ObjectDirective } from 'vue'\nimport { LazyImg, type vLazyImgBindingValue } from './lazy-img.handler'\n\nlet instance: LazyImg\n\nconst directive = {\n created(el, binding) {\n const options = typeof binding.value === 'object' ? binding.value : {}\n instance = new LazyImg(options)\n instance.add(el, binding)\n },\n updated(el, binding): void {\n instance.update(el, binding)\n },\n unmounted(el, binding): void {\n instance.remove(el, binding)\n },\n} satisfies ObjectDirective<HTMLElement, vLazyImgBindingValue>\n\nexport { directive as vLazyImg }\n"],"names":["EMPTY_PHOTO","DEFAULT_OPTIONS","LazyImg","opts","__publicField","photo","el","className","_a","_b","binding","dataSrc","sourceElements","source","srcSet","fallbackSrc","errorPhoto","imgElement","err","imageUrl","src","entries","observer","entry","observerCallback","intersectionObserver","observerOptions","type","instance","directive","options"],"mappings":";;;AAIA,MAAMA,IAAc,kFAEPC,IAAgC;AAAA,EAC3C,WAAW;AAAA,EACX,aAAa;AAAA,EACb,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,SAAS;AAAA,EACT,cAAc;AAAA,EACd,UAAU;AAAA,EACV,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,IACf,WAAW;AAAA,EAAA;AAEf;AAEO,MAAMC,EAAQ;AAAA,EAQnB,YAAYC,IAAwB,IAAI;AAPhC,IAAAC,EAAA,mBAAoC,CAAC;AAC5B,IAAAA,EAAA,wBAA+BH;AACxC,IAAAG,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA,sBAAe;AAGhB,SAAA,UAAU,KAAK,aAAaD,CAAI,GACrC,KAAK,sBAAsB,KAAK,cAAc,KAAK,IAAI,GACvD,KAAK,qBAAqB,KAAK,cAAc,KAAK,IAAI;AAAA,EAAA;AAAA,EAGxD,MAAc,iBAAiB;AAC7B,UAAM,EAAE,SAASE,MAAU,MAAM,OAAO,+BAAuC;AACxE,WAAAA;AAAA,EAAA;AAAA,EAGD,aAAaF,GAAqC;AACjD,WAAA;AAAA,MACL,GAAG,KAAK;AAAA,MACR,GAAGA;AAAA,MACH,iBAAiB;AAAA,QACf,GAAG,KAAK,eAAe;AAAA,QACvB,GAAGA,EAAK;AAAA,MAAA;AAAA,IAEZ;AAAA,EAAA;AAAA,EAGM,YAAYG,GAAiBC,GAAmB;AACnD,IAAAD,EAAA,UAAU,OAAOC,CAAS;AAAA,EAAA;AAAA,EAGvB,SAASD,GAAiBC,GAAmB;AAChD,IAAAD,EAAA,UAAU,IAAIC,CAAS;AAAA,EAAA;AAAA,EAGpB,sBAAsBD,GAAiB;AAC7C,SAAK,YAAYA,GAAI,KAAK,QAAQ,WAAW,GAC7C,KAAK,YAAYA,GAAI,KAAK,QAAQ,YAAY,GAC9C,KAAK,YAAYA,GAAI,KAAK,QAAQ,UAAU,GAC5C,KAAK,YAAYA,GAAI,KAAK,QAAQ,YAAY;AAAA,EAAA;AAAA,EAGxC,aAAaA,GAAiB;AACpC,SAAK,SAASA,GAAI,KAAK,QAAQ,SAAS;AAAA,EAAA;AAAA,EAGlC,eAAeA,GAAiB;AAlE1C,QAAAE,GAAAC;AAmEI,SAAK,SAASH,GAAI,KAAK,QAAQ,YAAY,IACtCG,KAAAD,IAAA,KAAA,SAAQ,cAAR,QAAAC,EAAA,KAAAD,GAAoBF;AAAA,EAAE;AAAA,EAGrB,gBAAgBA,GAAiB;AACvC,SAAK,YAAYA,GAAI,KAAK,QAAQ,YAAY,GAC9C,KAAK,SAASA,GAAI,KAAK,QAAQ,YAAY,GAE3C,KAAK,gBAAgBA,CAAE;AAAA,EAAA;AAAA,EAGjB,cAAcA,GAAuB;AA9E/C,QAAAE,GAAAC;AA+EI,SAAK,eAAe,IACpB,KAAK,YAAYH,GAAI,KAAK,QAAQ,YAAY,GAC9C,KAAK,SAASA,GAAI,KAAK,QAAQ,WAAW,IACrCG,KAAAD,IAAA,KAAA,SAAQ,aAAR,QAAAC,EAAA,KAAAD,GAAmBF;AAAA,EAAE;AAAA,EAGpB,cAAcA,GAAuB;AArF/C,QAAAE,GAAAC;AAsFI,SAAK,YAAYH,GAAI,KAAK,QAAQ,YAAY,GAC9C,KAAK,SAASA,GAAI,KAAK,QAAQ,UAAU,IAEpCG,KAAAD,IAAA,KAAA,SAAQ,YAAR,QAAAC,EAAA,KAAAD,GAAkBF,IAEvB,KAAK,gBAAgBA,CAAE;AAAA,EAAA;AAAA,EAGjB,OAAOI,GAA0B;AACvC,WAAO,OAAOA,EAAQ,SAAU,WAAWA,EAAQ,MAAM,MAAMA,EAAQ;AAAA,EAAA;AAAA,EAGjE,YAAYJ,GAAiBI,GAAqD;AACxF,UAAMC,IAAU,KAAK,cAAcL,CAAE,EAAE,aAAa,eAAe;AAC/D,WAAAK,KAGG,KAAK,OAAOD,CAAO;AAAA,EAAA;AAAA,EAG5B,MAAc,qBAAqBJ,GAAgC;AAC3D,UAAAM,IAAiBN,EAAG,iBAAiB,QAAQ;AAE/C,QAAAM,EAAe,SAAS;AAC1B,uBAAiBC,KAAUD,GAAgB;AACnC,cAAAE,IAASD,EAAO,aAAa,kBAAkB;AACrD,YAAIC;AACF,UAAAD,EAAO,SAASC;AAAA;AAGT,iBAAA,KAAK,cAAcR,CAAE;AAAA,MAC9B;AAAA;AAIF,WAAK,cAAcA,CAAE;AAAA,EACvB;AAAA,EAGM,aAAaI,GAAmC;AACtD,WAAOA,EAAQ,QAAQ;AAAA,EAAA;AAAA,EAGjB,iBAAiBJ,GAA0B;AACjD,WAAOA,aAAc;AAAA,EAAA;AAAA,EAGf,cAAcA,GAAmC;AAEvD,WADyB,KAAK,iBAAiBA,CAAE,IACtBA,EAAG,cAAc,KAAK,IAAIA;AAAA,EAAA;AAAA,EAGvD,MAAc,gBAAgBA,GAAiB;AAC7C,QAAI,KAAK,QAAQ;AACf;AAEF,UAAMS,IAAc,KAAK,QAAQ,eAAe,KAAK,QAAQ;AAEzD,IAAA,OAAOA,KAAgB,YACzB,KAAK,SAAST,GAAI,KAAK,QAAQ,YAAY;AAG7C,UAAMU,IAAaD,KAAgB,MAAM,KAAK,eAAe,GAEvDH,IAAiBN,EAAG,iBAAiB,QAAQ;AAC/C,QAAAM,EAAe,SAAS;AAC1B,uBAAiBC,KAAUD;AACzB,QAAAC,EAAO,SAASG;AAAA;AAIb,WAAA,UAAUV,GAAIU,CAAU;AAAA,EAC/B;AAAA,EAGM,sBAAsBV,GAAiB;AACvC,UAAAW,IAAa,KAAK,cAAcX,CAAE;AACxC,IAAAW,EAAW,iBAAiB,QAAQ,MAAM,KAAK,oBAAoBX,CAAE,GAAG;AAAA,MACtE,MAAM;AAAA,IAAA,CACP,GACUW,EAAA,iBAAiB,SAAS,CAAAC,MAAO,KAAK,mBAAmBZ,GAAIY,CAAG,GAAG,EAAE,MAAM,GAAA,CAAM;AAAA,EAAA;AAAA,EAG9F,MAAc,UAAUZ,GAAiBI,GAAyC;AAG5E,QAFJ,KAAK,eAAeJ,CAAE,GAElB,KAAK,iBAAiBA,CAAE;AAC1B,WAAK,sBAAsBA,CAAE,GAEvB,MAAA,KAAK,qBAAqBA,CAAE;AAAA,SAE/B;AACH,YAAMa,IAAW,KAAK,YAAYb,GAAII,CAAO;AAE7C,UAAI,CAACS;AACI,eAAA,KAAK,cAAcb,CAAE;AAE1B,MAAA,KAAK,aAAaI,CAAO,KACxBJ,EAAA,MAAM,kBAAkB,QAAQa,CAAQ,MAC3C,KAAK,cAAcb,CAAE,MAGrB,KAAK,sBAAsBA,CAAE,GAExB,KAAA,UAAUA,GAAIa,CAAQ;AAAA,IAC7B;AAAA,EACF;AAAA,EAGK,UAAUb,GAAiBc,GAAa;AACvC,UAAAH,IAAa,KAAK,cAAcX,CAAE;AACxC,IAAAW,EAAW,MAAMG;AAAA,EAAA;AAAA,EAGX,2BACNd,GACAI,GACAW,GACAC,GACA;AA7MJ,QAAAd,GAAAC;AA8MS,SAAA,UAAU,KAAKa,CAAQ;AAE5B,eAAWC,KAASF;AAClB,UAAIE,EAAM,gBAAgB;AAOpB,aANCd,KAAAD,IAAA,KAAA,SAAQ,mBAAR,QAAAC,EAAA,KAAAD,GAAyBe,EAAM,SAEhC,KAAK,QAAQ,gBACfD,EAAS,UAAUhB,CAAE,GAGnB,KAAK,QAAQ,YAAY,KAAK;AAChC;AACG,aAAA,UAAUA,GAAII,CAAO;AAAA,MAAA;AAAA,EAE9B;AAAA,EAGM,eAAeJ,GAAiBI,GAA0B;AAC1D,UAAAc,IAAmB,CACvBH,GACAI,MACG;AACH,WAAK,2BAA2BnB,GAAII,GAASW,GAASI,CAAoB;AAAA,IAC5E,GAEMC,IAAmD,KAAK,QAAQ;AAGtE,IAFiB,IAAI,qBAAqBF,GAAkBE,CAAe,EAElE,QAAQpB,CAAE;AAAA,EAAA;AAAA,EAGrB,MAAc,aACZA,GACAI,GACAiB,GACe;AACf,QAAIA,MAAS;AAEX,uBAAiBL,KAAY,KAAK,UAAW,CAAAA,EAAS,UAAUhB,CAAE;AAGpE,IAAI,OAAO,uBACJ,KAAA,eAAeA,GAAII,CAAO,IAG1B,KAAA,UAAUJ,GAAII,CAAO;AAAA,EAC5B;AAAA,EAGF,MAAc,kBACZJ,GACAI,GACAiB,GACe;AACf,QAAI,KAAK,QAAQ;AACR,aAAA,KAAK,gBAAgBrB,CAAE;AAEhC,UAAM,KAAK,aAAaA,GAAII,GAASiB,CAAI;AAAA,EAAA;AAAA,EAG3C,MAAa,IAAIrB,GAAiBI,GAAyC;AACzE,QAAI,KAAK,aAAaA,CAAO,KAAK,KAAK,iBAAiBJ,CAAE;AAClD,YAAA,IAAI,MAAM,2EAA2E;AAG7F,eAAW,MAAM,KAAK,aAAaA,CAAE,GAAG,CAAC,GAEpCA,EAAG,aAAa,KAAK,KACnB,KAAA,UAAUA,GAAIN,CAAW,GAGhC,MAAM,KAAK,kBAAkBM,GAAII,GAAS,MAAM;AAAA,EAAA;AAAA,EAGlD,MAAa,OAAOJ,GAAiBI,GAAyC;AACxE,IAAAA,EAAQ,UAAUA,EAAQ,aAC5B,KAAK,eAAe,IACpB,KAAK,sBAAsBJ,CAAE,GAE7B,MAAM,KAAK,kBAAkBA,GAAII,GAAS,QAAQ;AAAA,EACpD;AAAA,EAGK,OAAOJ,GAAiBI,GAA0B;AACvD,SAAK,eAAe,IAChB,KAAK,aAAaA,CAAO,MAC3BJ,EAAG,MAAM,kBAAkB,KAG7B,KAAK,sBAAsBA,CAAE;AAElB,eAAAgB,KAAY,KAAK;AAC1B,MAAAA,EAAS,UAAUhB,CAAE;AAGvB,SAAK,YAAY,CAAC;AAAA,EAAA;AAEtB;AChTA,IAAIsB;AAEJ,MAAMC,IAAY;AAAA,EAChB,QAAQvB,GAAII,GAAS;AACnB,UAAMoB,IAAU,OAAOpB,EAAQ,SAAU,WAAWA,EAAQ,QAAQ,CAAC;AAC1D,IAAAkB,IAAA,IAAI1B,EAAQ4B,CAAO,GACrBF,EAAA,IAAItB,GAAII,CAAO;AAAA,EAC1B;AAAA,EACA,QAAQJ,GAAII,GAAe;AAChB,IAAAkB,EAAA,OAAOtB,GAAII,CAAO;AAAA,EAC7B;AAAA,EACA,UAAUJ,GAAII,GAAe;AAClB,IAAAkB,EAAA,OAAOtB,GAAII,CAAO;AAAA,EAAA;AAE/B;"}
@@ -1,8 +1,8 @@
1
- import { debounceId as w } from "../helpers/debounceId.mjs";
2
- import { freezeValue as I } from "../helpers/freezeValue.mjs";
1
+ import { nextTick as w, getCurrentInstance as I, inject as T } from "vue";
2
+ import { debounceId as h } from "../helpers/debounceId.mjs";
3
+ import { freezeValue as j } from "../helpers/freezeValue.mjs";
3
4
  import { isEqual as V } from "../helpers/isEqual.mjs";
4
- import { throttleId as T } from "../helpers/throttleId.mjs";
5
- import { nextTick as h, getCurrentInstance as j, inject as A } from "vue";
5
+ import { throttleId as A } from "../helpers/throttleId.mjs";
6
6
  const u = {
7
7
  mode: "lazy",
8
8
  scrollToErrorSelector: ".has-field-error",
@@ -38,11 +38,11 @@ function M({
38
38
  const s = String(n);
39
39
  if (t != null && t[s] && (e != null && e[s]))
40
40
  throw new Error(`The field "${s}" cannot be both debounced and throttled`);
41
- return t != null && t[s] ? w(
41
+ return t != null && t[s] ? h(
42
42
  s,
43
43
  c,
44
44
  typeof t[s] == "number" ? t[s] : u.debounceTime
45
- ) : e != null && e[s] ? T(
45
+ ) : e != null && e[s] ? A(
46
46
  s,
47
47
  c,
48
48
  typeof e[s] == "number" ? e[s] : u.throttleTime
@@ -69,7 +69,7 @@ function d({
69
69
  valid: !o,
70
70
  validating: !1,
71
71
  validated: !1,
72
- initialValue: I(t),
72
+ initialValue: j(t),
73
73
  validateFunction: a,
74
74
  mode: o ? (s == null ? void 0 : s.mode) ?? (e == null ? void 0 : e.mode) ?? u.mode : void 0
75
75
  };
@@ -176,7 +176,7 @@ async function c({
176
176
  setError: s = !0,
177
177
  setErrorIfInvalidAndNotEmpty: o = !1
178
178
  }) {
179
- if (await h(), r.validating = !0, !t[n]) {
179
+ if (await w(), r.validating = !0, !t[n]) {
180
180
  r.valid = !0, r.validating = !1, r.validated = !0, r.errors = [], r.error = !1;
181
181
  return;
182
182
  }
@@ -263,14 +263,14 @@ function U({
263
263
  });
264
264
  }
265
265
  function C(n) {
266
- const r = j();
266
+ const r = I();
267
267
  if (!r)
268
268
  throw new Error(`${n} must be called within setup()`);
269
269
  return r;
270
270
  }
271
271
  function W(n, r) {
272
272
  var s;
273
- const e = ((s = C(r).formContexts) == null ? void 0 : s.get(n)) ?? A(n);
273
+ const e = ((s = C(r).formContexts) == null ? void 0 : s.get(n)) ?? T(n);
274
274
  if (!e)
275
275
  throw new Error("useFormField must be used within a form (useFormValidator)");
276
276
  return e;
@@ -319,4 +319,4 @@ export {
319
319
  B as u,
320
320
  K as v
321
321
  };
322
- //# sourceMappingURL=utils.Bex2hM45.mjs.map
322
+ //# sourceMappingURL=utils.BxNCknPj.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.BxNCknPj.mjs","sources":["../../src/composables/useFormValidator/config.ts","../../src/composables/useFormValidator/utils.ts"],"sourcesContent":["import type { StrictOptions } from './types'\n\nexport const CONFIG: {\n mode: StrictOptions['mode']\n scrollToErrorSelector: string\n debounceTime: number\n throttleTime: number\n} = {\n mode: 'lazy',\n scrollToErrorSelector: '.has-field-error',\n debounceTime: 300,\n throttleTime: 1000,\n} as const\n","import type { InjectionKey } from 'vue'\nimport type {\n BaseFormPayload,\n CustomInstance,\n ExtractModelKey,\n FieldsStates,\n FieldState,\n FormContext,\n FormFieldOptions,\n FormSchema,\n StrictOptions,\n ValidationIssues,\n} from './types'\n\nimport { getCurrentInstance, inject, nextTick } from 'vue'\n\nimport { debounceId } from './../../helpers/debounceId'\nimport { freezeValue } from './../../helpers/freezeValue'\nimport { isEqual } from './../../helpers/isEqual'\nimport { throttleId } from './../../helpers/throttleId'\nimport { CONFIG } from './config'\n\nexport function fieldHasValidation<Model extends BaseFormPayload, ModelKey extends ExtractModelKey<FormSchema<Model>>>(field: ModelKey, schema: FormSchema<Model>) {\n return Object.keys(schema).includes(field as string)\n}\n\nexport function scrollToError(selector = CONFIG.scrollToErrorSelector) {\n const element = document.querySelector(selector)\n\n if (element) {\n element.scrollIntoView({ behavior: 'smooth', block: 'center' })\n }\n}\n\nexport function getErrorMessages<\n Model extends BaseFormPayload = BaseFormPayload,\n ModelKey extends ExtractModelKey<FormSchema<Model>> = ExtractModelKey<FormSchema<Model>>,\n>(errors: Record<ModelKey, ValidationIssues>, fieldsStates: FieldsStates<Model>) {\n const errorMessages = {} as Record<ModelKey, string | undefined>\n\n for (const [name, value] of Object.entries(errors)) {\n const issues = value as ValidationIssues\n errorMessages[name as ModelKey] = fieldsStates[name as ModelKey].error && issues[0] ? issues[0].message : undefined\n }\n\n return errorMessages\n}\n\nexport function isEmptyValue(value: unknown) {\n return value === undefined || value === null || value === ''\n}\n\nexport function getValidateFunction<\n Model extends BaseFormPayload,\n ModelKey extends ExtractModelKey<FormSchema<Model>> = ExtractModelKey<FormSchema<Model>>,\n>({\n name,\n hasValidation,\n debouncedFields,\n throttledFields,\n}: {\n name: ModelKey\n hasValidation: boolean\n debouncedFields?: StrictOptions<Model>['debouncedFields']\n throttledFields?: StrictOptions<Model>['throttledFields']\n}) {\n if (!hasValidation) {\n return\n }\n\n const fieldName = String(name)\n\n if (debouncedFields?.[fieldName] && throttledFields?.[fieldName]) {\n throw new Error(`The field \"${fieldName}\" cannot be both debounced and throttled`)\n }\n else if (debouncedFields?.[fieldName]) {\n return debounceId(\n fieldName,\n setFieldValidationState<Model>,\n typeof debouncedFields[fieldName] === 'number' ? debouncedFields[fieldName] : CONFIG.debounceTime,\n )\n }\n else if (throttledFields?.[fieldName]) {\n return throttleId(\n fieldName,\n setFieldValidationState<Model>,\n typeof throttledFields[fieldName] === 'number' ? throttledFields[fieldName] : CONFIG.throttleTime,\n )\n }\n else {\n return setFieldValidationState<Model>\n }\n}\n\nexport function getFieldState<\n Model extends BaseFormPayload = BaseFormPayload,\n ModelKey extends ExtractModelKey<FormSchema<Model>> = ExtractModelKey<FormSchema<Model>>,\n>({\n name,\n schema,\n initialValue,\n fieldState,\n options,\n}: {\n name: ModelKey\n schema?: FormSchema<Model>\n initialValue?: Model[ModelKey]\n fieldState: FieldState<Model>\n options?: Pick<StrictOptions<Model>, 'debouncedFields' | 'throttledFields' | 'mode'>\n}): FieldState<Model> {\n const hasValidation = schema ? fieldHasValidation<Model, ModelKey>(name, schema) : false\n\n const validateFunction = getValidateFunction({\n name,\n hasValidation,\n debouncedFields: options?.debouncedFields,\n throttledFields: options?.throttledFields,\n })\n\n return {\n blurred: false,\n dirty: false,\n errors: [],\n error: false,\n valid: !hasValidation,\n validating: false,\n validated: false,\n initialValue: freezeValue(initialValue),\n validateFunction,\n mode: hasValidation ? options?.mode ?? fieldState?.mode ?? CONFIG.mode : undefined,\n }\n}\n\nexport function getFieldsStates<\n Model extends BaseFormPayload,\n ModelKey extends ExtractModelKey<FormSchema<Model>> = ExtractModelKey<FormSchema<Model>>,\n>({\n schema,\n payload,\n options,\n}: {\n schema: FormSchema<Model>\n payload: Partial<Model>\n options: StrictOptions<Model>\n}): FieldsStates<Model> {\n const fieldsStates = {} as FieldsStates<Model>\n\n for (const fieldName in schema) {\n const name = fieldName as ModelKey\n fieldsStates[name] = getFieldState<Model>({\n name,\n schema,\n options,\n fieldState: fieldsStates[name],\n initialValue: payload?.[name],\n })\n }\n\n return fieldsStates\n}\n\nexport function updateFieldsStates<\n Model extends BaseFormPayload,\n ModelKey extends ExtractModelKey<FormSchema<Model>> = ExtractModelKey<FormSchema<Model>>,\n>({\n fieldsStates,\n payload,\n schema,\n options,\n updateMode = false,\n}: {\n fieldsStates: FieldsStates<Model>\n payload: Model\n schema: FormSchema<Model>\n options: StrictOptions<Model>\n updateMode?: boolean\n}) {\n for (const fieldName in schema) {\n const name = fieldName as ModelKey\n fieldsStates[name] = updateFieldState<Model>({\n name,\n fieldState: fieldsStates[name],\n payload,\n schema,\n options,\n updateMode,\n })\n }\n}\n\nexport function updateFieldState<\n Model extends BaseFormPayload,\n ModelKey extends ExtractModelKey<FormSchema<Model>> = ExtractModelKey<FormSchema<Model>>,\n>({\n name,\n fieldState,\n payload,\n schema,\n options,\n updateMode = true,\n}: {\n name: ModelKey\n fieldState: FieldState<Model>\n payload: Model\n schema: FormSchema<Model>\n options: FormFieldOptions<Model[ModelKey]> & StrictOptions<Model>\n updateMode?: boolean\n}): FieldState<Model> {\n const { initialValue, mode, ...rest } = getFieldState<Model>({\n name,\n schema,\n initialValue: options.defaultValue ?? payload[name],\n fieldState,\n options,\n })\n\n const newMode = updateMode ? mode ?? fieldState.mode ?? CONFIG.mode : fieldState.mode\n\n return {\n ...fieldState,\n initialValue,\n mode: newMode,\n ...(fieldState?.mode && newMode !== fieldState.mode ? rest : {}),\n }\n}\n\nexport function getFieldsErrors<\n Model extends BaseFormPayload,\n ModelKey extends ExtractModelKey<FormSchema<Model>> = ExtractModelKey<FormSchema<Model>>,\n>(fieldsStates: FieldsStates<Model>) {\n const fieldsErrors = {} as Record<ModelKey, ValidationIssues>\n\n for (const [name, { errors }] of Object.entries(fieldsStates)) {\n fieldsErrors[name as ModelKey] = errors\n }\n\n return fieldsErrors\n}\n\nexport function findInteractiveElements(el: HTMLElement) {\n if (el instanceof HTMLInputElement || el instanceof HTMLSelectElement || el instanceof HTMLTextAreaElement) {\n return [el]\n }\n\n return el.querySelectorAll<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>(\n 'input, select, textarea',\n ) as unknown as (HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement)[]\n}\n\nexport function addEventToInteractiveElements({\n interactiveElements,\n onBlur,\n mode,\n}: {\n interactiveElements: HTMLElement[]\n onBlur: () => void\n mode: StrictOptions['mode']\n}) {\n interactiveElements.forEach((element) => {\n if (hasModeIncludes(['eager', 'blur', 'progressive'], mode)) {\n element.addEventListener('blur', onBlur)\n }\n })\n}\n\nexport function removeEventFromInteractiveElements({\n interactiveElements,\n onBlur,\n}: {\n interactiveElements: HTMLElement[]\n onBlur: () => void\n}) {\n interactiveElements.forEach((element) => {\n element.removeEventListener('blur', onBlur)\n })\n}\n\nexport async function getFieldValidationResult<\n Model extends BaseFormPayload,\n ModelKey extends ExtractModelKey<FormSchema<Model>> = ExtractModelKey<FormSchema<Model>>,\n>(name: ModelKey, schema: FormSchema<Model>, value: Model[ModelKey]) {\n const fieldSchema = await getValidationSchema(schema)\n const safeParseAsync = await getValibotValidationMethod('safeParseAsync')\n const result = await safeParseAsync(fieldSchema.entries[name], value ?? '')\n\n return {\n result,\n isValid: result.success,\n }\n}\n\nexport async function setFieldValidationState<\n Model extends BaseFormPayload,\n ModelKey extends ExtractModelKey<FormSchema<Model>> = ExtractModelKey<FormSchema<Model>>,\n>({\n name,\n fieldState,\n schema,\n payload,\n setError = true,\n setErrorIfInvalidAndNotEmpty = false,\n}: {\n name: ModelKey\n fieldState: FieldState<Model>\n schema: FormSchema<Model>\n payload: Model\n setError?: boolean\n setErrorIfInvalidAndNotEmpty?: boolean\n}) {\n await nextTick()\n\n fieldState.validating = true\n\n if (!schema[name]) {\n // Validate if the field is not in the schema\n fieldState.valid = true\n fieldState.validating = false\n fieldState.validated = true\n fieldState.errors = []\n fieldState.error = false\n return\n }\n\n const { result, isValid } = await getFieldValidationResult(name, schema, payload[name])\n\n fieldState.valid = isValid\n\n if (setError || (setErrorIfInvalidAndNotEmpty && !isValid && !isEmptyValue(payload[name]))) {\n fieldState.error = !isValid\n }\n\n fieldState.errors = result.issues ?? []\n\n fieldState.validating = false\n fieldState.validated = true\n}\n\nexport function validateField<\n Model extends BaseFormPayload,\n ModelKey extends ExtractModelKey<FormSchema<Model>> = ExtractModelKey<FormSchema<Model>>,\n>({\n name,\n fieldState,\n payload,\n schema,\n}: {\n name: ModelKey\n fieldState: FieldState<Model>\n payload: Model\n schema: FormSchema<Model>\n}) {\n const validationParams: Parameters<typeof setFieldValidationState<Model>>[number] = {\n name,\n fieldState,\n payload,\n schema,\n setError: fieldState.mode === 'progressive' ? fieldState.valid || fieldState.blurred : true,\n }\n\n return fieldState.validateFunction?.(validationParams)\n}\n\nexport function validateForm<\n Model extends BaseFormPayload,\n ModelKey extends ExtractModelKey<FormSchema<Model>> = ExtractModelKey<FormSchema<Model>>,\n>({\n fieldsStates,\n payload,\n showErrors = true,\n schema,\n}: {\n fieldsStates: FieldsStates<Model>\n showErrors?: boolean\n payload: Model\n schema: FormSchema<Model>\n}) {\n return Promise.all(\n Object.keys(fieldsStates).map(name =>\n setFieldValidationState<Model>({\n name: name as ModelKey,\n setError: showErrors,\n fieldState: fieldsStates[name],\n payload,\n schema,\n setErrorIfInvalidAndNotEmpty: fieldsStates[name].mode === 'lazy',\n }),\n ),\n )\n}\n\nexport function canExecuteValidation<Model extends BaseFormPayload>({\n eventName,\n fieldState,\n isSubmitted,\n}: {\n eventName: 'blur' | 'input'\n fieldState: FieldState<Model>\n isSubmitted: boolean\n}): boolean {\n const { dirty, blurred, mode, valid } = fieldState\n\n const shouldNotValidate\n = (eventName === 'blur' && (hasModeIncludes(['lazy', 'aggressive'], mode) || valid))\n || (eventName === 'input' && mode === 'blur')\n || !mode\n\n if (shouldNotValidate) {\n return false\n }\n\n return (\n isSubmitted\n || (mode === 'eager' && blurred)\n || (mode === 'blur' && blurred)\n || (mode === 'aggressive' && dirty)\n || (mode === 'lazy' && dirty)\n || mode === 'progressive'\n )\n}\n\nexport function handleFieldBlur<\n Model extends BaseFormPayload,\n ModelKey extends ExtractModelKey<FormSchema<Model>> = ExtractModelKey<FormSchema<Model>>,\n>({\n name,\n force = false,\n payload,\n fieldState,\n schema,\n isSubmitted,\n}: {\n name: ModelKey\n payload: Model\n fieldState: FieldState<Model>\n schema: FormSchema<Model>\n isSubmitted: boolean\n force?: boolean\n}) {\n const fieldValue = payload[name]\n\n const isDirty = !isEmptyValue(fieldValue) && !isEqual(fieldValue, fieldState.initialValue)\n\n fieldState.dirty = isDirty\n fieldState.blurred = fieldState.blurred || (fieldState.mode === 'eager' ? isDirty : true)\n\n const shouldValidate = force || canExecuteValidation<Model>({ eventName: 'blur', fieldState, isSubmitted })\n\n if (!shouldValidate) {\n return\n }\n\n return validateField<Model>({\n name,\n fieldState,\n schema,\n payload,\n })\n}\n\nexport function handleFieldInput<\n Model extends BaseFormPayload,\n ModelKey extends ExtractModelKey<FormSchema<Model>> = ExtractModelKey<FormSchema<Model>>,\n>({\n name,\n payload,\n fieldState,\n schema,\n isSubmitted,\n forceValidation = false,\n}: {\n name: ModelKey\n payload: Model\n fieldState: FieldState<Model>\n schema: FormSchema<Model>\n isSubmitted: boolean\n forceValidation?: boolean\n}) {\n const fieldValue = payload[name]\n\n fieldState.validated = false\n\n const isDirty = !isEmptyValue(fieldValue) && !isEqual(fieldValue, fieldState.initialValue)\n\n fieldState.dirty = isDirty\n\n const shouldValidate = forceValidation || canExecuteValidation<Model>({ eventName: 'input', fieldState, isSubmitted })\n\n if (!shouldValidate) {\n return\n }\n\n return validateField<Model>({\n name,\n fieldState,\n schema,\n payload,\n })\n}\n\nexport function getInstance<Model extends BaseFormPayload>(composableName: string) {\n const instance = getCurrentInstance() as CustomInstance<Model>\n if (!instance) {\n throw new Error(`${composableName} must be called within setup()`)\n }\n\n return instance\n}\n\nexport function getContext<Model extends BaseFormPayload>(\n identifier: string | symbol | InjectionKey<FormContext<Model>>,\n composableName: string,\n) {\n const instance = getInstance<Model>(composableName)\n const context = instance.formContexts?.get(identifier) ?? inject<FormContext<Model>>(identifier)\n\n if (!context) {\n throw new Error('useFormField must be used within a form (useFormValidator)')\n }\n\n return context\n}\n\nexport function getValidationEvents<Model extends BaseFormPayload>({\n ref,\n fieldState,\n onBlur,\n}: {\n ref?: string\n fieldState: FieldState<Model>\n onBlur: () => void\n}) {\n if (ref || hasModeIncludes(['aggressive', 'lazy'], fieldState.mode)) {\n return\n }\n\n return {\n onBlur,\n }\n}\n\ntype Valibot = typeof import('valibot')\nconst storeValidbot: Record<keyof Valibot | string, any> = {}\n\nexport async function getValibotValidationMethod<MethodName extends keyof Valibot>(methodName: MethodName): Promise<Valibot[MethodName]> {\n if (storeValidbot[methodName]) {\n return storeValidbot[methodName]\n }\n\n const valibot = await import('valibot')\n\n storeValidbot[methodName] = valibot[methodName]\n\n return valibot[methodName]\n}\n\nexport async function getValidationSchema<Model extends BaseFormPayload>(formSchema: FormSchema<Model>) {\n const objectAsync = await getValibotValidationMethod('objectAsync')\n return objectAsync(formSchema)\n}\n\nexport function hasModeIncludes(modes: StrictOptions['mode'][], value?: StrictOptions['mode']): value is StrictOptions['mode'] {\n if (!value) {\n return false\n }\n\n return modes.includes(value)\n}\n"],"names":["CONFIG","fieldHasValidation","field","schema","scrollToError","selector","element","getErrorMessages","errors","fieldsStates","errorMessages","name","value","issues","isEmptyValue","getValidateFunction","hasValidation","debouncedFields","throttledFields","fieldName","debounceId","setFieldValidationState","throttleId","getFieldState","initialValue","fieldState","options","validateFunction","freezeValue","getFieldsStates","payload","updateFieldsStates","updateMode","updateFieldState","mode","rest","newMode","getFieldsErrors","fieldsErrors","findInteractiveElements","el","addEventToInteractiveElements","interactiveElements","onBlur","hasModeIncludes","removeEventFromInteractiveElements","getFieldValidationResult","fieldSchema","getValidationSchema","result","getValibotValidationMethod","setError","setErrorIfInvalidAndNotEmpty","nextTick","isValid","validateField","validationParams","_a","validateForm","showErrors","canExecuteValidation","eventName","isSubmitted","dirty","blurred","valid","handleFieldBlur","force","fieldValue","isDirty","isEqual","handleFieldInput","forceValidation","getInstance","composableName","instance","getCurrentInstance","getContext","identifier","context","inject","getValidationEvents","ref","storeValidbot","methodName","valibot","formSchema","modes"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";var q=Object.create;var E=Object.defineProperty;var M=Object.getOwnPropertyDescriptor;var A=Object.getOwnPropertyNames;var j=Object.getPrototypeOf,x=Object.prototype.hasOwnProperty;var z=(r,e,n,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of A(e))!x.call(r,s)&&s!==n&&E(r,s,{get:()=>e[s],enumerable:!(t=M(e,s))||t.enumerable});return r};var C=(r,e,n)=>(n=r!=null?q(j(r)):{},z(e||!r||!r.__esModule?E(n,"default",{value:r,enumerable:!0}):n,r));const O=require("../helpers/debounceId.cjs"),H=require("../helpers/freezeValue.cjs"),V=require("../helpers/isEqual.cjs"),L=require("../helpers/throttleId.cjs"),v=require("vue"),u={mode:"lazy",scrollToErrorSelector:".has-field-error",debounceTime:300,throttleTime:1e3};function b(r,e){return Object.keys(e).includes(r)}function N(r=u.scrollToErrorSelector){const e=document.querySelector(r);e&&e.scrollIntoView({behavior:"smooth",block:"center"})}function P(r,e){const n={};for(const[t,s]of Object.entries(r)){const o=s;n[t]=e[t].error&&o[0]?o[0].message:void 0}return n}function m(r){return r==null||r===""}function k({name:r,hasValidation:e,debouncedFields:n,throttledFields:t}){if(!e)return;const s=String(r);if(n!=null&&n[s]&&(t!=null&&t[s]))throw new Error(`The field "${s}" cannot be both debounced and throttled`);return n!=null&&n[s]?O.debounceId(s,c,typeof n[s]=="number"?n[s]:u.debounceTime):t!=null&&t[s]?L.throttleId(s,c,typeof t[s]=="number"?t[s]:u.throttleTime):c}function I({name:r,schema:e,initialValue:n,fieldState:t,options:s}){const o=e?b(r,e):!1,i=k({name:r,hasValidation:o,debouncedFields:s==null?void 0:s.debouncedFields,throttledFields:s==null?void 0:s.throttledFields});return{blurred:!1,dirty:!1,errors:[],error:!1,valid:!o,validating:!1,validated:!1,initialValue:H.freezeValue(n),validateFunction:i,mode:o?(s==null?void 0:s.mode)??(t==null?void 0:t.mode)??u.mode:void 0}}function _({schema:r,payload:e,options:n}){const t={};for(const s in r){const o=s;t[o]=I({name:o,schema:r,options:n,fieldState:t[o],initialValue:e==null?void 0:e[o]})}return t}function p({fieldsStates:r,payload:e,schema:n,options:t,updateMode:s=!1}){for(const o in n){const i=o;r[i]=y({name:i,fieldState:r[i],payload:e,schema:n,options:t,updateMode:s})}}function y({name:r,fieldState:e,payload:n,schema:t,options:s,updateMode:o=!0}){const{initialValue:i,mode:a,...d}=I({name:r,schema:t,initialValue:s.defaultValue??n[r],fieldState:e,options:s}),g=o?a??e.mode??u.mode:e.mode;return{...e,initialValue:i,mode:g,...e!=null&&e.mode&&g!==e.mode?d:{}}}function B(r){const e={};for(const[n,{errors:t}]of Object.entries(r))e[n]=t;return e}function D(r){return r instanceof HTMLInputElement||r instanceof HTMLSelectElement||r instanceof HTMLTextAreaElement?[r]:r.querySelectorAll("input, select, textarea")}function G({interactiveElements:r,onBlur:e,mode:n}){r.forEach(t=>{l(["eager","blur","progressive"],n)&&t.addEventListener("blur",e)})}function $({interactiveElements:r,onBlur:e}){r.forEach(n=>{n.removeEventListener("blur",e)})}async function R(r,e,n){const t=await X(e),o=await(await F("safeParseAsync"))(t.entries[r],n??"");return{result:o,isValid:o.success}}async function c({name:r,fieldState:e,schema:n,payload:t,setError:s=!0,setErrorIfInvalidAndNotEmpty:o=!1}){if(await v.nextTick(),e.validating=!0,!n[r]){e.valid=!0,e.validating=!1,e.validated=!0,e.errors=[],e.error=!1;return}const{result:i,isValid:a}=await R(r,n,t[r]);e.valid=a,(s||o&&!a&&!m(t[r]))&&(e.error=!a),e.errors=i.issues??[],e.validating=!1,e.validated=!0}function h({name:r,fieldState:e,payload:n,schema:t}){var o;const s={name:r,fieldState:e,payload:n,schema:t,setError:e.mode==="progressive"?e.valid||e.blurred:!0};return(o=e.validateFunction)==null?void 0:o.call(e,s)}function J({fieldsStates:r,payload:e,showErrors:n=!0,schema:t}){return Promise.all(Object.keys(r).map(s=>c({name:s,setError:n,fieldState:r[s],payload:e,schema:t,setErrorIfInvalidAndNotEmpty:r[s].mode==="lazy"})))}function w({eventName:r,fieldState:e,isSubmitted:n}){const{dirty:t,blurred:s,mode:o,valid:i}=e;return r==="blur"&&(l(["lazy","aggressive"],o)||i)||r==="input"&&o==="blur"||!o?!1:n||o==="eager"&&s||o==="blur"&&s||o==="aggressive"&&t||o==="lazy"&&t||o==="progressive"}function K({name:r,force:e=!1,payload:n,fieldState:t,schema:s,isSubmitted:o}){const i=n[r],a=!m(i)&&!V.isEqual(i,t.initialValue);if(t.dirty=a,t.blurred=t.blurred||(t.mode==="eager"?a:!0),!!(e||w({eventName:"blur",fieldState:t,isSubmitted:o})))return h({name:r,fieldState:t,schema:s,payload:n})}function Q({name:r,payload:e,fieldState:n,schema:t,isSubmitted:s,forceValidation:o=!1}){const i=e[r];n.validated=!1;const a=!m(i)&&!V.isEqual(i,n.initialValue);if(n.dirty=a,!!(o||w({eventName:"input",fieldState:n,isSubmitted:s})))return h({name:r,fieldState:n,schema:t,payload:e})}function T(r){const e=v.getCurrentInstance();if(!e)throw new Error(`${r} must be called within setup()`);return e}function U(r,e){var s;const t=((s=T(e).formContexts)==null?void 0:s.get(r))??v.inject(r);if(!t)throw new Error("useFormField must be used within a form (useFormValidator)");return t}function W({ref:r,fieldState:e,onBlur:n}){if(!(r||l(["aggressive","lazy"],e.mode)))return{onBlur:n}}const f={};async function F(r){if(f[r])return f[r];const e=await import("valibot");return f[r]=e[r],e[r]}async function X(r){return(await F("objectAsync"))(r)}function l(r,e){return e?r.includes(e):!1}exports.CONFIG=u;exports.addEventToInteractiveElements=G;exports.fieldHasValidation=b;exports.findInteractiveElements=D;exports.getContext=U;exports.getErrorMessages=P;exports.getFieldsErrors=B;exports.getFieldsStates=_;exports.getInstance=T;exports.getValidationEvents=W;exports.handleFieldBlur=K;exports.handleFieldInput=Q;exports.hasModeIncludes=l;exports.removeEventFromInteractiveElements=$;exports.scrollToError=N;exports.setFieldValidationState=c;exports.updateFieldState=y;exports.updateFieldsStates=p;exports.validateForm=J;
2
- //# sourceMappingURL=utils.vGzCTXH5.cjs.map
1
+ "use strict";var q=Object.create;var E=Object.defineProperty;var M=Object.getOwnPropertyDescriptor;var A=Object.getOwnPropertyNames;var j=Object.getPrototypeOf,x=Object.prototype.hasOwnProperty;var z=(r,e,n,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of A(e))!x.call(r,s)&&s!==n&&E(r,s,{get:()=>e[s],enumerable:!(t=M(e,s))||t.enumerable});return r};var C=(r,e,n)=>(n=r!=null?q(j(r)):{},z(e||!r||!r.__esModule?E(n,"default",{value:r,enumerable:!0}):n,r));const v=require("vue"),O=require("../helpers/debounceId.cjs"),H=require("../helpers/freezeValue.cjs"),V=require("../helpers/isEqual.cjs"),L=require("../helpers/throttleId.cjs"),u={mode:"lazy",scrollToErrorSelector:".has-field-error",debounceTime:300,throttleTime:1e3};function b(r,e){return Object.keys(e).includes(r)}function N(r=u.scrollToErrorSelector){const e=document.querySelector(r);e&&e.scrollIntoView({behavior:"smooth",block:"center"})}function P(r,e){const n={};for(const[t,s]of Object.entries(r)){const o=s;n[t]=e[t].error&&o[0]?o[0].message:void 0}return n}function m(r){return r==null||r===""}function k({name:r,hasValidation:e,debouncedFields:n,throttledFields:t}){if(!e)return;const s=String(r);if(n!=null&&n[s]&&(t!=null&&t[s]))throw new Error(`The field "${s}" cannot be both debounced and throttled`);return n!=null&&n[s]?O.debounceId(s,c,typeof n[s]=="number"?n[s]:u.debounceTime):t!=null&&t[s]?L.throttleId(s,c,typeof t[s]=="number"?t[s]:u.throttleTime):c}function I({name:r,schema:e,initialValue:n,fieldState:t,options:s}){const o=e?b(r,e):!1,i=k({name:r,hasValidation:o,debouncedFields:s==null?void 0:s.debouncedFields,throttledFields:s==null?void 0:s.throttledFields});return{blurred:!1,dirty:!1,errors:[],error:!1,valid:!o,validating:!1,validated:!1,initialValue:H.freezeValue(n),validateFunction:i,mode:o?(s==null?void 0:s.mode)??(t==null?void 0:t.mode)??u.mode:void 0}}function _({schema:r,payload:e,options:n}){const t={};for(const s in r){const o=s;t[o]=I({name:o,schema:r,options:n,fieldState:t[o],initialValue:e==null?void 0:e[o]})}return t}function p({fieldsStates:r,payload:e,schema:n,options:t,updateMode:s=!1}){for(const o in n){const i=o;r[i]=y({name:i,fieldState:r[i],payload:e,schema:n,options:t,updateMode:s})}}function y({name:r,fieldState:e,payload:n,schema:t,options:s,updateMode:o=!0}){const{initialValue:i,mode:a,...d}=I({name:r,schema:t,initialValue:s.defaultValue??n[r],fieldState:e,options:s}),g=o?a??e.mode??u.mode:e.mode;return{...e,initialValue:i,mode:g,...e!=null&&e.mode&&g!==e.mode?d:{}}}function B(r){const e={};for(const[n,{errors:t}]of Object.entries(r))e[n]=t;return e}function D(r){return r instanceof HTMLInputElement||r instanceof HTMLSelectElement||r instanceof HTMLTextAreaElement?[r]:r.querySelectorAll("input, select, textarea")}function G({interactiveElements:r,onBlur:e,mode:n}){r.forEach(t=>{l(["eager","blur","progressive"],n)&&t.addEventListener("blur",e)})}function $({interactiveElements:r,onBlur:e}){r.forEach(n=>{n.removeEventListener("blur",e)})}async function R(r,e,n){const t=await X(e),o=await(await F("safeParseAsync"))(t.entries[r],n??"");return{result:o,isValid:o.success}}async function c({name:r,fieldState:e,schema:n,payload:t,setError:s=!0,setErrorIfInvalidAndNotEmpty:o=!1}){if(await v.nextTick(),e.validating=!0,!n[r]){e.valid=!0,e.validating=!1,e.validated=!0,e.errors=[],e.error=!1;return}const{result:i,isValid:a}=await R(r,n,t[r]);e.valid=a,(s||o&&!a&&!m(t[r]))&&(e.error=!a),e.errors=i.issues??[],e.validating=!1,e.validated=!0}function h({name:r,fieldState:e,payload:n,schema:t}){var o;const s={name:r,fieldState:e,payload:n,schema:t,setError:e.mode==="progressive"?e.valid||e.blurred:!0};return(o=e.validateFunction)==null?void 0:o.call(e,s)}function J({fieldsStates:r,payload:e,showErrors:n=!0,schema:t}){return Promise.all(Object.keys(r).map(s=>c({name:s,setError:n,fieldState:r[s],payload:e,schema:t,setErrorIfInvalidAndNotEmpty:r[s].mode==="lazy"})))}function w({eventName:r,fieldState:e,isSubmitted:n}){const{dirty:t,blurred:s,mode:o,valid:i}=e;return r==="blur"&&(l(["lazy","aggressive"],o)||i)||r==="input"&&o==="blur"||!o?!1:n||o==="eager"&&s||o==="blur"&&s||o==="aggressive"&&t||o==="lazy"&&t||o==="progressive"}function K({name:r,force:e=!1,payload:n,fieldState:t,schema:s,isSubmitted:o}){const i=n[r],a=!m(i)&&!V.isEqual(i,t.initialValue);if(t.dirty=a,t.blurred=t.blurred||(t.mode==="eager"?a:!0),!!(e||w({eventName:"blur",fieldState:t,isSubmitted:o})))return h({name:r,fieldState:t,schema:s,payload:n})}function Q({name:r,payload:e,fieldState:n,schema:t,isSubmitted:s,forceValidation:o=!1}){const i=e[r];n.validated=!1;const a=!m(i)&&!V.isEqual(i,n.initialValue);if(n.dirty=a,!!(o||w({eventName:"input",fieldState:n,isSubmitted:s})))return h({name:r,fieldState:n,schema:t,payload:e})}function T(r){const e=v.getCurrentInstance();if(!e)throw new Error(`${r} must be called within setup()`);return e}function U(r,e){var s;const t=((s=T(e).formContexts)==null?void 0:s.get(r))??v.inject(r);if(!t)throw new Error("useFormField must be used within a form (useFormValidator)");return t}function W({ref:r,fieldState:e,onBlur:n}){if(!(r||l(["aggressive","lazy"],e.mode)))return{onBlur:n}}const f={};async function F(r){if(f[r])return f[r];const e=await import("valibot");return f[r]=e[r],e[r]}async function X(r){return(await F("objectAsync"))(r)}function l(r,e){return e?r.includes(e):!1}exports.CONFIG=u;exports.addEventToInteractiveElements=G;exports.fieldHasValidation=b;exports.findInteractiveElements=D;exports.getContext=U;exports.getErrorMessages=P;exports.getFieldsErrors=B;exports.getFieldsStates=_;exports.getInstance=T;exports.getValidationEvents=W;exports.handleFieldBlur=K;exports.handleFieldInput=Q;exports.hasModeIncludes=l;exports.removeEventFromInteractiveElements=$;exports.scrollToError=N;exports.setFieldValidationState=c;exports.updateFieldState=y;exports.updateFieldsStates=p;exports.validateForm=J;
2
+ //# sourceMappingURL=utils.K864VNFX.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.K864VNFX.cjs","sources":["../../src/composables/useFormValidator/config.ts","../../src/composables/useFormValidator/utils.ts"],"sourcesContent":["import type { StrictOptions } from './types'\n\nexport const CONFIG: {\n mode: StrictOptions['mode']\n scrollToErrorSelector: string\n debounceTime: number\n throttleTime: number\n} = {\n mode: 'lazy',\n scrollToErrorSelector: '.has-field-error',\n debounceTime: 300,\n throttleTime: 1000,\n} as const\n","import type { InjectionKey } from 'vue'\nimport type {\n BaseFormPayload,\n CustomInstance,\n ExtractModelKey,\n FieldsStates,\n FieldState,\n FormContext,\n FormFieldOptions,\n FormSchema,\n StrictOptions,\n ValidationIssues,\n} from './types'\n\nimport { getCurrentInstance, inject, nextTick } from 'vue'\n\nimport { debounceId } from './../../helpers/debounceId'\nimport { freezeValue } from './../../helpers/freezeValue'\nimport { isEqual } from './../../helpers/isEqual'\nimport { throttleId } from './../../helpers/throttleId'\nimport { CONFIG } from './config'\n\nexport function fieldHasValidation<Model extends BaseFormPayload, ModelKey extends ExtractModelKey<FormSchema<Model>>>(field: ModelKey, schema: FormSchema<Model>) {\n return Object.keys(schema).includes(field as string)\n}\n\nexport function scrollToError(selector = CONFIG.scrollToErrorSelector) {\n const element = document.querySelector(selector)\n\n if (element) {\n element.scrollIntoView({ behavior: 'smooth', block: 'center' })\n }\n}\n\nexport function getErrorMessages<\n Model extends BaseFormPayload = BaseFormPayload,\n ModelKey extends ExtractModelKey<FormSchema<Model>> = ExtractModelKey<FormSchema<Model>>,\n>(errors: Record<ModelKey, ValidationIssues>, fieldsStates: FieldsStates<Model>) {\n const errorMessages = {} as Record<ModelKey, string | undefined>\n\n for (const [name, value] of Object.entries(errors)) {\n const issues = value as ValidationIssues\n errorMessages[name as ModelKey] = fieldsStates[name as ModelKey].error && issues[0] ? issues[0].message : undefined\n }\n\n return errorMessages\n}\n\nexport function isEmptyValue(value: unknown) {\n return value === undefined || value === null || value === ''\n}\n\nexport function getValidateFunction<\n Model extends BaseFormPayload,\n ModelKey extends ExtractModelKey<FormSchema<Model>> = ExtractModelKey<FormSchema<Model>>,\n>({\n name,\n hasValidation,\n debouncedFields,\n throttledFields,\n}: {\n name: ModelKey\n hasValidation: boolean\n debouncedFields?: StrictOptions<Model>['debouncedFields']\n throttledFields?: StrictOptions<Model>['throttledFields']\n}) {\n if (!hasValidation) {\n return\n }\n\n const fieldName = String(name)\n\n if (debouncedFields?.[fieldName] && throttledFields?.[fieldName]) {\n throw new Error(`The field \"${fieldName}\" cannot be both debounced and throttled`)\n }\n else if (debouncedFields?.[fieldName]) {\n return debounceId(\n fieldName,\n setFieldValidationState<Model>,\n typeof debouncedFields[fieldName] === 'number' ? debouncedFields[fieldName] : CONFIG.debounceTime,\n )\n }\n else if (throttledFields?.[fieldName]) {\n return throttleId(\n fieldName,\n setFieldValidationState<Model>,\n typeof throttledFields[fieldName] === 'number' ? throttledFields[fieldName] : CONFIG.throttleTime,\n )\n }\n else {\n return setFieldValidationState<Model>\n }\n}\n\nexport function getFieldState<\n Model extends BaseFormPayload = BaseFormPayload,\n ModelKey extends ExtractModelKey<FormSchema<Model>> = ExtractModelKey<FormSchema<Model>>,\n>({\n name,\n schema,\n initialValue,\n fieldState,\n options,\n}: {\n name: ModelKey\n schema?: FormSchema<Model>\n initialValue?: Model[ModelKey]\n fieldState: FieldState<Model>\n options?: Pick<StrictOptions<Model>, 'debouncedFields' | 'throttledFields' | 'mode'>\n}): FieldState<Model> {\n const hasValidation = schema ? fieldHasValidation<Model, ModelKey>(name, schema) : false\n\n const validateFunction = getValidateFunction({\n name,\n hasValidation,\n debouncedFields: options?.debouncedFields,\n throttledFields: options?.throttledFields,\n })\n\n return {\n blurred: false,\n dirty: false,\n errors: [],\n error: false,\n valid: !hasValidation,\n validating: false,\n validated: false,\n initialValue: freezeValue(initialValue),\n validateFunction,\n mode: hasValidation ? options?.mode ?? fieldState?.mode ?? CONFIG.mode : undefined,\n }\n}\n\nexport function getFieldsStates<\n Model extends BaseFormPayload,\n ModelKey extends ExtractModelKey<FormSchema<Model>> = ExtractModelKey<FormSchema<Model>>,\n>({\n schema,\n payload,\n options,\n}: {\n schema: FormSchema<Model>\n payload: Partial<Model>\n options: StrictOptions<Model>\n}): FieldsStates<Model> {\n const fieldsStates = {} as FieldsStates<Model>\n\n for (const fieldName in schema) {\n const name = fieldName as ModelKey\n fieldsStates[name] = getFieldState<Model>({\n name,\n schema,\n options,\n fieldState: fieldsStates[name],\n initialValue: payload?.[name],\n })\n }\n\n return fieldsStates\n}\n\nexport function updateFieldsStates<\n Model extends BaseFormPayload,\n ModelKey extends ExtractModelKey<FormSchema<Model>> = ExtractModelKey<FormSchema<Model>>,\n>({\n fieldsStates,\n payload,\n schema,\n options,\n updateMode = false,\n}: {\n fieldsStates: FieldsStates<Model>\n payload: Model\n schema: FormSchema<Model>\n options: StrictOptions<Model>\n updateMode?: boolean\n}) {\n for (const fieldName in schema) {\n const name = fieldName as ModelKey\n fieldsStates[name] = updateFieldState<Model>({\n name,\n fieldState: fieldsStates[name],\n payload,\n schema,\n options,\n updateMode,\n })\n }\n}\n\nexport function updateFieldState<\n Model extends BaseFormPayload,\n ModelKey extends ExtractModelKey<FormSchema<Model>> = ExtractModelKey<FormSchema<Model>>,\n>({\n name,\n fieldState,\n payload,\n schema,\n options,\n updateMode = true,\n}: {\n name: ModelKey\n fieldState: FieldState<Model>\n payload: Model\n schema: FormSchema<Model>\n options: FormFieldOptions<Model[ModelKey]> & StrictOptions<Model>\n updateMode?: boolean\n}): FieldState<Model> {\n const { initialValue, mode, ...rest } = getFieldState<Model>({\n name,\n schema,\n initialValue: options.defaultValue ?? payload[name],\n fieldState,\n options,\n })\n\n const newMode = updateMode ? mode ?? fieldState.mode ?? CONFIG.mode : fieldState.mode\n\n return {\n ...fieldState,\n initialValue,\n mode: newMode,\n ...(fieldState?.mode && newMode !== fieldState.mode ? rest : {}),\n }\n}\n\nexport function getFieldsErrors<\n Model extends BaseFormPayload,\n ModelKey extends ExtractModelKey<FormSchema<Model>> = ExtractModelKey<FormSchema<Model>>,\n>(fieldsStates: FieldsStates<Model>) {\n const fieldsErrors = {} as Record<ModelKey, ValidationIssues>\n\n for (const [name, { errors }] of Object.entries(fieldsStates)) {\n fieldsErrors[name as ModelKey] = errors\n }\n\n return fieldsErrors\n}\n\nexport function findInteractiveElements(el: HTMLElement) {\n if (el instanceof HTMLInputElement || el instanceof HTMLSelectElement || el instanceof HTMLTextAreaElement) {\n return [el]\n }\n\n return el.querySelectorAll<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>(\n 'input, select, textarea',\n ) as unknown as (HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement)[]\n}\n\nexport function addEventToInteractiveElements({\n interactiveElements,\n onBlur,\n mode,\n}: {\n interactiveElements: HTMLElement[]\n onBlur: () => void\n mode: StrictOptions['mode']\n}) {\n interactiveElements.forEach((element) => {\n if (hasModeIncludes(['eager', 'blur', 'progressive'], mode)) {\n element.addEventListener('blur', onBlur)\n }\n })\n}\n\nexport function removeEventFromInteractiveElements({\n interactiveElements,\n onBlur,\n}: {\n interactiveElements: HTMLElement[]\n onBlur: () => void\n}) {\n interactiveElements.forEach((element) => {\n element.removeEventListener('blur', onBlur)\n })\n}\n\nexport async function getFieldValidationResult<\n Model extends BaseFormPayload,\n ModelKey extends ExtractModelKey<FormSchema<Model>> = ExtractModelKey<FormSchema<Model>>,\n>(name: ModelKey, schema: FormSchema<Model>, value: Model[ModelKey]) {\n const fieldSchema = await getValidationSchema(schema)\n const safeParseAsync = await getValibotValidationMethod('safeParseAsync')\n const result = await safeParseAsync(fieldSchema.entries[name], value ?? '')\n\n return {\n result,\n isValid: result.success,\n }\n}\n\nexport async function setFieldValidationState<\n Model extends BaseFormPayload,\n ModelKey extends ExtractModelKey<FormSchema<Model>> = ExtractModelKey<FormSchema<Model>>,\n>({\n name,\n fieldState,\n schema,\n payload,\n setError = true,\n setErrorIfInvalidAndNotEmpty = false,\n}: {\n name: ModelKey\n fieldState: FieldState<Model>\n schema: FormSchema<Model>\n payload: Model\n setError?: boolean\n setErrorIfInvalidAndNotEmpty?: boolean\n}) {\n await nextTick()\n\n fieldState.validating = true\n\n if (!schema[name]) {\n // Validate if the field is not in the schema\n fieldState.valid = true\n fieldState.validating = false\n fieldState.validated = true\n fieldState.errors = []\n fieldState.error = false\n return\n }\n\n const { result, isValid } = await getFieldValidationResult(name, schema, payload[name])\n\n fieldState.valid = isValid\n\n if (setError || (setErrorIfInvalidAndNotEmpty && !isValid && !isEmptyValue(payload[name]))) {\n fieldState.error = !isValid\n }\n\n fieldState.errors = result.issues ?? []\n\n fieldState.validating = false\n fieldState.validated = true\n}\n\nexport function validateField<\n Model extends BaseFormPayload,\n ModelKey extends ExtractModelKey<FormSchema<Model>> = ExtractModelKey<FormSchema<Model>>,\n>({\n name,\n fieldState,\n payload,\n schema,\n}: {\n name: ModelKey\n fieldState: FieldState<Model>\n payload: Model\n schema: FormSchema<Model>\n}) {\n const validationParams: Parameters<typeof setFieldValidationState<Model>>[number] = {\n name,\n fieldState,\n payload,\n schema,\n setError: fieldState.mode === 'progressive' ? fieldState.valid || fieldState.blurred : true,\n }\n\n return fieldState.validateFunction?.(validationParams)\n}\n\nexport function validateForm<\n Model extends BaseFormPayload,\n ModelKey extends ExtractModelKey<FormSchema<Model>> = ExtractModelKey<FormSchema<Model>>,\n>({\n fieldsStates,\n payload,\n showErrors = true,\n schema,\n}: {\n fieldsStates: FieldsStates<Model>\n showErrors?: boolean\n payload: Model\n schema: FormSchema<Model>\n}) {\n return Promise.all(\n Object.keys(fieldsStates).map(name =>\n setFieldValidationState<Model>({\n name: name as ModelKey,\n setError: showErrors,\n fieldState: fieldsStates[name],\n payload,\n schema,\n setErrorIfInvalidAndNotEmpty: fieldsStates[name].mode === 'lazy',\n }),\n ),\n )\n}\n\nexport function canExecuteValidation<Model extends BaseFormPayload>({\n eventName,\n fieldState,\n isSubmitted,\n}: {\n eventName: 'blur' | 'input'\n fieldState: FieldState<Model>\n isSubmitted: boolean\n}): boolean {\n const { dirty, blurred, mode, valid } = fieldState\n\n const shouldNotValidate\n = (eventName === 'blur' && (hasModeIncludes(['lazy', 'aggressive'], mode) || valid))\n || (eventName === 'input' && mode === 'blur')\n || !mode\n\n if (shouldNotValidate) {\n return false\n }\n\n return (\n isSubmitted\n || (mode === 'eager' && blurred)\n || (mode === 'blur' && blurred)\n || (mode === 'aggressive' && dirty)\n || (mode === 'lazy' && dirty)\n || mode === 'progressive'\n )\n}\n\nexport function handleFieldBlur<\n Model extends BaseFormPayload,\n ModelKey extends ExtractModelKey<FormSchema<Model>> = ExtractModelKey<FormSchema<Model>>,\n>({\n name,\n force = false,\n payload,\n fieldState,\n schema,\n isSubmitted,\n}: {\n name: ModelKey\n payload: Model\n fieldState: FieldState<Model>\n schema: FormSchema<Model>\n isSubmitted: boolean\n force?: boolean\n}) {\n const fieldValue = payload[name]\n\n const isDirty = !isEmptyValue(fieldValue) && !isEqual(fieldValue, fieldState.initialValue)\n\n fieldState.dirty = isDirty\n fieldState.blurred = fieldState.blurred || (fieldState.mode === 'eager' ? isDirty : true)\n\n const shouldValidate = force || canExecuteValidation<Model>({ eventName: 'blur', fieldState, isSubmitted })\n\n if (!shouldValidate) {\n return\n }\n\n return validateField<Model>({\n name,\n fieldState,\n schema,\n payload,\n })\n}\n\nexport function handleFieldInput<\n Model extends BaseFormPayload,\n ModelKey extends ExtractModelKey<FormSchema<Model>> = ExtractModelKey<FormSchema<Model>>,\n>({\n name,\n payload,\n fieldState,\n schema,\n isSubmitted,\n forceValidation = false,\n}: {\n name: ModelKey\n payload: Model\n fieldState: FieldState<Model>\n schema: FormSchema<Model>\n isSubmitted: boolean\n forceValidation?: boolean\n}) {\n const fieldValue = payload[name]\n\n fieldState.validated = false\n\n const isDirty = !isEmptyValue(fieldValue) && !isEqual(fieldValue, fieldState.initialValue)\n\n fieldState.dirty = isDirty\n\n const shouldValidate = forceValidation || canExecuteValidation<Model>({ eventName: 'input', fieldState, isSubmitted })\n\n if (!shouldValidate) {\n return\n }\n\n return validateField<Model>({\n name,\n fieldState,\n schema,\n payload,\n })\n}\n\nexport function getInstance<Model extends BaseFormPayload>(composableName: string) {\n const instance = getCurrentInstance() as CustomInstance<Model>\n if (!instance) {\n throw new Error(`${composableName} must be called within setup()`)\n }\n\n return instance\n}\n\nexport function getContext<Model extends BaseFormPayload>(\n identifier: string | symbol | InjectionKey<FormContext<Model>>,\n composableName: string,\n) {\n const instance = getInstance<Model>(composableName)\n const context = instance.formContexts?.get(identifier) ?? inject<FormContext<Model>>(identifier)\n\n if (!context) {\n throw new Error('useFormField must be used within a form (useFormValidator)')\n }\n\n return context\n}\n\nexport function getValidationEvents<Model extends BaseFormPayload>({\n ref,\n fieldState,\n onBlur,\n}: {\n ref?: string\n fieldState: FieldState<Model>\n onBlur: () => void\n}) {\n if (ref || hasModeIncludes(['aggressive', 'lazy'], fieldState.mode)) {\n return\n }\n\n return {\n onBlur,\n }\n}\n\ntype Valibot = typeof import('valibot')\nconst storeValidbot: Record<keyof Valibot | string, any> = {}\n\nexport async function getValibotValidationMethod<MethodName extends keyof Valibot>(methodName: MethodName): Promise<Valibot[MethodName]> {\n if (storeValidbot[methodName]) {\n return storeValidbot[methodName]\n }\n\n const valibot = await import('valibot')\n\n storeValidbot[methodName] = valibot[methodName]\n\n return valibot[methodName]\n}\n\nexport async function getValidationSchema<Model extends BaseFormPayload>(formSchema: FormSchema<Model>) {\n const objectAsync = await getValibotValidationMethod('objectAsync')\n return objectAsync(formSchema)\n}\n\nexport function hasModeIncludes(modes: StrictOptions['mode'][], value?: StrictOptions['mode']): value is StrictOptions['mode'] {\n if (!value) {\n return false\n }\n\n return modes.includes(value)\n}\n"],"names":["CONFIG","fieldHasValidation","field","schema","scrollToError","selector","element","getErrorMessages","errors","fieldsStates","errorMessages","name","value","issues","isEmptyValue","getValidateFunction","hasValidation","debouncedFields","throttledFields","fieldName","debounceId","setFieldValidationState","throttleId","getFieldState","initialValue","fieldState","options","validateFunction","freezeValue","getFieldsStates","payload","updateFieldsStates","updateMode","updateFieldState","mode","rest","newMode","getFieldsErrors","fieldsErrors","findInteractiveElements","el","addEventToInteractiveElements","interactiveElements","onBlur","hasModeIncludes","removeEventFromInteractiveElements","getFieldValidationResult","fieldSchema","getValidationSchema","result","getValibotValidationMethod","setError","setErrorIfInvalidAndNotEmpty","nextTick","isValid","validateField","validationParams","_a","validateForm","showErrors","canExecuteValidation","eventName","isSubmitted","dirty","blurred","valid","handleFieldBlur","force","fieldValue","isDirty","isEqual","handleFieldInput","forceValidation","getInstance","composableName","instance","getCurrentInstance","getContext","identifier","context","inject","getValidationEvents","ref","storeValidbot","methodName","valibot","formSchema","modes"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('../assets/MazAccordion.DaqF3ZAX.css');const e=require("vue"),v=require("./MazCardSpotlight.cjs"),_=require("./MazExpandAnimation.cjs"),f=require("../composables/useInstanceUniqId.cjs"),$=require("../chunks/plus.CbUgaWqj.cjs"),b=require("../chunks/_plugin-vue_export-helper.BHFhmbuH.cjs"),h={class:"m-accordion m-reset-css",role:"presentation"},C=["id","aria-controls","aria-expanded","onClick"],k=e.defineComponent({__name:"MazAccordion",props:{id:{default:void 0},modelValue:{default:0},contentClass:{default:void 0}},emits:["update:model-value"],setup(d,{emit:i}){const l=d,r=i,s=f.useInstanceUniqId({componentName:"MazAccordion",providedId:l.id}),u=e.useSlots(),m=e.computed(()=>Object.keys(u).filter(t=>t.startsWith("title-")).length),a=e.ref(l.modelValue),c=e.computed({get:()=>l.modelValue||a.value,set:t=>{a.value=t,r("update:model-value",t)}});function n(t){return c.value===t}function p(t){c.value===t?(a.value=0,r("update:model-value",0)):(a.value=t,r("update:model-value",t))}return(t,g)=>(e.openBlock(),e.createElementBlock("div",h,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.value,o=>(e.openBlock(),e.createBlock(v.default,{key:o,class:"m-accordion__spotlight",padding:!1},{default:e.withCtx(()=>[e.createElementVNode("button",{id:`step-${o}-${e.unref(s)}`,class:"m-accordion__header","aria-controls":`step-${o}-${e.unref(s)}`,"aria-expanded":n(o),onClick:V=>p(o)},[e.renderSlot(t.$slots,`title-${o}`,{isOpen:n(o)},void 0,!0),e.createVNode(e.unref($.default),{class:e.normalizeClass(["header-icon",{"--rotate":n(o)}])},null,8,["class"])],8,C),e.createVNode(_.default,{"animation-duration":"300ms","model-value":n(o),"aria-labelledby":`step-${o}-${e.unref(s)}`},{default:e.withCtx(()=>[e.createElementVNode("div",{class:e.normalizeClass(["m-accordion__content",t.contentClass])},[e.renderSlot(t.$slots,"content",{isOpen:n(o)},void 0,!0),e.renderSlot(t.$slots,`content-${o}`,{isOpen:n(o)},void 0,!0)],2)]),_:2},1032,["model-value","aria-labelledby"])]),_:2},1024))),128))]))}}),S=b._export_sfc(k,[["__scopeId","data-v-3b47b4cd"]]);exports.default=S;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('../assets/MazAccordion.BE-38uDK.css');const e=require("vue"),f=require("../chunks/plus.CbUgaWqj.cjs"),v=require("../composables/useInstanceUniqId.cjs"),_=require("./MazCardSpotlight.cjs"),$=require("./MazExpandAnimation.cjs"),h=require("../chunks/_plugin-vue_export-helper.BHFhmbuH.cjs"),C={class:"m-accordion m-reset-css",role:"presentation"},k=["id","aria-controls","aria-expanded","onClick"],S=e.defineComponent({__name:"MazAccordion",props:{id:{default:void 0},modelValue:{default:0},contentClass:{default:void 0}},emits:["update:model-value"],setup(d,{emit:i}){const l=d,r=i,s=v.useInstanceUniqId({componentName:"MazAccordion",providedId:l.id}),u=e.useSlots(),m=e.computed(()=>Object.keys(u).filter(t=>t.startsWith("title-")).length),a=e.ref(l.modelValue),c=e.computed({get:()=>l.modelValue||a.value,set:t=>{a.value=t,r("update:model-value",t)}});function n(t){return c.value===t}function p(t){c.value===t?(a.value=0,r("update:model-value",0)):(a.value=t,r("update:model-value",t))}return(t,g)=>(e.openBlock(),e.createElementBlock("div",C,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.value,o=>(e.openBlock(),e.createBlock(_.default,{key:o,class:"m-accordion__spotlight",padding:!1},{default:e.withCtx(()=>[e.createElementVNode("button",{id:`step-${o}-${e.unref(s)}`,class:"m-accordion__header","aria-controls":`step-${o}-${e.unref(s)}`,"aria-expanded":n(o),onClick:V=>p(o)},[e.renderSlot(t.$slots,`title-${o}`,{isOpen:n(o)},void 0,!0),e.createVNode(e.unref(f.default),{class:e.normalizeClass(["header-icon",{"--rotate":n(o)}])},null,8,["class"])],8,k),e.createVNode($.default,{"animation-duration":"300ms","model-value":n(o),"aria-labelledby":`step-${o}-${e.unref(s)}`},{default:e.withCtx(()=>[e.createElementVNode("div",{class:e.normalizeClass(["m-accordion__content",t.contentClass])},[e.renderSlot(t.$slots,"content",{isOpen:n(o)},void 0,!0),e.renderSlot(t.$slots,`content-${o}`,{isOpen:n(o)},void 0,!0)],2)]),_:2},1032,["model-value","aria-labelledby"])]),_:2},1024))),128))]))}}),b=h._export_sfc(S,[["__scopeId","data-v-4873f9ef"]]);exports.default=b;
2
2
  //# sourceMappingURL=MazAccordion.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"MazAccordion.cjs","sources":["../../src/components/MazAccordion.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport MazCardSpotlight from '@components/MazCardSpotlight.vue'\nimport MazExpandAnimation from '@components/MazExpandAnimation.vue'\nimport { useInstanceUniqId } from '@composables/useInstanceUniqId'\n\nimport PlusIcon from '@icons/plus.svg'\n\nimport { computed, ref, useSlots } from 'vue'\n\nexport interface MazAccordionProps {\n id?: string\n modelValue?: number\n contentClass?: unknown\n}\n\nconst props = withDefaults(defineProps<MazAccordionProps>(), {\n id: undefined,\n modelValue: 0,\n contentClass: undefined,\n})\n\nconst emits = defineEmits(['update:model-value'])\nconst instanceId = useInstanceUniqId({\n componentName: 'MazAccordion',\n providedId: props.id,\n})\n\nconst slots = useSlots()\n\nconst stepCount = computed<number>(\n () => Object.keys(slots).filter(slot => slot.startsWith('title-')).length,\n)\n\nconst localModelValue = ref(props.modelValue)\n\nconst currentStep = computed({\n get: () => props.modelValue || localModelValue.value,\n set: (value: number) => {\n localModelValue.value = value\n emits('update:model-value', value)\n },\n})\n\nfunction isStepOpen(index: number) {\n return currentStep.value === index\n}\n\nfunction selectStep(index: number) {\n if (currentStep.value === index) {\n localModelValue.value = 0\n emits('update:model-value', 0)\n }\n else {\n localModelValue.value = index\n emits('update:model-value', index)\n }\n}\n</script>\n\n<template>\n <div class=\"m-accordion m-reset-css\" role=\"presentation\">\n <template v-for=\"step in stepCount\" :key=\"step\">\n <MazCardSpotlight class=\"m-accordion__spotlight\" :padding=\"false\">\n <button\n :id=\"`step-${step}-${instanceId}`\"\n class=\"m-accordion__header\"\n :aria-controls=\"`step-${step}-${instanceId}`\"\n :aria-expanded=\"isStepOpen(step)\"\n @click=\"selectStep(step)\"\n >\n <slot :name=\"`title-${step}`\" :is-open=\"isStepOpen(step)\" />\n\n <PlusIcon class=\"header-icon\" :class=\"{ '--rotate': isStepOpen(step) }\" />\n </button>\n\n <MazExpandAnimation\n animation-duration=\"300ms\"\n :model-value=\"isStepOpen(step)\"\n :aria-labelledby=\"`step-${step}-${instanceId}`\"\n >\n <div class=\"m-accordion__content\" :class=\"contentClass\">\n <slot name=\"content\" :is-open=\"isStepOpen(step)\" />\n <slot :name=\"`content-${step}`\" :is-open=\"isStepOpen(step)\" />\n </div>\n </MazExpandAnimation>\n </MazCardSpotlight>\n </template>\n </div>\n</template>\n\n<style lang=\"postcss\" scoped>\n .m-accordion {\n @apply maz-relative maz-inline-flex maz-flex-col maz-gap-4 maz-align-top;\n\n &__spotlight {\n @apply maz-w-full;\n }\n\n &__header {\n @apply maz-inline-flex maz-w-full maz-items-center maz-justify-between maz-gap-4 maz-p-4 maz-text-start maz-transition-colors maz-duration-300 maz-ease-in-out;\n\n .header-icon {\n @apply maz-transition-transform maz-duration-300 maz-ease-in-out;\n\n &.--rotate {\n /* @apply maz-rotate-45; */\n\n transform: rotate(135deg);\n }\n }\n }\n\n &__content {\n @apply maz-p-4;\n }\n}\n</style>\n"],"names":["props","__props","emits","__emit","instanceId","useInstanceUniqId","slots","useSlots","stepCount","computed","slot","localModelValue","ref","currentStep","value","isStepOpen","index","selectStep"],"mappings":"4nBAeA,MAAMA,EAAQC,EAMRC,EAAQC,EACRC,EAAaC,EAAAA,kBAAkB,CACnC,cAAe,eACf,WAAYL,EAAM,EAAA,CACnB,EAEKM,EAAQC,EAAAA,SAAS,EAEjBC,EAAYC,EAAA,SAChB,IAAM,OAAO,KAAKH,CAAK,EAAE,OAAOI,GAAQA,EAAK,WAAW,QAAQ,CAAC,EAAE,MACrE,EAEMC,EAAkBC,EAAAA,IAAIZ,EAAM,UAAU,EAEtCa,EAAcJ,EAAAA,SAAS,CAC3B,IAAK,IAAMT,EAAM,YAAcW,EAAgB,MAC/C,IAAMG,GAAkB,CACtBH,EAAgB,MAAQG,EACxBZ,EAAM,qBAAsBY,CAAK,CAAA,CACnC,CACD,EAED,SAASC,EAAWC,EAAe,CACjC,OAAOH,EAAY,QAAUG,CAAA,CAG/B,SAASC,EAAWD,EAAe,CAC7BH,EAAY,QAAUG,GACxBL,EAAgB,MAAQ,EACxBT,EAAM,qBAAsB,CAAC,IAG7BS,EAAgB,MAAQK,EACxBd,EAAM,qBAAsBc,CAAK,EACnC"}
1
+ {"version":3,"file":"MazAccordion.cjs","sources":["../../src/components/MazAccordion.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, ref, useSlots } from 'vue'\nimport PlusIcon from '../../icons/plus.svg'\nimport { useInstanceUniqId } from '../composables/useInstanceUniqId'\n\nimport MazCardSpotlight from './MazCardSpotlight.vue'\n\nimport MazExpandAnimation from './MazExpandAnimation.vue'\n\nexport interface MazAccordionProps {\n id?: string\n modelValue?: number\n contentClass?: unknown\n}\n\nconst props = withDefaults(defineProps<MazAccordionProps>(), {\n id: undefined,\n modelValue: 0,\n contentClass: undefined,\n})\n\nconst emits = defineEmits(['update:model-value'])\nconst instanceId = useInstanceUniqId({\n componentName: 'MazAccordion',\n providedId: props.id,\n})\n\nconst slots = useSlots()\n\nconst stepCount = computed<number>(\n () => Object.keys(slots).filter(slot => slot.startsWith('title-')).length,\n)\n\nconst localModelValue = ref(props.modelValue)\n\nconst currentStep = computed({\n get: () => props.modelValue || localModelValue.value,\n set: (value: number) => {\n localModelValue.value = value\n emits('update:model-value', value)\n },\n})\n\nfunction isStepOpen(index: number) {\n return currentStep.value === index\n}\n\nfunction selectStep(index: number) {\n if (currentStep.value === index) {\n localModelValue.value = 0\n emits('update:model-value', 0)\n }\n else {\n localModelValue.value = index\n emits('update:model-value', index)\n }\n}\n</script>\n\n<template>\n <div class=\"m-accordion m-reset-css\" role=\"presentation\">\n <template v-for=\"step in stepCount\" :key=\"step\">\n <MazCardSpotlight class=\"m-accordion__spotlight\" :padding=\"false\">\n <button\n :id=\"`step-${step}-${instanceId}`\"\n class=\"m-accordion__header\"\n :aria-controls=\"`step-${step}-${instanceId}`\"\n :aria-expanded=\"isStepOpen(step)\"\n @click=\"selectStep(step)\"\n >\n <slot :name=\"`title-${step}`\" :is-open=\"isStepOpen(step)\" />\n\n <PlusIcon class=\"header-icon\" :class=\"{ '--rotate': isStepOpen(step) }\" />\n </button>\n\n <MazExpandAnimation\n animation-duration=\"300ms\"\n :model-value=\"isStepOpen(step)\"\n :aria-labelledby=\"`step-${step}-${instanceId}`\"\n >\n <div class=\"m-accordion__content\" :class=\"contentClass\">\n <slot name=\"content\" :is-open=\"isStepOpen(step)\" />\n <slot :name=\"`content-${step}`\" :is-open=\"isStepOpen(step)\" />\n </div>\n </MazExpandAnimation>\n </MazCardSpotlight>\n </template>\n </div>\n</template>\n\n<style lang=\"postcss\" scoped>\n .m-accordion {\n @apply maz-relative maz-inline-flex maz-flex-col maz-gap-4 maz-align-top;\n\n &__spotlight {\n @apply maz-w-full;\n }\n\n &__header {\n @apply maz-inline-flex maz-w-full maz-items-center maz-justify-between maz-gap-4 maz-p-4 maz-text-start maz-transition-colors maz-duration-300 maz-ease-in-out;\n\n .header-icon {\n @apply maz-transition-transform maz-duration-300 maz-ease-in-out;\n\n &.--rotate {\n /* @apply maz-rotate-45; */\n\n transform: rotate(135deg);\n }\n }\n }\n\n &__content {\n @apply maz-p-4;\n }\n}\n</style>\n"],"names":["props","__props","emits","__emit","instanceId","useInstanceUniqId","slots","useSlots","stepCount","computed","slot","localModelValue","ref","currentStep","value","isStepOpen","index","selectStep"],"mappings":"4nBAeA,MAAMA,EAAQC,EAMRC,EAAQC,EACRC,EAAaC,EAAAA,kBAAkB,CACnC,cAAe,eACf,WAAYL,EAAM,EAAA,CACnB,EAEKM,EAAQC,EAAAA,SAAS,EAEjBC,EAAYC,EAAA,SAChB,IAAM,OAAO,KAAKH,CAAK,EAAE,OAAOI,GAAQA,EAAK,WAAW,QAAQ,CAAC,EAAE,MACrE,EAEMC,EAAkBC,EAAAA,IAAIZ,EAAM,UAAU,EAEtCa,EAAcJ,EAAAA,SAAS,CAC3B,IAAK,IAAMT,EAAM,YAAcW,EAAgB,MAC/C,IAAMG,GAAkB,CACtBH,EAAgB,MAAQG,EACxBZ,EAAM,qBAAsBY,CAAK,CAAA,CACnC,CACD,EAED,SAASC,EAAWC,EAAe,CACjC,OAAOH,EAAY,QAAUG,CAAA,CAG/B,SAASC,EAAWD,EAAe,CAC7BH,EAAY,QAAUG,GACxBL,EAAgB,MAAQ,EACxBT,EAAM,qBAAsB,CAAC,IAG7BS,EAAgB,MAAQK,EACxBd,EAAM,qBAAsBc,CAAK,EACnC"}
@@ -1,10 +1,10 @@
1
1
  import { defineComponent as g, useSlots as z, computed as u, ref as I, openBlock as d, createElementBlock as m, Fragment as M, renderList as S, createBlock as V, withCtx as p, createElementVNode as f, unref as n, renderSlot as i, createVNode as v, normalizeClass as _ } from "vue";
2
- import O from "./MazCardSpotlight.mjs";
3
- import y from "./MazExpandAnimation.mjs";
4
- import { useInstanceUniqId as A } from "../composables/useInstanceUniqId.mjs";
5
- import B from "../chunks/plus.CNCGxFPJ.mjs";
2
+ import O from "../chunks/plus.CNCGxFPJ.mjs";
3
+ import { useInstanceUniqId as y } from "../composables/useInstanceUniqId.mjs";
4
+ import A from "./MazCardSpotlight.mjs";
5
+ import B from "./MazExpandAnimation.mjs";
6
6
  import { _ as E } from "../chunks/_plugin-vue_export-helper.CHgC5LLL.mjs";
7
- import '../assets/MazAccordion.DaqF3ZAX.css';const N = {
7
+ import '../assets/MazAccordion.BE-38uDK.css';const N = {
8
8
  class: "m-accordion m-reset-css",
9
9
  role: "presentation"
10
10
  }, j = ["id", "aria-controls", "aria-expanded", "onClick"], q = /* @__PURE__ */ g({
@@ -16,10 +16,10 @@ import '../assets/MazAccordion.DaqF3ZAX.css';const N = {
16
16
  },
17
17
  emits: ["update:model-value"],
18
18
  setup($, { emit: h }) {
19
- const l = $, r = h, s = A({
19
+ const l = $, r = h, s = y({
20
20
  componentName: "MazAccordion",
21
21
  providedId: l.id
22
- }), C = z(), b = u(
22
+ }), C = z(), k = u(
23
23
  () => Object.keys(C).filter((e) => e.startsWith("title-")).length
24
24
  ), a = I(l.modelValue), c = u({
25
25
  get: () => l.modelValue || a.value,
@@ -30,11 +30,11 @@ import '../assets/MazAccordion.DaqF3ZAX.css';const N = {
30
30
  function t(e) {
31
31
  return c.value === e;
32
32
  }
33
- function k(e) {
33
+ function b(e) {
34
34
  c.value === e ? (a.value = 0, r("update:model-value", 0)) : (a.value = e, r("update:model-value", e));
35
35
  }
36
36
  return (e, w) => (d(), m("div", N, [
37
- (d(!0), m(M, null, S(b.value, (o) => (d(), V(O, {
37
+ (d(!0), m(M, null, S(k.value, (o) => (d(), V(A, {
38
38
  key: o,
39
39
  class: "m-accordion__spotlight",
40
40
  padding: !1
@@ -45,16 +45,16 @@ import '../assets/MazAccordion.DaqF3ZAX.css';const N = {
45
45
  class: "m-accordion__header",
46
46
  "aria-controls": `step-${o}-${n(s)}`,
47
47
  "aria-expanded": t(o),
48
- onClick: (x) => k(o)
48
+ onClick: (x) => b(o)
49
49
  }, [
50
50
  i(e.$slots, `title-${o}`, {
51
51
  isOpen: t(o)
52
52
  }, void 0, !0),
53
- v(n(B), {
53
+ v(n(O), {
54
54
  class: _(["header-icon", { "--rotate": t(o) }])
55
55
  }, null, 8, ["class"])
56
56
  ], 8, j),
57
- v(y, {
57
+ v(B, {
58
58
  "animation-duration": "300ms",
59
59
  "model-value": t(o),
60
60
  "aria-labelledby": `step-${o}-${n(s)}`
@@ -78,7 +78,7 @@ import '../assets/MazAccordion.DaqF3ZAX.css';const N = {
78
78
  }, 1024))), 128))
79
79
  ]));
80
80
  }
81
- }), G = /* @__PURE__ */ E(q, [["__scopeId", "data-v-3b47b4cd"]]);
81
+ }), G = /* @__PURE__ */ E(q, [["__scopeId", "data-v-4873f9ef"]]);
82
82
  export {
83
83
  G as default
84
84
  };
@@ -1 +1 @@
1
- {"version":3,"file":"MazAccordion.mjs","sources":["../../src/components/MazAccordion.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport MazCardSpotlight from '@components/MazCardSpotlight.vue'\nimport MazExpandAnimation from '@components/MazExpandAnimation.vue'\nimport { useInstanceUniqId } from '@composables/useInstanceUniqId'\n\nimport PlusIcon from '@icons/plus.svg'\n\nimport { computed, ref, useSlots } from 'vue'\n\nexport interface MazAccordionProps {\n id?: string\n modelValue?: number\n contentClass?: unknown\n}\n\nconst props = withDefaults(defineProps<MazAccordionProps>(), {\n id: undefined,\n modelValue: 0,\n contentClass: undefined,\n})\n\nconst emits = defineEmits(['update:model-value'])\nconst instanceId = useInstanceUniqId({\n componentName: 'MazAccordion',\n providedId: props.id,\n})\n\nconst slots = useSlots()\n\nconst stepCount = computed<number>(\n () => Object.keys(slots).filter(slot => slot.startsWith('title-')).length,\n)\n\nconst localModelValue = ref(props.modelValue)\n\nconst currentStep = computed({\n get: () => props.modelValue || localModelValue.value,\n set: (value: number) => {\n localModelValue.value = value\n emits('update:model-value', value)\n },\n})\n\nfunction isStepOpen(index: number) {\n return currentStep.value === index\n}\n\nfunction selectStep(index: number) {\n if (currentStep.value === index) {\n localModelValue.value = 0\n emits('update:model-value', 0)\n }\n else {\n localModelValue.value = index\n emits('update:model-value', index)\n }\n}\n</script>\n\n<template>\n <div class=\"m-accordion m-reset-css\" role=\"presentation\">\n <template v-for=\"step in stepCount\" :key=\"step\">\n <MazCardSpotlight class=\"m-accordion__spotlight\" :padding=\"false\">\n <button\n :id=\"`step-${step}-${instanceId}`\"\n class=\"m-accordion__header\"\n :aria-controls=\"`step-${step}-${instanceId}`\"\n :aria-expanded=\"isStepOpen(step)\"\n @click=\"selectStep(step)\"\n >\n <slot :name=\"`title-${step}`\" :is-open=\"isStepOpen(step)\" />\n\n <PlusIcon class=\"header-icon\" :class=\"{ '--rotate': isStepOpen(step) }\" />\n </button>\n\n <MazExpandAnimation\n animation-duration=\"300ms\"\n :model-value=\"isStepOpen(step)\"\n :aria-labelledby=\"`step-${step}-${instanceId}`\"\n >\n <div class=\"m-accordion__content\" :class=\"contentClass\">\n <slot name=\"content\" :is-open=\"isStepOpen(step)\" />\n <slot :name=\"`content-${step}`\" :is-open=\"isStepOpen(step)\" />\n </div>\n </MazExpandAnimation>\n </MazCardSpotlight>\n </template>\n </div>\n</template>\n\n<style lang=\"postcss\" scoped>\n .m-accordion {\n @apply maz-relative maz-inline-flex maz-flex-col maz-gap-4 maz-align-top;\n\n &__spotlight {\n @apply maz-w-full;\n }\n\n &__header {\n @apply maz-inline-flex maz-w-full maz-items-center maz-justify-between maz-gap-4 maz-p-4 maz-text-start maz-transition-colors maz-duration-300 maz-ease-in-out;\n\n .header-icon {\n @apply maz-transition-transform maz-duration-300 maz-ease-in-out;\n\n &.--rotate {\n /* @apply maz-rotate-45; */\n\n transform: rotate(135deg);\n }\n }\n }\n\n &__content {\n @apply maz-p-4;\n }\n}\n</style>\n"],"names":["props","__props","emits","__emit","instanceId","useInstanceUniqId","slots","useSlots","stepCount","computed","slot","localModelValue","ref","currentStep","value","isStepOpen","index","selectStep"],"mappings":";;;;;;;;;;;;;;;;;;AAeA,UAAMA,IAAQC,GAMRC,IAAQC,GACRC,IAAaC,EAAkB;AAAA,MACnC,eAAe;AAAA,MACf,YAAYL,EAAM;AAAA,IAAA,CACnB,GAEKM,IAAQC,EAAS,GAEjBC,IAAYC;AAAA,MAChB,MAAM,OAAO,KAAKH,CAAK,EAAE,OAAO,CAAAI,MAAQA,EAAK,WAAW,QAAQ,CAAC,EAAE;AAAA,IACrE,GAEMC,IAAkBC,EAAIZ,EAAM,UAAU,GAEtCa,IAAcJ,EAAS;AAAA,MAC3B,KAAK,MAAMT,EAAM,cAAcW,EAAgB;AAAA,MAC/C,KAAK,CAACG,MAAkB;AACtB,QAAAH,EAAgB,QAAQG,GACxBZ,EAAM,sBAAsBY,CAAK;AAAA,MAAA;AAAA,IACnC,CACD;AAED,aAASC,EAAWC,GAAe;AACjC,aAAOH,EAAY,UAAUG;AAAA,IAAA;AAG/B,aAASC,EAAWD,GAAe;AAC7B,MAAAH,EAAY,UAAUG,KACxBL,EAAgB,QAAQ,GACxBT,EAAM,sBAAsB,CAAC,MAG7BS,EAAgB,QAAQK,GACxBd,EAAM,sBAAsBc,CAAK;AAAA,IACnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"MazAccordion.mjs","sources":["../../src/components/MazAccordion.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, ref, useSlots } from 'vue'\nimport PlusIcon from '../../icons/plus.svg'\nimport { useInstanceUniqId } from '../composables/useInstanceUniqId'\n\nimport MazCardSpotlight from './MazCardSpotlight.vue'\n\nimport MazExpandAnimation from './MazExpandAnimation.vue'\n\nexport interface MazAccordionProps {\n id?: string\n modelValue?: number\n contentClass?: unknown\n}\n\nconst props = withDefaults(defineProps<MazAccordionProps>(), {\n id: undefined,\n modelValue: 0,\n contentClass: undefined,\n})\n\nconst emits = defineEmits(['update:model-value'])\nconst instanceId = useInstanceUniqId({\n componentName: 'MazAccordion',\n providedId: props.id,\n})\n\nconst slots = useSlots()\n\nconst stepCount = computed<number>(\n () => Object.keys(slots).filter(slot => slot.startsWith('title-')).length,\n)\n\nconst localModelValue = ref(props.modelValue)\n\nconst currentStep = computed({\n get: () => props.modelValue || localModelValue.value,\n set: (value: number) => {\n localModelValue.value = value\n emits('update:model-value', value)\n },\n})\n\nfunction isStepOpen(index: number) {\n return currentStep.value === index\n}\n\nfunction selectStep(index: number) {\n if (currentStep.value === index) {\n localModelValue.value = 0\n emits('update:model-value', 0)\n }\n else {\n localModelValue.value = index\n emits('update:model-value', index)\n }\n}\n</script>\n\n<template>\n <div class=\"m-accordion m-reset-css\" role=\"presentation\">\n <template v-for=\"step in stepCount\" :key=\"step\">\n <MazCardSpotlight class=\"m-accordion__spotlight\" :padding=\"false\">\n <button\n :id=\"`step-${step}-${instanceId}`\"\n class=\"m-accordion__header\"\n :aria-controls=\"`step-${step}-${instanceId}`\"\n :aria-expanded=\"isStepOpen(step)\"\n @click=\"selectStep(step)\"\n >\n <slot :name=\"`title-${step}`\" :is-open=\"isStepOpen(step)\" />\n\n <PlusIcon class=\"header-icon\" :class=\"{ '--rotate': isStepOpen(step) }\" />\n </button>\n\n <MazExpandAnimation\n animation-duration=\"300ms\"\n :model-value=\"isStepOpen(step)\"\n :aria-labelledby=\"`step-${step}-${instanceId}`\"\n >\n <div class=\"m-accordion__content\" :class=\"contentClass\">\n <slot name=\"content\" :is-open=\"isStepOpen(step)\" />\n <slot :name=\"`content-${step}`\" :is-open=\"isStepOpen(step)\" />\n </div>\n </MazExpandAnimation>\n </MazCardSpotlight>\n </template>\n </div>\n</template>\n\n<style lang=\"postcss\" scoped>\n .m-accordion {\n @apply maz-relative maz-inline-flex maz-flex-col maz-gap-4 maz-align-top;\n\n &__spotlight {\n @apply maz-w-full;\n }\n\n &__header {\n @apply maz-inline-flex maz-w-full maz-items-center maz-justify-between maz-gap-4 maz-p-4 maz-text-start maz-transition-colors maz-duration-300 maz-ease-in-out;\n\n .header-icon {\n @apply maz-transition-transform maz-duration-300 maz-ease-in-out;\n\n &.--rotate {\n /* @apply maz-rotate-45; */\n\n transform: rotate(135deg);\n }\n }\n }\n\n &__content {\n @apply maz-p-4;\n }\n}\n</style>\n"],"names":["props","__props","emits","__emit","instanceId","useInstanceUniqId","slots","useSlots","stepCount","computed","slot","localModelValue","ref","currentStep","value","isStepOpen","index","selectStep"],"mappings":";;;;;;;;;;;;;;;;;;AAeA,UAAMA,IAAQC,GAMRC,IAAQC,GACRC,IAAaC,EAAkB;AAAA,MACnC,eAAe;AAAA,MACf,YAAYL,EAAM;AAAA,IAAA,CACnB,GAEKM,IAAQC,EAAS,GAEjBC,IAAYC;AAAA,MAChB,MAAM,OAAO,KAAKH,CAAK,EAAE,OAAO,CAAAI,MAAQA,EAAK,WAAW,QAAQ,CAAC,EAAE;AAAA,IACrE,GAEMC,IAAkBC,EAAIZ,EAAM,UAAU,GAEtCa,IAAcJ,EAAS;AAAA,MAC3B,KAAK,MAAMT,EAAM,cAAcW,EAAgB;AAAA,MAC/C,KAAK,CAACG,MAAkB;AACtB,QAAAH,EAAgB,QAAQG,GACxBZ,EAAM,sBAAsBY,CAAK;AAAA,MAAA;AAAA,IACnC,CACD;AAED,aAASC,EAAWC,GAAe;AACjC,aAAOH,EAAY,UAAUG;AAAA,IAAA;AAG/B,aAASC,EAAWD,GAAe;AAC7B,MAAAH,EAAY,UAAUG,KACxBL,EAAgB,QAAQ,GACxBT,EAAM,sBAAsB,CAAC,MAG7BS,EAAgB,QAAQK,GACxBd,EAAM,sBAAsBc,CAAK;AAAA,IACnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('../assets/MazAnimatedCounter.DYYlw_wl.css');const e=require("vue"),p=require("../helpers/isClient.cjs"),w=require("../chunks/_plugin-vue_export-helper.BHFhmbuH.cjs"),_={class:"maz-sr-only"},q=e.defineComponent({__name:"MazAnimatedCounter",props:{count:{},duration:{default:1e3},prefix:{default:void 0},suffix:{default:void 0},delay:{default:100},once:{type:Boolean,default:!0}},setup(m){const o=m,i=e.ref(0),s=e.ref(null);function g(){return!p.isClient()||!window.requestAnimationFrame?t=>(setTimeout(t,1e3/60),0):window.requestAnimationFrame.bind(window)}function v(t,r,u,S){const l=g();if(!p.isClient()){i.value=r;return}i.value=t,setTimeout(()=>{const y=performance.now(),c=(x=performance.now())=>{const T=x-y,f=Math.min(T/u,1),V=d=>d*(2-d);i.value=Math.round(t+(r-t)*V(f)),f<1&&l(c)};l(c)},S)}function a(t,r){v(t,r,o.duration,o.delay)}let n=null;return e.onMounted(()=>{o.once||(n=new IntersectionObserver(([t])=>{t.isIntersecting&&(a(0,o.count),o.once&&(n==null||n.unobserve(t.target)))}),s.value&&n.observe(s.value))}),e.onBeforeUnmount(()=>n==null?void 0:n.disconnect()),e.watch(()=>o.count,(t,r)=>{if(t===r)return;a(r??0,t)},{immediate:!0}),(t,r)=>(e.openBlock(),e.createElementBlock("span",{ref_key:"elementRef",ref:s,class:"m-animated-counter m-reset-css"},[e.createElementVNode("span",_,[e.renderSlot(t.$slots,"prefix",{},()=>[e.createTextVNode(e.toDisplayString(t.prefix),1)],!0),e.createTextVNode(e.toDisplayString(t.count),1),e.renderSlot(t.$slots,"suffix",{},()=>[e.createTextVNode(e.toDisplayString(t.suffix),1)],!0)]),e.renderSlot(t.$slots,"prefix",{},()=>[e.createTextVNode(e.toDisplayString(t.prefix),1)],!0),e.createTextVNode(e.toDisplayString(i.value),1),e.renderSlot(t.$slots,"suffix",{},()=>[e.createTextVNode(e.toDisplayString(t.suffix),1)],!0)],512))}}),A=w._export_sfc(q,[["__scopeId","data-v-12027d34"]]);exports.default=A;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('../assets/MazAnimatedCounter.ButbqlDb.css');const e=require("vue"),p=require("../helpers/isClient.cjs"),w=require("../chunks/_plugin-vue_export-helper.BHFhmbuH.cjs"),_={class:"maz-sr-only"},q=e.defineComponent({__name:"MazAnimatedCounter",props:{count:{},duration:{default:1e3},prefix:{default:void 0},suffix:{default:void 0},delay:{default:100},once:{type:Boolean,default:!0}},setup(m){const o=m,i=e.ref(0),s=e.ref(null);function g(){return!p.isClient()||!window.requestAnimationFrame?t=>(setTimeout(t,1e3/60),0):window.requestAnimationFrame.bind(window)}function v(t,r,u,S){const l=g();if(!p.isClient()){i.value=r;return}i.value=t,setTimeout(()=>{const y=performance.now(),c=(x=performance.now())=>{const T=x-y,f=Math.min(T/u,1),V=d=>d*(2-d);i.value=Math.round(t+(r-t)*V(f)),f<1&&l(c)};l(c)},S)}function a(t,r){v(t,r,o.duration,o.delay)}let n=null;return e.onMounted(()=>{o.once||(n=new IntersectionObserver(([t])=>{t.isIntersecting&&(a(0,o.count),o.once&&(n==null||n.unobserve(t.target)))}),s.value&&n.observe(s.value))}),e.onBeforeUnmount(()=>n==null?void 0:n.disconnect()),e.watch(()=>o.count,(t,r)=>{if(t===r)return;a(r??0,t)},{immediate:!0}),(t,r)=>(e.openBlock(),e.createElementBlock("span",{ref_key:"elementRef",ref:s,class:"m-animated-counter m-reset-css"},[e.createElementVNode("span",_,[e.renderSlot(t.$slots,"prefix",{},()=>[e.createTextVNode(e.toDisplayString(t.prefix),1)],!0),e.createTextVNode(e.toDisplayString(t.count),1),e.renderSlot(t.$slots,"suffix",{},()=>[e.createTextVNode(e.toDisplayString(t.suffix),1)],!0)]),e.renderSlot(t.$slots,"prefix",{},()=>[e.createTextVNode(e.toDisplayString(t.prefix),1)],!0),e.createTextVNode(e.toDisplayString(i.value),1),e.renderSlot(t.$slots,"suffix",{},()=>[e.createTextVNode(e.toDisplayString(t.suffix),1)],!0)],512))}}),A=w._export_sfc(q,[["__scopeId","data-v-4720f690"]]);exports.default=A;
2
2
  //# sourceMappingURL=MazAnimatedCounter.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"MazAnimatedCounter.cjs","sources":["../../src/components/MazAnimatedCounter.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { isClient } from '@helpers/isClient'\nimport { onBeforeUnmount, onMounted, ref, watch } from 'vue'\n\nexport interface MazAnimatedCounterProps {\n /**\n * The number to animate\n */\n count: number\n /**\n * Duration of the animation in milliseconds\n * @default 1000\n */\n duration?: number\n /**\n * Suffix to display next to the number\n */\n prefix?: string\n /**\n * Suffix to display next to the number\n */\n suffix?: string\n /**\n * Delay before the animation starts in milliseconds\n * @default 100\n */\n delay?: number\n /**\n * Play the animation only once\n * @default true\n */\n once?: boolean\n}\n\nconst props = withDefaults(\n defineProps<MazAnimatedCounterProps>(),\n {\n duration: 1000,\n prefix: undefined,\n suffix: undefined,\n delay: 100,\n once: true,\n },\n)\n\nconst currentCount = ref(0)\n\nconst elementRef = ref<HTMLElement | null>(null)\n\nfunction getRequestAnimationFrame() {\n /* Polyfill for server-side rendering */\n if (!isClient() || !window.requestAnimationFrame) {\n return (callback: FrameRequestCallback): number => {\n setTimeout(callback, 1000 / 60)\n return 0\n }\n }\n\n return window.requestAnimationFrame.bind(window)\n}\n\nfunction animate(start: number, end: number, duration: number, delay: number) {\n const requestAnim = getRequestAnimationFrame()\n\n if (!isClient()) {\n currentCount.value = end\n return\n }\n\n currentCount.value = start\n setTimeout(() => {\n const startTime = performance.now()\n\n const updateCount = (currentTime: number = performance.now()) => {\n const elapsed = currentTime - startTime\n const progress = Math.min(elapsed / duration, 1)\n\n const easeOutQuad = (t: number) => t * (2 - t)\n\n currentCount.value = Math.round(\n start + (end - start) * easeOutQuad(progress),\n )\n\n if (progress < 1) {\n requestAnim(updateCount)\n }\n }\n\n requestAnim(updateCount)\n }, delay)\n}\n\nfunction startAnimation(start: number, end: number) {\n animate(start, end, props.duration, props.delay)\n}\n\nlet observer: IntersectionObserver | null = null\n\nonMounted(() => {\n if (props.once)\n return\n\n observer = new IntersectionObserver(([entry]) => {\n if (entry.isIntersecting) {\n startAnimation(0, props.count)\n\n if (props.once) {\n observer?.unobserve(entry.target)\n }\n }\n })\n\n if (elementRef.value) {\n observer.observe(elementRef.value)\n }\n})\n\nonBeforeUnmount(() => observer?.disconnect())\n\nwatch(\n () => props.count,\n (newCount, oldCount) => {\n if (newCount === oldCount) {\n return\n }\n\n const startValue = oldCount ?? 0\n startAnimation(startValue, newCount)\n },\n { immediate: true },\n)\n</script>\n\n<template>\n <span ref=\"elementRef\" class=\"m-animated-counter m-reset-css\">\n <span class=\"maz-sr-only\">\n <slot name=\"prefix\">{{ prefix }}</slot>{{ count }}<slot name=\"suffix\">{{ suffix }}</slot>\n </span>\n\n <!-- Keep this on one line to avoid spacing issues (space between elements) -->\n <slot name=\"prefix\">{{ prefix }}</slot>{{ currentCount }}<slot name=\"suffix\">{{ suffix }}</slot>\n </span>\n</template>\n\n<style lang=\"postcss\" scoped>\n.m-animated-counter {\n @apply maz-whitespace-nowrap maz-tabular-nums;\n}\n</style>\n"],"names":["props","__props","currentCount","ref","elementRef","getRequestAnimationFrame","isClient","callback","animate","start","end","duration","delay","requestAnim","startTime","updateCount","currentTime","elapsed","progress","easeOutQuad","t","startAnimation","observer","onMounted","entry","onBeforeUnmount","watch","newCount","oldCount"],"mappings":"mcAkCA,MAAMA,EAAQC,EAWRC,EAAeC,MAAI,CAAC,EAEpBC,EAAaD,MAAwB,IAAI,EAE/C,SAASE,GAA2B,CAElC,MAAI,CAACC,EAAA,SAAA,GAAc,CAAC,OAAO,sBACjBC,IACK,WAAAA,EAAU,IAAO,EAAE,EACvB,GAIJ,OAAO,sBAAsB,KAAK,MAAM,CAAA,CAGjD,SAASC,EAAQC,EAAeC,EAAaC,EAAkBC,EAAe,CAC5E,MAAMC,EAAcR,EAAyB,EAEzC,GAAA,CAACC,aAAY,CACfJ,EAAa,MAAQQ,EACrB,MAAA,CAGFR,EAAa,MAAQO,EACrB,WAAW,IAAM,CACT,MAAAK,EAAY,YAAY,IAAI,EAE5BC,EAAc,CAACC,EAAsB,YAAY,QAAU,CAC/D,MAAMC,EAAUD,EAAcF,EACxBI,EAAW,KAAK,IAAID,EAAUN,EAAU,CAAC,EAEzCQ,EAAeC,GAAcA,GAAK,EAAIA,GAE5ClB,EAAa,MAAQ,KAAK,MACxBO,GAASC,EAAMD,GAASU,EAAYD,CAAQ,CAC9C,EAEIA,EAAW,GACbL,EAAYE,CAAW,CAE3B,EAEAF,EAAYE,CAAW,GACtBH,CAAK,CAAA,CAGD,SAAAS,EAAeZ,EAAeC,EAAa,CAClDF,EAAQC,EAAOC,EAAKV,EAAM,SAAUA,EAAM,KAAK,CAAA,CAGjD,IAAIsB,EAAwC,KAE5CC,OAAAA,EAAAA,UAAU,IAAM,CACVvB,EAAM,OAGVsB,EAAW,IAAI,qBAAqB,CAAC,CAACE,CAAK,IAAM,CAC3CA,EAAM,iBACOH,EAAA,EAAGrB,EAAM,KAAK,EAEzBA,EAAM,OACEsB,GAAA,MAAAA,EAAA,UAAUE,EAAM,SAE9B,CACD,EAEGpB,EAAW,OACJkB,EAAA,QAAQlB,EAAW,KAAK,EACnC,CACD,EAEeqB,kBAAA,IAAMH,GAAA,YAAAA,EAAU,YAAY,EAE5CI,EAAA,MACE,IAAM1B,EAAM,MACZ,CAAC2B,EAAUC,IAAa,CACtB,GAAID,IAAaC,EACf,OAIFP,EADmBO,GAAY,EACJD,CAAQ,CACrC,EACA,CAAE,UAAW,EAAK,CACpB"}
1
+ {"version":3,"file":"MazAnimatedCounter.cjs","sources":["../../src/components/MazAnimatedCounter.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { onBeforeUnmount, onMounted, ref, watch } from 'vue'\nimport { isClient } from '../helpers/isClient'\n\nexport interface MazAnimatedCounterProps {\n /**\n * The number to animate\n */\n count: number\n /**\n * Duration of the animation in milliseconds\n * @default 1000\n */\n duration?: number\n /**\n * Suffix to display next to the number\n */\n prefix?: string\n /**\n * Suffix to display next to the number\n */\n suffix?: string\n /**\n * Delay before the animation starts in milliseconds\n * @default 100\n */\n delay?: number\n /**\n * Play the animation only once\n * @default true\n */\n once?: boolean\n}\n\nconst props = withDefaults(\n defineProps<MazAnimatedCounterProps>(),\n {\n duration: 1000,\n prefix: undefined,\n suffix: undefined,\n delay: 100,\n once: true,\n },\n)\n\nconst currentCount = ref(0)\n\nconst elementRef = ref<HTMLElement | null>(null)\n\nfunction getRequestAnimationFrame() {\n /* Polyfill for server-side rendering */\n if (!isClient() || !window.requestAnimationFrame) {\n return (callback: FrameRequestCallback): number => {\n setTimeout(callback, 1000 / 60)\n return 0\n }\n }\n\n return window.requestAnimationFrame.bind(window)\n}\n\nfunction animate(start: number, end: number, duration: number, delay: number) {\n const requestAnim = getRequestAnimationFrame()\n\n if (!isClient()) {\n currentCount.value = end\n return\n }\n\n currentCount.value = start\n setTimeout(() => {\n const startTime = performance.now()\n\n const updateCount = (currentTime: number = performance.now()) => {\n const elapsed = currentTime - startTime\n const progress = Math.min(elapsed / duration, 1)\n\n const easeOutQuad = (t: number) => t * (2 - t)\n\n currentCount.value = Math.round(\n start + (end - start) * easeOutQuad(progress),\n )\n\n if (progress < 1) {\n requestAnim(updateCount)\n }\n }\n\n requestAnim(updateCount)\n }, delay)\n}\n\nfunction startAnimation(start: number, end: number) {\n animate(start, end, props.duration, props.delay)\n}\n\nlet observer: IntersectionObserver | null = null\n\nonMounted(() => {\n if (props.once)\n return\n\n observer = new IntersectionObserver(([entry]) => {\n if (entry.isIntersecting) {\n startAnimation(0, props.count)\n\n if (props.once) {\n observer?.unobserve(entry.target)\n }\n }\n })\n\n if (elementRef.value) {\n observer.observe(elementRef.value)\n }\n})\n\nonBeforeUnmount(() => observer?.disconnect())\n\nwatch(\n () => props.count,\n (newCount, oldCount) => {\n if (newCount === oldCount) {\n return\n }\n\n const startValue = oldCount ?? 0\n startAnimation(startValue, newCount)\n },\n { immediate: true },\n)\n</script>\n\n<template>\n <span ref=\"elementRef\" class=\"m-animated-counter m-reset-css\">\n <span class=\"maz-sr-only\">\n <slot name=\"prefix\">{{ prefix }}</slot>{{ count }}<slot name=\"suffix\">{{ suffix }}</slot>\n </span>\n\n <!-- Keep this on one line to avoid spacing issues (space between elements) -->\n <slot name=\"prefix\">{{ prefix }}</slot>{{ currentCount }}<slot name=\"suffix\">{{ suffix }}</slot>\n </span>\n</template>\n\n<style lang=\"postcss\" scoped>\n.m-animated-counter {\n @apply maz-whitespace-nowrap maz-tabular-nums;\n}\n</style>\n"],"names":["props","__props","currentCount","ref","elementRef","getRequestAnimationFrame","isClient","callback","animate","start","end","duration","delay","requestAnim","startTime","updateCount","currentTime","elapsed","progress","easeOutQuad","t","startAnimation","observer","onMounted","entry","onBeforeUnmount","watch","newCount","oldCount"],"mappings":"mcAkCA,MAAMA,EAAQC,EAWRC,EAAeC,MAAI,CAAC,EAEpBC,EAAaD,MAAwB,IAAI,EAE/C,SAASE,GAA2B,CAElC,MAAI,CAACC,EAAA,SAAA,GAAc,CAAC,OAAO,sBACjBC,IACK,WAAAA,EAAU,IAAO,EAAE,EACvB,GAIJ,OAAO,sBAAsB,KAAK,MAAM,CAAA,CAGjD,SAASC,EAAQC,EAAeC,EAAaC,EAAkBC,EAAe,CAC5E,MAAMC,EAAcR,EAAyB,EAEzC,GAAA,CAACC,aAAY,CACfJ,EAAa,MAAQQ,EACrB,MAAA,CAGFR,EAAa,MAAQO,EACrB,WAAW,IAAM,CACT,MAAAK,EAAY,YAAY,IAAI,EAE5BC,EAAc,CAACC,EAAsB,YAAY,QAAU,CAC/D,MAAMC,EAAUD,EAAcF,EACxBI,EAAW,KAAK,IAAID,EAAUN,EAAU,CAAC,EAEzCQ,EAAeC,GAAcA,GAAK,EAAIA,GAE5ClB,EAAa,MAAQ,KAAK,MACxBO,GAASC,EAAMD,GAASU,EAAYD,CAAQ,CAC9C,EAEIA,EAAW,GACbL,EAAYE,CAAW,CAE3B,EAEAF,EAAYE,CAAW,GACtBH,CAAK,CAAA,CAGD,SAAAS,EAAeZ,EAAeC,EAAa,CAClDF,EAAQC,EAAOC,EAAKV,EAAM,SAAUA,EAAM,KAAK,CAAA,CAGjD,IAAIsB,EAAwC,KAE5CC,OAAAA,EAAAA,UAAU,IAAM,CACVvB,EAAM,OAGVsB,EAAW,IAAI,qBAAqB,CAAC,CAACE,CAAK,IAAM,CAC3CA,EAAM,iBACOH,EAAA,EAAGrB,EAAM,KAAK,EAEzBA,EAAM,OACEsB,GAAA,MAAAA,EAAA,UAAUE,EAAM,SAE9B,CACD,EAEGpB,EAAW,OACJkB,EAAA,QAAQlB,EAAW,KAAK,EACnC,CACD,EAEeqB,kBAAA,IAAMH,GAAA,YAAAA,EAAU,YAAY,EAE5CI,EAAA,MACE,IAAM1B,EAAM,MACZ,CAAC2B,EAAUC,IAAa,CACtB,GAAID,IAAaC,EACf,OAIFP,EADmBO,GAAY,EACJD,CAAQ,CACrC,EACA,CAAE,UAAW,EAAK,CACpB"}
@@ -1,7 +1,7 @@
1
1
  import { defineComponent as B, ref as v, onMounted as C, onBeforeUnmount as T, watch as V, openBlock as $, createElementBlock as k, createElementVNode as z, renderSlot as i, createTextVNode as r, toDisplayString as a } from "vue";
2
2
  import { isClient as w } from "../helpers/isClient.mjs";
3
3
  import { _ as F } from "../chunks/_plugin-vue_export-helper.CHgC5LLL.mjs";
4
- import '../assets/MazAnimatedCounter.DYYlw_wl.css';const I = { class: "maz-sr-only" }, R = /* @__PURE__ */ B({
4
+ import '../assets/MazAnimatedCounter.ButbqlDb.css';const I = { class: "maz-sr-only" }, R = /* @__PURE__ */ B({
5
5
  __name: "MazAnimatedCounter",
6
6
  props: {
7
7
  count: {},
@@ -71,7 +71,7 @@ import '../assets/MazAnimatedCounter.DYYlw_wl.css';const I = { class: "maz-sr-on
71
71
  ], !0)
72
72
  ], 512));
73
73
  }
74
- }), S = /* @__PURE__ */ F(R, [["__scopeId", "data-v-12027d34"]]);
74
+ }), S = /* @__PURE__ */ F(R, [["__scopeId", "data-v-4720f690"]]);
75
75
  export {
76
76
  S as default
77
77
  };