@ozdao/martyrs 0.2.545 → 0.2.547

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 (297) hide show
  1. package/dist/martyrs/src/components/Button/{Button.vue2.cjs → Button.vue.cjs} +2 -2
  2. package/dist/martyrs/src/components/Button/{Button.vue2.js.map → Button.vue.cjs.map} +1 -1
  3. package/dist/martyrs/src/components/Button/{Button.vue2.js → Button.vue.js} +2 -2
  4. package/dist/martyrs/src/components/Button/Button.vue.js.map +1 -0
  5. package/dist/martyrs/src/components/Feed/{Feed.vue2.cjs → Feed.vue.cjs} +2 -2
  6. package/dist/martyrs/src/components/Feed/{Feed.vue2.js.map → Feed.vue.cjs.map} +1 -1
  7. package/dist/martyrs/src/components/Feed/{Feed.vue2.js → Feed.vue.js} +2 -2
  8. package/dist/martyrs/src/components/Feed/Feed.vue.js.map +1 -0
  9. package/dist/martyrs/src/components/Field/{Field.vue2.cjs → Field.vue.cjs} +2 -2
  10. package/dist/martyrs/src/components/Field/{Field.vue2.js.map → Field.vue.cjs.map} +1 -1
  11. package/dist/martyrs/src/components/Field/{Field.vue2.js → Field.vue.js} +2 -2
  12. package/dist/martyrs/src/components/Field/Field.vue.js.map +1 -0
  13. package/dist/martyrs/src/components/FieldBig/FieldBig.vue.cjs +2 -2
  14. package/dist/martyrs/src/components/FieldBig/FieldBig.vue.js +2 -2
  15. package/dist/martyrs/src/components/FieldTags/{BlockTags.vue2.cjs → BlockTags.vue.cjs} +2 -2
  16. package/dist/martyrs/src/components/FieldTags/{BlockTags.vue2.js.map → BlockTags.vue.cjs.map} +1 -1
  17. package/dist/martyrs/src/components/FieldTags/{BlockTags.vue2.js → BlockTags.vue.js} +2 -2
  18. package/dist/martyrs/src/components/FieldTags/BlockTags.vue.js.map +1 -0
  19. package/dist/martyrs/src/components/Popup/{Popup.vue2.cjs → Popup.vue.cjs} +2 -2
  20. package/dist/martyrs/src/components/Popup/{Popup.vue2.js.map → Popup.vue.cjs.map} +1 -1
  21. package/dist/martyrs/src/components/Popup/{Popup.vue2.js → Popup.vue.js} +2 -2
  22. package/dist/martyrs/src/components/Popup/Popup.vue.js.map +1 -0
  23. package/dist/martyrs/src/components/UploadImage/{UploadImage.vue2.cjs → UploadImage.vue.cjs} +2 -2
  24. package/dist/martyrs/src/components/UploadImage/{UploadImage.vue2.js.map → UploadImage.vue.cjs.map} +1 -1
  25. package/dist/martyrs/src/components/UploadImage/{UploadImage.vue2.js → UploadImage.vue.js} +2 -2
  26. package/dist/martyrs/src/components/UploadImage/UploadImage.vue.js.map +1 -0
  27. package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.cjs +1 -1
  28. package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.js +1 -1
  29. package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.cjs +2 -2
  30. package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js +2 -2
  31. package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.cjs +2 -2
  32. package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js +2 -2
  33. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.cjs +2 -2
  34. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +2 -2
  35. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileBlogposts.vue.cjs +1 -1
  36. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileBlogposts.vue.js +1 -1
  37. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEdit.vue.cjs +1 -1
  38. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEdit.vue.js +1 -1
  39. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.cjs +1 -1
  40. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.js +1 -1
  41. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.cjs +3 -3
  42. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.js +3 -3
  43. package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.cjs +2 -2
  44. package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js +2 -2
  45. package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.cjs +2 -2
  46. package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js +2 -2
  47. package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.cjs +2 -2
  48. package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js +2 -2
  49. package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.cjs +2 -2
  50. package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.js +2 -2
  51. package/dist/martyrs/src/modules/backoffice/components/pages/Dashboard.vue.cjs +1 -1
  52. package/dist/martyrs/src/modules/backoffice/components/pages/Dashboard.vue.js +1 -1
  53. package/dist/martyrs/src/modules/community/components/layouts/Community.vue.cjs +1 -1
  54. package/dist/martyrs/src/modules/community/components/layouts/Community.vue.js +1 -1
  55. package/dist/martyrs/src/modules/community/components/pages/Blog.vue.cjs +1 -1
  56. package/dist/martyrs/src/modules/community/components/pages/Blog.vue.js +1 -1
  57. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.cjs +1 -1
  58. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js +1 -1
  59. package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.cjs +5 -5
  60. package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js +5 -5
  61. package/dist/martyrs/src/modules/community/components/pages/Posts.vue.cjs +1 -1
  62. package/dist/martyrs/src/modules/community/components/pages/Posts.vue.js +1 -1
  63. package/dist/martyrs/src/modules/constructor/components/elements/Card.vue.cjs +2 -2
  64. package/dist/martyrs/src/modules/constructor/components/elements/Card.vue.js +2 -2
  65. package/dist/martyrs/src/modules/constructor/components/elements/Embed.vue.cjs +1 -1
  66. package/dist/martyrs/src/modules/constructor/components/elements/Embed.vue.js +1 -1
  67. package/dist/martyrs/src/modules/events/components/elements/ButtonCheck.vue.cjs +1 -1
  68. package/dist/martyrs/src/modules/events/components/elements/ButtonCheck.vue.js +1 -1
  69. package/dist/martyrs/src/modules/events/components/elements/ButtonJoin.vue.cjs +1 -1
  70. package/dist/martyrs/src/modules/events/components/elements/ButtonJoin.vue.js +1 -1
  71. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.cjs +6 -6
  72. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +6 -6
  73. package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.cjs +4 -4
  74. package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js +4 -4
  75. package/dist/martyrs/src/modules/events/components/pages/Event.vue.cjs +3 -3
  76. package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +3 -3
  77. package/dist/martyrs/src/modules/events/components/pages/Events.vue.cjs +2 -2
  78. package/dist/martyrs/src/modules/events/components/pages/Events.vue.js +2 -2
  79. package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.cjs +1 -1
  80. package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.js +1 -1
  81. package/dist/martyrs/src/modules/events/components/pages/EventsSearch.vue.cjs +1 -1
  82. package/dist/martyrs/src/modules/events/components/pages/EventsSearch.vue.js +1 -1
  83. package/dist/martyrs/src/modules/gallery/components/pages/Gallery.vue.cjs +2 -2
  84. package/dist/martyrs/src/modules/gallery/components/pages/Gallery.vue.js +2 -2
  85. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.cjs +5 -5
  86. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +5 -5
  87. package/dist/martyrs/src/modules/globals/views/components/blocks/AlertDialog.vue.cjs +1 -1
  88. package/dist/martyrs/src/modules/globals/views/components/blocks/AlertDialog.vue.js +1 -1
  89. package/dist/martyrs/src/modules/globals/views/components/blocks/BlockMultiselect.vue.cjs +1 -1
  90. package/dist/martyrs/src/modules/globals/views/components/blocks/BlockMultiselect.vue.js +1 -1
  91. package/dist/martyrs/src/modules/globals/views/components/blocks/BlockSearch.vue.cjs +1 -1
  92. package/dist/martyrs/src/modules/globals/views/components/blocks/BlockSearch.vue.js +1 -1
  93. package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.cjs +1 -1
  94. package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.js +1 -1
  95. package/dist/martyrs/src/modules/globals/views/components/blocks/PopupAuth.vue.cjs +2 -2
  96. package/dist/martyrs/src/modules/globals/views/components/blocks/PopupAuth.vue.js +2 -2
  97. package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.cjs +2 -2
  98. package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.js +2 -2
  99. package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.cjs +2 -2
  100. package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.js +2 -2
  101. package/dist/martyrs/src/modules/globals/views/components/partials/Footer.vue.cjs +25 -117
  102. package/dist/martyrs/src/modules/globals/views/components/partials/Footer.vue.cjs.map +1 -1
  103. package/dist/martyrs/src/modules/globals/views/components/partials/Footer.vue.js +25 -117
  104. package/dist/martyrs/src/modules/globals/views/components/partials/Footer.vue.js.map +1 -1
  105. package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.cjs +1 -1
  106. package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.js +1 -1
  107. package/dist/martyrs/src/modules/globals/views/components/partials/NavigationBar.vue.cjs +1 -1
  108. package/dist/martyrs/src/modules/globals/views/components/partials/NavigationBar.vue.js +1 -1
  109. package/dist/martyrs/src/modules/globals/views/components/sections/Filters.vue2.cjs +2 -2
  110. package/dist/martyrs/src/modules/globals/views/components/sections/Filters.vue2.js +2 -2
  111. package/dist/martyrs/src/modules/globals/views/components/sections/Walkthrough.vue.cjs +1 -1
  112. package/dist/martyrs/src/modules/globals/views/components/sections/Walkthrough.vue.js +1 -1
  113. package/dist/martyrs/src/modules/icons/components/IconSearchPopup.vue.cjs +2 -2
  114. package/dist/martyrs/src/modules/icons/components/IconSearchPopup.vue.js +2 -2
  115. package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.cjs +1 -1
  116. package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.cjs +2 -2
  117. package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.js +2 -2
  118. package/dist/martyrs/src/modules/inventory/components/forms/ColumnSettingsMenu.vue.cjs +1 -1
  119. package/dist/martyrs/src/modules/inventory/components/forms/ColumnSettingsMenu.vue.js +1 -1
  120. package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.cjs +1 -1
  121. package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.js +1 -1
  122. package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.cjs +2 -2
  123. package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.js +2 -2
  124. package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.cjs +2 -2
  125. package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.js +2 -2
  126. package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.cjs +4 -4
  127. package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js +4 -4
  128. package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.cjs +1 -1
  129. package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.js +1 -1
  130. package/dist/martyrs/src/modules/marketplace/views/components/pages/Catalog.vue.cjs +1 -1
  131. package/dist/martyrs/src/modules/marketplace/views/components/pages/Catalog.vue.js +1 -1
  132. package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.cjs +1 -1
  133. package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js +1 -1
  134. package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.cjs +1 -1
  135. package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.js +1 -1
  136. package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.cjs +1 -1
  137. package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.js +1 -1
  138. package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.cjs +1 -1
  139. package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.js +1 -1
  140. package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.cjs +3 -3
  141. package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js +3 -3
  142. package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.cjs +3 -3
  143. package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js +3 -3
  144. package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.cjs +3 -3
  145. package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js +3 -3
  146. package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.cjs +1 -1
  147. package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.js +1 -1
  148. package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.cjs +3 -3
  149. package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js +3 -3
  150. package/dist/martyrs/src/modules/music/components/pages/Album.vue.cjs +2 -2
  151. package/dist/martyrs/src/modules/music/components/pages/Album.vue.js +2 -2
  152. package/dist/martyrs/src/modules/music/components/pages/Artist.vue.cjs +1 -1
  153. package/dist/martyrs/src/modules/music/components/pages/Artist.vue.js +1 -1
  154. package/dist/martyrs/src/modules/music/components/pages/MusicHome.vue.cjs +1 -1
  155. package/dist/martyrs/src/modules/music/components/pages/MusicHome.vue.js +1 -1
  156. package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.cjs +2 -2
  157. package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js +2 -2
  158. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.cjs +3 -3
  159. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js +3 -3
  160. package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.cjs +1 -1
  161. package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js +1 -1
  162. package/dist/martyrs/src/modules/music/components/pages/Track.vue.cjs +3 -3
  163. package/dist/martyrs/src/modules/music/components/pages/Track.vue.js +3 -3
  164. package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.cjs +1 -1
  165. package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.js +1 -1
  166. package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.cjs +1 -1
  167. package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.js +1 -1
  168. package/dist/martyrs/src/modules/notifications/components/elements/NotificationBadge.vue.cjs +1 -1
  169. package/dist/martyrs/src/modules/notifications/components/elements/NotificationBadge.vue.js +1 -1
  170. package/dist/martyrs/src/modules/notifications/router/notifications.router.cjs +1 -1
  171. package/dist/martyrs/src/modules/notifications/router/notifications.router.cjs.map +1 -1
  172. package/dist/martyrs/src/modules/notifications/router/notifications.router.js +1 -1
  173. package/dist/martyrs/src/modules/notifications/router/notifications.router.js.map +1 -1
  174. package/dist/martyrs/src/modules/orders/components/elements/FieldSubscribeNewsletter.vue.cjs +1 -1
  175. package/dist/martyrs/src/modules/orders/components/elements/FieldSubscribeNewsletter.vue.js +1 -1
  176. package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.cjs +2 -2
  177. package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.js +2 -2
  178. package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.cjs +2 -2
  179. package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.js +2 -2
  180. package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.cjs +3 -3
  181. package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.js +3 -3
  182. package/dist/martyrs/src/modules/orders/components/pages/Applications.vue.cjs +2 -2
  183. package/dist/martyrs/src/modules/orders/components/pages/Applications.vue.js +2 -2
  184. package/dist/martyrs/src/modules/orders/components/pages/Customers.vue.cjs +2 -2
  185. package/dist/martyrs/src/modules/orders/components/pages/Customers.vue.js +2 -2
  186. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.cjs +2 -2
  187. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +2 -2
  188. package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.cjs +1 -1
  189. package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js +1 -1
  190. package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.cjs +4 -4
  191. package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +4 -4
  192. package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.cjs +1 -1
  193. package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.js +1 -1
  194. package/dist/martyrs/src/modules/orders/components/sections/ApplicationDetails.vue.cjs +1 -1
  195. package/dist/martyrs/src/modules/orders/components/sections/ApplicationDetails.vue.js +1 -1
  196. package/dist/martyrs/src/modules/orders/components/sections/CustomerDetails.vue.cjs +1 -1
  197. package/dist/martyrs/src/modules/orders/components/sections/CustomerDetails.vue.js +1 -1
  198. package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.cjs +3 -3
  199. package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +3 -3
  200. package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.cjs +6 -6
  201. package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.js +6 -6
  202. package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.cjs +1 -1
  203. package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.js +1 -1
  204. package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.cjs +2 -2
  205. package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.js +2 -2
  206. package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.cjs +5 -5
  207. package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.js +5 -5
  208. package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.cjs +2 -2
  209. package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.js +2 -2
  210. package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.cjs +6 -6
  211. package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.js +6 -6
  212. package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.cjs +6 -6
  213. package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js +6 -6
  214. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs +6 -6
  215. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js +6 -6
  216. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.cjs +5 -5
  217. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +5 -5
  218. package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.cjs +1 -1
  219. package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.js +1 -1
  220. package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.cjs +3 -3
  221. package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.js +3 -3
  222. package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.cjs +3 -3
  223. package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.js +3 -3
  224. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.cjs +2 -2
  225. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +2 -2
  226. package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.cjs +2 -2
  227. package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.js +2 -2
  228. package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.cjs +2 -2
  229. package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.js +2 -2
  230. package/dist/martyrs/src/modules/pages/views/components/partials/SidebarPages.vue.cjs +2 -2
  231. package/dist/martyrs/src/modules/pages/views/components/partials/SidebarPages.vue.js +2 -2
  232. package/dist/martyrs/src/modules/products/components/blocks/ProductImages.vue.cjs +1 -1
  233. package/dist/martyrs/src/modules/products/components/blocks/ProductImages.vue.js +1 -1
  234. package/dist/martyrs/src/modules/products/components/pages/Categories.vue.cjs +2 -2
  235. package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js +2 -2
  236. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs +5 -5
  237. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +5 -5
  238. package/dist/martyrs/src/modules/products/components/pages/Product.vue.cjs +2 -2
  239. package/dist/martyrs/src/modules/products/components/pages/Product.vue.js +2 -2
  240. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.cjs +2 -2
  241. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +2 -2
  242. package/dist/martyrs/src/modules/products/components/pages/Products.vue.cjs +3 -3
  243. package/dist/martyrs/src/modules/products/components/pages/Products.vue.js +3 -3
  244. package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.cjs +3 -3
  245. package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.js +3 -3
  246. package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.cjs +3 -3
  247. package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.js +3 -3
  248. package/dist/martyrs/src/modules/products/components/sections/EditIngredients.vue.cjs +2 -2
  249. package/dist/martyrs/src/modules/products/components/sections/EditIngredients.vue.js +2 -2
  250. package/dist/martyrs/src/modules/products/components/sections/EditRecommended.vue.cjs +2 -2
  251. package/dist/martyrs/src/modules/products/components/sections/EditRecommended.vue.js +2 -2
  252. package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.cjs +4 -4
  253. package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js +4 -4
  254. package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.cjs +1 -1
  255. package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.js +1 -1
  256. package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.cjs +1 -1
  257. package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.js +1 -1
  258. package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.cjs +1 -1
  259. package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js +1 -1
  260. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.cjs +1 -1
  261. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.js +1 -1
  262. package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.cjs +1 -1
  263. package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.js +1 -1
  264. package/dist/martyrs/src/modules/rents/views/components/pages/RentsEdit.vue.cjs +3 -3
  265. package/dist/martyrs/src/modules/rents/views/components/pages/RentsEdit.vue.js +3 -3
  266. package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.cjs +2 -2
  267. package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.js +2 -2
  268. package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.cjs +1 -1
  269. package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.js +1 -1
  270. package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.cjs +1 -1
  271. package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js +1 -1
  272. package/dist/martyrs/src/modules/spots/components/pages/Map.vue.cjs +1 -1
  273. package/dist/martyrs/src/modules/spots/components/pages/Map.vue.js +1 -1
  274. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.cjs +4 -4
  275. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +4 -4
  276. package/dist/martyrs/src/modules/spots/components/pages/Spots.vue.cjs +1 -1
  277. package/dist/martyrs/src/modules/spots/components/pages/Spots.vue.js +1 -1
  278. package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.cjs +3 -3
  279. package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.js +3 -3
  280. package/dist/martyrs/src/modules/wallet/views/components/blocks/CardDeposit.vue.cjs +1 -1
  281. package/dist/martyrs/src/modules/wallet/views/components/blocks/CardDeposit.vue.js +1 -1
  282. package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.cjs +1 -1
  283. package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.js +1 -1
  284. package/dist/martyrs/src/modules/wallet/views/components/pages/Payments.vue.cjs +1 -1
  285. package/dist/martyrs/src/modules/wallet/views/components/pages/Payments.vue.js +1 -1
  286. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.cjs +2 -2
  287. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js +2 -2
  288. package/package.json +1 -1
  289. package/src/modules/globals/TASK.MD +9 -102
  290. package/src/modules/globals/views/components/partials/Footer.vue +27 -127
  291. package/src/modules/notifications/router/notifications.router.js +1 -1
  292. package/dist/martyrs/src/components/Button/Button.vue2.cjs.map +0 -1
  293. package/dist/martyrs/src/components/Feed/Feed.vue2.cjs.map +0 -1
  294. package/dist/martyrs/src/components/Field/Field.vue2.cjs.map +0 -1
  295. package/dist/martyrs/src/components/FieldTags/BlockTags.vue2.cjs.map +0 -1
  296. package/dist/martyrs/src/components/Popup/Popup.vue2.cjs.map +0 -1
  297. package/dist/martyrs/src/components/UploadImage/UploadImage.vue2.cjs.map +0 -1
