@ozdao/prometheus-framework 0.1.39 → 0.1.41

Sign up to get free protection for your applications and to get access to all the features.
Files changed (106) hide show
  1. package/dist/ButtonToggleMembership-738720bd.js +1 -0
  2. package/dist/ButtonToggleMembership-e337e704.mjs +90 -0
  3. package/dist/CardBlogpost-c7adb0a7.mjs +246 -0
  4. package/dist/CardBlogpost-f308ff64.js +1 -0
  5. package/dist/CardOrganization-22beb83d.js +1 -0
  6. package/dist/CardOrganization-ae384e54.mjs +234 -0
  7. package/dist/Chips-edf2b573.js +1 -0
  8. package/dist/Chips-f06ec38f.mjs +213 -0
  9. package/dist/Community-04b25965.mjs +130 -0
  10. package/dist/Community-2f6fee0f.js +1 -0
  11. package/dist/Events-41d71b0e.js +1 -0
  12. package/dist/Events-af7170ed.mjs +134 -0
  13. package/dist/Feed-04fe1f7a.mjs +361 -0
  14. package/dist/Feed-23758089.mjs +124 -0
  15. package/dist/Feed-36e83be3.mjs +156 -0
  16. package/dist/Feed-5653cf8b.js +1 -0
  17. package/dist/Feed-5a359bb7.js +1 -0
  18. package/dist/Feed-6ca0541a.js +1 -0
  19. package/dist/Image-39955d9d.mjs +480 -0
  20. package/dist/Image-c2d190d8.js +9 -0
  21. package/dist/LeftoverAdd-21311275.js +1 -0
  22. package/dist/LeftoverAdd-ccf4595f.mjs +228 -0
  23. package/dist/Members-7251dd52.mjs +109 -0
  24. package/dist/Members-d35ab7e8.js +1 -0
  25. package/dist/Organizations-a964d4b6.mjs +72 -0
  26. package/dist/Organizations-ed6d36d6.js +1 -0
  27. package/dist/Product-299070ad.mjs +652 -0
  28. package/dist/Product-aacb05f3.js +7 -0
  29. package/dist/ProductEdit-70bed802.mjs +296 -0
  30. package/dist/ProductEdit-e5a2e0f6.js +1 -0
  31. package/dist/ProductsBackoffice-3c182d6a.mjs +86 -0
  32. package/dist/ProductsBackoffice-b684913d.js +1 -0
  33. package/dist/ProfileBlogposts-6bf526fb.js +1 -0
  34. package/dist/ProfileBlogposts-d4b17535.mjs +77 -0
  35. package/dist/ProfileEvents-3eeb4320.mjs +68 -0
  36. package/dist/ProfileEvents-90e09978.js +1 -0
  37. package/dist/ProfileOrganizations-e838925f.js +1 -0
  38. package/dist/ProfileOrganizations-edf657ca.mjs +72 -0
  39. package/dist/Publics-a31d7fe7.js +1 -0
  40. package/dist/Publics-a8f31413.mjs +45 -0
  41. package/dist/Wallet-2043b611.mjs +24682 -0
  42. package/dist/Wallet-8fa7386a.js +55 -0
  43. package/dist/auth-076a83d0.mjs +625 -0
  44. package/dist/auth-df5a20c6.js +7 -0
  45. package/dist/auth.client.cjs +1 -1
  46. package/dist/auth.client.js +4 -4
  47. package/dist/auth.validation-80b133df.js +1 -0
  48. package/dist/auth.validation-fd9ae66f.mjs +24 -0
  49. package/dist/backoffice.client.cjs +1 -1
  50. package/dist/backoffice.client.js +11 -11
  51. package/dist/categories-4327a81c.js +1 -0
  52. package/dist/categories-52a561a4.mjs +122 -0
  53. package/dist/community.client.cjs +1 -1
  54. package/dist/community.client.js +10 -10
  55. package/dist/events.client.cjs +2 -2
  56. package/dist/events.client.js +9 -9
  57. package/dist/legal.client.cjs +1 -1
  58. package/dist/legal.client.js +1 -1
  59. package/dist/main.css +1 -1
  60. package/dist/modules/gallery/components/pages/Gallery.vue.d.ts +2 -0
  61. package/dist/modules/gallery/components/sections/GalleryWithCategories.vue.d.ts +2 -0
  62. package/dist/modules/globals/components/sections/Title.vue.d.ts +6 -0
  63. package/dist/organizations-966e1cd2.mjs +122 -0
  64. package/dist/organizations-d12c42b6.js +1 -0
  65. package/dist/organizations.client-8f263e28.js +3 -0
  66. package/dist/organizations.client-9ffc023f.mjs +2996 -0
  67. package/dist/organizations.client.cjs +1 -1
  68. package/dist/organizations.client.js +15 -15
  69. package/dist/products-7e4253eb.js +1 -0
  70. package/dist/products-aabe5c02.mjs +108 -0
  71. package/dist/prometheus-framework.cjs.js +1 -1
  72. package/dist/prometheus-framework.es.js +2 -2
  73. package/dist/states.validation-4594b33c.mjs +13 -0
  74. package/dist/states.validation-69003e66.js +1 -0
  75. package/dist/style.css +1 -1
  76. package/dist/users.client.cjs +1 -1
  77. package/dist/users.client.js +198 -166
  78. package/package.json +1 -1
  79. package/src/components/LocationMarker/LocationMarker.vue +1 -1
  80. package/src/components/LocationSelection/LocationSelection.vue +1 -1
  81. package/src/components/Navigation/Navigation.vue +12 -1
  82. package/src/components/Sidebar/Sidebar.vue +8 -10
  83. package/src/modules/auth/store/auth.js +7 -4
  84. package/src/modules/backoffice/components/admin/ProductEdit.vue +0 -2
  85. package/src/modules/files/middlewares/server/md.js +1 -0
  86. package/src/modules/gallery/components/pages/Gallery.vue +21 -0
  87. package/src/modules/gallery/components/sections/GalleryWithCategories.vue +408 -0
  88. package/src/modules/gallery/gallery.client.js +11 -14
  89. package/src/modules/gallery/router/gallery.router.js +10 -0
  90. package/src/modules/globals/components/sections/Title.vue +22 -0
  91. package/src/modules/marketplace/router/marketplace.js +4 -3
  92. package/src/modules/organizations/components/sections/Feed.vue +2 -2
  93. package/src/modules/products/components/pages/ProductRecommmendation.vue +5 -3
  94. package/src/modules/products/components/sections/FilterProducts.vue +2 -0
  95. package/src/modules/products/components/sections/SectionProduct.vue +17 -5
  96. package/src/modules/products/components/sections/SortProducts.vue +0 -2
  97. package/src/modules/products/controllers/products.controller.js +83 -0
  98. package/src/modules/products/routes/products.routes.js +5 -5
  99. package/src/modules/products/store/categories.js +9 -9
  100. package/src/modules/products/store/leftovers.js +9 -6
  101. package/src/modules/products/store/products.js +0 -2
  102. package/src/modules/spots/components/layouts/Spots.vue +16 -11
  103. package/src/modules/spots/components/pages/Map.vue +9 -7
  104. package/src/modules/users/components/pages/Profile.vue +15 -5
  105. package/src/modules/users/router/users.js +10 -0
  106. package/src/modules/wallet/components/pages/Wallet.vue +104 -23
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ozdao/prometheus-framework",
3
- "version": "0.1.39",
3
+ "version": "0.1.41",
4
4
  "description": "Web3 Framework focused on user experience and ease of development.",
