@ozdao/prometheus-framework 0.2.29 → 0.2.31

Sign up to get free protection for your applications and to get access to all the features.
Files changed (326) hide show
  1. package/dist/addMembersQuantity-3505b6f3.mjs +98 -0
  2. package/dist/addMembersQuantity-fb552ca0.js +97 -0
  3. package/dist/auth.server.js +6 -9
  4. package/dist/auth.server.mjs +6 -9
  5. package/dist/community.server.js +28 -21
  6. package/dist/community.server.mjs +28 -21
  7. package/dist/events.server.js +1 -1
  8. package/dist/events.server.mjs +1 -1
  9. package/dist/files.server.js +114 -111
  10. package/dist/files.server.mjs +114 -111
  11. package/dist/gallery.server.js +3 -3
  12. package/dist/gallery.server.mjs +3 -3
  13. package/dist/globals.server.js +1 -1
  14. package/dist/globals.server.mjs +1 -1
  15. package/dist/index-a8dffc0c.js +213 -0
  16. package/dist/index-d769324d.mjs +214 -0
  17. package/dist/mailing-37c2ba41.mjs +68 -0
  18. package/dist/mailing-fe16a26a.js +67 -0
  19. package/dist/main.css +1 -1
  20. package/dist/middlewares.server.js +1 -1
  21. package/dist/middlewares.server.mjs +1 -1
  22. package/dist/organizations.server.js +125 -25
  23. package/dist/organizations.server.mjs +125 -25
  24. package/dist/prometheus-framework/src/components/Dropdown/Dropdown.vue.cjs +1 -1
  25. package/dist/prometheus-framework/src/components/Dropdown/Dropdown.vue.js +49 -2
  26. package/dist/prometheus-framework/src/components/Dropdown/Dropdown.vue2.cjs +1 -1
  27. package/dist/prometheus-framework/src/components/Dropdown/Dropdown.vue2.js +2 -49
  28. package/dist/prometheus-framework/src/components/Select/Select.vue.cjs +1 -1
  29. package/dist/prometheus-framework/src/components/Select/Select.vue.js +78 -2
  30. package/dist/prometheus-framework/src/components/Select/Select.vue2.cjs +1 -1
  31. package/dist/prometheus-framework/src/components/Select/Select.vue2.js +2 -78
  32. package/dist/prometheus-framework/src/modules/backoffice/components/pages/Dashboard.vue.cjs +1 -1
  33. package/dist/prometheus-framework/src/modules/backoffice/components/pages/Dashboard.vue.js +1 -1
  34. package/dist/prometheus-framework/src/modules/community/components/layouts/Community.vue.cjs +1 -1
  35. package/dist/prometheus-framework/src/modules/community/components/layouts/Community.vue.js +1 -1
  36. package/dist/prometheus-framework/src/modules/community/components/pages/CreateBlogPost.vue.cjs +1 -1
  37. package/dist/prometheus-framework/src/modules/community/components/pages/CreateBlogPost.vue.js +1 -1
  38. package/dist/prometheus-framework/src/modules/constructor/components/elements/Textarea.vue.cjs +4 -1
  39. package/dist/prometheus-framework/src/modules/constructor/components/elements/Textarea.vue.js +62 -2
  40. package/dist/prometheus-framework/src/modules/constructor/components/elements/Textarea.vue2.cjs +1 -4
  41. package/dist/prometheus-framework/src/modules/constructor/components/elements/Textarea.vue2.js +2 -62
  42. package/dist/prometheus-framework/src/modules/constructor/components/sections/Constructor.vue.cjs +1 -1
  43. package/dist/prometheus-framework/src/modules/constructor/components/sections/Constructor.vue.js +1 -1
  44. package/dist/prometheus-framework/src/modules/events/components/layouts/layoutEvents.vue.cjs +1 -1
  45. package/dist/prometheus-framework/src/modules/events/components/layouts/layoutEvents.vue.js +1 -1
  46. package/dist/prometheus-framework/src/modules/events/components/pages/EditEvent.vue.cjs +1 -1
  47. package/dist/prometheus-framework/src/modules/events/components/pages/EditEvent.vue.js +1 -1
  48. package/dist/prometheus-framework/src/modules/events/components/pages/Events.vue.cjs +1 -1
  49. package/dist/prometheus-framework/src/modules/events/components/pages/Events.vue.js +2 -2
  50. package/dist/prometheus-framework/src/modules/gallery/components/sections/BackofficeGallery.vue.cjs +1 -1
  51. package/dist/prometheus-framework/src/modules/gallery/components/sections/BackofficeGallery.vue.js +1 -1
  52. package/dist/prometheus-framework/src/modules/gallery/components/sections/GalleryWithCategories.vue.cjs +1 -1
  53. package/dist/prometheus-framework/src/modules/gallery/components/sections/GalleryWithCategories.vue.js +1 -1
  54. package/dist/prometheus-framework/src/modules/globals/components/blocks/CardHeader.vue.cjs +1 -1
  55. package/dist/prometheus-framework/src/modules/globals/components/blocks/CardHeader.vue.js +1 -1
  56. package/dist/prometheus-framework/src/modules/legal/components/pages/Legal.vue.cjs +1 -1
  57. package/dist/prometheus-framework/src/modules/legal/components/pages/Legal.vue.js +1 -1
  58. package/dist/prometheus-framework/src/modules/mobile/components/Menu/Menu.vue.cjs +1 -1
  59. package/dist/prometheus-framework/src/modules/mobile/components/Menu/Menu.vue.js +11 -2
  60. package/dist/prometheus-framework/src/modules/mobile/components/Menu/Menu.vue2.cjs +1 -1
  61. package/dist/prometheus-framework/src/modules/mobile/components/Menu/Menu.vue2.js +2 -11
  62. package/dist/prometheus-framework/src/modules/organizations/components/blocks/DepartmentMemberModify.vue.cjs +1 -1
  63. package/dist/prometheus-framework/src/modules/organizations/components/blocks/DepartmentMemberModify.vue.js +1 -1
  64. package/dist/prometheus-framework/src/modules/organizations/components/pages/DepartmentEdit.vue.cjs +1 -1
  65. package/dist/prometheus-framework/src/modules/organizations/components/pages/DepartmentEdit.vue.js +1 -1
  66. package/dist/prometheus-framework/src/modules/organizations/components/pages/Organization.vue.cjs +1 -1
  67. package/dist/prometheus-framework/src/modules/organizations/components/pages/Organization.vue.js +2 -2
  68. package/dist/prometheus-framework/src/modules/organizations/components/pages/OrganizationEdit.vue.cjs +1 -1
  69. package/dist/prometheus-framework/src/modules/organizations/components/pages/OrganizationEdit.vue.js +1 -1
  70. package/dist/prometheus-framework/src/modules/organizations/components/sections/DetailsTab.vue.cjs +1 -1
  71. package/dist/prometheus-framework/src/modules/organizations/components/sections/DetailsTab.vue.js +1 -1
  72. package/dist/prometheus-framework/src/modules/organizations/components/sections/MembersAdd.vue.cjs +1 -1
  73. package/dist/prometheus-framework/src/modules/organizations/components/sections/MembersAdd.vue.js +1 -1
  74. package/dist/prometheus-framework/src/modules/organizations/components/sections/Organizations.vue.cjs +1 -1
  75. package/dist/prometheus-framework/src/modules/organizations/components/sections/Organizations.vue.js +2 -2
  76. package/dist/prometheus-framework/src/modules/reports/components/sections/FormReport.vue.cjs +1 -1
  77. package/dist/prometheus-framework/src/modules/reports/components/sections/FormReport.vue.js +1 -1
  78. package/dist/prometheus-framework/src/modules/users/components/pages/Profile.vue.cjs +1 -1
  79. package/dist/prometheus-framework/src/modules/users/components/pages/Profile.vue.js +2 -2
  80. package/dist/prometheus-framework.cjs.js +30 -29
  81. package/dist/prometheus-framework.es.js +2478 -2282
  82. package/dist/reports.server.js +1 -1
  83. package/dist/reports.server.mjs +1 -1
  84. package/dist/style.css +1 -1
  85. package/dist/users.server.js +1 -1
  86. package/dist/users.server.mjs +1 -1
  87. package/package.json +4 -2
  88. package/src/assets/images/logo.svg +7 -7
  89. package/src/components/Block/Block.vue +77 -0
  90. package/src/components/Breadcrumbs/Breadcrumbs.vue +2 -2
  91. package/src/components/Button/Button.vue +32 -227
  92. package/src/components/Checkbox/Checkbox.vue +1 -1
  93. package/src/components/Chips/Chips.vue +8 -8
  94. package/src/components/DatePicker/DatePicker.vue +3 -4
  95. package/src/components/EditImages/EditImages.vue +32 -14
  96. package/src/{modules/globals/components/sections → components/Feed}/Feed.vue +60 -45
  97. package/src/components/FieldBig/FieldBig.vue +16 -5
  98. package/src/components/FieldPhone/FieldPhone.vue +2 -1
  99. package/src/components/Footer/Footer.vue +36 -27
  100. package/src/components/Header/Header.vue +161 -166
  101. package/src/components/Loader/Loader.vue +9 -2
  102. package/src/components/LocationMarker/LocationMarker.vue +38 -12
  103. package/src/components/LocationSelection/LocationSelection.vue +67 -75
  104. package/src/components/Magnifier/Magnifier.vue +3 -3
  105. package/src/components/Navigation/Navigation.vue +16 -16
  106. package/src/components/Popup/Popup.vue +8 -6
  107. package/src/components/Select/Select.vue +35 -6
  108. package/src/components/SelectMulti/SelectMulti.vue +5 -13
  109. package/src/components/Shader/Shader.vue +128 -0
  110. package/src/components/Sidebar/Sidebar.vue +71 -35
  111. package/src/components/Spoiler/Spoiler.vue +1 -1
  112. package/src/components/Tab/Tab.vue +1 -1
  113. package/src/components/Tooltip/Tooltip.vue +1 -1
  114. package/src/components/UploadImage/UploadImage.vue +4 -4
  115. package/src/components/UploadImageMultiple/UploadImageMultiple.vue +54 -10
  116. package/src/modules/applications/controllers/applications.controller.js +0 -1
  117. package/src/modules/auth/components/pages/EnterCode.vue +1 -1
  118. package/src/modules/auth/components/pages/EnterPassword.vue +3 -3
  119. package/src/modules/auth/components/pages/ResetPassword.vue +1 -2
  120. package/src/modules/auth/components/pages/SignIn.vue +26 -10
  121. package/src/modules/auth/components/pages/SignUp.vue +1 -2
  122. package/src/modules/auth/controllers/twofa.controller.js +4 -4
  123. package/src/modules/auth/localization/EnterCode.json +2 -2
  124. package/src/modules/auth/localization/EnterPassword.json +2 -2
  125. package/src/modules/auth/localization/ResetPassword.json +2 -2
  126. package/src/modules/auth/localization/SignIn.json +3 -3
  127. package/src/modules/auth/localization/SignUp.json +3 -3
  128. package/src/modules/auth/utils/server/verifyAppleIdToken.js +0 -1
  129. package/src/modules/backoffice/components/layouts/Backoffice.vue +1 -1
  130. package/src/modules/backoffice/components/pages/Dashboard.vue +171 -120
  131. package/src/modules/backoffice/router/backoffice.js +119 -129
  132. package/src/modules/chats/components/blocks/ChatMessage.vue +25 -0
  133. package/src/modules/chats/components/pages/ChatPage.vue +50 -0
  134. package/src/modules/chats/components/sections/ChatWindow.vue +38 -0
  135. package/src/modules/chats/controllers/chats.controller.js +32 -0
  136. package/src/modules/chats/models/chat.model.js +26 -0
  137. package/src/modules/chats/routes/chats.routes.js +53 -0
  138. package/src/modules/chats/store/chat.store.js +61 -0
  139. package/src/modules/community/components/blocks/CardBlogpost.vue +19 -4
  140. package/src/modules/community/components/layouts/Community.vue +96 -39
  141. package/src/modules/community/components/pages/Blog.vue +4 -3
  142. package/src/modules/community/components/pages/BlogPost.vue +10 -1
  143. package/src/modules/community/components/pages/CreateBlogPost.vue +36 -17
  144. package/src/modules/community/components/sections/HotPosts.vue +3 -3
  145. package/src/modules/community/components/sections/JoinUs.vue +19 -13
  146. package/src/modules/community/controllers/blog.controller.js +3 -4
  147. package/src/modules/community/controllers/utils/queryProcessor.js +16 -17
  148. package/src/modules/community/models/blogpost.model.js +6 -3
  149. package/src/modules/community/store/blogposts.js +1 -0
  150. package/src/modules/constructor/components/elements/Embed.vue +12 -1
  151. package/src/modules/constructor/components/elements/ImageUpload.vue +2 -2
  152. package/src/modules/constructor/components/elements/Textarea.vue +6 -1
  153. package/src/modules/constructor/components/elements/Video.vue +79 -0
  154. package/src/modules/constructor/components/elements/VideoPlayer.vue +59 -0
  155. package/src/modules/constructor/components/elements/Youtube.vue +52 -0
  156. package/src/modules/constructor/components/sections/Constructor.vue +27 -3
  157. package/src/modules/events/components/layouts/layoutEvents.vue +7 -28
  158. package/src/modules/files/controllers/files.controller.js +9 -22
  159. package/src/modules/files/middlewares/server/index.js +2 -2
  160. package/src/modules/files/middlewares/server/middlewareBusboy.js +137 -0
  161. package/src/modules/files/routes/files.routes.js +9 -9
  162. package/src/modules/globals/localization/vue-i18n.js +8 -1
  163. package/src/modules/globals/mixins/mixins.js +23 -13
  164. package/src/modules/globals/router/routerGuards.js +2 -2
  165. package/src/modules/globals/store/globals.js +86 -9
  166. package/src/modules/globals/utils/mailing.js +24 -3
  167. package/src/modules/icons/entities/IconCommunity.vue +4 -4
  168. package/src/modules/icons/entities/IconEvents.vue +1 -1
  169. package/src/modules/icons/entities/IconGroups.vue +1 -1
  170. package/src/modules/icons/entities/IconPrice.vue +5 -0
  171. package/src/modules/icons/entities/IconProfile.vue +5 -0
  172. package/src/modules/icons/entities/IconShopcart.vue +5 -0
  173. package/src/modules/icons/entities/IconTime.vue +5 -0
  174. package/src/modules/icons/icons.client.js +4 -0
  175. package/src/modules/icons/labels/LabelAppStore.vue +24 -24
  176. package/src/modules/icons/labels/LabelGooglePlay.vue +9 -9
  177. package/src/modules/icons/logos/Logotype.vue +20 -0
  178. package/src/modules/icons/navigation/IconAdd.vue +17 -0
  179. package/src/modules/icons/navigation/IconChevronBottom.vue +18 -0
  180. package/src/modules/icons/navigation/IconChevronRight.vue +3 -3
  181. package/src/modules/icons/navigation/IconDelete.vue +19 -0
  182. package/src/modules/icons/navigation/IconMinus.vue +15 -0
  183. package/src/modules/icons/navigation/IconSearch.vue +17 -0
  184. package/src/modules/icons/navigation/IconUpload.vue +16 -0
  185. package/src/modules/icons/placeholders/PlaceholderImage.vue +5 -0
  186. package/src/modules/icons/placeholders/PlaceholderOrganizationPic.vue +20 -0
  187. package/src/modules/icons/placeholders/PlaceholderUserpic.vue +4 -18
  188. package/src/modules/icons/socials/instagram.vue +1 -1
  189. package/src/modules/icons/socials/line.vue +1 -1
  190. package/src/modules/icons/socials/reddit.vue +1 -1
  191. package/src/modules/icons/socials/telegram.vue +1 -1
  192. package/src/modules/icons/socials/twitter.vue +1 -1
  193. package/src/modules/icons/socials/youtube.vue +1 -1
  194. package/src/modules/landing/components/sections/Guide.vue +92 -0
  195. package/src/modules/landing/components/sections/MobileApp.vue +23 -12
  196. package/src/modules/marketplace/components/layouts/Marketplace.vue +76 -188
  197. package/src/modules/marketplace/components/pages/Catalog.vue +65 -119
  198. package/src/modules/marketplace/components/sections/Filters.vue +195 -0
  199. package/src/modules/marketplace/store/marketplace.js +2 -2
  200. package/src/modules/middlewares/client/auth.validation.js +0 -6
  201. package/src/modules/middlewares/client/states.validation.js +2 -8
  202. package/src/modules/middlewares/server/authJwt.js +1 -1
  203. package/src/modules/mobile/components/Menu/MenuItem.vue +3 -6
  204. package/src/modules/openai/controllers/openai.controller.js +0 -1
  205. package/src/modules/orders/components/blocks/CardOrder.vue +166 -0
  206. package/src/modules/orders/components/blocks/CardOrderItem.vue +59 -66
  207. package/src/modules/orders/components/blocks/Positions.vue +4 -4
  208. package/src/modules/orders/components/pages/EditOrder.vue +78 -142
  209. package/src/modules/orders/components/pages/FormOrder.vue +192 -0
  210. package/src/modules/orders/components/pages/Order.vue +326 -120
  211. package/src/modules/orders/components/pages/Orders.vue +13 -9
  212. package/src/modules/orders/components/pages/{ViewOrder.vue → Orders_refact.vue} +13 -10
  213. package/src/modules/orders/components/partials/ShopCart.vue +22 -13
  214. package/src/modules/orders/components/sections/EmptyState.vue +1 -1
  215. package/src/modules/orders/components/sections/{Form.vue → FormOrderDetails.vue} +38 -106
  216. package/src/modules/orders/controllers/orders.controller.js +37 -28
  217. package/src/modules/orders/models/order.model.js +39 -9
  218. package/src/modules/orders/router/orders.router.js +23 -2
  219. package/src/modules/orders/routes/orders.routes.js +14 -17
  220. package/src/modules/orders/store/orders.js +24 -9
  221. package/src/modules/orders/store/shopcart.js +20 -19
  222. package/src/modules/organizations/components/blocks/CardDepartment.vue +1 -1
  223. package/src/modules/organizations/components/blocks/CardOrganization.vue +98 -46
  224. package/src/modules/organizations/components/blocks/Rating.vue +1 -1
  225. package/src/modules/organizations/components/blocks/Socials.vue +11 -3
  226. package/src/modules/organizations/components/elements/ButtonToggleMembership.vue +1 -1
  227. package/src/modules/organizations/components/pages/Department.vue +1 -1
  228. package/src/modules/organizations/components/pages/DepartmentEdit.vue +4 -4
  229. package/src/modules/organizations/components/pages/Members.vue +6 -4
  230. package/src/modules/organizations/components/pages/Organization.vue +120 -49
  231. package/src/modules/organizations/components/pages/OrganizationEdit.vue +8 -1
  232. package/src/modules/organizations/components/pages/Organizations.vue +27 -6
  233. package/src/modules/organizations/components/sections/DetailsTab.vue +11 -9
  234. package/src/modules/organizations/components/sections/Feed.vue +0 -3
  235. package/src/modules/organizations/components/sections/FeedDepartments.vue +2 -2
  236. package/src/modules/organizations/controllers/organizations.controller.js +126 -15
  237. package/src/modules/organizations/controllers/utils/addMembersQuantity.js +19 -9
  238. package/src/modules/organizations/models/organization.model.js +5 -2
  239. package/src/modules/organizations/router/members.router.js +1 -3
  240. package/src/modules/organizations/router/organizations.js +8 -6
  241. package/src/modules/organizations/router/products.router.js +36 -2
  242. package/src/modules/organizations/store/organizations.js +38 -84
  243. package/src/modules/pages/controllers/pages.controller.js +0 -4
  244. package/src/modules/payments/controller/payments.controller.js +1 -1
  245. package/src/modules/products/components/blocks/CardLeftover.vue +17 -22
  246. package/src/modules/products/components/blocks/CardPosition.vue +96 -49
  247. package/src/modules/products/components/blocks/CardProduct.vue +24 -53
  248. package/src/modules/products/components/blocks/Images360.vue +4 -4
  249. package/src/modules/products/components/blocks/ImagesThumbnails.vue +2 -7
  250. package/src/modules/products/components/blocks/ListPositions.vue +74 -0
  251. package/src/modules/products/components/elements/Price.vue +11 -5
  252. package/src/modules/products/components/elements/THC.vue +6 -6
  253. package/src/modules/products/components/pages/{LeftoverAdd.vue → EditLeftover.vue} +93 -79
  254. package/src/modules/products/components/pages/Leftovers.vue +74 -70
  255. package/src/modules/products/components/pages/Product.vue +4 -7
  256. package/src/modules/products/components/pages/ProductEdit.vue +230 -88
  257. package/src/modules/products/components/pages/ProductRecommmendation.vue +1 -1
  258. package/src/modules/products/components/pages/Products.vue +6 -3
  259. package/src/modules/products/components/pages/ProductsBackoffice.vue +3 -5
  260. package/src/modules/products/components/sections/EditModifications.vue +3 -3
  261. package/src/modules/products/components/sections/EditProductInfo.vue +40 -50
  262. package/src/modules/products/components/sections/FilterProducts.vue +57 -18
  263. package/src/modules/products/components/sections/HeroRecommendation.vue +233 -99
  264. package/src/modules/products/components/sections/MenuSection.vue +127 -0
  265. package/src/modules/products/components/sections/PopularProducts.vue +81 -37
  266. package/src/modules/products/components/sections/SectionProduct.vue +21 -23
  267. package/src/modules/products/controllers/leftovers.controller.js +11 -1
  268. package/src/modules/products/controllers/products.controller.js +100 -97
  269. package/src/modules/products/models/leftover.model.js +6 -4
  270. package/src/modules/products/models/product.model.js +13 -1
  271. package/src/modules/products/routes/products.routes.js +4 -4
  272. package/src/modules/products/store/leftovers.js +4 -24
  273. package/src/modules/products/store/products.js +44 -30
  274. package/src/modules/spots/components/blocks/CardSpot.vue +43 -72
  275. package/src/modules/spots/components/layouts/Spots.vue +9 -91
  276. package/src/modules/spots/components/pages/Map.vue +171 -62
  277. package/src/modules/spots/components/pages/Spot.vue +1 -1
  278. package/src/modules/spots/components/pages/SpotEdit.vue +131 -174
  279. package/src/modules/spots/controllers/spots.controller.js +1 -0
  280. package/src/modules/spots/models/spot.model.js +6 -3
  281. package/src/modules/spots/store/spots.js +42 -48
  282. package/src/modules/users/components/pages/Profile.vue +6 -28
  283. package/src/modules/users/components/pages/ProfileBlogposts.vue +1 -1
  284. package/src/modules/users/components/pages/ProfileEdit.vue +1 -1
  285. package/src/modules/users/components/pages/ProfileEvents.vue +1 -1
  286. package/src/modules/users/components/pages/ProfileOrganizations.vue +1 -1
  287. package/src/modules/users/router/users.js +1 -1
  288. package/src/modules/wallet/components/pages/Wallet.vue +105 -109
  289. package/src/modules/wallet/controllers/crypto.controller.js +129 -0
  290. package/src/modules/wallet/models/reward.model.js +53 -0
  291. package/src/modules/wallet/routes/crypto.routes.js +36 -0
  292. package/src/modules/wallet/store/wallet.js +52 -49
  293. package/src/styles/base/all.scss +144 -12
  294. package/src/styles/base/backgrounds.scss +2 -34
  295. package/src/styles/base/borders.scss +18 -23
  296. package/src/styles/base/scrolling.scss +97 -29
  297. package/src/styles/base/{shadows.scss → shadow_transitions_hover_refactor.scss} +55 -2
  298. package/src/styles/config.scss +69 -17
  299. package/src/styles/layout.scss +12 -182
  300. package/src/styles/reset.scss +20 -21
  301. package/src/styles/responsive.scss +4 -67
  302. package/src/styles/theme.scss +3 -4
  303. package/src/styles/typography.scss +15 -17
  304. package/src/assets/fonts/AvenirNext-Bold.woff2 +0 -0
  305. package/src/assets/fonts/AvenirNext-DemiBold.woff2 +0 -0
  306. package/src/assets/fonts/AvenirNext-Heavy.woff2 +0 -0
  307. package/src/assets/fonts/AvenirNext-Medium.woff2 +0 -0
  308. package/src/assets/fonts/AvenirNext-Regular.woff2 +0 -0
  309. package/src/assets/fonts/AvenirNext-UltraLight.woff2 +0 -0
  310. package/src/modules/files/middlewares/server/md.js +0 -152
  311. package/src/modules/files/middlewares/server/middlewareMulter.js +0 -121
  312. package/src/modules/organizations/controllers/organizations.new.controller.js +0 -372
  313. package/src/modules/products/components/blocks/EditCategories.vue +0 -68
  314. package/src/modules/products/components/sections/EditParameters.vue +0 -58
  315. package/src/modules/products/components/sections/EditProductImages.vue +0 -67
  316. package/src/modules/spots/components/sections/Feed.vue +0 -64
  317. package/src/styles/base/border-radius.scss +0 -47
  318. package/src/styles/base/cursors.scss +0 -23
  319. package/src/styles/base/height.scss +0 -60
  320. package/src/styles/base/hovers.scss +0 -110
  321. package/src/styles/base/positions.scss +0 -192
  322. package/src/styles/base/transitions.scss +0 -137
  323. package/src/styles/base/width.scss +0 -2
  324. package/src/styles/components/block.scss +0 -18
  325. package/src/styles/components/breadcrumbs.scss +0 -0
  326. package/src/styles/components/input.scss +0 -319
