@ozdao/martyrs 0.2.584 → 0.2.585

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 (85) hide show
  1. package/dist/builder.js +2 -0
  2. package/dist/{main-fmp55tJF.js → main-xL-jtBkT.js} +2 -1
  3. package/dist/martyrs/dist/{main-fmp55tJF.js → main-xL-jtBkT.js} +3 -2
  4. package/dist/martyrs/dist/{main-fmp55tJF.js.map → main-xL-jtBkT.js.map} +1 -1
  5. package/dist/martyrs/dist/{web-BDuQSQKS.js → web-BA6h6Z8P.js} +2 -2
  6. package/dist/martyrs/dist/{web-BDuQSQKS.js.map → web-BA6h6Z8P.js.map} +1 -1
  7. package/dist/martyrs/src/components/EditImages/{EditImages.vue2.js → EditImages.vue.js} +2 -2
  8. package/dist/martyrs/src/components/EditImages/EditImages.vue.js.map +1 -0
  9. package/dist/martyrs/src/components/Tab/{Tab.vue.js → Tab.vue2.js} +2 -2
  10. package/dist/martyrs/src/components/Tab/Tab.vue2.js.map +1 -0
  11. package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js +1 -1
  12. package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js +1 -1
  13. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +59 -40
  14. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js.map +1 -1
  15. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileBlogposts.vue.js +1 -1
  16. package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js +1 -1
  17. package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js +1 -1
  18. package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js +1 -1
  19. package/dist/martyrs/src/modules/backoffice/backoffice.client.js +3 -15
  20. package/dist/martyrs/src/modules/backoffice/backoffice.client.js.map +1 -1
  21. package/dist/martyrs/src/modules/backoffice/configs/navigation.backoffice.config.js +99 -0
  22. package/dist/martyrs/src/modules/backoffice/configs/navigation.backoffice.config.js.map +1 -0
  23. package/dist/martyrs/src/modules/backoffice/{backoffice.router.js → router/backoffice.router.js} +9 -7
  24. package/dist/martyrs/src/modules/backoffice/router/backoffice.router.js.map +1 -0
  25. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js +6 -0
  26. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js.map +1 -1
  27. package/dist/martyrs/src/modules/core/core.client.js.map +1 -1
  28. package/dist/martyrs/src/modules/core/views/classes/core.app.js +5 -1
  29. package/dist/martyrs/src/modules/core/views/classes/core.app.js.map +1 -1
  30. package/dist/martyrs/src/modules/core/views/components/layouts/Client.vue.js +20 -26
  31. package/dist/martyrs/src/modules/core/views/components/layouts/Client.vue.js.map +1 -1
  32. package/dist/martyrs/src/modules/core/views/components/pages/404.vue.js +76 -7
  33. package/dist/martyrs/src/modules/core/views/components/pages/404.vue.js.map +1 -1
  34. package/dist/martyrs/src/modules/core/views/components/sections/SectionPageTitle.vue.js +1 -1
  35. package/dist/martyrs/src/modules/core/views/store/core.store.js +1 -0
  36. package/dist/martyrs/src/modules/core/views/store/core.store.js.map +1 -1
  37. package/dist/martyrs/src/modules/core/views/utils/vue-app-renderer.js +2 -1
  38. package/dist/martyrs/src/modules/core/views/utils/vue-app-renderer.js.map +1 -1
  39. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +1 -1
  40. package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +1 -0
  41. package/dist/martyrs/src/modules/events/components/pages/Event.vue.js.map +1 -1
  42. package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.js +1 -1
  43. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +1 -1
  44. package/dist/martyrs/src/modules/music/components/player/FullscreenPlayer.vue.js +1 -1
  45. package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +1 -1
  46. package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.js +1 -1
  47. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +2 -1
  48. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js.map +1 -1
  49. package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.js +1 -1
  50. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +1 -1
  51. package/dist/martyrs/src/modules/pages/pages.router.js +7 -5
  52. package/dist/martyrs/src/modules/pages/pages.router.js.map +1 -1
  53. package/dist/martyrs/src/modules/products/components/pages/Product.vue.js +1 -1
  54. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +2 -2
  55. package/dist/martyrs/src/modules/products/components/pages/Products.vue.js +1 -1
  56. package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js +1 -1
  57. package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js +1 -1
  58. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.js +1 -1
  59. package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.js +1 -1
  60. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +1 -1
  61. package/dist/martyrs.es.js +1 -1
  62. package/dist/style.css +5 -0
  63. package/dist/{web-BDuQSQKS.js → web-BA6h6Z8P.js} +1 -1
  64. package/package.json +1 -1
  65. package/src/builder/modes/ssr.rspack.dev.js +2 -0
  66. package/src/modules/auth/views/components/pages/Profile.vue +33 -5
  67. package/src/modules/backoffice/backoffice.client.js +1 -25
  68. package/src/modules/backoffice/configs/navigation.backoffice.config.js +99 -0
  69. package/src/modules/backoffice/router/backoffice.router.js +8 -7
  70. package/src/modules/community/components/pages/BlogPost.vue +9 -1
  71. package/src/modules/core/core.client.js +1 -0
  72. package/src/modules/core/views/classes/core.app.js +8 -3
  73. package/src/modules/core/views/components/layouts/Client.vue +41 -42
  74. package/src/modules/core/views/components/pages/404.vue +55 -3
  75. package/src/modules/core/views/store/core.store.js +1 -0
  76. package/src/modules/core/views/utils/vue-app-renderer.js +9 -1
  77. package/src/modules/pages/pages.router.js +4 -2
  78. package/src/modules/pages/views/router/pages.backoffice.router.js +4 -3
  79. package/dist/martyrs/src/components/EditImages/EditImages.vue2.js.map +0 -1
  80. package/dist/martyrs/src/components/Tab/Tab.vue.js.map +0 -1
  81. package/dist/martyrs/src/modules/backoffice/backoffice.router.js.map +0 -1
  82. package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.js +0 -150
  83. package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.js.map +0 -1
  84. package/src/modules/backoffice/backoffice.router.js +0 -69
  85. package/src/modules/backoffice/components/partials/Sidebar.vue +0 -165
