@ozdao/martyrs 0.2.584 → 0.2.586

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 (436) hide show
  1. package/dist/auth.server.js +161 -96
  2. package/dist/{authJwt-J1csaMWA.js → authJwt-DKbMMjw0.js} +33 -0
  3. package/dist/builder.js +2 -0
  4. package/dist/chats.server.js +2 -2
  5. package/dist/community.server.js +1 -1
  6. package/dist/core.server.js +191 -2
  7. package/dist/{core.websocket-C2FxNmZ1.js → core.websocket-Cl76z2wT.js} +41 -5
  8. package/dist/{crud-q1ye5IhV.js → crud-DpOXTZep.js} +1 -1
  9. package/dist/events.server.js +2 -2
  10. package/dist/files.server.js +1 -1
  11. package/dist/gallery.server.js +1 -1
  12. package/dist/index-kvBwwb0w.js +427 -0
  13. package/dist/inventory.server.js +2 -2
  14. package/dist/{mailing-DuEFRsa3.js → mailing-DT7nbNjZ.js} +16 -3
  15. package/dist/{main-fmp55tJF.js → main-BIf-WirR.js} +864 -865
  16. package/dist/marketplace.server.js +1 -1
  17. package/dist/martyrs/dist/{main-fmp55tJF.js → main-BIf-WirR.js} +193 -38
  18. package/dist/martyrs/dist/main-BIf-WirR.js.map +1 -0
  19. package/dist/martyrs/dist/{web-BDuQSQKS.js → web-O7lXcjg0.js} +2 -2
  20. package/dist/martyrs/dist/{web-BDuQSQKS.js.map → web-O7lXcjg0.js.map} +1 -1
  21. package/dist/martyrs/src/components/Button/{Button.vue2.js → Button.vue.js} +8 -7
  22. package/dist/martyrs/src/components/Button/Button.vue.js.map +1 -0
  23. package/dist/martyrs/src/components/EditImages/{EditImages.vue2.js → EditImages.vue.js} +2 -2
  24. package/dist/martyrs/src/components/EditImages/EditImages.vue.js.map +1 -0
  25. package/dist/martyrs/src/components/Feed/Feed.vue.js +1 -1
  26. package/dist/martyrs/src/components/FieldBig/FieldBig.vue.js +1 -1
  27. package/dist/martyrs/src/components/Loader/Loader.vue.js +1 -1
  28. package/dist/martyrs/src/components/Loader/Loader.vue.js.map +1 -1
  29. package/dist/martyrs/src/components/Spoiler/{Spoiler.vue2.js → Spoiler.vue.js} +2 -2
  30. package/dist/martyrs/src/components/Spoiler/Spoiler.vue.js.map +1 -0
  31. package/dist/martyrs/src/components/Tab/{Tab.vue.js → Tab.vue2.js} +2 -2
  32. package/dist/martyrs/src/components/Tab/Tab.vue2.js.map +1 -0
  33. package/dist/martyrs/src/components/Tooltip/Tooltip.vue2.js +17 -22
  34. package/dist/martyrs/src/components/Tooltip/Tooltip.vue2.js.map +1 -1
  35. package/dist/martyrs/src/modules/auth/auth.client.js +18 -24
  36. package/dist/martyrs/src/modules/auth/auth.client.js.map +1 -1
  37. package/dist/martyrs/src/modules/auth/views/components/blocks/OtpDialog.vue.js +178 -0
  38. package/dist/martyrs/src/modules/auth/views/components/blocks/OtpDialog.vue.js.map +1 -0
  39. package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js +2 -2
  40. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +104 -77
  41. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js.map +1 -1
  42. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileBlogposts.vue.js +1 -1
  43. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.js +198 -14
  44. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.js.map +1 -1
  45. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.js +1 -1
  46. package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js +71 -30
  47. package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js.map +1 -1
  48. package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js +3 -3
  49. package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js.map +1 -1
  50. package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js +87 -31
  51. package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js.map +1 -1
  52. package/dist/martyrs/src/modules/auth/views/plugins/otp.plugin.js +100 -0
  53. package/dist/martyrs/src/modules/auth/views/plugins/otp.plugin.js.map +1 -0
  54. package/dist/martyrs/src/modules/auth/views/router/auth.router.js +2 -31
  55. package/dist/martyrs/src/modules/auth/views/router/auth.router.js.map +1 -1
  56. package/dist/martyrs/src/modules/auth/views/router/users.router.js +0 -14
  57. package/dist/martyrs/src/modules/auth/views/router/users.router.js.map +1 -1
  58. package/dist/martyrs/src/modules/auth/views/store/auth.js +1 -56
  59. package/dist/martyrs/src/modules/auth/views/store/auth.js.map +1 -1
  60. package/dist/martyrs/src/modules/auth/views/store/users.js +5 -1
  61. package/dist/martyrs/src/modules/auth/views/store/users.js.map +1 -1
  62. package/dist/martyrs/src/modules/backoffice/backoffice.client.js +3 -15
  63. package/dist/martyrs/src/modules/backoffice/backoffice.client.js.map +1 -1
  64. package/dist/martyrs/src/modules/backoffice/configs/navigation.backoffice.config.js +99 -0
  65. package/dist/martyrs/src/modules/backoffice/configs/navigation.backoffice.config.js.map +1 -0
  66. package/dist/martyrs/src/modules/backoffice/{backoffice.router.js → router/backoffice.router.js} +9 -7
  67. package/dist/martyrs/src/modules/backoffice/router/backoffice.router.js.map +1 -0
  68. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js +7 -1
  69. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js.map +1 -1
  70. package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js +1 -1
  71. package/dist/martyrs/src/modules/core/core.client.js.map +1 -1
  72. package/dist/martyrs/src/modules/core/views/classes/core.app.js +5 -1
  73. package/dist/martyrs/src/modules/core/views/classes/core.app.js.map +1 -1
  74. package/dist/martyrs/src/modules/core/views/components/blocks/CardHeader.vue.js +0 -1
  75. package/dist/martyrs/src/modules/core/views/components/blocks/CardHeader.vue.js.map +1 -1
  76. package/dist/martyrs/src/modules/core/views/components/blocks/PopupAuth.vue.js +1 -1
  77. package/dist/martyrs/src/modules/core/views/components/blocks/PopupDateSelector.vue.js +1 -1
  78. package/dist/martyrs/src/modules/core/views/components/elements/OnlineIndicator.vue.js +74 -0
  79. package/dist/martyrs/src/modules/core/views/components/elements/OnlineIndicator.vue.js.map +1 -0
  80. package/dist/martyrs/src/modules/core/views/components/layouts/App.vue.js.map +1 -1
  81. package/dist/martyrs/src/modules/core/views/components/layouts/Client.vue.js +77 -67
  82. package/dist/martyrs/src/modules/core/views/components/layouts/Client.vue.js.map +1 -1
  83. package/dist/martyrs/src/modules/core/views/components/pages/404.vue.js +76 -7
  84. package/dist/martyrs/src/modules/core/views/components/pages/404.vue.js.map +1 -1
  85. package/dist/martyrs/src/modules/core/views/components/partials/Header.vue.js +1 -1
  86. package/dist/martyrs/src/modules/core/views/components/partials/Navigation.vue.js +1 -1
  87. package/dist/martyrs/src/modules/core/views/components/partials/NavigationBar.vue.js +1 -1
  88. package/dist/martyrs/src/modules/core/views/components/sections/{Filters.vue2.js → Filters.vue.js} +2 -2
  89. package/dist/martyrs/src/modules/core/views/components/sections/Filters.vue.js.map +1 -0
  90. package/dist/martyrs/src/modules/core/views/components/sections/SectionPageTitle.vue.js +1 -1
  91. package/dist/martyrs/src/modules/core/views/store/core.store.js +1 -0
  92. package/dist/martyrs/src/modules/core/views/store/core.store.js.map +1 -1
  93. package/dist/martyrs/src/modules/core/views/utils/vue-app-renderer.js +2 -1
  94. package/dist/martyrs/src/modules/core/views/utils/vue-app-renderer.js.map +1 -1
  95. package/dist/martyrs/src/modules/events/components/elements/ButtonCheck.vue.js +1 -1
  96. package/dist/martyrs/src/modules/events/components/elements/ButtonJoin.vue.js +1 -1
  97. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +2 -2
  98. package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js +1 -1
  99. package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +2 -1
  100. package/dist/martyrs/src/modules/events/components/pages/Event.vue.js.map +1 -1
  101. package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.js +1 -1
  102. package/dist/martyrs/src/modules/events/components/sections/EditTickets.vue.js +1 -1
  103. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +2 -2
  104. package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.js +1 -1
  105. package/dist/martyrs/src/modules/inventory/components/forms/ColumnSettingsMenu.vue.js +1 -1
  106. package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.js +1 -1
  107. package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.js +1 -1
  108. package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js +1 -1
  109. package/dist/martyrs/src/modules/landing/components/sections/SectionGuide.vue.js +1 -1
  110. package/dist/martyrs/src/modules/marketplace/views/components/pages/Marketplace.vue.js +1 -1
  111. package/dist/martyrs/src/modules/music/components/blocks/ActionButtons.vue.js +1 -1
  112. package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js +1 -1
  113. package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.js +1 -1
  114. package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.js +1 -1
  115. package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.js +1 -1
  116. package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js +1 -1
  117. package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js +1 -1
  118. package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js +1 -1
  119. package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.js +1 -1
  120. package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js +1 -1
  121. package/dist/martyrs/src/modules/music/components/pages/Album.vue.js +1 -1
  122. package/dist/martyrs/src/modules/music/components/pages/Artist.vue.js +1 -1
  123. package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js +1 -1
  124. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js +1 -1
  125. package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js +1 -1
  126. package/dist/martyrs/src/modules/music/components/pages/Track.vue.js +1 -1
  127. package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.js +0 -1
  128. package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.js.map +1 -1
  129. package/dist/martyrs/src/modules/music/components/player/FullscreenPlayer.vue.js +1 -1
  130. package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.js +1 -1
  131. package/dist/martyrs/src/modules/music/components/player/PlayerControls.vue.js +1 -1
  132. package/dist/martyrs/src/modules/music/components/player/VolumeControl.vue.js +1 -1
  133. package/dist/martyrs/src/modules/notifications/components/sections/NotificationPreferences.vue.js +1 -1
  134. package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.js +1 -1
  135. package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.js +1 -1
  136. package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.js +1 -2
  137. package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.js.map +1 -1
  138. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +1 -1
  139. package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js +1 -1
  140. package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +2 -2
  141. package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.js +1 -1
  142. package/dist/martyrs/src/modules/orders/components/sections/ApplicationDetails.vue.js +1 -1
  143. package/dist/martyrs/src/modules/orders/components/sections/CustomerDetails.vue.js +1 -1
  144. package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +1 -1
  145. package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.js +1 -1
  146. package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.js +1 -1
  147. package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.js +1 -1
  148. package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.js +2 -2
  149. package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.js +1 -1
  150. package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.js +1 -1
  151. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +4 -3
  152. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js.map +1 -1
  153. package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.js +1 -1
  154. package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.js +1 -2
  155. package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.js.map +1 -1
  156. package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.js +1 -1
  157. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +1 -2
  158. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js.map +1 -1
  159. package/dist/martyrs/src/modules/pages/pages.router.js +7 -5
  160. package/dist/martyrs/src/modules/pages/pages.router.js.map +1 -1
  161. package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.js +0 -1
  162. package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.js.map +1 -1
  163. package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.js +1 -1
  164. package/dist/martyrs/src/modules/pages/views/components/partials/SidebarPages.vue.js +1 -1
  165. package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js +0 -1
  166. package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js.map +1 -1
  167. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +2 -2
  168. package/dist/martyrs/src/modules/products/components/pages/Product.vue.js +1 -2
  169. package/dist/martyrs/src/modules/products/components/pages/Product.vue.js.map +1 -1
  170. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +3 -3
  171. package/dist/martyrs/src/modules/products/components/pages/Products.vue.js +4 -4
  172. package/dist/martyrs/src/modules/products/components/pages/Products.vue.js.map +1 -1
  173. package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.js +1 -1
  174. package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.js +1 -1
  175. package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js +2 -2
  176. package/dist/martyrs/src/modules/products/components/sections/FilterProducts.vue.js +1 -1
  177. package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.js +1 -1
  178. package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.js +1 -1
  179. package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js +2 -2
  180. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.js +2 -2
  181. package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.js +1 -1
  182. package/dist/martyrs/src/modules/rents/views/components/pages/RentsEdit.vue.js +1 -1
  183. package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.js +1 -1
  184. package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js +1 -1
  185. package/dist/martyrs/src/modules/spots/components/pages/Map.vue.js +1 -1
  186. package/dist/martyrs/src/modules/spots/components/pages/Spot.vue.js +1 -1
  187. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +2 -2
  188. package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.js +1 -1
  189. package/dist/martyrs.css +1 -1
  190. package/dist/martyrs.es.js +1 -1
  191. package/dist/music.server.js +1 -1
  192. package/dist/notifications.server.js +1 -1
  193. package/dist/orders.server.js +7 -6
  194. package/dist/organizations.server.js +2 -2
  195. package/dist/products.server.js +2 -2
  196. package/dist/profile.schema-C31Lynn3.js +21 -0
  197. package/dist/rents.server.js +1 -1
  198. package/dist/sessions.service-COcwjd0f.js +86 -0
  199. package/dist/style.css +183 -108
  200. package/dist/{tickets.controller-B7r0mK-5.js → tickets.controller-DdF85W-i.js} +1 -1
  201. package/dist/visitors.service-B1dhhuSo.js +83 -0
  202. package/dist/wallet.server.js +2 -2
  203. package/dist/{web-BDuQSQKS.js → web-O7lXcjg0.js} +1 -1
  204. package/package.json +5 -1
  205. package/src/builder/modes/ssr.rspack.dev.js +2 -0
  206. package/src/cli/commands/create.js +106 -0
  207. package/src/cli/index.js +25 -0
  208. package/src/cli/templates/app/.env.development.mustache +14 -0
  209. package/src/cli/templates/app/.env.production.mustache +14 -0
  210. package/src/cli/templates/app/Dockerfile +36 -0
  211. package/src/cli/templates/app/babel.config.js +14 -0
  212. package/src/cli/templates/app/env.js +3 -0
  213. package/src/cli/templates/app/index.js +46 -0
  214. package/src/cli/templates/app/mongodb.config.js +18 -0
  215. package/src/cli/templates/app/package.json.mustache +65 -0
  216. package/src/cli/templates/app/src/client.js +22 -0
  217. package/src/cli/templates/app/src/components/pages/Index.vue +11 -0
  218. package/src/cli/templates/app/src/configs/global.config.js.mustache +40 -0
  219. package/src/cli/templates/app/src/localization/extensions.js +2 -0
  220. package/src/cli/templates/app/src/localization/index.js +44 -0
  221. package/src/cli/templates/app/src/localization/overrides.js +2 -0
  222. package/src/cli/templates/app/src/localization/translations.js +10 -0
  223. package/src/cli/templates/app/src/models/index.js +9 -0
  224. package/src/cli/templates/app/src/router/index.js +48 -0
  225. package/src/cli/templates/app/src/scss/theme.scss +18 -0
  226. package/src/cli/templates/app/src/server.js +68 -0
  227. package/src/cli/templates/app/src/store/index.js +9 -0
  228. package/src/cli/templates/docker-compose.yaml.mustache +47 -0
  229. package/src/cli/templates/nginx/Dockerfile +5 -0
  230. package/src/cli/templates/nginx/default.conf.mustache +55 -0
  231. package/src/cli/templates/public/favicon/.gitkeep +0 -0
  232. package/src/cli/templates/start-dev.sh.mustache +131 -0
  233. package/src/cli/templates/start-prod.sh.mustache +12 -0
  234. package/src/components/Button/Button.vue +61 -15
  235. package/src/components/Loader/Loader.vue +1 -1
  236. package/src/components/Tooltip/Tooltip.vue +31 -23
  237. package/src/modules/TASKS.MD +30 -1
  238. package/src/modules/auth/CLAUDE.md +381 -0
  239. package/src/modules/auth/FIXES.md +0 -38
  240. package/src/modules/auth/auth.client.js +4 -6
  241. package/src/modules/auth/auth.server.js +4 -15
  242. package/src/modules/auth/controllers/middlewares/authJwt.js +59 -17
  243. package/src/modules/auth/controllers/middlewares/index.js +4 -1
  244. package/src/modules/auth/controllers/middlewares/otp.middleware.js +166 -0
  245. package/src/modules/auth/controllers/middlewares/verifySignUp.js +0 -1
  246. package/src/modules/auth/controllers/middlewares/verifyUser.js +58 -11
  247. package/src/modules/auth/controllers/routes/auth.routes.js +48 -6
  248. package/src/modules/auth/controllers/routes/users.routes.js +29 -8
  249. package/src/modules/auth/controllers/services/auth.service.js +62 -12
  250. package/src/modules/auth/controllers/services/otp.service.js +109 -0
  251. package/src/modules/auth/controllers/services/users.service.js +46 -6
  252. package/src/modules/auth/models/otp.model.js +20 -0
  253. package/src/modules/auth/views/components/blocks/OtpDialog.vue +168 -0
  254. package/src/modules/auth/views/components/pages/Profile.vue +51 -18
  255. package/src/modules/auth/views/components/pages/ProfileEditAccount.vue +199 -45
  256. package/src/modules/auth/views/components/pages/ResetPassword.vue +170 -132
  257. package/src/modules/auth/views/components/pages/SignIn.vue +2 -1
  258. package/src/modules/auth/views/components/pages/SignUp.vue +203 -147
  259. package/src/modules/auth/views/plugins/otp.plugin.js +104 -0
  260. package/src/modules/auth/views/router/auth.router.js +1 -24
  261. package/src/modules/auth/views/router/users.router.js +1 -12
  262. package/src/modules/auth/views/store/auth.js +0 -68
  263. package/src/modules/auth/views/store/users.js +6 -2
  264. package/src/modules/backoffice/backoffice.client.js +1 -25
  265. package/src/modules/backoffice/configs/navigation.backoffice.config.js +99 -0
  266. package/src/modules/backoffice/router/backoffice.router.js +8 -7
  267. package/src/modules/community/components/pages/BlogPost.vue +9 -1
  268. package/src/modules/core/controllers/classes/core.websocket.js +57 -6
  269. package/src/modules/core/controllers/middlewares/visitor.logger.js +49 -0
  270. package/src/modules/core/controllers/services/requests.service.js +53 -0
  271. package/src/modules/core/controllers/services/sessions.service.js +98 -0
  272. package/src/modules/core/controllers/services/visitors.service.js +102 -0
  273. package/src/modules/core/controllers/utils/mailing.js +16 -3
  274. package/src/modules/core/core.client.js +1 -0
  275. package/src/modules/core/core.server.js +45 -3
  276. package/src/modules/core/models/request.model.js +30 -0
  277. package/src/modules/core/models/session.model.js +43 -0
  278. package/src/modules/core/models/visitor.model.js +28 -0
  279. package/src/modules/core/views/classes/core.app.js +8 -3
  280. package/src/modules/core/views/components/elements/OnlineIndicator.vue +115 -0
  281. package/src/modules/core/views/components/layouts/App.vue +2 -2
  282. package/src/modules/core/views/components/layouts/Client.vue +444 -479
  283. package/src/modules/core/views/components/pages/404.vue +55 -3
  284. package/src/modules/core/views/store/core.store.js +1 -0
  285. package/src/modules/core/views/utils/vue-app-renderer.js +9 -1
  286. package/src/modules/orders/controllers/orders.controller.js +3 -3
  287. package/src/modules/pages/pages.router.js +4 -2
  288. package/src/modules/pages/views/router/pages.backoffice.router.js +4 -3
  289. package/src/modules/products/components/pages/Products.vue +1 -1
  290. package/dist/_virtual/alignment-pattern.js +0 -5
  291. package/dist/_virtual/alignment-pattern.js.map +0 -1
  292. package/dist/_virtual/browser.js +0 -8
  293. package/dist/_virtual/browser.js.map +0 -1
  294. package/dist/_virtual/browser2.js +0 -5
  295. package/dist/_virtual/browser2.js.map +0 -1
  296. package/dist/_virtual/canvas.js +0 -5
  297. package/dist/_virtual/canvas.js.map +0 -1
  298. package/dist/_virtual/dijkstra.js +0 -5
  299. package/dist/_virtual/dijkstra.js.map +0 -1
  300. package/dist/_virtual/error-correction-code.js +0 -5
  301. package/dist/_virtual/error-correction-code.js.map +0 -1
  302. package/dist/_virtual/error-correction-level.js +0 -5
  303. package/dist/_virtual/error-correction-level.js.map +0 -1
  304. package/dist/_virtual/finder-pattern.js +0 -5
  305. package/dist/_virtual/finder-pattern.js.map +0 -1
  306. package/dist/_virtual/format-info.js +0 -5
  307. package/dist/_virtual/format-info.js.map +0 -1
  308. package/dist/_virtual/galois-field.js +0 -5
  309. package/dist/_virtual/galois-field.js.map +0 -1
  310. package/dist/_virtual/mask-pattern.js +0 -5
  311. package/dist/_virtual/mask-pattern.js.map +0 -1
  312. package/dist/_virtual/mode.js +0 -5
  313. package/dist/_virtual/mode.js.map +0 -1
  314. package/dist/_virtual/polynomial.js +0 -5
  315. package/dist/_virtual/polynomial.js.map +0 -1
  316. package/dist/_virtual/qrcode.js +0 -5
  317. package/dist/_virtual/qrcode.js.map +0 -1
  318. package/dist/_virtual/regex.js +0 -5
  319. package/dist/_virtual/regex.js.map +0 -1
  320. package/dist/_virtual/segments.js +0 -5
  321. package/dist/_virtual/segments.js.map +0 -1
  322. package/dist/_virtual/svg-tag.js +0 -5
  323. package/dist/_virtual/svg-tag.js.map +0 -1
  324. package/dist/_virtual/utils.js +0 -5
  325. package/dist/_virtual/utils.js.map +0 -1
  326. package/dist/_virtual/utils2.js +0 -5
  327. package/dist/_virtual/utils2.js.map +0 -1
  328. package/dist/_virtual/version-check.js +0 -5
  329. package/dist/_virtual/version-check.js.map +0 -1
  330. package/dist/_virtual/version.js +0 -5
  331. package/dist/_virtual/version.js.map +0 -1
  332. package/dist/index-_Edcmck_.js +0 -170
  333. package/dist/martyrs/dist/main-fmp55tJF.js.map +0 -1
  334. package/dist/martyrs/node_modules/.pnpm/bignumber.js@9.1.2/node_modules/bignumber.js/bignumber.js +0 -1336
  335. package/dist/martyrs/node_modules/.pnpm/bignumber.js@9.1.2/node_modules/bignumber.js/bignumber.js.map +0 -1
  336. package/dist/martyrs/src/components/Button/Button.vue2.js.map +0 -1
  337. package/dist/martyrs/src/components/EditImages/EditImages.vue2.js.map +0 -1
  338. package/dist/martyrs/src/components/Spoiler/Spoiler.vue2.js.map +0 -1
  339. package/dist/martyrs/src/components/Tab/Tab.vue.js.map +0 -1
  340. package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.js +0 -166
  341. package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.js.map +0 -1
  342. package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js +0 -118
  343. package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js.map +0 -1
  344. package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.js +0 -360
  345. package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.js.map +0 -1
  346. package/dist/martyrs/src/modules/auth/views/store/twofa.js +0 -40
  347. package/dist/martyrs/src/modules/auth/views/store/twofa.js.map +0 -1
  348. package/dist/martyrs/src/modules/backoffice/backoffice.router.js.map +0 -1
  349. package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.js +0 -150
  350. package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.js.map +0 -1
  351. package/dist/martyrs/src/modules/core/views/components/sections/Filters.vue2.js.map +0 -1
  352. package/dist/martyrs/src/modules/wallet/views/components/blocks/CardBalanceReplenished.vue.js +0 -43
  353. package/dist/martyrs/src/modules/wallet/views/components/blocks/CardBalanceReplenished.vue.js.map +0 -1
  354. package/dist/martyrs/src/modules/wallet/views/components/blocks/CardDeposit.vue.js +0 -47
  355. package/dist/martyrs/src/modules/wallet/views/components/blocks/CardDeposit.vue.js.map +0 -1
  356. package/dist/martyrs/src/modules/wallet/views/components/blocks/CashDeposit.vue.js +0 -29
  357. package/dist/martyrs/src/modules/wallet/views/components/blocks/CashDeposit.vue.js.map +0 -1
  358. package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.js +0 -89
  359. package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.js.map +0 -1
  360. package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDepositProcessing.vue.js +0 -136
  361. package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDepositProcessing.vue.js.map +0 -1
  362. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js +0 -238
  363. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js.map +0 -1
  364. package/dist/martyrs/src/modules/wallet/views/localization/wallet.json.js +0 -9
  365. package/dist/martyrs/src/modules/wallet/views/localization/wallet.json.js.map +0 -1
  366. package/dist/martyrs/src/modules/wallet/views/store/wallet.store.js +0 -134
  367. package/dist/martyrs/src/modules/wallet/views/store/wallet.store.js.map +0 -1
  368. package/dist/node_modules/.pnpm/dijkstrajs@1.0.3/node_modules/dijkstrajs/dijkstra.js +0 -106
  369. package/dist/node_modules/.pnpm/dijkstrajs@1.0.3/node_modules/dijkstrajs/dijkstra.js.map +0 -1
  370. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/browser.js +0 -79
  371. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/browser.js.map +0 -1
  372. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/can-promise.js +0 -14
  373. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/can-promise.js.map +0 -1
  374. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/alignment-pattern.js +0 -43
  375. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/alignment-pattern.js.map +0 -1
  376. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/alphanumeric-data.js +0 -85
  377. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/alphanumeric-data.js.map +0 -1
  378. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/bit-buffer.js +0 -40
  379. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/bit-buffer.js.map +0 -1
  380. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/bit-matrix.js +0 -34
  381. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/bit-matrix.js.map +0 -1
  382. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/byte-data.js +0 -36
  383. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/byte-data.js.map +0 -1
  384. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/error-correction-code.js +0 -367
  385. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/error-correction-code.js.map +0 -1
  386. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/error-correction-level.js +0 -52
  387. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/error-correction-level.js.map +0 -1
  388. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/finder-pattern.js +0 -25
  389. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/finder-pattern.js.map +0 -1
  390. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/format-info.js +0 -24
  391. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/format-info.js.map +0 -1
  392. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/galois-field.js +0 -38
  393. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/galois-field.js.map +0 -1
  394. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/kanji-data.js +0 -46
  395. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/kanji-data.js.map +0 -1
  396. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/mask-pattern.js +0 -149
  397. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/mask-pattern.js.map +0 -1
  398. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/mode.js +0 -90
  399. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/mode.js.map +0 -1
  400. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/numeric-data.js +0 -41
  401. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/numeric-data.js.map +0 -1
  402. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/polynomial.js +0 -44
  403. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/polynomial.js.map +0 -1
  404. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/qrcode.js +0 -279
  405. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/qrcode.js.map +0 -1
  406. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/reed-solomon-encoder.js +0 -38
  407. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/reed-solomon-encoder.js.map +0 -1
  408. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/regex.js +0 -33
  409. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/regex.js.map +0 -1
  410. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/segments.js +0 -201
  411. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/segments.js.map +0 -1
  412. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/utils.js +0 -84
  413. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/utils.js.map +0 -1
  414. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/version-check.js +0 -14
  415. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/version-check.js.map +0 -1
  416. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/version.js +0 -107
  417. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/version.js.map +0 -1
  418. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/canvas.js +0 -61
  419. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/canvas.js.map +0 -1
  420. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/svg-tag.js +0 -64
  421. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/svg-tag.js.map +0 -1
  422. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/utils.js +0 -87
  423. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/utils.js.map +0 -1
  424. package/dist/profile.schema-CjLOfG7b.js +0 -92
  425. package/src/modules/auth/controllers/middlewares/visitor.logger.js +0 -75
  426. package/src/modules/auth/controllers/routes/twofa.routes.js +0 -8
  427. package/src/modules/auth/controllers/services/twofa.service.js +0 -30
  428. package/src/modules/auth/models/request.model.js +0 -14
  429. package/src/modules/auth/models/visitor.model.js +0 -11
  430. package/src/modules/auth/views/components/pages/EnterCode.vue +0 -204
  431. package/src/modules/auth/views/components/pages/EnterPassword.vue +0 -123
  432. package/src/modules/auth/views/components/sections/ProfileEditCredentials.vue +0 -329
  433. package/src/modules/auth/views/store/twofa.js +0 -70
  434. package/src/modules/auth//320/220/320/240/320/245/320/230/320/242/320/225/320/232/320/242/320/243/320/240/320/220.md +0 -445
  435. package/src/modules/backoffice/backoffice.router.js +0 -69
  436. package/src/modules/backoffice/components/partials/Sidebar.vue +0 -165
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sources":["../../../../../../../src/modules/auth/views/store/auth.js"],"sourcesContent":["// Dependencies\nimport $axios, { setAuthToken } from '@martyrs/src/modules/core/views/utils/axios-instance.js';\nimport Cookies from 'js-cookie';\n// Capacitor\nimport { Preferences } from '@capacitor/preferences';\n// Vue modules\nimport { reactive, watch } from 'vue';\n// Globals\nimport { useSession, setError } from '@martyrs/src/modules/core/views/store/core.store.js';\nimport wsManager from '@martyrs/src/modules/core/views/classes/ws.manager.js';\n// State\nimport * as twofa from './twofa.js';\n\n// State\nconst state = reactive({\n user: {\n _id: undefined,\n avatar: null,\n username: '',\n email: '',\n phone: '',\n password: '',\n passwordRepeat: '',\n },\n access: {\n roles: null,\n token: null,\n status: false,\n },\n accesses: [],\n});\n\n// Session manager\nconst session = useSession();\n\nconst actions = {\n async initialize(cookie) {\n try {\n const userCookie = cookie ? cookie : await getCookie('user');\n\n if (userCookie) {\n const { _id, email, phone, avatar, roles, accessToken } = userCookie;\n\n setAuthToken(accessToken);\n\n // Проверка токена через серверный маршрут\n const response = await $axios.get('/api/organizations/check-accesses');\n const userAccesses = response.data;\n\n // ТОЛЬКО ПОСЛЕ УСПЕШНОЙ ПРОВЕРКИ устанавливаем состояние\n state.accesses = userAccesses;\n Object.assign(state.user, { _id, email, phone, avatar });\n Object.assign(state.access, { token: accessToken, roles, status: !!accessToken });\n\n // Update Session with full user data\n session.set({ ...userCookie, accesses: userAccesses });\n\n // Переподключаем WebSocket если пользователь аутентифицирован\n if (_id && accessToken) {\n console.log('[AUTH] Reconnecting WebSocket for authenticated user:', _id);\n await wsManager.reconnectWithAuth(_id);\n }\n } else {\n console.log('no cookies');\n setAuthToken(null);\n session.clear();\n this.resetState();\n }\n } catch (error) {\n console.error('Error initializing auth:', error);\n // Make sure we remove the cookie when there's an error\n await removeCookie('user');\n setAuthToken(null);\n session.clear();\n this.resetState();\n setError(error);\n throw error;\n }\n },\n\n // Helper method to reset state\n resetState() {\n state.accesses = [];\n state.user = {\n _id: undefined,\n avatar: null,\n username: '',\n email: '',\n phone: '',\n password: '',\n passwordRepeat: '',\n };\n state.access = {\n roles: null,\n token: null,\n status: false,\n };\n session.clear();\n },\n\n async login(user, type) {\n try {\n const response = await $axios.post('/api/auth/signin', {\n ...user,\n type,\n });\n\n setCookie('user', response.data);\n\n Object.assign(state.user, {\n ...response.data,\n });\n\n Object.assign(state.access, {\n token: response.data.accessToken,\n status: true,\n roles: response.data.roles,\n });\n\n session.set(response.data);\n\n await this.initialize();\n\n return response.data;\n } catch (error) {\n // Make sure cookie is removed on login error\n await removeCookie('user');\n\n Object.assign(state.access, {\n token: null,\n status: false,\n roles: null,\n });\n\n session.clear();\n\n console.log(error);\n setError(error);\n return Promise.reject(error);\n }\n },\n\n async signup(user, type, invite) {\n const { password, passwordRepeat } = state.user;\n\n console.log(password);\n console.log(passwordRepeat);\n\n if (password !== passwordRepeat) {\n const error = {\n response: {\n data: { errorCode: 'PASSWORDS_DO_NOT_MATCH' },\n },\n };\n setError(error);\n throw new Error(error.response.status);\n }\n\n try {\n const response = await $axios.post('/api/auth/signup', {\n ...user,\n type,\n inviteCode: invite,\n });\n\n console.log(response);\n\n if (response.data.accessToken) {\n setCookie('user', response.data);\n }\n\n Object.assign(state.user, {\n ...response.data,\n });\n\n Object.assign(state.access, {\n token: response.data.accessToken,\n status: true,\n roles: response.data.roles,\n });\n\n session.set(response.data);\n\n await this.initialize();\n\n return response.data;\n } catch (error) {\n // Make sure cookie is removed on signup error\n await removeCookie('user');\n setError(error);\n console.log('Sign up failed');\n throw error;\n }\n },\n\n async logout() {\n await removeCookie('user');\n setAuthToken(null);\n session.clear();\n this.resetState();\n\n // Отключаем WebSocket при выходе\n console.log('[AUTH] Disconnecting WebSocket on logout');\n wsManager.disconnect();\n },\n\n async resetPassword(user, type) {\n try {\n const response = await $axios.post('/api/auth/reset-password', {\n email: user.email,\n phone: user.phone,\n type,\n });\n\n Object.assign(twofa.state.code, {\n ...response.data,\n isSended: true,\n });\n\n return response.data;\n } catch (error) {\n setError(error);\n return Promise.reject(error);\n }\n },\n\n async updatePassword(user, type) {\n const { password, passwordRepeat } = state.user;\n\n if (password !== passwordRepeat) {\n const error = {\n response: {\n data: { errorCode: 'PASSWORDS_DO_NOT_MATCH' },\n },\n };\n setError(error);\n throw new Error(error.response.status);\n }\n\n try {\n const response = await $axios.post('/api/auth/update-password', {\n email: user.email,\n phone: user.phone,\n password: user.password,\n passwordRepeat: user.passwordRepeat,\n type,\n });\n\n if (response.data.accessToken) {\n setCookie('user', response.data);\n }\n\n Object.assign(state.user, {\n ...response.data,\n });\n\n Object.assign(state.access, {\n token: response.data.accessToken,\n status: true,\n });\n\n session.set(response.data);\n\n return response.data;\n } catch (error) {\n // Make sure cookie is removed on password update error\n await removeCookie('user');\n setError(error);\n return Promise.reject(error);\n }\n },\n};\n\n// Cookies\nconst optionsDefault = {\n development: { path: '/', domain: process.env.DOMAIN_URL, secure: false, expires: 7, sameSite: 'Lax' },\n production: {\n expires: 7,\n path: '/',\n domain: process.env.DOMAIN_URL,\n sameSite: 'strict',\n secure: true,\n },\n};\n\nasync function getCookie(name) {\n if (process.env.MOBILE_APP) {\n const { value } = await Preferences.get({ key: name });\n return value ? JSON.parse(value) : null;\n } else {\n const cookie = Cookies.get(name);\n return cookie ? JSON.parse(cookie) : null;\n }\n}\n\nasync function setCookie(name, data, mode = process.env.NODE_ENV) {\n if (process.env.MOBILE_APP) {\n // Если приложение запущено в Capacitor\n await Preferences.set({\n key: name,\n value: JSON.stringify(data),\n });\n } else {\n // Для веб-версии\n const options = optionsDefault[mode];\n console.log('[AUTH COOKIE DEBUG] setCookie', { name, mode, options, domain: process.env.DOMAIN_URL });\n Cookies.set(name, JSON.stringify(data), options);\n }\n}\n\nasync function removeCookie(name, mode = process.env.NODE_ENV) {\n if (process.env.MOBILE_APP) {\n // Если приложение запущено в Capacitor\n await Preferences.remove({ key: name });\n } else {\n // Для веб-версии\n const options = optionsDefault[mode];\n const allCookiesBefore = typeof document !== 'undefined' ? document.cookie : 'SSR - no document';\n console.log('[AUTH COOKIE DEBUG] removeCookie BEFORE', { name, mode, options, domain: process.env.DOMAIN_URL, allCookies: allCookiesBefore });\n Cookies.remove(name, options);\n const allCookiesAfter = typeof document !== 'undefined' ? document.cookie : 'SSR - no document';\n console.log('[AUTH COOKIE DEBUG] removeCookie AFTER', { allCookies: allCookiesAfter });\n }\n}\n\n// History\nconst history = [];\nhistory.push(state);\n\n// Watch\nwatch(state, (newState, oldState) => {\n history.push(newState);\n});\n\n// Module Export\nexport { actions, removeCookie, state };\n"],"names":["twofa.state","Cookies"],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sources":["../../../../../../../src/modules/auth/views/store/auth.js"],"sourcesContent":["// Dependencies\nimport $axios, { setAuthToken } from '@martyrs/src/modules/core/views/utils/axios-instance.js';\nimport Cookies from 'js-cookie';\n// Capacitor\nimport { Preferences } from '@capacitor/preferences';\n// Vue modules\nimport { reactive, watch } from 'vue';\n// Globals\nimport { useSession, setError } from '@martyrs/src/modules/core/views/store/core.store.js';\nimport wsManager from '@martyrs/src/modules/core/views/classes/ws.manager.js';\n\n// State\nconst state = reactive({\n user: {\n _id: undefined,\n avatar: null,\n username: '',\n email: '',\n phone: '',\n password: '',\n passwordRepeat: '',\n },\n access: {\n roles: null,\n token: null,\n status: false,\n },\n accesses: [],\n});\n\n// Session manager\nconst session = useSession();\n\nconst actions = {\n async initialize(cookie) {\n try {\n const userCookie = cookie ? cookie : await getCookie('user');\n\n if (userCookie) {\n const { _id, email, phone, avatar, roles, accessToken } = userCookie;\n\n setAuthToken(accessToken);\n\n // Проверка токена через серверный маршрут\n const response = await $axios.get('/api/organizations/check-accesses');\n const userAccesses = response.data;\n\n // ТОЛЬКО ПОСЛЕ УСПЕШНОЙ ПРОВЕРКИ устанавливаем состояние\n state.accesses = userAccesses;\n Object.assign(state.user, { _id, email, phone, avatar });\n Object.assign(state.access, { token: accessToken, roles, status: !!accessToken });\n\n // Update Session with full user data\n session.set({ ...userCookie, accesses: userAccesses });\n\n // Переподключаем WebSocket если пользователь аутентифицирован\n if (_id && accessToken) {\n console.log('[AUTH] Reconnecting WebSocket for authenticated user:', _id);\n await wsManager.reconnectWithAuth(_id);\n }\n } else {\n console.log('no cookies');\n setAuthToken(null);\n session.clear();\n this.resetState();\n }\n } catch (error) {\n console.error('Error initializing auth:', error);\n // Make sure we remove the cookie when there's an error\n await removeCookie('user');\n setAuthToken(null);\n session.clear();\n this.resetState();\n setError(error);\n throw error;\n }\n },\n\n // Helper method to reset state\n resetState() {\n state.accesses = [];\n state.user = {\n _id: undefined,\n avatar: null,\n username: '',\n email: '',\n phone: '',\n password: '',\n passwordRepeat: '',\n };\n state.access = {\n roles: null,\n token: null,\n status: false,\n };\n session.clear();\n },\n\n async login(user, type) {\n try {\n const response = await $axios.post('/api/auth/signin', {\n ...user,\n type,\n });\n\n setCookie('user', response.data);\n\n Object.assign(state.user, {\n ...response.data,\n });\n\n Object.assign(state.access, {\n token: response.data.accessToken,\n status: true,\n roles: response.data.roles,\n });\n\n session.set(response.data);\n\n await this.initialize();\n\n return response.data;\n } catch (error) {\n // Make sure cookie is removed on login error\n await removeCookie('user');\n\n Object.assign(state.access, {\n token: null,\n status: false,\n roles: null,\n });\n\n session.clear();\n\n console.log(error);\n setError(error);\n return Promise.reject(error);\n }\n },\n\n async signup(user, type, invite) {\n const { password, passwordRepeat } = state.user;\n\n console.log(password);\n console.log(passwordRepeat);\n\n if (password !== passwordRepeat) {\n const error = {\n response: {\n data: { errorCode: 'PASSWORDS_DO_NOT_MATCH' },\n },\n };\n setError(error);\n throw new Error(error.response.status);\n }\n\n try {\n const response = await $axios.post('/api/auth/signup', {\n ...user,\n type,\n inviteCode: invite,\n });\n\n console.log(response);\n\n if (response.data.accessToken) {\n setCookie('user', response.data);\n }\n\n Object.assign(state.user, {\n ...response.data,\n });\n\n Object.assign(state.access, {\n token: response.data.accessToken,\n status: true,\n roles: response.data.roles,\n });\n\n session.set(response.data);\n\n await this.initialize();\n\n return response.data;\n } catch (error) {\n // Make sure cookie is removed on signup error\n await removeCookie('user');\n setError(error);\n console.log('Sign up failed');\n throw error;\n }\n },\n\n async logout() {\n await removeCookie('user');\n setAuthToken(null);\n session.clear();\n this.resetState();\n\n // Отключаем WebSocket при выходе\n console.log('[AUTH] Disconnecting WebSocket on logout');\n wsManager.disconnect();\n },\n};\n\n// Cookies\nconst optionsDefault = {\n development: { path: '/', domain: process.env.DOMAIN_URL, secure: false, expires: 7, sameSite: 'Lax' },\n production: {\n expires: 7,\n path: '/',\n domain: process.env.DOMAIN_URL,\n sameSite: 'strict',\n secure: true,\n },\n};\n\nasync function getCookie(name) {\n if (process.env.MOBILE_APP) {\n const { value } = await Preferences.get({ key: name });\n return value ? JSON.parse(value) : null;\n } else {\n const cookie = Cookies.get(name);\n return cookie ? JSON.parse(cookie) : null;\n }\n}\n\nasync function setCookie(name, data, mode = process.env.NODE_ENV) {\n if (process.env.MOBILE_APP) {\n // Если приложение запущено в Capacitor\n await Preferences.set({\n key: name,\n value: JSON.stringify(data),\n });\n } else {\n // Для веб-версии\n const options = optionsDefault[mode];\n console.log('[AUTH COOKIE DEBUG] setCookie', { name, mode, options, domain: process.env.DOMAIN_URL });\n Cookies.set(name, JSON.stringify(data), options);\n }\n}\n\nasync function removeCookie(name, mode = process.env.NODE_ENV) {\n if (process.env.MOBILE_APP) {\n // Если приложение запущено в Capacitor\n await Preferences.remove({ key: name });\n } else {\n // Для веб-версии\n const options = optionsDefault[mode];\n const allCookiesBefore = typeof document !== 'undefined' ? document.cookie : 'SSR - no document';\n console.log('[AUTH COOKIE DEBUG] removeCookie BEFORE', { name, mode, options, domain: process.env.DOMAIN_URL, allCookies: allCookiesBefore });\n Cookies.remove(name, options);\n const allCookiesAfter = typeof document !== 'undefined' ? document.cookie : 'SSR - no document';\n console.log('[AUTH COOKIE DEBUG] removeCookie AFTER', { allCookies: allCookiesAfter });\n }\n}\n\n// History\nconst history = [];\nhistory.push(state);\n\n// Watch\nwatch(state, (newState, oldState) => {\n history.push(newState);\n});\n\n// Module Export\nexport { actions, removeCookie, state };\n"],"names":["Cookies"],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import $axios from "../../../core/views/utils/axios-instance.js";
2
2
  import { reactive } from "vue";