@@ -1,15 +1,12 @@
1
1
  <template>
2
2
  <div class="pd-medium bg-grey radius-big">
3
- <h3 class="mn-b-small">{{ t('filters.title') }}</h3>
4
- <hr class="mn-b-small">
5
-
6
3
  <!-- Categories Filter -->
7
4
  <Spoiler
8
5
  class="radius-small o-hidden br-1px br-solid br-grey mn-b-small"
9
6
  :status="true"
10
7
  >
11
8
  <template #header>
12
- <p class="mn-r-auto t-medium p-big">{{ t('categoriesTitle') }}</p>
9
+ <p class="cursor-pointer mn-r-auto t-medium p-big">{{ t('categoriesTitle') }}</p>
13
10
  <!-- SVG Icon -->
14
11
  </template>
15
12
  <template #content>
@@ -19,8 +16,8 @@
19
16
  :label="category.name"
20
17
  :value="category.url"
21
18
  class="w-100 mn-t-small mn-b-small bg-white radius-small pd-small"
22
- :radio="selectedFilters.categories"
23
- @change="emitFilterChange('categories', category.url)"
19
+ :radio="store.marketplace.state.filter.categories"
20
+ @update:radio="event => store.marketplace.state.filter.categories = event"
24
21
  />
25
22
  </template>