5
5
  "author": "OZ DAO <hello@ozdao.dev>",
6
6
  "license": "GPL-3.0-or-later",
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <div class="map-container">
2
+ <div class="pos-relative map-container">
3
3
  <div ref="mapContainer" class="w-100 h-100"></div>
4
4
  <button class="pos-absolute pos-t-regular pos-r-regular i-semi bg-second radius-extra" @click="setUserLocation">
5
5
  <svg class="i-medium" width="98" height="98" viewBox="0 0 98 98" fill="none" xmlns="http://www.w3.org/2000/svg">
@@ -16,7 +16,7 @@
16
16
  placeholder="Enter delivery address"
17
17
 
18
18
  class="
19
- bg-black br-grey br-solid br-2px radius-big pd-medium mn-small
19
+ bg-white br-grey br-solid br-2px radius-big pd-medium mn-small
20
20
  "
21
21
 
22
22
  @update:country="newCountry => {
@@ -14,7 +14,16 @@
14
14
  {{ t('HEADER.MENU.DISPENSARIES') }}
15
15
  </router-link>
16
16
  </li>
17
- <li class="mn-r-semi">
17
+
18
+ <!-- <li class="mn-r-semi">
19
+ <router-link
20
+ to="/gallery"
21
+ >
22
+ {{ t('HEADER.MENU.GALLERY') }}
23
+ </router-link>
24
+ </li> -->
25
+
26
+ <li class="mn-r-semi">
18
27
  <router-link
