@ozdao/martyrs 0.2.454 → 0.2.456

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 (190) hide show
  1. package/dist/{Media-DlEIDFaB.js → Media-1oukRVfv.js} +1 -1
  2. package/dist/{Media-DzQv7XkX.mjs → Media-q-XJSM_H.mjs} +3 -3
  3. package/dist/{main-CSphtCso.js → main-C7jGMDJC.js} +2 -2
  4. package/dist/{main-CjVIbgn3.mjs → main-yXkgrjj8.mjs} +3 -9
  5. package/dist/martyrs/src/components/Button/Button.vue.cjs +1 -1
  6. package/dist/martyrs/src/components/Button/Button.vue.js +1 -1
  7. package/dist/martyrs/src/components/DatePicker/DatePicker.vue.cjs +2 -2
  8. package/dist/martyrs/src/components/DatePicker/DatePicker.vue.cjs.map +1 -1
  9. package/dist/martyrs/src/components/DatePicker/DatePicker.vue.js +2 -2
  10. package/dist/martyrs/src/components/DatePicker/DatePicker.vue.js.map +1 -1
  11. package/dist/martyrs/src/components/Dropdown/{Dropdown.vue.cjs → Dropdown.vue2.cjs} +2 -2
  12. package/dist/martyrs/src/components/Dropdown/Dropdown.vue2.cjs.map +1 -0
  13. package/dist/martyrs/src/components/Dropdown/{Dropdown.vue.js → Dropdown.vue2.js} +2 -2
  14. package/dist/martyrs/src/components/Dropdown/{Dropdown.vue.cjs.map → Dropdown.vue2.js.map} +1 -1
  15. package/dist/martyrs/src/components/EditImages/EditImages.vue.cjs +93 -0
  16. package/dist/martyrs/src/components/EditImages/EditImages.vue.cjs.map +1 -1
  17. package/dist/martyrs/src/components/EditImages/EditImages.vue.js +94 -1
  18. package/dist/martyrs/src/components/EditImages/EditImages.vue.js.map +1 -1
  19. package/dist/martyrs/src/components/EditImages/EditImages.vue2.cjs +0 -93
  20. package/dist/martyrs/src/components/EditImages/EditImages.vue2.cjs.map +1 -1
  21. package/dist/martyrs/src/components/EditImages/EditImages.vue2.js +1 -94
  22. package/dist/martyrs/src/components/EditImages/EditImages.vue2.js.map +1 -1
  23. package/dist/martyrs/src/components/EmptyState/EmptyState.vue.cjs +1 -1
  24. package/dist/martyrs/src/components/EmptyState/EmptyState.vue.js +1 -1
  25. package/dist/martyrs/src/components/Feed/Feed.vue.cjs +2 -2
  26. package/dist/martyrs/src/components/Feed/Feed.vue.js +2 -2
  27. package/dist/martyrs/src/components/Loader/{Loader.vue.cjs → Loader.vue2.cjs} +2 -2
  28. package/dist/martyrs/src/components/Loader/Loader.vue2.cjs.map +1 -0
  29. package/dist/martyrs/src/components/Loader/{Loader.vue.js → Loader.vue2.js} +2 -2
  30. package/dist/martyrs/src/components/Loader/{Loader.vue.cjs.map → Loader.vue2.js.map} +1 -1
  31. package/dist/martyrs/src/components/LocationMarker/LocationMarker.vue2.cjs +1 -1
  32. package/dist/martyrs/src/components/LocationMarker/LocationMarker.vue2.js +1 -1
  33. package/dist/martyrs/src/components/Media/Media.vue.cjs +2 -2
  34. package/dist/martyrs/src/components/Media/Media.vue.cjs.map +1 -1
  35. package/dist/martyrs/src/components/Media/Media.vue.js +2 -2
  36. package/dist/martyrs/src/components/Media/Media.vue.js.map +1 -1
  37. package/dist/martyrs/src/components/Menu/{Menu.vue2.cjs → Menu.vue.cjs} +2 -2
  38. package/dist/martyrs/src/components/Menu/Menu.vue.cjs.map +1 -0
  39. package/dist/martyrs/src/components/Menu/{Menu.vue2.js → Menu.vue.js} +2 -2
  40. package/dist/martyrs/src/components/Menu/Menu.vue.js.map +1 -0
  41. package/dist/martyrs/src/components/Slider/Slider.native.vue.cjs +229 -0
  42. package/dist/martyrs/src/components/Slider/Slider.native.vue.cjs.map +1 -0
  43. package/dist/martyrs/src/components/Slider/Slider.native.vue.js +229 -0
  44. package/dist/martyrs/src/components/Slider/Slider.native.vue.js.map +1 -0
  45. package/dist/martyrs/src/components/Slider/Slider.vue.cjs +1 -1
  46. package/dist/martyrs/src/components/Slider/Slider.vue.js +1 -1
  47. package/dist/martyrs/src/components/UploadImageMultiple/UploadImageMultiple.vue.cjs +1 -1
  48. package/dist/martyrs/src/components/UploadImageMultiple/UploadImageMultiple.vue.js +1 -1
  49. package/dist/martyrs/src/modules/auth/views/components/layouts/Auth.vue.cjs +1 -1
  50. package/dist/martyrs/src/modules/auth/views/components/layouts/Auth.vue.js +1 -1
  51. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.cjs +3 -3
  52. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +3 -3
  53. package/dist/martyrs/src/modules/auth/views/components/sections/FeaturedUsers.vue.cjs +2 -2
  54. package/dist/martyrs/src/modules/auth/views/components/sections/FeaturedUsers.vue.cjs.map +1 -1
  55. package/dist/martyrs/src/modules/auth/views/components/sections/FeaturedUsers.vue.js +2 -2
  56. package/dist/martyrs/src/modules/auth/views/components/sections/FeaturedUsers.vue.js.map +1 -1
  57. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.cjs +1 -1
  58. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js +1 -1
  59. package/dist/martyrs/src/modules/community/components/sections/HotPosts.vue.cjs +3 -4
  60. package/dist/martyrs/src/modules/community/components/sections/HotPosts.vue.cjs.map +1 -1
  61. package/dist/martyrs/src/modules/community/components/sections/HotPosts.vue.js +3 -4
  62. package/dist/martyrs/src/modules/community/components/sections/HotPosts.vue.js.map +1 -1
  63. package/dist/martyrs/src/modules/events/components/blocks/CardEvent.vue.cjs +29 -17
  64. package/dist/martyrs/src/modules/events/components/blocks/CardEvent.vue.cjs.map +1 -1
  65. package/dist/martyrs/src/modules/events/components/blocks/CardEvent.vue.js +29 -17
  66. package/dist/martyrs/src/modules/events/components/blocks/CardEvent.vue.js.map +1 -1
  67. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.cjs +2 -2
  68. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +2 -2
  69. package/dist/martyrs/src/modules/events/components/pages/Event.vue.cjs +2 -23
  70. package/dist/martyrs/src/modules/events/components/pages/Event.vue.cjs.map +1 -1
  71. package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +5 -26
  72. package/dist/martyrs/src/modules/events/components/pages/Event.vue.js.map +1 -1
  73. package/dist/martyrs/src/modules/events/components/pages/Events.vue.cjs +50 -132
  74. package/dist/martyrs/src/modules/events/components/pages/Events.vue.cjs.map +1 -1
  75. package/dist/martyrs/src/modules/events/components/pages/Events.vue.js +66 -148
  76. package/dist/martyrs/src/modules/events/components/pages/Events.vue.js.map +1 -1
  77. package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.cjs +3 -33
  78. package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.cjs.map +1 -1
  79. package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.js +3 -33
  80. package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.js.map +1 -1
  81. package/dist/martyrs/src/modules/events/components/pages/EventsSearch.vue.cjs +98 -0
  82. package/dist/martyrs/src/modules/events/components/pages/EventsSearch.vue.cjs.map +1 -0
  83. package/dist/martyrs/src/modules/events/components/pages/EventsSearch.vue.js +98 -0
  84. package/dist/martyrs/src/modules/events/components/pages/EventsSearch.vue.js.map +1 -0
  85. package/dist/martyrs/src/modules/events/components/sections/EventsHot.vue.cjs +4 -6
  86. package/dist/martyrs/src/modules/events/components/sections/EventsHot.vue.cjs.map +1 -1
  87. package/dist/martyrs/src/modules/events/components/sections/EventsHot.vue.js +4 -6
  88. package/dist/martyrs/src/modules/events/components/sections/EventsHot.vue.js.map +1 -1
  89. package/dist/martyrs/src/modules/events/components/sections/FeaturedEvents.vue.cjs +10 -8
  90. package/dist/martyrs/src/modules/events/components/sections/FeaturedEvents.vue.cjs.map +1 -1
  91. package/dist/martyrs/src/modules/events/components/sections/FeaturedEvents.vue.js +10 -8
  92. package/dist/martyrs/src/modules/events/components/sections/FeaturedEvents.vue.js.map +1 -1
  93. package/dist/martyrs/src/modules/events/components/sections/Feed.vue.cjs +1 -1
  94. package/dist/martyrs/src/modules/events/components/sections/Feed.vue.js +1 -1
  95. package/dist/martyrs/src/modules/events/components/sections/List.vue.cjs +4 -4
  96. package/dist/martyrs/src/modules/events/components/sections/List.vue.cjs.map +1 -1
  97. package/dist/martyrs/src/modules/events/components/sections/List.vue.js +4 -4
  98. package/dist/martyrs/src/modules/events/components/sections/List.vue.js.map +1 -1
  99. package/dist/martyrs/src/modules/events/components/sections/SelectDate.vue.cjs +190 -0
  100. package/dist/martyrs/src/modules/events/components/sections/SelectDate.vue.cjs.map +1 -0
  101. package/dist/martyrs/src/modules/events/components/sections/SelectDate.vue.js +190 -0
  102. package/dist/martyrs/src/modules/events/components/sections/SelectDate.vue.js.map +1 -0
  103. package/dist/martyrs/src/modules/events/events.client.js +12 -12
  104. package/dist/martyrs/src/modules/events/events.client.js.map +1 -1
  105. package/dist/martyrs/src/modules/events/router/events.cjs +15 -0
  106. package/dist/martyrs/src/modules/events/router/events.cjs.map +1 -1
  107. package/dist/martyrs/src/modules/events/router/events.js +15 -0
  108. package/dist/martyrs/src/modules/events/router/events.js.map +1 -1
  109. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.cjs +1 -1
  110. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +1 -1
  111. package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.cjs +2 -2
  112. package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.js +2 -2
  113. package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.cjs +1 -1
  114. package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.js +1 -1
  115. package/dist/martyrs/src/modules/globals/views/components/layouts/App.vue.cjs +2 -1
  116. package/dist/martyrs/src/modules/globals/views/components/layouts/App.vue.cjs.map +1 -1
  117. package/dist/martyrs/src/modules/globals/views/components/layouts/App.vue.js +1 -0
  118. package/dist/martyrs/src/modules/globals/views/components/layouts/App.vue.js.map +1 -1
  119. package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.cjs +1 -1
  120. package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.js +1 -1
  121. package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.cjs +1 -1
  122. package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.js +1 -1
  123. package/dist/martyrs/src/modules/marketplace/views/components/sections/SectionMenu.vue.cjs +1 -1
  124. package/dist/martyrs/src/modules/marketplace/views/components/sections/SectionMenu.vue.js +1 -1
  125. package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.cjs +2 -2
  126. package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +2 -2
  127. package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.cjs +1 -1
  128. package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.js +1 -1
  129. package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.cjs +1 -1
  130. package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js +1 -1
  131. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs +1 -1
  132. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js +1 -1
  133. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.cjs +1 -1
  134. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.js +1 -1
  135. package/dist/martyrs/src/modules/organizations/components/sections/DetailsTabSection.vue.cjs +1 -1
  136. package/dist/martyrs/src/modules/organizations/components/sections/DetailsTabSection.vue.js +1 -1
  137. package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.cjs +1 -1
  138. package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.js +1 -1
  139. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.cjs +1 -1
  140. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +1 -1
  141. package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.cjs +1 -1
  142. package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.js +1 -1
  143. package/dist/martyrs/src/modules/products/components/blocks/Images360.vue.cjs +1 -1
  144. package/dist/martyrs/src/modules/products/components/blocks/Images360.vue.js +1 -1
  145. package/dist/martyrs/src/modules/products/components/pages/Categories.vue.cjs +2 -2
  146. package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js +2 -2
  147. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs +2 -2
  148. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +2 -2
  149. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.cjs +1 -1
  150. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +1 -1
  151. package/dist/martyrs/src/modules/products/components/pages/ProductRecommmendation.vue.cjs +1 -1
  152. package/dist/martyrs/src/modules/products/components/pages/ProductRecommmendation.vue.js +1 -1
  153. package/dist/martyrs/src/modules/products/components/sections/EditProductInfo.vue.cjs +1 -1
  154. package/dist/martyrs/src/modules/products/components/sections/EditProductInfo.vue.js +1 -1
  155. package/dist/martyrs/src/modules/products/components/sections/PopularProducts.vue.cjs +1 -1
  156. package/dist/martyrs/src/modules/products/components/sections/PopularProducts.vue.js +1 -1
  157. package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.cjs +1 -1
  158. package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js +1 -1
  159. package/dist/martyrs.cjs.js +1 -1
  160. package/dist/martyrs.css +1 -1
  161. package/dist/martyrs.es.js +1 -1
  162. package/dist/organizations.server.js +0 -1
  163. package/dist/organizations.server.mjs +0 -1
  164. package/dist/style.css +93 -6
  165. package/package.json +1 -1
  166. package/src/components/DatePicker/DatePicker.vue +1 -1
  167. package/src/components/EmptyState/EmptyState.vue +1 -1
  168. package/src/components/Media/Media.vue +1 -1
  169. package/src/components/Slider/Slider.native.vue +313 -0
  170. package/src/modules/auth/views/components/sections/FeaturedUsers.vue +2 -2
  171. package/src/modules/community/components/sections/HotPosts.vue +0 -1
  172. package/src/modules/events/components/blocks/CardEvent.vue +21 -7
  173. package/src/modules/events/components/pages/Event.vue +0 -20
  174. package/src/modules/events/components/pages/Events.vue +91 -141
  175. package/src/modules/events/components/pages/EventsBackoffice.vue +5 -3
  176. package/src/modules/events/components/pages/EventsSearch.vue +122 -0
  177. package/src/modules/events/components/sections/EventsHot.vue +3 -5
  178. package/src/modules/events/components/sections/FeaturedEvents.vue +45 -13
  179. package/src/modules/events/components/sections/List.vue +3 -3
  180. package/src/modules/events/components/sections/SelectDate.vue +217 -0
  181. package/src/modules/events/router/events.js +12 -0
  182. package/src/modules/globals/views/components/layouts/App.vue +1 -0
  183. package/src/modules/organizations/policies/organizations.policies.js +0 -1
  184. package/src/modules/products/components/pages/Product.old.vue +201 -0
  185. package/src/styles/base/all.scss +1 -0
  186. package/src/styles/typography.scss +22 -0
  187. package/dist/martyrs/src/components/Dropdown/Dropdown.vue.js.map +0 -1
  188. package/dist/martyrs/src/components/Loader/Loader.vue.js.map +0 -1
  189. package/dist/martyrs/src/components/Menu/Menu.vue2.cjs.map +0 -1
  190. package/dist/martyrs/src/components/Menu/Menu.vue2.js.map +0 -1