26
23
  </Spoiler>
@@ -33,7 +30,7 @@
33
30
  :status="false"
34
31
  >
35
32
  <template #header>
36
- <p class="mn-r-auto t-medium p-big">{{ t('filters.price.title') }}</p>
33
+ <p class="cursor-pointer mn-r-auto t-medium p-big">{{ t('filters.price.title') }}</p>
37
34
  <!-- SVG Icon -->
38
35
  </template>
39
36
  <template #content>
@@ -43,8 +40,8 @@
43
40
  :label="price.label"
44
41
  :value="price.value"
45
42
  class="w-100 mn-t-small bg-white radius-small pd-small"
46
- :radio="selectedFilters.prices"
47
- @change="emitFilterChange('prices', price.value)"
43
+ :radio="store.marketplace.state.filter.prices"
44
+ @update:radio="event => store.marketplace.state.filter.prices = event"
48
45
  />
49
46
  </template>
50
47
  </Spoiler>
@@ -57,7 +54,7 @@
57
54
  :status="false"
58
55
  >
59
56
  <template #header>
60
- <p class="mn-r-auto t-medium p-big">Delivery</p>
57
+ <p class="cursor-pointer mn-r-auto t-medium p-big">Delivery</p>
61
58
  <!-- SVG Icon -->
