@ozdao/martyrs 0.2.582 → 0.2.583

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 (119) hide show
  1. package/dist/martyrs/src/components/Button/Button.vue.js +1 -1
  2. package/dist/martyrs/src/components/Feed/Carousel.vue.js +1 -1
  3. package/dist/martyrs/src/components/Feed/Feed.vue.js +2 -2
  4. package/dist/martyrs/src/components/Loader/{Loader.vue.js → Loader.vue2.js} +2 -2
  5. package/dist/martyrs/src/components/Loader/Loader.vue2.js.map +1 -0
  6. package/dist/martyrs/src/components/LocationMarker/LocationMarker.vue.js +1 -1
  7. package/dist/martyrs/src/components/Media/Media.vue.js +1 -1
  8. package/dist/martyrs/src/components/Menu/{Menu.vue.js → Menu.vue2.js} +2 -2
  9. package/dist/martyrs/src/components/Menu/Menu.vue2.js.map +1 -0
  10. package/dist/martyrs/src/components/Spoiler/{Spoiler.vue.js → Spoiler.vue2.js} +2 -2
  11. package/dist/martyrs/src/components/Spoiler/Spoiler.vue2.js.map +1 -0
  12. package/dist/martyrs/src/components/Tab/{Tab.vue.js → Tab.vue2.js} +2 -2
  13. package/dist/martyrs/src/components/Tab/Tab.vue2.js.map +1 -0
  14. package/dist/martyrs/src/components/UploadImage/UploadImage.vue.js +1 -1
  15. package/dist/martyrs/src/components/UploadImageMultiple/UploadImageMultiple.vue.js +1 -1
  16. package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js +1 -1
  17. package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js +1 -1
  18. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +8 -14
  19. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js.map +1 -1
  20. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileBlogposts.vue.js +1 -1
  21. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEdit.vue.js +1 -1
  22. package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js +1 -1
  23. package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js +1 -1
  24. package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js +1 -1
  25. package/dist/martyrs/src/modules/auth/views/components/pages/UserDashboard.vue.js +182 -89
  26. package/dist/martyrs/src/modules/auth/views/components/pages/UserDashboard.vue.js.map +1 -1
  27. package/dist/martyrs/src/modules/auth/views/configs/navigation.user.config.js +9 -2
  28. package/dist/martyrs/src/modules/auth/views/configs/navigation.user.config.js.map +1 -1
  29. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js +1 -1
  30. package/dist/martyrs/src/modules/core/views/components/blocks/CardHeader.vue.js +1 -1
  31. package/dist/martyrs/src/modules/core/views/components/blocks/PopupDateSelector.vue.js +1 -1
  32. package/dist/martyrs/src/modules/core/views/components/layouts/Client.vue.js +1 -1
  33. package/dist/martyrs/src/modules/core/views/components/partials/Navigation.vue.js +1 -1
  34. package/dist/martyrs/src/modules/core/views/components/sections/{Filters.vue.js → Filters.vue2.js} +2 -2
  35. package/dist/martyrs/src/modules/core/views/components/sections/Filters.vue2.js.map +1 -0
  36. package/dist/martyrs/src/modules/core/views/components/sections/SectionPageTitle.vue.js +1 -1
  37. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +1 -1
  38. package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +2 -2
  39. package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.js +1 -1
  40. package/dist/martyrs/src/modules/events/components/sections/Feed.vue.js +1 -1
  41. package/dist/martyrs/src/modules/events/components/sections/List.vue.js +1 -1
  42. package/dist/martyrs/src/modules/landing/components/sections/SectionGuide.vue.js +1 -1
  43. package/dist/martyrs/src/modules/marketplace/views/components/pages/Marketplace.vue.js +1 -1
  44. package/dist/martyrs/src/modules/marketplace/views/components/sections/SectionMenu.vue.js +1 -1
  45. package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js +1 -1
  46. package/dist/martyrs/src/modules/music/components/pages/Album.vue.js +1 -1
  47. package/dist/martyrs/src/modules/music/components/pages/Artist.vue.js +1 -1
  48. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js +1 -1
  49. package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js +1 -1
  50. package/dist/martyrs/src/modules/music/components/pages/Track.vue.js +1 -1
  51. package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.js +1 -1
  52. package/dist/martyrs/src/modules/notifications/components/elements/NotificationBadge.vue.js +3 -3
  53. package/dist/martyrs/src/modules/notifications/components/elements/NotificationBadge.vue.js.map +1 -1
  54. package/dist/martyrs/src/modules/notifications/components/sections/NotificationPreferences.vue.js +1 -1
  55. package/dist/martyrs/src/modules/orders/components/blocks/CardOrderUser.vue.js +90 -175
  56. package/dist/martyrs/src/modules/orders/components/blocks/CardOrderUser.vue.js.map +1 -1
  57. package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.js +1 -1
  58. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +6 -6
  59. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js.map +1 -1
  60. package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +1 -1
  61. package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.js +41 -28
  62. package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.js.map +1 -1
  63. package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +2 -2
  64. package/dist/martyrs/src/modules/orders/orders.client.js +14 -14
  65. package/dist/martyrs/src/modules/orders/orders.client.js.map +1 -1
  66. package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.js +1 -1
  67. package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.js +1 -1
  68. package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.js +1 -1
  69. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js +1 -1
  70. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.js +1 -1
  71. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +89 -40
  72. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js.map +1 -1
  73. package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.js +1 -1
  74. package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.js +1 -1
  75. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +2 -2
  76. package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.js +1 -1
  77. package/dist/martyrs/src/modules/products/components/elements/Image360.vue.js +1 -1
  78. package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js +1 -1
  79. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +2 -2
  80. package/dist/martyrs/src/modules/products/components/pages/Product.vue.js +2 -2
  81. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +1 -1
  82. package/dist/martyrs/src/modules/products/components/pages/Products.vue.js +3 -3
  83. package/dist/martyrs/src/modules/products/components/sections/FilterProducts.vue.js +1 -1
  84. package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js +1 -1
  85. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.js +1 -1
  86. package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.js +1 -1
  87. package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js +1 -1
  88. package/dist/martyrs/src/modules/spots/components/pages/Spot.vue.js +1 -1
  89. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +1 -1
  90. package/dist/style.css +72 -77
  91. package/package.json +1 -1
  92. package/src/modules/TASKS.MD +26 -1
  93. package/src/modules/auth/views/components/pages/Profile.vue +9 -15
  94. package/src/modules/auth/views/components/pages/UserDashboard.vue +214 -125
  95. package/src/modules/auth/views/configs/navigation.user.config.js +8 -2
  96. package/src/modules/notifications/components/elements/NotificationBadge.vue +1 -1
  97. package/src/modules/orders/components/blocks/CardOrderUser.vue +88 -190
  98. package/src/modules/orders/components/pages/OrderBackoffice.vue +5 -5
  99. package/src/modules/orders/components/pages/Orders.vue +56 -50
  100. package/src/modules/organizations/components/pages/OrganizationEdit.vue +42 -11
  101. package/dist/martyrs/src/components/Loader/Loader.vue.js.map +0 -1
  102. package/dist/martyrs/src/components/Menu/Menu.vue.js.map +0 -1
  103. package/dist/martyrs/src/components/SelectMulti/SelectMulti.vue2.js +0 -625
  104. package/dist/martyrs/src/components/SelectMulti/SelectMulti.vue2.js.map +0 -1
  105. package/dist/martyrs/src/components/Spoiler/Spoiler.vue.js.map +0 -1
  106. package/dist/martyrs/src/components/Tab/Tab.vue.js.map +0 -1
  107. package/dist/martyrs/src/modules/core/views/components/sections/Filters.vue.js.map +0 -1
  108. package/dist/martyrs/src/modules/orders/components/icons/IconStatusCanceled.vue.js +0 -32
  109. package/dist/martyrs/src/modules/orders/components/icons/IconStatusCanceled.vue.js.map +0 -1
  110. package/dist/martyrs/src/modules/orders/components/icons/IconStatusConfirmed.vue.js +0 -32
  111. package/dist/martyrs/src/modules/orders/components/icons/IconStatusConfirmed.vue.js.map +0 -1
  112. package/dist/martyrs/src/modules/orders/components/icons/IconStatusCreated.vue.js +0 -32
  113. package/dist/martyrs/src/modules/orders/components/icons/IconStatusCreated.vue.js.map +0 -1
  114. package/dist/martyrs/src/modules/orders/components/icons/IconStatusDelay.vue.js +0 -32
  115. package/dist/martyrs/src/modules/orders/components/icons/IconStatusDelay.vue.js.map +0 -1
  116. package/dist/martyrs/src/modules/orders/components/icons/IconStatusFinished.vue.js +0 -32
  117. package/dist/martyrs/src/modules/orders/components/icons/IconStatusFinished.vue.js.map +0 -1
  118. package/dist/martyrs/src/modules/orders/components/icons/IconStatusInUse.vue.js +0 -32
  119. package/dist/martyrs/src/modules/orders/components/icons/IconStatusInUse.vue.js.map +0 -1
@@ -1,84 +1,166 @@
1
- import { ref, onMounted, createElementBlock, openBlock, createElementVNode, createVNode, withCtx, toDisplayString, Fragment, renderList, createBlock } from "vue";
2
- import { useRoute, useRouter } from "vue-router";
3
- import _sfc_main$1 from "../../../../../components/Block/Block.vue.js";
1
+ import { inject, ref, onMounted, resolveComponent, createElementBlock, openBlock, createElementVNode, createVNode, withCtx, toDisplayString, normalizeClass, Fragment, renderList, createBlock, unref } from "vue";
2
+ import { useRouter } from "vue-router";
3
+ import _sfc_main$4 from "../../../../../components/Block/Block.vue.js";
4
4
  import _sfc_main$5 from "../../../../../components/Feed/Feed.vue.js";
5
5
  import Table from "../../../../../components/Table/Table.vue.js";