@@ -0,0 +1,217 @@
1
+ <template>
2
+ <div class="gap-medium radius-medium mn-b-semi">
3
+ <h3 class="mn-b-small">
4
+ {{ title }}
5
+ </h3>
6
+
7
+ <div class="cols-4 gap-thin">
8
+ <div
9
+ v-for="(date, index) in computedDateOptions"
10
+ :key="index"
11
+ class="bg-light radius-medium pd-medium cursor-pointer"
12
+ @click="handleDateSelect(date)"
13
+ >
14
+ <h4 class="t-medium">{{ date.label }}</h4>
15
+ <div class="text-small text-muted">{{ date.range }}</div>
16
+ </div>
17
+ </div>
18
+ </div>
19
+ </template>
20
+
21
+ <script setup>
22
+ import { computed, defineProps, defineEmits } from 'vue'
23
+
24
+ const props = defineProps({
25
+ title: {
26
+ type: String,
27
+ default: 'Explore by Date'
28
+ },
29
+ locale: {
30
+ type: String,
31
+ default: 'en-US'
32
+ },
33
+ labels: {
34
+ type: Object,
35
+ default: () => ({
36
+ today: 'Today',
37
+ tomorrow: 'Tomorrow',
38
+ thisWeekend: 'This Weekend',
39
+ thisWeek: 'This Week',
40
+ nextWeekend: 'Next Weekend',
41
+ nextWeek: 'Next Week',
42
+ thisMonth: 'This Month',
43
+ customDate: 'Custom Date',
44
+ pickRange: 'Pick Range'
45
+ })
46
+ },
47
+ customDateOptions: {
48
+ type: Array,
49
+ default: () => []
50
+ }
51
+ });
52
+
53
+ const emit = defineEmits(['date-selected']);
54
+
55
+ // Форматирование одиночной даты с месяцем после числа
56
+ const formatSingleDate = (date) => {
57
+ // Получаем отдельные форматированные части
58
+ const weekday = new Intl.DateTimeFormat(props.locale, { weekday: 'short' }).format(date);
59
+ const day = new Intl.DateTimeFormat(props.locale, { day: 'numeric' }).format(date);
60
+ const month = new Intl.DateTimeFormat(props.locale, { month: 'short' }).format(date);
61
+
62
+ // Собираем в нужном порядке: день недели, число месяца
63
+ return `${weekday}, ${day} ${month}`;
64
+ };
65
+
66
+ // Форматирование диапазона дат с месяцем после числа
67
+ const formatDateRange = (startDate, endDate) => {
68
+ const sameMonth = startDate.getMonth() === endDate.getMonth();
69
+
70
+ // Форматируем начало и конец диапазона
71
+ const startDay = new Intl.DateTimeFormat(props.locale, { day: 'numeric' }).format(startDate);
72
+ const endDay = new Intl.DateTimeFormat(props.locale, { day: 'numeric' }).format(endDate);
73
+ const startMonth = new Intl.DateTimeFormat(props.locale, { month: 'short' }).format(startDate);
74
+ const endMonth = new Intl.DateTimeFormat(props.locale, { month: 'short' }).format(endDate);
75
+
76
+ if (sameMonth) {
77
+ // Если один и тот же месяц: "1 - 2 Jan"
78
+ return `${startDay} - ${endDay} ${startMonth}`;
79
+ } else {
80
+ // Если разные месяцы: "30 Dec - 5 Jan"
81
+ return `${startDay} ${startMonth} - ${endDay} ${endMonth}`;
82
+ }
83
+ };
84
+
85
+ // Вспомогательная функция для установки времени на начало дня (00:00:00)
86
+ const setStartOfDay = (date) => {
87
+ const result = new Date(date);
88
+ result.setHours(0, 0, 0, 0);
89
+ return result;
90
+ };
91
+
92
+ // Вспомогательная функция для установки времени на конец дня (23:59:59.999)
93
+ const setEndOfDay = (date) => {
94
+ const result = new Date(date);
95
+ result.setHours(23, 59, 59, 999);
96
+ return result;
97
+ };
98
+
99
+ const computedDateOptions = computed(() => {
100
+ if (props.customDateOptions.length > 0) {
101
+ return props.customDateOptions;
102
+ }
103
+
104
+ const today = new Date();
105
+ const tomorrow = new Date(today);
106
+ tomorrow.setDate(tomorrow.getDate() + 1);
107
+
108
+ // Расчет текущих выходных (следующие суббота и воскресенье)
109
+ const thisWeekendStart = new Date(today);
110
+ const daysUntilWeekend = (6 - today.getDay()); // 6 - суббота
111
+ thisWeekendStart.setDate(today.getDate() + (daysUntilWeekend <= 0 ? daysUntilWeekend + 7 : daysUntilWeekend));
112
+
113
+ const thisWeekendEnd = new Date(thisWeekendStart);
114
+ thisWeekendEnd.setDate(thisWeekendStart.getDate() + 1);
115
+
116
+ // Расчет текущей недели (воскресенье - суббота)
117
+ const thisWeekStart = new Date(today);
118
+ thisWeekStart.setDate(today.getDate() - today.getDay());
119
+
120
+ const thisWeekEnd = new Date(thisWeekStart);
121
+ thisWeekEnd.setDate(thisWeekStart.getDate() + 6);
122
+
123
+ // Расчет следующих выходных
124
+ const nextWeekendStart = new Date(thisWeekendStart);
125
+ nextWeekendStart.setDate(nextWeekendStart.getDate() + 7);
126
+
127
+ const nextWeekendEnd = new Date(nextWeekendStart);
128
+ nextWeekendEnd.setDate(nextWeekendStart.getDate() + 1);
129
+
130
+ // Расчет следующей недели
131
+ const nextWeekStart = new Date(thisWeekStart);
132
+ nextWeekStart.setDate(nextWeekStart.getDate() + 7);
133
+
134
+ const nextWeekEnd = new Date(nextWeekStart);
135
+ nextWeekEnd.setDate(nextWeekStart.getDate() + 6);
136
+
137
+ // Расчет текущего месяца
138
+ const thisMonthStart = new Date(today.getFullYear(), today.getMonth(), 1);
139
+ const thisMonthEnd = new Date(today.getFullYear(), today.getMonth() + 1, 0);
140
+
141
+ return [
142
+ {
143
+ label: props.labels.today,
144
+ range: formatSingleDate(today),
145
+ data: {
146
+ startDate: setStartOfDay(today),
147
+ endDate: setEndOfDay(today)
148
+ }
149
+ },
150
+ {
151
+ label: props.labels.tomorrow,
152
+ range: formatSingleDate(tomorrow),
153
+ data: {
154
+ startDate: setStartOfDay(tomorrow),
155
+ endDate: setEndOfDay(tomorrow)
156
+ }
157
+ },
158
+ {
159
+ label: props.labels.thisWeekend,
160
+ range: formatDateRange(thisWeekendStart, thisWeekendEnd),
161
+ data: {
162
+ startDate: setStartOfDay(thisWeekendStart),
163
+ endDate: setEndOfDay(thisWeekendEnd)
164
+ }
165
+ },
166
+ {
167
+ label: props.labels.thisWeek,
168
+ range: formatDateRange(thisWeekStart, thisWeekEnd),
169
+ data: {
170
+ startDate: setStartOfDay(thisWeekStart),
171
+ endDate: setEndOfDay(thisWeekEnd)
172
+ }
173
+ },
174
+ {
175
+ label: props.labels.nextWeekend,
176
+ range: formatDateRange(nextWeekendStart, nextWeekendEnd),
177
+ data: {
178
+ startDate: setStartOfDay(nextWeekendStart),
179
+ endDate: setEndOfDay(nextWeekendEnd)
180
+ }
181
+ },
182
+ {
183
+ label: props.labels.nextWeek,
184
+ range: formatDateRange(nextWeekStart, nextWeekEnd),
185
+ data: {
186
+ startDate: setStartOfDay(nextWeekStart),
187
+ endDate: setEndOfDay(nextWeekEnd)
188
+ }
189
+ },
190
+ // {
191
+ // label: props.labels.thisMonth,
192
+ // range: formatDateRange(thisMonthStart, thisMonthEnd),
193
+ // data: {
194
+ // startDate: setStartOfDay(thisMonthStart),
195
+ // endDate: setEndOfDay(thisMonthEnd)
196
+ // }
197
+ // },
198
+ // {
199
+ // label: props.labels.customDate,
200
+ // range: props.labels.pickRange,
201
+ // data: {
202
+ // startDate: null,
203
+ // endDate: null,
204
+ // isCustom: true
205
+ // }
206
+ // }
207
+ ];
208
+ });
209
+
210
+ const handleDateSelect = (date) => {
211
+ emit('date-selected', date.data);
212
+ };
213
+ </script>
214
+
215
+ <style lang="scss">
216
+ /* Стили остаются неизменными */
217
+ </style>
@@ -27,6 +27,18 @@ export function createEventRoutes(prefix = '', options = {}) {
27
27
  },