@@ -3,15 +3,15 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
3
3
  const vue = require("vue");
4
4
  const vueRouter = require("vue-router");
5
5
  const Block = require("../../../../components/Block/Block.vue.cjs");
6
- const UploadImage = require("../../../../components/UploadImage/UploadImage.vue2.cjs");
6
+ const UploadImage = require("../../../../components/UploadImage/UploadImage.vue.cjs");
7
7
  ;/* empty css */
8
- const Field = require("../../../../components/Field/Field.vue2.cjs");
8
+ const Field = require("../../../../components/Field/Field.vue.cjs");
9
9
  const Select = require("../../../../components/Select/Select.vue2.cjs");
10
10
  const Checkbox = require("../../../../components/Checkbox/Checkbox.vue.cjs");
11
11
  const Address = require("../../../../components/Address/Address.vue.cjs");
12
12
  const LocationMarker = require("../../../../components/LocationMarker/LocationMarker.vue.cjs");
13
- const Button = require("../../../../components/Button/Button.vue2.cjs");
14
- ;/* empty css */
13
+ const Button = require("../../../../components/Button/Button.vue.cjs");
14
+ ;/* empty css */
15
15
  const WorktimeEdit = require("../sections/WorktimeEdit.vue.cjs");
16
16
  const spots = require("../../store/spots.cjs");