6
- import StatusBadge from "../../../../../components/Table/StatusBadge.vue.js";
7
- import _sfc_main$6 from "../../../../events/components/blocks/CardEvent.vue.js";
8
- import _sfc_main$2 from "../../../../icons/entities/IconGroups.vue.js";
9
- import _sfc_main$4 from "../../../../icons/entities/IconEvents.vue.js";
10
- import _sfc_main$3 from "../../../../icons/entities/IconOrders.vue.js";
6
+ import _sfc_main$1 from "../../../../icons/entities/IconGroups.vue.js";
7
+ import _sfc_main$3 from "../../../../icons/entities/IconEvents.vue.js";
8
+ import _sfc_main$2 from "../../../../icons/entities/IconOrders.vue.js";
11
9
  import { state } from "../../store/auth.js";
12
10
  import { state as state$1, actions } from "../../../../orders/store/orders.js";
13
11
  import { read } from "../../../../events/store/events.js";
14
- const _hoisted_1 = { class: "pd-medium bg-white" };
15
- const _hoisted_2 = { class: "mn-b-medium cols-3 mobile:cols-1 gap-thin" };
16
- const _hoisted_3 = { class: "mn-b-medium radius-small w-max bg-main" };
17
- const _hoisted_4 = { class: "h3 mn-b-thin" };
18
- const _hoisted_5 = { class: "mn-b-medium radius-small w-max bg-main" };
19
- const _hoisted_6 = { class: "h3 mn-b-thin" };
20
- const _hoisted_7 = { class: "mn-b-medium radius-small w-max bg-main" };
21
- const _hoisted_8 = { class: "h3 mn-b-thin" };
22
- const _hoisted_9 = { class: "cols-2 mobile:cols-1 gap-thin" };
12
+ const _hoisted_1 = { class: "pd-medium" };
13
+ const _hoisted_2 = { class: "mn-b-medium cols-3 mobile:cols-1 gap-small" };
14
+ const _hoisted_3 = { class: "flex flex-v-center gap-small mn-b-small" };
15
+ const _hoisted_4 = { class: "radius-small bg-main flex flex-center" };
16
+ const _hoisted_5 = { class: "h2 fw-semi" };
17
+ const _hoisted_6 = { class: "flex flex-v-center gap-small mn-b-small" };
18
+ const _hoisted_7 = { class: "radius-small bg-main flex flex-center" };
19
+ const _hoisted_8 = { class: "h2 fw-semi" };
20
+ const _hoisted_9 = { class: "flex flex-v-center gap-small mn-b-small" };
21
+ const _hoisted_10 = { class: "radius-small bg-main flex flex-center" };
22
+ const _hoisted_11 = { class: "h2 fw-semi" };
23
+ const _hoisted_12 = { class: "cols-2 mobile:cols-1 gap-small" };
24
+ const _hoisted_13 = { class: "t-dark fw-medium" };
25
+ const _hoisted_14 = { class: "t-dark" };
26
+ const _hoisted_15 = { class: "t-grey t-small" };
27
+ const _hoisted_16 = { class: "flex flex-v-center gap-small" };
28
+ const _hoisted_17 = { class: "flex-none w-3r h-3r radius-small bg-main-transp flex flex-center o-hidden" };
29
+ const _hoisted_18 = ["src"];
30
+ const _hoisted_19 = { class: "flex-child o-hidden" };
31
+ const _hoisted_20 = { class: "fw-medium t-truncate mn-b-nano" };
32
+ const _hoisted_21 = { class: "t-grey t-small" };
33
+ const _hoisted_22 = { class: "flex-none" };
23
34
  const _sfc_main = {
24
35
  __name: "UserDashboard",
25
36
  setup(__props) {
26
- useRoute();
37
+ const FILE_SERVER_URL = inject("FILE_SERVER_URL", "");
27
38
  useRouter();
28
39
  const stats = ref({
29
40
  organizations: 0,
30
41
  orders: 0,
31
42
  events: 0
32
43
  });
44
+ const columns = {
45
+ orders: [
46
+ { key: "_id", label: "Order" },
47
+ { key: "positions", label: "Items" },
48
+ { key: "status", label: "Status" },
49
+ { key: "createdAt", label: "Date" }
50
+ ]
51
+ };
52
+ const formatId = (id) => id ? `${id.slice(0, 4)}...${id.slice(-4)}` : "";
53
+ const formatDate = (date) => {
54
+ if (!date) return "";
55
+ return new Date(date).toLocaleDateString();
56
+ };
57
+ const formatEventDate = (date) => {
58
+ if (!date?.start) return "";
59
+ const start = new Date(date.start);
60
+ return start.toLocaleDateString(void 0, { day: "2-digit", month: "short", year: "numeric" });
61
+ };
62
+ const getStatusClass = (status) => {
63
+ const classes = {
64
+ pending: "bg-second-transp t-second",
65
+ processing: "bg-main-transp t-main",
66
+ completed: "bg-green-transp t-green",
67
+ cancelled: "bg-red-transp t-red"
68
+ };
69
+ return classes[status] || "bg-light t-grey";
70
+ };
71
+ const getEventStatus = (date) => {
72
+ if (!date?.start) return "No date";
73
+ const now = /* @__PURE__ */ new Date();
74
+ const start = new Date(date.start);
75
+ const end = date.end ? new Date(date.end) : start;
76
+ if (now > end) return "Finished";
77
+ if (now >= start && now <= end) return "Live";
78
+ const diffDays = Math.ceil((start - now) / (1e3 * 60 * 60 * 24));
79
+ if (diffDays <= 1) return "Tomorrow";
80
+ if (diffDays <= 7) return `In ${diffDays} days`;
81
+ return "Upcoming";
82
+ };
83
+ const getEventStatusClass = (date) => {
84
+ const status = getEventStatus(date);
85
+ if (status === "Finished") return "bg-light t-grey";
86
+ if (status === "Live") return "bg-green-transp t-green";
87
+ if (status === "Tomorrow") return "bg-second-transp t-second";
88
+ return "bg-main-transp t-main";
89
+ };
33
90
  onMounted(async () => {
91
+ try {
92
+ const [orgsData, ordersData, eventsData] = await Promise.all([
93
+ // Load counts if needed
94
+ ]);
95
+ } catch (e) {
96
+ console.error("Failed to load dashboard stats:", e);
97
+ }
34
98
  });
35
99
  return (_ctx, _cache) => {
100
+ const _component_router_link = resolveComponent("router-link");
36
101
  return openBlock(), createElementBlock("div", _hoisted_1, [
37
- _cache[6] || (_cache[6] = createElementVNode("h2", { class: "mn-b-small" }, "Overview", -1)),
102
+ _cache[3] || (_cache[3] = createElementVNode("h2", { class: "mn-b-medium" }, "Overview", -1)),
38
103
  createElementVNode("div", _hoisted_2, [
39
- createVNode(_sfc_main$1, { class: "pos-relative" }, {
104
+ createVNode(_component_router_link, {
105
+ to: `/users/${state.user._id}/organizations`,
106
+ class: "d-block bg-light pd-medium radius-medium hover-scale-1 transition-default"
107
+ }, {
40
108
  default: withCtx(() => [
41
- _cache[0] || (_cache[0] = createElementVNode("span", { class: "t-green fw-semi pos-absolute pos-t-small pos-r-small" }, "+12.5%", -1)),
42
109
  createElementVNode("div", _hoisted_3, [
43
- createVNode(_sfc_main$2, { class: "i-medium mn-small" })
110
+ createElementVNode("div", _hoisted_4, [
111
+ createVNode(_sfc_main$1, {
112
+ class: "i-medium mn-small",
113
+ fill: "rgb(var(--white))"
114
+ })
115
+ ]),
116
+ _cache[0] || (_cache[0] = createElementVNode("span", { class: "t-grey t-small" }, "My Groups", -1))
44
117
  ]),
45
- createElementVNode("p", _hoisted_4, toDisplayString(stats.value.organizations || 0), 1),
46
- _cache[1] || (_cache[1] = createElementVNode("p", null, "My Groups", -1))
118
+ createElementVNode("p", _hoisted_5, toDisplayString(stats.value.organizations || 0), 1)
47
119
  ]),
48
120
  _: 1
49
- }),
50
- createVNode(_sfc_main$1, { class: "pos-relative" }, {
121
+ }, 8, ["to"]),
122
+ createVNode(_component_router_link, {
123
+ to: `/users/${state.user._id}/orders`,
124
+ class: "d-block bg-light pd-medium radius-medium hover-scale-1 transition-default"
125
+ }, {
51
126
  default: withCtx(() => [
52
- _cache[2] || (_cache[2] = createElementVNode("span", { class: "t-green fw-semi pos-absolute pos-t-small pos-r-small" }, "+14.8%", -1)),
53
- createElementVNode("div", _hoisted_5, [
54
- createVNode(_sfc_main$3, { class: "i-medium mn-small" })
127
+ createElementVNode("div", _hoisted_6, [
128
+ createElementVNode("div", _hoisted_7, [
129
+ createVNode(_sfc_main$2, {
130
+ class: "i-medium mn-small",
131
+ fill: "rgb(var(--white))"
132
+ })
133
+ ]),
134
+ _cache[1] || (_cache[1] = createElementVNode("span", { class: "t-grey t-small" }, "My Orders", -1))
55
135
  ]),
56
- createElementVNode("p", _hoisted_6, toDisplayString(stats.value.orders || 0), 1),
57
- _cache[3] || (_cache[3] = createElementVNode("p", null, "My Orders", -1))
136
+ createElementVNode("p", _hoisted_8, toDisplayString(stats.value.orders || 0), 1)
58
137
  ]),
59
138
  _: 1
60
- }),
61
- createVNode(_sfc_main$1, { class: "pos-relative" }, {
139
+ }, 8, ["to"]),
140
+ createVNode(_component_router_link, {
141
+ to: `/users/${state.user._id}/events`,
142
+ class: "d-block bg-light pd-medium radius-medium hover-scale-1 transition-default"
143
+ }, {
62
144
  default: withCtx(() => [
63
- _cache[4] || (_cache[4] = createElementVNode("span", { class: "t-green fw-semi pos-absolute pos-t-small pos-r-small" }, "+25.1%", -1)),
64
- createElementVNode("div", _hoisted_7, [
65
- createVNode(_sfc_main$4, { class: "i-medium mn-small" })
145
+ createElementVNode("div", _hoisted_9, [
146
+ createElementVNode("div", _hoisted_10, [
147
+ createVNode(_sfc_main$3, {
148
+ class: "i-medium mn-small",
149
+ fill: "rgb(var(--white))"
150
+ })
151
+ ]),
152
+ _cache[2] || (_cache[2] = createElementVNode("span", { class: "t-grey t-small" }, "My Events", -1))
66
153
  ]),
67
- createElementVNode("p", _hoisted_8, toDisplayString(stats.value.events || 0), 1),
68
- _cache[5] || (_cache[5] = createElementVNode("p", null, "My Events", -1))
154
+ createElementVNode("p", _hoisted_11, toDisplayString(stats.value.events || 0), 1)
69
155
  ]),
70
156
  _: 1
71
- })
157
+ }, 8, ["to"])
72
158
  ]),
73
- createElementVNode("div", _hoisted_9, [
74
- createVNode(_sfc_main$1, {
75
- title: "Recent Orders",
76
- class: "pos-relative"
77
- }, {
159
+ createElementVNode("div", _hoisted_12, [
160
+ createVNode(_sfc_main$4, { title: "Recent Orders" }, {
78
161
  default: withCtx(() => [
79
162
  createVNode(_sfc_main$5, {
80
163
  showLoadMore: false,
81
- LoadMore: false,
82
164
  states: {
83
165
  empty: {
84
166
  title: "No Orders",
@@ -93,52 +175,40 @@ const _sfc_main = {
93
175
  customer: state.user._id,
94
176
  limit: 5,
95
177
  page: 1
96
- },
97
- class: "cols-1 gap-thin"
178
+ }
98
179
  }, {
99
- default: withCtx(({
100
- items
101
- }) => [
180
+ default: withCtx(({ items }) => [
102
181
  createVNode(Table, {
103
- class: "radius-semi bg-white",
182
+ class: "radius-small bg-white",
104
183
  items,
105
- columns: [
106
- {
107
- key: "_id",
108
- label: "ID",
109
- formatter: (value) => `#${value.slice(0, 4)}...${value.slice(-4)}`
110
- },
111
- {
112
- key: "positions",
113
- label: "Items",
114
- formatter: (value) => value?.length || 0
115
- },
116
- {
117
- key: "status",
118
- label: "Status",
119
- component: StatusBadge
120
- },
121
- {
122
- key: "createdAt",
123
- label: "Date",
124
- formatter: (value) => new Date(value).toLocaleDateString()
125
- }
126
- ]
127
- }, null, 8, ["items", "columns"])
184
+ columns: columns.orders
185
+ }, {
186
+ "cell-_id": withCtx(({ value }) => [
187
+ createElementVNode("span", _hoisted_13, "#" + toDisplayString(formatId(value)), 1)
188
+ ]),
189
+ "cell-positions": withCtx(({ value }) => [
190
+ createElementVNode("span", _hoisted_14, toDisplayString(value?.length || 0) + " items", 1)
191
+ ]),
192
+ "cell-status": withCtx(({ value }) => [
193
+ createElementVNode("span", {
194
+ class: normalizeClass(["pd-thin pd-l-small pd-r-small radius-small t-small fw-medium", getStatusClass(value)])
195
+ }, toDisplayString(value), 3)
196
+ ]),
197
+ "cell-createdAt": withCtx(({ value }) => [
198
+ createElementVNode("span", _hoisted_15, toDisplayString(formatDate(value)), 1)
199
+ ]),
200
+ _: 2
201
+ }, 1032, ["items", "columns"])
128
202
  ]),
129
203
  _: 1
130
204
  }, 8, ["store", "options"])
131
205
  ]),
132
206
  _: 1
133
207
  }),
134
- createVNode(_sfc_main$1, {
135
- title: "Upcoming Events",
136
- class: "pos-relative"
137
- }, {
208
+ createVNode(_sfc_main$4, { title: "Upcoming Events" }, {
138
209
  default: withCtx(() => [
139
210
  createVNode(_sfc_main$5, {
140
211
  showLoadMore: false,
141
- LoadMore: false,
142
212
  states: {
143
213
  empty: {
144
214
  title: "No Events",
@@ -155,19 +225,42 @@ const _sfc_main = {
155
225
  limit: 5,
156
226
  page: 1
157
227
  },
158
- class: "cols-1 gap-thin"
228
+ class: "flex flex-column gap-thin"
159
229
  }, {
160
- default: withCtx(({
161
- items
162
- }) => [
230
+ default: withCtx(({ items }) => [
163
231
  (openBlock(true), createElementBlock(Fragment, null, renderList(items, (event) => {
164
- return openBlock(), createBlock(_sfc_main$6, {
232
+ return openBlock(), createBlock(_component_router_link, {
165
233
  key: event._id,
166
- event,
167
- user: state.user._id,
168
- type: "compact",
169
- class: "bg-light radius-medium"
170
- }, null, 8, ["event", "user"]);
234
+ to: `/events/${event._id}`,
235
+ class: "d-block bg-white pd-small radius-small hover-scale-1 transition-default"
236
+ }, {
237
+ default: withCtx(() => [
238
+ createElementVNode("div", _hoisted_16, [
239
+ createElementVNode("div", _hoisted_17, [
240
+ event.cover ? (openBlock(), createElementBlock("img", {
241
+ key: 0,
242
+ src: (unref(FILE_SERVER_URL) || "") + event.cover,
243
+ class: "w-100 h-100 object-fit-cover",
244
+ alt: ""
245
+ }, null, 8, _hoisted_18)) : (openBlock(), createBlock(_sfc_main$3, {
246
+ key: 1,
247
+ class: "i-regular",
248
+ fill: "rgb(var(--main))"
249
+ }))
250
+ ]),
251
+ createElementVNode("div", _hoisted_19, [
252
+ createElementVNode("p", _hoisted_20, toDisplayString(event.name), 1),
253
+ createElementVNode("p", _hoisted_21, toDisplayString(formatEventDate(event.date)), 1)
254
+ ]),
255
+ createElementVNode("div", _hoisted_22, [
256
+ createElementVNode("span", {
257
+ class: normalizeClass(["pd-thin pd-l-small pd-r-small radius-small t-small fw-medium", getEventStatusClass(event.date)])
258
+ }, toDisplayString(getEventStatus(event.date)), 3)
259
+ ])
260
+ ])
261
+ ]),
262
+ _: 2
263
+ }, 1032, ["to"]);
171
264
  }), 128))
172
265
  ]),
173
266
  _: 1
@@ -1 +1 @@
1
- {"version":3,"file":"UserDashboard.vue.js","sources":["../../../../../../../../src/modules/auth/views/components/pages/UserDashboard.vue"],"sourcesContent":["<template>\n\t<div class=\"pd-medium bg-white\">\n\t\t<h2 class=\"mn-b-small\">Overview</h2>\n\t\t<div class=\"mn-b-medium cols-3 mobile:cols-1 gap-thin\">\n\t\t\t<Block class=\"pos-relative\">\n\t\t\t\t<span class=\"t-green fw-semi pos-absolute pos-t-small pos-r-small\">+12.5%</span>\n\t\t\t\t<div class=\"mn-b-medium radius-small w-max bg-main\"><IconGroups class=\"i-medium mn-small\"/></div>\n\t\t\t\t<p class=\"h3 mn-b-thin\">{{ stats.organizations || 0 }}</p>\n\t\t\t\t<p>My Groups</p>\n\t\t\t</Block>\n\n\t\t\t<Block class=\"pos-relative\">\n\t\t\t\t<span class=\"t-green fw-semi pos-absolute pos-t-small pos-r-small\">+14.8%</span>\n\t\t\t\t<div class=\"mn-b-medium radius-small w-max bg-main\"><IconOrders class=\"i-medium mn-small\"/></div>\n\t\t\t\t<p class=\"h3 mn-b-thin\">{{ stats.orders || 0 }}</p>\n\t\t\t\t<p>My Orders</p>\n\t\t\t</Block>\n\n\t\t\t<Block class=\"pos-relative\">\n\t\t\t\t<span class=\"t-green fw-semi pos-absolute pos-t-small pos-r-small\">+25.1%</span>\n\t\t\t\t<div class=\"mn-b-medium radius-small w-max bg-main\"><IconEvents class=\"i-medium mn-small\"/></div>\n\t\t\t\t<p class=\"h3 mn-b-thin\">{{ stats.events || 0 }}</p>\n\t\t\t\t<p>My Events</p>\n\t\t\t</Block>\n\t\t</div>\n\n\t\t<div class=\"cols-2 mobile:cols-1 gap-thin\">\n\t\t\t<Block\n\t\t\t\ttitle=\"Recent Orders\"\n\t\t\t\tclass=\"pos-relative\"\n\t\t\t>\n\t\t\t\t<Feed\n\t :showLoadMore=\"false\"\n\t :LoadMore=\"false\"\n\t :states=\"{\n\t empty: {\n\t title: 'No Orders',\n\t description: 'You have no orders yet.'\n\t }\n\t }\"\n\t :store=\"{\n\t read: (options) => orders.actions.read(options),\n\t state: orders.state\n\t }\"\n\t :options=\"{\n\t customer: auth.state.user._id,\n\t limit: 5,\n\t page: 1\n\t }\"\n\t v-slot=\"{\n\t items\n\t }\"\n\t class=\"cols-1 gap-thin\"\n\t >\n\t\t\t\t\t<Table\n\t\t\t\t\t\tclass=\"radius-semi bg-white\"\n\t\t\t\t\t\t:items=\"items\"\n\t\t\t\t\t\t:columns=\"[{\n\t\t\t\t\t key: '_id',\n\t\t\t\t\t label: 'ID',\n\t\t\t\t\t\t\tformatter: (value) => `#${value.slice(0, 4)}...${value.slice(-4)}`\n\t\t\t\t\t },\n\t\t\t\t\t {\n\t\t\t\t\t key: 'positions',\n\t\t\t\t\t label: 'Items',\n\t\t\t\t\t formatter: (value) => value?.length || 0\n\t\t\t\t\t },\n\t\t\t\t\t {\n\t\t\t\t\t key: 'status',\n\t\t\t\t\t label: 'Status',\n\t\t\t\t\t component: StatusBadge\n\t\t\t\t\t },\n\t\t\t\t\t {\n\t\t\t\t\t key: 'createdAt',\n\t\t\t\t\t label: 'Date',\n\t\t\t\t\t formatter: (value) => new Date(value).toLocaleDateString()\n\t\t\t\t\t }]\"\n\t\t\t\t\t/>\n\t </Feed>\n\n\t\t\t</Block>\n\n\t\t\t<Block\n\t\t\t\ttitle=\"Upcoming Events\"\n\t\t\t\tclass=\"pos-relative\"\n\t\t\t>\n\t\t\t\t<Feed\n\t :showLoadMore=\"false\"\n\t :LoadMore=\"false\"\n\t :states=\"{\n\t empty: {\n\t title: 'No Events',\n\t description: 'You have no upcoming events.'\n\t }\n\t }\"\n\t :store=\"{\n\t read: (options) => events.read(options),\n\t }\"\n\t :options=\"{\n\t creator: auth.state.user._id,\n\t sortParam: 'date.start',\n\t sortOrder: 'asc',\n\t limit: 5,\n\t page: 1\n\t }\"\n\t v-slot=\"{\n\t items\n\t }\"\n\t class=\"cols-1 gap-thin\"\n\t >\n\t\t\t\t\t<CardEvent\n\t v-for=\"event in items\"\n\t :key=\"event._id\"\n\t :event=\"event\"\n\t :user=\"auth.state.user._id\"\n\t :type=\"'compact'\"\n\t class=\"bg-light radius-medium\"\n\t />\n\t </Feed>\n\t\t\t</Block>\n\t\t</div>\n\n\t</div>\n\n\n</template>\n\n<script setup>\nimport { ref, onMounted } from 'vue';\nimport { useRoute, useRouter } from 'vue-router'\n\nimport Block from '@martyrs/src/components/Block/Block.vue'\nimport Feed from '@martyrs/src/components/Feed/Feed.vue'\nimport Table from '@martyrs/src/components/Table/Table.vue'\nimport StatusBadge from '@martyrs/src/components/Table/StatusBadge.vue'\n\nimport CardEvent from '@martyrs/src/modules/events/components/blocks/CardEvent.vue';\n\nimport IconGroups from '@martyrs/src/modules/icons/entities/IconGroups.vue'\nimport IconEvents from '@martyrs/src/modules/icons/entities/IconEvents.vue'\nimport IconOrders from '@martyrs/src/modules/icons/entities/IconOrders.vue'\n\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js'\nimport * as orders from '@martyrs/src/modules/orders/store/orders.js'\nimport * as events from '@martyrs/src/modules/events/store/events.js'\n\nconst route = useRoute()\nconst router = useRouter()\n\nconst stats = ref({\n organizations: 0,\n orders: 0,\n events: 0\n})\n\nonMounted(async () => {\n // Load user stats if needed\n})\n</script>\n\n<style lang=\"scss\">\n</style>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAkJc,aAAQ;AACP,cAAS;AAExB,UAAM,QAAQ,IAAI;AAAA,MAChB,eAAe;AAAA,MACf,QAAQ;AAAA,MACR,QAAQ;AAAA,IACV,CAAC;AAED,cAAU,YAAY;AAAA,IAEtB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"UserDashboard.vue.js","sources":["../../../../../../../../src/modules/auth/views/components/pages/UserDashboard.vue"],"sourcesContent":["<template>\n\t<div class=\"pd-medium\">\n\t\t<h2 class=\"mn-b-medium\">Overview</h2>\n\n\t\t<!-- Stats Cards -->\n\t\t<div class=\"mn-b-medium cols-3 mobile:cols-1 gap-small\">\n\t\t\t<router-link\n\t\t\t\t:to=\"`/users/${auth.state.user._id}/organizations`\"\n\t\t\t\tclass=\"d-block bg-light pd-medium radius-medium hover-scale-1 transition-default\"\n\t\t\t>\n\t\t\t\t<div class=\"flex flex-v-center gap-small mn-b-small\">\n\t\t\t\t\t<div class=\"radius-small bg-main flex flex-center\">\n\t\t\t\t\t\t<IconGroups class=\"i-medium mn-small\" :fill=\"'rgb(var(--white))'\"/>\n\t\t\t\t\t</div>\n\t\t\t\t\t<span class=\"t-grey t-small\">My Groups</span>\n\t\t\t\t</div>\n\t\t\t\t<p class=\"h2 fw-semi\">{{ stats.organizations || 0 }}</p>\n\t\t\t</router-link>\n\n\t\t\t<router-link\n\t\t\t\t:to=\"`/users/${auth.state.user._id}/orders`\"\n\t\t\t\tclass=\"d-block bg-light pd-medium radius-medium hover-scale-1 transition-default\"\n\t\t\t>\n\t\t\t\t<div class=\"flex flex-v-center gap-small mn-b-small\">\n\t\t\t\t\t<div class=\"radius-small bg-main flex flex-center\">\n\t\t\t\t\t\t<IconOrders class=\"i-medium mn-small\" :fill=\"'rgb(var(--white))'\"/>\n\t\t\t\t\t</div>\n\t\t\t\t\t<span class=\"t-grey t-small\">My Orders</span>\n\t\t\t\t</div>\n\t\t\t\t<p class=\"h2 fw-semi\">{{ stats.orders || 0 }}</p>\n\t\t\t</router-link>\n\n\t\t\t<router-link\n\t\t\t\t:to=\"`/users/${auth.state.user._id}/events`\"\n\t\t\t\tclass=\"d-block bg-light pd-medium radius-medium hover-scale-1 transition-default\"\n\t\t\t>\n\t\t\t\t<div class=\"flex flex-v-center gap-small mn-b-small\">\n\t\t\t\t\t<div class=\"radius-small bg-main flex flex-center\">\n\t\t\t\t\t\t<IconEvents class=\"i-medium mn-small\" :fill=\"'rgb(var(--white))'\"/>\n\t\t\t\t\t</div>\n\t\t\t\t\t<span class=\"t-grey t-small\">My Events</span>\n\t\t\t\t</div>\n\t\t\t\t<p class=\"h2 fw-semi\">{{ stats.events || 0 }}</p>\n\t\t\t</router-link>\n\t\t</div>\n\n\t\t<!-- Content Grid -->\n\t\t<div class=\"cols-2 mobile:cols-1 gap-small\">\n\t\t\t<!-- Recent Orders -->\n\t\t\t<Block title=\"Recent Orders\">\n\t\t\t\t<Feed\n\t\t\t\t\t:showLoadMore=\"false\"\n\t\t\t\t\t:states=\"{\n\t\t\t\t\t\tempty: {\n\t\t\t\t\t\t\ttitle: 'No Orders',\n\t\t\t\t\t\t\tdescription: 'You have no orders yet.'\n\t\t\t\t\t\t}\n\t\t\t\t\t}\"\n\t\t\t\t\t:store=\"{\n\t\t\t\t\t\tread: (options) => orders.actions.read(options),\n\t\t\t\t\t\tstate: orders.state\n\t\t\t\t\t}\"\n\t\t\t\t\t:options=\"{\n\t\t\t\t\t\tcustomer: auth.state.user._id,\n\t\t\t\t\t\tlimit: 5,\n\t\t\t\t\t\tpage: 1\n\t\t\t\t\t}\"\n\t\t\t\t\tv-slot=\"{ items }\"\n\t\t\t\t>\n\t\t\t\t\t<Table\n\t\t\t\t\t\tclass=\"radius-small bg-white\"\n\t\t\t\t\t\t:items=\"items\"\n\t\t\t\t\t\t:columns=\"columns.orders\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<template #cell-_id=\"{ value }\">\n\t\t\t\t\t\t\t<span class=\"t-dark fw-medium\">#{{ formatId(value) }}</span>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t<template #cell-positions=\"{ value }\">\n\t\t\t\t\t\t\t<span class=\"t-dark\">{{ value?.length || 0 }} items</span>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t<template #cell-status=\"{ value }\">\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclass=\"pd-thin pd-l-small pd-r-small radius-small t-small fw-medium\"\n\t\t\t\t\t\t\t\t:class=\"getStatusClass(value)\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{{ value }}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t<template #cell-createdAt=\"{ value }\">\n\t\t\t\t\t\t\t<span class=\"t-grey t-small\">{{ formatDate(value) }}</span>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</Table>\n\t\t\t\t</Feed>\n\t\t\t</Block>\n\n\t\t\t<!-- Upcoming Events -->\n\t\t\t<Block title=\"Upcoming Events\">\n\t\t\t\t<Feed\n\t\t\t\t\t:showLoadMore=\"false\"\n\t\t\t\t\t:states=\"{\n\t\t\t\t\t\tempty: {\n\t\t\t\t\t\t\ttitle: 'No Events',\n\t\t\t\t\t\t\tdescription: 'You have no upcoming events.'\n\t\t\t\t\t\t}\n\t\t\t\t\t}\"\n\t\t\t\t\t:store=\"{\n\t\t\t\t\t\tread: (options) => events.read(options)\n\t\t\t\t\t}\"\n\t\t\t\t\t:options=\"{\n\t\t\t\t\t\tcreator: auth.state.user._id,\n\t\t\t\t\t\tsortParam: 'date.start',\n\t\t\t\t\t\tsortOrder: 'asc',\n\t\t\t\t\t\tlimit: 5,\n\t\t\t\t\t\tpage: 1\n\t\t\t\t\t}\"\n\t\t\t\t\tv-slot=\"{ items }\"\n\t\t\t\t\tclass=\"flex flex-column gap-thin\"\n\t\t\t\t>\n\t\t\t\t\t<router-link\n\t\t\t\t\t\tv-for=\"event in items\"\n\t\t\t\t\t\t:key=\"event._id\"\n\t\t\t\t\t\t:to=\"`/events/${event._id}`\"\n\t\t\t\t\t\tclass=\"d-block bg-white pd-small radius-small hover-scale-1 transition-default\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div class=\"flex flex-v-center gap-small\">\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"flex-none w-3r h-3r radius-small bg-main-transp flex flex-center o-hidden\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\tv-if=\"event.cover\"\n\t\t\t\t\t\t\t\t\t:src=\"(FILE_SERVER_URL || '') + event.cover\"\n\t\t\t\t\t\t\t\t\tclass=\"w-100 h-100 object-fit-cover\"\n\t\t\t\t\t\t\t\t\talt=\"\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<IconEvents v-else class=\"i-regular\" :fill=\"'rgb(var(--main))'\"/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"flex-child o-hidden\">\n\t\t\t\t\t\t\t\t<p class=\"fw-medium t-truncate mn-b-nano\">{{ event.name }}</p>\n\t\t\t\t\t\t\t\t<p class=\"t-grey t-small\">{{ formatEventDate(event.date) }}</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"flex-none\">\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclass=\"pd-thin pd-l-small pd-r-small radius-small t-small fw-medium\"\n\t\t\t\t\t\t\t\t\t:class=\"getEventStatusClass(event.date)\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{{ getEventStatus(event.date) }}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</router-link>\n\t\t\t\t</Feed>\n\t\t\t</Block>\n\t\t</div>\n\t</div>\n</template>\n\n<script setup>\nimport { ref, onMounted, inject } from 'vue'\nimport { useRouter } from 'vue-router'\n\nimport Block from '@martyrs/src/components/Block/Block.vue'\nimport Feed from '@martyrs/src/components/Feed/Feed.vue'\nimport Table from '@martyrs/src/components/Table/Table.vue'\n\nimport IconGroups from '@martyrs/src/modules/icons/entities/IconGroups.vue'\nimport IconEvents from '@martyrs/src/modules/icons/entities/IconEvents.vue'\nimport IconOrders from '@martyrs/src/modules/icons/entities/IconOrders.vue'\n\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js'\nimport * as orders from '@martyrs/src/modules/orders/store/orders.js'\nimport * as events from '@martyrs/src/modules/events/store/events.js'\n\nconst FILE_SERVER_URL = inject('FILE_SERVER_URL', '')\nconst router = useRouter()\n\nconst stats = ref({\n\torganizations: 0,\n\torders: 0,\n\tevents: 0\n})\n\nconst columns = {\n\torders: [\n\t\t{ key: '_id', label: 'Order' },\n\t\t{ key: 'positions', label: 'Items' },\n\t\t{ key: 'status', label: 'Status' },\n\t\t{ key: 'createdAt', label: 'Date' }\n\t]\n}\n\n// Formatters\nconst formatId = (id) => id ? `${id.slice(0, 4)}...${id.slice(-4)}` : ''\n\nconst formatDate = (date) => {\n\tif (!date) return ''\n\treturn new Date(date).toLocaleDateString()\n}\n\nconst formatEventDate = (date) => {\n\tif (!date?.start) return ''\n\tconst start = new Date(date.start)\n\treturn start.toLocaleDateString(undefined, { day: '2-digit', month: 'short', year: 'numeric' })\n}\n\nconst getStatusClass = (status) => {\n\tconst classes = {\n\t\tpending: 'bg-second-transp t-second',\n\t\tprocessing: 'bg-main-transp t-main',\n\t\tcompleted: 'bg-green-transp t-green',\n\t\tcancelled: 'bg-red-transp t-red'\n\t}\n\treturn classes[status] || 'bg-light t-grey'\n}\n\nconst getEventStatus = (date) => {\n\tif (!date?.start) return 'No date'\n\tconst now = new Date()\n\tconst start = new Date(date.start)\n\tconst end = date.end ? new Date(date.end) : start\n\n\tif (now > end) return 'Finished'\n\tif (now >= start && now <= end) return 'Live'\n\n\tconst diffDays = Math.ceil((start - now) / (1000 * 60 * 60 * 24))\n\tif (diffDays <= 1) return 'Tomorrow'\n\tif (diffDays <= 7) return `In ${diffDays} days`\n\treturn 'Upcoming'\n}\n\nconst getEventStatusClass = (date) => {\n\tconst status = getEventStatus(date)\n\tif (status === 'Finished') return 'bg-light t-grey'\n\tif (status === 'Live') return 'bg-green-transp t-green'\n\tif (status === 'Tomorrow') return 'bg-second-transp t-second'\n\treturn 'bg-main-transp t-main'\n}\n\nonMounted(async () => {\n\t// Load stats\n\ttry {\n\t\tconst [orgsData, ordersData, eventsData] = await Promise.all([\n\t\t\t// Load counts if needed\n\t\t])\n\t} catch (e) {\n\t\tconsole.error('Failed to load dashboard stats:', e)\n\t}\n})\n</script>\n\n<style lang=\"scss\">\n</style>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4KA,UAAM,kBAAkB,OAAO,mBAAmB,EAAE;AACrC,cAAS;AAExB,UAAM,QAAQ,IAAI;AAAA,MACjB,eAAe;AAAA,MACf,QAAQ;AAAA,MACR,QAAQ;AAAA,IACT,CAAC;AAED,UAAM,UAAU;AAAA,MACf,QAAQ;AAAA,QACP,EAAE,KAAK,OAAO,OAAO,QAAO;AAAA,QAC5B,EAAE,KAAK,aAAa,OAAO,QAAO;AAAA,QAClC,EAAE,KAAK,UAAU,OAAO,SAAQ;AAAA,QAChC,EAAE,KAAK,aAAa,OAAO,OAAM;AAAA,MACnC;AAAA,IACA;AAGA,UAAM,WAAW,CAAC,OAAO,KAAK,GAAG,GAAG,MAAM,GAAG,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,KAAK;AAEtE,UAAM,aAAa,CAAC,SAAS;AAC5B,UAAI,CAAC,KAAM,QAAO;AAClB,aAAO,IAAI,KAAK,IAAI,EAAE,mBAAkB;AAAA,IACzC;AAEA,UAAM,kBAAkB,CAAC,SAAS;AACjC,UAAI,CAAC,MAAM,MAAO,QAAO;AACzB,YAAM,QAAQ,IAAI,KAAK,KAAK,KAAK;AACjC,aAAO,MAAM,mBAAmB,QAAW,EAAE,KAAK,WAAW,OAAO,SAAS,MAAM,UAAS,CAAE;AAAA,IAC/F;AAEA,UAAM,iBAAiB,CAAC,WAAW;AAClC,YAAM,UAAU;AAAA,QACf,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,WAAW;AAAA,QACX,WAAW;AAAA,MACb;AACC,aAAO,QAAQ,MAAM,KAAK;AAAA,IAC3B;AAEA,UAAM,iBAAiB,CAAC,SAAS;AAChC,UAAI,CAAC,MAAM,MAAO,QAAO;AACzB,YAAM,MAAM,oBAAI,KAAI;AACpB,YAAM,QAAQ,IAAI,KAAK,KAAK,KAAK;AACjC,YAAM,MAAM,KAAK,MAAM,IAAI,KAAK,KAAK,GAAG,IAAI;AAE5C,UAAI,MAAM,IAAK,QAAO;AACtB,UAAI,OAAO,SAAS,OAAO,IAAK,QAAO;AAEvC,YAAM,WAAW,KAAK,MAAM,QAAQ,QAAQ,MAAO,KAAK,KAAK,GAAG;AAChE,UAAI,YAAY,EAAG,QAAO;AAC1B,UAAI,YAAY,EAAG,QAAO,MAAM,QAAQ;AACxC,aAAO;AAAA,IACR;AAEA,UAAM,sBAAsB,CAAC,SAAS;AACrC,YAAM,SAAS,eAAe,IAAI;AAClC,UAAI,WAAW,WAAY,QAAO;AAClC,UAAI,WAAW,OAAQ,QAAO;AAC9B,UAAI,WAAW,WAAY,QAAO;AAClC,aAAO;AAAA,IACR;AAEA,cAAU,YAAY;AAErB,UAAI;AACH,cAAM,CAAC,UAAU,YAAY,UAAU,IAAI,MAAM,QAAQ,IAAI;AAAA;AAAA,QAE/D,CAAG;AAAA,MACF,SAAS,GAAG;AACX,gBAAQ,MAAM,mCAAmC,CAAC;AAAA,MACnD;AAAA,IACD,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,7 +1,8 @@
1
1
  import _sfc_main from "../../../icons/entities/IconHome.vue.js";
2
2
  import _sfc_main$4 from "../../../icons/entities/IconEvents.vue.js";
3
3
  import _sfc_main$5 from "../../../icons/entities/IconGroups.vue.js";
4
- import _sfc_main$6 from "../../../icons/entities/IconOrders.vue.js";
4
+ import _sfc_main$7 from "../../../icons/entities/IconOrders.vue.js";
5
+ import _sfc_main$6 from "../../../icons/entities/IconCommunity.vue.js";
5
6
  import _sfc_main$1 from "../../../icons/entities/IconBell.vue.js";
6
7
  import _sfc_main$2 from "../../../icons/entities/IconSettings.vue.js";
7
8
  import _sfc_main$3 from "../../../icons/entities/IconProfile.vue.js";
@@ -55,6 +56,12 @@ const navigationItems = [
55
56
  iconComponent: _sfc_main$5,
56
57
  route: (auth, route) => `/users/${route.params._id}/organizations`,
57
58
  visible: () => isModuleInstalled("organizations")
59
+ },
60
+ {
61
+ title: "Posts",
62
+ iconComponent: _sfc_main$6,
63
+ route: (auth, route) => `/users/${route.params._id}/blogposts`,
64
+ visible: () => isModuleInstalled("community")
58
65
  }
59
66
  ]
60
67
  },
@@ -64,7 +71,7 @@ const navigationItems = [
64
71
  items: [
65
72
  {
66
73
  title: "Orders",
67
- iconComponent: _sfc_main$6,
74
+ iconComponent: _sfc_main$7,
68
75
  route: (auth, route) => `/users/${route.params._id}/orders`
69
76
  }
70
77
  ]
@@ -1 +1 @@
1
- {"version":3,"file":"navigation.user.config.js","sources":["../../../../../../../src/modules/auth/views/configs/navigation.user.config.js"],"sourcesContent":["// Import icons\nimport IconHome from '@martyrs/src/modules/icons/entities/IconHome.vue';\nimport IconEvents from '@martyrs/src/modules/icons/entities/IconEvents.vue';\nimport IconGroups from '@martyrs/src/modules/icons/entities/IconGroups.vue';\nimport IconOrders from '@martyrs/src/modules/icons/entities/IconOrders.vue';\nimport IconBell from '@martyrs/src/modules/icons/entities/IconBell.vue';\nimport IconSettings from '@martyrs/src/modules/icons/entities/IconSettings.vue';\nimport IconProfile from '@martyrs/src/modules/icons/entities/IconProfile.vue';\n\n// Import global mixins for access control\nimport { useGlobalMixins } from '@martyrs/src/modules/core/views/mixins/mixins.js';\n\nconst { isModuleInstalled } = useGlobalMixins();\n\n// User profile navigation configuration\nexport const navigationItems = [\n {\n category: '',\n visible: () => true,\n items: [\n {\n title: 'Dashboard',\n iconComponent: IconHome,\n route: (auth, route) => `/users/${route.params._id}/dashboard`,\n visible: (auth, route) => auth.user && auth.user._id === route.params._id // Only owner\n },\n {\n title: 'Notifications',\n iconComponent: IconBell,\n route: (auth, route) => `/users/${route.params._id}/notifications`,\n visible: (auth, route) => auth.user && auth.user._id === route.params._id\n },\n {\n title: 'Settings',\n iconComponent: IconSettings,\n route: (auth, route) => `/users/${route.params._id}/edit/profile`,\n visible: (auth, route) => auth.user && auth.user._id === route.params._id\n },\n ]\n },\n {\n category: 'Profile',\n visible: () => true,\n items: [\n {\n title: 'Profile',\n iconComponent: IconProfile,\n route: (auth, route) => `/users/${route.params._id}`,\n visible: () => true // Public access\n },\n {\n title: 'Events',\n iconComponent: IconEvents,\n route: (auth, route) => `/users/${route.params._id}/events`,\n visible: () => isModuleInstalled('events')\n },\n {\n title: 'Groups',\n iconComponent: IconGroups,\n route: (auth, route) => `/users/${route.params._id}/organizations`,\n visible: () => isModuleInstalled('organizations')\n },\n ]\n },\n {\n category: 'Orders',\n visible: (auth, route) => isModuleInstalled('orders') && (\n auth.user && (\n auth.user._id === route.params._id ||\n (auth.access.roles &&\n (auth.access.roles.includes('ROLE_MODERATOR') ||\n auth.access.roles.includes('ROLE_ADMIN'))\n )\n )\n ),\n items: [\n {\n title: 'Orders',\n iconComponent: IconOrders,\n route: (auth, route) => `/users/${route.params._id}/orders`,\n \n },\n ]\n },\n];\n\nexport default navigationItems;\n"],"names":["IconHome","IconBell","IconSettings","IconProfile","IconEvents","IconGroups","IconOrders"],"mappings":";;;;;;;;AAYA,MAAM,EAAE,kBAAiB,IAAK,gBAAe;AAGjC,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,CAAC,MAAM,UAAU,UAAU,MAAM,OAAO,GAAG;AAAA,QAClD,SAAS,CAAC,MAAM,UAAU,KAAK,QAAQ,KAAK,KAAK,QAAQ,MAAM,OAAO;AAAA;AAAA,MAC9E;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,eAAeC;AAAAA,QACf,OAAO,CAAC,MAAM,UAAU,UAAU,MAAM,OAAO,GAAG;AAAA,QAClD,SAAS,CAAC,MAAM,UAAU,KAAK,QAAQ,KAAK,KAAK,QAAQ,MAAM,OAAO;AAAA,MAC9E;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,eAAeC;AAAAA,QACf,OAAO,CAAC,MAAM,UAAU,UAAU,MAAM,OAAO,GAAG;AAAA,QAClD,SAAS,CAAC,MAAM,UAAU,KAAK,QAAQ,KAAK,KAAK,QAAQ,MAAM,OAAO;AAAA,MAC9E;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,CAAC,MAAM,UAAU,UAAU,MAAM,OAAO,GAAG;AAAA,QAClD,SAAS,MAAM;AAAA;AAAA,MACvB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,eAAeC;AAAAA,QACf,OAAO,CAAC,MAAM,UAAU,UAAU,MAAM,OAAO,GAAG;AAAA,QAClD,SAAS,MAAM,kBAAkB,QAAQ;AAAA,MACjD;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,eAAeC;AAAAA,QACf,OAAO,CAAC,MAAM,UAAU,UAAU,MAAM,OAAO,GAAG;AAAA,QAClD,SAAS,MAAM,kBAAkB,eAAe;AAAA,MACxD;AAAA,IACA;AAAA,EACA;AAAA,EACE;AAAA,IACE,UAAU;AAAA,IACV,SAAS,CAAC,MAAM,UAAU,kBAAkB,QAAQ,MAClD,KAAK,SACH,KAAK,KAAK,QAAQ,MAAM,OAAO,OAC9B,KAAK,OAAO,UACV,KAAK,OAAO,MAAM,SAAS,gBAAgB,KAC1C,KAAK,OAAO,MAAM,SAAS,YAAY;AAAA,IAI/C,OAAO;AAAA,MACL;AAAA,QACE,OAAO;AAAA,QACP,eAAeC;AAAAA,QACf,OAAO,CAAC,MAAM,UAAU,UAAU,MAAM,OAAO,GAAG;AAAA,MAE1D;AAAA,IACA;AAAA,EACA;AACA;"}
1
+ {"version":3,"file":"navigation.user.config.js","sources":["../../../../../../../src/modules/auth/views/configs/navigation.user.config.js"],"sourcesContent":["// Import icons\nimport IconHome from '@martyrs/src/modules/icons/entities/IconHome.vue';\nimport IconEvents from '@martyrs/src/modules/icons/entities/IconEvents.vue';\nimport IconGroups from '@martyrs/src/modules/icons/entities/IconGroups.vue';\nimport IconOrders from '@martyrs/src/modules/icons/entities/IconOrders.vue';\nimport IconCommunity from '@martyrs/src/modules/icons/entities/IconCommunity.vue';\nimport IconBell from '@martyrs/src/modules/icons/entities/IconBell.vue';\nimport IconSettings from '@martyrs/src/modules/icons/entities/IconSettings.vue';\nimport IconProfile from '@martyrs/src/modules/icons/entities/IconProfile.vue';\n\n// Import global mixins for access control\nimport { useGlobalMixins } from '@martyrs/src/modules/core/views/mixins/mixins.js';\n\nconst { isModuleInstalled } = useGlobalMixins();\n\n// User profile navigation configuration\nexport const navigationItems = [\n {\n category: '',\n visible: () => true,\n items: [\n {\n title: 'Dashboard',\n iconComponent: IconHome,\n route: (auth, route) => `/users/${route.params._id}/dashboard`,\n visible: (auth, route) => auth.user && auth.user._id === route.params._id // Only owner\n },\n {\n title: 'Notifications',\n iconComponent: IconBell,\n route: (auth, route) => `/users/${route.params._id}/notifications`,\n visible: (auth, route) => auth.user && auth.user._id === route.params._id\n },\n {\n title: 'Settings',\n iconComponent: IconSettings,\n route: (auth, route) => `/users/${route.params._id}/edit/profile`,\n visible: (auth, route) => auth.user && auth.user._id === route.params._id\n },\n ]\n },\n {\n category: 'Profile',\n visible: () => true,\n items: [\n {\n title: 'Profile',\n iconComponent: IconProfile,\n route: (auth, route) => `/users/${route.params._id}`,\n visible: () => true // Public access\n },\n {\n title: 'Events',\n iconComponent: IconEvents,\n route: (auth, route) => `/users/${route.params._id}/events`,\n visible: () => isModuleInstalled('events')\n },\n {\n title: 'Groups',\n iconComponent: IconGroups,\n route: (auth, route) => `/users/${route.params._id}/organizations`,\n visible: () => isModuleInstalled('organizations')\n },\n {\n title: 'Posts',\n iconComponent: IconCommunity,\n route: (auth, route) => `/users/${route.params._id}/blogposts`,\n visible: () => isModuleInstalled('community')\n },\n ]\n },\n {\n category: 'Orders',\n visible: (auth, route) => isModuleInstalled('orders') && (\n auth.user && (\n auth.user._id === route.params._id ||\n (auth.access.roles &&\n (auth.access.roles.includes('ROLE_MODERATOR') ||\n auth.access.roles.includes('ROLE_ADMIN'))\n )\n )\n ),\n items: [\n {\n title: 'Orders',\n iconComponent: IconOrders,\n route: (auth, route) => `/users/${route.params._id}/orders`\n },\n ]\n },\n];\n\nexport default navigationItems;\n"],"names":["IconHome","IconBell","IconSettings","IconProfile","IconEvents","IconGroups","IconCommunity","IconOrders"],"mappings":";;;;;;;;;AAaA,MAAM,EAAE,kBAAiB,IAAK,gBAAe;AAGjC,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,CAAC,MAAM,UAAU,UAAU,MAAM,OAAO,GAAG;AAAA,QAClD,SAAS,CAAC,MAAM,UAAU,KAAK,QAAQ,KAAK,KAAK,QAAQ,MAAM,OAAO;AAAA;AAAA,MAC9E;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,eAAeC;AAAAA,QACf,OAAO,CAAC,MAAM,UAAU,UAAU,MAAM,OAAO,GAAG;AAAA,QAClD,SAAS,CAAC,MAAM,UAAU,KAAK,QAAQ,KAAK,KAAK,QAAQ,MAAM,OAAO;AAAA,MAC9E;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,eAAeC;AAAAA,QACf,OAAO,CAAC,MAAM,UAAU,UAAU,MAAM,OAAO,GAAG;AAAA,QAClD,SAAS,CAAC,MAAM,UAAU,KAAK,QAAQ,KAAK,KAAK,QAAQ,MAAM,OAAO;AAAA,MAC9E;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,CAAC,MAAM,UAAU,UAAU,MAAM,OAAO,GAAG;AAAA,QAClD,SAAS,MAAM;AAAA;AAAA,MACvB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,eAAeC;AAAAA,QACf,OAAO,CAAC,MAAM,UAAU,UAAU,MAAM,OAAO,GAAG;AAAA,QAClD,SAAS,MAAM,kBAAkB,QAAQ;AAAA,MACjD;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,eAAeC;AAAAA,QACf,OAAO,CAAC,MAAM,UAAU,UAAU,MAAM,OAAO,GAAG;AAAA,QAClD,SAAS,MAAM,kBAAkB,eAAe;AAAA,MACxD;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,eAAeC;AAAAA,QACf,OAAO,CAAC,MAAM,UAAU,UAAU,MAAM,OAAO,GAAG;AAAA,QAClD,SAAS,MAAM,kBAAkB,WAAW;AAAA,MACpD;AAAA,IACA;AAAA,EACA;AAAA,EACE;AAAA,IACE,UAAU;AAAA,IACV,SAAS,CAAC,MAAM,UAAU,kBAAkB,QAAQ,MAClD,KAAK,SACH,KAAK,KAAK,QAAQ,MAAM,OAAO,OAC9B,KAAK,OAAO,UACV,KAAK,OAAO,MAAM,SAAS,gBAAgB,KAC1C,KAAK,OAAO,MAAM,SAAS,YAAY;AAAA,IAI/C,OAAO;AAAA,MACL;AAAA,QACE,OAAO;AAAA,QACP,eAAeC;AAAAA,QACf,OAAO,CAAC,MAAM,UAAU,UAAU,MAAM,OAAO,GAAG;AAAA,MAC1D;AAAA,IACA;AAAA,EACA;AACA;"}
@@ -1,6 +1,6 @@
1
1
  import { computed, ref, onServerPrefetch, onMounted, createElementBlock, openBlock, createVNode, TransitionGroup, withCtx, createCommentVNode, Fragment, renderList, Transition, createBlock } from "vue";
2
2
  import { u as useHead } from "../../../../../../node_modules/.pnpm/@unhead_vue@1.11.20_vue@3.5.13_typescript@5.8.3_/node_modules/@unhead/vue/dist/shared/vue.-sixQ7xP.js";
3
- /* empty css */
3
+ /* empty css */
4
4
  import _sfc_main$1 from "../../../../components/EmptyState/EmptyState.vue.js";
5
5
  import _sfc_main$2 from "../blocks/CardBlogpost.vue.js";
6
6
  import SkeletonBlogpost from "../../../icons/skeletons/SkeletonBlogpost.vue.js";
@@ -6,7 +6,7 @@ import PlaceholderUserpic from "../../../../icons/placeholders/PlaceholderUserpi
6
6
  import PlaceholderOrganizationPic from "../../../../icons/placeholders/PlaceholderOrganizationPic.vue.js";
7
7
  import _sfc_main$4 from "../../../../icons/navigation/IconEllipsis.vue.js";
8
8
  import _sfc_main$5 from "../../../../reports/components/sections/FormReport.vue.js";
9
- /* empty css */
9
+ /* empty css */
10
10
  /* empty css */
11
11
  import _sfc_main$2 from "../elements/PhotoStack.vue.js";
12
12
  const _hoisted_1 = {
@@ -1,7 +1,7 @@
1
1
  import { ref, computed, watch, onMounted, createBlock, openBlock, withCtx, createElementVNode, createVNode, createElementBlock, createCommentVNode, toDisplayString, unref } from "vue";
2
2
  import { useI18n } from "vue-i18n";
3
3
  import _sfc_main$1 from "../../../../../components/Popup/Popup.vue.js";
4
- import Loader from "../../../../../components/Loader/Loader.vue.js";
4
+ import Loader from "../../../../../components/Loader/Loader.vue2.js";
5
5
  import Calendar from "../../../../../components/Calendar/Calendar.vue2.js";
6
6
  import _sfc_main$3 from "../../../../../components/Button/Button.vue.js";
7
7
  import _sfc_main$4 from "../../../../icons/actions/IconShopcartAdd.vue.js";
@@ -7,7 +7,7 @@ import _sfc_main$5 from "../../../../../components/Status/Snack.vue.js";
7
7
  import _sfc_main$1 from "../../../../../components/Popup/Popup.vue.js";
8
8
  import "vue-i18n";
9
9
  /* empty css */
10
- import Loader from "../../../../../components/Loader/Loader.vue.js";
10
+ import Loader from "../../../../../components/Loader/Loader.vue2.js";
11
11
  /* empty css */
12
12
  /* empty css */
13
13
  import _sfc_main$2 from "../partials/LocationSelection.vue.js";
@@ -4,7 +4,7 @@ import IconChevronBottom from "../../../../icons/navigation/IconChevronBottom.vu
4
4
  import { useStore } from "../../store/core.store.js";
5
5
  import { state } from "../../../../auth/views/store/auth.js";
6
6
  import _sfc_main$1 from "../../../../../components/Dropdown/Dropdown.vue.js";
7
- /* empty css */
7
+ /* empty css */
8
8
  /* empty css */
9
9
  import _export_sfc from "../../../../../../../_virtual/_plugin-vue_export-helper.js";
10
10
  const _hoisted_1 = ["onClick"];
@@ -10,7 +10,7 @@ import _sfc_main$2 from "../../../../icons/entities/IconCalendar.vue.js";
10
10
  import _export_sfc from "../../../../../../../_virtual/_plugin-vue_export-helper.js";
11
11
  import _sfc_main$6 from "./filters/FilterOptions.vue.js";
12
12
  import _sfc_main$1 from "../../../../icons/navigation/IconFilter.vue.js";
13
- /* empty css */
13
+ /* empty css */
14
14
  const _hoisted_1 = { class: "flex o-x-scroll scroll-hide t-nowrap gap-thin" };
15
15
  const _hoisted_2 = { key: 0 };
16
16
  const _hoisted_3 = ["onClick"];
@@ -270,4 +270,4 @@ const Filters = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-2c
270
270
  export {
271
271
  Filters as default
272
272
  };
273
- //# sourceMappingURL=Filters.vue.js.map
273
+ //# sourceMappingURL=Filters.vue2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Filters.vue2.js","sources":["../../../../../../../../src/modules/core/views/components/sections/Filters.vue"],"sourcesContent":["<template>\n <div class=\"flex o-x-scroll scroll-hide t-nowrap gap-thin\">\n <!-- All Filters Button -->\n <button\n @click=\"showAllFilters = true\"\n class=\"pd-small radius-medium bg-light flex-v-center flex gap-micro cursor-pointer\"\n :class=\"{ 'bg-main': activeFiltersCount > 0 }\"\n >\n <IconFilter class=\"i-regular\" />\n <span class=\"h-1r\"></span>\n <span v-if=\"activeFiltersCount\">{{ activeFiltersCount }}</span>\n </button>\n\n <!-- Individual Filter Buttons -->\n <button\n v-for=\"filter in filters\"\n :key=\"filter.value\"\n @click=\"openFilter(filter.value)\"\n class=\"pd-small radius-medium bg-light cursor-pointer flex-v-center flex gap-micro\"\n :class=\"{ 'selected bg-main': isFilterActive(filter) }\"\n >\n <IconCalendar v-if=\"filter.type === 'date'\" class=\"mn-r-micro i-regular\" />\n <span class=\"t-nowrap\">{{ filter.type === 'date' && getFilterValue(filter) ? formatFilterValue(filter) : filter.title }}</span>\n <span v-if=\"getFilterValue(filter) && filter.type !== 'date'\" class=\"mn-l-micro\">\n {{ formatFilterValue(filter) }}\n </span>\n </button>\n\n <!-- All Filters Popup -->\n <Popup\n :isPopupOpen=\"showAllFilters\"\n @close-popup=\"closeAllFilters\"\n :align=\"isPhone() ? 'bottom center' : 'center center'\"\n class=\"w-min-20r bg-white radius-medium mobile:radius-zero mobile:radius-tr-medium mobile:radius-tl-medium mobile:w-100 pd-medium\"\n >\n <FiltersGroup\n :filters=\"filters\"\n v-model:selected=\"tempSelected\"\n :immediate=\"false\"\n :showHeader=\"true\"\n :showApplyButton=\"true\"\n :showResetButton=\"true\"\n @update:selected=\"applyAllFilters\"\n />\n </Popup>\n\n <!-- Individual Filter Popups -->\n <Popup\n v-for=\"filter in filters\"\n :key=\"`popup-${filter.value}`\"\n :isPopupOpen=\"individualPopups[filter.value]\"\n @close-popup=\"cancelFilter(filter.value)\"\n :align=\"isPhone() ? 'bottom center' : 'center center'\"\n class=\"bg-white radius-medium mobile:radius-zero mobile:radius-tr-medium mobile:radius-tl-medium mobile:w-100 pd-medium\"\n >\n <h4 class=\"mn-b-medium\">{{ filter.title }}</h4>\n\n <!-- Checkbox Filter -->\n <FilterCheckbox\n v-if=\"filter.type === 'checkbox'\"\n v-model=\"tempSelected[filter.value]\"\n :options=\"filter.options\"\n />\n\n <!-- Range Filter -->\n <FilterRange\n v-else-if=\"filter.type === 'range'\"\n v-model=\"tempSelected[filter.value]\"\n :minPlaceholder=\"filter.minPlaceholder || 'Min'\"\n :maxPlaceholder=\"filter.maxPlaceholder || 'Max'\"\n :label=\"filter.label\"\n />\n\n <!-- Date Filter -->\n <div v-else-if=\"filter.type === 'date'\">\n <div class=\"mn-t-small\">\n <Calendar\n v-model:date=\"tempSelected[filter.value]\"\n :allowRange=\"true\"\n :disablePastDates=\"true\"\n class=\"bg-light radius-small\"\n />\n </div>\n </div>\n\n <!-- Radio/Options Filter -->\n <FilterOptions\n v-else-if=\"filter.type === 'radio'\"\n v-model=\"tempSelected[filter.value]\"\n :options=\"filter.options\"\n />\n\n <div class=\"flex gap-thin mn-t-medium\">\n <button\n @click=\"cancelFilter(filter.value)\"\n class=\"bg-light button flex-child-full\"\n >\n Cancel\n </button>\n <button\n @click=\"applyFilter(filter.value)\"\n class=\"bg-main w-100 button flex-child-full\"\n >\n Apply\n </button>\n </div>\n </Popup>\n </div>\n</template>\n\n<script setup>\nimport { ref, computed, reactive, watch } from 'vue'\nimport { useGlobalMixins } from '@martyrs/src/modules/core/views/mixins/mixins.js'\nimport Popup from '@martyrs/src/components/Popup/Popup.vue'\nimport Calendar from '@martyrs/src/components/Calendar/Calendar.vue'\nimport FiltersGroup from './filters/FiltersGroup.vue'\nimport FilterCheckbox from './filters/FilterCheckbox.vue'\nimport FilterRange from './filters/FilterRange.vue'\nimport FilterDateRange from './filters/FilterDateRange.vue'\nimport FilterOptions from './filters/FilterOptions.vue'\nimport IconFilter from '@martyrs/src/modules/icons/navigation/IconFilter.vue'\nimport IconCross from '@martyrs/src/modules/icons/navigation/IconCross.vue'\nimport IconCalendar from '@martyrs/src/modules/icons/entities/IconCalendar.vue'\n\nconst filters = defineModel('filters', {\n type: Array,\n required: true\n})\n\nconst selected = defineModel('selected', {\n type: Object,\n default: () => ({})\n})\n\nconst emit = defineEmits(['select'])\n\nconst { formatDate, returnCurrency } = useGlobalMixins()\n\n// State\nconst showAllFilters = ref(false)\nconst individualPopups = reactive({})\nconst tempSelected = reactive({})\nconst tempDateRange = ref(null)\n\n// Initialize popups and temp values\nwatch(filters, (newFilters) => {\n newFilters.forEach(filter => {\n individualPopups[filter.value] = false\n \n if (!tempSelected[filter.value]) {\n if (filter.type === 'checkbox') {\n tempSelected[filter.value] = [...(selected.value[filter.value] || [])]\n } else if (filter.type === 'range') {\n tempSelected[filter.value] = { ...(selected.value[filter.value] || { min: '', max: '' }) }\n } else if (filter.type === 'date') {\n tempSelected[filter.value] = selected.value[filter.value] || null\n } else {\n tempSelected[filter.value] = selected.value[filter.value] || null\n }\n }\n })\n}, { immediate: true, deep: true })\n\n// Sync selected to tempSelected\nwatch(selected, (newSelected) => {\n Object.keys(newSelected).forEach(key => {\n const filter = filters.value.find(f => f.value === key)\n if (filter) {\n if (filter.type === 'checkbox') {\n tempSelected[key] = [...(newSelected[key] || [])]\n } else if (filter.type === 'range') {\n tempSelected[key] = { ...(newSelected[key] || { min: '', max: '' }) }\n } else {\n tempSelected[key] = newSelected[key]\n }\n }\n })\n}, { deep: true })\n\n// Computed\nconst activeFiltersCount = computed(() => {\n return Object.entries(selected.value).filter(([key, value]) => {\n if (Array.isArray(value)) return value.length > 0\n if (typeof value === 'object' && value !== null) {\n return value.min || value.max\n }\n return value !== null && value !== undefined\n }).length\n})\n\n// Methods\nconst openFilter = (filterValue) => {\n individualPopups[filterValue] = true\n}\n\nconst isFilterActive = (filter) => {\n const value = selected.value[filter.value]\n if (!value) return false\n if (Array.isArray(value)) return value.length > 0\n if (filter.type === 'range') return value.min || value.max\n return true\n}\n\nconst getFilterValue = (filter) => {\n const value = selected.value[filter.value]\n if (!value) return false\n \n if (filter.type === 'range') {\n return value.min || value.max\n }\n \n if (filter.type === 'date') {\n return value && value.start && value.end\n }\n \n if (Array.isArray(value)) {\n return value.length > 0\n }\n \n return value\n}\n\nconst formatFilterValue = (filter) => {\n const value = selected.value[filter.value]\n if (!value) return ''\n \n if (Array.isArray(value)) {\n return `(${value.length})`\n }\n \n if (filter.type === 'range') {\n if (!value.min && !value.max) return ''\n return `${value.min || '0'}-${value.max || '∞'}`\n }\n \n if (filter.type === 'date') {\n if (!value || !value.start || !value.end) return ''\n return `${formatDate(value.start, { dayMonth: true, language: 'en' })} - ${formatDate(value.end, { dayMonth: true, language: 'en' })}`\n }\n \n if (filter.type === 'radio') {\n const option = filter.options.find(o => o.value === value)\n return option ? `(${option.label})` : ''\n }\n \n return ''\n}\n\nconst applyFilter = (filterValue) => {\n selected.value[filterValue] = tempSelected[filterValue]\n individualPopups[filterValue] = false\n emit('select', { filter: filterValue, value: tempSelected[filterValue] })\n}\n\nconst cancelFilter = (filterValue) => {\n const filter = filters.value.find(f => f.value === filterValue)\n if (filter) {\n if (filter.type === 'checkbox') {\n tempSelected[filterValue] = [...(selected.value[filterValue] || [])]\n } else if (filter.type === 'range') {\n tempSelected[filterValue] = { ...(selected.value[filterValue] || { min: '', max: '' }) }\n } else if (filter.type === 'date') {\n tempSelected[filterValue] = selected.value[filterValue] || null\n } else {\n tempSelected[filterValue] = selected.value[filterValue] || null\n }\n }\n individualPopups[filterValue] = false\n}\n\nconst applyAllFilters = (newValues) => {\n Object.entries(newValues).forEach(([key, value]) => {\n if (selected.value[key] !== value) {\n selected.value[key] = value\n emit('select', { filter: key, value })\n }\n })\n showAllFilters.value = false\n}\n\nconst closeAllFilters = () => {\n showAllFilters.value = false\n}\n</script>\n\n<style scoped>\n.filters-content {\n max-height: 60vh;\n overflow-y: auto;\n}\n</style>"],"names":["_useModel"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { resolveComponent, createElementBlock, openBlock, createElementVNode, createBlock, createCommentVNode, toDisplayString, Fragment, renderList, normalizeClass, 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
  const _hoisted_1 = { class: "flex-v-center flex-nowrap flex" };
4
4
  const _hoisted_2 = { class: "h2 mn-r-auto" };
5
5
  const _hoisted_3 = ["onClick"];
@@ -12,7 +12,7 @@ import _sfc_main$9 from "../../../../components/Checkbox/Checkbox.vue.js";
12
12
  import "axios";
13
13
  /* empty css */
14
14
  import UploadImage from "../../../../components/UploadImage/UploadImage.vue.js";
15
- /* empty css */
15
+ /* empty css */
16
16
  /* empty css */
17
17
  import _sfc_main$8 from "../../../../components/Feed/Feed.vue.js";
18
18
  import _sfc_main$a from "../../../../components/Button/Button.vue.js";
@@ -1,5 +1,5 @@
1
1
  import { ref, onMounted, createElementBlock, openBlock, createVNode, TransitionGroup, withCtx, createCommentVNode, createBlock, Fragment, renderList, unref, createElementVNode, toDisplayString, createTextVNode } from "vue";
2
- /* empty css */
2
+ /* empty css */
3
3
  import _sfc_main$2 from "../../../constructor/components/sections/Viewer.vue.js";
4
4
  import _sfc_main$4 from "../../../../components/Countdown/Countdown.vue.js";
5
5
  import HeroEvent from "../sections/HeroEvent.vue.js";
@@ -16,7 +16,7 @@ import SkeletonEvent from "../../../icons/skeletons/SkeletonEvent.vue.js";
16
16
  /* empty css */
17
17
  /* empty css */
18
18
  /* empty css */
19
- /* empty css */
19
+ /* empty css */
20
20
  /* empty css */
21
21
  /* empty css */
22
22
  /* empty css */
@@ -1,6 +1,6 @@
1
1
  import { computed, ref, watch, createElementBlock, openBlock, createElementVNode, createCommentVNode, unref, createBlock, createVNode, isRef, 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
  /* empty css */
6
6
  import _sfc_main$3 from "../blocks/CardEvent.vue.js";
@@ -1,5 +1,5 @@
1
1
  import { ref, onMounted, createElementBlock, openBlock, createVNode, TransitionGroup, withCtx, createBlock, createCommentVNode, Transition, Fragment, renderList } from "vue";
2
- import Loader from "../../../../components/Loader/Loader.vue.js";
2
+ import Loader from "../../../../components/Loader/Loader.vue2.js";
3
3
  import _sfc_main$1 from "../../../../components/EmptyState/EmptyState.vue.js";
4
4
  import _sfc_main$2 from "../blocks/CardEvent.vue.js";
5
5
  import { read } from "../../store/events.js";
@@ -1,5 +1,5 @@
1
1
  import { ref, onMounted, createElementBlock, openBlock, createVNode, TransitionGroup, withCtx, createBlock, Fragment, renderList, normalizeClass } from "vue";
2
- /* empty css */
2
+ /* empty css */
3
3
  import _sfc_main$1 from "../../../../components/EmptyState/EmptyState.vue.js";
4
4
  import _sfc_main$2 from "../blocks/CardEventShort.vue.js";
5
5
  import SkeletonEventShort from "../../../icons/skeletons/SkeletonEventShort.vue.js";