@ozdao/martyrs 0.2.591 → 0.2.593

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 (149) hide show
  1. package/dist/auth.server.js +7 -0
  2. package/dist/builder.js +0 -3
  3. package/dist/martyrs/src/components/Button/{Button.vue2.js → Button.vue.js} +2 -2
  4. package/dist/martyrs/src/components/Button/Button.vue.js.map +1 -0
  5. package/dist/martyrs/src/components/Dropdown/{Dropdown.vue.js → Dropdown.vue2.js} +2 -2
  6. package/dist/martyrs/src/components/Dropdown/Dropdown.vue2.js.map +1 -0
  7. package/dist/martyrs/src/components/Feed/Carousel.vue.js +1 -1
  8. package/dist/martyrs/src/components/Feed/Feed.vue.js +2 -2
  9. package/dist/martyrs/src/components/FieldBig/FieldBig.vue.js +1 -1
  10. package/dist/martyrs/src/components/Loader/{Loader.vue.js → Loader.vue2.js} +2 -2
  11. package/dist/martyrs/src/components/Loader/Loader.vue2.js.map +1 -0
  12. package/dist/martyrs/src/components/LocationMarker/LocationMarker.vue.js +1 -1
  13. package/dist/martyrs/src/components/Media/Media.vue.js +1 -1
  14. package/dist/martyrs/src/components/Menu/{Menu.vue.js → Menu.vue2.js} +2 -2
  15. package/dist/martyrs/src/components/Menu/Menu.vue2.js.map +1 -0
  16. package/dist/martyrs/src/components/Select/{Select.vue.js → Select.vue2.js} +2 -2
  17. package/dist/martyrs/src/components/Select/Select.vue2.js.map +1 -0
  18. package/dist/martyrs/src/components/UploadImage/UploadImage.vue.js +1 -1
  19. package/dist/martyrs/src/components/UploadImageMultiple/UploadImageMultiple.vue.js +1 -1
  20. package/dist/martyrs/src/modules/auth/locales/en.js +2 -1
  21. package/dist/martyrs/src/modules/auth/locales/en.js.map +1 -1
  22. package/dist/martyrs/src/modules/auth/locales/ru.js +2 -1
  23. package/dist/martyrs/src/modules/auth/locales/ru.js.map +1 -1
  24. package/dist/martyrs/src/modules/auth/views/components/blocks/PopupAuth.vue.js +1 -1
  25. package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js +1 -1
  26. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +3 -3
  27. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEdit.vue.js +1 -1
  28. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.js +1 -1
  29. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.js +1 -1
  30. package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js +1 -1
  31. package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js +1 -1
  32. package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js +8 -12
  33. package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js.map +1 -1
  34. package/dist/martyrs/src/modules/auth/views/store/auth.js +10 -2
  35. package/dist/martyrs/src/modules/auth/views/store/auth.js.map +1 -1
  36. package/dist/martyrs/src/modules/community/components/layouts/Community.vue.js +1 -1
  37. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js +2 -2
  38. package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js +1 -1
  39. package/dist/martyrs/src/modules/core/core.client.js +3 -3
  40. package/dist/martyrs/src/modules/core/core.client.js.map +1 -1
  41. package/dist/martyrs/src/modules/core/views/components/blocks/CardHeader.vue.js +2 -2
  42. package/dist/martyrs/src/modules/core/views/components/blocks/PopupDateSelector.vue.js +2 -2
  43. package/dist/martyrs/src/modules/core/views/components/elements/OnlineIndicator.vue.js +1 -1
  44. package/dist/martyrs/src/modules/core/views/components/elements/OnlineIndicator.vue.js.map +1 -1
  45. package/dist/martyrs/src/modules/core/views/components/icons/IconMenu.vue.js +44 -0
  46. package/dist/martyrs/src/modules/core/views/components/icons/IconMenu.vue.js.map +1 -0
  47. package/dist/martyrs/src/modules/core/views/components/layouts/Client.vue.js +2 -2
  48. package/dist/martyrs/src/modules/core/views/components/partials/Header.vue.js +45 -51
  49. package/dist/martyrs/src/modules/core/views/components/partials/Header.vue.js.map +1 -1
  50. package/dist/martyrs/src/modules/core/views/components/partials/Navigation.vue.js +1 -1
  51. package/dist/martyrs/src/modules/core/views/components/partials/NavigationBar.vue.js +1 -1
  52. package/dist/martyrs/src/modules/events/components/elements/ButtonCheck.vue.js +1 -1
  53. package/dist/martyrs/src/modules/events/components/elements/ButtonJoin.vue.js +1 -1
  54. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +2 -2
  55. package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js +2 -2
  56. package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +2 -2
  57. package/dist/martyrs/src/modules/events/components/sections/EditTickets.vue.js +1 -1
  58. package/dist/martyrs/src/modules/events/components/sections/Feed.vue.js +1 -1
  59. package/dist/martyrs/src/modules/events/components/sections/List.vue.js +1 -1
  60. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +2 -2
  61. package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.js +2 -2
  62. package/dist/martyrs/src/modules/inventory/components/forms/ColumnSettingsMenu.vue.js +1 -1
  63. package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.js +1 -1
  64. package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.js +2 -2
  65. package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.js +1 -1
  66. package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js +3 -3
  67. package/dist/martyrs/src/modules/marketplace/views/components/sections/SectionMenu.vue.js +1 -1
  68. package/dist/martyrs/src/modules/music/components/blocks/ActionButtons.vue.js +2 -2
  69. package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js +1 -1
  70. package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.js +1 -1
  71. package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.js +1 -1
  72. package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.js +1 -1
  73. package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js +2 -2
  74. package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js +3 -3
  75. package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js +1 -1
  76. package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.js +1 -1
  77. package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js +2 -2
  78. package/dist/martyrs/src/modules/music/components/pages/Album.vue.js +3 -3
  79. package/dist/martyrs/src/modules/music/components/pages/Artist.vue.js +2 -2
  80. package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js +1 -1
  81. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js +3 -3
  82. package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js +2 -2
  83. package/dist/martyrs/src/modules/music/components/pages/Track.vue.js +3 -3
  84. package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.js +1 -1
  85. package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.js +1 -1
  86. package/dist/martyrs/src/modules/music/components/player/PlayerControls.vue.js +1 -1
  87. package/dist/martyrs/src/modules/music/components/player/VolumeControl.vue.js +1 -1
  88. package/dist/martyrs/src/modules/notifications/components/sections/NotificationPreferences.vue.js +2 -2
  89. package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.js +2 -2
  90. package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.js +2 -2
  91. package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.js +1 -1
  92. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +2 -2
  93. package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js +1 -1
  94. package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +1 -1
  95. package/dist/martyrs/src/modules/orders/components/sections/ApplicationDetails.vue.js +1 -1
  96. package/dist/martyrs/src/modules/orders/components/sections/CustomerDetails.vue.js +1 -1
  97. package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +2 -2
  98. package/dist/martyrs/src/modules/orders/components/sections/FormPayment.vue.js +1 -1
  99. package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.js +1 -1
  100. package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.js +1 -1
  101. package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.js +1 -1
  102. package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.js +1 -1
  103. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js +2 -2
  104. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.js +1 -1
  105. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +4 -4
  106. package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.js +1 -1
  107. package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.js +2 -2
  108. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +1 -1
  109. package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.js +1 -1
  110. package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.js +1 -1
  111. package/dist/martyrs/src/modules/pages/views/components/partials/SidebarPages.vue.js +1 -1
  112. package/dist/martyrs/src/modules/products/components/elements/Image360.vue.js +1 -1
  113. package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js +1 -1
  114. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +4 -4
  115. package/dist/martyrs/src/modules/products/components/pages/Product.vue.js +1 -1
  116. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +2 -2
  117. package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.js +1 -1
  118. package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.js +2 -2
  119. package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js +2 -2
  120. package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.js +1 -1
  121. package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.js +1 -1
  122. package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js +1 -1
  123. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.js +2 -2
  124. package/dist/martyrs/src/modules/rents/views/components/pages/RentsEdit.vue.js +1 -1
  125. package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.js +2 -2
  126. package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.js +1 -1
  127. package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js +1 -1
  128. package/dist/martyrs/src/modules/spots/components/pages/Map.vue.js +1 -1
  129. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +2 -2
  130. package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.js +2 -2
  131. package/dist/style.css +17 -53
  132. package/package.json +5 -2
  133. package/src/builder/rspack/rspack.config.base.js +0 -3
  134. package/src/modules/TASKS.MD +70 -1
  135. package/src/modules/auth/controllers/routes/auth.routes.js +9 -0
  136. package/src/modules/auth/locales/en.js +2 -1
  137. package/src/modules/auth/locales/ru.js +2 -1
  138. package/src/modules/auth/views/components/pages/SignUp.vue +2 -5
  139. package/src/modules/auth/views/store/auth.js +13 -3
  140. package/src/modules/core/core.client.js +2 -2
  141. package/src/modules/core/views/components/elements/OnlineIndicator.vue +1 -1
  142. package/src/modules/core/views/components/icons/IconMenu.vue +82 -0
  143. package/src/modules/core/views/components/partials/Header.vue +166 -305
  144. package/dist/martyrs/src/components/Button/Button.vue2.js.map +0 -1
  145. package/dist/martyrs/src/components/Dropdown/Dropdown.vue.js.map +0 -1
  146. package/dist/martyrs/src/components/Loader/Loader.vue.js.map +0 -1
  147. package/dist/martyrs/src/components/Menu/Menu.vue.js.map +0 -1
  148. package/dist/martyrs/src/components/Select/Select.vue.js.map +0 -1
  149. package/src/modules/PROCESS.md +0 -0