3
3
  import { setError } from "../../../core/views/store/core.store.js";
4
+ import { withOtp } from "../plugins/otp.plugin.js";
4
5
  const state = reactive({
5
6
  all: [],
6
7
  current: {
@@ -51,7 +52,10 @@ const actions = {
51
52
  },
52
53
  async update(user) {
53
54
  try {
54
- const response = await $axios.put(`/api/users/${user._id}`, user);
55
+ const response = await withOtp(
56
+ (data) => $axios.put(`/api/users/${data._id}`, data),
57
+ user
58
+ );
55
59
  mutations.set(response.data, "current");
56
60
  return Promise.resolve(response.data);
57
61
  } catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"users.js","sources":["../../../../../../../src/modules/auth/views/store/users.js"],"sourcesContent":["import $axios from '@martyrs/src/modules/core/views/utils/axios-instance.js';\nimport { reactive } from 'vue';\n// Add import for global error handler\nimport { setError } from '@martyrs/src/modules/core/views/store/core.store.js';\n\nconst state = reactive({\n all: [],\n current: {\n _id: '',\n username: '',\n email: '',\n phone: '',\n status: '',\n profile: {\n name: '',\n photo: '',\n description: '',\n birthday: '',\n },\n socials: {\n facebook: '',\n twitter: '',\n instagram: '',\n telegram: '',\n },\n roles: [],\n },\n});\n\nconst actions = {\n async create(user) {\n try {\n const response = await $axios.post('/api/users', user);\n mutations.set(response.data, 'current');\n return Promise.resolve(response.data);\n } catch (error) {\n setError(error); // Add global error handling\n return Promise.reject(error);\n }\n },\n\n async read(options = {}) {\n try {\n const response = await $axios.get('/api/users', { params: options });\n\n if (options._id) {\n mutations.set(response.data[0], 'current');\n } else {\n mutations.set(response.data, 'all');\n }\n return Promise.resolve(response.data);\n } catch (error) {\n setError(error); // Add global error handling\n return Promise.reject(error);\n }\n },\n\n async update(user) {\n try {\n const response = await $axios.put(`/api/users/${user._id}`, user);\n mutations.set(response.data, 'current');\n return Promise.resolve(response.data);\n } catch (error) {\n setError(error); // Add global error handling\n return Promise.reject(error);\n }\n },\n\n async delete(user) {\n try {\n await $axios.delete(`/api/users/${user._id}`);\n const index = state.all.findIndex(u => u._id === user._id);\n if (index !== -1) {\n state.all.splice(index, 1);\n }\n } catch (error) {\n setError(error); // Add global error handling\n return Promise.reject(error); // Add Promise.reject for consistency\n }\n },\n};\n\nconst mutations = {\n set(user, property) {\n state[property] = user;\n },\n clean() {\n state.current = {\n phone: '',\n name: '',\n surname: '',\n birthday: '',\n city: '',\n address: '',\n roles: [],\n orders: [],\n };\n },\n};\n\nexport { actions, mutations, state };\n"],"names":[],"mappings":";;;AAKK,MAAC,QAAQ,SAAS;AAAA,EACrB,KAAK,CAAA;AAAA,EACL,SAAS;AAAA,IACP,KAAK;AAAA,IACL,UAAU;AAAA,IACV,OAAO;AAAA,IACP,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,SAAS;AAAA,MACP,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,MACb,UAAU;AAAA,IAChB;AAAA,IACI,SAAS;AAAA,MACP,UAAU;AAAA,MACV,SAAS;AAAA,MACT,WAAW;AAAA,MACX,UAAU;AAAA,IAChB;AAAA,IACI,OAAO,CAAA;AAAA,EACX;AACA,CAAC;AAEI,MAAC,UAAU;AAAA,EACd,MAAM,OAAO,MAAM;AACjB,QAAI;AACF,YAAM,WAAW,MAAM,OAAO,KAAK,cAAc,IAAI;AACrD,gBAAU,IAAI,SAAS,MAAM,SAAS;AACtC,aAAO,QAAQ,QAAQ,SAAS,IAAI;AAAA,IACtC,SAAS,OAAO;AACd,eAAS,KAAK;AACd,aAAO,QAAQ,OAAO,KAAK;AAAA,IAC7B;AAAA,EACF;AAAA,EAEA,MAAM,KAAK,UAAU,IAAI;AACvB,QAAI;AACF,YAAM,WAAW,MAAM,OAAO,IAAI,cAAc,EAAE,QAAQ,SAAS;AAEnE,UAAI,QAAQ,KAAK;AACf,kBAAU,IAAI,SAAS,KAAK,CAAC,GAAG,SAAS;AAAA,MAC3C,OAAO;AACL,kBAAU,IAAI,SAAS,MAAM,KAAK;AAAA,MACpC;AACA,aAAO,QAAQ,QAAQ,SAAS,IAAI;AAAA,IACtC,SAAS,OAAO;AACd,eAAS,KAAK;AACd,aAAO,QAAQ,OAAO,KAAK;AAAA,IAC7B;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,MAAM;AACjB,QAAI;AACF,YAAM,WAAW,MAAM,OAAO,IAAI,cAAc,KAAK,GAAG,IAAI,IAAI;AAChE,gBAAU,IAAI,SAAS,MAAM,SAAS;AACtC,aAAO,QAAQ,QAAQ,SAAS,IAAI;AAAA,IACtC,SAAS,OAAO;AACd,eAAS,KAAK;AACd,aAAO,QAAQ,OAAO,KAAK;AAAA,IAC7B;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,MAAM;AACjB,QAAI;AACF,YAAM,OAAO,OAAO,cAAc,KAAK,GAAG,EAAE;AAC5C,YAAM,QAAQ,MAAM,IAAI,UAAU,OAAK,EAAE,QAAQ,KAAK,GAAG;AACzD,UAAI,UAAU,IAAI;AAChB,cAAM,IAAI,OAAO,OAAO,CAAC;AAAA,MAC3B;AAAA,IACF,SAAS,OAAO;AACd,eAAS,KAAK;AACd,aAAO,QAAQ,OAAO,KAAK;AAAA,IAC7B;AAAA,EACF;AACF;AAEK,MAAC,YAAY;AAAA,EAChB,IAAI,MAAM,UAAU;AAClB,UAAM,QAAQ,IAAI;AAAA,EACpB;AAAA,EACA,QAAQ;AACN,UAAM,UAAU;AAAA,MACd,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,UAAU;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,MACT,OAAO,CAAA;AAAA,MACP,QAAQ,CAAA;AAAA,IACd;AAAA,EACE;AACF;"}
1
+ {"version":3,"file":"users.js","sources":["../../../../../../../src/modules/auth/views/store/users.js"],"sourcesContent":["import $axios from '@martyrs/src/modules/core/views/utils/axios-instance.js';\nimport { reactive } from 'vue';\n// Add import for global error handler\nimport { setError } from '@martyrs/src/modules/core/views/store/core.store.js';\nimport { withOtp } from '../plugins/otp.plugin.js';\n\nconst state = reactive({\n all: [],\n current: {\n _id: '',\n username: '',\n email: '',\n phone: '',\n status: '',\n profile: {\n name: '',\n photo: '',\n description: '',\n birthday: '',\n },\n socials: {\n facebook: '',\n twitter: '',\n instagram: '',\n telegram: '',\n },\n roles: [],\n },\n});\n\nconst actions = {\n async create(user) {\n try {\n const response = await $axios.post('/api/users', user);\n mutations.set(response.data, 'current');\n return Promise.resolve(response.data);\n } catch (error) {\n setError(error); // Add global error handling\n return Promise.reject(error);\n }\n },\n\n async read(options = {}) {\n try {\n const response = await $axios.get('/api/users', { params: options });\n\n if (options._id) {\n mutations.set(response.data[0], 'current');\n } else {\n mutations.set(response.data, 'all');\n }\n return Promise.resolve(response.data);\n } catch (error) {\n setError(error); // Add global error handling\n return Promise.reject(error);\n }\n },\n\n async update(user) {\n try {\n const response = await withOtp(\n (data) => $axios.put(`/api/users/${data._id}`, data),\n user\n );\n mutations.set(response.data, 'current');\n return Promise.resolve(response.data);\n } catch (error) {\n setError(error);\n return Promise.reject(error);\n }\n },\n\n async delete(user) {\n try {\n await $axios.delete(`/api/users/${user._id}`);\n const index = state.all.findIndex(u => u._id === user._id);\n if (index !== -1) {\n state.all.splice(index, 1);\n }\n } catch (error) {\n setError(error); // Add global error handling\n return Promise.reject(error); // Add Promise.reject for consistency\n }\n },\n};\n\nconst mutations = {\n set(user, property) {\n state[property] = user;\n },\n clean() {\n state.current = {\n phone: '',\n name: '',\n surname: '',\n birthday: '',\n city: '',\n address: '',\n roles: [],\n orders: [],\n };\n },\n};\n\nexport { actions, mutations, state };\n"],"names":[],"mappings":";;;;AAMK,MAAC,QAAQ,SAAS;AAAA,EACrB,KAAK,CAAA;AAAA,EACL,SAAS;AAAA,IACP,KAAK;AAAA,IACL,UAAU;AAAA,IACV,OAAO;AAAA,IACP,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,SAAS;AAAA,MACP,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,MACb,UAAU;AAAA,IAChB;AAAA,IACI,SAAS;AAAA,MACP,UAAU;AAAA,MACV,SAAS;AAAA,MACT,WAAW;AAAA,MACX,UAAU;AAAA,IAChB;AAAA,IACI,OAAO,CAAA;AAAA,EACX;AACA,CAAC;AAEI,MAAC,UAAU;AAAA,EACd,MAAM,OAAO,MAAM;AACjB,QAAI;AACF,YAAM,WAAW,MAAM,OAAO,KAAK,cAAc,IAAI;AACrD,gBAAU,IAAI,SAAS,MAAM,SAAS;AACtC,aAAO,QAAQ,QAAQ,SAAS,IAAI;AAAA,IACtC,SAAS,OAAO;AACd,eAAS,KAAK;AACd,aAAO,QAAQ,OAAO,KAAK;AAAA,IAC7B;AAAA,EACF;AAAA,EAEA,MAAM,KAAK,UAAU,IAAI;AACvB,QAAI;AACF,YAAM,WAAW,MAAM,OAAO,IAAI,cAAc,EAAE,QAAQ,SAAS;AAEnE,UAAI,QAAQ,KAAK;AACf,kBAAU,IAAI,SAAS,KAAK,CAAC,GAAG,SAAS;AAAA,MAC3C,OAAO;AACL,kBAAU,IAAI,SAAS,MAAM,KAAK;AAAA,MACpC;AACA,aAAO,QAAQ,QAAQ,SAAS,IAAI;AAAA,IACtC,SAAS,OAAO;AACd,eAAS,KAAK;AACd,aAAO,QAAQ,OAAO,KAAK;AAAA,IAC7B;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,MAAM;AACjB,QAAI;AACF,YAAM,WAAW,MAAM;AAAA,QACrB,CAAC,SAAS,OAAO,IAAI,cAAc,KAAK,GAAG,IAAI,IAAI;AAAA,QACnD;AAAA,MACR;AACM,gBAAU,IAAI,SAAS,MAAM,SAAS;AACtC,aAAO,QAAQ,QAAQ,SAAS,IAAI;AAAA,IACtC,SAAS,OAAO;AACd,eAAS,KAAK;AACd,aAAO,QAAQ,OAAO,KAAK;AAAA,IAC7B;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,MAAM;AACjB,QAAI;AACF,YAAM,OAAO,OAAO,cAAc,KAAK,GAAG,EAAE;AAC5C,YAAM,QAAQ,MAAM,IAAI,UAAU,OAAK,EAAE,QAAQ,KAAK,GAAG;AACzD,UAAI,UAAU,IAAI;AAChB,cAAM,IAAI,OAAO,OAAO,CAAC;AAAA,MAC3B;AAAA,IACF,SAAS,OAAO;AACd,eAAS,KAAK;AACd,aAAO,QAAQ,OAAO,KAAK;AAAA,IAC7B;AAAA,EACF;AACF;AAEK,MAAC,YAAY;AAAA,EAChB,IAAI,MAAM,UAAU;AAClB,UAAM,QAAQ,IAAI;AAAA,EACpB;AAAA,EACA,QAAQ;AACN,UAAM,UAAU;AAAA,MACd,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,UAAU;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,MACT,OAAO,CAAA;AAAA,MACP,QAAQ,CAAA;AAAA,IACd;AAAA,EACE;AACF;"}
@@ -1,7 +1,6 @@
1
1
  import addRoutes from "../core/views/router/addRoutes.js";
2
- import { getRoutes } from "./backoffice.router.js";
3
- import _sfc_main$1 from "./components/pages/Dashboard.vue.js";
4
- import _sfc_main from "./components/partials/Sidebar.vue.js";
2
+ import { getRoutes } from "./router/backoffice.router.js";
3
+ import _sfc_main from "./components/pages/Dashboard.vue.js";
5
4
  function initializeBackoffice(app, store, router, options = {}) {
6
5
  const routes = getRoutes(options);
7
6
  routes.forEach(({ parentName, config }) => {
@@ -15,18 +14,7 @@ const ModuleBackoffice = {
15
14
  getRoutes
16
15
  },
17
16
  components: {
18
- // Layouts
19
- // Pages
20
- Dashboard: _sfc_main$1,
21
- // Admin components
22
- // AdminDashboard,
23
- // FastOrders,
24
- // UserEdit,
25
- // Users,
26
- // ProductEdit,
27
- // Backcalls,
28
- // Partials
29
- Sidebar: _sfc_main
17
+ Dashboard: _sfc_main
30
18
  }
31
19
  }
32
20
  };
@@ -1 +1 @@
1
- {"version":3,"file":"backoffice.client.js","sources":["../../../../../src/modules/backoffice/backoffice.client.js"],"sourcesContent":["// Router\nimport addRoutes from '@martyrs/src/modules/core/views/router/addRoutes.js';\nimport { getRoutes } from './backoffice.router.js';\n\n// Views\n// Layouts\n\n// Pages\nimport Dashboard from './components/pages/Dashboard.vue';\n\n// Admin components\n// import AdminDashboard from './components/admin/Dashboard.vue';\n// import FastOrders from './components/admin/FastOrders.vue';\n// import UserEdit from './components/admin/UserEdit.vue';\n// import Users from './components/admin/Users.vue';\n// import ProductEdit from './components/admin/ProductEdit.vue';\n// import Backcalls from './components/admin/Backcalls.vue';\n\n// Partials\nimport Sidebar from './components/partials/Sidebar.vue';\n\n// Пример функции инициализации для модуля бэкофиса\nfunction initializeBackoffice(app, store, router, options = {}) {\n const routes = getRoutes(options);\n routes.forEach(({ parentName, config }) => {\n addRoutes(router, { ...config, parentName });\n });\n}\n\nconst ModuleBackoffice = {\n initialize: initializeBackoffice,\n views: {\n router: {\n getRoutes,\n },\n components: {\n // Layouts\n // Pages\n Dashboard,\n // Admin components\n // AdminDashboard,\n // FastOrders,\n // UserEdit,\n // Users,\n // ProductEdit,\n // Backcalls,\n // Partials\n Sidebar,\n },\n },\n};\n\nexport default ModuleBackoffice;\n"],"names":["Dashboard","Sidebar"],"mappings":";;;;AAsBA,SAAS,qBAAqB,KAAK,OAAO,QAAQ,UAAU,CAAA,GAAI;AAC9D,QAAM,SAAS,UAAU,OAAO;AAChC,SAAO,QAAQ,CAAC,EAAE,YAAY,OAAM,MAAO;AACzC,cAAU,QAAQ,EAAE,GAAG,QAAQ,WAAU,CAAE;AAAA,EAC7C,CAAC;AACH;AAEK,MAAC,mBAAmB;AAAA,EACvB,YAAY;AAAA,EACZ,OAAO;AAAA,IACL,QAAQ;AAAA,MACN;AAAA,IACN;AAAA,IACI,YAAY;AAAA;AAAA;AAAA,MAGhB,WAAMA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,MASN,SAAMC;AAAAA,IACN;AAAA,EACA;AACA;"}
1
+ {"version":3,"file":"backoffice.client.js","sources":["../../../../../src/modules/backoffice/backoffice.client.js"],"sourcesContent":["// Router\nimport addRoutes from '@martyrs/src/modules/core/views/router/addRoutes.js';\nimport { getRoutes } from './router/backoffice.router.js';\n\n// Views\n// Pages\nimport Dashboard from './components/pages/Dashboard.vue';\n\n// Пример функции инициализации для модуля бэкофиса\nfunction initializeBackoffice(app, store, router, options = {}) {\n const routes = getRoutes(options);\n routes.forEach(({ parentName, config }) => {\n addRoutes(router, { ...config, parentName });\n });\n}\n\nconst ModuleBackoffice = {\n initialize: initializeBackoffice,\n views: {\n router: {\n getRoutes,\n },\n components: {\n Dashboard,\n },\n },\n};\n\nexport default ModuleBackoffice;\n"],"names":["Dashboard"],"mappings":";;;AASA,SAAS,qBAAqB,KAAK,OAAO,QAAQ,UAAU,CAAA,GAAI;AAC9D,QAAM,SAAS,UAAU,OAAO;AAChC,SAAO,QAAQ,CAAC,EAAE,YAAY,OAAM,MAAO;AACzC,cAAU,QAAQ,EAAE,GAAG,QAAQ,WAAU,CAAE;AAAA,EAC7C,CAAC;AACH;AAEK,MAAC,mBAAmB;AAAA,EACvB,YAAY;AAAA,EACZ,OAAO;AAAA,IACL,QAAQ;AAAA,MACN;AAAA,IACN;AAAA,IACI,YAAY;AAAA,MAChB,WAAMA;AAAAA,IACN;AAAA,EACA;AACA;"}
@@ -0,0 +1,99 @@
1
+ import _sfc_main$2 from "../../icons/entities/IconProducts.vue.js";
2
+ import _sfc_main$7 from "../../icons/entities/IconPayments.vue.js";
3
+ import _sfc_main$6 from "../../icons/entities/IconEvents.vue.js";
4
+ import _sfc_main from "../../icons/entities/IconGroups.vue.js";
5
+ import _sfc_main$1 from "../../icons/entities/IconCommunity.vue.js";
6
+ import _sfc_main$5 from "../../icons/entities/IconGallery.vue.js";
7
+ import _sfc_main$4 from "../../icons/entities/IconOrders.vue.js";
8
+ import _sfc_main$3 from "../../icons/entities/IconLeftovers.vue.js";
9
+ const navigationItems = [
10
+ {
11
+ category: "Menu",
12
+ visible: () => true,
13
+ items: [
14
+ {
15
+ title: "Organizations",
16
+ iconComponent: _sfc_main,
17
+ route: () => "/backoffice/organizations",
18
+ visible: () => true
19
+ },
20
+ {
21
+ title: "Community",
22
+ iconComponent: _sfc_main$1,
23
+ route: () => "/backoffice/community",
24
+ visible: () => true
25
+ },
26
+ {
27
+ title: "Products",
28
+ iconComponent: _sfc_main$2,
29
+ route: () => "/backoffice/products",
30
+ visible: () => true
31
+ },
32
+ {
33
+ title: "Inventory",
34
+ iconComponent: _sfc_main$3,
35
+ route: () => "/backoffice/inventory",
36
+ visible: () => true
37
+ },
38
+ {
39
+ title: "Orders",
40
+ iconComponent: _sfc_main$4,
41
+ route: () => "/backoffice/orders",
42
+ visible: () => true
43
+ },
44
+ {
45
+ title: "Gallery",
46
+ iconComponent: _sfc_main$5,
47
+ route: () => "/backoffice/gallery",
48
+ visible: () => true
49
+ },
50
+ {
51
+ title: "Applications",
52
+ iconComponent: _sfc_main$6,
53
+ route: () => "/backoffice/applications",
54
+ visible: () => true
55
+ },
56
+ {
57
+ title: "Events",
58
+ iconComponent: _sfc_main$6,
59
+ route: () => "/backoffice/events",
60
+ visible: () => true
61
+ }
62
+ ]
63
+ },
64
+ {
65
+ category: "General",
66
+ visible: () => true,
67
+ items: [
68
+ {
69
+ title: "Payments",
70
+ iconComponent: _sfc_main$7,
71
+ route: () => "/backoffice/payments",
72
+ visible: () => true
73
+ },
74
+ {
75
+ title: "Users",
76
+ iconComponent: null,
77
+ route: () => "/backoffice/users",
78
+ visible: () => true
79
+ },
80
+ {
81
+ title: "Pages",
82
+ iconComponent: null,
83
+ route: () => "/backoffice/pages",
84
+ visible: () => true
85
+ },
86
+ {
87
+ title: "Reports",
88
+ iconComponent: null,
89
+ route: () => "/backoffice/reports",
90
+ visible: () => true
91
+ }
92
+ ]
93
+ }
94
+ ];
95
+ export {
96
+ navigationItems as default,
97
+ navigationItems
98
+ };
99
+ //# sourceMappingURL=navigation.backoffice.config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation.backoffice.config.js","sources":["../../../../../../src/modules/backoffice/configs/navigation.backoffice.config.js"],"sourcesContent":["// Import icons\nimport IconProducts from '@martyrs/src/modules/icons/entities/IconProducts.vue'\nimport IconPayments from '@martyrs/src/modules/icons/entities/IconPayments.vue'\nimport IconEvents from '@martyrs/src/modules/icons/entities/IconEvents.vue'\nimport IconGroups from '@martyrs/src/modules/icons/entities/IconGroups.vue'\nimport IconCommunity from '@martyrs/src/modules/icons/entities/IconCommunity.vue'\nimport IconGallery from '@martyrs/src/modules/icons/entities/IconGallery.vue'\nimport IconOrders from '@martyrs/src/modules/icons/entities/IconOrders.vue'\nimport IconLeftovers from '@martyrs/src/modules/icons/entities/IconLeftovers.vue'\n\n// Backoffice navigation configuration\nexport const navigationItems = [\n {\n category: 'Menu',\n visible: () => true,\n items: [\n {\n title: 'Organizations',\n iconComponent: IconGroups,\n route: () => '/backoffice/organizations',\n visible: () => true\n },\n {\n title: 'Community',\n iconComponent: IconCommunity,\n route: () => '/backoffice/community',\n visible: () => true\n },\n {\n title: 'Products',\n iconComponent: IconProducts,\n route: () => '/backoffice/products',\n visible: () => true\n },\n {\n title: 'Inventory',\n iconComponent: IconLeftovers,\n route: () => '/backoffice/inventory',\n visible: () => true\n },\n {\n title: 'Orders',\n iconComponent: IconOrders,\n route: () => '/backoffice/orders',\n visible: () => true\n },\n {\n title: 'Gallery',\n iconComponent: IconGallery,\n route: () => '/backoffice/gallery',\n visible: () => true\n },\n {\n title: 'Applications',\n iconComponent: IconEvents,\n route: () => '/backoffice/applications',\n visible: () => true\n },\n {\n title: 'Events',\n iconComponent: IconEvents,\n route: () => '/backoffice/events',\n visible: () => true\n }\n ]\n },\n {\n category: 'General',\n visible: () => true,\n items: [\n {\n title: 'Payments',\n iconComponent: IconPayments,\n route: () => '/backoffice/payments',\n visible: () => true\n },\n {\n title: 'Users',\n iconComponent: null,\n route: () => '/backoffice/users',\n visible: () => true\n },\n {\n title: 'Pages',\n iconComponent: null,\n route: () => '/backoffice/pages',\n visible: () => true\n },\n {\n title: 'Reports',\n iconComponent: null,\n route: () => '/backoffice/reports',\n visible: () => true\n }\n ]\n }\n]\n\nexport default navigationItems\n"],"names":["IconGroups","IconCommunity","IconProducts","IconLeftovers","IconOrders","IconGallery","IconEvents","IconPayments"],"mappings":";;;;;;;;AAWY,MAAC,kBAAkB;AAAA,EAC7B;AAAA,IACE,UAAU;AAAA,IACV,SAAS,MAAM;AAAA,IACf,OAAO;AAAA,MACL;AAAA,QACE,OAAO;AAAA,QACP,eAAeA;AAAAA,QACf,OAAO,MAAM;AAAA,QACb,SAAS,MAAM;AAAA,MACvB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,eAAeC;AAAAA,QACf,OAAO,MAAM;AAAA,QACb,SAAS,MAAM;AAAA,MACvB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,eAAeC;AAAAA,QACf,OAAO,MAAM;AAAA,QACb,SAAS,MAAM;AAAA,MACvB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,eAAeC;AAAAA,QACf,OAAO,MAAM;AAAA,QACb,SAAS,MAAM;AAAA,MACvB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,eAAeC;AAAAA,QACf,OAAO,MAAM;AAAA,QACb,SAAS,MAAM;AAAA,MACvB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,eAAeC;AAAAA,QACf,OAAO,MAAM;AAAA,QACb,SAAS,MAAM;AAAA,MACvB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,eAAeC;AAAAA,QACf,OAAO,MAAM;AAAA,QACb,SAAS,MAAM;AAAA,MACvB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,eAAeA;AAAAA,QACf,OAAO,MAAM;AAAA,QACb,SAAS,MAAM;AAAA,MACvB;AAAA,IACA;AAAA,EACA;AAAA,EACE;AAAA,IACE,UAAU;AAAA,IACV,SAAS,MAAM;AAAA,IACf,OAAO;AAAA,MACL;AAAA,QACE,OAAO;AAAA,QACP,eAAeC;AAAAA,QACf,OAAO,MAAM;AAAA,QACb,SAAS,MAAM;AAAA,MACvB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,eAAe;AAAA,QACf,OAAO,MAAM;AAAA,QACb,SAAS,MAAM;AAAA,MACvB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,eAAe;AAAA,QACf,OAAO,MAAM;AAAA,QACb,SAAS,MAAM;AAAA,MACvB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,eAAe;AAAA,QACf,OAAO,MAAM;AAAA,QACb,SAAS,MAAM;AAAA,MACvB;AAAA,IACA;AAAA,EACA;AACA;"}
@@ -1,4 +1,5 @@
1
- import _sfc_main from "./components/partials/Sidebar.vue.js";
1
+ import Navigation from "../../core/views/components/partials/Navigation.vue.js";
2
+ import { navigationItems } from "../configs/navigation.backoffice.config.js";
2
3
  function getRoutes(options = {}) {
3
4
  const route = options.route || "Home";
4
5
  const routes = [];
@@ -11,8 +12,9 @@ function getRoutes(options = {}) {
11
12
  path: "",
12
13
  name: "Backoffice Root",
13
14
  meta: {
14
- sidebar_navigation: _sfc_main,
15
- sidebar_width_hidden: "w-0"
15
+ sidebar_navigation: Navigation,
16
+ sidebar_navigation_items: navigationItems,
17
+ sidebar_width_hidden: "w-2r"
16
18
  },
17
19
  props: {
18
20
  newsletterPopup: 12344
@@ -20,7 +22,7 @@ function getRoutes(options = {}) {
20
22
  beforeEnter: [
21
23
  () => import(
22
24
  /* webpackChunkName: "auth-validation" */
23
- "../auth/views/middlewares/auth.validation.js"
25
+ "../../auth/views/middlewares/auth.validation.js"
24
26
  ).then((m) => m.requiresAdmin)
25
27
  ],
26
28
  children: [
@@ -35,7 +37,7 @@ function getRoutes(options = {}) {
35
37
  },
36
38
  component: () => import(
37
39
  /* webpackChunkName: 'BackofficeGallery' */
38
- "./components/pages/Dashboard.vue.js"
40
+ "../components/pages/Dashboard.vue.js"
39
41
  )
40
42
  },
41
43
  {
@@ -50,7 +52,7 @@ function getRoutes(options = {}) {
50
52
  },
51
53
  component: () => import(
52
54
  /* webpackChunkName: 'BackofficeOrganizations' */
53
- "../organizations/components/pages/Organizations.vue.js"
55
+ "../../organizations/components/pages/Organizations.vue.js"
54
56
  )
55
57
  },
56
58
  {
@@ -65,7 +67,7 @@ function getRoutes(options = {}) {
65
67
  },
66
68
  component: () => import(
67
69
  /* webpackChunkName: 'BackofficeCommunity' */
68
- "../community/components/pages/Blog.vue.js"
70
+ "../../community/components/pages/Blog.vue.js"
69
71
  )
70
72
  }
71
73
  ]
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backoffice.router.js","sources":["../../../../../../src/modules/backoffice/router/backoffice.router.js"],"sourcesContent":["import Navigation from '@martyrs/src/modules/core/views/components/partials/Navigation.vue'\nimport { navigationItems } from '../configs/navigation.backoffice.config.js'\n\nexport function getRoutes(options = {}) {\n const route = options.route || 'Home';\n const routes = [];\n\n routes.push({\n parentName: route,\n config: {\n basePath: 'backoffice',\n routes: [\n {\n path: '',\n name: 'Backoffice Root',\n meta: {\n sidebar_navigation: Navigation,\n sidebar_navigation_items: navigationItems,\n sidebar_width_hidden: 'w-2r',\n },\n props: {\n newsletterPopup: 12344,\n },\n beforeEnter: [\n () => import(/* webpackChunkName: \"auth-validation\" */ '@martyrs/src/modules/auth/views/middlewares/auth.validation.js').then(m => m.requiresAdmin),\n ],\n children: [\n {\n path: '',\n name: 'Backoffice Admin',\n meta: {\n title: {\n en: 'Backoffice',\n ru: 'Управление',\n },\n },\n component: () => import(/* webpackChunkName: 'BackofficeGallery' */ '../components/pages/Dashboard.vue'),\n },\n {\n path: 'organizations',\n name: 'Backoffice Organizations',\n meta: {\n title: {\n en: 'Backoffice Organizations',\n ru: 'Управление Организациями',\n },\n authorize: [],\n },\n component: () => import(/* webpackChunkName: 'BackofficeOrganizations' */ '@martyrs/src/modules/organizations/components/pages/Organizations.vue'),\n },\n {\n path: 'community',\n name: 'Backoffice Community',\n meta: {\n title: {\n en: 'Backoffice Community',\n ru: 'Управление Сообществом',\n },\n authorize: [],\n },\n component: () => import(/* webpackChunkName: 'BackofficeCommunity' */ '@martyrs/src/modules/community/components/pages/Blog.vue'),\n },\n ],\n }\n ],\n }\n });\n\n return routes;\n}\n"],"names":[],"mappings":";;AAGO,SAAS,UAAU,UAAU,IAAI;AACtC,QAAM,QAAQ,QAAQ,SAAS;AAC/B,QAAM,SAAS,CAAA;AAEf,SAAO,KAAK;AAAA,IACV,YAAY;AAAA,IACZ,QAAQ;AAAA,MACN,UAAU;AAAA,MACV,QAAQ;AAAA,QACN;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,UACN,MAAM;AAAA,YACJ,oBAAoB;AAAA,YACpB,0BAA0B;AAAA,YAC1B,sBAAsB;AAAA,UAClC;AAAA,UACU,OAAO;AAAA,YACL,iBAAiB;AAAA,UAC7B;AAAA,UACU,aAAa;AAAA,YACX,MAAM;AAAA;AAAA,cAAiD;AAAA,YAAgE,EAAE,KAAK,OAAK,EAAE,aAAa;AAAA,UAC9J;AAAA,UACU,UAAU;AAAA,YACR;AAAA,cACE,MAAM;AAAA,cACN,MAAM;AAAA,cACN,MAAM;AAAA,gBACJ,OAAO;AAAA,kBACL,IAAI;AAAA,kBACJ,IAAI;AAAA,gBACtB;AAAA,cACA;AAAA,cACc,WAAW,MAAM;AAAA;AAAA,gBAAmD;AAAA,cAAmC;AAAA,YACrH;AAAA,YACY;AAAA,cACE,MAAM;AAAA,cACN,MAAM;AAAA,cACN,MAAM;AAAA,gBACJ,OAAO;AAAA,kBACL,IAAI;AAAA,kBACJ,IAAI;AAAA,gBACtB;AAAA,gBACgB,WAAW,CAAA;AAAA,cAC3B;AAAA,cACc,WAAW,MAAM;AAAA;AAAA,gBAAyD;AAAA,cAAuE;AAAA,YAC/J;AAAA,YACY;AAAA,cACE,MAAM;AAAA,cACN,MAAM;AAAA,cACN,MAAM;AAAA,gBACJ,OAAO;AAAA,kBACL,IAAI;AAAA,kBACJ,IAAI;AAAA,gBACtB;AAAA,gBACgB,WAAW,CAAA;AAAA,cAC3B;AAAA,cACc,WAAW,MAAM;AAAA;AAAA,gBAAqD;AAAA,cAA0D;AAAA,YAC9I;AAAA,UACA;AAAA,QACA;AAAA,MACA;AAAA,IACA;AAAA,EACA,CAAG;AAED,SAAO;AACT;"}
@@ -7,18 +7,20 @@ import SkeletonBlogpost from "../../../icons/skeletons/SkeletonBlogpost.vue.js";
7
7
  import { useRoute } from "vue-router";
8
8
  import "vue-i18n";
9
9
  /* empty css */
10
- /* empty css */
10
+ /* empty css */
11
11
  import { state as state$1 } from "../../../auth/views/store/auth.js";
12
12
  /* empty css */
13
13
  /* empty css */
14
14
  import _sfc_main$4 from "../sections/Comments.vue.js";
15
15
  import _sfc_main$3 from "../../../constructor/components/sections/Viewer.vue.js";
16
16
  import { state, read } from "../../store/blogposts.js";
17
+ import { useStore } from "../../../core/views/store/core.store.js";
17
18
  const _hoisted_1 = ["href"];
18
19
  const _sfc_main = {
19
20
  __name: "BlogPost",
20
21
  setup(__props) {
21
22
  const route = useRoute();
23
+ const store = useStore();
22
24
  const blogpost = computed(() => state.current);
23
25
  const isLoading = ref(false);
24
26
  const canShare = ref(false);
@@ -29,9 +31,13 @@ const _sfc_main = {
29
31
  const data = await read({ user: state$1.user?._id, url: route.params.url });
30
32
  blogpost.value = data[0];
31
33
  state.current = data[0];
34
+ if (!data || data.length === 0 || !state.current) {
35
+ store.core.state.notFound = true;
36
+ }
32
37
  } catch (err) {
33
38
  error.value = err;
34
39
  console.error("Error fetching blogpost:", err);
40
+ store.core.state.notFound = true;
35
41
  } finally {
36
42
  isLoading.value = false;
37
43
  }
@@ -1 +1 @@
1
- {"version":3,"file":"BlogPost.vue.js","sources":["../../../../../../../src/modules/community/components/pages/BlogPost.vue"],"sourcesContent":["<template>\n <section>\n <TransitionGroup tag=\"ul\" name=\"fade\" class=\"o-hidden bg-light radius-medium\">\n <SkeletonBlogpost\n v-if=\"isLoading\"\n v-for=\"i in 3\" :key=\"i\"\n class=\"\"\n />\n </TransitionGroup>\n <transition \n name=\"fade\"\n >\n <EmptyState \n v-if=\"!isLoading && !blogpost\"\n title=\"No Blogpost Found\"\n description=\"Currently, there are no blogposts available. Please check back later.\"\n class=\"pd-medium mn-b-thin bg-light radius-big\"\n />\n </transition>\n\n <TransitionGroup tag=\"div\" name=\"fade\" class=\"container\">\n \t <!-- <button @click=\"share\" >\n\t\t\t Поделиться\n\t\t\t </button>\n\t\t\t -->\n \t<CardBlogpost \n v-if=\"!isLoading && blogpost\"\n @click=\"$router.push({name: 'Blogpost', params: {url: blogpost.url}})\" \n :blogpost=\"blogpost\" \n :user=\"auth.state.user._id\"\n :type=\"'blogpostPage'\"\n :hideTitle=\"true\"\n class=\"mn-b-small bg-light radius-medium mobile:radius-zero\"\n >\n\n \t <Viewer\n \t v-if=\"blogpost && blogpost.content\"\n \t :content=\"blogpost.content\"\n \t />\n\n \t\t\t\t<a v-if=\"blogpost.source\" :href=\"blogpost.source\" target=\"_blank\" class=\"mn-b-semi d-block w-max radius-big pd-thin bg-black t-white\">\n \t\t\t\t\tCheck Source 🔗\n \t\t\t\t</a>\n \t\t\t\n </CardBlogpost>\n\n \t<!-- <h3 class=\"mn-b-small\">Recommended Communities</h3>\n \t\t<Publics \n \t\t\tclass=\"mn-b-small\"\n \t\t/> -->\n\n <Comments \n v-if=\"!isLoading && blogpost\" \n :type=\"'blogpost'\" \n :target=\"blogpost._id\" \n :owner=\"auth.state.user._id\"\n class=\"bg-light radius-medium mobile:radius-zero pd-medium\"\n />\n \n </TransitionGroup> \n \n </section>\n</template>\n\n<script setup>\nimport { ref, onMounted, computed, onServerPrefetch, watch } from 'vue';\nimport { useHead } from '@unhead/vue'\nimport Loader from '@martyrs/src/components/Loader/Loader.vue';\nimport EmptyState from '@martyrs/src/components/EmptyState/EmptyState.vue';\nimport CardBlogpost from '@martyrs/src/modules/community/components/blocks/CardBlogpost.vue';\nimport SkeletonBlogpost from '@martyrs/src/modules/icons/skeletons/SkeletonBlogpost.vue'\nimport Publics from '@martyrs/src/modules/organizations/components/sections/Publics.vue'\nimport Comments from '@martyrs/src/modules/community/components/sections/Comments.vue';\nimport Viewer from '@martyrs/src/modules/constructor/components/sections/Viewer.vue';\nimport * as blog from '@martyrs/src/modules/community/store/blogposts.js';\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js';\n \nimport { useRoute } from 'vue-router';\n\nconst route = useRoute();\nconst blogpost = computed(() => blog.state.current);\nconst isLoading = ref(false);\nconst canShare = ref(false);\nconst error = ref(null);\n\nasync function fetchBlogpost() {\n try {\n isLoading.value = true;\n const data = await blog.read({ user: auth.state.user?._id, url: route.params.url });\n blogpost.value = data[0];\n // Обновляем состояние хранилища\n blog.state.current = data[0];\n } catch (err) {\n error.value = err;\n console.error('Error fetching blogpost:', err);\n } finally {\n isLoading.value = false;\n }\n}\n\nonServerPrefetch(async() => {\n\tawait fetchBlogpost()\n});\n\nonMounted(async() => {\n if (!blogpost.value || blogpost.value.url !== route.params.url) {\n await fetchBlogpost();\n }\n canShare.value = !!navigator.share;\n});\n\n\nconst share = async () => {\n if (!canShare.value) return;\n try {\n await navigator.share({\n title: blogpost.value.name,\n text: firstText.value?.content.slice(0, 120) || 'Check out this blog post!',\n url: window.location.href,\n });\n console.log('Content shared successfully');\n } catch (error) {\n console.error('Error sharing:', error);\n }\n};\n\nconst firstImage = computed(() => {\n return blogpost.value?.content?.find(block => block.type === 'ImageUpload');\n});\n\nconst firstText = computed(() => {\n return blogpost.value?.content?.find(block => \n block.type === 'Textarea' && block.class !== 'h2'\n );\n});\n\nconst metadata = computed(() => ({\n title: blogpost.value?.name,\n description: firstText.value?.content.slice(0, 120),\n meta: [\n { hid: 'description', name: 'description', content: firstText.value?.content.slice(0, 120) },\n { hid: 'og:title', property: 'og:title', content: blogpost.value?.name },\n { hid: 'og:description', property: 'og:description', content: firstText.value?.content.slice(0, 120) },\n { hid: 'og:image', property: 'og:image', content: firstImage.value?.content ? `${process.env.FILE_SERVER_URL}${firstImage.value.content}` : `${process.env.FILE_SERVER_URL}/favicon/cover.jpg` },\n { hid: 'twitter:title', name: 'twitter:title', content: blogpost.value?.name },\n { hid: 'twitter:description', name: 'twitter:description', content: firstText.value?.content.slice(0, 120) },\n { hid: 'twitter:image', name: 'twitter:image', content: firstImage.value?.content ? `${process.env.FILE_SERVER_URL}${firstImage.value.content}` : `${process.env.FILE_SERVER_URL}/favicon/cover.jpg` },\n { hid: 'twitter:card', name: 'twitter:card', content: 'summary_large_image' },\n ],\n}));\n\nuseHead(metadata);\n</script>\n\n<style lang=\"scss\">\n\n</style>\n"],"names":["blog.state","blog.read","auth.state"],"mappings":";;;;;;;;;;;;;;;;;;;;AA+EA,UAAM,QAAQ,SAAQ;AACtB,UAAM,WAAW,SAAS,MAAMA,MAAW,OAAO;AAClD,UAAM,YAAY,IAAI,KAAK;AAC3B,UAAM,WAAW,IAAI,KAAK;AAC1B,UAAM,QAAQ,IAAI,IAAI;AAEtB,mBAAe,gBAAgB;AAC7B,UAAI;AACF,kBAAU,QAAQ;AAClB,cAAM,OAAO,MAAMC,KAAU,EAAE,MAAMC,QAAW,MAAM,KAAK,KAAK,MAAM,OAAO,IAAG,CAAE;AAClF,iBAAS,QAAQ,KAAK,CAAC;AAEvBF,cAAW,UAAU,KAAK,CAAC;AAAA,MAC7B,SAAS,KAAK;AACZ,cAAM,QAAQ;AACd,gBAAQ,MAAM,4BAA4B,GAAG;AAAA,MAC/C,UAAC;AACC,kBAAU,QAAQ;AAAA,MACpB;AAAA,IACF;AAEA,qBAAiB,YAAW;AAC3B,YAAM,cAAa;AAAA,IACpB,CAAC;AAED,cAAU,YAAW;AACnB,UAAI,CAAC,SAAS,SAAS,SAAS,MAAM,QAAQ,MAAM,OAAO,KAAK;AAC9D,cAAM,cAAa;AAAA,MACrB;AACA,eAAS,QAAQ,CAAC,CAAC,UAAU;AAAA,IAC/B,CAAC;AAiBD,UAAM,aAAa,SAAS,MAAM;AAChC,aAAO,SAAS,OAAO,SAAS,KAAK,WAAS,MAAM,SAAS,aAAa;AAAA,IAC5E,CAAC;AAED,UAAM,YAAY,SAAS,MAAM;AAC/B,aAAO,SAAS,OAAO,SAAS;AAAA,QAAK,WACnC,MAAM,SAAS,cAAc,MAAM,UAAU;AAAA,MACjD;AAAA,IACA,CAAC;AAED,UAAM,WAAW,SAAS,OAAO;AAAA,MAC/B,OAAO,SAAS,OAAO;AAAA,MACvB,aAAa,UAAU,OAAO,QAAQ,MAAM,GAAG,GAAG;AAAA,MAClD,MAAM;AAAA,QACJ,EAAE,KAAK,eAAe,MAAM,eAAe,SAAS,UAAU,OAAO,QAAQ,MAAM,GAAG,GAAG,EAAC;AAAA,QAC1F,EAAE,KAAK,YAAY,UAAU,YAAY,SAAS,SAAS,OAAO,KAAI;AAAA,QACtE,EAAE,KAAK,kBAAkB,UAAU,kBAAkB,SAAS,UAAU,OAAO,QAAQ,MAAM,GAAG,GAAG,EAAC;AAAA,QACpG,EAAE,KAAK,YAAY,UAAU,YAAY,SAAS,WAAW,OAAO,UAAU,GAAG,QAAQ,IAAI,eAAe,GAAG,WAAW,MAAM,OAAO,KAAK,GAAG,QAAQ,IAAI,eAAe,qBAAoB;AAAA,QAC9L,EAAE,KAAK,iBAAiB,MAAM,iBAAiB,SAAS,SAAS,OAAO,KAAI;AAAA,QAC5E,EAAE,KAAK,uBAAuB,MAAM,uBAAuB,SAAS,UAAU,OAAO,QAAQ,MAAM,GAAG,GAAG,EAAC;AAAA,QAC1G,EAAE,KAAK,iBAAiB,MAAM,iBAAiB,SAAS,WAAW,OAAO,UAAU,GAAG,QAAQ,IAAI,eAAe,GAAG,WAAW,MAAM,OAAO,KAAK,GAAG,QAAQ,IAAI,eAAe,qBAAoB;AAAA,QACpM,EAAE,KAAK,gBAAgB,MAAM,gBAAgB,SAAS,sBAAqB;AAAA,MAC/E;AAAA,IACA,EAAE;AAEF,YAAQ,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"BlogPost.vue.js","sources":["../../../../../../../src/modules/community/components/pages/BlogPost.vue"],"sourcesContent":["<template>\n <section>\n <TransitionGroup tag=\"ul\" name=\"fade\" class=\"o-hidden bg-light radius-medium\">\n <SkeletonBlogpost\n v-if=\"isLoading\"\n v-for=\"i in 3\" :key=\"i\"\n class=\"\"\n />\n </TransitionGroup>\n <transition \n name=\"fade\"\n >\n <EmptyState \n v-if=\"!isLoading && !blogpost\"\n title=\"No Blogpost Found\"\n description=\"Currently, there are no blogposts available. Please check back later.\"\n class=\"pd-medium mn-b-thin bg-light radius-big\"\n />\n </transition>\n\n <TransitionGroup tag=\"div\" name=\"fade\" class=\"container\">\n \t <!-- <button @click=\"share\" >\n\t\t\t Поделиться\n\t\t\t </button>\n\t\t\t -->\n \t<CardBlogpost \n v-if=\"!isLoading && blogpost\"\n @click=\"$router.push({name: 'Blogpost', params: {url: blogpost.url}})\" \n :blogpost=\"blogpost\" \n :user=\"auth.state.user._id\"\n :type=\"'blogpostPage'\"\n :hideTitle=\"true\"\n class=\"mn-b-small bg-light radius-medium mobile:radius-zero\"\n >\n\n \t <Viewer\n \t v-if=\"blogpost && blogpost.content\"\n \t :content=\"blogpost.content\"\n \t />\n\n \t\t\t\t<a v-if=\"blogpost.source\" :href=\"blogpost.source\" target=\"_blank\" class=\"mn-b-semi d-block w-max radius-big pd-thin bg-black t-white\">\n \t\t\t\t\tCheck Source 🔗\n \t\t\t\t</a>\n \t\t\t\n </CardBlogpost>\n\n \t<!-- <h3 class=\"mn-b-small\">Recommended Communities</h3>\n \t\t<Publics \n \t\t\tclass=\"mn-b-small\"\n \t\t/> -->\n\n <Comments \n v-if=\"!isLoading && blogpost\" \n :type=\"'blogpost'\" \n :target=\"blogpost._id\" \n :owner=\"auth.state.user._id\"\n class=\"bg-light radius-medium mobile:radius-zero pd-medium\"\n />\n \n </TransitionGroup> \n \n </section>\n</template>\n\n<script setup>\nimport { ref, onMounted, computed, onServerPrefetch, watch } from 'vue';\nimport { useHead } from '@unhead/vue'\nimport Loader from '@martyrs/src/components/Loader/Loader.vue';\nimport EmptyState from '@martyrs/src/components/EmptyState/EmptyState.vue';\nimport CardBlogpost from '@martyrs/src/modules/community/components/blocks/CardBlogpost.vue';\nimport SkeletonBlogpost from '@martyrs/src/modules/icons/skeletons/SkeletonBlogpost.vue'\nimport Publics from '@martyrs/src/modules/organizations/components/sections/Publics.vue'\nimport Comments from '@martyrs/src/modules/community/components/sections/Comments.vue';\nimport Viewer from '@martyrs/src/modules/constructor/components/sections/Viewer.vue';\nimport * as blog from '@martyrs/src/modules/community/store/blogposts.js';\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js';\nimport { useStore } from '@martyrs/src/modules/core/views/store/core.store.js';\n\nimport { useRoute } from 'vue-router';\n\nconst route = useRoute();\nconst store = useStore();\nconst blogpost = computed(() => blog.state.current);\nconst isLoading = ref(false);\nconst canShare = ref(false);\nconst error = ref(null);\n\nasync function fetchBlogpost() {\n try {\n isLoading.value = true;\n const data = await blog.read({ user: auth.state.user?._id, url: route.params.url });\n blogpost.value = data[0];\n // Обновляем состояние хранилища\n blog.state.current = data[0];\n\n // Если пост не найден - устанавливаем 404\n if (!data || data.length === 0 || !blog.state.current) {\n store.core.state.notFound = true;\n }\n } catch (err) {\n error.value = err;\n console.error('Error fetching blogpost:', err);\n store.core.state.notFound = true;\n } finally {\n isLoading.value = false;\n }\n}\n\nonServerPrefetch(async() => {\n\tawait fetchBlogpost()\n});\n\nonMounted(async() => {\n if (!blogpost.value || blogpost.value.url !== route.params.url) {\n await fetchBlogpost();\n }\n canShare.value = !!navigator.share;\n});\n\n\nconst share = async () => {\n if (!canShare.value) return;\n try {\n await navigator.share({\n title: blogpost.value.name,\n text: firstText.value?.content.slice(0, 120) || 'Check out this blog post!',\n url: window.location.href,\n });\n console.log('Content shared successfully');\n } catch (error) {\n console.error('Error sharing:', error);\n }\n};\n\nconst firstImage = computed(() => {\n return blogpost.value?.content?.find(block => block.type === 'ImageUpload');\n});\n\nconst firstText = computed(() => {\n return blogpost.value?.content?.find(block => \n block.type === 'Textarea' && block.class !== 'h2'\n );\n});\n\nconst metadata = computed(() => ({\n title: blogpost.value?.name,\n description: firstText.value?.content.slice(0, 120),\n meta: [\n { hid: 'description', name: 'description', content: firstText.value?.content.slice(0, 120) },\n { hid: 'og:title', property: 'og:title', content: blogpost.value?.name },\n { hid: 'og:description', property: 'og:description', content: firstText.value?.content.slice(0, 120) },\n { hid: 'og:image', property: 'og:image', content: firstImage.value?.content ? `${process.env.FILE_SERVER_URL}${firstImage.value.content}` : `${process.env.FILE_SERVER_URL}/favicon/cover.jpg` },\n { hid: 'twitter:title', name: 'twitter:title', content: blogpost.value?.name },\n { hid: 'twitter:description', name: 'twitter:description', content: firstText.value?.content.slice(0, 120) },\n { hid: 'twitter:image', name: 'twitter:image', content: firstImage.value?.content ? `${process.env.FILE_SERVER_URL}${firstImage.value.content}` : `${process.env.FILE_SERVER_URL}/favicon/cover.jpg` },\n { hid: 'twitter:card', name: 'twitter:card', content: 'summary_large_image' },\n ],\n}));\n\nuseHead(metadata);\n</script>\n\n<style lang=\"scss\">\n\n</style>\n"],"names":["blog.state","blog.read","auth.state"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAgFA,UAAM,QAAQ,SAAQ;AACtB,UAAM,QAAQ,SAAQ;AACtB,UAAM,WAAW,SAAS,MAAMA,MAAW,OAAO;AAClD,UAAM,YAAY,IAAI,KAAK;AAC3B,UAAM,WAAW,IAAI,KAAK;AAC1B,UAAM,QAAQ,IAAI,IAAI;AAEtB,mBAAe,gBAAgB;AAC7B,UAAI;AACF,kBAAU,QAAQ;AAClB,cAAM,OAAO,MAAMC,KAAU,EAAE,MAAMC,QAAW,MAAM,KAAK,KAAK,MAAM,OAAO,IAAG,CAAE;AAClF,iBAAS,QAAQ,KAAK,CAAC;AAEvBF,cAAW,UAAU,KAAK,CAAC;AAG3B,YAAI,CAAC,QAAQ,KAAK,WAAW,KAAK,CAACA,MAAW,SAAS;AACrD,gBAAM,KAAK,MAAM,WAAW;AAAA,QAC9B;AAAA,MACF,SAAS,KAAK;AACZ,cAAM,QAAQ;AACd,gBAAQ,MAAM,4BAA4B,GAAG;AAC7C,cAAM,KAAK,MAAM,WAAW;AAAA,MAC9B,UAAC;AACC,kBAAU,QAAQ;AAAA,MACpB;AAAA,IACF;AAEA,qBAAiB,YAAW;AAC3B,YAAM,cAAa;AAAA,IACpB,CAAC;AAED,cAAU,YAAW;AACnB,UAAI,CAAC,SAAS,SAAS,SAAS,MAAM,QAAQ,MAAM,OAAO,KAAK;AAC9D,cAAM,cAAa;AAAA,MACrB;AACA,eAAS,QAAQ,CAAC,CAAC,UAAU;AAAA,IAC/B,CAAC;AAiBD,UAAM,aAAa,SAAS,MAAM;AAChC,aAAO,SAAS,OAAO,SAAS,KAAK,WAAS,MAAM,SAAS,aAAa;AAAA,IAC5E,CAAC;AAED,UAAM,YAAY,SAAS,MAAM;AAC/B,aAAO,SAAS,OAAO,SAAS;AAAA,QAAK,WACnC,MAAM,SAAS,cAAc,MAAM,UAAU;AAAA,MACjD;AAAA,IACA,CAAC;AAED,UAAM,WAAW,SAAS,OAAO;AAAA,MAC/B,OAAO,SAAS,OAAO;AAAA,MACvB,aAAa,UAAU,OAAO,QAAQ,MAAM,GAAG,GAAG;AAAA,MAClD,MAAM;AAAA,QACJ,EAAE,KAAK,eAAe,MAAM,eAAe,SAAS,UAAU,OAAO,QAAQ,MAAM,GAAG,GAAG,EAAC;AAAA,QAC1F,EAAE,KAAK,YAAY,UAAU,YAAY,SAAS,SAAS,OAAO,KAAI;AAAA,QACtE,EAAE,KAAK,kBAAkB,UAAU,kBAAkB,SAAS,UAAU,OAAO,QAAQ,MAAM,GAAG,GAAG,EAAC;AAAA,QACpG,EAAE,KAAK,YAAY,UAAU,YAAY,SAAS,WAAW,OAAO,UAAU,GAAG,QAAQ,IAAI,eAAe,GAAG,WAAW,MAAM,OAAO,KAAK,GAAG,QAAQ,IAAI,eAAe,qBAAoB;AAAA,QAC9L,EAAE,KAAK,iBAAiB,MAAM,iBAAiB,SAAS,SAAS,OAAO,KAAI;AAAA,QAC5E,EAAE,KAAK,uBAAuB,MAAM,uBAAuB,SAAS,UAAU,OAAO,QAAQ,MAAM,GAAG,GAAG,EAAC;AAAA,QAC1G,EAAE,KAAK,iBAAiB,MAAM,iBAAiB,SAAS,WAAW,OAAO,UAAU,GAAG,QAAQ,IAAI,eAAe,GAAG,WAAW,MAAM,OAAO,KAAK,GAAG,QAAQ,IAAI,eAAe,qBAAoB;AAAA,QACpM,EAAE,KAAK,gBAAgB,MAAM,gBAAgB,SAAS,sBAAqB;AAAA,MAC/E;AAAA,IACA,EAAE;AAEF,YAAQ,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -6,7 +6,7 @@ import _sfc_main$2 from "../../../../components/Popup/Popup.vue.js";
6
6
  import _sfc_main$3 from "../../../../components/FieldTags/BlockTags.vue.js";
7
7
  import _sfc_main$6 from "../../../../components/Checkbox/Checkbox.vue.js";
8
8
  import Field from "../../../../components/Field/Field.vue.js";
9
- import _sfc_main$7 from "../../../../components/Button/Button.vue2.js";
9
+ import _sfc_main$7 from "../../../../components/Button/Button.vue.js";
10
10
  import _sfc_main$5 from "../../../../components/Feed/Feed.vue.js";
11
11
  import _sfc_main$4 from "../../../core/views/components/blocks/Card.vue.js";
12
12
  import { useRoute, useRouter } from "vue-router";
@@ -1 +1 @@
1
- {"version":3,"file":"core.client.js","sources":["../../../../../src/modules/core/core.client.js"],"sourcesContent":["// Functional imports (needed for initialize function)\nimport getBrowserLocale from './views/localization/get-browser-locale.js';\nimport scrollBehavior from './views/router/scrollBehavior.js';\n\nimport * as mixins from './views/mixins/mixins.js';\nimport * as storeCore from './views/store/core.store.js';\nimport { useSession, useStore } from './views/store/core.store.js';\nimport * as appRenderer from './views/utils/vue-app-renderer.js';\nimport './views/utils/polyfills.js'; // Auto-apply polyfills\n\nimport alertPlugin from './views/plugins/alert.plugin.js';\nimport popupAuthPlugin from './views/plugins/popup.auth.plugin.js';\nimport datePickerPlugin from './views/plugins/date-picker.plugin.js';\nimport storeDebuggerPlugin from './views/plugins/store-debugger/store-debugger.plugin.js';\n\n\nimport { wsManager } from './views/classes/ws.manager.js';\nimport { i18nManager } from '@martyrs/src/modules/core/views/classes/i18n.manager.js';\nimport { moduleManager } from './views/classes/module.manager.js';\n\n// Будущие менеджеры:\n// import { notificationManager } from './views/classes/notification.manager.js';\n// import { alertManager } from './views/classes/alert.manager.js';\n\nimport en from './locales/en.js';\nimport ru from './locales/ru.js';\n\n\n// Core module initialization\nfunction initializeCore(app, store, router, config, options = {}) {\n const route = options.route || 'Home';\n\n const locales = {\n en: en,\n ru: ru,\n es: {} // или es: undefined\n };\n\n i18nManager.register('core', locales);\n\n const envVariables = ['NODE_ENV', 'PORT', 'APP_NAME', 'DOMAIN_URL', 'API_URL', 'WSS_URL', 'FILE_SERVER_URL', 'WDT_TOKEN', 'WDM_URL_PROD', 'GOOGLE_MAPS_API_KEY', 'MOBILE_APP'];\n\n app.config.globalProperties.DOMAIN_URL = process.env.DOMAIN_URL;\n app.config.globalProperties.API_URL = process.env.API_URL;\n app.config.globalProperties.WSS_URL = process.env.WSS_URL;\n app.config.globalProperties.MOBILE_APP = process.env.MOBILE_APP;\n app.config.globalProperties.FILE_SERVER_URL = process.env.FILE_SERVER_URL;\n app.config.globalProperties.GOOGLE_MAPS_API_KEY = process.env.GOOGLE_MAPS_API_KEY;\n\n app.mixin(mixins.globalMixins);\n\n app.use(alertPlugin);\n app.use(popupAuthPlugin);\n app.use(datePickerPlugin);\n // app.use(storeDebuggerPlugin, store);\n\n\n // WebSocket инициализируется в client.js после гидратации\n // чтобы не блокировать главный поток\n\n // Change Locale to Route Locale if available\n router.beforeEach((to, from, next) => {\n const locale = to.params.locale;\n\n if (locale) {\n if (!app.config.globalProperties.$i18n.availableLocales.includes(locale)) {\n return next({ path: '/404' });\n } else {\n app.config.globalProperties.$i18n.locale = locale;\n return next();\n }\n }\n\n return next();\n });\n\n if (config) {\n if (config.modules) store.core.state.options = config.modules;\n store.core.state.config = config;\n }\n\n // Core module is already registered by default in createStore()\n // store.addStore('core', storeCore); // Not needed anymore\n\n router.addRoute(route, {\n path: '404',\n name: 'notfound',\n component: () => import('@martyrs/src/modules/core/views/components/pages/404.vue'),\n });\n router.addRoute(route, {\n path: '401',\n name: 'unauthorized',\n component: () => import('@martyrs/src/modules/core/views/components/pages/401.vue'),\n });\n router.addRoute(route, {\n path: ':pathMatch(.*)*',\n name: 'NotFound',\n redirect: { name: 'notfound' },\n });\n}\n\nconst ModuleCore = {\n initialize: initializeCore,\n views: {\n store: {\n storeCore,\n },\n router: {\n // routerCore\n },\n },\n};\n\n// Component re-exports (enables tree shaking)\nexport { default as layoutApp } from './views/components/layouts/App.vue';\nexport { default as layoutClient } from './views/components/layouts/Client.vue';\nexport { default as BlockSearch } from '@martyrs/src/modules/core/views/components/blocks/BlockSearch.vue';\nexport { default as BottomNavigationBar } from '@martyrs/src/modules/core/views/components/partials/BottomNavigationBar.vue';\nexport { default as Header } from '@martyrs/src/modules/core/views/components/partials/Header.vue';\nexport { default as Navigation } from '@martyrs/src/modules/core/views/components/partials/Navigation.vue';\nexport { default as NavigationBar } from '@martyrs/src/modules/core/views/components/partials/NavigationBar.vue';\nexport { default as Sidebar } from '@martyrs/src/modules/core/views/components/partials/Sidebar.vue';\nexport { default as Footer } from '@martyrs/src/modules/core/views/components/partials/Footer.vue';\nexport { default as Walkthrough } from '@martyrs/src/modules/core/views/components/sections/Walkthrough.vue';\n\n// Functional exports\nexport {\n appRenderer,\n getBrowserLocale,\n mixins,\n moduleManager,\n scrollBehavior,\n i18nManager,\n storeCore,\n useSession,\n useStore,\n wsManager,\n};\n\n// Export client factory\nexport { createUniversalApp } from './views/classes/core.app.js';\n\n// Re-export polyfills for documentation\nexport * from './views/utils/polyfills.js';\n\nexport default ModuleCore;\n"],"names":["mixins.globalMixins","storeCore"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BA,SAAS,eAAe,KAAK,OAAO,QAAQ,QAAQ,UAAU,IAAI;AAChE,QAAM,QAAQ,QAAQ,SAAS;AAE/B,QAAM,UAAU;AAAA,IACd;AAAA,IACA;AAAA,IACA,IAAI,CAAA;AAAA;AAAA,EACR;AAEE,cAAY,SAAS,QAAQ,OAAO;AAIpC,MAAI,OAAO,iBAAiB,aAAa,QAAQ,IAAI;AACrD,MAAI,OAAO,iBAAiB,UAAU,QAAQ,IAAI;AAClD,MAAI,OAAO,iBAAiB,UAAU,QAAQ,IAAI;AAClD,MAAI,OAAO,iBAAiB,aAAa,QAAQ,IAAI;AACrD,MAAI,OAAO,iBAAiB,kBAAkB,QAAQ,IAAI;AAC1D,MAAI,OAAO,iBAAiB,sBAAsB,QAAQ,IAAI;AAE9D,MAAI,MAAMA,YAAmB;AAE7B,MAAI,IAAI,WAAW;AACnB,MAAI,IAAI,eAAe;AACvB,MAAI,IAAI,gBAAgB;AAQxB,SAAO,WAAW,CAAC,IAAI,MAAM,SAAS;AACpC,UAAM,SAAS,GAAG,OAAO;AAEzB,QAAI,QAAQ;AACV,UAAI,CAAC,IAAI,OAAO,iBAAiB,MAAM,iBAAiB,SAAS,MAAM,GAAG;AACxE,eAAO,KAAK,EAAE,MAAM,QAAQ;AAAA,MAC9B,OAAO;AACL,YAAI,OAAO,iBAAiB,MAAM,SAAS;AAC3C,eAAO,KAAI;AAAA,MACb;AAAA,IACF;AAEA,WAAO,KAAI;AAAA,EACb,CAAC;AAED,MAAI,QAAQ;AACV,QAAI,OAAO,QAAS,OAAM,KAAK,MAAM,UAAU,OAAO;AACtD,UAAM,KAAK,MAAM,SAAS;AAAA,EAC5B;AAKA,SAAO,SAAS,OAAO;AAAA,IACrB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW,MAAM,OAAO,qCAA0D;AAAA,EACtF,CAAG;AACD,SAAO,SAAS,OAAO;AAAA,IACrB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW,MAAM,OAAO,qCAA0D;AAAA,EACtF,CAAG;AACD,SAAO,SAAS,OAAO;AAAA,IACrB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU,EAAE,MAAM,WAAU;AAAA,EAChC,CAAG;AACH;AAEK,MAAC,aAAa;AAAA,EACjB,YAAY;AAAA,EACZ,OAAO;AAAA,IACL,OAAO;AAAA,MACX,WAAMC;AAAAA,IACN;AAAA,IACI,QAAQ;AAAA;AAAA,IAEZ;AAAA,EACA;AACA;"}
1
+ {"version":3,"file":"core.client.js","sources":["../../../../../src/modules/core/core.client.js"],"sourcesContent":["// Functional imports (needed for initialize function)\nimport getBrowserLocale from './views/localization/get-browser-locale.js';\nimport scrollBehavior from './views/router/scrollBehavior.js';\n\nimport * as mixins from './views/mixins/mixins.js';\nimport * as storeCore from './views/store/core.store.js';\nimport { useSession, useStore } from './views/store/core.store.js';\nimport * as appRenderer from './views/utils/vue-app-renderer.js';\nimport './views/utils/polyfills.js'; // Auto-apply polyfills\n\nimport alertPlugin from './views/plugins/alert.plugin.js';\nimport popupAuthPlugin from './views/plugins/popup.auth.plugin.js';\nimport datePickerPlugin from './views/plugins/date-picker.plugin.js';\nimport storeDebuggerPlugin from './views/plugins/store-debugger/store-debugger.plugin.js';\n\n\nimport { wsManager } from './views/classes/ws.manager.js';\nimport { i18nManager } from '@martyrs/src/modules/core/views/classes/i18n.manager.js';\nimport { moduleManager } from './views/classes/module.manager.js';\n\n// Будущие менеджеры:\n// import { notificationManager } from './views/classes/notification.manager.js';\n// import { alertManager } from './views/classes/alert.manager.js';\n\nimport en from './locales/en.js';\nimport ru from './locales/ru.js';\n\n\n// Core module initialization\nfunction initializeCore(app, store, router, config, options = {}) {\n const route = options.route || 'Home';\n\n const locales = {\n en: en,\n ru: ru,\n es: {} // или es: undefined\n };\n\n i18nManager.register('core', locales);\n\n const envVariables = ['NODE_ENV', 'PORT', 'APP_NAME', 'DOMAIN_URL', 'API_URL', 'WSS_URL', 'FILE_SERVER_URL', 'WDT_TOKEN', 'WDM_URL_PROD', 'GOOGLE_MAPS_API_KEY', 'MOBILE_APP'];\n\n app.config.globalProperties.DOMAIN_URL = process.env.DOMAIN_URL;\n app.config.globalProperties.API_URL = process.env.API_URL;\n app.config.globalProperties.WSS_URL = process.env.WSS_URL;\n app.config.globalProperties.MOBILE_APP = process.env.MOBILE_APP;\n app.config.globalProperties.FILE_SERVER_URL = process.env.FILE_SERVER_URL;\n app.config.globalProperties.GOOGLE_MAPS_API_KEY = process.env.GOOGLE_MAPS_API_KEY;\n\n app.mixin(mixins.globalMixins);\n\n app.use(alertPlugin);\n app.use(popupAuthPlugin);\n app.use(datePickerPlugin);\n // app.use(storeDebuggerPlugin, store);\n\n\n // WebSocket инициализируется в client.js после гидратации\n // чтобы не блокировать главный поток\n\n // Change Locale to Route Locale if available\n router.beforeEach((to, from, next) => {\n const locale = to.params.locale;\n\n if (locale) {\n if (!app.config.globalProperties.$i18n.availableLocales.includes(locale)) {\n return next({ path: '/404' });\n } else {\n app.config.globalProperties.$i18n.locale = locale;\n return next();\n }\n }\n\n return next();\n });\n\n if (config) {\n if (config.modules) store.core.state.options = config.modules;\n store.core.state.config = config;\n }\n\n // Core module is already registered by default in createStore()\n // store.addStore('core', storeCore); // Not needed anymore\n\n router.addRoute(route, {\n path: '404',\n name: 'notfound',\n component: () => import('@martyrs/src/modules/core/views/components/pages/404.vue'),\n });\n router.addRoute(route, {\n path: '401',\n name: 'unauthorized',\n component: () => import('@martyrs/src/modules/core/views/components/pages/401.vue'),\n });\n router.addRoute(route, {\n path: ':pathMatch(.*)*',\n name: 'NotFound',\n redirect: { name: 'notfound' },\n });\n}\n\nconst ModuleCore = {\n initialize: initializeCore,\n views: {\n store: {\n storeCore,\n },\n router: {\n // routerCore\n },\n },\n};\n\n// Component re-exports (enables tree shaking)\nexport { default as layoutApp } from './views/components/layouts/App.vue';\nexport { default as layoutClient } from './views/components/layouts/Client.vue';\nexport { default as BlockSearch } from '@martyrs/src/modules/core/views/components/blocks/BlockSearch.vue';\nexport { default as BottomNavigationBar } from '@martyrs/src/modules/core/views/components/partials/BottomNavigationBar.vue';\nexport { default as Header } from '@martyrs/src/modules/core/views/components/partials/Header.vue';\nexport { default as Navigation } from '@martyrs/src/modules/core/views/components/partials/Navigation.vue';\nexport { default as NavigationBar } from '@martyrs/src/modules/core/views/components/partials/NavigationBar.vue';\nexport { default as Sidebar } from '@martyrs/src/modules/core/views/components/partials/Sidebar.vue';\nexport { default as Footer } from '@martyrs/src/modules/core/views/components/partials/Footer.vue';\nexport { default as Walkthrough } from '@martyrs/src/modules/core/views/components/sections/Walkthrough.vue';\n\n\n// Functional exports\nexport {\n appRenderer,\n getBrowserLocale,\n mixins,\n moduleManager,\n scrollBehavior,\n i18nManager,\n storeCore,\n useSession,\n useStore,\n wsManager,\n};\n\n// Export client factory\nexport { createUniversalApp } from './views/classes/core.app.js';\n\n// Re-export polyfills for documentation\nexport * from './views/utils/polyfills.js';\n\nexport default ModuleCore;\n"],"names":["mixins.globalMixins","storeCore"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BA,SAAS,eAAe,KAAK,OAAO,QAAQ,QAAQ,UAAU,IAAI;AAChE,QAAM,QAAQ,QAAQ,SAAS;AAE/B,QAAM,UAAU;AAAA,IACd;AAAA,IACA;AAAA,IACA,IAAI,CAAA;AAAA;AAAA,EACR;AAEE,cAAY,SAAS,QAAQ,OAAO;AAIpC,MAAI,OAAO,iBAAiB,aAAa,QAAQ,IAAI;AACrD,MAAI,OAAO,iBAAiB,UAAU,QAAQ,IAAI;AAClD,MAAI,OAAO,iBAAiB,UAAU,QAAQ,IAAI;AAClD,MAAI,OAAO,iBAAiB,aAAa,QAAQ,IAAI;AACrD,MAAI,OAAO,iBAAiB,kBAAkB,QAAQ,IAAI;AAC1D,MAAI,OAAO,iBAAiB,sBAAsB,QAAQ,IAAI;AAE9D,MAAI,MAAMA,YAAmB;AAE7B,MAAI,IAAI,WAAW;AACnB,MAAI,IAAI,eAAe;AACvB,MAAI,IAAI,gBAAgB;AAQxB,SAAO,WAAW,CAAC,IAAI,MAAM,SAAS;AACpC,UAAM,SAAS,GAAG,OAAO;AAEzB,QAAI,QAAQ;AACV,UAAI,CAAC,IAAI,OAAO,iBAAiB,MAAM,iBAAiB,SAAS,MAAM,GAAG;AACxE,eAAO,KAAK,EAAE,MAAM,QAAQ;AAAA,MAC9B,OAAO;AACL,YAAI,OAAO,iBAAiB,MAAM,SAAS;AAC3C,eAAO,KAAI;AAAA,MACb;AAAA,IACF;AAEA,WAAO,KAAI;AAAA,EACb,CAAC;AAED,MAAI,QAAQ;AACV,QAAI,OAAO,QAAS,OAAM,KAAK,MAAM,UAAU,OAAO;AACtD,UAAM,KAAK,MAAM,SAAS;AAAA,EAC5B;AAKA,SAAO,SAAS,OAAO;AAAA,IACrB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW,MAAM,OAAO,qCAA0D;AAAA,EACtF,CAAG;AACD,SAAO,SAAS,OAAO;AAAA,IACrB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW,MAAM,OAAO,qCAA0D;AAAA,EACtF,CAAG;AACD,SAAO,SAAS,OAAO;AAAA,IACrB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU,EAAE,MAAM,WAAU;AAAA,EAChC,CAAG;AACH;AAEK,MAAC,aAAa;AAAA,EACjB,YAAY;AAAA,EACZ,OAAO;AAAA,IACL,OAAO;AAAA,MACX,WAAMC;AAAAA,IACN;AAAA,IACI,QAAQ;AAAA;AAAA,IAEZ;AAAA,EACA;AACA;"}
@@ -186,8 +186,9 @@ function createUniversalApp({
186
186
  ssr: true
187
187
  };
188
188
  performance.mark("loading-20-start");
189
- console.log("[LOADING 20] SSR renderApp starting and loading modules...");
189
+ console.log("[SSR-404] renderApp starting, url:", url);
190
190
  const requiredModules = moduleManager2.getModulesForRoute(url);
191
+ console.log("[SSR-404] required modules:", requiredModules.map((m) => m.name));
191
192
  const currentRouteModules = [];
192
193
  for (const module of requiredModules) {
193
194
  await moduleManager2.load(module.name, context);
@@ -198,8 +199,11 @@ function createUniversalApp({
198
199
  performance.measure("loading-20", "loading-20-start", "loading-20-end");
199
200
  const measure20 = performance.getEntriesByName("loading-20")[0];
200
201
  console.log(`[LOADING 20] SSR modules loaded in ${measure20?.duration?.toFixed(2)}ms`);
202
+ console.log("[SSR-404] modules loaded, pushing url:", url);
203
+ console.log("[SSR-404] available routes:", router.getRoutes().map((r) => r.path));
201
204
  await router.push(url);
202
205
  await router.isReady();
206
+ console.log("[SSR-404] router ready, currentRoute:", router.currentRoute.value.name, router.currentRoute.value.path);
203
207
  const result = await appRenderer.render({
204
208
  url,
205
209
  cookies,
@@ -1 +1 @@
1
- {"version":3,"file":"core.app.js","sources":["../../../../../../../src/modules/core/views/classes/core.app.js"],"sourcesContent":["// client-factory.js - фабрика для создания клиентского приложения\nimport { nextTick, createApp as createVueApp, createSSRApp as createVueSSRApp } from 'vue';\nimport { createHead } from '@unhead/vue';\n\nexport function createUniversalApp({\n getConfig,\n getRouter,\n getLocales,\n getStore,\n getHooks = {}\n}) {\n // Lazy imports to avoid circular dependencies\n const getLayoutApp = () => import('../components/layouts/App.vue').then(m => m.default);\n const getModuleRegistry = () => import('./module.manager.js').then(m => m.moduleManager);\n const getWebsockets = () => import('./ws.manager.js').then(m => m.default);\n const getAppRenderer = () => import('../utils/vue-app-renderer.js');\n \n // Асинхронная инициализация для избежания циклических зависимостей\n async function initializeApp() {\n // [LOADING 14] Starting initializeApp\n performance.mark('loading-14-start');\n console.log('[LOADING 14] Starting application initialization...');\n\n // Создаем конфигурацию\n const config = await getConfig();\n const hooks = getHooks;\n\n // [LOADING 15] Loading core dependencies\n performance.mark('loading-15-start');\n console.log('[LOADING 15] Loading core dependencies via Promise.all...');\n\n const [layoutApp, moduleManager, wsManager, appRenderer] = await Promise.all([\n getLayoutApp(),\n getModuleRegistry(),\n getWebsockets(),\n getAppRenderer()\n ]);\n\n performance.mark('loading-15-end');\n performance.measure('loading-15', 'loading-15-start', 'loading-15-end');\n const measure15 = performance.getEntriesByName('loading-15')[0];\n console.log(`[LOADING 15] Core dependencies loaded in ${measure15?.duration?.toFixed(2)}ms`);\n \n // Core module is always loaded - no need to register in moduleManager\n\n // [LOADING 16] Registering modules in registry\n performance.mark('loading-16-start');\n console.log('[LOADING 16] Registering modules in registry...');\n\n // Регистрация модулей из config\n Object.entries(config.modules).forEach(([name, module]) => {\n if (module.loader) {\n moduleManager.register(name, {\n loader: module.loader,\n routes: module.routes || [],\n priority: module.priority || 'normal',\n critical: module.critical || false,\n dependencies: module.dependencies || [],\n preload: module.preload || false\n });\n }\n });\n\n performance.mark('loading-16-end');\n performance.measure('loading-16', 'loading-16-start', 'loading-16-end');\n const measure16 = performance.getEntriesByName('loading-16')[0];\n console.log(`[LOADING 16] Modules registered in ${measure16?.duration?.toFixed(2)}ms`);\n \n // Основная функция создания приложения\n function createApp() {\n const store = getStore();\n const app = process.env.MOBILE_APP \n ? createVueApp(layoutApp, config) \n : createVueSSRApp(layoutApp, config);\n \n const meta = createHead();\n const i18n = getLocales();\n \n const context = {\n app,\n store,\n router: null,\n config,\n };\n \n // Создаем роутер с контекстом\n const router = getRouter(context);\n context.router = router;\n\n // Регистрируем заглушки для роутов, которые требуют другие модули\n // Когда Organizations/Backoffice/Auth загрузятся, они заменят эти заглушки\n const stubComponent = { template: '<router-view />' };\n\n router.addRoute('Home', {\n path: 'backoffice',\n name: 'Backoffice Root',\n children: [],\n component: stubComponent,\n meta: {\n sidebar_width_hidden: 'w-0',\n }\n });\n\n router.addRoute('Home', {\n path: 'organizations/:_id',\n name: 'OrganizationRoot',\n children: [],\n component: stubComponent\n });\n\n router.addRoute('Home', {\n path: 'users/:_id',\n name: 'User Profile Root',\n children: [],\n component: stubComponent\n });\n \n // No critical modules - everything loads on demand\n \n // Router guard для загрузки модулей ДО навигации (только на клиенте)\n if (typeof window !== 'undefined') {\n router.beforeEach(async (to, from) => {\n // Получаем оригинальный путь ДО fallback редиректа на 404\n // Это критически важно для SSR гидратации вложенных роутов!\n const target = to.redirectedFrom || to;\n \n // Используем оригинальный путь для определения нужных модулей\n const requiredModules = moduleManager.getModulesForRoute(target.path);\n \n // Проверяем, какие модули еще не загружены\n const modulesToLoad = requiredModules.filter(m => !moduleManager.initialized.has(m.name));\n \n if (modulesToLoad.length > 0) {\n // Логируем если это редирект с 404 (для отладки)\n if (to.redirectedFrom) {\n console.log('[Router] Loading modules for redirected path:', target.path, 'modules:', modulesToLoad.map(m => m.name));\n }\n\n // [LOADING 18] Loading modules for route\n performance.mark('loading-18-start');\n console.log(`[LOADING 18] Loading ${modulesToLoad.length} modules for route...`);\n\n // Загружаем и инициализируем модули\n for (const module of modulesToLoad) {\n try {\n await moduleManager.load(module.name, context);\n await moduleManager.initialize(module.name, context);\n } catch (error) {\n console.error(`Failed to load module ${module.name}:`, error);\n }\n }\n\n performance.mark('loading-18-end');\n performance.measure('loading-18', 'loading-18-start', 'loading-18-end');\n const measure18 = performance.getEntriesByName('loading-18')[0];\n console.log(`[LOADING 18] Modules loaded for route in ${measure18?.duration?.toFixed(2)}ms`);\n\n // После загрузки модулей и регистрации их роутов,\n // возвращаем объект с оригинальным путем и replace: true\n // Это заставит роутер заново резолвить маршрут с новыми роутами\n return { path: target.fullPath, replace: true };\n }\n });\n }\n\n router.beforeResolve(async (to, from) => {\n store.core.state.loading = false;\n })\n \n // Error handler для lazy loaded chunks\n if (typeof window !== 'undefined') {\n window.addEventListener('error', (e) => {\n if (e.message && e.message.includes('Loading chunk')) {\n console.error('Chunk loading failed:', e);\n // Можно показать уведомление пользователю\n // или попытаться перезагрузить\n }\n });\n }\n \n // Инициализация в правильном порядке\n const initialize = async () => {\n // Хук ДО инициализации\n if (hooks.beforeInitialize) {\n await hooks.beforeInitialize(context);\n }\n // [LOADING 17] Initializing Core module\n performance.mark('loading-17-start');\n console.log('[LOADING 17] Initializing Core module...');\n\n // Core module must ALWAYS be initialized\n const ModuleCore = await import('../../core.client.js');\n await ModuleCore.default.initialize(app, store, router, config);\n\n performance.mark('loading-17-end');\n performance.measure('loading-17', 'loading-17-start', 'loading-17-end');\n const measure17 = performance.getEntriesByName('loading-17')[0];\n console.log(`[LOADING 17] Core module initialized in ${measure17?.duration?.toFixed(2)}ms`);\n\n // 2. WebSocket (отложим после гидратации, только если включен)\n const useWebsocket = config.globals?.websocket !== false; // по умолчанию false\n\n if (useWebsocket && typeof window !== 'undefined') {\n // Откладываем инициализацию WebSocket после гидратации\n requestIdleCallback(() => {\n wsManager.initialize({\n wsUrl: process.env.WSS_URL || undefined,\n maxReconnectAttempts: 5,\n reconnectDelay: 3000,\n pingInterval: 30000,\n });\n });\n }\n\n // 3. Предзагрузка важных модулей в фоне\n if (typeof window !== 'undefined') {\n requestIdleCallback(() => {\n moduleManager.preloadModules(context);\n });\n }\n \n // 5. Подключаем Vue плагины\n app.use(router).use(i18n).use(meta);\n \n // 6. Монтируем приложение\n if (process.env.MOBILE_APP) {\n app.mount('#app');\n }\n\n // Хук ПОСЛЕ инициализации\n if (hooks.afterInitialize) {\n await hooks.afterInitialize(context);\n }\n\n // [LOADING 19] Application initialization completed\n performance.mark('loading-19-end');\n performance.measure('loading-19', 'loading-14-start', 'loading-19-end');\n const measure19 = performance.getEntriesByName('loading-19')[0];\n console.log(`[LOADING 19] Application initialization completed in ${measure19?.duration?.toFixed(2)}ms`);\n\n return {\n app,\n router,\n store,\n i18n,\n meta,\n moduleManager,\n config,\n };\n };\n \n // Возвращаем промис для SSR\n if (!process.env.MOBILE_APP) {\n return initialize();\n }\n \n // Для SPA инициализируем сразу\n initialize();\n }\n \n // FOR SSR / SERVER ENTRY\n async function renderApp({ url, cookies, headers, languages, ssrContext }) {\n const { app, router, store, i18n, meta, moduleManager } = await createApp();\n \n // Set SSR store for useStore calls\n if (typeof window === 'undefined') {\n const { setSSRStore } = await import('../store/core.store.js');\n await setSSRStore(store);\n }\n \n const context = {\n app,\n store,\n router,\n config,\n ssr: true,\n };\n\n // [LOADING 20] SSR renderApp starting and loading modules\n performance.mark('loading-20-start');\n console.log('[LOADING 20] SSR renderApp starting and loading modules...');\n\n // Для SSR загружаем модули для текущего маршрута\n const requiredModules = moduleManager.getModulesForRoute(url);\n\n // Собираем имена модулей которые нужны для текущего роута\n const currentRouteModules = [];\n\n // Загружаем необходимые модули для SSR\n for (const module of requiredModules) {\n await moduleManager.load(module.name, context);\n await moduleManager.initialize(module.name, context);\n currentRouteModules.push(module.name);\n }\n\n performance.mark('loading-20-end');\n performance.measure('loading-20', 'loading-20-start', 'loading-20-end');\n const measure20 = performance.getEntriesByName('loading-20')[0];\n console.log(`[LOADING 20] SSR modules loaded in ${measure20?.duration?.toFixed(2)}ms`);\n \n // После загрузки модулей и регистрации роутов, выполняем навигацию\n await router.push(url);\n await router.isReady();\n \n const result = await appRenderer.render({\n url,\n cookies,\n headers,\n createApp: () => ({ app, router, store, i18n, meta }),\n ssrContext\n });\n \n if (ssrContext?.modules) {\n result.usedModules = Array.from(ssrContext.modules);\n }\n \n // Передаем только модули текущего роута (без критических)\n result.loadedModules = currentRouteModules;\n\n // [LOADING 21] SSR render completed\n performance.mark('loading-21-end');\n performance.measure('loading-21', 'loading-20-start', 'loading-21-end');\n const measure21 = performance.getEntriesByName('loading-21')[0];\n console.log(`[LOADING 21] SSR render completed in ${measure21?.duration?.toFixed(2)}ms`);\n\n // Clean up for next SSR request\n if (typeof window === 'undefined') {\n moduleManager.initialized.clear();\n moduleManager.modules.clear();\n moduleManager.loadingPromises.clear();\n\n const { clearSSRStore } = await import('../store/core.store.js');\n await clearSSRStore();\n }\n\n return result;\n }\n \n // FOR SPA\n if (typeof window !== 'undefined' && process.env.MOBILE_APP) {\n createApp();\n }\n \n // FOR SSR / CLIENT ENTRY\n if (typeof window !== 'undefined' && !process.env.MOBILE_APP) {\n // Используем renderAndMountApp для правильной гидратации со state\n appRenderer.renderAndMountApp({ createApp, hooks }).then(({ app, router, store, moduleManager }) => {\n // Хук ПОСЛЕ гидратации\n if (hooks.afterHydration) {\n hooks.afterHydration({ app, router, store, moduleManager });\n }\n \n // Модули уже загружены в renderAndMountApp, просто ставим маркер\n if (typeof window !== 'undefined') {\n window.performance.mark('client-ready');\n }\n }).catch(error => {\n console.error('Hydration failed:', error);\n });\n }\n \n return { createApp, renderApp };\n }\n \n // Возвращаем промис, который резолвится с функциями\n return initializeApp();\n}"],"names":["createApp","createVueApp","createVueSSRApp","moduleManager"],"mappings":";;AAIO,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW,CAAA;AACb,GAAG;AAED,QAAM,eAAe,MAAM,OAAO,kCAA+B,EAAE,KAAK,OAAK,EAAE,OAAO;AACtF,QAAM,oBAAoB,MAAM,OAAO,qBAAqB,EAAE,KAAK,OAAK,EAAE,aAAa;AACvF,QAAM,gBAAgB,MAAM,OAAO,iBAAiB,EAAE,KAAK,OAAK,EAAE,OAAO;AACzE,QAAM,iBAAiB,MAAM,OAAO,8BAA8B;AAGlE,iBAAe,gBAAgB;AAE7B,gBAAY,KAAK,kBAAkB;AACnC,YAAQ,IAAI,qDAAqD;AAGjE,UAAM,SAAS,MAAM,UAAS;AAC9B,UAAM,QAAQ;AAGd,gBAAY,KAAK,kBAAkB;AACnC,YAAQ,IAAI,2DAA2D;AAEvE,UAAM,CAAC,WAAW,eAAe,WAAW,WAAW,IAAI,MAAM,QAAQ,IAAI;AAAA,MAC3E,aAAY;AAAA,MACZ,kBAAiB;AAAA,MACjB,cAAa;AAAA,MACb,eAAc;AAAA,IACpB,CAAK;AAED,gBAAY,KAAK,gBAAgB;AACjC,gBAAY,QAAQ,cAAc,oBAAoB,gBAAgB;AACtE,UAAM,YAAY,YAAY,iBAAiB,YAAY,EAAE,CAAC;AAC9D,YAAQ,IAAI,4CAA4C,WAAW,UAAU,QAAQ,CAAC,CAAC,IAAI;AAK3F,gBAAY,KAAK,kBAAkB;AACnC,YAAQ,IAAI,iDAAiD;AAG7D,WAAO,QAAQ,OAAO,OAAO,EAAE,QAAQ,CAAC,CAAC,MAAM,MAAM,MAAM;AACzD,UAAI,OAAO,QAAQ;AACjB,sBAAc,SAAS,MAAM;AAAA,UAC3B,QAAQ,OAAO;AAAA,UACf,QAAQ,OAAO,UAAU,CAAA;AAAA,UACzB,UAAU,OAAO,YAAY;AAAA,UAC7B,UAAU,OAAO,YAAY;AAAA,UAC7B,cAAc,OAAO,gBAAgB,CAAA;AAAA,UACrC,SAAS,OAAO,WAAW;AAAA,QACrC,CAAS;AAAA,MACH;AAAA,IACF,CAAC;AAED,gBAAY,KAAK,gBAAgB;AACjC,gBAAY,QAAQ,cAAc,oBAAoB,gBAAgB;AACtE,UAAM,YAAY,YAAY,iBAAiB,YAAY,EAAE,CAAC;AAC9D,YAAQ,IAAI,sCAAsC,WAAW,UAAU,QAAQ,CAAC,CAAC,IAAI;AAGrF,aAASA,cAAY;AACnB,YAAM,QAAQ,SAAQ;AACtB,YAAM,MAAM,QAAQ,IAAI,aACpBC,UAAa,WAAW,MAAM,IAC9BC,aAAgB,WAAW,MAAM;AAErC,YAAM,OAAO,WAAU;AACvB,YAAM,OAAO,WAAU;AAEvB,YAAM,UAAU;AAAA,QACd;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,MACR;AAGM,YAAM,SAAS,UAAU,OAAO;AAChC,cAAQ,SAAS;AAIjB,YAAM,gBAAgB,EAAE,UAAU,kBAAiB;AAEnD,aAAO,SAAS,QAAQ;AAAA,QACtB,MAAM;AAAA,QACN,MAAM;AAAA,QACN,UAAU,CAAA;AAAA,QACV,WAAW;AAAA,QACX,MAAM;AAAA,UACJ,sBAAsB;AAAA,QAChC;AAAA,MACA,CAAO;AAED,aAAO,SAAS,QAAQ;AAAA,QACtB,MAAM;AAAA,QACN,MAAM;AAAA,QACN,UAAU,CAAA;AAAA,QACV,WAAW;AAAA,MACnB,CAAO;AAED,aAAO,SAAS,QAAQ;AAAA,QACtB,MAAM;AAAA,QACN,MAAM;AAAA,QACN,UAAU,CAAA;AAAA,QACV,WAAW;AAAA,MACnB,CAAO;AAKD,UAAI,OAAO,WAAW,aAAa;AACjC,eAAO,WAAW,OAAO,IAAI,SAAS;AAGpC,gBAAM,SAAS,GAAG,kBAAkB;AAGpC,gBAAM,kBAAkB,cAAc,mBAAmB,OAAO,IAAI;AAGpE,gBAAM,gBAAgB,gBAAgB,OAAO,OAAK,CAAC,cAAc,YAAY,IAAI,EAAE,IAAI,CAAC;AAExF,cAAI,cAAc,SAAS,GAAG;AAE5B,gBAAI,GAAG,gBAAgB;AACrB,sBAAQ,IAAI,iDAAiD,OAAO,MAAM,YAAY,cAAc,IAAI,OAAK,EAAE,IAAI,CAAC;AAAA,YACtH;AAGA,wBAAY,KAAK,kBAAkB;AACnC,oBAAQ,IAAI,wBAAwB,cAAc,MAAM,uBAAuB;AAG/E,uBAAW,UAAU,eAAe;AAClC,kBAAI;AACF,sBAAM,cAAc,KAAK,OAAO,MAAM,OAAO;AAC7C,sBAAM,cAAc,WAAW,OAAO,MAAM,OAAO;AAAA,cACrD,SAAS,OAAO;AACd,wBAAQ,MAAM,yBAAyB,OAAO,IAAI,KAAK,KAAK;AAAA,cAC9D;AAAA,YACF;AAEA,wBAAY,KAAK,gBAAgB;AACjC,wBAAY,QAAQ,cAAc,oBAAoB,gBAAgB;AACtE,kBAAM,YAAY,YAAY,iBAAiB,YAAY,EAAE,CAAC;AAC9D,oBAAQ,IAAI,4CAA4C,WAAW,UAAU,QAAQ,CAAC,CAAC,IAAI;AAK3F,mBAAO,EAAE,MAAM,OAAO,UAAU,SAAS,KAAI;AAAA,UAC/C;AAAA,QACF,CAAC;AAAA,MACH;AAEA,aAAO,cAAc,OAAO,IAAI,SAAS;AACpC,cAAM,KAAK,MAAM,UAAU;AAAA,MAChC,CAAC;AAGD,UAAI,OAAO,WAAW,aAAa;AACjC,eAAO,iBAAiB,SAAS,CAAC,MAAM;AACtC,cAAI,EAAE,WAAW,EAAE,QAAQ,SAAS,eAAe,GAAG;AACpD,oBAAQ,MAAM,yBAAyB,CAAC;AAAA,UAG1C;AAAA,QACF,CAAC;AAAA,MACH;AAGA,YAAM,aAAa,YAAY;AAE7B,YAAI,MAAM,kBAAkB;AAC1B,gBAAM,MAAM,iBAAiB,OAAO;AAAA,QACtC;AAEA,oBAAY,KAAK,kBAAkB;AACnC,gBAAQ,IAAI,0CAA0C;AAGtD,cAAM,aAAa,MAAM,OAAO,sBAAsB;AACtD,cAAM,WAAW,QAAQ,WAAW,KAAK,OAAO,QAAQ,MAAM;AAE9D,oBAAY,KAAK,gBAAgB;AACjC,oBAAY,QAAQ,cAAc,oBAAoB,gBAAgB;AACtE,cAAM,YAAY,YAAY,iBAAiB,YAAY,EAAE,CAAC;AAC9D,gBAAQ,IAAI,2CAA2C,WAAW,UAAU,QAAQ,CAAC,CAAC,IAAI;AAG1F,cAAM,eAAe,OAAO,SAAS,cAAc;AAEnD,YAAI,gBAAgB,OAAO,WAAW,aAAa;AAEjD,8BAAoB,MAAM;AACxB,sBAAU,WAAW;AAAA,cACnB,OAAO,QAAQ,IAAI,WAAW;AAAA,cAC9B,sBAAsB;AAAA,cACtB,gBAAgB;AAAA,cAChB,cAAc;AAAA,YAC5B,CAAa;AAAA,UACH,CAAC;AAAA,QACH;AAGA,YAAI,OAAO,WAAW,aAAa;AACjC,8BAAoB,MAAM;AACxB,0BAAc,eAAe,OAAO;AAAA,UACtC,CAAC;AAAA,QACH;AAGA,YAAI,IAAI,MAAM,EAAE,IAAI,IAAI,EAAE,IAAI,IAAI;AAGlC,YAAI,QAAQ,IAAI,YAAY;AAC1B,cAAI,MAAM,MAAM;AAAA,QAClB;AAGA,YAAI,MAAM,iBAAiB;AACzB,gBAAM,MAAM,gBAAgB,OAAO;AAAA,QACrC;AAGA,oBAAY,KAAK,gBAAgB;AACjC,oBAAY,QAAQ,cAAc,oBAAoB,gBAAgB;AACtE,cAAM,YAAY,YAAY,iBAAiB,YAAY,EAAE,CAAC;AAC9D,gBAAQ,IAAI,wDAAwD,WAAW,UAAU,QAAQ,CAAC,CAAC,IAAI;AAEvG,eAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACV;AAAA,MACM;AAGA,UAAI,CAAC,QAAQ,IAAI,YAAY;AAC3B,eAAO,WAAU;AAAA,MACnB;AAGA,iBAAU;AAAA,IACZ;AAGA,mBAAe,UAAU,EAAE,KAAK,SAAS,SAAS,WAAW,cAAc;AACzE,YAAM,EAAE,KAAK,QAAQ,OAAO,MAAM,MAAM,eAAAC,mBAAkB,MAAMH,YAAS;AAGzE,UAAI,OAAO,WAAW,aAAa;AACjC,cAAM,EAAE,YAAW,IAAK,MAAM,OAAO,wBAAwB;AAC7D,cAAM,YAAY,KAAK;AAAA,MACzB;AAEA,YAAM,UAAU;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,KAAK;AAAA,MACb;AAGM,kBAAY,KAAK,kBAAkB;AACnC,cAAQ,IAAI,4DAA4D;AAGxE,YAAM,kBAAkBG,eAAc,mBAAmB,GAAG;AAG5D,YAAM,sBAAsB,CAAA;AAG5B,iBAAW,UAAU,iBAAiB;AACpC,cAAMA,eAAc,KAAK,OAAO,MAAM,OAAO;AAC7C,cAAMA,eAAc,WAAW,OAAO,MAAM,OAAO;AACnD,4BAAoB,KAAK,OAAO,IAAI;AAAA,MACtC;AAEA,kBAAY,KAAK,gBAAgB;AACjC,kBAAY,QAAQ,cAAc,oBAAoB,gBAAgB;AACtE,YAAM,YAAY,YAAY,iBAAiB,YAAY,EAAE,CAAC;AAC9D,cAAQ,IAAI,sCAAsC,WAAW,UAAU,QAAQ,CAAC,CAAC,IAAI;AAGrF,YAAM,OAAO,KAAK,GAAG;AACrB,YAAM,OAAO,QAAO;AAEpB,YAAM,SAAS,MAAM,YAAY,OAAO;AAAA,QACtC;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,OAAO,EAAE,KAAK,QAAQ,OAAO,MAAM;QAC9C;AAAA,MACR,CAAO;AAED,UAAI,YAAY,SAAS;AACvB,eAAO,cAAc,MAAM,KAAK,WAAW,OAAO;AAAA,MACpD;AAGA,aAAO,gBAAgB;AAGvB,kBAAY,KAAK,gBAAgB;AACjC,kBAAY,QAAQ,cAAc,oBAAoB,gBAAgB;AACtE,YAAM,YAAY,YAAY,iBAAiB,YAAY,EAAE,CAAC;AAC9D,cAAQ,IAAI,wCAAwC,WAAW,UAAU,QAAQ,CAAC,CAAC,IAAI;AAGvF,UAAI,OAAO,WAAW,aAAa;AACjC,QAAAA,eAAc,YAAY,MAAK;AAC/B,QAAAA,eAAc,QAAQ,MAAK;AAC3B,QAAAA,eAAc,gBAAgB,MAAK;AAEnC,cAAM,EAAE,cAAa,IAAK,MAAM,OAAO,wBAAwB;AAC/D,cAAM,cAAa;AAAA,MACrB;AAEA,aAAO;AAAA,IACT;AAGA,QAAI,OAAO,WAAW,eAAe,QAAQ,IAAI,YAAY;AAC3DH,kBAAS;AAAA,IACX;AAGA,QAAI,OAAO,WAAW,eAAe,CAAC,QAAQ,IAAI,YAAY;AAE5D,kBAAY,kBAAkB,aAAEA,aAAW,MAAK,CAAE,EAAE,KAAK,CAAC,EAAE,KAAK,QAAQ,OAAO,eAAAG,eAAa,MAAO;AAElG,YAAI,MAAM,gBAAgB;AACxB,gBAAM,eAAe,EAAE,KAAK,QAAQ,OAAO,eAAAA,gBAAe;AAAA,QAC5D;AAGA,YAAI,OAAO,WAAW,aAAa;AACjC,iBAAO,YAAY,KAAK,cAAc;AAAA,QACxC;AAAA,MACF,CAAC,EAAE,MAAM,WAAS;AAChB,gBAAQ,MAAM,qBAAqB,KAAK;AAAA,MAC1C,CAAC;AAAA,IACH;AAEA,WAAO,EAAA,WAAEH,aAAW,UAAS;AAAA,EAC/B;AAGA,SAAO,cAAa;AACtB;"}
1
+ {"version":3,"file":"core.app.js","sources":["../../../../../../../src/modules/core/views/classes/core.app.js"],"sourcesContent":["// client-factory.js - фабрика для создания клиентского приложения\nimport { nextTick, createApp as createVueApp, createSSRApp as createVueSSRApp } from 'vue';\nimport { createHead } from '@unhead/vue';\n\nexport function createUniversalApp({\n getConfig,\n getRouter,\n getLocales,\n getStore,\n getHooks = {}\n}) {\n // Lazy imports to avoid circular dependencies\n const getLayoutApp = () => import('../components/layouts/App.vue').then(m => m.default);\n const getModuleRegistry = () => import('./module.manager.js').then(m => m.moduleManager);\n const getWebsockets = () => import('./ws.manager.js').then(m => m.default);\n const getAppRenderer = () => import('../utils/vue-app-renderer.js');\n \n // Асинхронная инициализация для избежания циклических зависимостей\n async function initializeApp() {\n // [LOADING 14] Starting initializeApp\n performance.mark('loading-14-start');\n console.log('[LOADING 14] Starting application initialization...');\n\n // Создаем конфигурацию\n const config = await getConfig();\n const hooks = getHooks;\n\n // [LOADING 15] Loading core dependencies\n performance.mark('loading-15-start');\n console.log('[LOADING 15] Loading core dependencies via Promise.all...');\n\n const [layoutApp, moduleManager, wsManager, appRenderer] = await Promise.all([\n getLayoutApp(),\n getModuleRegistry(),\n getWebsockets(),\n getAppRenderer()\n ]);\n\n performance.mark('loading-15-end');\n performance.measure('loading-15', 'loading-15-start', 'loading-15-end');\n const measure15 = performance.getEntriesByName('loading-15')[0];\n console.log(`[LOADING 15] Core dependencies loaded in ${measure15?.duration?.toFixed(2)}ms`);\n \n // Core module is always loaded - no need to register in moduleManager\n\n // [LOADING 16] Registering modules in registry\n performance.mark('loading-16-start');\n console.log('[LOADING 16] Registering modules in registry...');\n\n // Регистрация модулей из config\n Object.entries(config.modules).forEach(([name, module]) => {\n if (module.loader) {\n moduleManager.register(name, {\n loader: module.loader,\n routes: module.routes || [],\n priority: module.priority || 'normal',\n critical: module.critical || false,\n dependencies: module.dependencies || [],\n preload: module.preload || false\n });\n }\n });\n\n performance.mark('loading-16-end');\n performance.measure('loading-16', 'loading-16-start', 'loading-16-end');\n const measure16 = performance.getEntriesByName('loading-16')[0];\n console.log(`[LOADING 16] Modules registered in ${measure16?.duration?.toFixed(2)}ms`);\n \n // Основная функция создания приложения\n function createApp() {\n const store = getStore();\n const app = process.env.MOBILE_APP \n ? createVueApp(layoutApp, config) \n : createVueSSRApp(layoutApp, config);\n \n const meta = createHead();\n const i18n = getLocales();\n \n const context = {\n app,\n store,\n router: null,\n config,\n };\n \n // Создаем роутер с контекстом\n const router = getRouter(context);\n context.router = router;\n\n // Регистрируем заглушки для роутов, которые требуют другие модули\n // Когда Organizations/Backoffice/Auth загрузятся, они заменят эти заглушки\n const stubComponent = { template: '<router-view />' };\n\n router.addRoute('Home', {\n path: 'backoffice',\n name: 'Backoffice Root',\n children: [],\n component: stubComponent,\n meta: {\n sidebar_width_hidden: 'w-0',\n }\n });\n\n router.addRoute('Home', {\n path: 'organizations/:_id',\n name: 'OrganizationRoot',\n children: [],\n component: stubComponent\n });\n\n router.addRoute('Home', {\n path: 'users/:_id',\n name: 'User Profile Root',\n children: [],\n component: stubComponent\n });\n \n // No critical modules - everything loads on demand\n \n // Router guard для загрузки модулей ДО навигации (только на клиенте)\n if (typeof window !== 'undefined') {\n router.beforeEach(async (to, from) => {\n // Получаем оригинальный путь ДО fallback редиректа на 404\n // Это критически важно для SSR гидратации вложенных роутов!\n const target = to.redirectedFrom || to;\n \n // Используем оригинальный путь для определения нужных модулей\n const requiredModules = moduleManager.getModulesForRoute(target.path);\n \n // Проверяем, какие модули еще не загружены\n const modulesToLoad = requiredModules.filter(m => !moduleManager.initialized.has(m.name));\n \n if (modulesToLoad.length > 0) {\n // Логируем если это редирект с 404 (для отладки)\n if (to.redirectedFrom) {\n console.log('[Router] Loading modules for redirected path:', target.path, 'modules:', modulesToLoad.map(m => m.name));\n }\n\n // [LOADING 18] Loading modules for route\n performance.mark('loading-18-start');\n console.log(`[LOADING 18] Loading ${modulesToLoad.length} modules for route...`);\n\n // Загружаем и инициализируем модули\n for (const module of modulesToLoad) {\n try {\n await moduleManager.load(module.name, context);\n await moduleManager.initialize(module.name, context);\n } catch (error) {\n console.error(`Failed to load module ${module.name}:`, error);\n }\n }\n\n performance.mark('loading-18-end');\n performance.measure('loading-18', 'loading-18-start', 'loading-18-end');\n const measure18 = performance.getEntriesByName('loading-18')[0];\n console.log(`[LOADING 18] Modules loaded for route in ${measure18?.duration?.toFixed(2)}ms`);\n\n // После загрузки модулей и регистрации их роутов,\n // возвращаем объект с оригинальным путем и replace: true\n // Это заставит роутер заново резолвить маршрут с новыми роутами\n return { path: target.fullPath, replace: true };\n }\n });\n }\n\n router.beforeResolve(async (to, from) => {\n store.core.state.loading = false;\n })\n \n // Error handler для lazy loaded chunks\n if (typeof window !== 'undefined') {\n window.addEventListener('error', (e) => {\n if (e.message && e.message.includes('Loading chunk')) {\n console.error('Chunk loading failed:', e);\n // Можно показать уведомление пользователю\n // или попытаться перезагрузить\n }\n });\n }\n \n // Инициализация в правильном порядке\n const initialize = async () => {\n // Хук ДО инициализации\n if (hooks.beforeInitialize) {\n await hooks.beforeInitialize(context);\n }\n // [LOADING 17] Initializing Core module\n performance.mark('loading-17-start');\n console.log('[LOADING 17] Initializing Core module...');\n\n // Core module must ALWAYS be initialized\n const ModuleCore = await import('../../core.client.js');\n await ModuleCore.default.initialize(app, store, router, config);\n\n performance.mark('loading-17-end');\n performance.measure('loading-17', 'loading-17-start', 'loading-17-end');\n const measure17 = performance.getEntriesByName('loading-17')[0];\n console.log(`[LOADING 17] Core module initialized in ${measure17?.duration?.toFixed(2)}ms`);\n\n // 2. WebSocket (отложим после гидратации, только если включен)\n const useWebsocket = config.globals?.websocket !== false; // по умолчанию false\n\n if (useWebsocket && typeof window !== 'undefined') {\n // Откладываем инициализацию WebSocket после гидратации\n requestIdleCallback(() => {\n wsManager.initialize({\n wsUrl: process.env.WSS_URL || undefined,\n maxReconnectAttempts: 5,\n reconnectDelay: 3000,\n pingInterval: 30000,\n });\n });\n }\n\n // 3. Предзагрузка важных модулей в фоне\n if (typeof window !== 'undefined') {\n requestIdleCallback(() => {\n moduleManager.preloadModules(context);\n });\n }\n \n // 5. Подключаем Vue плагины\n app.use(router).use(i18n).use(meta);\n \n // 6. Монтируем приложение\n if (process.env.MOBILE_APP) {\n app.mount('#app');\n }\n\n // Хук ПОСЛЕ инициализации\n if (hooks.afterInitialize) {\n await hooks.afterInitialize(context);\n }\n\n // [LOADING 19] Application initialization completed\n performance.mark('loading-19-end');\n performance.measure('loading-19', 'loading-14-start', 'loading-19-end');\n const measure19 = performance.getEntriesByName('loading-19')[0];\n console.log(`[LOADING 19] Application initialization completed in ${measure19?.duration?.toFixed(2)}ms`);\n\n return {\n app,\n router,\n store,\n i18n,\n meta,\n moduleManager,\n config,\n };\n };\n \n // Возвращаем промис для SSR\n if (!process.env.MOBILE_APP) {\n return initialize();\n }\n \n // Для SPA инициализируем сразу\n initialize();\n }\n \n // FOR SSR / SERVER ENTRY\n async function renderApp({ url, cookies, headers, languages, ssrContext }) {\n const { app, router, store, i18n, meta, moduleManager } = await createApp();\n\n // Set SSR store for useStore calls\n if (typeof window === 'undefined') {\n const { setSSRStore } = await import('../store/core.store.js');\n await setSSRStore(store);\n }\n\n\n const context = {\n app,\n store,\n router,\n config,\n ssr: true,\n };\n\n // [LOADING 20] SSR renderApp starting and loading modules\n performance.mark('loading-20-start');\n console.log('[SSR-404] renderApp starting, url:', url);\n\n // Для SSR загружаем модули для текущего маршрута\n const requiredModules = moduleManager.getModulesForRoute(url);\n console.log('[SSR-404] required modules:', requiredModules.map(m => m.name));\n\n // Собираем имена модулей которые нужны для текущего роута\n const currentRouteModules = [];\n\n // Загружаем необходимые модули для SSR\n for (const module of requiredModules) {\n await moduleManager.load(module.name, context);\n await moduleManager.initialize(module.name, context);\n currentRouteModules.push(module.name);\n }\n\n performance.mark('loading-20-end');\n performance.measure('loading-20', 'loading-20-start', 'loading-20-end');\n const measure20 = performance.getEntriesByName('loading-20')[0];\n console.log(`[LOADING 20] SSR modules loaded in ${measure20?.duration?.toFixed(2)}ms`);\n \n // После загрузки модулей и регистрации роутов, выполняем навигацию\n console.log('[SSR-404] modules loaded, pushing url:', url);\n console.log('[SSR-404] available routes:', router.getRoutes().map(r => r.path));\n await router.push(url);\n await router.isReady();\n console.log('[SSR-404] router ready, currentRoute:', router.currentRoute.value.name, router.currentRoute.value.path);\n \n const result = await appRenderer.render({\n url,\n cookies,\n headers,\n createApp: () => ({ app, router, store, i18n, meta }),\n ssrContext\n });\n \n if (ssrContext?.modules) {\n result.usedModules = Array.from(ssrContext.modules);\n }\n \n // Передаем только модули текущего роута (без критических)\n result.loadedModules = currentRouteModules;\n\n // [LOADING 21] SSR render completed\n performance.mark('loading-21-end');\n performance.measure('loading-21', 'loading-20-start', 'loading-21-end');\n const measure21 = performance.getEntriesByName('loading-21')[0];\n console.log(`[LOADING 21] SSR render completed in ${measure21?.duration?.toFixed(2)}ms`);\n\n // Clean up for next SSR request\n if (typeof window === 'undefined') {\n moduleManager.initialized.clear();\n moduleManager.modules.clear();\n moduleManager.loadingPromises.clear();\n\n const { clearSSRStore } = await import('../store/core.store.js');\n await clearSSRStore();\n }\n\n return result;\n }\n \n // FOR SPA\n if (typeof window !== 'undefined' && process.env.MOBILE_APP) {\n createApp();\n }\n \n // FOR SSR / CLIENT ENTRY\n if (typeof window !== 'undefined' && !process.env.MOBILE_APP) {\n // Используем renderAndMountApp для правильной гидратации со state\n appRenderer.renderAndMountApp({ createApp, hooks }).then(({ app, router, store, moduleManager }) => {\n // Хук ПОСЛЕ гидратации\n if (hooks.afterHydration) {\n hooks.afterHydration({ app, router, store, moduleManager });\n }\n \n // Модули уже загружены в renderAndMountApp, просто ставим маркер\n if (typeof window !== 'undefined') {\n window.performance.mark('client-ready');\n }\n }).catch(error => {\n console.error('Hydration failed:', error);\n });\n }\n \n return { createApp, renderApp };\n }\n \n // Возвращаем промис, который резолвится с функциями\n return initializeApp();\n}"],"names":["createApp","createVueApp","createVueSSRApp","moduleManager"],"mappings":";;AAIO,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW,CAAA;AACb,GAAG;AAED,QAAM,eAAe,MAAM,OAAO,kCAA+B,EAAE,KAAK,OAAK,EAAE,OAAO;AACtF,QAAM,oBAAoB,MAAM,OAAO,qBAAqB,EAAE,KAAK,OAAK,EAAE,aAAa;AACvF,QAAM,gBAAgB,MAAM,OAAO,iBAAiB,EAAE,KAAK,OAAK,EAAE,OAAO;AACzE,QAAM,iBAAiB,MAAM,OAAO,8BAA8B;AAGlE,iBAAe,gBAAgB;AAE7B,gBAAY,KAAK,kBAAkB;AACnC,YAAQ,IAAI,qDAAqD;AAGjE,UAAM,SAAS,MAAM,UAAS;AAC9B,UAAM,QAAQ;AAGd,gBAAY,KAAK,kBAAkB;AACnC,YAAQ,IAAI,2DAA2D;AAEvE,UAAM,CAAC,WAAW,eAAe,WAAW,WAAW,IAAI,MAAM,QAAQ,IAAI;AAAA,MAC3E,aAAY;AAAA,MACZ,kBAAiB;AAAA,MACjB,cAAa;AAAA,MACb,eAAc;AAAA,IACpB,CAAK;AAED,gBAAY,KAAK,gBAAgB;AACjC,gBAAY,QAAQ,cAAc,oBAAoB,gBAAgB;AACtE,UAAM,YAAY,YAAY,iBAAiB,YAAY,EAAE,CAAC;AAC9D,YAAQ,IAAI,4CAA4C,WAAW,UAAU,QAAQ,CAAC,CAAC,IAAI;AAK3F,gBAAY,KAAK,kBAAkB;AACnC,YAAQ,IAAI,iDAAiD;AAG7D,WAAO,QAAQ,OAAO,OAAO,EAAE,QAAQ,CAAC,CAAC,MAAM,MAAM,MAAM;AACzD,UAAI,OAAO,QAAQ;AACjB,sBAAc,SAAS,MAAM;AAAA,UAC3B,QAAQ,OAAO;AAAA,UACf,QAAQ,OAAO,UAAU,CAAA;AAAA,UACzB,UAAU,OAAO,YAAY;AAAA,UAC7B,UAAU,OAAO,YAAY;AAAA,UAC7B,cAAc,OAAO,gBAAgB,CAAA;AAAA,UACrC,SAAS,OAAO,WAAW;AAAA,QACrC,CAAS;AAAA,MACH;AAAA,IACF,CAAC;AAED,gBAAY,KAAK,gBAAgB;AACjC,gBAAY,QAAQ,cAAc,oBAAoB,gBAAgB;AACtE,UAAM,YAAY,YAAY,iBAAiB,YAAY,EAAE,CAAC;AAC9D,YAAQ,IAAI,sCAAsC,WAAW,UAAU,QAAQ,CAAC,CAAC,IAAI;AAGrF,aAASA,cAAY;AACnB,YAAM,QAAQ,SAAQ;AACtB,YAAM,MAAM,QAAQ,IAAI,aACpBC,UAAa,WAAW,MAAM,IAC9BC,aAAgB,WAAW,MAAM;AAErC,YAAM,OAAO,WAAU;AACvB,YAAM,OAAO,WAAU;AAEvB,YAAM,UAAU;AAAA,QACd;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,MACR;AAGM,YAAM,SAAS,UAAU,OAAO;AAChC,cAAQ,SAAS;AAIjB,YAAM,gBAAgB,EAAE,UAAU,kBAAiB;AAEnD,aAAO,SAAS,QAAQ;AAAA,QACtB,MAAM;AAAA,QACN,MAAM;AAAA,QACN,UAAU,CAAA;AAAA,QACV,WAAW;AAAA,QACX,MAAM;AAAA,UACJ,sBAAsB;AAAA,QAChC;AAAA,MACA,CAAO;AAED,aAAO,SAAS,QAAQ;AAAA,QACtB,MAAM;AAAA,QACN,MAAM;AAAA,QACN,UAAU,CAAA;AAAA,QACV,WAAW;AAAA,MACnB,CAAO;AAED,aAAO,SAAS,QAAQ;AAAA,QACtB,MAAM;AAAA,QACN,MAAM;AAAA,QACN,UAAU,CAAA;AAAA,QACV,WAAW;AAAA,MACnB,CAAO;AAKD,UAAI,OAAO,WAAW,aAAa;AACjC,eAAO,WAAW,OAAO,IAAI,SAAS;AAGpC,gBAAM,SAAS,GAAG,kBAAkB;AAGpC,gBAAM,kBAAkB,cAAc,mBAAmB,OAAO,IAAI;AAGpE,gBAAM,gBAAgB,gBAAgB,OAAO,OAAK,CAAC,cAAc,YAAY,IAAI,EAAE,IAAI,CAAC;AAExF,cAAI,cAAc,SAAS,GAAG;AAE5B,gBAAI,GAAG,gBAAgB;AACrB,sBAAQ,IAAI,iDAAiD,OAAO,MAAM,YAAY,cAAc,IAAI,OAAK,EAAE,IAAI,CAAC;AAAA,YACtH;AAGA,wBAAY,KAAK,kBAAkB;AACnC,oBAAQ,IAAI,wBAAwB,cAAc,MAAM,uBAAuB;AAG/E,uBAAW,UAAU,eAAe;AAClC,kBAAI;AACF,sBAAM,cAAc,KAAK,OAAO,MAAM,OAAO;AAC7C,sBAAM,cAAc,WAAW,OAAO,MAAM,OAAO;AAAA,cACrD,SAAS,OAAO;AACd,wBAAQ,MAAM,yBAAyB,OAAO,IAAI,KAAK,KAAK;AAAA,cAC9D;AAAA,YACF;AAEA,wBAAY,KAAK,gBAAgB;AACjC,wBAAY,QAAQ,cAAc,oBAAoB,gBAAgB;AACtE,kBAAM,YAAY,YAAY,iBAAiB,YAAY,EAAE,CAAC;AAC9D,oBAAQ,IAAI,4CAA4C,WAAW,UAAU,QAAQ,CAAC,CAAC,IAAI;AAK3F,mBAAO,EAAE,MAAM,OAAO,UAAU,SAAS,KAAI;AAAA,UAC/C;AAAA,QACF,CAAC;AAAA,MACH;AAEA,aAAO,cAAc,OAAO,IAAI,SAAS;AACpC,cAAM,KAAK,MAAM,UAAU;AAAA,MAChC,CAAC;AAGD,UAAI,OAAO,WAAW,aAAa;AACjC,eAAO,iBAAiB,SAAS,CAAC,MAAM;AACtC,cAAI,EAAE,WAAW,EAAE,QAAQ,SAAS,eAAe,GAAG;AACpD,oBAAQ,MAAM,yBAAyB,CAAC;AAAA,UAG1C;AAAA,QACF,CAAC;AAAA,MACH;AAGA,YAAM,aAAa,YAAY;AAE7B,YAAI,MAAM,kBAAkB;AAC1B,gBAAM,MAAM,iBAAiB,OAAO;AAAA,QACtC;AAEA,oBAAY,KAAK,kBAAkB;AACnC,gBAAQ,IAAI,0CAA0C;AAGtD,cAAM,aAAa,MAAM,OAAO,sBAAsB;AACtD,cAAM,WAAW,QAAQ,WAAW,KAAK,OAAO,QAAQ,MAAM;AAE9D,oBAAY,KAAK,gBAAgB;AACjC,oBAAY,QAAQ,cAAc,oBAAoB,gBAAgB;AACtE,cAAM,YAAY,YAAY,iBAAiB,YAAY,EAAE,CAAC;AAC9D,gBAAQ,IAAI,2CAA2C,WAAW,UAAU,QAAQ,CAAC,CAAC,IAAI;AAG1F,cAAM,eAAe,OAAO,SAAS,cAAc;AAEnD,YAAI,gBAAgB,OAAO,WAAW,aAAa;AAEjD,8BAAoB,MAAM;AACxB,sBAAU,WAAW;AAAA,cACnB,OAAO,QAAQ,IAAI,WAAW;AAAA,cAC9B,sBAAsB;AAAA,cACtB,gBAAgB;AAAA,cAChB,cAAc;AAAA,YAC5B,CAAa;AAAA,UACH,CAAC;AAAA,QACH;AAGA,YAAI,OAAO,WAAW,aAAa;AACjC,8BAAoB,MAAM;AACxB,0BAAc,eAAe,OAAO;AAAA,UACtC,CAAC;AAAA,QACH;AAGA,YAAI,IAAI,MAAM,EAAE,IAAI,IAAI,EAAE,IAAI,IAAI;AAGlC,YAAI,QAAQ,IAAI,YAAY;AAC1B,cAAI,MAAM,MAAM;AAAA,QAClB;AAGA,YAAI,MAAM,iBAAiB;AACzB,gBAAM,MAAM,gBAAgB,OAAO;AAAA,QACrC;AAGA,oBAAY,KAAK,gBAAgB;AACjC,oBAAY,QAAQ,cAAc,oBAAoB,gBAAgB;AACtE,cAAM,YAAY,YAAY,iBAAiB,YAAY,EAAE,CAAC;AAC9D,gBAAQ,IAAI,wDAAwD,WAAW,UAAU,QAAQ,CAAC,CAAC,IAAI;AAEvG,eAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACV;AAAA,MACM;AAGA,UAAI,CAAC,QAAQ,IAAI,YAAY;AAC3B,eAAO,WAAU;AAAA,MACnB;AAGA,iBAAU;AAAA,IACZ;AAGA,mBAAe,UAAU,EAAE,KAAK,SAAS,SAAS,WAAW,cAAc;AACzE,YAAM,EAAE,KAAK,QAAQ,OAAO,MAAM,MAAM,eAAAC,mBAAkB,MAAMH,YAAS;AAGzE,UAAI,OAAO,WAAW,aAAa;AACjC,cAAM,EAAE,YAAW,IAAK,MAAM,OAAO,wBAAwB;AAC7D,cAAM,YAAY,KAAK;AAAA,MACzB;AAGA,YAAM,UAAU;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,KAAK;AAAA,MACb;AAGM,kBAAY,KAAK,kBAAkB;AACnC,cAAQ,IAAI,sCAAsC,GAAG;AAGrD,YAAM,kBAAkBG,eAAc,mBAAmB,GAAG;AAC5D,cAAQ,IAAI,+BAA+B,gBAAgB,IAAI,OAAK,EAAE,IAAI,CAAC;AAG3E,YAAM,sBAAsB,CAAA;AAG5B,iBAAW,UAAU,iBAAiB;AACpC,cAAMA,eAAc,KAAK,OAAO,MAAM,OAAO;AAC7C,cAAMA,eAAc,WAAW,OAAO,MAAM,OAAO;AACnD,4BAAoB,KAAK,OAAO,IAAI;AAAA,MACtC;AAEA,kBAAY,KAAK,gBAAgB;AACjC,kBAAY,QAAQ,cAAc,oBAAoB,gBAAgB;AACtE,YAAM,YAAY,YAAY,iBAAiB,YAAY,EAAE,CAAC;AAC9D,cAAQ,IAAI,sCAAsC,WAAW,UAAU,QAAQ,CAAC,CAAC,IAAI;AAGrF,cAAQ,IAAI,0CAA0C,GAAG;AACzD,cAAQ,IAAI,+BAA+B,OAAO,YAAY,IAAI,OAAK,EAAE,IAAI,CAAC;AAC9E,YAAM,OAAO,KAAK,GAAG;AACrB,YAAM,OAAO,QAAO;AACpB,cAAQ,IAAI,yCAAyC,OAAO,aAAa,MAAM,MAAM,OAAO,aAAa,MAAM,IAAI;AAEnH,YAAM,SAAS,MAAM,YAAY,OAAO;AAAA,QACtC;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,OAAO,EAAE,KAAK,QAAQ,OAAO,MAAM;QAC9C;AAAA,MACR,CAAO;AAED,UAAI,YAAY,SAAS;AACvB,eAAO,cAAc,MAAM,KAAK,WAAW,OAAO;AAAA,MACpD;AAGA,aAAO,gBAAgB;AAGvB,kBAAY,KAAK,gBAAgB;AACjC,kBAAY,QAAQ,cAAc,oBAAoB,gBAAgB;AACtE,YAAM,YAAY,YAAY,iBAAiB,YAAY,EAAE,CAAC;AAC9D,cAAQ,IAAI,wCAAwC,WAAW,UAAU,QAAQ,CAAC,CAAC,IAAI;AAGvF,UAAI,OAAO,WAAW,aAAa;AACjC,QAAAA,eAAc,YAAY,MAAK;AAC/B,QAAAA,eAAc,QAAQ,MAAK;AAC3B,QAAAA,eAAc,gBAAgB,MAAK;AAEnC,cAAM,EAAE,cAAa,IAAK,MAAM,OAAO,wBAAwB;AAC/D,cAAM,cAAa;AAAA,MACrB;AAEA,aAAO;AAAA,IACT;AAGA,QAAI,OAAO,WAAW,eAAe,QAAQ,IAAI,YAAY;AAC3DH,kBAAS;AAAA,IACX;AAGA,QAAI,OAAO,WAAW,eAAe,CAAC,QAAQ,IAAI,YAAY;AAE5D,kBAAY,kBAAkB,aAAEA,aAAW,MAAK,CAAE,EAAE,KAAK,CAAC,EAAE,KAAK,QAAQ,OAAO,eAAAG,eAAa,MAAO;AAElG,YAAI,MAAM,gBAAgB;AACxB,gBAAM,eAAe,EAAE,KAAK,QAAQ,OAAO,eAAAA,gBAAe;AAAA,QAC5D;AAGA,YAAI,OAAO,WAAW,aAAa;AACjC,iBAAO,YAAY,KAAK,cAAc;AAAA,QACxC;AAAA,MACF,CAAC,EAAE,MAAM,WAAS;AAChB,gBAAQ,MAAM,qBAAqB,KAAK;AAAA,MAC1C,CAAC;AAAA,IACH;AAEA,WAAO,EAAA,WAAEH,aAAW,UAAS;AAAA,EAC/B;AAGA,SAAO,cAAa;AACtB;"}
@@ -7,7 +7,6 @@ import PlaceholderOrganizationPic from "../../../../icons/placeholders/Placehold
7
7
  import _sfc_main$4 from "../../../../icons/navigation/IconEllipsis.vue.js";
8
8
  import _sfc_main$5 from "../../../../reports/components/sections/FormReport.vue.js";
9
9
  /* empty css */
10
- /* empty css */
11
10
  import _sfc_main$2 from "../elements/PhotoStack.vue.js";
12
11
  const _hoisted_1 = {
13
12
  key: 0,