17
17
  const _hoisted_1 = { class: "for-transition w-100 cols-1 pd-thin gap-thin" };
@@ -1,15 +1,15 @@
1
1
  import { ref, onMounted, createElementBlock, openBlock, createVNode, createElementVNode, withCtx, toDisplayString, unref, createTextVNode, Fragment, renderList } from "vue";
2
2
  import { useRouter, useRoute } from "vue-router";
3
3
  import _sfc_main$1 from "../../../../components/Block/Block.vue.js";
4
- import UploadImage from "../../../../components/UploadImage/UploadImage.vue2.js";
4
+ import UploadImage from "../../../../components/UploadImage/UploadImage.vue.js";
5
5
  /* empty css */
6
- import Field from "../../../../components/Field/Field.vue2.js";
6
+ import Field from "../../../../components/Field/Field.vue.js";
7
7
  import Select from "../../../../components/Select/Select.vue2.js";
8
8
  import _sfc_main$3 from "../../../../components/Checkbox/Checkbox.vue.js";
9
9
  import _sfc_main$4 from "../../../../components/Address/Address.vue.js";
10
10
  import _sfc_main$5 from "../../../../components/LocationMarker/LocationMarker.vue.js";
11
- import _sfc_main$2 from "../../../../components/Button/Button.vue2.js";
12
- /* empty css */
11
+ import _sfc_main$2 from "../../../../components/Button/Button.vue.js";
12
+ /* empty css */
13
13
  import WorktimeEdit from "../sections/WorktimeEdit.vue.js";
14
14
  import { actions, state } from "../../store/spots.js";
15
15
  const _hoisted_1 = { class: "for-transition w-100 cols-1 pd-thin gap-thin" };
@@ -2,7 +2,7 @@
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
3
  const vue = require("vue");
4
4
  const vueRouter = require("vue-router");
5
- const Feed = require("../../../../components/Feed/Feed.vue2.cjs");
5
+ const Feed = require("../../../../components/Feed/Feed.vue.cjs");
6
6
  const CardSpot = require("../blocks/CardSpot.vue.cjs");
7
7
  const IconPlus = require("../../../icons/navigation/IconPlus.vue.cjs");
8
8
  const auth = require("../../../auth/views/store/auth.cjs");
@@ -1,6 +1,6 @@
1
1
  import { ref, onMounted, onUnmounted, createElementBlock, openBlock, createCommentVNode, createElementVNode, unref, createVNode, Fragment, renderList, toDisplayString, withCtx, createBlock } from "vue";
2
2
  import { useRoute, useRouter } from "vue-router";
3
- import _sfc_main$2 from "../../../../components/Feed/Feed.vue2.js";
3
+ import _sfc_main$2 from "../../../../components/Feed/Feed.vue.js";
4
4
  import CardSpot from "../blocks/CardSpot.vue.js";
5
5
  import _sfc_main$1 from "../../../icons/navigation/IconPlus.vue.js";
6
6
  import { state } from "../../../auth/views/store/auth.js";
@@ -2,11 +2,11 @@
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
3
  const vue = require("vue");
4
4
  const vueI18n = require("vue-i18n");
5
- const Button = require("../../../../components/Button/Button.vue2.cjs");
6
- const Field = require("../../../../components/Field/Field.vue2.cjs");
5
+ const Button = require("../../../../components/Button/Button.vue.cjs");
6
+ const Field = require("../../../../components/Field/Field.vue.cjs");
7
7
  const Select = require("../../../../components/Select/Select.vue2.cjs");
8
8
  const Checkbox = require("../../../../components/Checkbox/Checkbox.vue.cjs");
9
- const Popup = require("../../../../components/Popup/Popup.vue2.cjs");
9
+ const Popup = require("../../../../components/Popup/Popup.vue.cjs");
10
10
  ;/* empty css */
11
11
  const _pluginVue_exportHelper = require("../../../../../../_virtual/_plugin-vue_export-helper.cjs");
12
12
  const _hoisted_1 = { class: "working-hours-editor w-100" };
@@ -1,10 +1,10 @@
1
1
  import { mergeModels, useModel, ref, computed, onMounted, createElementBlock, openBlock, createElementVNode, createVNode, toDisplayString, unref, withCtx, createTextVNode, Fragment, renderList, normalizeClass, createCommentVNode, createBlock } from "vue";
2
2
  import { useI18n } from "vue-i18n";
3
- import _sfc_main$1 from "../../../../components/Button/Button.vue2.js";
4
- import Field from "../../../../components/Field/Field.vue2.js";
3
+ import _sfc_main$1 from "../../../../components/Button/Button.vue.js";
4
+ import Field from "../../../../components/Field/Field.vue.js";
5
5
  import Select from "../../../../components/Select/Select.vue2.js";
6
6
  import _sfc_main$3 from "../../../../components/Checkbox/Checkbox.vue.js";
7
- import _sfc_main$2 from "../../../../components/Popup/Popup.vue2.js";
7
+ import _sfc_main$2 from "../../../../components/Popup/Popup.vue.js";
8
8
  /* empty css */
9
9
  import _export_sfc from "../../../../../../_virtual/_plugin-vue_export-helper.js";
10
10
  const _hoisted_1 = { class: "working-hours-editor w-100" };
@@ -2,7 +2,7 @@
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
3
  const vue = require("vue");
4
4
  const wallet = require("../../localization/wallet.json.cjs");
5
- const Field = require("../../../../../components/Field/Field.vue2.cjs");
5
+ const Field = require("../../../../../components/Field/Field.vue.cjs");
6
6
  const vueI18n = require("vue-i18n");