62
59
  </template>
63
60
  <template #content>
@@ -67,8 +64,8 @@
67
64
  :label="deliveryOption.label"
68
65
  :value="deliveryOption.value"
69
66
  class="w-100 mn-t-small bg-white radius-small pd-small"
70
- :radio="selectedFilters.delivery"
71
- @change="emitFilterChange('delivery', deliveryOption.value)"
67
+ :radio="store.marketplace.state.filter.delivery"
68
+ @update:radio="event => store.marketplace.state.filter.delivery = event"
72
69
  />
73
70
  </template>
74
71
  </Spoiler>
@@ -81,12 +78,18 @@
81
78
  </template>
82
79
 
83
80
  <script setup>
84
- import { ref, watch } from 'vue'
81
+ import { ref, watch, onMounted } from 'vue'
85
82
 
86
83
  import Spoiler from "@pf/src/components/Spoiler/Spoiler.vue"
87
84
  import Checkbox from "@pf/src/components/Checkbox/Checkbox.vue"
88
85
 
89
86
  import { useI18n } from 'vue-i18n'
87
+ import { useStore } from '@/store'
88
+ import { useRoute, useRouter,onBeforeRouteLeave } from 'vue-router'
89
+
90
+ const store = useStore()
91
+ const route = useRoute()
92
+ const router = useRouter()
90
93
 