@@ -1,4 +1,4 @@
1
- import { W as Rn } from "./main-fmp55tJF.js";
1
+ import { W as Rn } from "./main-xL-jtBkT.js";
2
2
  class f extends Rn {
3
3
  constructor() {
4
4
  super(...arguments), this.group = "CapacitorStorage";
@@ -52,4 +52,4 @@ class f extends Rn {
52
52
  export {
53
53
  f as PreferencesWeb
54
54
  };
55
- //# sourceMappingURL=web-BDuQSQKS.js.map
55
+ //# sourceMappingURL=web-BA6h6Z8P.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"web-BDuQSQKS.js","sources":["../../web-BDuQSQKS.js"],"sourcesContent":["import { W as p } from \"./main-fmp55tJF.js\";\nclass f extends p {\n constructor() {\n super(...arguments), this.group = \"CapacitorStorage\";\n }\n async configure({ group: e }) {\n typeof e == \"string\" && (this.group = e);\n }\n async get(e) {\n return { value: this.impl.getItem(this.applyPrefix(e.key)) };\n }\n async set(e) {\n this.impl.setItem(this.applyPrefix(e.key), e.value);\n }\n async remove(e) {\n this.impl.removeItem(this.applyPrefix(e.key));\n }\n async keys() {\n return { keys: this.rawKeys().map((t) => t.substring(this.prefix.length)) };\n }\n async clear() {\n for (const e of this.rawKeys())\n this.impl.removeItem(e);\n }\n async migrate() {\n var e;\n const t = [], s = [], n = \"_cap_\", o = Object.keys(this.impl).filter((i) => i.indexOf(n) === 0);\n for (const i of o) {\n const r = i.substring(n.length), a = (e = this.impl.getItem(i)) !== null && e !== void 0 ? e : \"\", { value: l } = await this.get({ key: r });\n typeof l == \"string\" ? s.push(r) : (await this.set({ key: r, value: a }), t.push(r));\n }\n return { migrated: t, existing: s };\n }\n async removeOld() {\n const e = \"_cap_\", t = Object.keys(this.impl).filter((s) => s.indexOf(e) === 0);\n for (const s of t)\n this.impl.removeItem(s);\n }\n get impl() {\n return window.localStorage;\n }\n get prefix() {\n return this.group === \"NativeStorage\" ? \"\" : `${this.group}.`;\n }\n rawKeys() {\n return Object.keys(this.impl).filter((e) => e.indexOf(this.prefix) === 0);\n }\n applyPrefix(e) {\n return this.prefix + e;\n }\n}\nexport {\n f as PreferencesWeb\n};\n"],"names":["p"],"mappings":";AACA,MAAM,UAAUA,GAAE;AAAA,EAChB,cAAc;AACZ,UAAM,GAAG,SAAS,GAAG,KAAK,QAAQ;AAAA,EACpC;AAAA,EACA,MAAM,UAAU,EAAE,OAAO,KAAK;AAC5B,WAAO,KAAK,aAAa,KAAK,QAAQ;AAAA,EACxC;AAAA,EACA,MAAM,IAAI,GAAG;AACX,WAAO,EAAE,OAAO,KAAK,KAAK,QAAQ,KAAK,YAAY,EAAE,GAAG,CAAC,EAAC;AAAA,EAC5D;AAAA,EACA,MAAM,IAAI,GAAG;AACX,SAAK,KAAK,QAAQ,KAAK,YAAY,EAAE,GAAG,GAAG,EAAE,KAAK;AAAA,EACpD;AAAA,EACA,MAAM,OAAO,GAAG;AACd,SAAK,KAAK,WAAW,KAAK,YAAY,EAAE,GAAG,CAAC;AAAA,EAC9C;AAAA,EACA,MAAM,OAAO;AACX,WAAO,EAAE,MAAM,KAAK,QAAO,EAAG,IAAI,CAAC,MAAM,EAAE,UAAU,KAAK,OAAO,MAAM,CAAC,EAAC;AAAA,EAC3E;AAAA,EACA,MAAM,QAAQ;AACZ,eAAW,KAAK,KAAK,QAAO;AAC1B,WAAK,KAAK,WAAW,CAAC;AAAA,EAC1B;AAAA,EACA,MAAM,UAAU;AACd,QAAI;AACJ,UAAM,IAAI,CAAA,GAAI,IAAI,CAAA,GAAI,IAAI,SAAS,IAAI,OAAO,KAAK,KAAK,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;AAC9F,eAAW,KAAK,GAAG;AACjB,YAAM,IAAI,EAAE,UAAU,EAAE,MAAM,GAAG,KAAK,IAAI,KAAK,KAAK,QAAQ,CAAC,OAAO,QAAQ,MAAM,SAAS,IAAI,IAAI,EAAE,OAAO,MAAM,MAAM,KAAK,IAAI,EAAE,KAAK,EAAC,CAAE;AAC3I,aAAO,KAAK,WAAW,EAAE,KAAK,CAAC,KAAK,MAAM,KAAK,IAAI,EAAE,KAAK,GAAG,OAAO,EAAC,CAAE,GAAG,EAAE,KAAK,CAAC;AAAA,IACpF;AACA,WAAO,EAAE,UAAU,GAAG,UAAU,EAAC;AAAA,EACnC;AAAA,EACA,MAAM,YAAY;AAChB,UAAM,IAAI,SAAS,IAAI,OAAO,KAAK,KAAK,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;AAC9E,eAAW,KAAK;AACd,WAAK,KAAK,WAAW,CAAC;AAAA,EAC1B;AAAA,EACA,IAAI,OAAO;AACT,WAAO,OAAO;AAAA,EAChB;AAAA,EACA,IAAI,SAAS;AACX,WAAO,KAAK,UAAU,kBAAkB,KAAK,GAAG,KAAK,KAAK;AAAA,EAC5D;AAAA,EACA,UAAU;AACR,WAAO,OAAO,KAAK,KAAK,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,KAAK,MAAM,MAAM,CAAC;AAAA,EAC1E;AAAA,EACA,YAAY,GAAG;AACb,WAAO,KAAK,SAAS;AAAA,EACvB;AACF;"}
1
+ {"version":3,"file":"web-BA6h6Z8P.js","sources":["../../web-BA6h6Z8P.js"],"sourcesContent":["import { W as p } from \"./main-xL-jtBkT.js\";\nclass f extends p {\n constructor() {\n super(...arguments), this.group = \"CapacitorStorage\";\n }\n async configure({ group: e }) {\n typeof e == \"string\" && (this.group = e);\n }\n async get(e) {\n return { value: this.impl.getItem(this.applyPrefix(e.key)) };\n }\n async set(e) {\n this.impl.setItem(this.applyPrefix(e.key), e.value);\n }\n async remove(e) {\n this.impl.removeItem(this.applyPrefix(e.key));\n }\n async keys() {\n return { keys: this.rawKeys().map((t) => t.substring(this.prefix.length)) };\n }\n async clear() {\n for (const e of this.rawKeys())\n this.impl.removeItem(e);\n }\n async migrate() {\n var e;\n const t = [], s = [], n = \"_cap_\", o = Object.keys(this.impl).filter((i) => i.indexOf(n) === 0);\n for (const i of o) {\n const r = i.substring(n.length), a = (e = this.impl.getItem(i)) !== null && e !== void 0 ? e : \"\", { value: l } = await this.get({ key: r });\n typeof l == \"string\" ? s.push(r) : (await this.set({ key: r, value: a }), t.push(r));\n }\n return { migrated: t, existing: s };\n }\n async removeOld() {\n const e = \"_cap_\", t = Object.keys(this.impl).filter((s) => s.indexOf(e) === 0);\n for (const s of t)\n this.impl.removeItem(s);\n }\n get impl() {\n return window.localStorage;\n }\n get prefix() {\n return this.group === \"NativeStorage\" ? \"\" : `${this.group}.`;\n }\n rawKeys() {\n return Object.keys(this.impl).filter((e) => e.indexOf(this.prefix) === 0);\n }\n applyPrefix(e) {\n return this.prefix + e;\n }\n}\nexport {\n f as PreferencesWeb\n};\n"],"names":["p"],"mappings":";AACA,MAAM,UAAUA,GAAE;AAAA,EAChB,cAAc;AACZ,UAAM,GAAG,SAAS,GAAG,KAAK,QAAQ;AAAA,EACpC;AAAA,EACA,MAAM,UAAU,EAAE,OAAO,KAAK;AAC5B,WAAO,KAAK,aAAa,KAAK,QAAQ;AAAA,EACxC;AAAA,EACA,MAAM,IAAI,GAAG;AACX,WAAO,EAAE,OAAO,KAAK,KAAK,QAAQ,KAAK,YAAY,EAAE,GAAG,CAAC,EAAC;AAAA,EAC5D;AAAA,EACA,MAAM,IAAI,GAAG;AACX,SAAK,KAAK,QAAQ,KAAK,YAAY,EAAE,GAAG,GAAG,EAAE,KAAK;AAAA,EACpD;AAAA,EACA,MAAM,OAAO,GAAG;AACd,SAAK,KAAK,WAAW,KAAK,YAAY,EAAE,GAAG,CAAC;AAAA,EAC9C;AAAA,EACA,MAAM,OAAO;AACX,WAAO,EAAE,MAAM,KAAK,QAAO,EAAG,IAAI,CAAC,MAAM,EAAE,UAAU,KAAK,OAAO,MAAM,CAAC,EAAC;AAAA,EAC3E;AAAA,EACA,MAAM,QAAQ;AACZ,eAAW,KAAK,KAAK,QAAO;AAC1B,WAAK,KAAK,WAAW,CAAC;AAAA,EAC1B;AAAA,EACA,MAAM,UAAU;AACd,QAAI;AACJ,UAAM,IAAI,CAAA,GAAI,IAAI,CAAA,GAAI,IAAI,SAAS,IAAI,OAAO,KAAK,KAAK,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;AAC9F,eAAW,KAAK,GAAG;AACjB,YAAM,IAAI,EAAE,UAAU,EAAE,MAAM,GAAG,KAAK,IAAI,KAAK,KAAK,QAAQ,CAAC,OAAO,QAAQ,MAAM,SAAS,IAAI,IAAI,EAAE,OAAO,MAAM,MAAM,KAAK,IAAI,EAAE,KAAK,EAAC,CAAE;AAC3I,aAAO,KAAK,WAAW,EAAE,KAAK,CAAC,KAAK,MAAM,KAAK,IAAI,EAAE,KAAK,GAAG,OAAO,EAAC,CAAE,GAAG,EAAE,KAAK,CAAC;AAAA,IACpF;AACA,WAAO,EAAE,UAAU,GAAG,UAAU,EAAC;AAAA,EACnC;AAAA,EACA,MAAM,YAAY;AAChB,UAAM,IAAI,SAAS,IAAI,OAAO,KAAK,KAAK,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;AAC9E,eAAW,KAAK;AACd,WAAK,KAAK,WAAW,CAAC;AAAA,EAC1B;AAAA,EACA,IAAI,OAAO;AACT,WAAO,OAAO;AAAA,EAChB;AAAA,EACA,IAAI,SAAS;AACX,WAAO,KAAK,UAAU,kBAAkB,KAAK,GAAG,KAAK,KAAK;AAAA,EAC5D;AAAA,EACA,UAAU;AACR,WAAO,OAAO,KAAK,KAAK,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,KAAK,MAAM,MAAM,CAAC;AAAA,EAC1E;AAAA,EACA,YAAY,GAAG;AACb,WAAO,KAAK,SAAS;AAAA,EACvB;AACF;"}
@@ -2,7 +2,7 @@ import { ref, watchEffect, createElementBlock, openBlock, createBlock, createCom
2
2
  import { VueDraggableNext } from "../../../../node_modules/.pnpm/vue-draggable-next@2.2.1_sortablejs@1.15.6_vue@3.5.13_typescript@5.8.3_/node_modules/vue-draggable-next/dist/vue-draggable-next.esm-bundler.js";
3
3
  import _sfc_main$2 from "../UploadImageMultiple/UploadImageMultiple.vue.js";
4
4
  import _sfc_main$1 from "../../modules/icons/navigation/IconCross.vue.js";
5
- /* empty css */
5
+ /* empty css */
6
6
  const _hoisted_1 = { class: "flex-nowrap flex gap-small" };
7
7
  const _hoisted_2 = { class: "pos-relative" };
8
8
  const _hoisted_3 = ["src"];
@@ -92,4 +92,4 @@ const _sfc_main = {
92
92
  export {
93
93
  _sfc_main as default
94
94
  };
95
- //# sourceMappingURL=EditImages.vue2.js.map
95
+ //# sourceMappingURL=EditImages.vue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EditImages.vue.js","sources":["../../../../../src/components/EditImages/EditImages.vue"],"sourcesContent":["<template>\n\t<div class=\"flex-nowrap flex gap-small\">\n <VueDraggableNext v-if=\"localImages.length > 0\" class=\"gap-small flex dragArea list-group w-full\" v-model=\"localImages\" @change=\"emitChanges\">\n\t\t\t<div v-for=\"(image, index) in localImages\" class=\"pos-relative\">\n\t\t\t\t<img loading=\"lazy\" class=\"i-extra object-fit-contain bg-black-transp-5 pd-nano radius-small o-hidden\" :src=\"(FILE_SERVER_URL || '') + image\" />\n\t\t\t\t\n <IconCross \n @click=\"deleteImage(index)\" \n class=\"cursor-pointer pos-absolute t-center flex-center flex radius-extra i-medium bg-red pos-t-10-negative pos-r-10-negative pd-micro\"\n />\n\t\t\t</div>\n\t\t</VueDraggableNext>\n <div\n v-if=\"localImages.length > 0\" \n class=\"i-extra uppercase flex-center flex radius-small o-hidden br-main br-2px pd-small\"\n >\n <UploadImageMultiple \n @update:images=\"onImagesUpdate\"\n text=\"Add\"\n :options=\"{\n showText: false\n }\"\n :uploadPath=\"'photos'\"\n class=\"radius-big\"\n />\n </div>\n\n\n\t\t<UploadImageMultiple \t\n v-if=\"localImages.length < 1\" \n @update:images=\"onImagesUpdate\"\n :uploadPath=\"props.uploadPath\"\n :text=\"props.text\"\n :options=\"props.options\"\n class=\"w-100 pd-medium\"\n />\n\t</div>\t\n</template>\n\n<script setup>\nimport { ref, defineProps, watchEffect } from 'vue';\nimport { VueDraggableNext } from 'vue-draggable-next'\nimport UploadImageMultiple from \"@martyrs/src/components/UploadImageMultiple/UploadImageMultiple.vue\";\nimport IconCross from '@martyrs/src/modules/icons/navigation/IconCross.vue';\n\nconst props = defineProps({\n images: Array,\n text: Object,\n options: Object,\n uploadPath: {\n type: Object,\n default: 'unsorted'\n }\n});\n\nconst emit = defineEmits(['update:images'])\n\nconst localImages = ref([...props.images])\n\nwatchEffect(() => {\n localImages.value = [...props.images]; // Обновление localImages при изменении props.images\n});\n\nconst emitChanges = () => {\n emit('update:images', localImages.value)\n}\n\nconst onImagesUpdate = (newImages) => {\n localImages.value = [...localImages.value, ...newImages]\n emitChanges()\n}\n\nconst deleteImage = (index) => {\n localImages.value.splice(index, 1)\n emitChanges()\n}\n</script>\n\n<style lang=\"scss\">\n// Your styles here\n</style>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AA6CA,UAAM,QAAQ;AAUd,UAAM,OAAO;AAEb,UAAM,cAAc,IAAI,CAAC,GAAG,MAAM,MAAM,CAAC;AAEzC,gBAAY,MAAM;AAChB,kBAAY,QAAQ,CAAC,GAAG,MAAM,MAAM;AAAA,IACtC,CAAC;AAED,UAAM,cAAc,MAAM;AACxB,WAAK,iBAAiB,YAAY,KAAK;AAAA,IACzC;AAEA,UAAM,iBAAiB,CAAC,cAAc;AACpC,kBAAY,QAAQ,CAAC,GAAG,YAAY,OAAO,GAAG,SAAS;AACvD,kBAAW;AAAA,IACb;AAEA,UAAM,cAAc,CAAC,UAAU;AAC7B,kBAAY,MAAM,OAAO,OAAO,CAAC;AACjC,kBAAW;AAAA,IACb;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,6 +1,6 @@
1
1
  import { ref, watch, createElementBlock, openBlock, Fragment, renderList, normalizeStyle, normalizeClass, unref, toDisplayString } from "vue";
2
2
  import { useGlobalMixins } from "../../modules/core/views/mixins/mixins.js";
3
- /* empty css */
3
+ /* empty css */
4
4
  const _hoisted_1 = { class: "flex-nowrap flex-v-center flex pos-relative" };
5
5
  const _hoisted_2 = ["onClick"];
6
6
  const _sfc_main = {
@@ -71,4 +71,4 @@ const _sfc_main = {
71
71
  export {
72
72
  _sfc_main as default
73
73
  };
74
- //# sourceMappingURL=Tab.vue.js.map
74
+ //# sourceMappingURL=Tab.vue2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tab.vue2.js","sources":["../../../../../src/components/Tab/Tab.vue"],"sourcesContent":["<template>\n <div class=\"flex-nowrap flex-v-center flex pos-relative\">\n <button \n v-for=\"(tab, index) in tabs\" \n :key=\"index\" \n @click=\"handleTabClick(index, tab)\" \n class=\"z-index-1 t-center cursor-pointer\"\n :style=\"isSelected(index, tab) ? 'background: rgb(var(--main)) !important' : ''\"\n :class=\"[\n isSelected(index, tab) ? 'bg-main' : '',\n replaceClasses('pd-small pd-r-medium pd-l-medium w-max pd-small radius-small', classTab)\n ]\"\n >\n {{tab.name || tab.label}}\n </button>\n </div>\n</template>\n\n<script setup>\nimport { ref, computed, watch } from 'vue'\nimport { useGlobalMixins } from '@martyrs/src/modules/core/views/mixins/mixins.js';\n\nconst { replaceClasses } = useGlobalMixins();\nconst emit = defineEmits(['update:selected', 'tab-click']);\n\nconst props = defineProps({\n tabs: Array,\n classTab: String,\n selected: [String, Number],\n modelValue: [String, Number],\n callback: Function\n})\n\nconst selectedTab = ref(0)\n\n// Handle both v-model and selected prop for backward compatibility\nconst updateSelectedIndex = () => {\n if (props.modelValue !== undefined) {\n const selectedIndex = props.tabs.findIndex(tab => tab.value === props.modelValue)\n if (selectedIndex !== -1) {\n selectedTab.value = selectedIndex\n }\n } else if (props.selected !== undefined) {\n const selectedIndex = props.tabs.findIndex(tab => tab.value === props.selected)\n if (selectedIndex !== -1) {\n selectedTab.value = selectedIndex\n }\n }\n}\n\n// Initial setup\nupdateSelectedIndex()\n\n// Watch for changes in selected or modelValue props\nwatch(() => props.selected, updateSelectedIndex)\nwatch(() => props.modelValue, updateSelectedIndex)\n\n// Check if tab is selected\nconst isSelected = (index, tab) => {\n if (props.modelValue !== undefined) {\n return tab.value === props.modelValue\n } else if (props.selected !== undefined) {\n return tab.value === props.selected\n }\n return index === selectedTab.value\n}\n\n// Handle tab click\nfunction handleTabClick(index, tab) {\n selectedTab.value = index\n \n // Emit both events for flexibility\n emit('update:selected', tab.value)\n emit('tab-click', { index, tab })\n \n // For v-model support\n if (props.modelValue !== undefined) {\n emit('update:modelValue', tab.value)\n }\n \n // Call callback if provided\n if (props.callback) props.callback(tab)\n}\n</script>\n\n<style lang=\"scss\">\n.tab-selector {\n position: absolute;\n width: 50%;\n height: 100%;\n left: 0;\n top: 0;\n z-index: 0;\n transition: left 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n}\n</style>"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAsBA,UAAM,EAAE,eAAc,IAAK,gBAAe;AAC1C,UAAM,OAAO;AAEb,UAAM,QAAQ;AAQd,UAAM,cAAc,IAAI,CAAC;AAGzB,UAAM,sBAAsB,MAAM;AAChC,UAAI,MAAM,eAAe,QAAW;AAClC,cAAM,gBAAgB,MAAM,KAAK,UAAU,SAAO,IAAI,UAAU,MAAM,UAAU;AAChF,YAAI,kBAAkB,IAAI;AACxB,sBAAY,QAAQ;AAAA,QACtB;AAAA,MACF,WAAW,MAAM,aAAa,QAAW;AACvC,cAAM,gBAAgB,MAAM,KAAK,UAAU,SAAO,IAAI,UAAU,MAAM,QAAQ;AAC9E,YAAI,kBAAkB,IAAI;AACxB,sBAAY,QAAQ;AAAA,QACtB;AAAA,MACF;AAAA,IACF;AAGA,wBAAmB;AAGnB,UAAM,MAAM,MAAM,UAAU,mBAAmB;AAC/C,UAAM,MAAM,MAAM,YAAY,mBAAmB;AAGjD,UAAM,aAAa,CAAC,OAAO,QAAQ;AACjC,UAAI,MAAM,eAAe,QAAW;AAClC,eAAO,IAAI,UAAU,MAAM;AAAA,MAC7B,WAAW,MAAM,aAAa,QAAW;AACvC,eAAO,IAAI,UAAU,MAAM;AAAA,MAC7B;AACA,aAAO,UAAU,YAAY;AAAA,IAC/B;AAGA,aAAS,eAAe,OAAO,KAAK;AAClC,kBAAY,QAAQ;AAGpB,WAAK,mBAAmB,IAAI,KAAK;AACjC,WAAK,aAAa,EAAE,OAAO,IAAG,CAAE;AAGhC,UAAI,MAAM,eAAe,QAAW;AAClC,aAAK,qBAAqB,IAAI,KAAK;AAAA,MACrC;AAGA,UAAI,MAAM,SAAU,OAAM,SAAS,GAAG;AAAA,IACxC;;;;;;;;;;;;;;;;;;"}
@@ -1,5 +1,5 @@
1
1
  import { ref, createElementBlock, openBlock, createElementVNode, createCommentVNode, createVNode, toDisplayString, unref, createTextVNode, withCtx } from "vue";
2
- /* empty css */
2
+ /* empty css */
3
3
  import Field from "../../../../../components/Field/Field.vue.js";
4
4
  import _sfc_main$1 from "../../../../../components/Button/Button.vue2.js";
5
5
  import { useRoute, useRouter } from "vue-router";
@@ -1,5 +1,5 @@
1
1
  import { ref, onMounted, createElementBlock, openBlock, createElementVNode, createVNode, withCtx } from "vue";
2
- /* empty css */
2
+ /* empty css */
3
3
  import Field from "../../../../../components/Field/Field.vue.js";
4
4
  import _sfc_main$1 from "../../../../../components/Button/Button.vue2.js";
5
5
  import { useRoute, useRouter } from "vue-router";
@@ -1,4 +1,4 @@
1
- import { ref, inject, onMounted, resolveComponent, createElementBlock, createCommentVNode, openBlock, createElementVNode, createVNode, createBlock, unref, withCtx, toDisplayString, Fragment, renderList, normalizeClass, resolveDynamicComponent } from "vue";
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
3
  /* empty css */
4
4
  /* empty css */
@@ -16,15 +16,13 @@ import _sfc_main$4 from "../../../../icons/navigation/IconEdit.vue.js";
16
16
  import PlaceholderUserpic from "../../../../icons/placeholders/PlaceholderUserpic.vue.js";
17
17
  import { useRoute, useRouter } from "vue-router";
18
18
  import * as auth from "../../store/auth.js";
19
- import { state, actions as actions$1 } from "../../store/auth.js";
20
- import { actions, state as state$1 } from "../../store/users.js";
19
+ import { state as state$1, actions as actions$1 } from "../../store/auth.js";
20
+ import { state, actions } from "../../store/users.js";
21
21
  import membershipsStore from "../../../../organizations/store/memberships.store.js";
22
22
  import { useGlobalMixins } from "../../../../core/views/mixins/mixins.js";
23
+ import { useStore } from "../../../../core/views/store/core.store.js";
23
24
  /* empty css */
24
- const _hoisted_1 = {
25
- key: 0,
26
- class: "for-transition bg-white w-100"
27
- };
25
+ const _hoisted_1 = { class: "for-transition bg-white w-100" };
28
26
  const _hoisted_2 = {
29
27
  key: 0,
30
28
  class: "flex-center flex pd-medium radius-big bg-light uppercase fw-semi w-100 h-100"
@@ -55,7 +53,7 @@ const _sfc_main = {
55
53
  const route = useRoute();
56
54
  const router = useRouter();
57
55
  const show = ref(false);
58
- inject("store");
56
+ const store = useStore();
59
57
  const { isModuleInstalled } = useGlobalMixins();
60
58
  const modules = {
61
59
  events: {
@@ -83,12 +81,33 @@ const _sfc_main = {
83
81
  visible: (auth2) => auth2.state.user && (auth2.state.user._id === route.params._id || auth2.state.access && auth2.state.access.roles && (auth2.state.access.roles.includes("ROLE_MODERATOR") || auth2.state.access.roles.includes("ROLE_ADMIN")))
84
82
  }
85
83
  };
84
+ async function fetchUser() {
85
+ try {
86
+ const result = await actions.read({ _id: route.params._id, user: state$1.user?._id });
87
+ if (!result || result.length === 0 || !state.current?._id) {
88
+ store.core.state.notFound = true;
89
+ return false;
90
+ }
91
+ return true;
92
+ } catch (error) {
93
+ console.error("Error fetching user:", error);
94
+ store.core.state.notFound = true;
95
+ return false;
96
+ }
97
+ }
98
+ onServerPrefetch(async () => {
99
+ console.log("[SSR-404] Profile onServerPrefetch, route._id:", route.params._id);
100
+ await fetchUser();
101
+ console.log("[SSR-404] Profile fetchUser completed");
102
+ });
86
103
  onMounted(async () => {
87
- await actions.read({ _id: route.params._id, user: state.user._id });
104
+ if (!state.current?._id || state.current._id !== route.params._id) {
105
+ await fetchUser();
106
+ }
88
107
  show.value = true;
89
108
  });
90
109
  const handleMembershipUpdate = ({ membership, status, target }, statusName, statusNumber) => {
91
- membershipsStore.handleMembershipUpdate(state$1.current, membership, status, target, statusName, statusNumber);
110
+ membershipsStore.handleMembershipUpdate(state.current, membership, status, target, statusName, statusNumber);
92
111
  };
93
112
  function logout() {
94
113
  actions$1.logout();
@@ -96,10 +115,10 @@ const _sfc_main = {
96
115
  }
97
116
  return (_ctx, _cache) => {
98
117
  const _component_RouterView = resolveComponent("RouterView");
99
- return show.value ? (openBlock(), createElementBlock("div", _hoisted_1, [
100
- state$1.current?.status === "removed" ? (openBlock(), createElementBlock("div", _hoisted_2, " Sorry, user has been removed. ")) : (openBlock(), createElementBlock("div", _hoisted_3, [
118
+ return openBlock(), createElementBlock("div", _hoisted_1, [
119
+ state.current?.status === "removed" ? (openBlock(), createElementBlock("div", _hoisted_2, " Sorry, user has been removed. ")) : (openBlock(), createElementBlock("div", _hoisted_3, [
101
120
  createElementVNode("section", _hoisted_4, [
102
- unref(route).params._id && unref(route).params._id !== state.user._id ? (openBlock(), createBlock(_sfc_main$1, {
121
+ unref(route).params._id && unref(route).params._id !== state$1.user._id ? (openBlock(), createBlock(_sfc_main$1, {
103
122
  key: 0,
104
123
  label: "...",
105
124
  align: "right",
@@ -108,9 +127,9 @@ const _sfc_main = {
108
127
  default: withCtx(() => [
109
128
  createElementVNode("section", _hoisted_5, [
110
129
  createVNode(_sfc_main$2, {
111
- user: state.user._id,
130
+ user: state$1.user._id,
112
131
  type: "user",
113
- target: state$1.current._id,
132
+ target: state.current._id,
114
133
  text: "Report",
115
134
  class: "w-100"
116
135
  }, {
@@ -119,13 +138,13 @@ const _sfc_main = {
119
138
  ])),
120
139
  _: 1
121
140
  }, 8, ["user", "target"]),
122
- state.user._id ? (openBlock(), createBlock(_sfc_main$3, {
141
+ state$1.user._id ? (openBlock(), createBlock(_sfc_main$3, {
123
142
  key: 0,
124
- user: state.user._id,
143
+ user: state$1.user._id,
125
144
  type: "user",
126
145
  role: "blocked",
127
- target: state$1.current._id,
128
- status: state$1.current.isBlocked,
146
+ target: state.current._id,
147
+ status: state.current.isBlocked,
129
148
  text: { create: "Block", remove: "Unblock" },
130
149
  onUpdateMembership: _cache[0] || (_cache[0] = (event) => handleMembershipUpdate(event, "isBlocked")),
131
150
  class: "t-white mn-t-thin bg-red"
@@ -134,53 +153,53 @@ const _sfc_main = {
134
153
  ]),
135
154
  _: 1
136
155
  })) : createCommentVNode("", true),
137
- unref(route).params._id === state.user._id ? (openBlock(), createBlock(_sfc_main$4, {
156
+ unref(route).params._id === state$1.user._id ? (openBlock(), createBlock(_sfc_main$4, {
138
157
  key: 1,
139
158
  onClick: _cache[1] || (_cache[1] = ($event) => _ctx.$router.push({
140
159
  name: "Profile Edit Profile",
141
160
  params: {
142
- _id: state.user._id
161
+ _id: state$1.user._id
143
162
  }
144
163
  })),
145
164
  class: "cursor-pointer pos-absolute pos-t-regular pos-r-regular i-medium t-transp"
146
165
  })) : createCommentVNode("", true),
147
- state$1.current.profile.photo && state$1.current.profile.photo.length > 0 ? (openBlock(), createElementBlock("img", {
166
+ state.current.profile.photo && state.current.profile.photo.length > 0 ? (openBlock(), createElementBlock("img", {
148
167
  key: 2,
149
168
  loading: "lazy",
150
- src: (_ctx.FILE_SERVER_URL || "") + state$1.current.profile.photo,
169
+ src: (_ctx.FILE_SERVER_URL || "") + state.current.profile.photo,
151
170
  class: "radius-extra bg-white mn-b-small object-fit-cover i-extra"
152
171
  }, null, 8, _hoisted_6)) : (openBlock(), createBlock(PlaceholderUserpic, {
153
172
  key: 3,
154
173
  class: "radius-medium mn-b-small i-extra"
155
174
  })),
156
- createElementVNode("h3", _hoisted_7, toDisplayString(state$1.current.profile.name ? state$1.current.profile.name : "Anonymous"), 1),
157
- state$1.current.username ? (openBlock(), createElementBlock("p", _hoisted_8, " @" + toDisplayString(state$1.current.username ? state$1.current.username : "Not specified"), 1)) : createCommentVNode("", true),
158
- createElementVNode("p", _hoisted_9, toDisplayString(state$1.current.profile.description ? state$1.current.profile.description : "Bio not specified"), 1),
175
+ createElementVNode("h3", _hoisted_7, toDisplayString(state.current.profile.name ? state.current.profile.name : "Anonymous"), 1),
176
+ state.current.username ? (openBlock(), createElementBlock("p", _hoisted_8, " @" + toDisplayString(state.current.username ? state.current.username : "Not specified"), 1)) : createCommentVNode("", true),
177
+ createElementVNode("p", _hoisted_9, toDisplayString(state.current.profile.description ? state.current.profile.description : "Bio not specified"), 1),
159
178
  createElementVNode("div", _hoisted_10, [
160
- (openBlock(true), createElementBlock(Fragment, null, renderList(state$1.current.roles, (role, index) => {
179
+ (openBlock(true), createElementBlock(Fragment, null, renderList(state.current.roles, (role, index) => {
161
180
  return openBlock(), createElementBlock("div", {
162
- class: normalizeClass(["pd-thin radius-small fw-semi bg-white", { "mn-r-thin": index !== state$1.current.roles.length - 1 }])
181
+ class: normalizeClass(["pd-thin radius-small fw-semi bg-white", { "mn-r-thin": index !== state.current.roles.length - 1 }])
163
182
  }, toDisplayString(role.icon) + " " + toDisplayString(role.name), 3);
164
183
  }), 256))
165
184
  ]),
166
- createElementVNode("p", _hoisted_11, " 👨‍👨‍👧‍👧 " + toDisplayString(state$1.current.numberOfSubscribers) + " followers ", 1),
167
- state.user._id && unref(route).params._id && unref(route).params._id !== state.user._id ? (openBlock(), createBlock(_sfc_main$3, {
185
+ createElementVNode("p", _hoisted_11, " 👨‍👨‍👧‍👧 " + toDisplayString(state.current.numberOfSubscribers) + " followers ", 1),
186
+ state$1.user._id && unref(route).params._id && unref(route).params._id !== state$1.user._id ? (openBlock(), createBlock(_sfc_main$3, {
168
187
  key: 5,
169
- user: state.user._id,
188
+ user: state$1.user._id,
170
189
  type: "user",
171
190
  role: "subscriber",
172
- target: state$1.current._id,
173
- status: state$1.current.isSubscriber,
191
+ target: state.current._id,
192
+ status: state.current.isSubscriber,
174
193
  text: { create: "Follow", remove: "Unfollow" },
175
194
  onUpdateMembership: _cache[2] || (_cache[2] = (event) => handleMembershipUpdate(event, "isSubscriber", "numberOfSubscribers")),
176
195
  class: "w-min mn-b-medium mn-r-auto mn-l-auto"
177
196
  }, null, 8, ["user", "target", "status"])) : createCommentVNode("", true),
178
- Object.values(state$1.current.socials).some((value) => value) ? (openBlock(), createElementBlock("h4", _hoisted_12, " Find Me in Socials ")) : createCommentVNode("", true),
197
+ Object.values(state.current.socials).some((value) => value) ? (openBlock(), createElementBlock("h4", _hoisted_12, " Find Me in Socials ")) : createCommentVNode("", true),
179
198
  createVNode(_sfc_main$5, {
180
- telegram: state$1.current.socials.telegram,
181
- facebook: state$1.current.socials.facebook,
182
- instagram: state$1.current.socials.instagram,
183
- twitter: state$1.current.socials.twitter,
199
+ telegram: state.current.socials.telegram,
200
+ facebook: state.current.socials.facebook,
201
+ instagram: state.current.socials.instagram,
202
+ twitter: state.current.socials.twitter,
184
203
  class: "mn-r-auto mn-l-auto"
185
204
  }, null, 8, ["telegram", "facebook", "instagram", "twitter"])
186
205
  ]),
@@ -209,7 +228,7 @@ const _sfc_main = {
209
228
  ]),
210
229
  _: 1
211
230
  }),
212
- state.user._id === unref(route).params._id ? (openBlock(), createBlock(_sfc_main$6, {
231
+ state$1.user._id === unref(route).params._id ? (openBlock(), createBlock(_sfc_main$6, {
213
232
  key: 0,
214
233
  class: "bg-light"
215
234
  }, {
@@ -269,7 +288,7 @@ const _sfc_main = {
269
288
  _: 1
270
289
  })) : createCommentVNode("", true)
271
290
  ]))
272
- ])) : createCommentVNode("", true);
291
+ ]);
273
292
  };
274
293
  }
275
294
  };
@@ -1 +1 @@
1
- {"version":3,"file":"Profile.vue.js","sources":["../../../../../../../../src/modules/auth/views/components/pages/Profile.vue"],"sourcesContent":["<template>\n\t<div \n\t\tv-if=\"show\"\n\t\tclass=\"for-transition bg-white w-100\"\n\t>\n\t\t<div \n\t\t\tv-if=\"users.state.current?.status === 'removed'\"\n\t\t\tclass=\"flex-center flex pd-medium radius-big bg-light uppercase fw-semi w-100 h-100\"\n\t\t>\n\t\t\tSorry, user has been removed.\n\t\t</div>\n\n\t\t<div \n\t\t\tv-else\n\t\t\t_id=\"dash\" \n\t\t\tclass=\"pd-thin w-100\"\n\t\t>\n\t\t\t<!-- <Completion \n\t\t\t\tv-if=\"route.params._id === auth.state.user._id && show\" \n\t\t :user=\"auth.state.user._id\"\n\t\t :target=\"users.state.current\"\n\t\t :cta=\"false\" \n\t\t text_cta=\"Fill\"\n\t\t text=\"Profile completed at\"\n\t\t class=\"mn-b-medium mn-b-regular pd-medium radius-semi t-white bg-second\"\n\t\t\t/> -->\n\n\t\t\t<section \n\t\t\t\tclass=\"flex-center pos-relative flex flex-column t-center w-100 mn-b-regular radius-medium pd-medium bg-light\"\n\t\t\t>\n\n\t\t\t\t<Dropdown \n\t\t\t\t\tv-if=\"route.params._id && route.params._id !== auth.state.user._id\"\n\t\t\t\t\t:label=\"'...'\" \n\t\t\t\t\t:align=\"'right'\"\n\t\t\t\t\tclass=\"cursor-pointer pos-absolute pos-r-0 pos-t-0 pd-thin radius-extra \"\n\t\t\t\t>\n\t\t\t\t\t<section \n\t\t\t\t\t\tclass=\"bg-black pd-thin radius-small\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<FormReport \n\t\t\t\t\t\t\t:user=\"auth.state.user._id\"\n\t\t\t\t\t\t\t:type=\"'user'\" \n\t\t\t\t\t\t\t:target=\"users.state.current._id\" \n\t\t\t\t\t\t\t:text=\"'Report'\" \n\t\t\t\t\t\t\tclass=\"w-100\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<button \n\t\t\t\t\t\t\t\tclass=\"w-100 bg-black br-1px br-white-transp-20 t-white button-small button\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tReport\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</FormReport>\n\n\t\t\t\t\t\t<ButtonToggleMembership\n\t\t\t\t\t\t\tv-if=\"auth.state.user._id\"\n\t\t\t\t :user=\"auth.state.user._id\"\n\t\t\t\t :type=\"'user'\" \n\t\t\t \t:role=\"'blocked'\" \n\t\t\t\t :target=\"users.state.current._id\" \n\t\t\t\t :status=\"users.state.current.isBlocked\" \n\t\t\t\t :text=\"{create: 'Block', remove: 'Unblock'}\"\n\t\t\t\t @updateMembership=\"event => handleMembershipUpdate(event, 'isBlocked')\"\n\t\t\t\t class=\"t-white mn-t-thin bg-red\" \n\t\t\t \t/>\n\t\t\t\t\t</section>\n\t </Dropdown>\t\n\n\n\t\t\t\t<IconEdit\n\t\t\t\t\tv-if=\"route.params._id === auth.state.user._id\"\n\t\t\t\t\t@click=\"$router.push({\n\t\t\t\t\t\tname: 'Profile Edit Profile', \n\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\t_id: auth.state.user._id\n\t\t\t\t\t\t}\n\t\t\t\t\t})\" \n\t\t\t\t\tclass=\"cursor-pointer pos-absolute pos-t-regular pos-r-regular i-medium t-transp\"\n\t\t\t\t/>\n\n\t\t\t\t<img loading=\"lazy\" \n\t\t\t\t\tv-if=\"users.state.current.profile.photo && users.state.current.profile.photo.length > 0\" \n\t\t\t\t\t:src=\"(FILE_SERVER_URL || '') + users.state.current.profile.photo\" \n\t\t\t\t\tclass=\"radius-extra bg-white mn-b-small object-fit-cover i-extra\" \n\t\t\t\t/>\n\t\t\t\t\n\t\t\t\t<PlaceholderUserpic \n\t\t\t\t\tv-else \n\t\t\t\t\tclass=\"radius-medium mn-b-small i-extra\"\n\t\t\t\t/>\n\n\t\t\t\t<h3 \n\t\t\t\t\tclass=\"mn-b-thin\"\n\t\t\t\t>\n\t\t\t\t\t{{users.state.current.profile.name ? users.state.current.profile.name : 'Anonymous' }}\n\t\t\t\t</h3>\n\t\t\t\t\n\t\t\t\t<p \n\t\t\t\t\tv-if=\"users.state.current.username\"\n\t\t\t\t\tclass=\"mn-b-thin t-main fw-semi\"\n\t\t\t\t>\n\t\t\t\t\t@{{ users.state.current.username ? users.state.current.username : 'Not specified' }}\n\t\t\t\t</p>\n\n\t\t\t\t<p \n\t\t\t\t\tclass=\"mn-b-small p-regular\"\n\t\t\t\t>\n\t\t\t\t {{ users.state.current.profile.description ? users.state.current.profile.description : 'Bio not specified' }}\n\t\t\t\t</p>\n\t\t\t\t\n\t\t\t\t<div class=\"mn-b-medium flex-center flex-nowrap flex\">\n\t\t\t\t\t<div \n\t\t\t\t\t v-for=\"(role,index) in users.state.current.roles\" \n\t\t\t\t\t class=\"pd-thin radius-small fw-semi bg-white\" \n\t\t\t\t\t :class=\"{'mn-r-thin': index !== users.state.current.roles.length - 1}\"\n\t\t\t\t\t >\n\t\t\t\t\t\t{{role.icon}}\n\t\t\t\t\t\t{{role.name}}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\t\t\t\n\n\t\t\t\t<p \n\t\t\t\t\tclass=\"fw-semi mn-b-small\"\n\t\t\t\t>\n\t\t\t\t\t<!-- 👍 3 212 likes · -->\n\t\t\t\t\t<!-- 💬 342 comments · -->\n\t\t\t\t\t👨‍👨‍👧‍👧 {{users.state.current.numberOfSubscribers}} followers\n\t\t\t\t</p>\n\t\t\t\t\n\t \t<ButtonToggleMembership\n\t \t\tv-if=\"auth.state.user._id && route.params._id && route.params._id !== auth.state.user._id\"\n\t\t :user=\"auth.state.user._id\"\n\t\t :type=\"'user'\" \n\t \t:role=\"'subscriber'\" \n\t\t :target=\"users.state.current._id\" \n\t\t :status=\"users.state.current.isSubscriber\" \n\t\t\t\t\t:text=\"{create: 'Follow', remove: 'Unfollow'}\"\n\t\t @updateMembership=\"event => handleMembershipUpdate(event, 'isSubscriber', 'numberOfSubscribers')\"\n\t\t class=\"w-min mn-b-medium\tmn-r-auto mn-l-auto\" \n\t \t/>\n\n\t \t<h4 \n\t \tv-if=\"Object.values(users.state.current.socials).some(value => value)\" \n\t \tclass=\"mn-t-small mn-b-thin\"\n\t >\n\t \t\tFind Me in Socials\n\t \t</h4>\n\t \t<Socials \n\t \t\t:telegram=\"users.state.current.socials.telegram\"\n\t \t\t:facebook=\"users.state.current.socials.facebook\"\n\t \t\t:instagram=\"users.state.current.socials.instagram\"\n\t \t\t:twitter=\"users.state.current.socials.twitter\"\n\t \t\tclass=\"mn-r-auto mn-l-auto\"\n\t \t/>\n\n\t\t\t</section>\n\t\t\t\n\t\t\t<RouterView />\n\n\t\t\t<Menu class=\"mn-b-regular bg-light\">\n\t <template v-for=\"(module, moduleName) in modules\" :key=\"moduleName\">\n\t <MenuItem \n\t v-if=\"isModuleInstalled(moduleName) && (!module.visible || module.visible(auth))\"\n\t @click=\"router.push(module.path(route.params._id))\" \n\t class=\"profile-menu-item cursor-pointer\"\n\t >\n\t <component \n\t :is=\"module.icon\" \n\t v-if=\"module.icon\"\n\t class=\"i-medium\" \n\t :icon=\"true\"\n\t />\n\t <span>{{ module.displayName }}</span>\n\t </MenuItem>\n\t </template>\n \t\t</Menu>\n\t\t\t \n\t\t\t<Menu \n\t\t\t\tv-if=\"auth.state.user._id === route.params._id\"\n\t\t\t\tclass=\"bg-light\"\n\t\t\t>\n\t\t\t\t<MenuItem \n\t\t\t \t@click=\"router.push({\n\t\t\t \t\tname: 'Notifications', \n\t\t\t \t\tparams: {\n\t\t\t \t\t\t_id: route.params._id\n\t\t\t \t\t}\n\t\t\t \t})\" \n\t\t\t \tclass=\"cursor-pointer\">\n\t\t\t <span>\n\t\t\t \tNotifications\n\t\t\t </span>\n\t\t\t </MenuItem>\n\t\t\t <MenuItem \n\t\t\t \t@click=\"router.push({\n\t\t\t \t\tname: 'Profile Edit Profile', \n\t\t\t \t\tparams: {\n\t\t\t \t\t\t_id: route.params._id\n\t\t\t \t\t}\n\t\t\t \t})\" \n\t\t\t \tclass=\"cursor-pointer\">\n\t\t\t <span>\n\t\t\t \tSettings\n\t\t\t </span>\n\t\t\t </MenuItem>\n\n\t\t\t <MenuItem \n\t\t\t \t@click=\"router.push({\n\t\t\t \t\tname: 'Legal', \n\t\t\t \t\tparams: {\n\t\t\t \t\t\t_id: route.params._id\n\t\t\t \t\t}\n\t\t\t \t})\" \n\t\t\t \tclass=\"cursor-pointer\">\n\t\t\t <span>\n\t\t\t \tAbout\n\t\t\t </span>\n\t\t\t </MenuItem>\n\t\t\t \n\t\t\t <MenuItem \n\t\t\t \tclass=\"cursor-pointer\"\n\t\t\t\t\t@click=\"logout()\"\n\t\t\t >\n\t\t\t <span \n\t\t\t \tclass=\"t-red\"\n\t\t\t >\n\t\t\t \tLogout\n\t\t\t </span>\n\t\t\t </MenuItem>\n\t\t\t</Menu>\n\n\t\t</div>\n\t</div>\n</template>\n\n<script setup>\n// Import components\nimport Field from '@martyrs/src/components/Field/Field.vue'\nimport Button from '@martyrs/src/components/Button/Button.vue'\nimport Dropdown from \"@martyrs/src/components/Dropdown/Dropdown.vue\";\nimport Completion from '@martyrs/src/components/Completion/Completion.vue'\n// Mobile Module\nimport Menu from '@martyrs/src/components/Menu/Menu.vue'\nimport MenuItem from '@martyrs/src/components/Menu/MenuItem.vue'\n// Org Module\nimport ButtonToggleMembership from '@martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue'\n// Report Module\nimport FormReport from '@martyrs/src/modules/reports/components/sections/FormReport.vue' \n// Community Module \nimport Activity from '@martyrs/src/modules/community/components/blocks/Activity.vue'; \nimport Socials from '@martyrs/src/modules/organizations/components/blocks/Socials.vue'\n// Icons Module\nimport IconEvents from '@martyrs/src/modules/icons/entities/IconEvents.vue'\nimport IconGroups from '@martyrs/src/modules/icons/entities/IconGroups.vue'\nimport IconCommunity from '@martyrs/src/modules/icons/entities/IconCommunity.vue'\nimport IconOrders from '@martyrs/src/modules/icons/entities/IconOrders.vue'\n\nimport IconEdit from '@martyrs/src/modules/icons/navigation/IconEdit.vue'\n\nimport PlaceholderUserpic from '@martyrs/src/modules/icons/placeholders/PlaceholderUserpic.vue'\n// Import libs\nimport { computed, watch, onMounted, ref, onBeforeMount, inject } from 'vue'\nimport { useRoute, useRouter } from 'vue-router'\n\n// Import state\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js'\nimport * as users from '@martyrs/src/modules/auth/views/store/users.js'\nimport membershipsStore from '@martyrs/src/modules/organizations/store/memberships.store.js'\nimport { useGlobalMixins } from '@martyrs/src/modules/core/views/mixins/mixins.js'\n// Accessing router\nconst route = useRoute()\nconst router = useRouter()\n// Get organization _id from cookie\nconst show = ref(false)\n\nconst store = inject('store')\nconst { isModuleInstalled } = useGlobalMixins()\n\nconst modules = {\n events: {\n displayName: 'Events',\n path: (_id) => `/users/${_id}/events`,\n icon: IconEvents,\n visible: () => true\n },\n organizations: {\n displayName: 'Groups',\n path: (_id) => `/users/${_id}/organizations`,\n icon: IconGroups,\n visible: () => true\n },\n community: {\n displayName: 'Posts',\n path: (_id) => `/users/${_id}/blogposts`,\n icon: IconCommunity,\n visible: () => true\n },\n orders: {\n displayName: 'Orders',\n path: (_id) => `/users/${_id}/orders`,\n icon: IconOrders,\n visible: (auth) => auth.state.user && (\n auth.state.user._id === route.params._id ||\n (auth.state.access && auth.state.access.roles &&\n (auth.state.access.roles.includes('ROLE_MODERATOR') ||\n auth.state.access.roles.includes('ROLE_ADMIN'))\n )\n )\n }\n}\n\n\nonMounted(async () => {\n \tawait users.actions.read({ _id: route.params._id, user: auth.state.user._id });\n \tshow.value = true\n})\n\nconst handleMembershipUpdate = ({ membership, status, target }, statusName, statusNumber) => {\n membershipsStore.handleMembershipUpdate(users.state.current, membership, status, target, statusName, statusNumber)\n};\n\nfunction logout () {\n auth.actions.logout()\n\n router.push({name: 'Sign In'})\n}\n</script>\n\n<style lang=\"scss\">\n\t#header {\n\t\t// height: 3rem;\n\t}\n</style>\n"],"names":["IconEvents","IconGroups","IconCommunity","IconOrders","auth","users.actions","auth.state","users.state","auth.actions"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8QA,UAAM,QAAQ,SAAQ;AACtB,UAAM,SAAS,UAAS;AAExB,UAAM,OAAO,IAAI,KAAK;AAER,WAAO,OAAO;AAC5B,UAAM,EAAE,kBAAiB,IAAK,gBAAe;AAE7C,UAAM,UAAU;AAAA,MACd,QAAQ;AAAA,QACN,aAAa;AAAA,QACb,MAAM,CAAC,QAAQ,UAAU,GAAG;AAAA,QAC5B,MAAMA;AAAAA,QACN,SAAS,MAAM;AAAA,MACnB;AAAA,MACE,eAAe;AAAA,QACb,aAAa;AAAA,QACb,MAAM,CAAC,QAAQ,UAAU,GAAG;AAAA,QAC5B,MAAMC;AAAAA,QACN,SAAS,MAAM;AAAA,MACnB;AAAA,MACE,WAAW;AAAA,QACT,aAAa;AAAA,QACb,MAAM,CAAC,QAAQ,UAAU,GAAG;AAAA,QAC5B,MAAMC;AAAAA,QACN,SAAS,MAAM;AAAA,MACnB;AAAA,MACE,QAAQ;AAAA,QACN,aAAa;AAAA,QACb,MAAM,CAAC,QAAQ,UAAU,GAAG;AAAA,QAC5B,MAAMC;AAAAA,QACN,SAAS,CAACC,UAASA,MAAK,MAAM,SAC5BA,MAAK,MAAM,KAAK,QAAQ,MAAM,OAAO,OACpCA,MAAK,MAAM,UAAUA,MAAK,MAAM,OAAO,UACrCA,MAAK,MAAM,OAAO,MAAM,SAAS,gBAAgB,KACjDA,MAAK,MAAM,OAAO,MAAM,SAAS,YAAY;AAAA,MAGtD;AAAA,IACA;AAGA,cAAU,YAAY;AACpB,YAAMC,QAAc,KAAK,EAAE,KAAK,MAAM,OAAO,KAAK,MAAMC,MAAW,KAAK,IAAG,CAAE;AAC7E,WAAK,QAAQ;AAAA,IACf,CAAC;AAED,UAAM,yBAAyB,CAAC,EAAE,YAAY,QAAQ,OAAM,GAAI,YAAY,iBAAiB;AAC3F,uBAAiB,uBAAuBC,QAAY,SAAS,YAAY,QAAQ,QAAQ,YAAY,YAAY;AAAA,IACnH;AAEA,aAAS,SAAU;AACjBC,gBAAa,OAAM;AAEnB,aAAO,KAAK,EAAC,MAAM,UAAS,CAAC;AAAA,IAC/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"Profile.vue.js","sources":["../../../../../../../../src/modules/auth/views/components/pages/Profile.vue"],"sourcesContent":["<template>\n\t<div \n\t\tclass=\"for-transition bg-white w-100\"\n\t>\n\t\t<div \n\t\t\tv-if=\"users.state.current?.status === 'removed'\"\n\t\t\tclass=\"flex-center flex pd-medium radius-big bg-light uppercase fw-semi w-100 h-100\"\n\t\t>\n\t\t\tSorry, user has been removed.\n\t\t</div>\n\n\t\t<div \n\t\t\tv-else\n\t\t\t_id=\"dash\" \n\t\t\tclass=\"pd-thin w-100\"\n\t\t>\n\t\t\t<!-- <Completion \n\t\t\t\tv-if=\"route.params._id === auth.state.user._id && show\" \n\t\t :user=\"auth.state.user._id\"\n\t\t :target=\"users.state.current\"\n\t\t :cta=\"false\" \n\t\t text_cta=\"Fill\"\n\t\t text=\"Profile completed at\"\n\t\t class=\"mn-b-medium mn-b-regular pd-medium radius-semi t-white bg-second\"\n\t\t\t/> -->\n\n\t\t\t<section \n\t\t\t\tclass=\"flex-center pos-relative flex flex-column t-center w-100 mn-b-regular radius-medium pd-medium bg-light\"\n\t\t\t>\n\n\t\t\t\t<Dropdown \n\t\t\t\t\tv-if=\"route.params._id && route.params._id !== auth.state.user._id\"\n\t\t\t\t\t:label=\"'...'\" \n\t\t\t\t\t:align=\"'right'\"\n\t\t\t\t\tclass=\"cursor-pointer pos-absolute pos-r-0 pos-t-0 pd-thin radius-extra \"\n\t\t\t\t>\n\t\t\t\t\t<section \n\t\t\t\t\t\tclass=\"bg-black pd-thin radius-small\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<FormReport \n\t\t\t\t\t\t\t:user=\"auth.state.user._id\"\n\t\t\t\t\t\t\t:type=\"'user'\" \n\t\t\t\t\t\t\t:target=\"users.state.current._id\" \n\t\t\t\t\t\t\t:text=\"'Report'\" \n\t\t\t\t\t\t\tclass=\"w-100\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<button \n\t\t\t\t\t\t\t\tclass=\"w-100 bg-black br-1px br-white-transp-20 t-white button-small button\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tReport\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</FormReport>\n\n\t\t\t\t\t\t<ButtonToggleMembership\n\t\t\t\t\t\t\tv-if=\"auth.state.user._id\"\n\t\t\t\t :user=\"auth.state.user._id\"\n\t\t\t\t :type=\"'user'\" \n\t\t\t \t:role=\"'blocked'\" \n\t\t\t\t :target=\"users.state.current._id\" \n\t\t\t\t :status=\"users.state.current.isBlocked\" \n\t\t\t\t :text=\"{create: 'Block', remove: 'Unblock'}\"\n\t\t\t\t @updateMembership=\"event => handleMembershipUpdate(event, 'isBlocked')\"\n\t\t\t\t class=\"t-white mn-t-thin bg-red\" \n\t\t\t \t/>\n\t\t\t\t\t</section>\n\t </Dropdown>\t\n\n\n\t\t\t\t<IconEdit\n\t\t\t\t\tv-if=\"route.params._id === auth.state.user._id\"\n\t\t\t\t\t@click=\"$router.push({\n\t\t\t\t\t\tname: 'Profile Edit Profile', \n\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\t_id: auth.state.user._id\n\t\t\t\t\t\t}\n\t\t\t\t\t})\" \n\t\t\t\t\tclass=\"cursor-pointer pos-absolute pos-t-regular pos-r-regular i-medium t-transp\"\n\t\t\t\t/>\n\n\t\t\t\t<img loading=\"lazy\" \n\t\t\t\t\tv-if=\"users.state.current.profile.photo && users.state.current.profile.photo.length > 0\" \n\t\t\t\t\t:src=\"(FILE_SERVER_URL || '') + users.state.current.profile.photo\" \n\t\t\t\t\tclass=\"radius-extra bg-white mn-b-small object-fit-cover i-extra\" \n\t\t\t\t/>\n\t\t\t\t\n\t\t\t\t<PlaceholderUserpic \n\t\t\t\t\tv-else \n\t\t\t\t\tclass=\"radius-medium mn-b-small i-extra\"\n\t\t\t\t/>\n\n\t\t\t\t<h3 \n\t\t\t\t\tclass=\"mn-b-thin\"\n\t\t\t\t>\n\t\t\t\t\t{{users.state.current.profile.name ? users.state.current.profile.name : 'Anonymous' }}\n\t\t\t\t</h3>\n\t\t\t\t\n\t\t\t\t<p \n\t\t\t\t\tv-if=\"users.state.current.username\"\n\t\t\t\t\tclass=\"mn-b-thin t-main fw-semi\"\n\t\t\t\t>\n\t\t\t\t\t@{{ users.state.current.username ? users.state.current.username : 'Not specified' }}\n\t\t\t\t</p>\n\n\t\t\t\t<p \n\t\t\t\t\tclass=\"mn-b-small p-regular\"\n\t\t\t\t>\n\t\t\t\t {{ users.state.current.profile.description ? users.state.current.profile.description : 'Bio not specified' }}\n\t\t\t\t</p>\n\t\t\t\t\n\t\t\t\t<div class=\"mn-b-medium flex-center flex-nowrap flex\">\n\t\t\t\t\t<div \n\t\t\t\t\t v-for=\"(role,index) in users.state.current.roles\" \n\t\t\t\t\t class=\"pd-thin radius-small fw-semi bg-white\" \n\t\t\t\t\t :class=\"{'mn-r-thin': index !== users.state.current.roles.length - 1}\"\n\t\t\t\t\t >\n\t\t\t\t\t\t{{role.icon}}\n\t\t\t\t\t\t{{role.name}}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\t\t\t\n\n\t\t\t\t<p \n\t\t\t\t\tclass=\"fw-semi mn-b-small\"\n\t\t\t\t>\n\t\t\t\t\t<!-- 👍 3 212 likes · -->\n\t\t\t\t\t<!-- 💬 342 comments · -->\n\t\t\t\t\t👨‍👨‍👧‍👧 {{users.state.current.numberOfSubscribers}} followers\n\t\t\t\t</p>\n\t\t\t\t\n\t \t<ButtonToggleMembership\n\t \t\tv-if=\"auth.state.user._id && route.params._id && route.params._id !== auth.state.user._id\"\n\t\t :user=\"auth.state.user._id\"\n\t\t :type=\"'user'\" \n\t \t:role=\"'subscriber'\" \n\t\t :target=\"users.state.current._id\" \n\t\t :status=\"users.state.current.isSubscriber\" \n\t\t\t\t\t:text=\"{create: 'Follow', remove: 'Unfollow'}\"\n\t\t @updateMembership=\"event => handleMembershipUpdate(event, 'isSubscriber', 'numberOfSubscribers')\"\n\t\t class=\"w-min mn-b-medium\tmn-r-auto mn-l-auto\" \n\t \t/>\n\n\t \t<h4 \n\t \tv-if=\"Object.values(users.state.current.socials).some(value => value)\" \n\t \tclass=\"mn-t-small mn-b-thin\"\n\t >\n\t \t\tFind Me in Socials\n\t \t</h4>\n\t \t<Socials \n\t \t\t:telegram=\"users.state.current.socials.telegram\"\n\t \t\t:facebook=\"users.state.current.socials.facebook\"\n\t \t\t:instagram=\"users.state.current.socials.instagram\"\n\t \t\t:twitter=\"users.state.current.socials.twitter\"\n\t \t\tclass=\"mn-r-auto mn-l-auto\"\n\t \t/>\n\n\t\t\t</section>\n\t\t\t\n\t\t\t<RouterView />\n\n\t\t\t<Menu class=\"mn-b-regular bg-light\">\n\t <template v-for=\"(module, moduleName) in modules\" :key=\"moduleName\">\n\t <MenuItem \n\t v-if=\"isModuleInstalled(moduleName) && (!module.visible || module.visible(auth))\"\n\t @click=\"router.push(module.path(route.params._id))\" \n\t class=\"profile-menu-item cursor-pointer\"\n\t >\n\t <component \n\t :is=\"module.icon\" \n\t v-if=\"module.icon\"\n\t class=\"i-medium\" \n\t :icon=\"true\"\n\t />\n\t <span>{{ module.displayName }}</span>\n\t </MenuItem>\n\t </template>\n \t\t</Menu>\n\t\t\t \n\t\t\t<Menu \n\t\t\t\tv-if=\"auth.state.user._id === route.params._id\"\n\t\t\t\tclass=\"bg-light\"\n\t\t\t>\n\t\t\t\t<MenuItem \n\t\t\t \t@click=\"router.push({\n\t\t\t \t\tname: 'Notifications', \n\t\t\t \t\tparams: {\n\t\t\t \t\t\t_id: route.params._id\n\t\t\t \t\t}\n\t\t\t \t})\" \n\t\t\t \tclass=\"cursor-pointer\">\n\t\t\t <span>\n\t\t\t \tNotifications\n\t\t\t </span>\n\t\t\t </MenuItem>\n\t\t\t <MenuItem \n\t\t\t \t@click=\"router.push({\n\t\t\t \t\tname: 'Profile Edit Profile', \n\t\t\t \t\tparams: {\n\t\t\t \t\t\t_id: route.params._id\n\t\t\t \t\t}\n\t\t\t \t})\" \n\t\t\t \tclass=\"cursor-pointer\">\n\t\t\t <span>\n\t\t\t \tSettings\n\t\t\t </span>\n\t\t\t </MenuItem>\n\n\t\t\t <MenuItem \n\t\t\t \t@click=\"router.push({\n\t\t\t \t\tname: 'Legal', \n\t\t\t \t\tparams: {\n\t\t\t \t\t\t_id: route.params._id\n\t\t\t \t\t}\n\t\t\t \t})\" \n\t\t\t \tclass=\"cursor-pointer\">\n\t\t\t <span>\n\t\t\t \tAbout\n\t\t\t </span>\n\t\t\t </MenuItem>\n\t\t\t \n\t\t\t <MenuItem \n\t\t\t \tclass=\"cursor-pointer\"\n\t\t\t\t\t@click=\"logout()\"\n\t\t\t >\n\t\t\t <span \n\t\t\t \tclass=\"t-red\"\n\t\t\t >\n\t\t\t \tLogout\n\t\t\t </span>\n\t\t\t </MenuItem>\n\t\t\t</Menu>\n\n\t\t</div>\n\t</div>\n</template>\n\n<script setup>\n// Import components\nimport Field from '@martyrs/src/components/Field/Field.vue'\nimport Button from '@martyrs/src/components/Button/Button.vue'\nimport Dropdown from \"@martyrs/src/components/Dropdown/Dropdown.vue\";\nimport Completion from '@martyrs/src/components/Completion/Completion.vue'\n// Mobile Module\nimport Menu from '@martyrs/src/components/Menu/Menu.vue'\nimport MenuItem from '@martyrs/src/components/Menu/MenuItem.vue'\n// Org Module\nimport ButtonToggleMembership from '@martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue'\n// Report Module\nimport FormReport from '@martyrs/src/modules/reports/components/sections/FormReport.vue' \n// Community Module \nimport Activity from '@martyrs/src/modules/community/components/blocks/Activity.vue'; \nimport Socials from '@martyrs/src/modules/organizations/components/blocks/Socials.vue'\n// Icons Module\nimport IconEvents from '@martyrs/src/modules/icons/entities/IconEvents.vue'\nimport IconGroups from '@martyrs/src/modules/icons/entities/IconGroups.vue'\nimport IconCommunity from '@martyrs/src/modules/icons/entities/IconCommunity.vue'\nimport IconOrders from '@martyrs/src/modules/icons/entities/IconOrders.vue'\n\nimport IconEdit from '@martyrs/src/modules/icons/navigation/IconEdit.vue'\n\nimport PlaceholderUserpic from '@martyrs/src/modules/icons/placeholders/PlaceholderUserpic.vue'\n// Import libs\nimport { computed, watch, onMounted, onServerPrefetch, ref, onBeforeMount, inject } from 'vue'\nimport { useRoute, useRouter } from 'vue-router'\n\n// Import state\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js'\nimport * as users from '@martyrs/src/modules/auth/views/store/users.js'\nimport membershipsStore from '@martyrs/src/modules/organizations/store/memberships.store.js'\nimport { useGlobalMixins } from '@martyrs/src/modules/core/views/mixins/mixins.js'\nimport { useStore } from '@martyrs/src/modules/core/views/store/core.store.js'\n// Accessing router\nconst route = useRoute()\nconst router = useRouter()\n// Get organization _id from cookie\nconst show = ref(false)\n\nconst store = useStore()\nconst { isModuleInstalled } = useGlobalMixins()\n\nconst modules = {\n events: {\n displayName: 'Events',\n path: (_id) => `/users/${_id}/events`,\n icon: IconEvents,\n visible: () => true\n },\n organizations: {\n displayName: 'Groups',\n path: (_id) => `/users/${_id}/organizations`,\n icon: IconGroups,\n visible: () => true\n },\n community: {\n displayName: 'Posts',\n path: (_id) => `/users/${_id}/blogposts`,\n icon: IconCommunity,\n visible: () => true\n },\n orders: {\n displayName: 'Orders',\n path: (_id) => `/users/${_id}/orders`,\n icon: IconOrders,\n visible: (auth) => auth.state.user && (\n auth.state.user._id === route.params._id ||\n (auth.state.access && auth.state.access.roles &&\n (auth.state.access.roles.includes('ROLE_MODERATOR') ||\n auth.state.access.roles.includes('ROLE_ADMIN'))\n )\n )\n }\n}\n\n\n// Функция загрузки данных пользователя\nasync function fetchUser() {\n try {\n const result = await users.actions.read({ _id: route.params._id, user: auth.state.user?._id });\n // Если пользователь не найден - устанавливаем 404\n if (!result || result.length === 0 || !users.state.current?._id) {\n store.core.state.notFound = true;\n return false;\n }\n return true;\n } catch (error) {\n console.error('Error fetching user:', error);\n store.core.state.notFound = true;\n return false;\n }\n}\n\n// SSR: загружаем данные на сервере для SEO\nonServerPrefetch(async () => {\n console.log('[SSR-404] Profile onServerPrefetch, route._id:', route.params._id);\n await fetchUser();\n console.log('[SSR-404] Profile fetchUser completed');\n});\n\n// Client: загружаем данные если еще не загружены (после гидратации)\nonMounted(async () => {\n // Если данные уже загружены на сервере (SSR) - не загружаем повторно\n if (!users.state.current?._id || users.state.current._id !== route.params._id) {\n await fetchUser();\n }\n show.value = true;\n})\n\nconst handleMembershipUpdate = ({ membership, status, target }, statusName, statusNumber) => {\n membershipsStore.handleMembershipUpdate(users.state.current, membership, status, target, statusName, statusNumber)\n};\n\nfunction logout () {\n auth.actions.logout()\n\n router.push({name: 'Sign In'})\n}\n</script>\n\n<style lang=\"scss\">\n\t#header {\n\t\t// height: 3rem;\n\t}\n</style>\n"],"names":["IconEvents","IconGroups","IconCommunity","IconOrders","auth","users.actions","auth.state","users.state","auth.actions"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8QA,UAAM,QAAQ,SAAQ;AACtB,UAAM,SAAS,UAAS;AAExB,UAAM,OAAO,IAAI,KAAK;AAEtB,UAAM,QAAQ,SAAQ;AACtB,UAAM,EAAE,kBAAiB,IAAK,gBAAe;AAE7C,UAAM,UAAU;AAAA,MACd,QAAQ;AAAA,QACN,aAAa;AAAA,QACb,MAAM,CAAC,QAAQ,UAAU,GAAG;AAAA,QAC5B,MAAMA;AAAAA,QACN,SAAS,MAAM;AAAA,MACnB;AAAA,MACE,eAAe;AAAA,QACb,aAAa;AAAA,QACb,MAAM,CAAC,QAAQ,UAAU,GAAG;AAAA,QAC5B,MAAMC;AAAAA,QACN,SAAS,MAAM;AAAA,MACnB;AAAA,MACE,WAAW;AAAA,QACT,aAAa;AAAA,QACb,MAAM,CAAC,QAAQ,UAAU,GAAG;AAAA,QAC5B,MAAMC;AAAAA,QACN,SAAS,MAAM;AAAA,MACnB;AAAA,MACE,QAAQ;AAAA,QACN,aAAa;AAAA,QACb,MAAM,CAAC,QAAQ,UAAU,GAAG;AAAA,QAC5B,MAAMC;AAAAA,QACN,SAAS,CAACC,UAASA,MAAK,MAAM,SAC5BA,MAAK,MAAM,KAAK,QAAQ,MAAM,OAAO,OACpCA,MAAK,MAAM,UAAUA,MAAK,MAAM,OAAO,UACrCA,MAAK,MAAM,OAAO,MAAM,SAAS,gBAAgB,KACjDA,MAAK,MAAM,OAAO,MAAM,SAAS,YAAY;AAAA,MAGtD;AAAA,IACA;AAIA,mBAAe,YAAY;AACzB,UAAI;AACF,cAAM,SAAS,MAAMC,QAAc,KAAK,EAAE,KAAK,MAAM,OAAO,KAAK,MAAMC,QAAW,MAAM,IAAG,CAAE;AAE7F,YAAI,CAAC,UAAU,OAAO,WAAW,KAAK,CAACC,MAAY,SAAS,KAAK;AAC/D,gBAAM,KAAK,MAAM,WAAW;AAC5B,iBAAO;AAAA,QACT;AACA,eAAO;AAAA,MACT,SAAS,OAAO;AACd,gBAAQ,MAAM,wBAAwB,KAAK;AAC3C,cAAM,KAAK,MAAM,WAAW;AAC5B,eAAO;AAAA,MACT;AAAA,IACF;AAGA,qBAAiB,YAAY;AAC3B,cAAQ,IAAI,kDAAkD,MAAM,OAAO,GAAG;AAC9E,YAAM,UAAS;AACf,cAAQ,IAAI,uCAAuC;AAAA,IACrD,CAAC;AAGD,cAAU,YAAY;AAEpB,UAAI,CAACA,MAAY,SAAS,OAAOA,MAAY,QAAQ,QAAQ,MAAM,OAAO,KAAK;AAC7E,cAAM,UAAS;AAAA,MACjB;AACA,WAAK,QAAQ;AAAA,IACf,CAAC;AAED,UAAM,yBAAyB,CAAC,EAAE,YAAY,QAAQ,OAAM,GAAI,YAAY,iBAAiB;AAC3F,uBAAiB,uBAAuBA,MAAY,SAAS,YAAY,QAAQ,QAAQ,YAAY,YAAY;AAAA,IACnH;AAEA,aAAS,SAAU;AACjBC,gBAAa,OAAM;AAEnB,aAAO,KAAK,EAAC,MAAM,UAAS,CAAC;AAAA,IAC/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,6 +1,6 @@
1
1
  import { ref, watch, createElementBlock, openBlock, createElementVNode, createBlock, createCommentVNode, createVNode, unref, withCtx, Fragment, renderList } from "vue";
2
2
  import { useRoute, useRouter } from "vue-router";
3
- import _sfc_main$1 from "../../../../../components/Tab/Tab.vue.js";
3
+ import _sfc_main$1 from "../../../../../components/Tab/Tab.vue2.js";
4
4
  import _sfc_main$2 from "../../../../../components/Feed/Feed.vue.js";
5
5
  import _sfc_main$3 from "../../../../community/components/blocks/CardBlogpost.vue.js";
6
6
  import { state } from "../../store/auth.js";
@@ -1,5 +1,5 @@
1
1
  import { ref, computed, createElementBlock, openBlock, createElementVNode, createCommentVNode, createVNode, toDisplayString, unref, Transition, withCtx, createTextVNode } from "vue";
2
- import _sfc_main$1 from "../../../../../components/Tab/Tab.vue.js";
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
5
  import _sfc_main$3 from "../../../../../components/Button/Button.vue2.js";
@@ -1,5 +1,5 @@
1
1
  import { ref, computed, onMounted, resolveComponent, createElementBlock, openBlock, createElementVNode, createCommentVNode, createVNode, createTextVNode, toDisplayString, unref, withCtx, Transition, withDirectives, vShow } from "vue";
2
- import _sfc_main$1 from "../../../../../components/Tab/Tab.vue.js";
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
5
  import _sfc_main$3 from "../../../../../components/Button/Button.vue2.js";
@@ -1,5 +1,5 @@
1
1
  import { ref, computed, resolveComponent, createElementBlock, openBlock, createElementVNode, createCommentVNode, createVNode, toDisplayString, unref, Transition, withCtx, withDirectives, vShow, createTextVNode } from "vue";
2
- import _sfc_main$1 from "../../../../../components/Tab/Tab.vue.js";
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
5
  import _sfc_main$3 from "../../../../../components/Button/Button.vue2.js";
@@ -1,7 +1,6 @@
1
1
  import addRoutes from "../core/views/router/addRoutes.js";
2
- import { getRoutes } from "./backoffice.router.js";
3
- import _sfc_main$1 from "./components/pages/Dashboard.vue.js";
4
- import _sfc_main from "./components/partials/Sidebar.vue.js";
2
+ import { getRoutes } from "./router/backoffice.router.js";
3
+ import _sfc_main from "./components/pages/Dashboard.vue.js";
5
4
  function initializeBackoffice(app, store, router, options = {}) {
6
5
  const routes = getRoutes(options);
7
6
  routes.forEach(({ parentName, config }) => {
@@ -15,18 +14,7 @@ const ModuleBackoffice = {
15
14
  getRoutes
16
15
  },
17
16
  components: {
18
- // Layouts
19
- // Pages
20
- Dashboard: _sfc_main$1,
21
- // Admin components
22
- // AdminDashboard,
23
- // FastOrders,
24
- // UserEdit,
25
- // Users,
26
- // ProductEdit,
27
- // Backcalls,
28
- // Partials
29
- Sidebar: _sfc_main
17
+ Dashboard: _sfc_main
30
18
  }
31
19
  }
32
20
  };
@@ -1 +1 @@
1
- {"version":3,"file":"backoffice.client.js","sources":["../../../../../src/modules/backoffice/backoffice.client.js"],"sourcesContent":["// Router\nimport addRoutes from '@martyrs/src/modules/core/views/router/addRoutes.js';\nimport { getRoutes } from './backoffice.router.js';\n\n// Views\n// Layouts\n\n// Pages\nimport Dashboard from './components/pages/Dashboard.vue';\n\n// Admin components\n// import AdminDashboard from './components/admin/Dashboard.vue';\n// import FastOrders from './components/admin/FastOrders.vue';\n// import UserEdit from './components/admin/UserEdit.vue';\n// import Users from './components/admin/Users.vue';\n// import ProductEdit from './components/admin/ProductEdit.vue';\n// import Backcalls from './components/admin/Backcalls.vue';\n\n// Partials\nimport Sidebar from './components/partials/Sidebar.vue';\n\n// Пример функции инициализации для модуля бэкофиса\nfunction initializeBackoffice(app, store, router, options = {}) {\n const routes = getRoutes(options);\n routes.forEach(({ parentName, config }) => {\n addRoutes(router, { ...config, parentName });\n });\n}\n\nconst ModuleBackoffice = {\n initialize: initializeBackoffice,\n views: {\n router: {\n getRoutes,\n },\n components: {\n // Layouts\n // Pages\n Dashboard,\n // Admin components\n // AdminDashboard,\n // FastOrders,\n // UserEdit,\n // Users,\n // ProductEdit,\n // Backcalls,\n // Partials\n Sidebar,\n },\n },\n};\n\nexport default ModuleBackoffice;\n"],"names":["Dashboard","Sidebar"],"mappings":";;;;AAsBA,SAAS,qBAAqB,KAAK,OAAO,QAAQ,UAAU,CAAA,GAAI;AAC9D,QAAM,SAAS,UAAU,OAAO;AAChC,SAAO,QAAQ,CAAC,EAAE,YAAY,OAAM,MAAO;AACzC,cAAU,QAAQ,EAAE,GAAG,QAAQ,WAAU,CAAE;AAAA,EAC7C,CAAC;AACH;AAEK,MAAC,mBAAmB;AAAA,EACvB,YAAY;AAAA,EACZ,OAAO;AAAA,IACL,QAAQ;AAAA,MACN;AAAA,IACN;AAAA,IACI,YAAY;AAAA;AAAA;AAAA,MAGhB,WAAMA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,MASN,SAAMC;AAAAA,IACN;AAAA,EACA;AACA;"}
1
+ {"version":3,"file":"backoffice.client.js","sources":["../../../../../src/modules/backoffice/backoffice.client.js"],"sourcesContent":["// Router\nimport addRoutes from '@martyrs/src/modules/core/views/router/addRoutes.js';\nimport { getRoutes } from './router/backoffice.router.js';\n\n// Views\n// Pages\nimport Dashboard from './components/pages/Dashboard.vue';\n\n// Пример функции инициализации для модуля бэкофиса\nfunction initializeBackoffice(app, store, router, options = {}) {\n const routes = getRoutes(options);\n routes.forEach(({ parentName, config }) => {\n addRoutes(router, { ...config, parentName });\n });\n}\n\nconst ModuleBackoffice = {\n initialize: initializeBackoffice,\n views: {\n router: {\n getRoutes,\n },\n components: {\n Dashboard,\n },\n },\n};\n\nexport default ModuleBackoffice;\n"],"names":["Dashboard"],"mappings":";;;AASA,SAAS,qBAAqB,KAAK,OAAO,QAAQ,UAAU,CAAA,GAAI;AAC9D,QAAM,SAAS,UAAU,OAAO;AAChC,SAAO,QAAQ,CAAC,EAAE,YAAY,OAAM,MAAO;AACzC,cAAU,QAAQ,EAAE,GAAG,QAAQ,WAAU,CAAE;AAAA,EAC7C,CAAC;AACH;AAEK,MAAC,mBAAmB;AAAA,EACvB,YAAY;AAAA,EACZ,OAAO;AAAA,IACL,QAAQ;AAAA,MACN;AAAA,IACN;AAAA,IACI,YAAY;AAAA,MAChB,WAAMA;AAAAA,IACN;AAAA,EACA;AACA;"}
@@ -0,0 +1,99 @@
1
+ import _sfc_main$2 from "../../icons/entities/IconProducts.vue.js";
2
+ import _sfc_main$7 from "../../icons/entities/IconPayments.vue.js";
3
+ import _sfc_main$6 from "../../icons/entities/IconEvents.vue.js";
4
+ import _sfc_main from "../../icons/entities/IconGroups.vue.js";
5
+ import _sfc_main$1 from "../../icons/entities/IconCommunity.vue.js";
6
+ import _sfc_main$5 from "../../icons/entities/IconGallery.vue.js";
7
+ import _sfc_main$4 from "../../icons/entities/IconOrders.vue.js";
8
+ import _sfc_main$3 from "../../icons/entities/IconLeftovers.vue.js";
9
+ const navigationItems = [
10
+ {
11
+ category: "Menu",
12
+ visible: () => true,
13
+ items: [
14
+ {
15
+ title: "Organizations",
16
+ iconComponent: _sfc_main,
17
+ route: () => "/backoffice/organizations",
18
+ visible: () => true
19
+ },
20
+ {
21
+ title: "Community",
22
+ iconComponent: _sfc_main$1,
23
+ route: () => "/backoffice/community",
24
+ visible: () => true
25
+ },
26
+ {
27
+ title: "Products",
28
+ iconComponent: _sfc_main$2,
29
+ route: () => "/backoffice/products",
30
+ visible: () => true
31
+ },
32
+ {
33
+ title: "Inventory",
34
+ iconComponent: _sfc_main$3,
35
+ route: () => "/backoffice/inventory",
36
+ visible: () => true
37
+ },
38
+ {
39
+ title: "Orders",
40
+ iconComponent: _sfc_main$4,
41
+ route: () => "/backoffice/orders",
42
+ visible: () => true
43
+ },
44
+ {
45
+ title: "Gallery",
46
+ iconComponent: _sfc_main$5,
47
+ route: () => "/backoffice/gallery",
48
+ visible: () => true
49
+ },
50
+ {
51
+ title: "Applications",
52
+ iconComponent: _sfc_main$6,
53
+ route: () => "/backoffice/applications",
54
+ visible: () => true
55
+ },
56
+ {
57
+ title: "Events",
58
+ iconComponent: _sfc_main$6,
59
+ route: () => "/backoffice/events",
60
+ visible: () => true
61
+ }
62
+ ]
63
+ },
64
+ {
65
+ category: "General",
66
+ visible: () => true,
67
+ items: [
68
+ {
69
+ title: "Payments",
70
+ iconComponent: _sfc_main$7,
71
+ route: () => "/backoffice/payments",
72
+ visible: () => true
73
+ },
74
+ {
75
+ title: "Users",
76
+ iconComponent: null,
77
+ route: () => "/backoffice/users",
78
+ visible: () => true
79
+ },
80
+ {
81
+ title: "Pages",
82
+ iconComponent: null,
83
+ route: () => "/backoffice/pages",
84
+ visible: () => true
85
+ },
86
+ {
87
+ title: "Reports",
88
+ iconComponent: null,
89
+ route: () => "/backoffice/reports",
90
+ visible: () => true
91
+ }
92
+ ]
93
+ }
94
+ ];
95
+ export {
96
+ navigationItems as default,
97
+ navigationItems
98
+ };
99
+ //# sourceMappingURL=navigation.backoffice.config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation.backoffice.config.js","sources":["../../../../../../src/modules/backoffice/configs/navigation.backoffice.config.js"],"sourcesContent":["// Import icons\nimport IconProducts from '@martyrs/src/modules/icons/entities/IconProducts.vue'\nimport IconPayments from '@martyrs/src/modules/icons/entities/IconPayments.vue'\nimport IconEvents from '@martyrs/src/modules/icons/entities/IconEvents.vue'\nimport IconGroups from '@martyrs/src/modules/icons/entities/IconGroups.vue'\nimport IconCommunity from '@martyrs/src/modules/icons/entities/IconCommunity.vue'\nimport IconGallery from '@martyrs/src/modules/icons/entities/IconGallery.vue'\nimport IconOrders from '@martyrs/src/modules/icons/entities/IconOrders.vue'\nimport IconLeftovers from '@martyrs/src/modules/icons/entities/IconLeftovers.vue'\n\n// Backoffice navigation configuration\nexport const navigationItems = [\n {\n category: 'Menu',\n visible: () => true,\n items: [\n {\n title: 'Organizations',\n iconComponent: IconGroups,\n route: () => '/backoffice/organizations',\n visible: () => true\n },\n {\n title: 'Community',\n iconComponent: IconCommunity,\n route: () => '/backoffice/community',\n visible: () => true\n },\n {\n title: 'Products',\n iconComponent: IconProducts,\n route: () => '/backoffice/products',\n visible: () => true\n },\n {\n title: 'Inventory',\n iconComponent: IconLeftovers,\n route: () => '/backoffice/inventory',\n visible: () => true\n },\n {\n title: 'Orders',\n iconComponent: IconOrders,\n route: () => '/backoffice/orders',\n visible: () => true\n },\n {\n title: 'Gallery',\n iconComponent: IconGallery,\n route: () => '/backoffice/gallery',\n visible: () => true\n },\n {\n title: 'Applications',\n iconComponent: IconEvents,\n route: () => '/backoffice/applications',\n visible: () => true\n },\n {\n title: 'Events',\n iconComponent: IconEvents,\n route: () => '/backoffice/events',\n visible: () => true\n }\n ]\n },\n {\n category: 'General',\n visible: () => true,\n items: [\n {\n title: 'Payments',\n iconComponent: IconPayments,\n route: () => '/backoffice/payments',\n visible: () => true\n },\n {\n title: 'Users',\n iconComponent: null,\n route: () => '/backoffice/users',\n visible: () => true\n },\n {\n title: 'Pages',\n iconComponent: null,\n route: () => '/backoffice/pages',\n visible: () => true\n },\n {\n title: 'Reports',\n iconComponent: null,\n route: () => '/backoffice/reports',\n visible: () => true\n }\n ]\n }\n]\n\nexport default navigationItems\n"],"names":["IconGroups","IconCommunity","IconProducts","IconLeftovers","IconOrders","IconGallery","IconEvents","IconPayments"],"mappings":";;;;;;;;AAWY,MAAC,kBAAkB;AAAA,EAC7B;AAAA,IACE,UAAU;AAAA,IACV,SAAS,MAAM;AAAA,IACf,OAAO;AAAA,MACL;AAAA,QACE,OAAO;AAAA,QACP,eAAeA;AAAAA,QACf,OAAO,MAAM;AAAA,QACb,SAAS,MAAM;AAAA,MACvB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,eAAeC;AAAAA,QACf,OAAO,MAAM;AAAA,QACb,SAAS,MAAM;AAAA,MACvB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,eAAeC;AAAAA,QACf,OAAO,MAAM;AAAA,QACb,SAAS,MAAM;AAAA,MACvB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,eAAeC;AAAAA,QACf,OAAO,MAAM;AAAA,QACb,SAAS,MAAM;AAAA,MACvB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,eAAeC;AAAAA,QACf,OAAO,MAAM;AAAA,QACb,SAAS,MAAM;AAAA,MACvB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,eAAeC;AAAAA,QACf,OAAO,MAAM;AAAA,QACb,SAAS,MAAM;AAAA,MACvB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,eAAeC;AAAAA,QACf,OAAO,MAAM;AAAA,QACb,SAAS,MAAM;AAAA,MACvB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,eAAeA;AAAAA,QACf,OAAO,MAAM;AAAA,QACb,SAAS,MAAM;AAAA,MACvB;AAAA,IACA;AAAA,EACA;AAAA,EACE;AAAA,IACE,UAAU;AAAA,IACV,SAAS,MAAM;AAAA,IACf,OAAO;AAAA,MACL;AAAA,QACE,OAAO;AAAA,QACP,eAAeC;AAAAA,QACf,OAAO,MAAM;AAAA,QACb,SAAS,MAAM;AAAA,MACvB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,eAAe;AAAA,QACf,OAAO,MAAM;AAAA,QACb,SAAS,MAAM;AAAA,MACvB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,eAAe;AAAA,QACf,OAAO,MAAM;AAAA,QACb,SAAS,MAAM;AAAA,MACvB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,eAAe;AAAA,QACf,OAAO,MAAM;AAAA,QACb,SAAS,MAAM;AAAA,MACvB;AAAA,IACA;AAAA,EACA;AACA;"}