7
7
  const _hoisted_1 = { class: "bg-grey radius-big mn-t-semi mn-b-semi flex flex-justify-between" };
8
8
  const _sfc_main = {
@@ -1,6 +1,6 @@
1
1
  import { createElementBlock, openBlock, Fragment, createElementVNode, createVNode, unref, toDisplayString } from "vue";
2
2
  import text from "../../localization/wallet.json.js";
3
- import Field from "../../../../../components/Field/Field.vue2.js";
3
+ import Field from "../../../../../components/Field/Field.vue.js";
4
4
  import { useI18n } from "vue-i18n";
5
5
  const _hoisted_1 = { class: "bg-grey radius-big mn-t-semi mn-b-semi flex flex-justify-between" };
6
6
  const _sfc_main = {
@@ -5,7 +5,7 @@ const vueI18n = require("vue-i18n");
5
5
  const bignumber = require("../../../../../../node_modules/.pnpm/bignumber.js@9.2.1/node_modules/bignumber.js/bignumber.cjs");
6
6
  const wallet_store = require("../../store/wallet.store.cjs");
7
7
  const wallet = require("../../localization/wallet.json.cjs");
8
- const Field = require("../../../../../components/Field/Field.vue2.cjs");
8
+ const Field = require("../../../../../components/Field/Field.vue.cjs");
9
9
  const Select = require("../../../../../components/Select/Select.vue2.cjs");
10
10
  const _hoisted_1 = { class: "mn-b-small t-center t-bold" };
11
11
  const _hoisted_2 = { class: "t-semi" };
@@ -3,7 +3,7 @@ import { useI18n } from "vue-i18n";
3
3
  import { BigNumber } from "../../../../../../node_modules/.pnpm/bignumber.js@9.2.1/node_modules/bignumber.js/bignumber.js";
4
4
  import { state, actions } from "../../store/wallet.store.js";
5
5
  import text from "../../localization/wallet.json.js";
6
- import Field from "../../../../../components/Field/Field.vue2.js";
6
+ import Field from "../../../../../components/Field/Field.vue.js";
7
7
  import Select from "../../../../../components/Select/Select.vue2.js";
8
8
  const _hoisted_1 = { class: "mn-b-small t-center t-bold" };
9
9
  const _hoisted_2 = { class: "t-semi" };
@@ -3,7 +3,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
3
3
  const vue = require("vue");
4
4
  const vueRouter = require("vue-router");
5
5
  const SectionPageTitle = require("../../../../globals/views/components/sections/SectionPageTitle.vue.cjs");
6
- const Feed = require("../../../../../components/Feed/Feed.vue2.cjs");
6
+ const Feed = require("../../../../../components/Feed/Feed.vue.cjs");
7
7
  const payments_store = require("../../store/payments.store.cjs");
8
8
  ;/* empty css */
9
9
  const _hoisted_1 = { class: "pd-thin" };
@@ -1,7 +1,7 @@
1
1
  import { ref, createElementBlock, openBlock, createVNode, unref, withCtx, Fragment, renderList, toDisplayString } from "vue";
2
2
  import { useRoute, useRouter } from "vue-router";
3
3
  import _sfc_main$1 from "../../../../globals/views/components/sections/SectionPageTitle.vue.js";
4
- import _sfc_main$2 from "../../../../../components/Feed/Feed.vue2.js";
4
+ import _sfc_main$2 from "../../../../../components/Feed/Feed.vue.js";
5
5
  import { actions } from "../../store/payments.store.js";
6
6
  /* empty css */
7
7
  const _hoisted_1 = { class: "pd-thin" };
@@ -5,8 +5,8 @@ const vueI18n = require("vue-i18n");
5
5
  const Web3 = require("web3");
6
6
  const wallet_store = require("../../store/wallet.store.cjs");
7
7
  const wallet = require("../../localization/wallet.json.cjs");
8
- const Popup = require("../../../../../components/Popup/Popup.vue2.cjs");
9
- const Button = require("../../../../../components/Button/Button.vue2.cjs");
8
+ const Popup = require("../../../../../components/Popup/Popup.vue.cjs");
9
+ const Button = require("../../../../../components/Button/Button.vue.cjs");
10
10
  require("vue-router");
11
11
  ;/* empty css */
12
12
  ;/* empty css */
@@ -3,8 +3,8 @@ import { useI18n } from "vue-i18n";
3
3
  import Web3 from "web3";
4
4
  import { state, actions } from "../../store/wallet.store.js";
5
5
  import text from "../../localization/wallet.json.js";
6
- import _sfc_main$3 from "../../../../../components/Popup/Popup.vue2.js";
7
- import _sfc_main$1 from "../../../../../components/Button/Button.vue2.js";
6
+ import _sfc_main$3 from "../../../../../components/Popup/Popup.vue.js";
7
+ import _sfc_main$1 from "../../../../../components/Button/Button.vue.js";
8
8
  import "vue-router";
9
9
  /* empty css */
10
10
  /* empty css */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ozdao/martyrs",
3
- "version": "0.2.545",
3
+ "version": "0.2.547",
4
4
  "description": "Fullstack framework focused on user experience and ease of development.",
5
5
  "author": "OZ DAO <hello@ozdao.dev>",
6
6
  "license": "GPL-3.0-or-later",
@@ -1,105 +1,12 @@
1
- # Проблема с отображением лоадера при загрузке модулей
1
+ Переиименовать все в менеджеры - storeMaganer, wsManager, moduleManager и сделать одинаковый экспорт и имена ws.manager.js, store.manager.js, module.manager.js, i18n.manager.js
2
2
 
3
- ## Описание проблемы
4
- При переходе на роут, который требует загрузки нового модуля:
5
- 1. После клика на ссылку UI полностью блокируется
6
- 2. Начинается загрузка модуля (2-3 секунды)
7
- 3. Лоадер показывается только ПОСЛЕ загрузки модуля на мгновение
8
- 4. Затем происходит переход на новый роут
3
+ ну и в целом в store.js все сделать как это менеджер сторов названия
9
4
 
10
- **Ожидаемое поведение:** Лоадер должен показываться СРАЗУ после клика, до начала загрузки модулей.
5
+ import store from './views/classes/store.js';
6
+ import websockets from './views/classes/globals.websocket.js';
7
+ import { i18nManager } from '@martyrs/src/modules/globals/views/classes/globals.i18n.js';
8
+ import { moduleRegistry } from './views/classes/module-registry.js';
11
9
 
12
- ## Технические детали
13
-
14
- ### Архитектура загрузки модулей
15
- - **Файл:** `globals.app.js:89-119`
16
- - Модули загружаются динамически в `router.beforeEach` guard
17
- - Модули регистрируют роуты через `router.addRoute()` после загрузки
18
- - После загрузки возвращается `to.fullPath` для повторной навигации
19
-
20
- ### Условие показа лоадера
21
- - **Файл:** `Client.vue:16`
22
- - Условие: `v-if="!page || globals.state.loading"`
23
- - `page` - ref на текущий компонент страницы
24
- - `globals.state.loading` - глобальный флаг загрузки
25
-
26
- ## Корень проблемы
27
- Vue Router `beforeEach` guard блокирует все обновления DOM до своего завершения:
28
- - Guards выполняются синхронно и блокируют навигацию
29
- - Vue не может обновить DOM пока `beforeEach` не завершится
30
- - Даже установка `globals.state.loading = true` не приводит к рендерингу
31
-
32
- **Подтверждение из документации Vue Router:**
33
- > "Guards may be resolved asynchronously, and the navigation is considered pending before all hooks have been resolved"
34
-
35
- **GitHub issue vuejs/vue #9200:**
36
- > "Vue.nextTick doesn't seem to cover browser re-render"
37
-
38
- ## Что пробовали и не сработало
39
-
40
- ### 1. nextTick после установки loading флага
41
- ```javascript
42
- store.globals.state.loading = true;
43
- await nextTick();
44
- ```
45
- **Результат:** Не работает, т.к. nextTick работает с микротасками, которые выполняются ДО отрисовки браузером
46
-
47
- ### 2. requestAnimationFrame
48
- ```javascript
49
- store.globals.state.loading = true;
50
- await new Promise(resolve => requestAnimationFrame(resolve));
51
- ```
52
- **Результат:** Не работает, beforeEach все равно блокирует рендеринг
53
-
54
- ### 3. setTimeout с return false
55
- ```javascript
56
- setTimeout(async () => {
57
- // загрузка модулей
58
- router.push(to.fullPath);
59
- }, 0);
60
- return false;
61
- ```
62
- **Результат:** Приводит к 404, т.к. роуты еще не зарегистрированы
63
-
64
- ### 4. Watch на route.path в Client.vue
65
- ```javascript
66
- watch(() => route.path, () => {
67
- page.value = null;
68
- });
69
- ```
70
- **Результат:** Не работает, т.к. route.path меняется только ПОСЛЕ завершения beforeEach
71
-
72
- ### 5. Свой beforeEach в Client.vue
73
- ```javascript
74
- router.beforeEach((to, from) => {
75
- page.value = null;
76
- });
77
- ```
78
- **Результат:** Не работает, все beforeEach выполняются синхронно и блокируют рендеринг
79
-
80
- ### 6. Создание DOM элемента напрямую
81
- ```javascript
82
- const loader = document.createElement('div');
83
- document.body.appendChild(loader);
84
- ```
85
- **Результат:** Работает, но это хак, обходящий Vue реактивность
86
-
87
- ## Ограничения
88
- 1. **Нельзя загружать модули после навигации** - модули регистрируют роуты, без них будет 404
89
- 2. **Нельзя загружать модули вне beforeEach** - нужно гарантировать загрузку ДО навигации
90
- 3. **return to.fullPath необходим** - для повторной навигации с новыми роутами
91
-
92
- ## Возможные решения
93
-
94
- ### 1. Использовать HTML лоадер (не Vue компонент)
95
- Добавить лоадер прямо в index.html, показывать/скрывать через классы
96
-
97
- ### 2. Изменить архитектуру загрузки
98
- - Предзагружать все возможные роуты
99
- - Использовать другой подход к динамической регистрации
100
-
101
- ### 3. Использовать Web Workers
102
- Загружать модули в воркере, но это потребует полного рефакторинга
103
-
104
- ## Вывод
105
- Проблема фундаментальная: Vue Router beforeEach блокирует рендеринг, а мы обязаны загружать модули именно там из-за динамической регистрации роутов. Единственное рабочее решение - создавать лоадер в обход Vue (прямой DOM манипуляцией).
10
+ сюда же потом пойдет
11
+ -нотификейшен менеджер
12
+ -алерт менеджер
@@ -39,108 +39,8 @@ const props = defineProps({
39
39
  const router = useRouter()
40
40
  const route = useRoute()
41
41
 
42
- // Localization
43
- const text = {
44
- locale: 'en',
45
- messages: {
46
- en: {
47
- linkAppStore: 'https://play.google.com/store/apps/details?id=com.threestepsrental.app',
48
- linkGooglePlay: 'https://play.google.com/store/apps/details?id=com.threestepsrental.app',
49
- // Contact
50
- description: "3SR – Premium Video Gear Rentals for Filmmakers and Content Creators",
51
- contact: 'Contact',
52
- phone: 'Phone / WhatsApp',
53
- email: 'Email',
54
- hours: 'Hours',
55
- hours_text: 'Mon–Sun, 10:00–19:00',
56
- app: 'Get Our App',
57
-
58
- // Subscribe
59
- subscribe: 'Subscribe',
60
- subscribe_text: 'Get updates on new equipment and special offers',
61
- email_placeholder: 'Enter your email',
62
- follow: 'Follow Us',
63
-
64
- // Footer
65
- year: '2025 ',
66
- heart: "❤",
67
- copyright: 'Three Steps Studio Ltd. All Rights Reserved.',
68
- ozdao: 'Builded in OZ DAO',
69
-
70
- // Contact info
71
- phoneNumber: '+44 77 7878 4893',
72
- emailAddress: "info{'@'}3stepsprod.com",
73
-
74
- // Navigation columns
75
- navigationColumns: [
76
- {
77
- sections: [
78
- {
79
- title: 'Equipment',
80
- items: [
81
- { name: 'Cameras', url: 'products/categories/cameras' },
82
- { name: 'Lighting', url: 'products/categories/lighting-kits' },
83
- { name: 'Stabilizers', url: 'products/categories/stabilization-motion' },
84
- { name: 'Accessories', url: 'products/categories/accessories' }
85
- ]
86
- },
87
- {
88
- title: 'Services',
89
- items: [
90
- { name: 'Kits & Packages', url: 'products/categories/kits-packages' },
91
- { name: 'Studio Hire', url: 'products/categories/studio-hire' },
92
- { name: 'Delivery', url: 'products/categories/delivery' },
93
- { name: 'Production Help', url: 'products/categories/production-help' }
94
- ]
95
- }
96
- ]
97
- },
98
- {
99
- sections: [
100
- {
101
- title: 'Company',
102
- items: [
103
- { name: 'About Us', url: 'pages/about' },
104
- { name: 'Contact', url: 'pages/contact' },
105
- { name: 'FAQ', url: 'pages/faq' },
106
- { name: 'Blog', url: '/community' }
107
- ]
108
- },
109
- {
110
- title: 'Legal',
111
- items: [
112
- { name: 'Privacy Policy', url: 'pages/privacy-policy' },
113
- { name: 'Cookie Policy', url: 'pages/cookie-policy' },
114
- { name: 'Terms of Use', url: 'pages/terms-of-use' },
115
- { name: 'EULA', url: 'pages/eula' }
116
- ]
117
- }
118
- ]
119
- }
120
- ],
121
-
122
- // Social links
123
- socialLinks: [
124
- {
125
- name: 'IconInstagram',
126
- url: 'https://www.instagram.com/3stepsprod'
127
- },
128
- {
129
- name: 'IconYoutube',
130
- url: 'https://www.youtube.com/@threestepsproduction'
131
- },
132
- {
133
- name: 'IconWhatsapp',
134
- url: 'https://api.whatsapp.com/send/?phone=447778784893&text&type=phone_number&app_absent=0'
135
- }
136
- ]
137
- }
138
- }
139
- }
140
-
141
42
  const { t, te, tm } = useI18n({
142
- useScope: 'global',
143
- messages: text.messages
43
+ useScope: 'global'
144
44
  })
145
45
 
146
46
  // Component mapping for social icons
@@ -178,61 +78,61 @@ const iconComponents = {
178
78
 
179
79
  <!-- Contact Block -->
180
80
  <div class="col w-max-15r">
181
- <p class="p-semi t-medium mn-b-semi">{{ t('description') }}</p>
81
+ <p class="p-semi t-medium mn-b-semi">{{ t('footer.description') }}</p>
182
82
 
183
83
  <div class="mn-b-semi flex flex-column gap-small">
184
84
  <a
185
- :href="`tel:${t('phoneNumber').replace(/\s/g, '')}`"
85
+ :href="`tel:${t('footer.phoneNumber').replace(/\s/g, '')}`"
186
86
  class="flex mn-b-micro gap-micro flex-v-center transition-opacity hover-opacity-70"
187
87
  :class="theme === 'light' ? 't-black' : 't-white'"
188
88
  >
189
89
  <IconPhone class="i-regular" :fill="theme === 'light' ? 'rgb(var(--black))' : 'rgb(var(--white))'" />
190
- <span class="t-small">{{ t('phoneNumber') }}</span>
90
+ <span class="t-small">{{ t('footer.phoneNumber') }}</span>
191
91
  </a>
192
92
 
193
93
  <a
194
- :href="`mailto:${t('emailAddress')}`"
94
+ :href="`mailto:${t('footer.emailAddress')}`"
195
95
  class="flex mn-b-micro gap-micro flex-v-center transition-opacity hover-opacity-70"
196
96
  :class="theme === 'light' ? 't-black' : 't-white'"
197
97
  >
198
98
  <IconEmail class="i-regular" :fill="theme === 'light' ? 'rgb(var(--black))' : 'rgb(var(--white))'" />
199
- <span class="t-small">{{ t('emailAddress') }}</span>
99
+ <span class="t-small">{{ t('footer.emailAddress') }}</span>
200
100
  </a>
201
101
 
202
102
  <div class="flex mn-b-micro gap-micro flex-v-center">
203
103
  <IconTime class="i-regular" :fill="theme === 'light' ? 'rgb(var(--black))' : 'rgb(var(--white))'" />
204
- <span class="t-small">{{ t('hours_text') }}</span>
104
+ <span class="t-small">{{ t('footer.hours_text') }}</span>
205
105
  </div>
206
106
  </div>
207
107
 
208
- <h4 class="h5 t-medium mn-b-regular">{{ t('app') }}</h4>
108
+ <h4 class="h5 t-medium mn-b-regular">{{ t('footer.app') }}</h4>
209
109
  <div class="w-100 flex-nowrap flex gap-thin">
210
110
  <a
211
- v-if="te('linkAppStore') || te('label')"
212
- :href="te('linkAppStore') ? t('linkAppStore') : null"
213
- :target="te('linkAppStore') ? '_blank' : null"
111
+ v-if="te('footer.linkAppStore') || te('footer.label')"
112
+ :href="te('footer.linkAppStore') ? t('footer.linkAppStore') : null"
113
+ :target="te('footer.linkAppStore') ? '_blank' : null"
214
114
  class="pos-relative w-100 h-100"
215
115
  >
216
116
  <span
217
- v-if="te('label')"
117
+ v-if="te('footer.label')"
218
118
  class="z-index-2 radius-medium bg-main t-medium uppercase pd-thin pos-absolute pos-r-10-negative pos-t-10-negative"
219
119
  >
220
- {{ t('label') }}
120
+ {{ t('footer.label') }}
221
121
  </span>
222
122
  <LabelAppStore class="w-100 h-max" alt="Download on App Store"/>
223
123
  </a>
224
124
 
225
125
  <a
226
- v-if="te('linkGooglePlay') || te('label')"
227
- :href="te('linkGooglePlay') ? t('linkGooglePlay') : null"
228
- :target="te('linkGooglePlay') ? '_blank' : null"
126
+ v-if="te('footer.linkGooglePlay') || te('footer.label')"
127
+ :href="te('footer.linkGooglePlay') ? t('footer.linkGooglePlay') : null"
128
+ :target="te('footer.linkGooglePlay') ? '_blank' : null"
229
129
  class="pos-relative w-100 h-100"
230
130
  >
231
131
  <span
232
- v-if="te('label')"
132
+ v-if="te('footer.label')"
233
133
  class="z-index-2 pd-thin radius-medium bg-main t-medium uppercase pos-absolute pos-r-10-negative pos-t-10-negative"
234
134
  >
235
- {{ t('label') }}
135
+ {{ t('footer.label') }}
236
136
  </span>
237
137
  <LabelGooglePlay class="w-100 h-max" alt="Download on Google Play"/>
238
138
  </a>
@@ -241,7 +141,7 @@ const iconComponents = {
241
141
 
242
142
  <!-- Navigation Columns -->
243
143
  <div class="cols-2 gap-big">
244
- <div v-for="(column, colIndex) in tm('navigationColumns')" :key="colIndex" class="flex flex-column gap-medium">
144
+ <div v-for="(column, colIndex) in tm('footer.navigationColumns')" :key="colIndex" class="flex flex-column gap-medium">
245
145
  <div v-for="(section, sectionIndex) in column.sections" :key="sectionIndex" class="">
246
146
  <h4 class="h5 t-medium mn-b-regular">{{ section.title }}</h4>
247
147
  <nav>
@@ -263,8 +163,8 @@ const iconComponents = {
263
163
 
264
164
  <!-- Subscribe Block -->
265
165
  <div class="col">
266
- <h4 class="h5 t-medium mn-b-regular">{{ t('subscribe') }}</h4>
267
- <p class="t-small mn-b-small t-transp">{{ t('subscribe_text') }}</p>
166
+ <h4 class="h5 t-medium mn-b-regular">{{ t('footer.subscribe') }}</h4>
167
+ <p class="t-small mn-b-small t-transp">{{ t('footer.subscribe_text') }}</p>
268
168
 
269
169
  <FieldSubscribeNewsletter
270
170
  :action="''"
@@ -273,11 +173,11 @@ const iconComponents = {
273
173
  class="d-inline-flex mn-b-medium bg-light t-black w-100"
274
174
  />
275
175
 
276
- <h4 class="h5 t-medium mn-b-regular">{{ t('follow') }}</h4>
176
+ <h4 class="h5 t-medium mn-b-regular">{{ t('footer.follow') }}</h4>
277
177
  <!-- Social Links -->
278
178
  <div class="flex gap-thin">
279
179
  <a
280
- v-for="social in tm('socialLinks')"
180
+ v-for="social in tm('footer.socialLinks')"
281
181
  :key="social.name"
282
182
  :href="social.url"
283
183
  target="_blank"
@@ -321,14 +221,14 @@ const iconComponents = {
321
221
  >
322
222
  <!-- Copyright -->
323
223
  <p class="t-small t-medium uppercase">
324
- {{ t('year') }}
325
- <span class="t-main copyleft">{{ t('heart') }}</span>
326
- {{ t('copyright') }}
224
+ {{ t('footer.year') }}
225
+ <span class="t-main copyleft">{{ t('footer.heart') }}</span>
226
+ {{ t('footer.copyright') }}
327
227
  </p>
328
228
 
329
229
  <a href="https://ozdao.dev" target="_blank" rel="noopener" class="flex-nowrap flex-v-center flex t-medium gap-thin br-1px br-light pd-thin radius-thin">
330
230
  <Logotype class="h-1r w-auto"/>
331
- <span>{{ t('ozdao') }}</span>
231
+ <span>{{ t('footer.ozdao') }}</span>
332
232
  </a>
333
233
  </div>
334
234
  </footer>
@@ -3,7 +3,7 @@ import Notifications from '../components/pages/Notifications.vue';
3
3
  import NotificationPreferences from '../components/sections/NotificationPreferences.vue';
4
4
 
5
5
  const nofitications = {
6
- path: 'notifications',
6
+ path: '/notifications',
7
7
  component: NotificationsLayout,
8
8
  children: [
9
9
  {
@@ -1 +0,0 @@
1
- {"version":3,"file":"Button.vue2.cjs","sources":["../../../../../src/components/Button/Button.vue"],"sourcesContent":["<script setup>\nimport { ref } from 'vue'\n\nimport Loader from '@martyrs/src/components/Loader/Loader.vue'\n\nimport IconCheckmark from '@martyrs/src/modules/icons/navigation/IconCheckmark.vue';\nimport IconCross from '@martyrs/src/modules/icons/navigation/IconCross.vue';\n\nconst props = defineProps({\n submit: {\n type: Function,\n default: async () => { console.log('Button click.') }\n },\n text: {\n type: Object,\n default: () => ({\n success: null,\n error: null\n })\n },\n counter: {\n type: Object\n },\n callback: {\n type: Function,\n default: async () => { console.log('Button callback.') }\n },\n callbackDelay: {\n type: Number,\n default: 750\n },\n showSucces: {\n type: Boolean,\n default: true\n },\n showLoader: {\n type: Boolean,\n default: true\n },\n validation: {\n type: Boolean,\n default: false\n },\n})\n\nconst emits = defineEmits(['error'])\n\nconst button = ref(null)\nconst error = ref(null)\nconst loading = ref(false)\nconst finished = ref(false)\n\nasync function Submit() {\n console.log('click')\n \n button.value.style['pointer-events'] = 'none'\n error.value = null\n loading.value = true\n\n // Функция для сброса состояния кнопки\n const resetButton = () => {\n if (button.value) {\n button.value.style.pointerEvents = 'auto'\n loading.value = false\n finished.value = false\n error.value = null\n }\n }\n\n try {\n await props.submit()\n\n button.value.classList.replace('bg-main', 'bg-second')\n loading.value = false\n\n // Используем функцию сброса состояния кнопки здесь\n if (props.showSucces) { \n finished.value = true\n setTimeout(() => {\n resetButton()\n button.value.classList.replace('bg-second', 'bg-main')\n }, 500)\n } else {\n resetButton()\n button.value.classList.replace('bg-second', 'bg-main')\n }\n\n // Если есть callback, мы также установим таймер для его вызова\n if (props.callback) setTimeout(() => props.callback(), props.callbackDelay)\n\n } catch (err) {\n emits('error', err)\n // Если возникла ошибка, мы изменяем стили и устанавливаем сообщение об ошибке\n button.value.classList.replace('bg-main', 'bg-fourth-nano')\n loading.value = false\n error.value = true\n \n // После задержки снова сбрасываем состояние кнопки\n setTimeout(() => {\n resetButton()\n // Так как класс кнопки был изменен, вернем его в исходное состояние\n button.value.classList.replace('bg-fourth-nano', 'bg-main')\n }, 1330)\n }\n}\n</script>\n\n<template>\n <button \n @click.stop=\"Submit\"\n :disabled=\"validation\"\n ref=\"button\"\n\t\tclass=\"button\"\n :class=\"{ 'button--disabled': loading || validation }\"\n >\n <Transition name=\"content\" mode=\"out-in\">\n <!-- Default slot content -->\n <span v-if=\"!loading && !error && !finished || !showLoader\" class=\"button-content\">\n <slot></slot>\n </span>\n <!-- Loading state -->\n <Loader v-else-if=\"loading && !error && showLoader\" class=\"icon button-content pos-relative pos-t-0 pos-l-0 loading\"/>\n <!-- Success state -->\n <span v-else-if=\"finished && showSucces\" class=\"button-content t-semi t-center w-100 loading t-black\">\n <template v-if=\"text.success\">\n {{ text.success }}\n </template>\n <IconCheckmark v-else class=\"icon\" />\n </span>\n <!-- Error state -->\n <span v-else-if=\"error\" class=\"button-content t-center w-100 error\">\n <template v-if=\"text.error\">\n {{ text.error }}\n </template>\n <IconCross v-else class=\"icon\" />\n </span>\n </Transition>\n \n <!-- Counter -->\n <div v-if=\"counter\" class=\"button-counter flex flex-center\">\n <span>{{ counter }}</span>\n </div>\n </button>\n</template>\n\n<style lang=\"scss\">\nbutton[disabled] {\n opacity: 0.75 !important;\n pointer-events: none !important;\n cursor: default !important;\n color: rgba(var(--dark), 0.33) !important;\n background: rgba(var(--light), 1) !important;\n}\n\na.button {\n text-box: trim-both cap alphabetic;\n}\n\n.button {\n display: flex;\n padding: var(--small);\n border-radius: var(--small);\n text-box: trim-both cap alphabetic;\n transform: scale(1);\n opacity: 1;\n align-items: center;\n justify-content: center;\n color: black;\n text-align: center;\n text-transform: uppercase;\n font-size: 1rem;\n letter-spacing: 5%;\n transition: all 0.33s ease;\n\n &:hover {\n cursor: pointer;\n opacity: 0.9;\n }\n\n &:active {\n transform: scale(0.95);\n }\n\n &-small {\n padding: 0.75rem;\n border-radius: 0.5rem;\n height: fit-content;\n }\n\n .button-counter {\n position: absolute;\n right: -8px;\n bottom: -8px;\n background: yellow;\n height: 16px;\n border-radius: 16px;\n width: 16px;\n font-weight: 500;\n text-align: center;\n line-height: 16px;\n font-size: 10px;\n }\n}\n\n.button-content {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n}\n\n.icon {\n width: 1rem;\n height: 1rem;\n}\n\n/* Vue Transitions */\n.content-enter-active,\n.content-leave-active {\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.content-enter-from {\n opacity: 0;\n transform: translateY(8px) scale(0.95);\n}\n\n.content-leave-to {\n opacity: 0;\n transform: translateY(-8px) scale(0.95);\n}\n\n.content-enter-to,\n.content-leave-from {\n opacity: 1;\n transform: translateY(0) scale(1);\n}\n</style>"],"names":["ref"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,UAAM,QAAQ;AAqCd,UAAM,QAAQ;AAEd,UAAM,SAASA,IAAAA,IAAI,IAAI;AACvB,UAAM,QAAQA,IAAAA,IAAI,IAAI;AACtB,UAAM,UAAUA,IAAAA,IAAI,KAAK;AACzB,UAAM,WAAWA,IAAAA,IAAI,KAAK;AAE1B,mBAAe,SAAS;AACtB,cAAQ,IAAI,OAAO;AAEnB,aAAO,MAAM,MAAM,gBAAgB,IAAI;AACvC,YAAM,QAAQ;AACd,cAAQ,QAAQ;AAGhB,YAAM,cAAc,MAAM;AACxB,YAAI,OAAO,OAAO;AAChB,iBAAO,MAAM,MAAM,gBAAgB;AACnC,kBAAQ,QAAQ;AAChB,mBAAS,QAAQ;AACjB,gBAAM,QAAQ;AAAA,QAChB;AAAA,MACF;AAEA,UAAI;AACF,cAAM,MAAM,OAAM;AAElB,eAAO,MAAM,UAAU,QAAQ,WAAW,WAAW;AACrD,gBAAQ,QAAQ;AAGhB,YAAI,MAAM,YAAY;AACpB,mBAAS,QAAQ;AACjB,qBAAW,MAAM;AACf,wBAAW;AACX,mBAAO,MAAM,UAAU,QAAQ,aAAa,SAAS;AAAA,UACvD,GAAG,GAAG;AAAA,QACR,OAAO;AACL,sBAAW;AACX,iBAAO,MAAM,UAAU,QAAQ,aAAa,SAAS;AAAA,QACvD;AAGA,YAAI,MAAM,SAAU,YAAW,MAAM,MAAM,SAAQ,GAAI,MAAM,aAAa;AAAA,MAE5E,SAAS,KAAK;AACZ,cAAM,SAAS,GAAG;AAElB,eAAO,MAAM,UAAU,QAAQ,WAAW,gBAAgB;AAC1D,gBAAQ,QAAQ;AAChB,cAAM,QAAQ;AAGd,mBAAW,MAAM;AACf,sBAAW;AAEX,iBAAO,MAAM,UAAU,QAAQ,kBAAkB,SAAS;AAAA,QAC5D,GAAG,IAAI;AAAA,MACT;AAAA,IACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Feed.vue2.cjs","sources":["../../../../../src/components/Feed/Feed.vue"],"sourcesContent":["<template>\n <div v-if=\"search || date || (sort && !sort.hideButton)\" style=\"transform: scale(1);\" class=\"mn-b-thin pos-relative z-index-2 pos-relative flex-nowrap flex gap-thin\">\n\n <BlockSearch \n v-if=\"search\"\n :placeholder=\"search.placeholder || 'Search...'\"\n :class=\"search.class || 'bg-light'\"\n @search=\"updateSearch\"\n :autofocus=\"search.autofocus\"\n />\n\n <FiltersBar\n v-if=\"filter\"\n v-model=\"filter.selected\"\n :filters=\"filterConfig\"\n :class=\"filter.class || 'mobile-only'\"\n />\n\n <Dropdown \n v-if=\"date\"\n :label=\"{\n component: ButtonDate,\n props: { date: date }\n }\" \n :class=\"date.class || 'bg-light'\"\n class=\"flex-child flex-child-shrink-0 pd-r-small pd-l-small pd-thin bg-light radius-medium\"\n :align=\"search ? 'right' : 'left'\"\n >\n\n <Calendar\n v-model:date=\"date\"\n :locale=\"$i18n.locale\"\n :allowRange=\"true\"\n class=\"radius-medium w-100 o-hidden bg-light\"\n />\n </Dropdown> \n\n <Dropdown \n v-if=\"sort && !sort.hideButton\"\n :label=\"{\n component: ButtonSort,\n props: { order: sort.order },\n class: 'w-1r'\n }\" \n :class=\"sort.class || 'bg-light'\"\n class=\"radius-medium aspect-1x1 h-100\"\n :align=\"search ? 'right' : 'left'\"\n >\n\n <BlockSorting\n v-model:param=\"sort.param\"\n v-model:order=\"sort.order\"\n :options=\"sort.options\"\n class=\"h-100 pd-small radius-medium t-white bg-black\"\n />\n </Dropdown> \n\n <!-- Actions -->\n <template\n v-if=\"actions.length\"\n >\n <template v-for=\"action in actions\" :key=\"action.key\">\n <div \n :class=\"action.class || 'bg-light'\"\n class=\"flex-center flex pd-thin bg-light radius-medium aspect-1x1 h-100\"\n >\n <component\n :is=\"action.component\"\n @click=\"action.handler\"\n class=\"w-1r h-auto\"\n >\n </component>\n\n </div>\n </template>\n </template>\n </div>\n\n <TransitionGroup \n v-if=\"isLoading && !keepSlotVisible\"\n tag=\"ul\" \n name=\"scaleTransition\" \n class=\"pos-relative z-index-1\"\n :class=\"$attrs.class\"\n >\n <Skeleton\n v-if=\"isLoading && !skeleton?.hide\"\n v-for=\"i in currentLimit\" \n :structure=\"skeleton.structure\"\n :horizontal=\"skeleton.horizontal\"\n :loading=\"skeleton.apply_to_slot\"\n :key=\"'skeleton-' + i\"\n :class=\"replaceClasses('radius-medium bg-light pd-thin flex-child-default o-hidden d-block', skeleton.class)\"\n />\n <Loader v-if=\"isLoading && skeleton?.hide\"/>\n </TransitionGroup>\n\n <TransitionGroup \n tag=\"ul\" \n v-else-if=\"itemsList.length < 1\"\n name=\"feed\"\n >\n <EmptyState\n v-if=\"!isLoading && itemsList.length < 1\"\n :title=\"states.empty.title\"\n :description=\"states.empty.description\"\n :action=\"states.empty.action\"\n :callback=\"states.empty.callback\"\n :class=\"replaceClasses('pd-medium bg-light radius-medium', states.empty.class)\"\n />\n </TransitionGroup>\n\n <TransitionGroup \n v-else-if=\"!keepSlotVisible || !isLoading\"\n tag=\"ul\" \n name=\"feed\"\n :class=\"$attrs.class\"\n >\n <slot\n :items=\"itemsList\"\n >\n </slot>\n </TransitionGroup>\n\n <!-- Slot visible with overlay loader -->\n <div v-else class=\"pos-relative\">\n <TransitionGroup \n tag=\"ul\" \n name=\"feed\"\n :class=\"$attrs.class\"\n >\n <slot\n :items=\"itemsList\"\n >\n </slot>\n </TransitionGroup>\n \n <!-- Overlay loader -->\n <div \n v-if=\"isLoading && keepSlotVisible\"\n class=\"pos-absolute pos-t-0 pos-l-0 w-100 h-100 flex-center bg-white-transp-90 z-index-10\"\n >\n <Loader />\n </div>\n </div>\n\n <button\n v-if=\"showLoadMore && hasMoreItems && itemsList.length > 0 && !isLoadingExtra\"\n @click=\"loadMoreItems\"\n class=\"col-w-100 mn-t-thin w-100 t-black bg-main button\"\n >\n Load More\n </button>\n\n <div v-else key=\"sentinel\" ref=\"sentinel\" class=\"sentinel\"></div> \n\n <div\n v-if=\"isLoadingExtra\"\n class=\"col-w-100 w-100 pos-relative\"\n >\n <Loader/>\n </div>\n \n\n</template>\n\n<script setup>\nimport { ref, computed, onMounted, onUnmounted, watch } from 'vue';\nimport { useGlobalMixins } from '@martyrs/src/modules/globals/views/mixins/mixins.js';\n\nimport SkeletonEvent from '@martyrs/src/modules/icons/skeletons/SkeletonEvent.vue'\n\nimport Loader from '@martyrs/src/components/Loader/Loader.vue';\nimport Skeleton from '@martyrs/src/components/Skeleton/Skeleton.vue';\nimport EmptyState from '@martyrs/src/components/EmptyState/EmptyState.vue';\nimport Dropdown from \"@martyrs/src/components/Dropdown/Dropdown.vue\";\nimport Calendar from '@martyrs/src/components/Calendar/Calendar.vue'\nimport BottomSheet from '@martyrs/src/components/BottomSheet/BottomSheet.vue';\n\nimport BlockSearch from '@martyrs/src/modules/globals/views/components/blocks/BlockSearch.vue'\nimport BlockSorting from '@martyrs/src/modules/globals/views/components/blocks/BlockSorting.vue'\n\nimport FiltersBar from '@martyrs/src/modules/globals/views/components/sections/Filters.vue'\n\nimport ButtonSort from '@martyrs/src/modules/globals/views/components/elements/ButtonSort.vue'\nimport ButtonDate from '@martyrs/src/modules/globals/views/components/elements/ButtonDate.vue'\n\nimport IconFilter from '@martyrs/src/modules/icons/navigation/IconFilter.vue'\nimport IconEvents from '@martyrs/src/modules/icons/entities/IconEvents.vue'\n\nconst { replaceClasses } = useGlobalMixins();\n\nconst search = defineModel('search')\nconst sort = defineModel('sort')\nconst filter = defineModel('filter')\nconst date = defineModel('date')\nconst items = defineModel('items')\n\n// Внутреннее хранилище для случая, когда v-model:items не передан\nconst internalItems = ref([])\n\n// Элегантное решение через computed\nconst itemsList = computed({\n get: () => items.value ?? internalItems.value,\n set: (val) => {\n if (items.value !== undefined) {\n items.value = val\n } else {\n internalItems.value = val\n }\n }\n})\n\nconst filterConfig = computed(() => {\n if (!filter.value?.options) return []\n \n return filter.value.options.map(opt => ({\n key: opt.value,\n title: opt.title,\n type: 'options',\n options: opt.options || [],\n defaultValue: null\n }))\n})\n\n// Пропсы\nconst props = defineProps({\n showLoadMore: {\n type: Boolean,\n default: true\n },\n LoadMore: {\n type: Boolean,\n default: true\n },\n search: {\n type: [Boolean, Object],\n default: false\n },\n states: {\n type: Object,\n default: () => ({\n empty: {\n title: 'Nothing found',\n description: 'Sorry, nothing found',\n },\n }),\n },\n actions: {\n type: Array,\n default: () => []\n },\n skeleton: {\n type: Object,\n default: () => ({\n hide: false,\n horizontal: false,\n structure: [\n { block: 'text', size: 'medium' },\n { block: 'text', size: 'large' },\n { block: 'button', size: 'small' }\n ]\n }),\n \n },\n store: {\n type: Object,\n default: () => ({\n read: Function,\n state: Object,\n }),\n },\n external: {\n type: Boolean,\n default: false\n },\n options: {\n type: Object,\n default: () => ({\n category: null,\n limit: 10, \n skip: 0 ,\n owner: null,\n creator: null,\n customer: null,\n user: null,\n status: null,\n period: null,\n contain: null,\n }),\n },\n keepSlotVisible: {\n type: Boolean,\n default: false\n },\n});\n \nconst hasMoreItems = ref(false);\n\nlet isLoading = ref(true);\nlet isLoadingExtra = ref(false);\nlet sentinel = ref(null)\n\nlet currentSkip = ref(props.options.skip ? props.options.skip : 0);\nlet currentLimit = ref(props.options.limit ? props.options.limit : 10);\n\nlet currentSearch = ref('');\nlet isSearching = ref(false);\n\nlet requestId = 0;\n\nfunction debounce(fn, delay) {\n let timeoutId = null;\n return (...args) => {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => fn(...args), delay);\n };\n}\n\nconst debouncedSearch = debounce((value) => {\n isSearching.value = true;\n currentSearch.value = value;\n currentSkip.value = 0;\n currentLimit.value = 10;\n fetchItems();\n}, 500);\n\nfunction updateSearch(search) {\n debouncedSearch(search);\n}\n\nconst removeNullValues = (obj) => {\n return Object.fromEntries(\n Object.entries(obj).filter(([_, value]) => value != null)\n );\n};\n\nconst loadMoreItems = async () => {\n if (!hasMoreItems.value || isLoadingExtra.value) {\n return;\n }\n \n isLoadingExtra.value = true;\n \n const currentRequestId = ++requestId;\n\n currentSkip.value += currentLimit.value;\n \n try {\n const allParams = {\n skip: currentSkip.value,\n limit: currentLimit.value,\n search: currentSearch.value,\n dateStart: date.value?.start,\n dateEnd: date.value?.end,\n sortParam: sort.value?.param,\n sortOrder: sort.value?.order,\n ...props.options\n };\n\n const params = removeNullValues(allParams);\n\n const data = await props.store.read(params);\n\n if (currentRequestId !== requestId) {\n return;\n }\n\n if (data.length === 0) {\n hasMoreItems.value = false;\n } else if (data.length < currentLimit.value) {\n hasMoreItems.value = false;\n } else {\n hasMoreItems.value = true;\n }\n\n // Элегантное обновление через computed setter\n itemsList.value = [...itemsList.value, ...data];\n \n } catch (error) {\n console.error('Load more error:', error);\n } finally {\n if (currentRequestId === requestId) {\n isLoadingExtra.value = false;\n }\n }\n};\n\nconst fetchItems = async () => {\n isLoading.value = true;\n \n const currentRequestId = ++requestId;\n \n if (isSearching.value) {\n itemsList.value = [];\n isSearching.value = false;\n }\n \n try {\n const allParams = {\n skip: currentSkip.value,\n limit: currentLimit.value,\n search: currentSearch.value,\n dateStart: date.value?.start,\n dateEnd: date.value?.end,\n sortParam: sort.value?.param,\n sortOrder: sort.value?.order,\n ...props.options\n };\n\n const params = removeNullValues(allParams);\n\n const data = await props.store.read(params);\n\n if (currentRequestId !== requestId) {\n return;\n }\n\n if (data.length === 0) {\n hasMoreItems.value = false;\n } else if (data.length < currentLimit.value) {\n hasMoreItems.value = false;\n } else {\n hasMoreItems.value = true;\n }\n\n // Элегантное обновление через computed setter\n itemsList.value = data;\n \n } catch (error) {\n console.error('Fetch error:', error);\n } finally {\n if (currentRequestId === requestId) {\n isLoading.value = false;\n }\n }\n};\n\nwatch(\n [() => props.external, () => date.value, () => ({...sort.value}), () => ({...props.options})],\n ([newExternal, newDate, newSort, newOptions], [oldExternal, oldDate, oldSort, oldOptions]) => {\n if (\n newExternal !== oldExternal ||\n newDate !== oldDate ||\n newSort?.order !== oldSort?.order ||\n newSort?.param !== oldSort?.param ||\n JSON.stringify(newOptions) !== JSON.stringify(oldOptions)\n ) {\n currentSkip.value = 0;\n fetchItems();\n }\n },\n { deep: true }\n);\n\nlet observer = null\n\nonMounted(async () => {\n await fetchItems()\n\n if (typeof window !== 'undefined' && !props.showLoadMore && props.LoadMore) {\n observer = new IntersectionObserver(entries => {\n if (entries.some(entry => entry.isIntersecting)) {\n loadMoreItems()\n }\n })\n\n if (sentinel.value) observer.observe(sentinel.value)\n }\n});\n\nonUnmounted(() => {\n if (observer) {\n observer.disconnect();\n }\n});\n</script>\n\n<style>\n.feed-move,\n.feed-enter-active,\n.feed-leave-active {\n transition: all 0.5s ease;\n}\n\n.feed-enter-from,\n.feed-leave-to {\n opacity: 0;\n transform: translateY(30px);\n}\n\n.feed-leave-active {\n position: absolute;\n}\n</style>"],"names":["useGlobalMixins","_useModel","ref","computed","search","watch","onMounted","onUnmounted"],"mappings":"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"}