@@ -278,6 +278,13 @@ const authRoutes = (function(app, db, origins) {
278
278
  controller.signup
279
279
  );
280
280
  app.post("/api/auth/signin", controller.signin);
281
+ app.get("/api/auth/check-token", [authJwt.verifyToken()], (req, res) => {
282
+ res.status(200).json({
283
+ ok: true,
284
+ userId: req.userId,
285
+ sessionId: req.sessionId || null
286
+ });
287
+ });
281
288
  app.post(
282
289
  "/api/auth/reset-password",
283
290
  [
package/dist/builder.js CHANGED
@@ -1998,9 +1998,6 @@ const baseConfig = (projectRoot) => {
1998
1998
  warnings: true,
1999
1999
  // Цвета в терминале
2000
2000
  colors: true
2001
- },
2002
- watchOptions: {
2003
- ignored: ["**/node_modules/**", "**/martyrs/node_modules/**", "**/create-martyrs/node_modules/**"]
2004
2001
  }
2005
2002
  };
2006
2003
  };
@@ -1,7 +1,7 @@
1
1
  import { ref, createElementBlock, openBlock, normalizeClass, withModifiers, createElementVNode, createCommentVNode, renderSlot, createBlock, Fragment, createTextVNode, toDisplayString } from "vue";
2
2
  import _sfc_main$1 from "../../modules/icons/navigation/IconCheckmark.vue.js";
3
3
  import _sfc_main$2 from "../../modules/icons/navigation/IconCross.vue.js";
4
- /* empty css */
4
+ /* empty css */
5
5
  const _hoisted_1 = ["disabled"];
6
6
  const _hoisted_2 = {
7
7
  key: 0,
@@ -147,4 +147,4 @@ const _sfc_main = {
147
147
  export {
148
148
  _sfc_main as default
149
149
  };
150
- //# sourceMappingURL=Button.vue2.js.map
150
+ //# sourceMappingURL=Button.vue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Button.vue.js","sources":["../../../../../src/components/Button/Button.vue"],"sourcesContent":["<script setup>\nimport { ref } from 'vue'\n\nimport IconCheckmark from '@martyrs/src/modules/icons/navigation/IconCheckmark.vue';\nimport IconCross from '@martyrs/src/modules/icons/navigation/IconCross.vue';\n\nconst props = defineProps({\n submit: {\n type: Function,\n default: async () => { console.log('Button click.') }\n },\n text: {\n type: Object,\n default: () => ({\n success: null,\n error: null\n })\n },\n counter: {\n type: Object\n },\n callback: {\n type: Function,\n default: async () => { console.log('Button callback.') }\n },\n callbackDelay: {\n type: Number,\n default: 750\n },\n showSucces: {\n type: Boolean,\n default: true\n },\n showLoader: {\n type: Boolean,\n default: true\n },\n validation: {\n type: Boolean,\n default: false\n },\n})\n\nconst emits = defineEmits(['error'])\n\nconst button = ref(null)\nconst error = ref(null)\nconst loading = ref(false)\nconst finished = ref(false)\n\nasync function Submit() {\n console.log('click')\n \n button.value.style['pointer-events'] = 'none'\n error.value = null\n loading.value = true\n\n // Функция для сброса состояния кнопки\n const resetButton = () => {\n if (button.value) {\n button.value.style.pointerEvents = 'auto'\n loading.value = false\n finished.value = false\n error.value = null\n }\n }\n\n try {\n await props.submit()\n\n button.value.classList.replace('bg-main', 'bg-second')\n loading.value = false\n\n // Используем функцию сброса состояния кнопки здесь\n if (props.showSucces) { \n finished.value = true\n setTimeout(() => {\n resetButton()\n button.value.classList.replace('bg-second', 'bg-main')\n }, 500)\n } else {\n resetButton()\n button.value.classList.replace('bg-second', 'bg-main')\n }\n\n // Если есть callback, мы также установим таймер для его вызова\n if (props.callback) setTimeout(() => props.callback(), props.callbackDelay)\n\n } catch (err) {\n console.error('=== BUTTON ERROR ===', err)\n emits('error', err)\n // Если возникла ошибка, мы изменяем стили и устанавливаем сообщение об ошибке\n button.value.classList.replace('bg-main', 'bg-fourth-nano')\n loading.value = false\n error.value = true\n \n // После задержки снова сбрасываем состояние кнопки\n setTimeout(() => {\n resetButton()\n // Так как класс кнопки был изменен, вернем его в исходное состояние\n button.value.classList.replace('bg-fourth-nano', 'bg-main')\n }, 1330)\n }\n}\n</script>\n\n<template>\n <button \n @click.stop=\"Submit\"\n :disabled=\"validation\"\n ref=\"button\"\n\t\tclass=\"button\"\n :class=\"{ 'button--disabled': loading || validation }\"\n >\n <span class=\"button-content\" :class=\"{ 'hidden': loading || error || finished }\">\n <slot></slot>\n </span>\n\n <span class=\"button-loader\" :class=\"{ 'active': loading && showLoader }\">\n <span class=\"dot\"></span>\n <span class=\"dot\"></span>\n <span class=\"dot\"></span>\n </span>\n\n <span class=\"button-success\" :class=\"{ 'active': finished && showSucces }\">\n <template v-if=\"text.success\">{{ text.success }}</template>\n <IconCheckmark v-else class=\"i-regular\" />\n </span>\n\n <span class=\"button-error\" :class=\"{ 'active': error }\">\n <template v-if=\"text.error\">{{ text.error }}</template>\n <IconCross v-else class=\"i-regular\" />\n </span>\n \n <!-- Counter -->\n <div v-if=\"counter\" class=\"button-counter font-second flex flex-center\">\n <span>{{ counter }}</span>\n </div>\n </button>\n</template>\n\n<style lang=\"scss\">\nbutton[disabled] {\n opacity: 0.75 !important;\n pointer-events: none !important;\n cursor: default !important;\n color: rgba(var(--dark), 0.33) !important;\n background: rgba(var(--light), 1) !important;\n}\n\na.button {\n text-box: trim-both cap alphabetic;\n}\n\n.button {\n position: relative;\n display: flex;\n padding: var(--small);\n border-radius: var(--small);\n text-box: trim-both cap alphabetic;\n transform: scale(1);\n opacity: 1;\n align-items: center;\n justify-content: center;\n color: black;\n text-align: center;\n font-size: 1rem;\n letter-spacing: 5%;\n transition: all 0.33s ease;\n\n &:hover {\n cursor: pointer;\n opacity: 0.9;\n }\n\n &:active {\n transform: scale(0.95);\n }\n\n &-small {\n padding: 0.75rem;\n border-radius: 0.5rem;\n height: fit-content;\n }\n\n .button-counter {\n position: absolute;\n right: -8px;\n bottom: -8px;\n background: yellow;\n height: 16px;\n border-radius: 16px;\n width: 16px;\n font-weight: 500;\n text-align: center;\n line-height: 16px;\n font-size: 10px;\n }\n}\n\n.button-content {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n transform: translateY(0);\n opacity: 1;\n transition:\n opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1),\n transform 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n\n &.hidden {\n opacity: 0;\n transform: translateY(4px);\n }\n}\n\n.button-loader {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\n opacity: 0;\n transform: translateY(4px);\n transition:\n opacity 0.25s cubic-bezier(0.0, 0, 0.2, 1) 0.05s,\n transform 0.25s cubic-bezier(0.0, 0, 0.2, 1) 0.05s;\n pointer-events: none;\n\n &.active {\n opacity: 1;\n transform: translateY(0);\n }\n\n .dot {\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: currentColor;\n animation: dot-bounce 0.8s cubic-bezier(0.4, 0, 0.2, 1) infinite;\n\n &:nth-child(1) { animation-delay: 0s; }\n &:nth-child(2) { animation-delay: 0.12s; }\n &:nth-child(3) { animation-delay: 0.24s; }\n }\n}\n\n@keyframes dot-bounce {\n 0%, 100% {\n transform: translateY(0);\n }\n 50% {\n transform: translateY(-5px);\n }\n}\n\n.button-success {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0;\n transform: translateY(4px);\n transition:\n opacity 0.2s cubic-bezier(0.0, 0, 0.2, 1),\n transform 0.2s cubic-bezier(0.0, 0, 0.2, 1);\n pointer-events: none;\n\n &.active {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.button-error {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0;\n transform: translateY(4px);\n transition:\n opacity 0.2s cubic-bezier(0.0, 0, 0.2, 1),\n transform 0.2s cubic-bezier(0.0, 0, 0.2, 1);\n pointer-events: none;\n\n &.active {\n opacity: 1;\n transform: translateY(0);\n }\n}\n</style>"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,UAAM,QAAQ;AAqCd,UAAM,QAAQ;AAEd,UAAM,SAAS,IAAI,IAAI;AACvB,UAAM,QAAQ,IAAI,IAAI;AACtB,UAAM,UAAU,IAAI,KAAK;AACzB,UAAM,WAAW,IAAI,KAAK;AAE1B,mBAAe,SAAS;AACtB,cAAQ,IAAI,OAAO;AAEnB,aAAO,MAAM,MAAM,gBAAgB,IAAI;AACvC,YAAM,QAAQ;AACd,cAAQ,QAAQ;AAGhB,YAAM,cAAc,MAAM;AACxB,YAAI,OAAO,OAAO;AAChB,iBAAO,MAAM,MAAM,gBAAgB;AACnC,kBAAQ,QAAQ;AAChB,mBAAS,QAAQ;AACjB,gBAAM,QAAQ;AAAA,QAChB;AAAA,MACF;AAEA,UAAI;AACF,cAAM,MAAM,OAAM;AAElB,eAAO,MAAM,UAAU,QAAQ,WAAW,WAAW;AACrD,gBAAQ,QAAQ;AAGhB,YAAI,MAAM,YAAY;AACpB,mBAAS,QAAQ;AACjB,qBAAW,MAAM;AACf,wBAAW;AACX,mBAAO,MAAM,UAAU,QAAQ,aAAa,SAAS;AAAA,UACvD,GAAG,GAAG;AAAA,QACR,OAAO;AACL,sBAAW;AACX,iBAAO,MAAM,UAAU,QAAQ,aAAa,SAAS;AAAA,QACvD;AAGA,YAAI,MAAM,SAAU,YAAW,MAAM,MAAM,SAAQ,GAAI,MAAM,aAAa;AAAA,MAE5E,SAAS,KAAK;AACZ,gBAAQ,MAAM,wBAAwB,GAAG;AACzC,cAAM,SAAS,GAAG;AAElB,eAAO,MAAM,UAAU,QAAQ,WAAW,gBAAgB;AAC1D,gBAAQ,QAAQ;AAChB,cAAM,QAAQ;AAGd,mBAAW,MAAM;AACf,sBAAW;AAEX,iBAAO,MAAM,UAAU,QAAQ,kBAAkB,SAAS;AAAA,QAC5D,GAAG,IAAI;AAAA,MACT;AAAA,IACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,6 +1,6 @@
1
1
  import { ref, computed, withDirectives, createElementBlock, openBlock, withModifiers, renderSlot, createVNode, createBlock, resolveDynamicComponent, mergeProps, toDisplayString, Transition, withCtx, createCommentVNode, normalizeStyle, unref } from "vue";
2
2
  import clickOutside from "../FieldPhone/click-outside.js";
3
- /* empty css */
3
+ /* empty css */
4
4
  const _hoisted_1 = {
5
5
  key: 0,
6
6
  class: "w-100 h-100 flex-center flex"
@@ -81,4 +81,4 @@ const _sfc_main = {
81
81
  export {
82
82
  _sfc_main as default
83
83
  };
84
- //# sourceMappingURL=Dropdown.vue.js.map
84
+ //# sourceMappingURL=Dropdown.vue2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dropdown.vue2.js","sources":["../../../../../src/components/Dropdown/Dropdown.vue"],"sourcesContent":["<template>\n <div\n class=\"dropdown pos-relative\"\n v-click-outside=\"clickedOutside\"\n @click.stop=\"trigger === 'click' ? (isOpen = !isOpen) : null\"\n @mouseenter=\"handleMouseEnter\"\n @mouseleave=\"handleMouseLeave\"\n >\n <slot name=\"label\">\n <div v-if=\"isComponentLabel\" class=\"w-100 h-100 flex-center flex\">\n <component :is=\"label.component\" v-bind=\"label.props\" :class=\"label.class\"></component>\n </div>\n <div v-else>\n {{ label }}\n </div>\n </slot>\n <Transition name=\"dropdown\">\n <div\n v-if=\"isOpen\"\n :style=\"{ left: align === 'left' ? '0' : 'auto', right: align === 'right' ? '0' : 'auto' }\"\n class=\"dropdown-content\"\n >\n <slot></slot>\n </div>\n </Transition>\n </div>\n</template>\n\n<script setup>\nimport { ref, computed } from 'vue';\nimport clickOutside from '../FieldPhone/click-outside.js';\n\nlet vClickOutside = clickOutside\n\nconst props = defineProps({\n label: {\n type: [String, Object],\n default: 'Open'\n },\n align: {\n type: String,\n default: 'left'\n },\n trigger: {\n type: String,\n default: 'click'\n }\n})\n\nconst isOpen = ref(false);\nconst isComponentLabel = computed(() => typeof props.label === 'object');\n\nlet closeTimeout = null;\n\nfunction handleMouseEnter() {\n if (props.trigger === 'hover') {\n clearTimeout(closeTimeout);\n isOpen.value = true;\n }\n}\n\nfunction handleMouseLeave() {\n if (props.trigger === 'hover') {\n closeTimeout = setTimeout(() => {\n isOpen.value = false;\n }, 100);\n }\n}\n\nfunction clickedOutside() {\n if (props.trigger === 'click') {\n isOpen.value = false;\n }\n}\n</script>\n\n<style>\n.dropdown-content {\n position: absolute;\n box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);\n z-index: 100;\n border-radius: var(--small);\n transform-origin: top left;\n backdrop-filter: blur(var(--small));\n -webkit-backdrop-filter: blur(var(--small));\n background: rgba(var(--white), 0.5);\n}\n\n.dropdown-enter-active,\n.dropdown-leave-active {\n transition: transform 0.33s cubic-bezier(0.9, 0, 0.1, 1), opacity 0.15s ease;\n}\n\n.dropdown-enter-from,\n.dropdown-leave-to {\n opacity: 0.01;\n transform: translateY(-4px) scale(0.8);\n}\n</style>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAgCA,QAAI,gBAAgB;AAEpB,UAAM,QAAQ;AAed,UAAM,SAAS,IAAI,KAAK;AACxB,UAAM,mBAAmB,SAAS,MAAM,OAAO,MAAM,UAAU,QAAQ;AAEvE,QAAI,eAAe;AAEnB,aAAS,mBAAmB;AAC1B,UAAI,MAAM,YAAY,SAAS;AAC7B,qBAAa,YAAY;AACzB,eAAO,QAAQ;AAAA,MACjB;AAAA,IACF;AAEA,aAAS,mBAAmB;AAC1B,UAAI,MAAM,YAAY,SAAS;AAC7B,uBAAe,WAAW,MAAM;AAC9B,iBAAO,QAAQ;AAAA,QACjB,GAAG,GAAG;AAAA,MACR;AAAA,IACF;AAEA,aAAS,iBAAiB;AACxB,UAAI,MAAM,YAAY,SAAS;AAC7B,eAAO,QAAQ;AAAA,MACjB;AAAA,IACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,7 +1,7 @@
1
1
  import { ref, onMounted, createElementBlock, openBlock, createBlock, createVNode, normalizeClass, unref, withCtx, Fragment, renderList, Transition, renderSlot } from "vue";
2
2
  import { useI18n } from "vue-i18n";
3
3
  import { useGlobalMixins } from "../../modules/core/views/mixins/mixins.js";
4
- import Loader from "../Loader/Loader.vue.js";
4
+ import Loader from "../Loader/Loader.vue2.js";
5
5
  import _sfc_main$2 from "../Slider/Slider.vue.js";
6
6
  import _sfc_main$1 from "../EmptyState/EmptyState.vue.js";
7
7
  /* empty css */
@@ -1,9 +1,9 @@
1
1
  import { mergeModels, useModel, ref, computed, watch, onMounted, onUnmounted, createElementBlock, openBlock, Fragment, createCommentVNode, createBlock, normalizeClass, withCtx, createVNode, renderList, resolveDynamicComponent, unref, TransitionGroup, renderSlot } from "vue";
2
2
  import { useGlobalMixins } from "../../modules/core/views/mixins/mixins.js";
3
- import Loader from "../Loader/Loader.vue.js";
3
+ import Loader from "../Loader/Loader.vue2.js";
4
4
  import Skeleton from "../Skeleton/Skeleton.vue2.js";
5
5
  import _sfc_main$6 from "../EmptyState/EmptyState.vue.js";
6
- import _sfc_main$2 from "../Dropdown/Dropdown.vue.js";
6
+ import _sfc_main$2 from "../Dropdown/Dropdown.vue2.js";
7
7
  import Calendar from "../Calendar/Calendar.vue2.js";
8
8
  import _sfc_main$1 from "../../modules/core/views/components/blocks/BlockSearch.vue.js";
9
9
  import _sfc_main$5 from "../../modules/core/views/components/blocks/BlockSorting.vue.js";
@@ -1,6 +1,6 @@
1
1
  import { ref, onMounted, watchEffect, createBlock, openBlock, unref, isRef, withCtx, renderSlot, createVNode, createElementBlock, createCommentVNode, toDisplayString } from "vue";
2
2
  import Field from "../Field/Field.vue.js";
3
- import _sfc_main$1 from "../Button/Button.vue2.js";
3
+ import _sfc_main$1 from "../Button/Button.vue.js";
4
4
  import _sfc_main$2 from "../../modules/icons/navigation/IconArrow.vue.js";
5
5
  import { useI18n } from "vue-i18n";
6
6
  const _hoisted_1 = {
@@ -1,5 +1,5 @@
1
1
  import { createElementBlock, openBlock, normalizeClass, createElementVNode, createCommentVNode, toDisplayString } from "vue";
2
- /* empty css */
2
+ /* empty css */
3
3
  import _export_sfc from "../../../../_virtual/_plugin-vue_export-helper.js";
4
4
  const _sfc_main = {
5
5
  props: {
@@ -57,4 +57,4 @@ const Loader = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]])
57
57
  export {
58
58
  Loader as default
59
59
  };
60
- //# sourceMappingURL=Loader.vue.js.map
60
+ //# sourceMappingURL=Loader.vue2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Loader.vue2.js","sources":["../../../../../src/components/Loader/Loader.vue"],"sourcesContent":["<template>\n <div class=\"circular-loader z-index-1 w-100 h-100 w-max-2r h-max-2r\" :class=\"{ 'circular-loader-centered': centered }\">\n <svg viewBox=\"25 25 50 50\">\n <circle class=\"circular-loader-fill\" cx=\"50\" cy=\"50\" r=\"20\" fill=\"none\" stroke-width=\"4\" stroke-miterlimit=\"10\" />\n <circle class=\"circular-loader-circle\" cx=\"50\" cy=\"50\" r=\"20\" fill=\"none\" stroke-width=\"4\" stroke-miterlimit=\"10\" />\n </svg>\n <div v-if=\"progress\" class=\"progress-text\">{{ progress }}</div>\n <div v-if=\"status\" class=\"uppercase fw-semi w-m-10r status-text\">{{ status }}</div>\n </div>\n</template>\n\n<script>\nexport default {\n props: {\n progress: {\n type: Number,\n default: null,\n },\n status: {\n type: String,\n default: null,\n },\n centered: {\n type: Boolean,\n default: false\n },\n },\n};\n</script>\n\n<style>\n.circular-loader-centered {\n top: calc(50% - 1rem);\n left: calc(50% - 1rem);\n}\n\n.circular-loader svg {\n animation: rotate 2s linear infinite;\n}\n\n.circular-loader-circle {\n stroke-dasharray: 1, 200;\n stroke-dashoffset: 0;\n stroke-linecap: round;\n stroke: rgb(var(--main));\n animation: dash 1.5s ease-in-out infinite;\n}\n\n.circular-loader-fill {\n stroke-linecap: round;\n stroke: rgba(var(--black),0.2);\n}\n\n.progress-text {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n font-size: 0.8rem;\n color: rgb(var(--main));;\n}\n\n.status-text {\n position: absolute;\n top: 120%;\n left: calc(50% - 5rem);\n font-size: 0.8rem;\n width: 10rem !important;\n text-align: center;\n}\n\n@keyframes rotate {\n 100% {\n transform: rotate(360deg);\n }\n}\n\n@keyframes dash {\n 0% {\n stroke-dasharray: 1, 200;\n stroke-dashoffset: 0;\n }\n 50% {\n stroke-dasharray: 89, 200;\n stroke-dashoffset: -35;\n }\n 100% {\n stroke-dasharray: 1, 200;\n stroke-dashoffset: -124;\n }\n}\n</style>"],"names":["_createElementBlock","_normalizeClass","_createElementVNode","_toDisplayString","_createCommentVNode"],"mappings":";;;AAYA,MAAK,YAAU;AAAA,EACb,OAAO;AAAA,IACL,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA;IAEX,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA;IAEX,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA;;AAGf;;EA3BA,KAAA;AAAA,EAMyB,OAAM;;;EAN/B,KAAA;AAAA,EAOuB,OAAM;;;sBAN3BA,mBAOM,OAAA;AAAA,IAPD,OADPC,eAAA,CACa,2DAAyD,EAAA,4BAAuC,OAAA,UAAQ,CAAA;AAAA;8BACjHC,mBAGM,OAAA,EAHD,SAAQ,iBAAa;AAAA,MACxBA,mBAAkH,UAAA;AAAA,QAA1G,OAAM;AAAA,QAAuB,IAAG;AAAA,QAAK,IAAG;AAAA,QAAK,GAAE;AAAA,QAAK,MAAK;AAAA,QAAO,gBAAa;AAAA,QAAI,qBAAkB;AAAA;MAC3GA,mBAAoH,UAAA;AAAA,QAA5G,OAAM;AAAA,QAAyB,IAAG;AAAA,QAAK,IAAG;AAAA,QAAK,GAAE;AAAA,QAAK,MAAK;AAAA,QAAO,gBAAa;AAAA,QAAI,qBAAkB;AAAA;;IAEpG,OAAA,yBAAXF,mBAA+D,OAA/D,YAA+DG,gBAAjB,OAAA,QAAQ,GAAA,CAAA,KAN1DC,mBAAA,IAAA,IAAA;AAAA,IAOe,OAAA,uBAAXJ,mBAAmF,OAAnF,YAAmFG,gBAAf,OAAA,MAAM,GAAA,CAAA,KAP9EC,mBAAA,IAAA,IAAA;AAAA;;;"}
@@ -1,6 +1,6 @@
1
1
  import { ref, onMounted, watchEffect, createElementBlock, openBlock, createElementVNode, createVNode, Transition, withCtx, createBlock } from "vue";
2
2
  import { Loader } from "../../../../node_modules/.pnpm/@googlemaps_js-api-loader@1.16.8/node_modules/@googlemaps/js-api-loader/dist/index.js";
3
- import Loader$1 from "../Loader/Loader.vue.js";
3
+ import Loader$1 from "../Loader/Loader.vue2.js";
4
4
  /* empty css */
5
5
  const _hoisted_1 = { class: "pos-relative" };
6
6
  const _hoisted_2 = {
@@ -1,5 +1,5 @@
1
1
  import { ref, computed, onMounted, onUnmounted, createElementBlock, openBlock, createCommentVNode, mergeProps, createElementVNode, createVNode } from "vue";
2
- import Loader from "../Loader/Loader.vue.js";
2
+ import Loader from "../Loader/Loader.vue2.js";
3
3
  import _sfc_main$1 from "../../modules/icons/entities/IconGallery.vue.js";
4
4
  /* empty css */
5
5
  import _export_sfc from "../../../../_virtual/_plugin-vue_export-helper.js";
@@ -1,5 +1,5 @@
1
1
  import { createElementBlock, openBlock, renderSlot } from "vue";
2
- /* empty css */
2
+ /* empty css */
3
3
  const _hoisted_1 = { class: "mobile-menu-section pd-r-zero pd-t-thin pd-b-thin pd-medium radius-medium" };
4
4
  const _sfc_main = {
5
5
  __name: "Menu",
@@ -14,4 +14,4 @@ const _sfc_main = {
14
14
  export {
15
15
  _sfc_main as default
16
16
  };
17
- //# sourceMappingURL=Menu.vue.js.map
17
+ //# sourceMappingURL=Menu.vue2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Menu.vue2.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;"}
@@ -1,6 +1,6 @@
1
1
  import { ref, computed, watch, createElementBlock, openBlock, Fragment, withDirectives, createVNode, normalizeClass, withModifiers, createCommentVNode, createElementVNode, toDisplayString, Transition, withCtx, renderList, vShow, unref, nextTick } from "vue";
2
2
  import clickOutside from "../FieldPhone/click-outside.js";
3
- /* empty css */
3
+ /* empty css */
4
4
  import _export_sfc from "../../../../_virtual/_plugin-vue_export-helper.js";
5
5
  const _hoisted_1 = {
6
6
  key: 0,
@@ -131,4 +131,4 @@ const Select = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-af5
131
131
  export {
132
132
  Select as default
133
133
  };
134
- //# sourceMappingURL=Select.vue.js.map
134
+ //# sourceMappingURL=Select.vue2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Select.vue2.js","sources":["../../../../../src/components/Select/Select.vue"],"sourcesContent":["<template>\n <!-- Input Wrapper -->\n <div \n ref=\"fieldWrapper\"\n tabindex=\"0\"\n @click.stop=\"toggleMenu\" \n v-click-outside=\"clickedOutside\" \n :class=\"$attrs.class\" \n class=\"cursor-pointer field-wrapper flex-v-center flex-nowrap flex pos-relative\"\n >\n <!-- Label -->\n <span v-if=\"label\" class=\"t-transp mn-r-small\">{{label}}</span>\n \n <!-- Input -->\n <span>\n {{ optionsSelected ? (optionsSelected.name || optionsSelected[props.value] || optionsSelected) : placeholder }}\n </span>\n <!-- Dropdown menu -->\n <transition mode=\"out-in\" name=\"TransitionTranslateY\">\n <ul \n v-show=\"showMenu\" \n class=\"bs-black pos-absolute pos-t-100 pos-l-0 z-index-5 pd-small radius-small bg-white mn-t-thin w-100\"\n style=\"min-width: max-content;\"\n >\n <li @click.stop=\"selectOption(option)\" v-for=\"option in optionsListed\" class=\"radius-thin hover:bg-light pd-thin text-box-trim\">\n <span v-if=\"option\" class=\"w-100\">\n {{ option.name || option[props.value] || option }}\n </span>\n </li>\n </ul>\n </transition>\n </div>\n <!-- Validation -->\n <transition mode=\"out-in\" name=\"fade\">\n <div v-if=\"validation\" class=\"mn-t-thin invalid-feedback\">\n * {{validation.message}}\n </div>\n </transition>\n</template>\n<script setup>\nimport { ref, computed, watch, nextTick } from 'vue'\nimport clickOutside from '../FieldPhone/click-outside.js';\nlet vClickOutside = clickOutside\nconst emit = defineEmits([\n 'update:select', \n 'focus', \n 'blur'\n])\nconst props = defineProps({\n label: String,\n placeholder: { type: String, default: 'Please select an item' },\n select: [String, Object],\n property: String,\n value: String,\n options: { type: Array, default: () => [] },\n validation: Boolean,\n})\nconst showMenu = ref(false)\nconst fieldWrapper = ref(null)\nconst optionsSelected = ref(\n props.property \n ? findObjectByValue(props.select, props.property, props.options) \n : props.select\n)\nconst optionsListed = computed(() => {\n return props.select \n ? props.options.filter(option => option !== props.select) \n : props.options\n})\nwatch(() => props.select, (newSelect) => {\n optionsSelected.value = \n props.property \n ? findObjectByValue(props.select, props.property, props.options) \n : props.select;\n});\nconst toggleMenu = async () => {\n showMenu.value = !showMenu.value\n \n if (showMenu.value) {\n await nextTick()\n fieldWrapper.value?.focus()\n emit('focus')\n } else {\n emit('blur')\n }\n}\nfunction clickedOutside () {\n showMenu.value = false\n}\nconst selectOption = option => {\n optionsSelected.value = option\n \n toggleMenu()\n if (props.property) { \n emit('update:select', optionsSelected.value[props.property])\n } else {\n emit('update:select', optionsSelected.value)\n }\n}\nfunction findObjectByValue (value, property, objects) {\n for (const object of objects) {\n if (object[property] === value || object === value) {\n return object;\n }\n }\n return null;\n}\n</script>\n<style lang=\"scss\" scoped>\n li {\n list-style-type: none;\n }\n ul li {\n line-height: 2;\n }\n .field-wrapper:focus {\n outline: none;\n }\n</style>"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CA,QAAI,gBAAgB;AACpB,UAAM,OAAO;AAKb,UAAM,QAAQ;AASd,UAAM,WAAW,IAAI,KAAK;AAC1B,UAAM,eAAe,IAAI,IAAI;AAC7B,UAAM,kBAAkB;AAAA,MACtB,MAAM,WACJ,kBAAkB,MAAM,QAAQ,MAAM,UAAU,MAAM,OAAO,IAC7D,MAAM;AAAA,IACV;AACA,UAAM,gBAAgB,SAAS,MAAM;AACnC,aAAO,MAAM,SACX,MAAM,QAAQ,OAAO,YAAU,WAAW,MAAM,MAAM,IACtD,MAAM;AAAA,IACV,CAAC;AACD,UAAM,MAAM,MAAM,QAAQ,CAAC,cAAc;AACvC,sBAAgB,QAChB,MAAM,WACJ,kBAAkB,MAAM,QAAQ,MAAM,UAAU,MAAM,OAAO,IAC7D,MAAM;AAAA,IACV,CAAC;AACD,UAAM,aAAa,YAAY;AAC7B,eAAS,QAAQ,CAAC,SAAS;AAE3B,UAAI,SAAS,OAAO;AAClB,cAAM,SAAQ;AACd,qBAAa,OAAO,MAAK;AACzB,aAAK,OAAO;AAAA,MACd,OAAO;AACL,aAAK,MAAM;AAAA,MACb;AAAA,IACF;AACA,aAAS,iBAAkB;AACzB,eAAS,QAAQ;AAAA,IACnB;AACA,UAAM,eAAe,YAAU;AAC7B,sBAAgB,QAAQ;AAExB,iBAAU;AACV,UAAI,MAAM,UAAU;AAClB,aAAK,iBAAiB,gBAAgB,MAAM,MAAM,QAAQ,CAAC;AAAA,MAC7D,OAAO;AACL,aAAK,iBAAiB,gBAAgB,KAAK;AAAA,MAC7C;AAAA,IACF;AACA,aAAS,kBAAmB,OAAO,UAAU,SAAS;AACpD,iBAAW,UAAU,SAAS;AAC5B,YAAI,OAAO,QAAQ,MAAM,SAAS,WAAW,OAAO;AAClD,iBAAO;AAAA,QACT;AAAA,MACF;AACA,aAAO;AAAA,IACT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,6 +1,6 @@
1
1
  import { ref, computed, watch, createElementBlock, openBlock, normalizeClass, createElementVNode, createCommentVNode, withModifiers, createVNode, toDisplayString } from "vue";
2
2
  import axios from "axios";
3
- import Loader from "../Loader/Loader.vue.js";
3
+ import Loader from "../Loader/Loader.vue2.js";
4
4
  import _sfc_main$1 from "../../modules/icons/navigation/IconUpload.vue.js";
5
5
  import _sfc_main$2 from "../../modules/icons/navigation/IconDelete.vue.js";
6
6
  /* empty css */
@@ -1,6 +1,6 @@
1
1
  import { ref, createElementBlock, openBlock, withModifiers, createVNode, createElementVNode, Transition, withCtx, createBlock, createCommentVNode, toDisplayString } from "vue";
2
2
  import axios from "axios";
3
- import Loader from "../Loader/Loader.vue.js";
3
+ import Loader from "../Loader/Loader.vue2.js";
4
4
  import _sfc_main$1 from "../../modules/icons/navigation/IconUpload.vue.js";
5
5
  import { useStore } from "../../modules/core/views/store/core.store.js";
6
6
  const _hoisted_1 = {
@@ -32,7 +32,8 @@ const en = {
32
32
  emailNotice: "We will send you an email with a confirmation code that you will need to enter in the next step.",
33
33
  smsNotice: "We will send you an SMS with a confirmation code that you will need to enter in the next step.",
34
34
  sendCode: "Send Code",
35
- haveAccount: "Already have an account?"
35
+ haveAccount: "Already have an account?",
36
+ agreement: "By registering, you agree to our <a href='/legal/eula' target='_blank'>End User License Agreement (EULA)</a>"
36
37
  },
37
38
  enterCode: {
38
39
  verifyNumberTitle: "Verify Number",
@@ -1 +1 @@
1
- {"version":3,"file":"en.js","sources":["../../../../../../src/modules/auth/locales/en.js"],"sourcesContent":["// @martyrs/src/modules/auth/locales/en.js\nexport default {\n auth: {\n popup: {\n title: \"Welcome\",\n subtitle: \"Please sign in or create an account to continue.\",\n signUp: \"Sign Up\",\n haveAccount: \"Already have an account?\",\n signIn: \"Sign in\"\n },\n signIn: {\n title: \"Welcome to OZ DAO,\",\n subtitle: \"Sign In to Continue\",\n signup: \"Don't have an account?\",\n phone: \"Phone\",\n email: \"Email\",\n phonePlaceholder: \"Enter your phone\",\n emailPlaceholder: \"Enter your email\",\n haveAccount: \"Don't have an account? Sign Up\",\n passwordPlaceholder: \"Enter your password\",\n forgotPassword: \"Forgot Password?\",\n signin: \"Sign In\",\n signin_apple: \"Sign In with Apple\",\n soon: \"SOON\"\n },\n signUp: {\n title: \"Sign Up\",\n description: \"Choose a convenient way to register via phone or email:\",\n phone: \"Phone\",\n email: \"Email\",\n phonePlaceholder: \"Enter your phone\",\n emailPlaceholder: \"Enter your email\",\n emailNotice: \"We will send you an email with a confirmation code that you will need to enter in the next step.\",\n smsNotice: \"We will send you an SMS with a confirmation code that you will need to enter in the next step.\",\n sendCode: \"Send Code\",\n haveAccount: \"Already have an account?\"\n },\n enterCode: {\n verifyNumberTitle: \"Verify Number\",\n instructions: \"We have sent a registration code to your phone number. Please enter it in the field below:\",\n resendCode: \"Send the code again\",\n secondsResend: \"seconds to the possibility of sending the code again.\"\n },\n resetPassword: {\n forgotPasswordTitle: \"Forgot Password?\",\n instructions: \"To reset your password, specify the phone or email used during registration.\",\n smsInfo: \"We will send you an SMS with a confirmation code to reset your password, which you will need to enter in the next step.\",\n emailInfo: \"We will send you an email with a confirmation code to reset your password, which you will need to enter in the next step.\",\n phone: \"Phone\",\n email: \"Email\",\n phonePlaceholder: \"Enter your phone\",\n emailPlaceholder: \"Enter your email\",\n sendCode: \"Send code\"\n },\n enterPassword: {\n almostDone: \"Almost there!\",\n newPasswordPrompt: \"Please, set a new password.\",\n registrationPasswordPrompt: \"Please, set your password to complete the registration.\",\n passwordPlaceholder: \"Password\",\n repeatPasswordPlaceholder: \"Repeat Password\",\n changePasswordBtn: \"Change Password\",\n registerBtn: \"Register\"\n },\n features: [\n {\n title: \"What's the Weeder Token, Dude?\",\n description: \"WDT is like, the backbone of our rad community. It's cash, it's power, it's an investment. Groovy, right?\"\n },\n {\n title: \"Light Up and Level Up\",\n description: \"Order up, light up, and earn Weeder tokens. More tokes, more cash in your pocket, man.\"\n },\n {\n title: \"Hang Ten with Our Community\",\n description: \"Find the dopest strains and start floating on cloud 9 with us!\"\n },\n {\n title: \"Shop 'Til You Drop... Into Your Couch\",\n description: \"Score primo bud and gear with just a few clicks. Delivered right to your pad!\"\n }\n ]\n }\n};"],"names":[],"mappings":"AACA,MAAA,KAAe;AAAA,EACb,MAAM;AAAA,IACJ,OAAO;AAAA,MACL,OAAO;AAAA,MACP,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,QAAQ;AAAA,IACd;AAAA,IACI,QAAQ;AAAA,MACN,OAAO;AAAA,MACP,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,OAAO;AAAA,MACP,kBAAkB;AAAA,MAClB,kBAAkB;AAAA,MAClB,aAAa;AAAA,MACb,qBAAqB;AAAA,MACrB,gBAAgB;AAAA,MAChB,QAAQ;AAAA,MACR,cAAc;AAAA,MACd,MAAM;AAAA,IACZ;AAAA,IACI,QAAQ;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,MACb,OAAO;AAAA,MACP,OAAO;AAAA,MACP,kBAAkB;AAAA,MAClB,kBAAkB;AAAA,MAClB,aAAa;AAAA,MACb,WAAW;AAAA,MACX,UAAU;AAAA,MACV,aAAa;AAAA,IACnB;AAAA,IACI,WAAW;AAAA,MACT,mBAAmB;AAAA,MACnB,cAAc;AAAA,MACd,YAAY;AAAA,MACZ,eAAe;AAAA,IACrB;AAAA,IACI,eAAe;AAAA,MACb,qBAAqB;AAAA,MACrB,cAAc;AAAA,MACd,SAAS;AAAA,MACT,WAAW;AAAA,MACX,OAAO;AAAA,MACP,OAAO;AAAA,MACP,kBAAkB;AAAA,MAClB,kBAAkB;AAAA,MAClB,UAAU;AAAA,IAChB;AAAA,IACI,eAAe;AAAA,MACb,YAAY;AAAA,MACZ,mBAAmB;AAAA,MACnB,4BAA4B;AAAA,MAC5B,qBAAqB;AAAA,MACrB,2BAA2B;AAAA,MAC3B,mBAAmB;AAAA,MACnB,aAAa;AAAA,IACnB;AAAA,IACI,UAAU;AAAA,MACR;AAAA,QACE,OAAO;AAAA,QACP,aAAa;AAAA,MACrB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,aAAa;AAAA,MACrB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,aAAa;AAAA,MACrB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,aAAa;AAAA,MACrB;AAAA,IACA;AAAA,EACA;AACA;"}
1
+ {"version":3,"file":"en.js","sources":["../../../../../../src/modules/auth/locales/en.js"],"sourcesContent":["// @martyrs/src/modules/auth/locales/en.js\nexport default {\n auth: {\n popup: {\n title: \"Welcome\",\n subtitle: \"Please sign in or create an account to continue.\",\n signUp: \"Sign Up\",\n haveAccount: \"Already have an account?\",\n signIn: \"Sign in\"\n },\n signIn: {\n title: \"Welcome to OZ DAO,\",\n subtitle: \"Sign In to Continue\",\n signup: \"Don't have an account?\",\n phone: \"Phone\",\n email: \"Email\",\n phonePlaceholder: \"Enter your phone\",\n emailPlaceholder: \"Enter your email\",\n haveAccount: \"Don't have an account? Sign Up\",\n passwordPlaceholder: \"Enter your password\",\n forgotPassword: \"Forgot Password?\",\n signin: \"Sign In\",\n signin_apple: \"Sign In with Apple\",\n soon: \"SOON\"\n },\n signUp: {\n title: \"Sign Up\",\n description: \"Choose a convenient way to register via phone or email:\",\n phone: \"Phone\",\n email: \"Email\",\n phonePlaceholder: \"Enter your phone\",\n emailPlaceholder: \"Enter your email\",\n emailNotice: \"We will send you an email with a confirmation code that you will need to enter in the next step.\",\n smsNotice: \"We will send you an SMS with a confirmation code that you will need to enter in the next step.\",\n sendCode: \"Send Code\",\n haveAccount: \"Already have an account?\",\n agreement: \"By registering, you agree to our <a href='/legal/eula' target='_blank'>End User License Agreement (EULA)</a>\"\n },\n enterCode: {\n verifyNumberTitle: \"Verify Number\",\n instructions: \"We have sent a registration code to your phone number. Please enter it in the field below:\",\n resendCode: \"Send the code again\",\n secondsResend: \"seconds to the possibility of sending the code again.\"\n },\n resetPassword: {\n forgotPasswordTitle: \"Forgot Password?\",\n instructions: \"To reset your password, specify the phone or email used during registration.\",\n smsInfo: \"We will send you an SMS with a confirmation code to reset your password, which you will need to enter in the next step.\",\n emailInfo: \"We will send you an email with a confirmation code to reset your password, which you will need to enter in the next step.\",\n phone: \"Phone\",\n email: \"Email\",\n phonePlaceholder: \"Enter your phone\",\n emailPlaceholder: \"Enter your email\",\n sendCode: \"Send code\"\n },\n enterPassword: {\n almostDone: \"Almost there!\",\n newPasswordPrompt: \"Please, set a new password.\",\n registrationPasswordPrompt: \"Please, set your password to complete the registration.\",\n passwordPlaceholder: \"Password\",\n repeatPasswordPlaceholder: \"Repeat Password\",\n changePasswordBtn: \"Change Password\",\n registerBtn: \"Register\"\n },\n features: [\n {\n title: \"What's the Weeder Token, Dude?\",\n description: \"WDT is like, the backbone of our rad community. It's cash, it's power, it's an investment. Groovy, right?\"\n },\n {\n title: \"Light Up and Level Up\",\n description: \"Order up, light up, and earn Weeder tokens. More tokes, more cash in your pocket, man.\"\n },\n {\n title: \"Hang Ten with Our Community\",\n description: \"Find the dopest strains and start floating on cloud 9 with us!\"\n },\n {\n title: \"Shop 'Til You Drop... Into Your Couch\",\n description: \"Score primo bud and gear with just a few clicks. Delivered right to your pad!\"\n }\n ]\n }\n};"],"names":[],"mappings":"AACA,MAAA,KAAe;AAAA,EACb,MAAM;AAAA,IACJ,OAAO;AAAA,MACL,OAAO;AAAA,MACP,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,QAAQ;AAAA,IACd;AAAA,IACI,QAAQ;AAAA,MACN,OAAO;AAAA,MACP,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,OAAO;AAAA,MACP,kBAAkB;AAAA,MAClB,kBAAkB;AAAA,MAClB,aAAa;AAAA,MACb,qBAAqB;AAAA,MACrB,gBAAgB;AAAA,MAChB,QAAQ;AAAA,MACR,cAAc;AAAA,MACd,MAAM;AAAA,IACZ;AAAA,IACI,QAAQ;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,MACb,OAAO;AAAA,MACP,OAAO;AAAA,MACP,kBAAkB;AAAA,MAClB,kBAAkB;AAAA,MAClB,aAAa;AAAA,MACb,WAAW;AAAA,MACX,UAAU;AAAA,MACV,aAAa;AAAA,MACb,WAAW;AAAA,IACjB;AAAA,IACI,WAAW;AAAA,MACT,mBAAmB;AAAA,MACnB,cAAc;AAAA,MACd,YAAY;AAAA,MACZ,eAAe;AAAA,IACrB;AAAA,IACI,eAAe;AAAA,MACb,qBAAqB;AAAA,MACrB,cAAc;AAAA,MACd,SAAS;AAAA,MACT,WAAW;AAAA,MACX,OAAO;AAAA,MACP,OAAO;AAAA,MACP,kBAAkB;AAAA,MAClB,kBAAkB;AAAA,MAClB,UAAU;AAAA,IAChB;AAAA,IACI,eAAe;AAAA,MACb,YAAY;AAAA,MACZ,mBAAmB;AAAA,MACnB,4BAA4B;AAAA,MAC5B,qBAAqB;AAAA,MACrB,2BAA2B;AAAA,MAC3B,mBAAmB;AAAA,MACnB,aAAa;AAAA,IACnB;AAAA,IACI,UAAU;AAAA,MACR;AAAA,QACE,OAAO;AAAA,QACP,aAAa;AAAA,MACrB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,aAAa;AAAA,MACrB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,aAAa;AAAA,MACrB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,aAAa;AAAA,MACrB;AAAA,IACA;AAAA,EACA;AACA;"}
@@ -32,7 +32,8 @@ const ru = {
32
32
  emailNotice: "Мы отправим вам электронное письмо с кодом подтверждения, который вы должны будете ввести в следующем шаге.",
33
33
  smsNotice: "Мы вышлем вам SMS с кодом подтверждения, который вы должны будете ввести в следующем шаге.",
34
34
  sendCode: "Отправить код",
35
- haveAccount: "У вас уже есть аккаунт?"
35
+ haveAccount: "У вас уже есть аккаунт?",
36
+ agreement: "Регистрируясь, вы соглашаетесь с <a href='/legal/eula' target='_blank'>Пользовательским соглашением (EULA)</a>"
36
37
  },
37
38
  enterCode: {
38
39
  verifyNumberTitle: "Подтвердите номер",
@@ -1 +1 @@
1
- {"version":3,"file":"ru.js","sources":["../../../../../../src/modules/auth/locales/ru.js"],"sourcesContent":["// @martyrs/src/modules/auth/locales/ru.js\nexport default {\n auth: {\n popup: {\n title: \"Добро пожаловать\",\n subtitle: \"Войдите или создайте аккаунт для продолжения.\",\n signUp: \"Регистрация\",\n haveAccount: \"Уже есть аккаунт?\",\n signIn: \"Войти\"\n },\n signIn: {\n title: \"Приветствуем вас,\",\n subtitle: \"Войдите для продолжения\",\n signup: \"Нет аккаунта?\",\n phone: \"Телефон\",\n email: \"Email\",\n phonePlaceholder: \"Введите ваш телефон\",\n emailPlaceholder: \"Введите ваш email\",\n haveAccount: \"Нет аккаунта? Зарегистрироваться\",\n passwordPlaceholder: \"Введите ваш пароль\",\n forgotPassword: \"Забыли пароль?\",\n signin: \"Войти\",\n signin_apple: \"Войти через Apple\",\n soon: \"СКОРО\"\n },\n signUp: {\n title: \"Новая учетная запись\",\n description: \"Выберите удобный способ регистрации через телефон или email:\",\n phone: \"Телефон\",\n email: \"Email\",\n phonePlaceholder: \"Введите ваш телефон\",\n emailPlaceholder: \"Введите ваш email\",\n emailNotice: \"Мы отправим вам электронное письмо с кодом подтверждения, который вы должны будете ввести в следующем шаге.\",\n smsNotice: \"Мы вышлем вам SMS с кодом подтверждения, который вы должны будете ввести в следующем шаге.\",\n sendCode: \"Отправить код\",\n haveAccount: \"У вас уже есть аккаунт?\"\n },\n enterCode: {\n verifyNumberTitle: \"Подтвердите номер\",\n verifyEmailTitle: \"Подтвердите email\",\n instructions: \"Мы отправили код регистрации на ваш номер телефона. Введите его в поле ниже:\",\n instructionsEmail: \"Мы отправили код регистрации на ваш email. Введите его в поле ниже:\",\n resendCode: \"Отправить код еще раз\",\n secondsResend: \"секунд до возможности отправить код еще раз.\"\n },\n resetPassword: {\n forgotPasswordTitle: \"Забыли пароль?\",\n instructions: \"Чтобы сбросить пароль, укажите телефон или email, использованные при регистрации.\",\n smsInfo: \"Мы вышлем вам SMS с кодом подтверждения для сброса пароля, который вы должны будете ввести в следующем шаге.\",\n emailInfo: \"Мы отправим вам электронное письмо с кодом подтверждения для сброса пароля, который вы должны будете ввести в следующем шаге.\",\n phone: \"Телефон\",\n email: \"Email\",\n phonePlaceholder: \"Введите ваш телефон\",\n emailPlaceholder: \"Введите ваш email\",\n sendCode: \"Отправить код\"\n },\n enterPassword: {\n almostDone: \"Почти все!\",\n newPasswordPrompt: \"Пожалуйста, укажите новый пароль.\",\n registrationPasswordPrompt: \"Пожалуйста, укажите пароль, на этом регистрация будет закончена.\",\n passwordPlaceholder: \"Пароль\",\n repeatPasswordPlaceholder: \"Повторите пароль\",\n changePasswordBtn: \"Поменять пароль\",\n registerBtn: \"Зарегистрироваться\"\n },\n features: [\n {\n title: \"Что такое токен Weeder, Бро?\",\n description: \"WDT - это как основа нашего крутого сообщества. Это деньги, это власть, это инвестиции. Круто, а?\"\n },\n {\n title: \"Зажигай и Развивайся\",\n description: \"Закажи шмали, курни и зарабатывай токены Weeder. Чем больше курнешь, тем больше кэша у тебя в кармане, чувак.\"\n },\n {\n title: \"Веселись с Нашим Сообществом\",\n description: \"Найди самые крутые сорта и начни шмалить на девятом облаке вместе с нами.\"\n },\n {\n title: \"Покупайте, Когда Накурились\",\n description: \"Закажи премиумную бошку и крутые аксессуары за пару кликов, чувак. Прямо к твоей двери!\"\n }\n ]\n }\n};"],"names":[],"mappings":"AACA,MAAA,KAAe;AAAA,EACb,MAAM;AAAA,IACJ,OAAO;AAAA,MACL,OAAO;AAAA,MACP,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,QAAQ;AAAA,IACd;AAAA,IACI,QAAQ;AAAA,MACN,OAAO;AAAA,MACP,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,OAAO;AAAA,MACP,kBAAkB;AAAA,MAClB,kBAAkB;AAAA,MAClB,aAAa;AAAA,MACb,qBAAqB;AAAA,MACrB,gBAAgB;AAAA,MAChB,QAAQ;AAAA,MACR,cAAc;AAAA,MACd,MAAM;AAAA,IACZ;AAAA,IACI,QAAQ;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,MACb,OAAO;AAAA,MACP,OAAO;AAAA,MACP,kBAAkB;AAAA,MAClB,kBAAkB;AAAA,MAClB,aAAa;AAAA,MACb,WAAW;AAAA,MACX,UAAU;AAAA,MACV,aAAa;AAAA,IACnB;AAAA,IACI,WAAW;AAAA,MACT,mBAAmB;AAAA,MACnB,kBAAkB;AAAA,MAClB,cAAc;AAAA,MACd,mBAAmB;AAAA,MACnB,YAAY;AAAA,MACZ,eAAe;AAAA,IACrB;AAAA,IACI,eAAe;AAAA,MACb,qBAAqB;AAAA,MACrB,cAAc;AAAA,MACd,SAAS;AAAA,MACT,WAAW;AAAA,MACX,OAAO;AAAA,MACP,OAAO;AAAA,MACP,kBAAkB;AAAA,MAClB,kBAAkB;AAAA,MAClB,UAAU;AAAA,IAChB;AAAA,IACI,eAAe;AAAA,MACb,YAAY;AAAA,MACZ,mBAAmB;AAAA,MACnB,4BAA4B;AAAA,MAC5B,qBAAqB;AAAA,MACrB,2BAA2B;AAAA,MAC3B,mBAAmB;AAAA,MACnB,aAAa;AAAA,IACnB;AAAA,IACI,UAAU;AAAA,MACR;AAAA,QACE,OAAO;AAAA,QACP,aAAa;AAAA,MACrB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,aAAa;AAAA,MACrB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,aAAa;AAAA,MACrB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,aAAa;AAAA,MACrB;AAAA,IACA;AAAA,EACA;AACA;"}
1
+ {"version":3,"file":"ru.js","sources":["../../../../../../src/modules/auth/locales/ru.js"],"sourcesContent":["// @martyrs/src/modules/auth/locales/ru.js\nexport default {\n auth: {\n popup: {\n title: \"Добро пожаловать\",\n subtitle: \"Войдите или создайте аккаунт для продолжения.\",\n signUp: \"Регистрация\",\n haveAccount: \"Уже есть аккаунт?\",\n signIn: \"Войти\"\n },\n signIn: {\n title: \"Приветствуем вас,\",\n subtitle: \"Войдите для продолжения\",\n signup: \"Нет аккаунта?\",\n phone: \"Телефон\",\n email: \"Email\",\n phonePlaceholder: \"Введите ваш телефон\",\n emailPlaceholder: \"Введите ваш email\",\n haveAccount: \"Нет аккаунта? Зарегистрироваться\",\n passwordPlaceholder: \"Введите ваш пароль\",\n forgotPassword: \"Забыли пароль?\",\n signin: \"Войти\",\n signin_apple: \"Войти через Apple\",\n soon: \"СКОРО\"\n },\n signUp: {\n title: \"Новая учетная запись\",\n description: \"Выберите удобный способ регистрации через телефон или email:\",\n phone: \"Телефон\",\n email: \"Email\",\n phonePlaceholder: \"Введите ваш телефон\",\n emailPlaceholder: \"Введите ваш email\",\n emailNotice: \"Мы отправим вам электронное письмо с кодом подтверждения, который вы должны будете ввести в следующем шаге.\",\n smsNotice: \"Мы вышлем вам SMS с кодом подтверждения, который вы должны будете ввести в следующем шаге.\",\n sendCode: \"Отправить код\",\n haveAccount: \"У вас уже есть аккаунт?\",\n agreement: \"Регистрируясь, вы соглашаетесь с <a href='/legal/eula' target='_blank'>Пользовательским соглашением (EULA)</a>\"\n },\n enterCode: {\n verifyNumberTitle: \"Подтвердите номер\",\n verifyEmailTitle: \"Подтвердите email\",\n instructions: \"Мы отправили код регистрации на ваш номер телефона. Введите его в поле ниже:\",\n instructionsEmail: \"Мы отправили код регистрации на ваш email. Введите его в поле ниже:\",\n resendCode: \"Отправить код еще раз\",\n secondsResend: \"секунд до возможности отправить код еще раз.\"\n },\n resetPassword: {\n forgotPasswordTitle: \"Забыли пароль?\",\n instructions: \"Чтобы сбросить пароль, укажите телефон или email, использованные при регистрации.\",\n smsInfo: \"Мы вышлем вам SMS с кодом подтверждения для сброса пароля, который вы должны будете ввести в следующем шаге.\",\n emailInfo: \"Мы отправим вам электронное письмо с кодом подтверждения для сброса пароля, который вы должны будете ввести в следующем шаге.\",\n phone: \"Телефон\",\n email: \"Email\",\n phonePlaceholder: \"Введите ваш телефон\",\n emailPlaceholder: \"Введите ваш email\",\n sendCode: \"Отправить код\"\n },\n enterPassword: {\n almostDone: \"Почти все!\",\n newPasswordPrompt: \"Пожалуйста, укажите новый пароль.\",\n registrationPasswordPrompt: \"Пожалуйста, укажите пароль, на этом регистрация будет закончена.\",\n passwordPlaceholder: \"Пароль\",\n repeatPasswordPlaceholder: \"Повторите пароль\",\n changePasswordBtn: \"Поменять пароль\",\n registerBtn: \"Зарегистрироваться\"\n },\n features: [\n {\n title: \"Что такое токен Weeder, Бро?\",\n description: \"WDT - это как основа нашего крутого сообщества. Это деньги, это власть, это инвестиции. Круто, а?\"\n },\n {\n title: \"Зажигай и Развивайся\",\n description: \"Закажи шмали, курни и зарабатывай токены Weeder. Чем больше курнешь, тем больше кэша у тебя в кармане, чувак.\"\n },\n {\n title: \"Веселись с Нашим Сообществом\",\n description: \"Найди самые крутые сорта и начни шмалить на девятом облаке вместе с нами.\"\n },\n {\n title: \"Покупайте, Когда Накурились\",\n description: \"Закажи премиумную бошку и крутые аксессуары за пару кликов, чувак. Прямо к твоей двери!\"\n }\n ]\n }\n};"],"names":[],"mappings":"AACA,MAAA,KAAe;AAAA,EACb,MAAM;AAAA,IACJ,OAAO;AAAA,MACL,OAAO;AAAA,MACP,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,QAAQ;AAAA,IACd;AAAA,IACI,QAAQ;AAAA,MACN,OAAO;AAAA,MACP,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,OAAO;AAAA,MACP,kBAAkB;AAAA,MAClB,kBAAkB;AAAA,MAClB,aAAa;AAAA,MACb,qBAAqB;AAAA,MACrB,gBAAgB;AAAA,MAChB,QAAQ;AAAA,MACR,cAAc;AAAA,MACd,MAAM;AAAA,IACZ;AAAA,IACI,QAAQ;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,MACb,OAAO;AAAA,MACP,OAAO;AAAA,MACP,kBAAkB;AAAA,MAClB,kBAAkB;AAAA,MAClB,aAAa;AAAA,MACb,WAAW;AAAA,MACX,UAAU;AAAA,MACV,aAAa;AAAA,MACb,WAAW;AAAA,IACjB;AAAA,IACI,WAAW;AAAA,MACT,mBAAmB;AAAA,MACnB,kBAAkB;AAAA,MAClB,cAAc;AAAA,MACd,mBAAmB;AAAA,MACnB,YAAY;AAAA,MACZ,eAAe;AAAA,IACrB;AAAA,IACI,eAAe;AAAA,MACb,qBAAqB;AAAA,MACrB,cAAc;AAAA,MACd,SAAS;AAAA,MACT,WAAW;AAAA,MACX,OAAO;AAAA,MACP,OAAO;AAAA,MACP,kBAAkB;AAAA,MAClB,kBAAkB;AAAA,MAClB,UAAU;AAAA,IAChB;AAAA,IACI,eAAe;AAAA,MACb,YAAY;AAAA,MACZ,mBAAmB;AAAA,MACnB,4BAA4B;AAAA,MAC5B,qBAAqB;AAAA,MACrB,2BAA2B;AAAA,MAC3B,mBAAmB;AAAA,MACnB,aAAa;AAAA,IACnB;AAAA,IACI,UAAU;AAAA,MACR;AAAA,QACE,OAAO;AAAA,QACP,aAAa;AAAA,MACrB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,aAAa;AAAA,MACrB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,aAAa;AAAA,MACrB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,aAAa;AAAA,MACrB;AAAA,IACA;AAAA,EACA;AACA;"}
@@ -2,7 +2,7 @@ import { createBlock, openBlock, withCtx, createElementVNode, toDisplayString, u
2
2
  import { useRouter, useRoute } from "vue-router";
3
3
  import { useI18n } from "vue-i18n";
4
4
  import _sfc_main$1 from "../../../../../components/Popup/Popup.vue.js";
5
- import _sfc_main$2 from "../../../../../components/Button/Button.vue2.js";
5
+ import _sfc_main$2 from "../../../../../components/Button/Button.vue.js";
6
6
  const _hoisted_1 = { class: "t-center" };
7
7
  const _hoisted_2 = { class: "mn-b-medium" };
8
8
  const _hoisted_3 = { class: "mn-b-semi t-transp" };
@@ -1,7 +1,7 @@
1
1
  import { ref, onMounted, createElementBlock, openBlock, createElementVNode, createVNode, withCtx } from "vue";
2
2
  /* empty css */
3
3
  import Field from "../../../../../components/Field/Field.vue.js";
4
- import _sfc_main$1 from "../../../../../components/Button/Button.vue2.js";
4
+ import _sfc_main$1 from "../../../../../components/Button/Button.vue.js";
5
5
  import { useRoute, useRouter } from "vue-router";
6
6
  import { state, actions } from "../../store/auth.js";
7
7
  import invitesStore from "../../../../organizations/store/invites.store.js";
@@ -1,8 +1,8 @@
1
1
  import { ref, onServerPrefetch, onMounted, resolveComponent, createElementBlock, openBlock, createElementVNode, createVNode, createBlock, createCommentVNode, unref, withCtx, toDisplayString, Fragment, renderList, normalizeClass, resolveDynamicComponent } from "vue";
2
2
  /* empty css */
3
- /* empty css */
4
- import _sfc_main$1 from "../../../../../components/Dropdown/Dropdown.vue.js";
5
- import _sfc_main$7 from "../../../../../components/Menu/Menu.vue.js";
3
+ /* empty css */
4
+ import _sfc_main$1 from "../../../../../components/Dropdown/Dropdown.vue2.js";
5
+ import _sfc_main$7 from "../../../../../components/Menu/Menu.vue2.js";
6
6
  import _sfc_main$c from "../../../../../components/Menu/MenuItem.vue.js";
7
7
  import _sfc_main$3 from "../../../../organizations/components/elements/ButtonToggleMembership.vue.js";
8
8
  import _sfc_main$2 from "../../../../reports/components/sections/FormReport.vue.js";
@@ -1,6 +1,6 @@
1
1
  import { ref, onMounted, provide, resolveComponent, createBlock, openBlock, withCtx, createElementBlock, createVNode } from "vue";
2
2
  import _sfc_main$1 from "../../../../../components/Popup/Popup.vue.js";
3
- import Loader from "../../../../../components/Loader/Loader.vue.js";
3
+ import Loader from "../../../../../components/Loader/Loader.vue2.js";
4
4
  import _sfc_main$2 from "./ProfileEditSidebar.vue.js";
5
5
  import { useRoute, useRouter } from "vue-router";
6
6
  import { state } from "../../store/auth.js";
@@ -1,6 +1,6 @@
1
1
  import { ref, createElementBlock, openBlock, createElementVNode, createVNode, createBlock, withCtx, createTextVNode, unref } from "vue";
2
2
  import _sfc_main$3 from "../../../../../components/Checkbox/Checkbox.vue.js";
3
- import _sfc_main$2 from "../../../../../components/Button/Button.vue2.js";
3
+ import _sfc_main$2 from "../../../../../components/Button/Button.vue.js";
4
4
  import Field from "../../../../../components/Field/Field.vue.js";
5
5
  import _sfc_main$1 from "../../../../../components/FieldPhone/FieldPhone.vue.js";
6
6
  import { useRouter } from "vue-router";
@@ -1,6 +1,6 @@
1
1
  import { createElementBlock, openBlock, createElementVNode, createVNode, toDisplayString, withCtx, createTextVNode } from "vue";
2
2
  import Field from "../../../../../components/Field/Field.vue.js";
3
- import _sfc_main$1 from "../../../../../components/Button/Button.vue2.js";
3
+ import _sfc_main$1 from "../../../../../components/Button/Button.vue.js";
4
4
  import UploadImage from "../../../../../components/UploadImage/UploadImage.vue.js";
5
5
  import { useRouter } from "vue-router";
6
6
  import { state, actions } from "../../store/users.js";
@@ -2,7 +2,7 @@ import { ref, computed, createElementBlock, openBlock, createElementVNode, creat
2
2
  import _sfc_main$1 from "../../../../../components/Tab/Tab.vue2.js";
3
3
  import Field from "../../../../../components/Field/Field.vue.js";
4
4
  import _sfc_main$2 from "../../../../../components/FieldPhone/FieldPhone.vue.js";
5
- import _sfc_main$3 from "../../../../../components/Button/Button.vue2.js";
5
+ import _sfc_main$3 from "../../../../../components/Button/Button.vue.js";
6
6
  import { useRouter } from "vue-router";
7
7
  import { useI18n } from "vue-i18n";
8
8
  import { useStore, setError } from "../../../../core/views/store/core.store.js";
@@ -2,7 +2,7 @@ import { ref, computed, onMounted, resolveComponent, createElementBlock, openBlo
2
2
  import _sfc_main$1 from "../../../../../components/Tab/Tab.vue2.js";
3
3
  import Field from "../../../../../components/Field/Field.vue.js";
4
4
  import _sfc_main$2 from "../../../../../components/FieldPhone/FieldPhone.vue.js";
5
- import _sfc_main$3 from "../../../../../components/Button/Button.vue2.js";
5
+ import _sfc_main$3 from "../../../../../components/Button/Button.vue.js";
6
6
  import { useRoute, useRouter } from "vue-router";
7
7
  import { useI18n } from "vue-i18n";
8
8
  import { useStore } from "../../../../core/views/store/core.store.js";
@@ -2,7 +2,7 @@ import { ref, computed, resolveComponent, createElementBlock, openBlock, createE
2
2
  import _sfc_main$1 from "../../../../../components/Tab/Tab.vue2.js";
3
3
  import Field from "../../../../../components/Field/Field.vue.js";
4
4
  import _sfc_main$2 from "../../../../../components/FieldPhone/FieldPhone.vue.js";
5
- import _sfc_main$3 from "../../../../../components/Button/Button.vue2.js";
5
+ import _sfc_main$3 from "../../../../../components/Button/Button.vue.js";
6
6
  import { useRoute, useRouter } from "vue-router";
7
7
  import { useI18n } from "vue-i18n";
8
8
  import { useStore, setError } from "../../../../core/views/store/core.store.js";
@@ -22,7 +22,8 @@ const _hoisted_6 = { class: "mn-b-small t-transp" };
22
22
  const _hoisted_7 = { class: "mn-b-semi radius-small o-hidden" };
23
23
  const _hoisted_8 = { class: "mn-b-small t-transp" };
24
24
  const _hoisted_9 = { class: "mn-b-semi" };
25
- const _hoisted_10 = { class: "w-100" };
25
+ const _hoisted_10 = ["innerHTML"];
26
+ const _hoisted_11 = { class: "w-100" };
26
27
  const _sfc_main = {
27
28
  __name: "SignUp",
28
29
  setup(__props) {
@@ -171,15 +172,10 @@ const _sfc_main = {
171
172
  class: "bg-light pd-small radius-small"
172
173
  }, null, 8, ["field", "placeholder"])
173
174
  ]),
174
- _cache[5] || (_cache[5] = createElementVNode("div", { class: "p-regular fw-semi mn-b-semi" }, [
175
- createTextVNode(" By registering, you agree to our "),
176
- createElementVNode("a", {
177
- class: "t-grey",
178
- href: "/legal/eula",
179
- target: "_blank",
180
- rel: "noopener noreferrer"
181
- }, "End User License Agreement (EULA)")
182
- ], -1)),
175
+ createElementVNode("div", {
176
+ class: "p-regular fw-semi mn-b-semi",
177
+ innerHTML: unref(t)("auth.signUp.agreement")
178
+ }, null, 8, _hoisted_10),
183
179
  createVNode(_sfc_main$3, {
184
180
  submit: onSubmit,
185
181
  class: "w-100 bg-main mn-b-big"
@@ -189,7 +185,7 @@ const _sfc_main = {
189
185
  ]),
190
186
  _: 1
191
187
  }),
192
- createElementVNode("div", _hoisted_10, [
188
+ createElementVNode("div", _hoisted_11, [
193
189
  createVNode(_component_router_link, {
194
190
  to: { name: "Sign In", query: { returnUrl: unref(route).query.returnUrl } },
195
191
  class: "underline mn-b-medium d-block t-blue"
@@ -1 +1 @@
1
- {"version":3,"file":"SignUp.vue.js","sources":["../../../../../../../../src/modules/auth/views/components/pages/SignUp.vue"],"sourcesContent":["<template>\n <section class=\"t-left pd-medium\">\n <h3 class=\"mn-b-small\">{{ t('auth.signUp.title') }}</h3>\n\n <!-- Tab selector -->\n <div\n v-if=\"availableTabs.length > 1\"\n class=\"mn-b-small p-small uppercase fw-semi bg-light radius-small o-hidden\"\n >\n <Tab\n v-model:selected=\"tabAuth\"\n :tabs=\"availableTabs\"\n classTab=\"pd-small pd-r-medium pd-l-medium w-100 pd-small radius-small\"\n />\n </div>\n\n <!-- Form -->\n <div class=\"pos-relative\">\n <!-- Phone -->\n <transition name=\"slide-fade\">\n <div v-show=\"tabAuth === 'phone'\" class=\"mn-b-semi radius-small\">\n <p class=\"mn-b-small t-transp\">{{ t('auth.signUp.smsNotice') }}</p>\n <FieldPhone\n @change=\"(event) => phone = event\"\n :dropdownOptions=\"{\n showDialCodeInSelection: true,\n showFlags: true,\n showDialCodeInList: true\n }\"\n :validation=\"phoneValidation\"\n mode=\"national\"\n :inputOptions=\"{ placeholder: t('auth.signUp.phonePlaceholder') }\"\n class=\"bg-light h-4r pd-small radius-small mn-b-thin\"\n />\n </div>\n </transition>\n <!-- Email -->\n <transition name=\"slide-fade\">\n <div v-show=\"tabAuth === 'email'\" class=\"mn-b-semi radius-small o-hidden\">\n <p class=\"mn-b-small t-transp\">{{ t('auth.signUp.emailNotice') }}</p>\n <Field\n v-model:field=\"email\"\n :placeholder=\"t('auth.signUp.emailPlaceholder')\"\n :validation=\"emailValidation\"\n class=\"bg-light h-4r pd-medium radius-small\"\n />\n </div>\n </transition>\n </div>\n\n <!-- Password fields -->\n <div class=\"mn-b-semi\">\n <Field\n v-model:field=\"password\"\n type=\"password\"\n :placeholder=\"t('auth.enterPassword.passwordPlaceholder')\"\n :validation=\"passwordValidation\"\n class=\"bg-light pd-small radius-small mn-b-thin\"\n />\n <Field\n v-model:field=\"passwordRepeat\"\n type=\"password\"\n :placeholder=\"t('auth.enterPassword.repeatPasswordPlaceholder')\"\n class=\"bg-light pd-small radius-small\"\n />\n </div>\n\n <!-- EULA -->\n <div class=\"p-regular fw-semi mn-b-semi\">\n By registering, you agree to our\n <a class=\"t-grey\" href=\"/legal/eula\" target=\"_blank\" rel=\"noopener noreferrer\">End User License Agreement (EULA)</a>\n </div>\n\n <!-- Button -->\n <Button :submit=\"onSubmit\" class=\"w-100 bg-main mn-b-big\">\n {{ t('auth.enterPassword.registerBtn') }}\n </Button>\n\n <!-- Links -->\n <div class=\"w-100\">\n <router-link\n :to=\"{ name: 'Sign In', query: { returnUrl: route.query.returnUrl } }\"\n class=\"underline mn-b-medium d-block t-blue\"\n >\n {{ t('auth.signUp.haveAccount') }}\n </router-link>\n </div>\n </section>\n</template>\n\n<script setup>\nimport Tab from '@martyrs/src/components/Tab/Tab.vue'\nimport Field from '@martyrs/src/components/Field/Field.vue'\nimport FieldPhone from '@martyrs/src/components/FieldPhone/FieldPhone.vue'\nimport Button from '@martyrs/src/components/Button/Button.vue'\n\nimport { computed, ref } from 'vue'\nimport { useRoute, useRouter } from 'vue-router'\nimport { useI18n } from 'vue-i18n'\n\nimport { useStore } from '@martyrs/src/modules/core/views/store/core.store.js'\nimport { setError } from '@martyrs/src/modules/core/views/store/core.store.js'\nimport { withOtp } from '@martyrs/src/modules/auth/views/plugins/otp.plugin.js'\nimport $axios from '@martyrs/src/modules/core/views/utils/axios-instance.js'\nimport * as inputsValidation from '@martyrs/src/modules/auth/views/validations/inputs.validation'\n\nconst store = useStore()\nconst core = store.core || { state: {} }\nconst auth = store.auth\n\nconst route = useRoute()\nconst router = useRouter()\nconst { t } = useI18n({ useScope: 'global' })\n\nconst email = ref('')\nconst phone = ref('')\nconst password = ref('')\nconst passwordRepeat = ref('')\n\nconst phoneValidation = ref(null)\nconst emailValidation = ref(null)\nconst passwordValidation = ref(null)\n\nconst availableTabs = computed(() => {\n const tabs = [\n { name: t('auth.signUp.phone'), value: 'phone' },\n { name: t('auth.signUp.email'), value: 'email' }\n ]\n const excludeMethods = core.state?.options?.auth?.authMethodsExclude || []\n return tabs.filter(tab => !excludeMethods.includes(tab.value))\n})\n\nconst tabAuth = ref(availableTabs.value.length ? availableTabs.value[0].value : '')\n\nasync function onSubmit() {\n // Validate identifier\n if (tabAuth.value === 'phone') {\n await inputsValidation.validateInputs(\n phoneValidation,\n inputsValidation.validatePhone,\n phone.value,\n 'Некорректный телефон'\n )\n }\n if (tabAuth.value === 'email') {\n await inputsValidation.validateInputs(\n emailValidation,\n inputsValidation.validateEmail,\n email.value,\n 'Некорректный email'\n )\n }\n\n // Validate password\n await inputsValidation.validateInputs(\n passwordValidation,\n inputsValidation.validatePassword,\n password.value,\n 'Некорректный пароль'\n )\n\n if (password.value !== passwordRepeat.value) {\n setError({ response: { data: { errorCode: 'PASSWORDS_DO_NOT_MATCH' } } })\n throw new Error('PASSWORDS_DO_NOT_MATCH')\n }\n\n // Signup with OTP verification\n try {\n const result = await withOtp(\n (data) => $axios.post('/api/auth/signup', data),\n {\n email: tabAuth.value === 'email' ? email.value : undefined,\n phone: tabAuth.value === 'phone' ? phone.value : undefined,\n password: password.value,\n type: tabAuth.value,\n inviteCode: route.query.invite\n }\n )\n\n // Success - save token and redirect\n if (result.data?.accessToken) {\n const Cookies = (await import('js-cookie')).default\n Cookies.set('user', JSON.stringify(result.data), { path: '/', expires: 7 })\n await auth.actions.initialize()\n\n if (route.query.returnUrl) {\n router.push({ path: route.query.returnUrl, query: { afterAuth: 'true' } })\n } else {\n router.push({ name: 'User Profile', params: { _id: result.data._id }, query: { afterAuth: 'true' } })\n }\n }\n } catch (error) {\n setError(error)\n throw error\n }\n}\n</script>\n\n<style lang=\"scss\">\n.slide-fade-enter-active,\n.slide-fade-leave-active {\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.slide-fade-enter-from,\n.slide-fade-leave-to {\n position: absolute;\n transform: translateX(20px);\n opacity: 0;\n left: 0;\n top: 0;\n}\n</style>\n"],"names":["inputsValidation.validateInputs","inputsValidation.validatePhone","inputsValidation.validateEmail","inputsValidation.validatePassword"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0GA,UAAM,QAAQ,SAAQ;AACtB,UAAM,OAAO,MAAM,QAAQ,EAAE,OAAO,CAAA,EAAE;AACtC,UAAM,OAAO,MAAM;AAEnB,UAAM,QAAQ,SAAQ;AACtB,UAAM,SAAS,UAAS;AACxB,UAAM,EAAE,EAAC,IAAK,QAAQ,EAAE,UAAU,SAAQ,CAAE;AAE5C,UAAM,QAAQ,IAAI,EAAE;AACpB,UAAM,QAAQ,IAAI,EAAE;AACpB,UAAM,WAAW,IAAI,EAAE;AACvB,UAAM,iBAAiB,IAAI,EAAE;AAE7B,UAAM,kBAAkB,IAAI,IAAI;AAChC,UAAM,kBAAkB,IAAI,IAAI;AAChC,UAAM,qBAAqB,IAAI,IAAI;AAEnC,UAAM,gBAAgB,SAAS,MAAM;AACnC,YAAM,OAAO;AAAA,QACX,EAAE,MAAM,EAAE,mBAAmB,GAAG,OAAO,QAAO;AAAA,QAC9C,EAAE,MAAM,EAAE,mBAAmB,GAAG,OAAO,QAAO;AAAA,MAClD;AACE,YAAM,iBAAiB,KAAK,OAAO,SAAS,MAAM,sBAAsB,CAAA;AACxE,aAAO,KAAK,OAAO,SAAO,CAAC,eAAe,SAAS,IAAI,KAAK,CAAC;AAAA,IAC/D,CAAC;AAED,UAAM,UAAU,IAAI,cAAc,MAAM,SAAS,cAAc,MAAM,CAAC,EAAE,QAAQ,EAAE;AAElF,mBAAe,WAAW;AAExB,UAAI,QAAQ,UAAU,SAAS;AAC7B,cAAMA;AAAAA,UACJ;AAAA,UACAC;AAAAA,UACA,MAAM;AAAA,UACN;AAAA,QACN;AAAA,MACE;AACA,UAAI,QAAQ,UAAU,SAAS;AAC7B,cAAMD;AAAAA,UACJ;AAAA,UACAE;AAAAA,UACA,MAAM;AAAA,UACN;AAAA,QACN;AAAA,MACE;AAGA,YAAMF;AAAAA,QACJ;AAAA,QACAG;AAAAA,QACA,SAAS;AAAA,QACT;AAAA,MACJ;AAEE,UAAI,SAAS,UAAU,eAAe,OAAO;AAC3C,iBAAS,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,yBAAwB,IAAI,CAAE;AACxE,cAAM,IAAI,MAAM,wBAAwB;AAAA,MAC1C;AAGA,UAAI;AACF,cAAM,SAAS,MAAM;AAAA,UACnB,CAAC,SAAS,OAAO,KAAK,oBAAoB,IAAI;AAAA,UAC9C;AAAA,YACE,OAAO,QAAQ,UAAU,UAAU,MAAM,QAAQ;AAAA,YACjD,OAAO,QAAQ,UAAU,UAAU,MAAM,QAAQ;AAAA,YACjD,UAAU,SAAS;AAAA,YACnB,MAAM,QAAQ;AAAA,YACd,YAAY,MAAM,MAAM;AAAA,UAChC;AAAA,QACA;AAGI,YAAI,OAAO,MAAM,aAAa;AAC5B,gBAAM,WAAW,MAAM,OAAO,kGAAW,GAAG;AAC5C,kBAAQ,IAAI,QAAQ,KAAK,UAAU,OAAO,IAAI,GAAG,EAAE,MAAM,KAAK,SAAS,EAAC,CAAE;AAC1E,gBAAM,KAAK,QAAQ,WAAU;AAE7B,cAAI,MAAM,MAAM,WAAW;AACzB,mBAAO,KAAK,EAAE,MAAM,MAAM,MAAM,WAAW,OAAO,EAAE,WAAW,SAAQ,CAAE;AAAA,UAC3E,OAAO;AACL,mBAAO,KAAK,EAAE,MAAM,gBAAgB,QAAQ,EAAE,KAAK,OAAO,KAAK,IAAG,GAAI,OAAO,EAAE,WAAW,OAAM,EAAE,CAAE;AAAA,UACtG;AAAA,QACF;AAAA,MACF,SAAS,OAAO;AACd,iBAAS,KAAK;AACd,cAAM;AAAA,MACR;AAAA,IACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"SignUp.vue.js","sources":["../../../../../../../../src/modules/auth/views/components/pages/SignUp.vue"],"sourcesContent":["<template>\n <section class=\"t-left pd-medium\">\n <h3 class=\"mn-b-small\">{{ t('auth.signUp.title') }}</h3>\n\n <!-- Tab selector -->\n <div\n v-if=\"availableTabs.length > 1\"\n class=\"mn-b-small p-small uppercase fw-semi bg-light radius-small o-hidden\"\n >\n <Tab\n v-model:selected=\"tabAuth\"\n :tabs=\"availableTabs\"\n classTab=\"pd-small pd-r-medium pd-l-medium w-100 pd-small radius-small\"\n />\n </div>\n\n <!-- Form -->\n <div class=\"pos-relative\">\n <!-- Phone -->\n <transition name=\"slide-fade\">\n <div v-show=\"tabAuth === 'phone'\" class=\"mn-b-semi radius-small\">\n <p class=\"mn-b-small t-transp\">{{ t('auth.signUp.smsNotice') }}</p>\n <FieldPhone\n @change=\"(event) => phone = event\"\n :dropdownOptions=\"{\n showDialCodeInSelection: true,\n showFlags: true,\n showDialCodeInList: true\n }\"\n :validation=\"phoneValidation\"\n mode=\"national\"\n :inputOptions=\"{ placeholder: t('auth.signUp.phonePlaceholder') }\"\n class=\"bg-light h-4r pd-small radius-small mn-b-thin\"\n />\n </div>\n </transition>\n <!-- Email -->\n <transition name=\"slide-fade\">\n <div v-show=\"tabAuth === 'email'\" class=\"mn-b-semi radius-small o-hidden\">\n <p class=\"mn-b-small t-transp\">{{ t('auth.signUp.emailNotice') }}</p>\n <Field\n v-model:field=\"email\"\n :placeholder=\"t('auth.signUp.emailPlaceholder')\"\n :validation=\"emailValidation\"\n class=\"bg-light h-4r pd-medium radius-small\"\n />\n </div>\n </transition>\n </div>\n\n <!-- Password fields -->\n <div class=\"mn-b-semi\">\n <Field\n v-model:field=\"password\"\n type=\"password\"\n :placeholder=\"t('auth.enterPassword.passwordPlaceholder')\"\n :validation=\"passwordValidation\"\n class=\"bg-light pd-small radius-small mn-b-thin\"\n />\n <Field\n v-model:field=\"passwordRepeat\"\n type=\"password\"\n :placeholder=\"t('auth.enterPassword.repeatPasswordPlaceholder')\"\n class=\"bg-light pd-small radius-small\"\n />\n </div>\n\n <!-- Agreement -->\n <div class=\"p-regular fw-semi mn-b-semi\" v-html=\"t('auth.signUp.agreement')\"></div>\n\n <!-- Button -->\n <Button :submit=\"onSubmit\" class=\"w-100 bg-main mn-b-big\">\n {{ t('auth.enterPassword.registerBtn') }}\n </Button>\n\n <!-- Links -->\n <div class=\"w-100\">\n <router-link\n :to=\"{ name: 'Sign In', query: { returnUrl: route.query.returnUrl } }\"\n class=\"underline mn-b-medium d-block t-blue\"\n >\n {{ t('auth.signUp.haveAccount') }}\n </router-link>\n </div>\n </section>\n</template>\n\n<script setup>\nimport Tab from '@martyrs/src/components/Tab/Tab.vue'\nimport Field from '@martyrs/src/components/Field/Field.vue'\nimport FieldPhone from '@martyrs/src/components/FieldPhone/FieldPhone.vue'\nimport Button from '@martyrs/src/components/Button/Button.vue'\n\nimport { computed, ref } from 'vue'\nimport { useRoute, useRouter } from 'vue-router'\nimport { useI18n } from 'vue-i18n'\n\nimport { useStore } from '@martyrs/src/modules/core/views/store/core.store.js'\nimport { setError } from '@martyrs/src/modules/core/views/store/core.store.js'\nimport { withOtp } from '@martyrs/src/modules/auth/views/plugins/otp.plugin.js'\nimport $axios from '@martyrs/src/modules/core/views/utils/axios-instance.js'\nimport * as inputsValidation from '@martyrs/src/modules/auth/views/validations/inputs.validation'\n\nconst store = useStore()\nconst core = store.core || { state: {} }\nconst auth = store.auth\n\nconst route = useRoute()\nconst router = useRouter()\nconst { t } = useI18n({ useScope: 'global' })\n\nconst email = ref('')\nconst phone = ref('')\nconst password = ref('')\nconst passwordRepeat = ref('')\n\nconst phoneValidation = ref(null)\nconst emailValidation = ref(null)\nconst passwordValidation = ref(null)\n\nconst availableTabs = computed(() => {\n const tabs = [\n { name: t('auth.signUp.phone'), value: 'phone' },\n { name: t('auth.signUp.email'), value: 'email' }\n ]\n const excludeMethods = core.state?.options?.auth?.authMethodsExclude || []\n return tabs.filter(tab => !excludeMethods.includes(tab.value))\n})\n\nconst tabAuth = ref(availableTabs.value.length ? availableTabs.value[0].value : '')\n\nasync function onSubmit() {\n // Validate identifier\n if (tabAuth.value === 'phone') {\n await inputsValidation.validateInputs(\n phoneValidation,\n inputsValidation.validatePhone,\n phone.value,\n 'Некорректный телефон'\n )\n }\n if (tabAuth.value === 'email') {\n await inputsValidation.validateInputs(\n emailValidation,\n inputsValidation.validateEmail,\n email.value,\n 'Некорректный email'\n )\n }\n\n // Validate password\n await inputsValidation.validateInputs(\n passwordValidation,\n inputsValidation.validatePassword,\n password.value,\n 'Некорректный пароль'\n )\n\n if (password.value !== passwordRepeat.value) {\n setError({ response: { data: { errorCode: 'PASSWORDS_DO_NOT_MATCH' } } })\n throw new Error('PASSWORDS_DO_NOT_MATCH')\n }\n\n // Signup with OTP verification\n try {\n const result = await withOtp(\n (data) => $axios.post('/api/auth/signup', data),\n {\n email: tabAuth.value === 'email' ? email.value : undefined,\n phone: tabAuth.value === 'phone' ? phone.value : undefined,\n password: password.value,\n type: tabAuth.value,\n inviteCode: route.query.invite\n }\n )\n\n // Success - save token and redirect\n if (result.data?.accessToken) {\n const Cookies = (await import('js-cookie')).default\n Cookies.set('user', JSON.stringify(result.data), { path: '/', expires: 7 })\n await auth.actions.initialize()\n\n if (route.query.returnUrl) {\n router.push({ path: route.query.returnUrl, query: { afterAuth: 'true' } })\n } else {\n router.push({ name: 'User Profile', params: { _id: result.data._id }, query: { afterAuth: 'true' } })\n }\n }\n } catch (error) {\n setError(error)\n throw error\n }\n}\n</script>\n\n<style lang=\"scss\">\n.slide-fade-enter-active,\n.slide-fade-leave-active {\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.slide-fade-enter-from,\n.slide-fade-leave-to {\n position: absolute;\n transform: translateX(20px);\n opacity: 0;\n left: 0;\n top: 0;\n}\n</style>\n"],"names":["inputsValidation.validateInputs","inputsValidation.validatePhone","inputsValidation.validateEmail","inputsValidation.validatePassword"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuGA,UAAM,QAAQ,SAAQ;AACtB,UAAM,OAAO,MAAM,QAAQ,EAAE,OAAO,CAAA,EAAE;AACtC,UAAM,OAAO,MAAM;AAEnB,UAAM,QAAQ,SAAQ;AACtB,UAAM,SAAS,UAAS;AACxB,UAAM,EAAE,EAAC,IAAK,QAAQ,EAAE,UAAU,SAAQ,CAAE;AAE5C,UAAM,QAAQ,IAAI,EAAE;AACpB,UAAM,QAAQ,IAAI,EAAE;AACpB,UAAM,WAAW,IAAI,EAAE;AACvB,UAAM,iBAAiB,IAAI,EAAE;AAE7B,UAAM,kBAAkB,IAAI,IAAI;AAChC,UAAM,kBAAkB,IAAI,IAAI;AAChC,UAAM,qBAAqB,IAAI,IAAI;AAEnC,UAAM,gBAAgB,SAAS,MAAM;AACnC,YAAM,OAAO;AAAA,QACX,EAAE,MAAM,EAAE,mBAAmB,GAAG,OAAO,QAAO;AAAA,QAC9C,EAAE,MAAM,EAAE,mBAAmB,GAAG,OAAO,QAAO;AAAA,MAClD;AACE,YAAM,iBAAiB,KAAK,OAAO,SAAS,MAAM,sBAAsB,CAAA;AACxE,aAAO,KAAK,OAAO,SAAO,CAAC,eAAe,SAAS,IAAI,KAAK,CAAC;AAAA,IAC/D,CAAC;AAED,UAAM,UAAU,IAAI,cAAc,MAAM,SAAS,cAAc,MAAM,CAAC,EAAE,QAAQ,EAAE;AAElF,mBAAe,WAAW;AAExB,UAAI,QAAQ,UAAU,SAAS;AAC7B,cAAMA;AAAAA,UACJ;AAAA,UACAC;AAAAA,UACA,MAAM;AAAA,UACN;AAAA,QACN;AAAA,MACE;AACA,UAAI,QAAQ,UAAU,SAAS;AAC7B,cAAMD;AAAAA,UACJ;AAAA,UACAE;AAAAA,UACA,MAAM;AAAA,UACN;AAAA,QACN;AAAA,MACE;AAGA,YAAMF;AAAAA,QACJ;AAAA,QACAG;AAAAA,QACA,SAAS;AAAA,QACT;AAAA,MACJ;AAEE,UAAI,SAAS,UAAU,eAAe,OAAO;AAC3C,iBAAS,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,yBAAwB,IAAI,CAAE;AACxE,cAAM,IAAI,MAAM,wBAAwB;AAAA,MAC1C;AAGA,UAAI;AACF,cAAM,SAAS,MAAM;AAAA,UACnB,CAAC,SAAS,OAAO,KAAK,oBAAoB,IAAI;AAAA,UAC9C;AAAA,YACE,OAAO,QAAQ,UAAU,UAAU,MAAM,QAAQ;AAAA,YACjD,OAAO,QAAQ,UAAU,UAAU,MAAM,QAAQ;AAAA,YACjD,UAAU,SAAS;AAAA,YACnB,MAAM,QAAQ;AAAA,YACd,YAAY,MAAM,MAAM;AAAA,UAChC;AAAA,QACA;AAGI,YAAI,OAAO,MAAM,aAAa;AAC5B,gBAAM,WAAW,MAAM,OAAO,kGAAW,GAAG;AAC5C,kBAAQ,IAAI,QAAQ,KAAK,UAAU,OAAO,IAAI,GAAG,EAAE,MAAM,KAAK,SAAS,EAAC,CAAE;AAC1E,gBAAM,KAAK,QAAQ,WAAU;AAE7B,cAAI,MAAM,MAAM,WAAW;AACzB,mBAAO,KAAK,EAAE,MAAM,MAAM,MAAM,WAAW,OAAO,EAAE,WAAW,SAAQ,CAAE;AAAA,UAC3E,OAAO;AACL,mBAAO,KAAK,EAAE,MAAM,gBAAgB,QAAQ,EAAE,KAAK,OAAO,KAAK,IAAG,GAAI,OAAO,EAAE,WAAW,OAAM,EAAE,CAAE;AAAA,UACtG;AAAA,QACF;AAAA,MACF,SAAS,OAAO;AACd,iBAAS,KAAK;AACd,cAAM;AAAA,MACR;AAAA,IACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -29,8 +29,16 @@ const actions = {
29
29
  if (userCookie) {
30
30
  const { _id, email, phone, avatar, roles, accessToken } = userCookie;
31
31
  setAuthToken(accessToken);
32
- const response = await $axios.get("/api/organizations/check-accesses");
33
- const userAccesses = response.data;
32
+ await $axios.get("/api/auth/check-token");
33
+ let userAccesses = [];
34
+ try {
35
+ const response = await $axios.get("/api/organizations/check-accesses");
36
+ userAccesses = response.data;
37
+ } catch (error) {
38
+ if (error.response?.status !== 404) {
39
+ throw error;
40
+ }
41
+ }
34
42
  state.accesses = userAccesses;
35
43
  Object.assign(state.user, { _id, email, phone, avatar });
36
44
  Object.assign(state.access, { token: accessToken, roles, status: !!accessToken });
@@ -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\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":";;;;;;AAYK,MAAC,QAAQ,SAAS;AAAA,EACrB,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,OAAO;AAAA,IACP,OAAO;AAAA,IACP,UAAU;AAAA,IACV,gBAAgB;AAAA,EACpB;AAAA,EACE,QAAQ;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,IACP,QAAQ;AAAA,EACZ;AAAA,EACE,UAAU,CAAA;AACZ,CAAC;AAGD,MAAM,UAAU,WAAU;AAErB,MAAC,UAAU;AAAA,EACd,MAAM,WAAW,QAAQ;AACvB,QAAI;AACF,YAAM,aAAa,SAAS,SAAS,MAAM,UAAU,MAAM;AAE3D,UAAI,YAAY;AACd,cAAM,EAAE,KAAK,OAAO,OAAO,QAAQ,OAAO,YAAW,IAAK;AAE1D,qBAAa,WAAW;AAGxB,cAAM,WAAW,MAAM,OAAO,IAAI,mCAAmC;AACrE,cAAM,eAAe,SAAS;AAG9B,cAAM,WAAW;AACjB,eAAO,OAAO,MAAM,MAAM,EAAE,KAAK,OAAO,OAAO,QAAQ;AACvD,eAAO,OAAO,MAAM,QAAQ,EAAE,OAAO,aAAa,OAAO,QAAQ,CAAC,CAAC,YAAW,CAAE;AAGhF,gBAAQ,IAAI,EAAE,GAAG,YAAY,UAAU,aAAY,CAAE;AAGrD,YAAI,OAAO,aAAa;AACtB,kBAAQ,IAAI,yDAAyD,GAAG;AACxE,gBAAM,UAAU,kBAAkB,GAAG;AAAA,QACvC;AAAA,MACF,OAAO;AACL,gBAAQ,IAAI,YAAY;AACxB,qBAAa,IAAI;AACjB,gBAAQ,MAAK;AACb,aAAK,WAAU;AAAA,MACjB;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,MAAM,4BAA4B,KAAK;AAE/C,YAAM,aAAa,MAAM;AACzB,mBAAa,IAAI;AACjB,cAAQ,MAAK;AACb,WAAK,WAAU;AACf,eAAS,KAAK;AACd,YAAM;AAAA,IACR;AAAA,EACF;AAAA;AAAA,EAGA,aAAa;AACX,UAAM,WAAW,CAAA;AACjB,UAAM,OAAO;AAAA,MACX,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,OAAO;AAAA,MACP,OAAO;AAAA,MACP,UAAU;AAAA,MACV,gBAAgB;AAAA,IACtB;AACI,UAAM,SAAS;AAAA,MACb,OAAO;AAAA,MACP,OAAO;AAAA,MACP,QAAQ;AAAA,IACd;AACI,YAAQ,MAAK;AAAA,EACf;AAAA,EAEA,MAAM,MAAM,MAAM,MAAM;AACtB,QAAI;AACF,YAAM,WAAW,MAAM,OAAO,KAAK,oBAAoB;AAAA,QACrD,GAAG;AAAA,QACH;AAAA,MACR,CAAO;AAED,gBAAU,QAAQ,SAAS,IAAI;AAE/B,aAAO,OAAO,MAAM,MAAM;AAAA,QACxB,GAAG,SAAS;AAAA,MACpB,CAAO;AAED,aAAO,OAAO,MAAM,QAAQ;AAAA,QAC1B,OAAO,SAAS,KAAK;AAAA,QACrB,QAAQ;AAAA,QACR,OAAO,SAAS,KAAK;AAAA,MAC7B,CAAO;AAED,cAAQ,IAAI,SAAS,IAAI;AAEzB,YAAM,KAAK,WAAU;AAErB,aAAO,SAAS;AAAA,IAClB,SAAS,OAAO;AAEd,YAAM,aAAa,MAAM;AAEzB,aAAO,OAAO,MAAM,QAAQ;AAAA,QAC1B,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,OAAO;AAAA,MACf,CAAO;AAED,cAAQ,MAAK;AAEb,cAAQ,IAAI,KAAK;AACjB,eAAS,KAAK;AACd,aAAO,QAAQ,OAAO,KAAK;AAAA,IAC7B;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,MAAM,MAAM,QAAQ;AAC/B,UAAM,EAAE,UAAU,eAAc,IAAK,MAAM;AAE3C,YAAQ,IAAI,QAAQ;AACpB,YAAQ,IAAI,cAAc;AAE1B,QAAI,aAAa,gBAAgB;AAC/B,YAAM,QAAQ;AAAA,QACZ,UAAU;AAAA,UACR,MAAM,EAAE,WAAW,yBAAwB;AAAA,QACrD;AAAA,MACA;AACM,eAAS,KAAK;AACd,YAAM,IAAI,MAAM,MAAM,SAAS,MAAM;AAAA,IACvC;AAEA,QAAI;AACF,YAAM,WAAW,MAAM,OAAO,KAAK,oBAAoB;AAAA,QACrD,GAAG;AAAA,QACH;AAAA,QACA,YAAY;AAAA,MACpB,CAAO;AAED,cAAQ,IAAI,QAAQ;AAEpB,UAAI,SAAS,KAAK,aAAa;AAC7B,kBAAU,QAAQ,SAAS,IAAI;AAAA,MACjC;AAEA,aAAO,OAAO,MAAM,MAAM;AAAA,QACxB,GAAG,SAAS;AAAA,MACpB,CAAO;AAED,aAAO,OAAO,MAAM,QAAQ;AAAA,QAC1B,OAAO,SAAS,KAAK;AAAA,QACrB,QAAQ;AAAA,QACR,OAAO,SAAS,KAAK;AAAA,MAC7B,CAAO;AAED,cAAQ,IAAI,SAAS,IAAI;AAEzB,YAAM,KAAK,WAAU;AAErB,aAAO,SAAS;AAAA,IAClB,SAAS,OAAO;AAEd,YAAM,aAAa,MAAM;AACzB,eAAS,KAAK;AACd,cAAQ,IAAI,gBAAgB;AAC5B,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAM,SAAS;AACb,UAAM,aAAa,MAAM;AACzB,iBAAa,IAAI;AACjB,YAAQ,MAAK;AACb,SAAK,WAAU;AAGf,YAAQ,IAAI,0CAA0C;AACtD,cAAU,WAAU;AAAA,EACtB;AACF;AAGA,MAAM,iBAAiB;AAAA,EACrB,aAAa,EAAE,MAAM,KAAK,QAAQ,QAAQ,IAAI,YAAY,QAAQ,OAAO,SAAS,GAAG,UAAU,MAAK;AAAA,EACpG,YAAY;AAAA,IACV,SAAS;AAAA,IACT,MAAM;AAAA,IACN,QAAQ,QAAQ,IAAI;AAAA,IACpB,UAAU;AAAA,IACV,QAAQ;AAAA,EACZ;AACA;AAEA,eAAe,UAAU,MAAM;AAC7B,MAAI,QAAQ,IAAI,YAAY;AAC1B,UAAM,EAAE,MAAK,IAAK,MAAM,YAAY,IAAI,EAAE,KAAK,MAAM;AACrD,WAAO,QAAQ,KAAK,MAAM,KAAK,IAAI;AAAA,EACrC,OAAO;AACL,UAAM,SAASA,IAAQ,IAAI,IAAI;AAC/B,WAAO,SAAS,KAAK,MAAM,MAAM,IAAI;AAAA,EACvC;AACF;AAEA,eAAe,UAAU,MAAM,MAAM,OAAO,QAAQ,IAAI,UAAU;AAChE,MAAI,QAAQ,IAAI,YAAY;AAE1B,UAAM,YAAY,IAAI;AAAA,MACpB,KAAK;AAAA,MACL,OAAO,KAAK,UAAU,IAAI;AAAA,IAChC,CAAK;AAAA,EACH,OAAO;AAEL,UAAM,UAAU,eAAe,IAAI;AACnC,YAAQ,IAAI,iCAAiC,EAAE,MAAM,MAAM,SAAS,QAAQ,QAAQ,IAAI,WAAU,CAAE;AACpGA,QAAQ,IAAI,MAAM,KAAK,UAAU,IAAI,GAAG,OAAO;AAAA,EACjD;AACF;AAEA,eAAe,aAAa,MAAM,OAAO,QAAQ,IAAI,UAAU;AAC7D,MAAI,QAAQ,IAAI,YAAY;AAE1B,UAAM,YAAY,OAAO,EAAE,KAAK,KAAI,CAAE;AAAA,EACxC,OAAO;AAEL,UAAM,UAAU,eAAe,IAAI;AACnC,UAAM,mBAAmB,OAAO,aAAa,cAAc,SAAS,SAAS;AAC7E,YAAQ,IAAI,2CAA2C,EAAE,MAAM,MAAM,SAAS,QAAQ,QAAQ,IAAI,YAAY,YAAY,iBAAgB,CAAE;AAC5IA,QAAQ,OAAO,MAAM,OAAO;AAC5B,UAAM,kBAAkB,OAAO,aAAa,cAAc,SAAS,SAAS;AAC5E,YAAQ,IAAI,0CAA0C,EAAE,YAAY,gBAAe,CAAE;AAAA,EACvF;AACF;AAOA,MAAM,OAAO,CAAC,UAAU,aAAa;AAErC,CAAC;"}
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 await $axios.get('/api/auth/check-token');\n\n // Загрузка accesses (опционально, если модуль organizations подключен)\n let userAccesses = [];\n try {\n const response = await $axios.get('/api/organizations/check-accesses');\n userAccesses = response.data;\n } catch (error) {\n if (error.response?.status !== 404) {\n throw error;\n }\n }\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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"}