28
28
  component: () => import(/* webpackChunkName: 'Events' */ '../components/pages/Events.vue')
29
29
  },
30
+ {
31
+ path: 'search',
32
+ name: nameWithPrefix('Events Search'),
33
+ meta: {
34
+ title: {
35
+ en: 'Events',
36
+ ru: 'События'
37
+ },
38
+ title_hide: true
39
+ },
40
+ component: () => import(/* webpackChunkName: 'Events' */ '../components/pages/EventsSearch.vue')
41
+ },
30
42
  {
31
43
  path: 'backoffice',
32
44
  name: nameWithPrefix('Events Backoffice'),
@@ -8,6 +8,7 @@
8
8
 
9
9
  <script setup>
10
10
  import { computed, ref, onMounted, defineAsyncComponent, onBeforeMount } from 'vue'
11
+ import { Preferences } from '@capacitor/preferences';
11
12
  import { Keyboard } from '@capacitor/keyboard';
12
13
 
13
14
  import { useHead } from '@unhead/vue'
@@ -15,7 +15,6 @@ module.exports = function initializeOrganizationPolicies(abacAccessControl, db)
15
15
  const publicAccessVerifier = new Verifier({
16
16
  status: {
17
17
  allowed: true,
18
- default: 'published',
19
18
  validator: Validator.schema({ context: 'Status' }).string().required().oneOf(['published', 'active', 'featured'])
20
19
  }
21
20
  });
@@ -0,0 +1,201 @@
1
+ <template>
2
+ <div v-if="products.state.current" class="h-100 w-100 mobile:pd-thin pd-big bg-white">
3
+ <div class="cols-2-1_2 w-100 gap-medium">
4
+
5
+ <ImagesThumbnails
6
+ :images="images"
7
+ :product="product"
8
+ />
9
+
10
+ <div class="pos-relative w-100 h-100 flex-column flex-h-center flex">
11
+ <IconEdit
12
+ v-if="accesses && hasAccess(route.params._id, 'products', 'edit', accesses)"
13
+ @click="$router.push({ name: 'ProductEdit', params: { _id: product.owner.target, product: product._id } })"
14
+ class="pos-absolute pos-t-regular pos-r-regular i-regular t-transp"
15
+ />
16
+ <h2 class="w-100 h1-product mn-b-small">{{ product.name }}</h2>
17
+ <Price :product="product" size="big" class="flex gap-micro flex-center pd-small br-solid br-1px br-black-transp-10 w-max mn-b-medium" />
18
+
19
+ <div v-if="product.description || product.specification" class="h-min-5r o-hidden radius-small bg-light mn-b-medium pos-relative">
20
+ <Tab
21
+ v-model:selected="tabProduct"
22
+ :tabs="[
23
+ {name: 'Description', value: 'description'},
24
+ {name: 'Specifications', value: 'specifications'}
25
+ ]"
26
+ tabClass="pd-thin bg-white radius-thin p-small uppercase t-medium"
27
+ class="gap-micro bg-light pos-relative z-index-2 pd-thin br-solid br-b br-black-transp-10"
28
+ />
29
+ <transition name="slide-fade">
30
+ <div v-if="tabProduct === 'description'" class="pd-medium">
31
+ <p v-if="product.description && !product.localization < 1 && !recommendation" class="w-100 t-transp">
32
+ {{ product.description }}
33
+ </p>
34
+ <p v-if="product.localization && product.localization.length > 1 && !recommendation" class="w-100 t-transp">
35
+ {{ t('description') }}
36
+ </p>
37
+ </div>
38
+ <div v-else class="cols-2 pd-medium w-100 gap-small">
39
+ <div
40
+ v-if="product.information.length > 0"
41
+ v-for="information in product.information"
42
+ class="w-100 pd-small radius-small bg-white product-information"
43
+ >
44
+ <p class="t-demi">{{ information.name }}</p>
45
+ <p>{{ information.value }}</p>
46
+ </div>
47
+ </div>
48
+ </transition>
49
+ </div>
50
+
51
+ <div class="w-max-33r">
52
+ <div class="w-max-33r">
53
+ <div v-if="product.listing === 'rent'">
54
+ <button @click="openPopup" class="cursor-pointer pd-small radius-big w-max mobile:w-100 bg-main button">
55
+ <div class="gap-thin flex flex-center flex-nowrap">
56
+ <IconShopcartAdd class="i-semi" />
57
+ <span>{{ t('addtoorder') }}</span>
58
+ </div>
59
+ </button>
60
+ <PopupDateSelector
61
+ :product="product"
62
+ :isOpen="isPopupOpen"
63
+ :showFees="globals.state.options?.orders.showFees"
64
+ :feesRate="globals.state.options?.orders.feesRate || 0.15"
65
+ :showVat="globals.state.options?.orders.showVat"
66
+ :vatRate="globals.state.options?.orders.vatRate || 0"
67
+ :onConfirm="selectedDates => addToCart(product, selectedDates)"
68
+ @close="closePopup"
69
+ />
70
+ </div>
71
+ <div v-else>
72
+ <Button
73
+ v-if="product.available > 0"
74
+ :submit="() => addToCart(product, null)"
75
+ class="h-3r w-100 bg-main button"
76
+ >
77
+ <div class="gap-thin flex flex-center flex-nowrap">
78
+ <IconShopcartAdd class="i-semi" />
79
+ <span>{{ t('addtoorder') }}</span>
80
+ </div>
81
+ </Button>
82
+ <div
83
+ v-else
84
+ class="flex-center flex uppercase radius-big t-black w-max pd-small t-medium bg-grey h-3r w-100 mn-r-smallbutton"
85
+ >
86
+ Out of Stock
87
+ </div>
88
+ </div>
89
+ </div>
90
+ </div>
91
+ </div>
92
+ </div>
93
+
94
+ <div class="h-max mn-t-big pos-relative">
95
+ <h3 class="pd-b-small">Most Popular</h3>
96
+ <PopularProducts class="mn-r-big-negative mn-l-big-negative"/>
97
+ </div>
98
+ </div>
99
+ </template>
100
+
101
+ <script setup>
102
+ import { computed, ref, onMounted, getCurrentInstance } from 'vue'
103
+ import { useRoute, useRouter } from 'vue-router'
104
+ import { useI18n } from 'vue-i18n'
105
+
106
+
107
+ import * as auth from '@martyrs/src/modules/auth/views/store/auth'
108
+ import * as globals from '@martyrs/src/modules/globals/views/store/globals'
109
+ import * as products from '@martyrs/src/modules/products/store/products'
110
+ import * as categories from '@martyrs/src/modules/products/store/categories'
111
+ import * as shopcart from '@martyrs/src/modules/orders/store/shopcart'
112
+
113
+ import Button from '@martyrs/src/components/Button/Button.vue'
114
+ import Popup from '@martyrs/src/components/Popup/Popup.vue'
115
+ import Tab from '@martyrs/src/components/Tab/Tab.vue'
116
+ import Calendar from '@martyrs/src/components/DatePicker/Calendar.vue'
117
+ import PopupDateSelector from '@martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue'
118
+ import IconEdit from '@martyrs/src/modules/icons/navigation/IconEdit.vue'
119
+ import IconShopcartAdd from '@martyrs/src/modules/icons/actions/IconShopcartAdd.vue'
120
+ import ImagesThumbnails from '@martyrs/src/modules/products/components/blocks/ImagesThumbnails.vue'
121
+ import Price from '@martyrs/src/modules/products/components/elements/Price.vue'
122
+ import PopularProducts from '@martyrs/src/modules/products/components/sections/PopularProducts.vue'
123
+
124
+ const route = useRoute()
125
+ const router = useRouter()
126
+ const { proxy } = getCurrentInstance()
127
+
128
+ const product = computed(() => products.state.current)
129
+ const images = computed(() => products.state.current.images)
130
+
131
+ const tabProduct = ref('description')
132
+
133
+ const text = {
134
+ en: { addtoorder: 'Add to Cart', fastorder: 'Fast Order' },
135
+ ru: { addtoorder: 'Добавить в корзину', fastorder: 'Быстрый заказ' }
136
+ }
137
+
138
+ const { t } = useI18n({ messages: text })
139
+
140
+ const isPopupOpen = ref(false)
141
+
142
+ function openPopup() {
143
+ isPopupOpen.value = true
144
+ }
145
+
146
+ function closePopup() {
147
+ isPopupOpen.value = false
148
+ }
149
+
150
+ const emits = defineEmits(['page-loading', 'page-loaded']);
151
+
152
+ const pageProduct = ref(null)
153
+ products.state.current = null
154
+ onMounted(async () => {
155
+
156
+ emits('page-loading');
157
+ await products.actions.read({ _id: route.params.product })
158
+ emits('page-loaded');
159
+
160
+
161
+ // route.meta.title.en = product.value.name
162
+ // route.meta.title.ru = roduct.value.name
163
+
164
+ })
165
+
166
+ // onBeforeMounted
167
+
168
+ function validateToCard(product) {
169
+ return !(product.available > 0)
170
+ }
171
+
172
+ async function addToCart(product, selectedDates = null) {
173
+ try {
174
+ // Если организация товара отличается от текущей в корзине
175
+ if (shopcart.state.organization && shopcart.state.organization !== product.owner.target) {
176
+ const result = await proxy.$alert({
177
+ title: 'Start a new order?',
178
+ message: `Your cart has items from another vendor. If you continue, we'll clear it so you can order from this one instead.`,
179
+ actions: [
180
+ { label: 'Cancel', value: false },
181
+ { label: 'Start New Order', value: true }
182
+ ]
183
+ })
184
+
185
+ if (!result) throw error
186
+
187
+ shopcart.state.organization = product.owner.target
188
+ shopcart.state.positions = []
189
+ }
190
+
191
+ await shopcart.actions.addProductToCart(product, product.owner.target, selectedDates)
192
+ return true
193
+ } catch (error) {
194
+ console.error('Error while adding product to cart:', error)
195
+ throw error
196
+ }
197
+ }
198
+ </script>
199
+
200
+ <style lang="scss">
201
+ </style>
@@ -159,6 +159,7 @@ body {
159
159
  .o-hidden {overflow: hidden; }
160
160
  .o-scroll {overflow: scroll; }
161
161
  .o-y-scroll {overflow-y: scroll; }
162
+ .o-x-scroll {overflow-y: scroll; }
162
163
  .o-x-hidden {overflow-x: hidden; touch-action: pan-y;}
163
164
  .o-auto {overflow: auto; }
164
165
  .o-visible {overflow: visible; }
@@ -59,6 +59,28 @@ a:hover { cursor: pointer;}
59
59
  .lh-medium { line-height: 1.250; }
60
60
  .lh-regular { line-height: 1.125; }
61
61
  .lh-light { line-height: 1.000; }
62
+ /*Text trim*/
63
+ .t-trim {
64
+ display: -webkit-box;
65
+ -webkit-box-orient: vertical;
66
+ overflow: hidden;
67
+ -webkit-line-clamp: 1;
68
+ }
69
+
70
+ .t-trim-2 {
71
+ display: -webkit-box;
72
+ -webkit-box-orient: vertical;
73
+ overflow: hidden;
74
+ -webkit-line-clamp: 2;
75
+ }
76
+
77
+ .t-trim-3 {
78
+ display: -webkit-box;
79
+ -webkit-box-orient: vertical;
80
+ overflow: hidden;
81
+ -webkit-line-clamp: 3;
82
+ }
83
+
62
84
 
63
85
 
64
86
  // Text decoration
@@ -1 +0,0 @@
1
- {"version":3,"file":"Dropdown.vue.js","sources":["../../../../../src/components/Dropdown/Dropdown.vue"],"sourcesContent":["<template>\n <div class=\"dropdown pos-relative\" v-click-outside=\"clickedOutside\" @click.stop=\"isOpen = !isOpen\">\n <div v-if=\"isComponentLabel\" class=\"w-100 h-100 flex-center flex\">\n <component :is=\"label.component\" v-bind=\"label.props\" :class=\"label.class\"></component>\n </div>\n <div v-else>\n {{ label }}\n </div>\n <transition name=\"TransitionTranslateY\" mode=\"out-in\">\n <div \n v-show=\"isOpen\" \n :style=\"{ left: align === 'left' ? '0' : 'auto', right: align === 'right' ? '0' : 'auto' }\" \n class=\"dropdown-content radius-big\" \n >\n <slot></slot>\n </div>\n </transition>\n </div>\n</template>\n\n<script setup>\nimport { ref, computed } from 'vue';\nimport clickOutside from '../FieldPhone/click-outside';\n\nlet vClickOutside = clickOutside\n\nconst props = defineProps({\n label: {\n type: [String, Object],\n default: 'Open'\n },\n align: {\n type: String,\n default: 'left'\n }\n})\n\nconst isOpen = ref(false);\nconst isComponentLabel = computed(() => typeof props.label === 'object');\n\nfunction clickedOutside () {\n isOpen.value = false\n}\n</script>\n\n<style >\n.dropdown-content {\n display: block;\n position: absolute;\n box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);\n z-index: 1;\n}\n\n/*.dropdown:hover .dropdown-content {\n display: block;\n}*/\n</style>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAwBA,QAAI,gBAAgB;AAEpB,UAAM,QAAQ;AAWd,UAAM,SAAS,IAAI,KAAK;AACxB,UAAM,mBAAmB,SAAS,MAAM,OAAO,MAAM,UAAU,QAAQ;AAEvE,aAAS,iBAAkB;AACzB,aAAO,QAAQ;AAAA,IACjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Loader.vue.js","sources":["../../../../../src/components/Loader/Loader.vue"],"sourcesContent":["<template>\n <div class=\"circular-loader\" :class=\"{ 'circular-loader-centered': centered }\">\n <svg viewBox=\"25 25 50 50\">\n <circle class=\"circular-loader-fill\" cx=\"50\" cy=\"50\" r=\"20\" fill=\"none\" stroke-width=\"4\" stroke-miterlimit=\"10\" />\n <circle class=\"circular-loader-circle\" cx=\"50\" cy=\"50\" r=\"20\" fill=\"none\" stroke-width=\"4\" stroke-miterlimit=\"10\" />\n </svg>\n <div v-if=\"progress\" class=\"progress-text\">{{ progress }}</div>\n <div v-if=\"status\" class=\"uppercase t-semi w-m-10r status-text\">{{ status }}</div>\n </div>\n</template>\n\n<script>\nexport default {\n props: {\n progress: {\n type: Number,\n default: null,\n },\n status: {\n type: String,\n default: null,\n },\n centered: {\n type: Boolean,\n default: true, // По умолчанию лоадер центрирован (для обратной совместимости)\n },\n },\n};\n</script>\n\n<style>\n.circular-loader {\n position: relative;\n z-index: 50;\n height: 2rem;\n width: 2rem;\n}\n\n.circular-loader-centered {\n top: calc(50% - 1rem);\n left: calc(50% - 1rem);\n}\n\n.circular-loader svg {\n animation: rotate 2s linear infinite;\n}\n\n.circular-loader-circle {\n stroke-dasharray: 1, 200;\n stroke-dashoffset: 0;\n stroke-linecap: round;\n stroke: rgb(var(--main));\n animation: dash 1.5s ease-in-out infinite;\n}\n\n.circular-loader-fill {\n stroke-linecap: round;\n stroke: rgba(var(--black),0.2);\n}\n\n.progress-text {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n font-size: 0.8rem;\n color: rgb(var(--main));;\n}\n\n.status-text {\n position: absolute;\n top: 120%;\n left: calc(50% - 5rem);\n font-size: 0.8rem;\n width: 10rem !important;\n text-align: center;\n}\n\n@keyframes rotate {\n 100% {\n transform: rotate(360deg);\n }\n}\n\n@keyframes dash {\n 0% {\n stroke-dasharray: 1, 200;\n stroke-dashoffset: 0;\n }\n 50% {\n stroke-dasharray: 89, 200;\n stroke-dashoffset: -35;\n }\n 100% {\n stroke-dasharray: 1, 200;\n stroke-dashoffset: -124;\n }\n}\n</style>"],"names":["_createElementBlock","_normalizeClass","_createElementVNode","_toDisplayString","_createCommentVNode"],"mappings":";;;AAYA,MAAK,YAAU;AAAA,EACb,OAAO;AAAA,IACL,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA;AAAA,IACV;AAAA,EACF;AACH;;EA3BA,KAAA;AAAA,EAMyB,OAAM;;;EAN/B,KAAA;AAAA,EAOuB,OAAM;;;sBAN3BA,mBAOM,OAAA;AAAA,IAPD,OADPC,eAAA,CACa,mBAAiB,EAAA,4BAAuC,OAAQ,UAAA,CAAA;AAAA;8BACzEC,mBAGM,OAAA,EAHD,SAAQ,iBAAa;AAAA,MACxBA,mBAAkH,UAAA;AAAA,QAA1G,OAAM;AAAA,QAAuB,IAAG;AAAA,QAAK,IAAG;AAAA,QAAK,GAAE;AAAA,QAAK,MAAK;AAAA,QAAO,gBAAa;AAAA,QAAI,qBAAkB;AAAA;MAC3GA,mBAAoH,UAAA;AAAA,QAA5G,OAAM;AAAA,QAAyB,IAAG;AAAA,QAAK,IAAG;AAAA,QAAK,GAAE;AAAA,QAAK,MAAK;AAAA,QAAO,gBAAa;AAAA,QAAI,qBAAkB;AAAA;;IAEpG,OAAQ,yBAAnBF,mBAA+D,OAA/D,YAA+DG,gBAAjB,OAAQ,QAAA,GAAA,CAAA,KAN1DC,mBAAA,IAAA,IAAA;AAAA,IAOe,OAAM,uBAAjBJ,mBAAkF,OAAlF,YAAkFG,gBAAf,OAAM,MAAA,GAAA,CAAA,KAP7EC,mBAAA,IAAA,IAAA;AAAA;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Menu.vue2.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Menu.vue2.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;"}