91
94
  import * as categories from '@pf/src/modules/products/store/categories';
92
95
 
@@ -105,11 +108,11 @@ const props = defineProps({
105
108
  prices: {
106
109
  type: Array,
107
110
  default: () => [
108
- { label: 'Under $5', value: { min: 0, max: 5 } },
109
- { label: '$5 to $10', value: { min: 5, max: 10 } },
110
- { label: '$10 to $20', value: { min: 10, max: 20 } },
111
- { label: '$20 and above', value: { min: 20, max: Infinity } }
112
- ]
111
+ { label: 'Under 300฿', value: '<300' },
112
+ { label: '300฿ to 600฿', value: '300-600' },
113
+ { label: '600฿ to 1200฿', value: '600-1200' },
114
+ { label: '$1200 and above', value: '>1200' }
115
+ ]
113
116
  },
114
117
  deliveryOptions: {
115
118
  type: Array,
@@ -121,6 +124,42 @@ const props = defineProps({
121
124
  }
122
125
  })
123
126
 
127
+ watch(() => store.marketplace.state.filter, (newFilterValue, oldFilterValue) => {
128
+ // Переводим фильтр в формат query
129
+ const query = { ...route.query };
130
+
131
+ // Удаляем старые значения фильтра из query
132
+ Object.keys(oldFilterValue).forEach(key => {
133
+ if (query[key]) {
134
+ delete query[key];
135
+ }
136
+ });
137
+
138
+ // Добавляем новые значения фильтра в query
139
+ const newQueryValues = Object.fromEntries(
140
+ Object.entries(newFilterValue)
141
+ .filter(([key, value]) => Array.isArray(value) && value.length > 0)
142
+ .map(([key, value]) => [key, value.join(',')])
143
+ );
144
+ Object.assign(query, newQueryValues);
145
+
146
+ // Обновляем маршрут с новым query
147
+ router.push({ query });
148
+ }, { deep: true })
149
+
150
+ onMounted(async () => {
151
+ if (route.query) {
152
+ const query = route.query;
153
+ const newFilterValue = {
154
+ categories: query.categories ? query.categories.split(',') : [],
155
+ prices: query.prices ? query.prices.split(',') : [],
156
+ delivery: query.delivery ? query.delivery.split(',') : [],
157
+ // Продолжайте этот паттерн для остальных полей фильтра
158
+ };
159
+ store.marketplace.state.filter = newFilterValue;
160
+ }
161
+ })
162
+
124
163
  const emit = defineEmits(['updateFilters', 'resetFilters'])
125
164
 
126
165
  const emitFilterChange = (filterType, value) => {
@@ -1,50 +1,5 @@
1
- <i18n>
2
- {
3
- "en": {
4
- "title": "Increase Your High,<br><b class='t-main'>Powered by AI Budtender</b>",
5
- "description": "AI at the helm of your chill, bro. We tailor the most cosmic weed products to your desired vibe!",
6
- "placeholderTexts": [
7
- 'I want lowest THC',
8
- 'I want something with banana',
9
- 'I want to smoke haze'
10
- ],
11
- "subdescription": "Or, select a tag, and our AI will guide you to the dopest selections:",
12
- "presets": {
13
- "sleep": "sleep",
14
- "creative": "creative",
15
- "giggly": "giggly",
16
- "libido": "libido",
17
- "trippy": "trippy",
18
- "euphoric": "euphoric"
19
- },
20
- "placeholder": "Describe your desired high, bro...",
21
- "action": "Transmit&nbsp→"
22
- },
23
- "ru": {
24
- "title": "Персональный Накур,<br><b class='t-main'>Напрямую от AI</b>",
25
- "description": "AI на страже твоего релакса, бро. Мы подбираем самые космические товары с учетом твоего желаемого настроения:",
26
- "placeholderTexts": [
27
- 'Я хочу самый низкий THC',
28
- 'Я хочу чего-нибудь бананового',
29
- 'Я хочу курнуть хейза'
30
- ],
31
- "presets": {
32
- "sleep": "сон",
33
- "creative": "креатив",
34
- "giggly": "смех",
35
- "libido": "либидо",
36
- "trippy": "трип",
37
- "euphoric": "кайф"
38
- },
39
- "subdescription": "Или выберите тег, и наш AI направит тебя к самым крутым вариантам:",
40
- "placeholder": "Опиши свой желаемый хай, bro...",
41
- "action": "Передать&nbsp→"
42
- }
43
- }
44
- </i18n>
45
-
46
1
  <script setup>
47
- import { ref } from 'vue'
2
+ import { ref, onMounted } from 'vue'
48
3
 
49
4
  import FieldBig from "@pf/src/components/FieldBig/FieldBig.vue";
50
5
 
@@ -55,10 +10,52 @@
55
10
 
56
11
  const router = useRouter()
57
12
 
58
- const { t } = useI18n({
59
- inheritLocale: true,
60
- useScope: 'local'
61
- })
13
+ const text = {
14
+ messages: {
15
+ "en": {
16
+ "title": "Unlock Your Perfect High <br><b class='t-main'> with AI Budtender</b>",
17
+ "description": "Say goodbye to endless browsing. Just tell us what you're want, and Weeder will find your ideal match.",
18
+ "placeholderTexts": [
19
+ 'Lowest THC, please!',
20
+ 'Something with banana flavors?',
21
+ "I'm in the mood for trippy vibes."
22
+ ],
23
+ "subdescription": "AI Curated Recommendations for Your Mood:",
24
+ "presets": {
25
+ "sleep": "sleep",
26
+ "creative": "creative",
27
+ "giggly": "giggly",
28
+ "libido": "libido",
29
+ "trippy": "trippy",
30
+ "euphoric": "euphoric"
31
+ },
32
+ "placeholder": "Tell us what you're after...",
33
+ "action": "Transmit&nbsp→"
34
+ },
35
+ "ru": {
36
+ "title": "Персональный Накур,<br><b class='t-main'>Напрямую от AI</b>",
37
+ "description": "AI на страже твоего релакса, бро. Мы подбираем самые космические товары с учетом твоего желаемого настроения:",
38
+ "placeholderTexts": [
39
+ 'Я хочу самый низкий THC',
40
+ 'Я хочу чего-нибудь бананового',
41
+ 'Я хочу курнуть хейза'
42
+ ],
43
+ "presets": {
44
+ "sleep": "сон",
45
+ "creative": "креатив",
46
+ "giggly": "смех",
47
+ "libido": "либидо",
48
+ "trippy": "трип",
49
+ "euphoric": "кайф"
50
+ },
51
+ "subdescription": "Или выберите тег, и наш AI направит тебя к самым крутым вариантам:",
52
+ "placeholder": "Опиши свой желаемый хай, bro...",
53
+ "action": "Передать&nbsp→"
54
+ }
55
+ }
56
+ }
57
+
58
+ const { t, rt } = useI18n(text)
62
59
 
63
60
  let mood = ref('')
64
61
 
@@ -68,6 +65,165 @@
68
65
  const moodToSend = presetMood || mood.value;
69
66
  await products.actions.submitMood(moodToSend);
70
67
  }
68
+
69
+ onMounted(() => {
70
+ // const canvas = document.getElementById('glcanvas');
71
+ // const gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');
72
+
73
+ // const vsSource = `
74
+ // attribute vec4 aVertexPosition;
75
+ // void main() {
76
+ // gl_Position = aVertexPosition;
77
+ // }
78
+ // `;
79
+
80
+ // // Fragment shader (your GLSL code goes here)
81
+ // const fsSource = `
82
+ // precision mediump float;
83
+
84
+ // const float PI = 3.14159265358979323846264;
85
+ // const float TWOPI = PI * 2.0;
86
+ // const vec4 WHITE = vec4(0.05, 0.05, 0.05, 1); // Для цвета F6F9F7
87
+ // const vec4 BLACK = vec4(0.0, 0.0, 0.0, 1); // Для цвета EBF2ED
88
+
89
+ // const int MAX_RINGS = 30;
90
+ // const float RING_DISTANCE = 0.03;
91
+ // const float WAVE_COUNT = 60.0;
92
+ // const float WAVE_DEPTH = 0.08;
93
+
94
+ // uniform float iTime;
95
+ // uniform vec2 iResolution;
96
+
97
+ // void main() {
98
+ // float rot = mod(iTime * 0.6, TWOPI);
99
+ // vec2 fragCoord = gl_FragCoord.xy;
100
+ // vec2 pos = vec2(fragCoord.x / iResolution.x, fragCoord.y / iResolution.y);
101
+ // pos = vec2(3.0 * (pos.x - 0.5), 3.0 * (pos.y - 0.4));
102
+ // float x = pos.x;
103
+ // float y = pos.y;
104
+
105
+ // bool black = false;
106
+ // float prevRingDist = RING_DISTANCE;
107
+ // for (int i = 0; i < MAX_RINGS; i++) {
108
+ // vec2 center = vec2(0.0, 0.7 - RING_DISTANCE * float(i) * 1.2);
109
+ // float radius = 0.5 + RING_DISTANCE / (pow(float(i + 5), 1.1) * 0.006);
110
+ // float dist = distance(center, pos);
111
+ // dist = pow(dist, 0.3);
112
+ // float ringDist = abs(dist - radius);
113
+ // if (ringDist < RING_DISTANCE * prevRingDist * 7.0) {
114
+ // float angle = atan(y - center.y, x - center.x);
115
+ // float thickness = 1.1 * abs(dist - radius) / prevRingDist;
116
+ // float depthFactor = WAVE_DEPTH * sin((angle + rot * radius) * WAVE_COUNT);
117
+ // if (dist > radius) {
118
+ // black = (thickness < RING_DISTANCE * 5.0 - depthFactor * 2.0);
119
+ // } else {
120
+ // black = (thickness < RING_DISTANCE * 5.0 + depthFactor);
121
+ // }
122
+ // break;
123
+ // }
124
+ // if (dist > radius) break;
125
+ // prevRingDist = ringDist;
126
+ // }
127
+
128
+ // gl_FragColor = black ? BLACK : WHITE;
129
+ // }
130
+
131
+ // `;
132
+
133
+ // function compileShader(gl, type, source) {
134
+ // const shader = gl.createShader(type);
135
+ // gl.shaderSource(shader, source);
136
+ // gl.compileShader(shader);
137
+
138
+ // // Check for compilation errors
139
+ // if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
140
+ // alert('An error occurred compiling the shaders: ' + gl.getShaderInfoLog(shader));
141
+ // gl.deleteShader(shader);
142
+ // return null;
143
+ // }
144
+
145
+ // return shader;
146
+ // }
147
+
148
+ // const vertexShader = compileShader(gl, gl.VERTEX_SHADER, vsSource);
149
+ // const fragmentShader = compileShader(gl, gl.FRAGMENT_SHADER, fsSource);
150
+
151
+ // // Create the shader program
152
+ // const shaderProgram = gl.createProgram();
153
+
154
+ // gl.attachShader(shaderProgram, vertexShader);
155
+ // gl.attachShader(shaderProgram, fragmentShader);
156
+ // gl.linkProgram(shaderProgram);
157
+
158
+ // // Check for linking errors
159
+ // if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) {
160
+ // alert('Unable to initialize the shader program: ' + gl.getProgramInfoLog(shaderProgram));
161
+ // }
162
+
163
+ // function resizeCanvasToDisplaySize(canvas) {
164
+ // const width = canvas.clientWidth * window.devicePixelRatio;
165
+ // const height = canvas.clientHeight * window.devicePixelRatio;
166
+ // if (canvas.width !== width || canvas.height !== height) {
167
+ // canvas.width = width;
168
+ // canvas.height = height;
169
+ // return true; // размер изменился
170
+ // }
171
+ // return false; // размер не изменился
172
+ // }
173
+
174
+
175
+ // function render() {
176
+ // if (resizeCanvasToDisplaySize(gl.canvas)) {
177
+ // gl.viewport(0, 0, gl.canvas.width, gl.canvas.height);
178
+ // }
179
+ // gl.clearColor(0.0, 0.0, 0.0, 1.0); // Clear to black, fully opaque
180
+ // gl.clearDepth(1.0); // Clear everything
181
+ // gl.enable(gl.DEPTH_TEST); // Enable depth testing
182
+ // gl.depthFunc(gl.LEQUAL); // Near things obscure far things
183
+
184
+ // // Clear the canvas before we start drawing on it
185
+ // gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
186
+
187
+ // // Set the shader program
188
+ // gl.useProgram(shaderProgram);
189
+
190
+ // // Set up geometry, attributes, uniforms here
191
+ // // Create a buffer for the square's positions
192
+ // const positionBuffer = gl.createBuffer();
193
+ // gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);
194
+
195
+ // // Now create an array of positions for the square
196
+ // const positions = [
197
+ // -1.0, 1.0,
198
+ // 1.0, 1.0,
199
+ // -1.0, -1.0,
200
+ // 1.0, -1.0,
201
+ // ];
202
+
203
+ // // Pass the positions to WebGL
204
+ // gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(positions), gl.STATIC_DRAW);
205
+
206
+ // // Tell WebGL how to pull out the positions from the position buffer
207
+ // const vertexPosition = gl.getAttribLocation(shaderProgram, 'aVertexPosition');
208
+ // gl.vertexAttribPointer(vertexPosition, 2, gl.FLOAT, false, 0, 0);
209
+ // gl.enableVertexAttribArray(vertexPosition);
210
+
211
+ // // Set the shader uniforms
212
+ // var timeUniformLocation = gl.getUniformLocation(shaderProgram, 'iTime');
213
+ // var resolutionUniformLocation = gl.getUniformLocation(shaderProgram, 'iResolution');
214
+
215
+ // gl.uniform1f(timeUniformLocation, performance.now() / 3000.0);
216
+ // gl.uniform2f(resolutionUniformLocation, gl.canvas.width, gl.canvas.height);
217
+
218
+ // // Draw the scene
219
+ // gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
220
+
221
+ // // Call render again on the next frame
222
+ // requestAnimationFrame(render);
223
+ // }
224
+ // requestAnimationFrame(render);
225
+
226
+ });
71
227
  </script>
72
228
 
73
229
  <template>
@@ -77,102 +233,80 @@
77
233
  >
78
234
 
79
235
  <div
80
- class="pd-big radius-big o-hidden bg-black-gradient"
236
+ class="pd-big bg-black t-white pos-relative radius-big o-hidden "
81
237
  >
82
- <div class="flex-column flex-center flex t-center z-index-1">
238
+ <div class="flex-column flex-center flex t-center pos-relative z-index-1">
83
239
 
84
240
  <h1
85
- class="t-white mn-b-semi"
241
+ class="mn-b-semi"
86
242
  v-html="t('title')"
87
243
  />
88
244
 
89
245
  <p
90
- class="mn-b-big p-big t-transp t-white "
246
+ style="max-width: 40rem;"
247
+ class="mn-b-big p-big t-medium t-transp"
91
248
  v-html="t('description')"
92
249
  />
93
250
 
94
251
  <FieldBig
252
+ style="max-width: 60rem;"
95
253
  :input="mood"
96
- :placeholderTexts="t('placeholderTexts')"
97
- :typingSpeed="75"
98
- :loopTyping="false"
99
- :enableTyping="false"
254
+ :typingSpeed="100"
255
+ :loopTyping="true"
256
+ :enableTyping="true"
100
257
  :placeholder="t('placeholder')"
101
258
  :action="t('action')"
102
259
  @update:input="mood = $event"
103
260
  @action="router.push({name: 'Product Recommmendation', query: {mood: mood}})"
104
- class="mn-b-big bg-white-transp-5 t-white bg-blur-medium w-m-40r"
261
+ class="mn-b-big pd-big bg-black-transp-50 bg-blur-thin w-100"
105
262
  />
106
263
 
107
264
  <p
108
- class="w-m-60r t-white t-transp mn-b-semi p-medium"
265
+ class="w-m-60r t-medium t-transp mn-b-semi p-medium"
109
266
  v-html="t('subdescription')"
110
267
  />
111
268
 
112
- <div class="cols-6">
269
+ <div style="max-width: 50rem;" class="w-100 h-max gap-thin cols-6">
113
270
 
114
- <button
271
+ <a
115
272
  v-for="(preset,index) in presets"
116
273
  :key="preset"
117
- @click="router.push({name: 'Product Recommmendation', query: {mood: preset}})"
274
+ @click.stop="router.push({name: 'Product Recommmendation', query: {mood: preset}})"
118
275
  class="
119
276
  uppercase
120
- t-white
277
+ pd-thin
121
278
  t-semi
122
- bg-transp
123
- flex-h-center
124
- flex-v-center
279
+ flex-center
125
280
  flex-column
281
+ flex-nowrap
126
282
  flex
283
+ bg-black-transp-50
284
+ bg-blur-thin
285
+ radius-semi
127
286
  cursor-pointer
128
287
  transition-elastic
129
288
  hover-easeInOut-1
130
289
  "
131
290
  >
132
291
  <img
133
- :src="(FILE_SERVER_URL || '') + '/icons/moods/' + preset + '.png'"
134
- class="h-8r w-8r mn-b-thin"
292
+ :src="(FILE_SERVER_URL || '') + '/icons/moods/' + preset + '.svg'"
293
+ class="w-100"
135
294
  />
136
295
 
137
- <span>
296
+ <span class="t-white">
138
297
  {{ t(`presets.` + preset) }}
139
298
  </span>
140
- </button>
299
+ </a>
141
300
 
142
301
  </div>
143
302
 
144
303
  </div>
145
304
 
146
- <div class="w-100 h-100 pos-absolute pos-t-0 pos-r-0 z-index-0 grid">
147
- <div class="spiral"></div>
305
+ <div class="w-100 h-100 pos-absolute pos-t-0 pos-r-0 z-index-0">
306
+ <!-- <canvas id="glcanvas" class="w-100 h-100"></canvas> -->
148
307
  </div>
149
308
 
150
309
  </div>
151
310
 
152
311
  </section>
153
- </template>
154
-
155
- <style lang="scss" scoped>
156
- .spiral {
157
- background-image: url('https://weeder.delivery//spiral.jpg');
158
- background-size: cover;
159
- width: 100rem;
160
- height: 100rem;
161
- position: absolute;
162
- top: 50%;
163
- left: 50%;
164
- opacity: 0.03;
165
- transform: translate(-50%, -50%) rotate(0deg);
166
- transform-origin: center center;
167
- animation: spin 5s linear infinite;
168
- }
169
-
170
- @keyframes spin {
171
- 0% {
172
- transform: translate(-50%, -50%) rotate(0deg);
173
- }
174
- 100% {
175
- transform: translate(-50%, -50%) rotate(360deg);
176
- }
177
- }
178
- </style>
312
+ </template>
@@ -0,0 +1,127 @@
1
+ <template>
2
+ <section id="main-menu" class="pd-thin pos-relative">
3
+ <h2 class="w-m-60r mn-auto pd-t-big pd-b-big t-center">
4
+ Find Extraordinary <span class="t-main t-semi">Cannabis Flowers</span> and <span class="t-main t-semi">Accessories</span> to Enhance Your Smoking Experience
5
+ </h2>
6
+
7
+ <transition name="fade" mode="out-in" appear>
8
+ <div v-if="!menu" class="w-100 h-15r radius-big flex-center bg-grey">
9
+ <Loader class="pos-relative"/>
10
+ </div>
11
+
12
+ <ul v-else class="gap-thin grid-container">
13
+ <router-link :to="getMarketplaceLink([category.url])"
14
+ v-for="(category,index) in store.categories.state.all"
15
+ :key="category"
16
+ class="cursor-pointer hover-scale-0 flex-v-center flex-h-center flex-nowrap flex-row flex bg-grey radius-big pd-medium grid-item"
17
+ >
18
+
19
+ <video
20
+ v-if="category.url === 'buds'"
21
+ class="w-33 radius-100 o-hidden mn-r-medium"
22
+ autoplay loop muted
23
+ >
24
+ <source
25
+ src="/output.webm"
26
+ type="video/webm"
27
+ >
28
+ </video>
29
+
30
+ <div class="w-100" :class="{'mn-r-auto':category.url === 'buds'}">
31
+
32
+ <div class="w-100 flex-v-center flex-nowrap flex">
33
+
34
+ <h3 class="t-black capitalize h3">
35
+ {{category.name}}
36
+ </h3>
37
+
38
+ <img
39
+ v-if="category.url !== 'buds'"
40
+ :src="'/icons/categories/' + category.url + '.svg'"
41
+ class="i-extra mn-l-auto"
42
+ >
43
+
44
+ </div>
45
+
46
+ <p v-if="category.url === 'buds'" class="mn-t-thin mn-b-thin t-transp t-black p-medium">
47
+ Unveiling the Exceptional User Curated Best Buds
48
+ </p>
49
+
50
+ <button
51
+ v-if="category.url === 'buds'"
52
+ class="mn-t-small br-2px br-solid hover-bg-main br-main t-black button-small button"
53
+ >
54
+ <span class="t-black">Check {{countProduct.count}} products →</span>
55
+ </button>
56
+
57
+ </div>
58
+ </router-link>
59
+
60
+ </ul>
61
+ </transition>
62
+ </section>
63
+ </template>
64
+
65
+
66
+ <script setup>
67
+ import { ref, onMounted,computed } from 'vue'
68
+ import Loader from '@pf/src/components/Loader/Loader.vue'
69
+
70
+ import { useRouter } from 'vue-router'
71
+ import { useStore } from '@/store';
72
+ import { useI18n } from 'vue-i18n'
73
+
74
+
75
+ const store = useStore()
76
+ const router = useRouter()
77
+
78
+
79
+ const text = {
80
+ locale: 'en',
81
+ messages: {
82
+ en: {
83
+ categories: []
84
+ },
85
+ ru: {
86
+ categories: []
87
+ }
88
+ }
89
+ }
90
+
91
+ store.categories.state.all.forEach( category => {
92
+ category.localization.forEach( localization => {
93
+ text.messages[localization.locale].categories.push(localization.text)
94
+ })
95
+ })
96
+
97
+ const { t } = useI18n(text)
98
+
99
+ const countProduct = ref(0)
100
+ const menu = ref(false)
101
+
102
+ onMounted( async () => {
103
+ countProduct.value = await store.products.actions.read({count: true})
104
+ await store.categories.actions.fetchCategories()
105
+ menu.value = true
106
+ })
107
+
108
+ </script>
109
+
110
+ <style lang="scss">
111
+ .grid-container {
112
+ display: grid;
113
+ grid-template-columns: repeat(4, 1fr);
114
+ grid-template-rows: repeat(2, 1fr);
115
+ }
116
+
117
+ .grid-item {
118
+ &:first-of-type {
119
+ grid-column: span 2;
120
+ grid-row: span 2;
121
+ }
122
+ }
123
+
124
+ @media screen and (max-width: 1025px) {
125
+ .grid-container { grid-template-columns: repeat(2, 1fr); }
126
+ }
127
+ </style>