19
28
  to="/events"
20
29
  >
@@ -67,6 +76,7 @@ const text = {
67
76
  HOME: 'Home',
68
77
  MARKETPLACE: 'Marketplace',
69
78
  DISPENSARIES: 'Spots',
79
+ GALLERY: 'Gallery',
70
80
  EVENTS: 'Events',
71
81
  BLOG: "Community",
72
82
  GOVERNANCE: "Governance",
@@ -79,6 +89,7 @@ const text = {
79
89
  HOME: 'Главная',
80
90
  MARKETPLACE: 'Маркетплейс',
81
91
  DISPENSARIES: 'Места',
92
+ GALLERY: 'Галерея',
82
93
  EVENTS: 'События',
83
94
  BLOG: "Сообщество",
84
95
  GOVERNANCE: "Управление",
@@ -1,13 +1,18 @@
1
1
  <template>
2
- <div :class="['sidebar t-black bg-grey', stateSidebar ? 'open' : '']">
3
- <div class="sidebar-content">
2
+ <div
3
+ :class="['sidebar t-black bg-grey', stateSidebar ? 'open' : '']"
4
+ >
5
+ <div
6
+ class="sidebar-content"
7
+ >
4
8
  <slot></slot>
5
9
  </div>
6
10
  </div>
7
11
  </template>
8
12
 
9
13
  <script setup>
10
- import { ref, } from 'vue';
14
+ import { ref } from 'vue';
15
+
11
16
  import { useRoute, useRouter } from 'vue-router'
12
17
 
13
18
  const router = useRouter()
@@ -16,7 +21,6 @@ const route = useRoute()
16
21
  const isOpen = ref(false);
17
22
 
18
23
  const props = defineProps(['stateSidebar'])
19
-
20
24
  </script>
21
25
 
22
26
  <style scoped>
@@ -31,12 +35,6 @@ const props = defineProps(['stateSidebar'])
31
35
  z-index: 1000;
32
36
  }
33
37
 
34
- .active {
35
-
36
- }
37
-
38
-
39
-
40
38
  .sidebar.open {
41
39
  left: 0;
42
40
  }
@@ -214,10 +214,13 @@
214
214
 
215
215
  function getCookie(name) {
216
216
  if (process.env.MOBILE_APP) {
217
- return CapacitorCookies.getCookie({
218
- url: process.env.API_URL,
219
- key: name
220
- }).then(response => JSON.parse(response.value));
217
+ // return CapacitorCookies.getCookie({
218
+ // url: process.env.API_URL,
219
+ // key: name
220
+ // })
221
+ // .then(response => JSON.parse(response.value));
222
+ const cookie = Cookies.get(name);
223
+ return cookie ? JSON.parse(cookie) : null;
221
224
  } else {
222
225
  // Для веб-версии
223
226
  const cookie = Cookies.get(name);
@@ -61,7 +61,6 @@
61
61
  <script setup>
62
62
  // Import libs
63
63
  import { reactive, computed, onMounted, toRefs } from 'vue'
64
- import { useStore } from 'vuex'
65
64
  import { useRoute, useRouter } from 'vue-router'
66
65
  // Import components
67
66
  import EditProductInfo from '@/components/sections/product/EditProductInfo.vue';
@@ -71,7 +70,6 @@
71
70
  import EditModifications from '@/components/sections/product/EditModifications.vue';
72
71
 
73
72
  // Accessing router and store
74
- const store = useStore()
75
73
  const route = useRoute()
76
74
  const router = useRouter()
77
75
 
@@ -23,6 +23,7 @@ const createMulterStorage = (folderName, publicPath) => {
23
23
 
24
24
  cb(null, userUploadPath);
25
25
  },
26
+
26
27
  filename: function (req, file, cb) {
27
28
  cb(null, Date.now() + path.extname(file.originalname));
28
29
  }
@@ -0,0 +1,21 @@
1
+ <template>
2
+ <div class="wrapper">
3
+ <Title :text="$t('gallery.title')" class="pd-medium" />
4
+
5
+ <div style="min-height: 100vh">
6
+ <GalleryWithCategories/>
7
+ </div>
8
+ </div>
9
+ </template>
10
+
11
+ <script setup>
12
+ /////////////////////////////
13
+ // COMPONENT DEPENDENCIES
14
+ /////////////////////////////
15
+ import { onMounted } from 'vue'
16
+ import { gsap } from "gsap/dist/gsap";
17
+ import { ScrollTrigger } from "gsap/dist/ScrollTrigger";
18
+
19
+ import Title from '@pf/src/modules/globals/components/sections/Title.vue';
20
+ import GalleryWithCategories from '@pf/src/modules/gallery/components/sections/GalleryWithCategories.vue';
21
+ </script>
@@ -0,0 +1,408 @@
1
+ <template>
2
+ <div>
3
+ <div class=" pd-medium flex-nowrap flex pd-t-thin pd-b-thin o-scroll">
4
+
5
+ <a
6
+ v-for="category in categories"
7
+ :key="category"
8
+ @click="filter(category)"
9
+ class="h3 uppercase mn-r-big"
10
+ :class="{ 't-transp': selectedCategory !== category }"
11
+ >
12
+ {{ $t('gallery.categories.' + category) }}
13
+ </a>
14
+
15
+ <button v-if="isEditablePath" @click="openModal(null)" class="t-black bg-second button-small button">+</button>
16
+ </div>
17
+
18
+ <div ref="grid" class="pd-medium cols-4 gap-thin">
19
+ <!-- :class="['grid-item pd-small', item.size.value, ...item.categories]" -->
20
+ <div
21
+ v-for="(item, index) in filteredGallery"
22
+ :key="item.id"
23
+ :data-id="item.id"
24
+ >
25
+
26
+ <transition name="scaleIn" mode="in-out">
27
+ <img
28
+ v-if="!isEditablePath && grid"
29
+ :src="'https://thecommunephuket.com/photos/' + item.cover"
30
+ class="w-100 h-100 o-hidden radius-medium object-fit-cover"
31
+ @click="openModal(item.image)"
32
+ />
33
+ <!-- <div class="pd-small radius-small bg-white" v-else>
34
+ <img :src="'/photos/' + item.cover" class="w-100 radius-small mn-small h-10r object-fit-cover " @click="openModal(item)" />
35
+
36
+ <p class="t-black p-small mn-small">
37
+ <span class="uppercase t-transp ">Size</span>
38
+ <br>
39
+ <span class="pd-2px radius-big d-inline-block bg-grey">{{item.size.name}}</span>
40
+ </p>
41
+
42
+ <p class="t-black p-small mn-small uppe">
43
+ <span class="uppercase t-transp">Categories</span>
44
+ <br>
45
+ <span class="pd-2px radius-big d-inline-block bg-grey t-semi" v-for="category in item.categories">{{category}}</span>
46
+ </p>
47
+
48
+ <div class="flex-nowrap flex">
49
+ <button class="mn-r-thin button-small w-100 button" @click="editPhoto(item)">Edit</button>
50
+ <button class="button-small w-100 button" @click="deletePhoto(item._id)">Delete</button>
51
+ </div>
52
+ </div> -->
53
+ </transition>
54
+ </div>
55
+
56
+ <!-- Loader -->
57
+ <!-- <div v-show="loading" class="loader">Loading...</div> -->
58
+ <!-- Sentinel -->
59
+ <div ref="sentinel" class="sentinel"></div>
60
+
61
+ <transition name="modal">
62
+ <div v-show="selectedImage.image !== false && modal === 'modal'" class="modal pd-thin">
63
+ <div class="modal-content radius-big">
64
+ <div class="">
65
+ <span class="close" @click="closeModal">&times;</span>
66
+ <img :src="'https://thecommunephuket.com/photos/' + selectedImage.image">
67
+ </div>
68
+ </div>
69
+ </div>
70
+ </transition>
71
+
72
+ <transition name="modal">
73
+ <div v-if="selectedImage.image !== false && modal === 'edit-modal'" class="flex-v-center flex m modal pd-big">
74
+ <div class="modal-content radius-small pd-medium bg-white">
75
+ <span class="close" @click="closeModal">&times;</span>
76
+ <img v-if="typeof previewImage === 'string'" :src="previewImage" class="radius-small w-100 mn-small h-20r object-fit-cover " />
77
+ <img v-if="typeof previewImage === 'object' && selectedImage.image !== null" class="radius-small w-100 mn-small h-20r object-fit-cover " :src="'/photos/' + selectedImage.cover">
78
+
79
+ <Upload
80
+ id="photo"
81
+ name="photo"
82
+ type="file"
83
+ class="t-black bg-grey pd-thin radius-small mn-thin"
84
+ @file-change="onFileChange"
85
+ multiple="true"
86
+ v-if="!selectedImage._id"
87
+ />
88
+
89
+
90
+ <Select
91
+ :options="sizeOptions"
92
+ label="Size"
93
+ v-model:select="selectedImage.size"
94
+ placeholder="Select Size"
95
+ class="
96
+ bg-grey
97
+ pd-thin
98
+ radius-small
99
+ mn-thin
100
+ t-black
101
+ "
102
+ />
103
+
104
+ <Field
105
+ v-model:field="selectedImage.categories"
106
+ type="text"
107
+ label="Categories"
108
+ placeholder="Enter categories for image (comma separated)"
109
+ class="
110
+ bg-grey
111
+ pd-thin
112
+ radius-small
113
+ mn-medium
114
+ t-black
115
+ "
116
+ />
117
+
118
+
119
+
120
+ <Button :submit="selectedImage._id ? updatePhoto : createPhoto" :callback="closeModal" class="mn-thin">
121
+ {{selectedImage._id ? 'Update' : 'Create'}}
122
+ </Button>
123
+ </div>
124
+ </div>
125
+ </transition>
126
+ </div>
127
+ </div>
128
+ </template>
129
+
130
+ <script setup>
131
+ import { ref, onMounted, reactive, computed } from 'vue'
132
+ import { Button, Field, Select, Upload } from '@ozdao/prometheus-framework'
133
+ import { state, actions } from '@pf/src/modules/gallery/store/gallery';
134
+
135
+ import { useRoute } from 'vue-router'
136
+
137
+ const route = useRoute()
138
+
139
+ const isEditablePath = false
140
+
141
+ // Gallery Grid
142
+ const grid = ref(null)
143
+
144
+ const categories = ['all', 'place', 'drinks', 'people', 'events']
145
+
146
+ // Pagination
147
+ let page = 1
148
+ const limit = 10
149
+
150
+ let sentinel = ref(null)
151
+ let loading = ref(false)
152
+
153
+ const filteredGallery = computed(() => {
154
+ if (selectedCategory.value === 'all') {
155
+ return state.gallery
156
+ } else {
157
+ return state.gallery.filter(item => item.categories.includes(selectedCategory.value))
158
+ }
159
+ })
160
+
161
+ const loadMore = async () => {
162
+ loading.value = true
163
+ await actions.fetchGallery(page, limit)
164
+ loading.value = false
165
+ }
166
+
167
+ // Popup
168
+ const modal = ref(null)
169
+ // Popup
170
+ const selectedImage = ref({
171
+ categories: '',
172
+ size: '',
173
+ image: false
174
+ })
175
+
176
+ const previewImage = ref(null)
177
+
178
+ const openModal = (image) => {
179
+ if(isEditablePath.value) {
180
+ // Если мы находимся на пути /account/gallery, открываем редактирование
181
+ openEditModal(image)
182
+ } else {
183
+ // В противном случае открываем просмотр
184
+ modal.value = "modal"
185
+ selectedImage.value.image = image
186
+ disableScroll()
187
+ }
188
+ }
189
+
190
+ const openEditModal = (image) => {
191
+ modal.value = "edit-modal"
192
+ selectedImage.value = image || {
193
+ categories: '',
194
+ size: '',
195
+ image: null
196
+ }
197
+ disableScroll()
198
+ }
199
+
200
+ const closeModal = () => {
201
+ selectedImage.value = {
202
+ categories: '',
203
+ size: '',
204
+ image: false
205
+ }
206
+ previewImage.value = null;
207
+ enableScroll()
208
+ }
209
+
210
+ const disableScroll = () => {
211
+ document.body.style.overflow = 'hidden'
212
+ document.documentElement.style.overflow = 'hidden'
213
+ }
214
+
215
+ const enableScroll = () => {
216
+ document.body.style.overflow = ''
217
+ document.documentElement.style.overflow = ''
218
+ }
219
+
220
+
221
+
222
+ const sizeOptions = [
223
+ { name: 'Small', value: '' },
224
+ { name: 'Regular',value: 'grid-item--width1 grid-item--height1' },
225
+ { name: 'Medium', value: 'grid-item--width2 grid-item--height2' },
226
+ { name: 'Big', value: 'grid-item--width3 grid-item--height3' },
227
+ ];
228
+
229
+
230
+ const deletePhoto = async (id) => {
231
+ await actions.deletePhoto(id);
232
+ };
233
+
234
+ const editPhoto = (photo) => {
235
+ openModal(photo);
236
+ };
237
+
238
+ const updatePhoto = async () => {
239
+ await actions.updatePhoto(selectedImage.value)
240
+ closeModal()
241
+ }
242
+
243
+
244
+ // To handle file input change
245
+ const onFileChange = (e) => {
246
+ const files = e.files;
247
+ selectedImage.value.image = files; // Assign the files array to the image property
248
+
249
+ // Show a preview of the first image if multiple files are selected
250
+ if (files && files.length > 0) {
251
+ const reader = new FileReader()
252
+ reader.onload = e => {
253
+ previewImage.value = e.target.result;
254
+ }
255
+ reader.readAsDataURL(files[0]);
256
+ }
257
+ }
258
+
259
+ // Function to create photo
260
+ const createPhoto = async (e) => {
261
+ // Your function body
262
+ if (!selectedImage.value.image || !selectedImage.value.categories || !selectedImage.value.size) {
263
+ console.error('All fields are required.')
264
+ return
265
+ }
266
+
267
+ await actions.createPhoto({
268
+ ...selectedImage.value,
269
+ size: selectedImage.value.size,
270
+ categories: typeof selectedImage.value.categories === 'string' ? selectedImage.value.categories.split(',').map(item => item.trim()) : selectedImage.value.categories
271
+ })
272
+ closeModal()
273
+ }
274
+
275
+
276
+
277
+ let selectedCategory = ref('all')
278
+
279
+ const filter = (category) => {
280
+ selectedCategory.value = category
281
+ }
282
+
283
+ onMounted(async () => {
284
+ await actions.fetchGallery(page, limit)
285
+
286
+ if (typeof window !== 'undefined') {
287
+ const observer = new IntersectionObserver(entries => {
288
+ if (entries.some(entry => entry.isIntersecting)) {
289
+ page += 1
290
+ loadMore()
291
+ }
292
+ })
293
+
294
+ observer.observe(sentinel.value)
295
+ }
296
+ })
297
+
298
+ </script>
299
+
300
+ <style scoped>
301
+ .grid {
302
+ width: 100%;
303
+ }
304
+ .grid-item {
305
+ width: 33%;
306
+ height: 33vh;
307
+ }
308
+
309
+ .grid-item--width1 {
310
+ width: 50%;
311
+ }
312
+ .grid-item--height1 {
313
+ height: 50vh;
314
+ }
315
+
316
+ .grid-item--width2 {
317
+ width: 66%;
318
+ }
319
+ .grid-item--height2 {
320
+ height: 66vh;
321
+ }
322
+
323
+ .grid-item--width3 {
324
+ width: 100%;
325
+ }
326
+ .grid-item--height3 {
327
+ height: 100vh;
328
+ }
329
+
330
+ .modal {
331
+ position: fixed;
332
+ z-index: 1;
333
+ left: 0;
334
+ top: 0;
335
+ width: 100%;
336
+ height: 100%;
337
+ overflow: auto;
338
+ background-color: rgba(0,0,0,0.9);
339
+ z-index: 50;
340
+ }
341
+
342
+ .modal-content {
343
+ margin: auto;
344
+ /* display: flex;*/
345
+ z-index: 5;
346
+ width: 100%;
347
+ height: 100%;
348
+ overflow: scroll;
349
+ }
350
+
351
+ .close {
352
+ position: fixed;
353
+ top: 3rem;
354
+ right: 4rem;
355
+
356
+ color: #f1f1f1;
357
+ font-size: 40px;
358
+ font-weight: bold;
359
+ transition: 0.3s;
360
+ z-index: 10;
361
+ }
362
+
363
+ .close:hover,
364
+ .close:focus {
365
+ color: #bbb;
366
+ text-decoration: none;
367
+ cursor: pointer;
368
+ }
369
+
370
+ /* Transitions */
371
+ .modal-enter-active, .modal-leave-active {
372
+ transition: opacity .5s;
373
+ }
374
+ .modal-enter, .modal-leave-to {
375
+ opacity: 0;
376
+ }
377
+
378
+ @media screen and (max-width: 1024px) {
379
+ .grid {
380
+ width: 100%;
381
+ }
382
+ .grid-item {
383
+ width: 50%;
384
+ height: 25vh;
385
+ }
386
+
387
+ .grid-item--width1 {
388
+ width: 50%;
389
+ }
390
+ .grid-item--height1 {
391
+ height: 25vh;
392
+ }
393
+
394
+ .grid-item--width2 {
395
+ width: 100%;
396
+ }
397
+ .grid-item--height2 {
398
+ height: 50vh;
399
+ }
400
+
401
+ .grid-item--width3 {
402
+ width: 100%;
403
+ }
404
+ .grid-item--height3 {
405
+ height: 50vh;
406
+ }
407
+ }
408
+ </style>
@@ -1,17 +1,14 @@
1
- // // Importing Vue components from the components directory
2
- // // import Profile from './components/pages/Profile.vue';
3
- // // import ProfileEdit from './components/pages/ProfileEdit.vue';
1
+ import * as galleryStore from './store/gallery.store.js';
4
2
 
5
- // // Importing Vuex store modules from the store directory
6
- // import * as filesStore from './store/files.store.js';
3
+ // Importing Vue Router routes from the router directory
4
+ import galleryRouter from './router/gallery.router.js';
7
5
 
8
- // // Importing Vue Router routes from the router directory
9
- // import filesRoutes from './router/files.router.js';
6
+ import galleryPage from './components/pages/Gallery.vue'
10
7
 
11
- // // Exporting components, store modules, and routes
12
- // export {
13
- // Profile,
14
- // ProfileEdit,
15
- // filesStore,
16
- // filesRoutes
17
- // };
8
+ // Exporting components, store modules, and routes
9
+ export {
10
+ galleryStore,
11
+ galleryRouter,
12
+ filesStore,
13
+ filesRoutes
14
+ };
@@ -0,0 +1,10 @@
1
+ const gallery = [{
2
+ name: 'Gallery',
3
+ path: 'gallery',
4
+ meta: {
5
+ title_hide: true
6
+ },
7
+ component: () => import(/* webpackChunkName: 'Gallery' */ '@pf/src/modules/gallery/components/pages/Gallery.vue'),
8
+ }];
9
+
10
+ export default gallery;
@@ -0,0 +1,22 @@
1
+ <template>
2
+ <header class="w-100" itemprop="name">
3
+ <h2 class="h1" itemprop="headline">
4
+ <span class="text-fade-in">
5
+ <span class="text-splitted">{{ text }}</span>
6
+ </span>
7
+ </h2>
8
+ </header>
9
+ </template>
10
+
11
+ <script setup>
12
+ import { ref, toRefs } from 'vue'
13
+
14
+ const props = defineProps({
15
+ text: {
16
+ type: String,
17
+ default: 'Dreamy Moments Captured'
18
+ }
19
+ })
20
+
21
+ const { text } = toRefs(props)
22
+ </script>
@@ -30,7 +30,10 @@ const marketplace = [
30
30
  }
31
31
  ]
32
32
  },
33
- {
33
+
34
+ ],
35
+
36
+ },{
34
37
  path: 'products/recommendation',
35
38
  name: 'Product Recommmendation',
36
39
  meta: {
@@ -42,8 +45,6 @@ const marketplace = [
42
45
  component: () => import(/* webpackChunkName: 'Product Recommmendation' */ '@pf/src/modules/products/components/pages/ProductRecommmendation.vue'),
43
46
  props: route => ({ mood: route.query.mood })
44
47
  },
45
- ]
46
- }
47
48
  ];
48
49
 
49
50
 
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <section class="feed">
2
+ <section class="pos-relative">
3
3
  <TransitionGroup tag="ul" name="fade" class="o-hidden bg-grey radius-big">
4
4
  <SkeletonOrganization
5
5
  v-if="isLoading"
@@ -16,7 +16,7 @@
16
16
  />
17
17
  </transition>
18
18
 
19
- <TransitionGroup tag="ul" name="fade" class="container">
19
+ <TransitionGroup tag="ul" name="fade" class="cols-1">
20
20
  <CardOrganization
21
21
  v-if="!isLoading && organizationsList.length > 0"
22
22
  @click="$router.push({name: 'Organization', params: {_id: organization._id}})"