@ozdao/prometheus-framework 0.2.39 → 0.2.41

Sign up to get free protection for your applications and to get access to all the features.
Files changed (296) hide show
  1. package/dist/auth.server.js +1 -2
  2. package/dist/auth.server.mjs +1 -2
  3. package/dist/files.server.js +1 -2
  4. package/dist/files.server.mjs +1 -2
  5. package/dist/globals.server.js +1 -1
  6. package/dist/globals.server.mjs +1 -1
  7. package/dist/mailing-10560277.mjs +78 -0
  8. package/dist/mailing-902d13d5.js +77 -0
  9. package/dist/main.css +1 -1
  10. package/dist/prometheus-framework/src/components/Button/Button.vue.cjs +1 -1
  11. package/dist/prometheus-framework/src/components/Button/Button.vue.js +225 -2
  12. package/dist/prometheus-framework/src/components/Button/Button.vue2.cjs +1 -1
  13. package/dist/prometheus-framework/src/components/Button/Button.vue2.js +2 -225
  14. package/dist/prometheus-framework/src/components/Checkbox/Checkbox.vue.cjs +1 -1
  15. package/dist/prometheus-framework/src/components/Checkbox/Checkbox.vue.js +61 -2
  16. package/dist/prometheus-framework/src/components/Checkbox/Checkbox.vue2.cjs +1 -1
  17. package/dist/prometheus-framework/src/components/Checkbox/Checkbox.vue2.js +2 -61
  18. package/dist/prometheus-framework/src/components/Chips/Chips.vue.cjs +1 -1
  19. package/dist/prometheus-framework/src/components/Chips/Chips.vue.js +13 -9
  20. package/dist/prometheus-framework/src/components/Chips/Chips.vue2.cjs +1 -0
  21. package/dist/prometheus-framework/src/components/Chips/Chips.vue2.js +4 -0
  22. package/dist/prometheus-framework/src/components/Dropdown/Dropdown.vue.cjs +1 -1
  23. package/dist/prometheus-framework/src/components/Dropdown/Dropdown.vue.js +26 -22
  24. package/dist/prometheus-framework/src/components/Feed/Feed.vue.cjs +1 -1
  25. package/dist/prometheus-framework/src/components/Feed/Feed.vue.js +29 -30
  26. package/dist/prometheus-framework/src/components/Field/Field.vue.cjs +1 -1
  27. package/dist/prometheus-framework/src/components/Field/Field.vue.js +76 -2
  28. package/dist/prometheus-framework/src/components/Field/Field.vue2.cjs +1 -1
  29. package/dist/prometheus-framework/src/components/Field/Field.vue2.js +2 -76
  30. package/dist/prometheus-framework/src/components/Popup/Popup.vue.cjs +1 -1
  31. package/dist/prometheus-framework/src/components/Popup/Popup.vue.js +70 -2
  32. package/dist/prometheus-framework/src/components/Popup/Popup.vue2.cjs +1 -1
  33. package/dist/prometheus-framework/src/components/Popup/Popup.vue2.js +2 -70
  34. package/dist/prometheus-framework/src/components/Select/Select.vue.cjs +1 -1
  35. package/dist/prometheus-framework/src/components/Select/Select.vue.js +95 -2
  36. package/dist/prometheus-framework/src/components/Select/Select.vue2.cjs +1 -1
  37. package/dist/prometheus-framework/src/components/Select/Select.vue2.js +2 -95
  38. package/dist/prometheus-framework/src/components/Slider/Slider.vue.cjs +1 -0
  39. package/dist/prometheus-framework/src/components/Slider/Slider.vue.js +69 -0
  40. package/dist/prometheus-framework/src/components/Tab/Tab.vue.cjs +1 -1
  41. package/dist/prometheus-framework/src/components/Tab/Tab.vue.js +44 -2
  42. package/dist/prometheus-framework/src/components/Tab/Tab.vue2.cjs +1 -1
  43. package/dist/prometheus-framework/src/components/Tab/Tab.vue2.js +2 -44
  44. package/dist/prometheus-framework/src/modules/auth/components/layouts/Auth.vue.cjs +1 -1
  45. package/dist/prometheus-framework/src/modules/auth/components/layouts/Auth.vue.js +3 -3
  46. package/dist/prometheus-framework/src/modules/auth/components/pages/EnterCode.vue.cjs +1 -1
  47. package/dist/prometheus-framework/src/modules/auth/components/pages/EnterCode.vue.js +1 -1
  48. package/dist/prometheus-framework/src/modules/auth/components/pages/EnterPassword.vue.cjs +1 -1
  49. package/dist/prometheus-framework/src/modules/auth/components/pages/EnterPassword.vue.js +3 -3
  50. package/dist/prometheus-framework/src/modules/auth/components/pages/Invite.vue.cjs +1 -1
  51. package/dist/prometheus-framework/src/modules/auth/components/pages/Invite.vue.js +3 -3
  52. package/dist/prometheus-framework/src/modules/auth/components/pages/ResetPassword.vue.cjs +1 -1
  53. package/dist/prometheus-framework/src/modules/auth/components/pages/ResetPassword.vue.js +3 -3
  54. package/dist/prometheus-framework/src/modules/auth/components/pages/SignIn.vue.cjs +1 -1
  55. package/dist/prometheus-framework/src/modules/auth/components/pages/SignIn.vue.js +3 -3
  56. package/dist/prometheus-framework/src/modules/auth/components/pages/SignUp.vue.cjs +1 -1
  57. package/dist/prometheus-framework/src/modules/auth/components/pages/SignUp.vue.js +3 -3
  58. package/dist/prometheus-framework/src/modules/auth/store/auth.cjs +1 -1
  59. package/dist/prometheus-framework/src/modules/auth/store/auth.js +8 -8
  60. package/dist/prometheus-framework/src/modules/backoffice/components/pages/Dashboard.vue.cjs +1 -1
  61. package/dist/prometheus-framework/src/modules/backoffice/components/pages/Dashboard.vue.js +1 -1
  62. package/dist/prometheus-framework/src/modules/community/community.client.cjs +1 -1
  63. package/dist/prometheus-framework/src/modules/community/community.client.js +18 -20
  64. package/dist/prometheus-framework/src/modules/community/components/blocks/CardBlogpost.vue.cjs +1 -1
  65. package/dist/prometheus-framework/src/modules/community/components/blocks/CardBlogpost.vue.js +88 -62
  66. package/dist/prometheus-framework/src/modules/community/components/layouts/Community.vue.cjs +1 -1
  67. package/dist/prometheus-framework/src/modules/community/components/layouts/Community.vue.js +97 -68
  68. package/dist/prometheus-framework/src/modules/community/components/pages/BlogPost.vue.cjs +1 -1
  69. package/dist/prometheus-framework/src/modules/community/components/pages/BlogPost.vue.js +35 -34
  70. package/dist/prometheus-framework/src/modules/community/components/pages/Community.vue.cjs +1 -1
  71. package/dist/prometheus-framework/src/modules/community/components/pages/Community.vue.js +18 -18
  72. package/dist/prometheus-framework/src/modules/community/components/pages/Community.vue2.js +2 -2
  73. package/dist/prometheus-framework/src/modules/community/components/pages/CreateBlogPost.vue.cjs +1 -1
  74. package/dist/prometheus-framework/src/modules/community/components/pages/CreateBlogPost.vue.js +5 -5
  75. package/dist/prometheus-framework/src/modules/community/components/sections/Feed.vue.cjs +1 -1
  76. package/dist/prometheus-framework/src/modules/community/components/sections/Feed.vue.js +4 -4
  77. package/dist/prometheus-framework/src/modules/community/components/sections/HotPosts.vue.cjs +1 -1
  78. package/dist/prometheus-framework/src/modules/community/components/sections/HotPosts.vue.js +65 -19
  79. package/dist/prometheus-framework/src/modules/community/components/sections/JoinUs.vue.cjs +1 -1
  80. package/dist/prometheus-framework/src/modules/community/components/sections/JoinUs.vue.js +9 -9
  81. package/dist/prometheus-framework/src/modules/constructor/components/elements/Embed.vue.cjs +1 -1
  82. package/dist/prometheus-framework/src/modules/constructor/components/elements/Embed.vue.js +8 -7
  83. package/dist/prometheus-framework/src/modules/constructor/components/elements/Image.vue.cjs +1 -1
  84. package/dist/prometheus-framework/src/modules/constructor/components/elements/Image.vue.js +6 -6
  85. package/dist/prometheus-framework/src/modules/constructor/components/elements/Textarea.vue.cjs +5 -1
  86. package/dist/prometheus-framework/src/modules/constructor/components/elements/Textarea.vue.js +65 -2
  87. package/dist/prometheus-framework/src/modules/constructor/components/elements/Textarea.vue2.cjs +1 -5
  88. package/dist/prometheus-framework/src/modules/constructor/components/elements/Textarea.vue2.js +2 -65
  89. package/dist/prometheus-framework/src/modules/constructor/components/sections/Constructor.vue.cjs +1 -1
  90. package/dist/prometheus-framework/src/modules/constructor/components/sections/Constructor.vue.js +64 -70
  91. package/dist/prometheus-framework/src/modules/events/components/blocks/CardEvent.vue.js +6 -6
  92. package/dist/prometheus-framework/src/modules/events/components/elements/ButtonJoin.vue.cjs +1 -1
  93. package/dist/prometheus-framework/src/modules/events/components/elements/ButtonJoin.vue.js +1 -1
  94. package/dist/prometheus-framework/src/modules/events/components/layouts/layoutEvents.vue.cjs +1 -1
  95. package/dist/prometheus-framework/src/modules/events/components/layouts/layoutEvents.vue.js +1 -1
  96. package/dist/prometheus-framework/src/modules/events/components/pages/EditEvent.vue.cjs +1 -1
  97. package/dist/prometheus-framework/src/modules/events/components/pages/EditEvent.vue.js +5 -5
  98. package/dist/prometheus-framework/src/modules/events/components/pages/Events.vue.cjs +1 -1
  99. package/dist/prometheus-framework/src/modules/events/components/pages/Events.vue.js +6 -5
  100. package/dist/prometheus-framework/src/modules/gallery/components/sections/BackofficeGallery.vue.cjs +1 -1
  101. package/dist/prometheus-framework/src/modules/gallery/components/sections/BackofficeGallery.vue.js +3 -3
  102. package/dist/prometheus-framework/src/modules/gallery/components/sections/GalleryWithCategories.vue.cjs +1 -1
  103. package/dist/prometheus-framework/src/modules/gallery/components/sections/GalleryWithCategories.vue.js +3 -3
  104. package/dist/prometheus-framework/src/modules/globals/components/blocks/CardHeader.vue.cjs +1 -1
  105. package/dist/prometheus-framework/src/modules/globals/components/blocks/CardHeader.vue.js +43 -42
  106. package/dist/prometheus-framework/src/modules/icons/entities/IconFeatured.vue.cjs +1 -0
  107. package/dist/prometheus-framework/src/modules/icons/entities/IconFeatured.vue.js +30 -0
  108. package/dist/prometheus-framework/src/modules/icons/entities/IconFollowing.vue.cjs +1 -0
  109. package/dist/prometheus-framework/src/modules/icons/entities/IconFollowing.vue.js +47 -0
  110. package/dist/prometheus-framework/src/modules/icons/entities/IconPopular.vue.cjs +1 -0
  111. package/dist/prometheus-framework/src/modules/icons/entities/IconPopular.vue.js +28 -0
  112. package/dist/prometheus-framework/src/modules/icons/entities/IconRecent.vue.cjs +1 -0
  113. package/dist/prometheus-framework/src/modules/icons/entities/IconRecent.vue.js +45 -0
  114. package/dist/prometheus-framework/src/modules/icons/navigation/IconArrow.vue.cjs +1 -0
  115. package/dist/prometheus-framework/src/modules/icons/navigation/IconArrow.vue.js +32 -0
  116. package/dist/prometheus-framework/src/modules/icons/navigation/IconChevronRight.vue.cjs +1 -1
  117. package/dist/prometheus-framework/src/modules/icons/navigation/IconChevronRight.vue.js +3 -3
  118. package/dist/prometheus-framework/src/modules/icons/navigation/IconEdit.vue.cjs +1 -1
  119. package/dist/prometheus-framework/src/modules/icons/navigation/IconEdit.vue.js +25 -14
  120. package/dist/prometheus-framework/src/modules/icons/navigation/IconEllipsis.vue.cjs +1 -0
  121. package/dist/prometheus-framework/src/modules/icons/navigation/IconEllipsis.vue.js +44 -0
  122. package/dist/prometheus-framework/src/modules/landing/components/sections/MobileApp.vue.cjs +1 -1
  123. package/dist/prometheus-framework/src/modules/landing/components/sections/MobileApp.vue.js +90 -67
  124. package/dist/prometheus-framework/src/modules/legal/components/pages/Legal.vue.cjs +1 -1
  125. package/dist/prometheus-framework/src/modules/legal/components/pages/Legal.vue.js +3 -3
  126. package/dist/prometheus-framework/src/modules/mobile/components/Menu/Menu.vue.cjs +1 -1
  127. package/dist/prometheus-framework/src/modules/mobile/components/Menu/Menu.vue.js +2 -11
  128. package/dist/prometheus-framework/src/modules/mobile/components/Menu/Menu.vue2.cjs +1 -1
  129. package/dist/prometheus-framework/src/modules/mobile/components/Menu/Menu.vue2.js +11 -2
  130. package/dist/prometheus-framework/src/modules/orders/components/pages/EditOrder.vue.cjs +1 -1
  131. package/dist/prometheus-framework/src/modules/orders/components/pages/EditOrder.vue.js +1 -1
  132. package/dist/prometheus-framework/src/modules/orders/components/pages/Orders.vue.cjs +1 -1
  133. package/dist/prometheus-framework/src/modules/orders/components/pages/Orders.vue.js +1 -1
  134. package/dist/prometheus-framework/src/modules/orders/components/sections/FormOrderDetails.vue.cjs +1 -1
  135. package/dist/prometheus-framework/src/modules/orders/components/sections/FormOrderDetails.vue.js +2 -2
  136. package/dist/prometheus-framework/src/modules/organizations/components/blocks/CardOrganization.vue.cjs +1 -1
  137. package/dist/prometheus-framework/src/modules/organizations/components/blocks/CardOrganization.vue.js +45 -42
  138. package/dist/prometheus-framework/src/modules/organizations/components/blocks/DepartmentMemberModify.vue.cjs +1 -1
  139. package/dist/prometheus-framework/src/modules/organizations/components/blocks/DepartmentMemberModify.vue.js +2 -2
  140. package/dist/prometheus-framework/src/modules/organizations/components/elements/ButtonToggleMembership.vue.cjs +1 -1
  141. package/dist/prometheus-framework/src/modules/organizations/components/elements/ButtonToggleMembership.vue.js +1 -1
  142. package/dist/prometheus-framework/src/modules/organizations/components/pages/DepartmentEdit.vue.cjs +1 -1
  143. package/dist/prometheus-framework/src/modules/organizations/components/pages/DepartmentEdit.vue.js +6 -6
  144. package/dist/prometheus-framework/src/modules/organizations/components/pages/Members.vue.cjs +1 -1
  145. package/dist/prometheus-framework/src/modules/organizations/components/pages/Members.vue.js +1 -1
  146. package/dist/prometheus-framework/src/modules/organizations/components/pages/Organization.vue.cjs +1 -1
  147. package/dist/prometheus-framework/src/modules/organizations/components/pages/Organization.vue.js +3 -3
  148. package/dist/prometheus-framework/src/modules/organizations/components/pages/OrganizationEdit.vue.cjs +1 -1
  149. package/dist/prometheus-framework/src/modules/organizations/components/pages/OrganizationEdit.vue.js +5 -5
  150. package/dist/prometheus-framework/src/modules/organizations/components/pages/Organizations.vue.cjs +1 -1
  151. package/dist/prometheus-framework/src/modules/organizations/components/pages/Organizations.vue.js +1 -1
  152. package/dist/prometheus-framework/src/modules/organizations/components/sections/DetailsTab.vue.cjs +1 -1
  153. package/dist/prometheus-framework/src/modules/organizations/components/sections/DetailsTab.vue.js +60 -55
  154. package/dist/prometheus-framework/src/modules/organizations/components/sections/Documents.vue.cjs +1 -1
  155. package/dist/prometheus-framework/src/modules/organizations/components/sections/Documents.vue.js +3 -3
  156. package/dist/prometheus-framework/src/modules/organizations/components/sections/FeedDepartments.vue.cjs +1 -1
  157. package/dist/prometheus-framework/src/modules/organizations/components/sections/FeedDepartments.vue.js +1 -1
  158. package/dist/prometheus-framework/src/modules/organizations/components/sections/MembersAdd.vue.cjs +1 -1
  159. package/dist/prometheus-framework/src/modules/organizations/components/sections/MembersAdd.vue.js +3 -3
  160. package/dist/prometheus-framework/src/modules/organizations/components/sections/MembersList.vue.cjs +1 -1
  161. package/dist/prometheus-framework/src/modules/organizations/components/sections/MembersList.vue.js +1 -1
  162. package/dist/prometheus-framework/src/modules/organizations/components/sections/Organizations.vue.cjs +1 -1
  163. package/dist/prometheus-framework/src/modules/organizations/components/sections/Organizations.vue.js +18 -17
  164. package/dist/prometheus-framework/src/modules/organizations/components/sections/Publics.vue.cjs +1 -1
  165. package/dist/prometheus-framework/src/modules/organizations/components/sections/Publics.vue.js +20 -21
  166. package/dist/prometheus-framework/src/modules/products/components/blocks/CardLeftover.vue.js +7 -7
  167. package/dist/prometheus-framework/src/modules/products/components/blocks/CardPosition.vue.cjs +1 -1
  168. package/dist/prometheus-framework/src/modules/products/components/blocks/CardPosition.vue.js +2 -2
  169. package/dist/prometheus-framework/src/modules/products/components/blocks/ImagesThumbnails.vue.cjs +1 -1
  170. package/dist/prometheus-framework/src/modules/products/components/blocks/ImagesThumbnails.vue.js +1 -1
  171. package/dist/prometheus-framework/src/modules/products/components/pages/EditLeftover.vue.cjs +1 -1
  172. package/dist/prometheus-framework/src/modules/products/components/pages/EditLeftover.vue.js +2 -2
  173. package/dist/prometheus-framework/src/modules/products/components/pages/Leftovers.vue.cjs +1 -1
  174. package/dist/prometheus-framework/src/modules/products/components/pages/Leftovers.vue.js +1 -1
  175. package/dist/prometheus-framework/src/modules/products/components/pages/ProductEdit.vue.cjs +1 -1
  176. package/dist/prometheus-framework/src/modules/products/components/pages/ProductEdit.vue.js +6 -6
  177. package/dist/prometheus-framework/src/modules/products/components/pages/ProductsBackoffice.vue.cjs +1 -1
  178. package/dist/prometheus-framework/src/modules/products/components/pages/ProductsBackoffice.vue.js +1 -1
  179. package/dist/prometheus-framework/src/modules/products/components/sections/EditProductInfo.vue.cjs +1 -1
  180. package/dist/prometheus-framework/src/modules/products/components/sections/EditProductInfo.vue.js +3 -3
  181. package/dist/prometheus-framework/src/modules/products/components/sections/FilterProducts.vue.cjs +1 -1
  182. package/dist/prometheus-framework/src/modules/products/components/sections/FilterProducts.vue.js +1 -1
  183. package/dist/prometheus-framework/src/modules/products/components/sections/PopularProducts.vue.cjs +1 -1
  184. package/dist/prometheus-framework/src/modules/products/components/sections/PopularProducts.vue.js +37 -34
  185. package/dist/prometheus-framework/src/modules/products/components/sections/SectionProduct.vue.cjs +1 -1
  186. package/dist/prometheus-framework/src/modules/products/components/sections/SectionProduct.vue.js +23 -23
  187. package/dist/prometheus-framework/src/modules/reports/components/sections/FormReport.vue.cjs +1 -1
  188. package/dist/prometheus-framework/src/modules/reports/components/sections/FormReport.vue.js +3 -3
  189. package/dist/prometheus-framework/src/modules/spots/components/blocks/CardSpot.vue.js +8 -8
  190. package/dist/prometheus-framework/src/modules/users/components/pages/Profile.vue.cjs +1 -1
  191. package/dist/prometheus-framework/src/modules/users/components/pages/Profile.vue.js +7 -7
  192. package/dist/prometheus-framework/src/modules/users/components/pages/ProfileBlogposts.vue.cjs +1 -1
  193. package/dist/prometheus-framework/src/modules/users/components/pages/ProfileBlogposts.vue.js +1 -1
  194. package/dist/prometheus-framework/src/modules/users/components/pages/ProfileEdit.vue.cjs +1 -1
  195. package/dist/prometheus-framework/src/modules/users/components/pages/ProfileEdit.vue.js +3 -3
  196. package/dist/prometheus-framework/src/modules/users/components/pages/ProfileEvents.vue.cjs +1 -1
  197. package/dist/prometheus-framework/src/modules/users/components/pages/ProfileEvents.vue.js +1 -1
  198. package/dist/prometheus-framework/src/modules/wallet/components/pages/Wallet.vue.cjs +1 -1
  199. package/dist/prometheus-framework/src/modules/wallet/components/pages/Wallet.vue.js +31 -30
  200. package/dist/prometheus-framework.cjs.js +20 -20
  201. package/dist/prometheus-framework.es.js +1278 -1288
  202. package/dist/style.css +1 -1
  203. package/package.json +1 -1
  204. package/src/components/Button/Button.vue +2 -3
  205. package/src/components/Chips/Chips.vue +9 -3
  206. package/src/components/Countdown/Countdown.vue +4 -3
  207. package/src/components/Dropdown/Dropdown.vue +9 -3
  208. package/src/components/Feed/Feed.vue +7 -11
  209. package/src/components/Feed/Masonry.vue +177 -0
  210. package/src/components/FieldBig/FieldBig.vue +3 -3
  211. package/src/components/Header/Header.vue +2 -0
  212. package/src/components/Navigation/Navigation.vue +2 -0
  213. package/src/components/Shader/Shader.vue +161 -116
  214. package/src/components/Slider/Slider.vue +92 -0
  215. package/src/modules/applications/applications.client.js +2 -0
  216. package/src/modules/applications/components/sections/SubscribeNewsletter.vue +114 -0
  217. package/src/modules/applications/controllers/applications.controller.js +125 -136
  218. package/src/modules/applications/models/application.model.js +22 -7
  219. package/src/modules/applications/routes/applications.routes.js +29 -13
  220. package/src/modules/auth/controllers/auth.controller.js +2 -3
  221. package/src/modules/auth/store/auth.js +3 -5
  222. package/src/modules/chats/components/blocks/ChatMessage.vue +3 -2
  223. package/src/modules/chats/components/pages/ChatPage.vue +6 -6
  224. package/src/modules/chats/components/sections/ChatWindow.vue +57 -12
  225. package/src/modules/chats/store/chat.store.js +6 -1
  226. package/src/modules/community/community.client.js +0 -2
  227. package/src/modules/community/components/blocks/CardBlogpost.vue +71 -33
  228. package/src/modules/community/components/layouts/Community.vue +65 -26
  229. package/src/modules/community/components/pages/Blog.vue +37 -0
  230. package/src/modules/community/components/pages/BlogPost.vue +5 -6
  231. package/src/modules/community/components/pages/Community.vue +1 -0
  232. package/src/modules/community/components/pages/CreateBlogPost.vue +1 -0
  233. package/src/modules/community/components/sections/Feed.vue +1 -1
  234. package/src/modules/community/components/sections/HotPosts.vue +64 -24
  235. package/src/modules/community/components/sections/JoinUs.vue +4 -5
  236. package/src/modules/community/store/blogposts.js +1 -0
  237. package/src/modules/constructor/components/elements/Embed.vue +7 -6
  238. package/src/modules/constructor/components/elements/Image.vue +2 -2
  239. package/src/modules/constructor/components/elements/Textarea.vue +1 -1
  240. package/src/modules/constructor/components/sections/Constructor.vue +3 -19
  241. package/src/modules/events/components/pages/EditEvent.vue +48 -3
  242. package/src/modules/events/components/pages/Event.vue +16 -8
  243. package/src/modules/events/components/sections/HeroEvent.vue +32 -28
  244. package/src/modules/events/components/sections/SectionMainGuest.vue +3 -2
  245. package/src/modules/events/components/sections/SectionPreviousEvents.vue +22 -15
  246. package/src/modules/events/models/event.model.js +9 -0
  247. package/src/modules/files/middlewares/server/middlewareBusboy.js +14 -3
  248. package/src/modules/files/routes/files.routes.js +9 -1
  249. package/src/modules/globals/components/blocks/CardHeader.vue +6 -3
  250. package/src/modules/globals/utils/mailing.js +12 -0
  251. package/src/modules/icons/entities/IconEarn.vue +20 -0
  252. package/src/modules/icons/entities/IconFeatured.vue +14 -0
  253. package/src/modules/icons/entities/IconFollowing.vue +17 -0
  254. package/src/modules/icons/entities/IconPopular.vue +14 -0
  255. package/src/modules/icons/entities/IconRecent.vue +17 -0
  256. package/src/modules/icons/navigation/IconAdd.vue +1 -3
  257. package/src/modules/icons/navigation/IconArrow.vue +21 -0
  258. package/src/modules/icons/navigation/IconCheckmark.vue +16 -0
  259. package/src/modules/icons/navigation/IconChevronRight.vue +2 -2
  260. package/src/modules/icons/navigation/IconEdit.vue +16 -2
  261. package/src/modules/icons/navigation/IconEllipsis.vue +16 -0
  262. package/src/modules/icons/placeholders/PlaceholderChat.vue +9 -0
  263. package/src/modules/landing/components/sections/MobileApp.vue +38 -21
  264. package/src/modules/landing/components/sections/SectionEarn.vue +104 -0
  265. package/src/modules/landing/components/sections/SectionFeatures.vue +7 -8
  266. package/src/modules/marketplace/components/layouts/Marketplace.vue +3 -3
  267. package/src/modules/orders/components/blocks/StatusHistory.vue +7 -1
  268. package/src/modules/orders/components/pages/Order.vue +3 -4
  269. package/src/modules/orders/store/shopcart.js +21 -5
  270. package/src/modules/organizations/components/blocks/CardOrganization.vue +6 -6
  271. package/src/modules/organizations/components/pages/Organization.vue +1 -1
  272. package/src/modules/organizations/components/sections/DetailsTab.vue +42 -43
  273. package/src/modules/organizations/components/sections/Publics.vue +3 -4
  274. package/src/modules/payments/controller/payments.controller.js +54 -200
  275. package/src/modules/payments/controller/payments.tinkoff.controller.js +242 -0
  276. package/src/modules/payments/models/payment.model.js +22 -0
  277. package/src/modules/payments/routes/payments.routes.js +4 -25
  278. package/src/modules/payments/routes/payments.tinkoff.routes.js +58 -0
  279. package/src/modules/products/components/pages/Product.vue +3 -1
  280. package/src/modules/products/components/sections/HeroRecommendation.vue +9 -170
  281. package/src/modules/products/components/sections/MenuSection.vue +4 -4
  282. package/src/modules/products/components/sections/PopularProducts.vue +3 -3
  283. package/src/modules/products/components/sections/SectionProduct.vue +3 -0
  284. package/src/modules/products/controllers/products.controller.js +188 -109
  285. package/src/modules/products/models/product.model.js +1 -0
  286. package/src/modules/spots/components/layouts/Spots.vue +2 -2
  287. package/src/modules/wallet/components/pages/Wallet.vue +73 -88
  288. package/src/modules/wallet/controllers/crypto.controller.js +79 -0
  289. package/src/modules/wallet/models/wallet.model.js +27 -0
  290. package/src/styles/base/all.scss +4 -0
  291. package/src/styles/base/backgrounds.scss +2 -2
  292. package/src/styles/base/shadow_transitions_hover_refactor.scss +11 -1
  293. package/src/styles/typography.scss +19 -12
  294. package/src/modules/community/components/sections/SubscribeNewsletter.vue +0 -67
  295. package/src/modules/constructor/components/elements/Youtube.vue +0 -52
  296. /package/src/modules/{orders/models/payment.model.js → payments/models/payment.tinkoff.model.js} +0 -0
@@ -28,11 +28,12 @@ const actions = {
28
28
  setShopcart() {
29
29
  try {
30
30
  const storedShopcart = localStorage.getItem('shopcart');
31
+
31
32
  if (storedShopcart) {
32
33
  const shopcartData = JSON.parse(storedShopcart);
33
34
  state.positions = shopcartData.positions; // Восстанавливаем продукты
34
35
  state.organization = shopcartData.organization; // Восстанавливаем _id организации
35
- }
36
+ }
36
37
  } catch (error) {
37
38
  console.error(error);
38
39
  throw error;
@@ -74,11 +75,16 @@ const actions = {
74
75
 
75
76
  if (cartItemIndex > -1) {
76
77
  state.positions.splice(cartItemIndex, 1);
77
-
78
- localStorage.setItem('shopcart', JSON.stringify(state.positions));
78
+
79
+ // Сохраняем весь объект корзины, а не только позиции
80
+ localStorage.setItem('shopcart', JSON.stringify({
81
+ positions: state.positions,
82
+ organization: state.organization
83
+ }));
79
84
  }
80
85
  },
81
86
 
87
+
82
88
  decrementItemQuantity(_id) {
83
89
  const cartItem = state.positions.find(
84
90
  (item) => item._id === _id
@@ -92,10 +98,15 @@ const actions = {
92
98
  state.positions.splice(cartItemIndex, 1);
93
99
  }
94
100
 
95
- localStorage.setItem('shopcart', JSON.stringify(state.positions));
101
+ // Сохраняем весь объект корзины, а не только позиции
102
+ localStorage.setItem('shopcart', JSON.stringify({
103
+ positions: state.positions,
104
+ organization: state.organization
105
+ }));
96
106
  }
97
107
  },
98
108
 
109
+
99
110
  incrementItemQuantity(_id) {
100
111
  const cartItem = state.positions.find(
101
112
  (item) => item._id === _id
@@ -104,10 +115,15 @@ const actions = {
104
115
  if (cartItem) {
105
116
  cartItem.quantity++;
106
117
 
107
- localStorage.setItem('shopcart', JSON.stringify(state.positions));
118
+ // Сохраняем весь объект корзины, а не только позиции
119
+ localStorage.setItem('shopcart', JSON.stringify({
120
+ positions: state.positions,
121
+ organization: state.organization
122
+ }));
108
123
  }
109
124
  },
110
125
 
126
+
111
127
  resetShopcart({ state }) {
112
128
  state.positions = [];
113
129
 
@@ -16,10 +16,10 @@
16
16
  class="h-4r w-4r"
17
17
  />
18
18
 
19
- <div class="pos-relative w-100 flex-child-1 flex-child mn-l-small w-100">
19
+ <div class="pos-relative w-100 flex-h-center flex flex-column flex-child-1 flex-child mn-l-thin w-100">
20
20
 
21
21
  <!-- <Text :text="organization.profile.name ? organization.profile.name : ''" :maxLen="18" class="h3 d-block"/> -->
22
- <p class="h3 t-truncate">{{organization.profile.name}}</p>
22
+ <p class="h4 t-truncate">{{organization.profile.name}}</p>
23
23
  <!-- RATING -->
24
24
  <!-- <div v-if="showRating && organization.rating" class="w-max star-container flex-v-center flex">
25
25
  <img
@@ -38,8 +38,8 @@
38
38
  class="pos-relative p-small"
39
39
  />
40
40
 
41
- <div v-if="showFollowers">
42
- <p class="mn-b-thin">{{organization.numberOfSubscribers}} followers</p>
41
+ <div v-if="showFollowers" class="flex-center gap-thin pd-r-thin pd-l-thin flex-nowrap flex mn-t-thin bg-white radius-extra w-max">
42
+ <p class="mn-t-thin mn-b-thin">{{organization.numberOfSubscribers}} followers</p>
43
43
 
44
44
  <ButtonToggleMembership
45
45
  v-if="
@@ -51,9 +51,9 @@
51
51
  :role="'subscriber'"
52
52
  :target="organization._id"
53
53
  :status="organization.isSubscriber"
54
- :text="{create: 'Follow', remove: 'Unfollow'}"
54
+ :text="{create: '+', remove: '-'}"
55
55
  @updateMembership="event => handleMembershipUpdate(event, 'isSubscriber', 'numberOfSubscribers')"
56
- class="w-min"
56
+ class="i-semi"
57
57
  />
58
58
  </div>
59
59
 
@@ -191,7 +191,7 @@
191
191
  const router = useRouter()
192
192
  const route = useRoute()
193
193
  // Accesing state
194
- let tab = route.query.tab ? route.query.tab : 'community';
194
+ let tab = route.query.tab ? route.query.tab : 'products';
195
195
 
196
196
  const organizationData = ref(null)
197
197
 
@@ -1,12 +1,12 @@
1
1
  <template>
2
2
  <transition name="slide-fade">
3
- <section class="t-center flex-center flex-column flex pd-medium radius-big bg-grey">
3
+ <section class="flex-center flex flex-column t-center pd-medium radius-big bg-grey">
4
4
 
5
5
  <Dropdown
6
6
  v-if="user._id !== organization.owner"
7
- :label="'...'"
7
+ :label="{ component: IconEllipsis, class: 'i-regular t-transp' }"
8
8
  :align="'right'"
9
- class="cursor-pointer pos-absolute pos-r-0 pos-t-0 pd-thin radius-extra "
9
+ class="cursor-pointer pos-absolute pos-r-regular pos-t-regular pd-thin radius-extra "
10
10
  >
11
11
  <section
12
12
  class="bg-black pd-thin radius-small"
@@ -34,7 +34,7 @@
34
34
  :status="organization.isBlocked"
35
35
  :text="{create: 'Block', remove: 'Unblock'}"
36
36
  @updateMembership="event => handleMembershipUpdate(event, 'isBlocked')"
37
- class="t-white mn-t-thin bg-red"
37
+ class="t-white w-100 mn-t-thin bg-red"
38
38
  />
39
39
  </section>
40
40
  </Dropdown>
@@ -53,7 +53,7 @@
53
53
  <img
54
54
  v-if="organization.profile.photo"
55
55
  :src="(FILE_SERVER_URL || '') + organization.profile.photo"
56
- class="radius-big bg-grey flex-center flex mn-b-small i-extra"
56
+ class="radius-big bg-grey flex-center flex mn-b-small w-8r"
57
57
  />
58
58
 
59
59
  <PlaceholderOrganizationPic
@@ -61,48 +61,45 @@
61
61
  class="radius-medium mn-b-small i-extra"
62
62
  />
63
63
 
64
- <h1
65
- class="mn-b-thin"
66
- >
67
- {{ organization.profile.name }}
68
- </h1>
69
-
70
- <p class="mn-b-medium p-big">
71
- <Text :text="organization.profile.description || ''" :maxLen="240" />
72
- </p>
73
-
74
-
75
-
76
- <Chips
64
+ <h1
65
+ class="mn-b-thin"
66
+ >
67
+ {{ organization.profile.name }}
68
+ </h1>
69
+
70
+ <div class="flex-center pd-r-thin pd-l-thin flex-nowrap flex mn-t-thin bg-white radius-extra w-max">
71
+ <IconFollowing class="i-medium mn-r-micro t-transp"/>
72
+
73
+ <p class="mn-t-thin p-medium t-medium uppercase mn-b-thin">{{organization.numberOfSubscribers}} followers</p>
74
+
75
+ <ButtonToggleMembership
76
+ v-if="
77
+ user._id
78
+ && route.params._id
79
+ && route.params._id !== user._id
80
+ && organization.owner !== user._id
81
+ "
82
+ :user="user._id"
83
+ :type="'organization'"
84
+ :role="'subscriber'"
85
+ :target="organization._id"
86
+ :status="organization.isSubscriber"
87
+ :text="{create: '+', remove: '-'}"
88
+ @updateMembership="event => handleMembershipUpdate(event, 'isSubscriber', 'numberOfSubscribers')"
89
+ class=" mn-l-thin p-medium t-medium radius-extra i-semi"
90
+ />
91
+ </div>
92
+
93
+ <p class="w-max-50r mn-t-regular mn-b-medium p-big">
94
+ <Text :text="organization.profile.description || ''" :maxLen="240" />
95
+ </p>
96
+
97
+ <Chips
77
98
  v-if="organization.profile?.tags?.length > 0"
78
99
  :chips="organization.profile.tags"
79
- class="mn-b-semi"
100
+ class="p-medium"
80
101
  />
81
102
 
82
- <p
83
- class="t-semi mn-b-small"
84
- >
85
- <!-- 👍 3 212 likes · -->
86
- <!-- 💬 342 comments · -->
87
- 👨‍👨‍👧‍👧 {{organization.numberOfSubscribers}} followers
88
- </p>
89
-
90
- <ButtonToggleMembership
91
- v-if="
92
- user._id
93
- && route.params._id
94
- && route.params._id !== user._id
95
- && organization.owner !== user._id
96
- "
97
- :user="user._id"
98
- :type="'organization'"
99
- :role="'subscriber'"
100
- :target="organization._id"
101
- :status="organization.isSubscriber"
102
- :text="{create: 'Follow', remove: 'Unfollow'}"
103
- @updateMembership="event => handleMembershipUpdate(event, 'isSubscriber', 'numberOfSubscribers')"
104
- class="w-min mn-b-medium mn-r-auto mn-l-auto"
105
- />
106
103
 
107
104
  <h4
108
105
  v-if="Object.values(organization.socials).some(value => value)"
@@ -148,7 +145,9 @@
148
145
  import Text from '@pf/src/components/Text/Text.vue'
149
146
  import Chips from '@pf/src/components/Chips/Chips.vue'
150
147
  // Icons
148
+ import IconFollowing from '@pf/src/modules/icons/entities/IconFollowing.vue'
151
149
  import IconEdit from '@pf/src/modules/icons/navigation/IconEdit.vue'
150
+ import IconEllipsis from '@pf/src/modules/icons/navigation/IconEllipsis.vue'
152
151
  import PlaceholderOrganizationPic from '@pf/src/modules/icons/placeholders/PlaceholderOrganizationPic.vue'
153
152
  // Org Module
154
153
  import ButtonToggleMembership from '@pf/src/modules/organizations/components/elements/ButtonToggleMembership.vue'
@@ -14,8 +14,8 @@
14
14
  :key="organization._id"
15
15
  :organization="organization"
16
16
  :user="auth.state.user"
17
- @updateMembership="handleMembershipUpdate"
18
- class="w-max"
17
+ @updateMembership="handleMembershipUpdate"
18
+ class="w-max-20r radius-big"
19
19
  />
20
20
  </div>
21
21
  </div>
@@ -35,9 +35,8 @@
35
35
  onMounted(async () => {
36
36
  publics.value = await organization.actions.read({
37
37
  user: auth.state.user._id,
38
- sort: "numberOfMemberships",
38
+ sortParam: "profile.tags",
39
39
  limit: 10,
40
- types: ['public']
41
40
  });
42
41
  });
43
42
 
@@ -3,239 +3,93 @@ var jwt = require("jsonwebtoken");
3
3
  var axios = require('axios');
4
4
  var bcrypt = require("bcryptjs");
5
5
  var crypto = require('crypto');
6
- const { v4: uuidv4 } = require('uuid');
7
6
 
8
- var TerminalKey = process.env.TINKOFF_TERMINAL_KEY;
9
- var TerminalPassword = process.env.TINKOFF_TERMINAL_PASSWORD;
7
+ const QRCode = require('qrcode');
10
8
 
11
9
  const controllerFactory = (db) => {
12
10
  const Payment = db.payment;
11
+ const Wallet = db.wallet;
13
12
  const Order = db.order;
14
13
 
15
- const getAll = (req, res) => {
16
- Payment.find({}).sort({'createdAt': 'desc'}).exec((err, paymentes) => {
17
- // If error
18
- if (err) {return res.status(500).send({ message: err }); }
19
- // If not found
20
- if (!paymentes) {return res.status(404).send({ message: "Paymentes not found." }); }
21
- // If succes
22
- res.status(200).send(paymentes);
23
- });
24
- };
25
-
26
14
  const create = (req, res) => {
27
- console.log(req.body)
28
- Payment.create({
29
- type: req.body.type,
30
- order: req.body.order,
31
- positions: req.body.positions
32
- }, (err, payment) => {
33
- if (err) {return res.status(500).send({ message: err }); }
34
- if (!payment) {return res.status(404).send({ message: "Something wrong when updating product. (with files)" }); }
35
- res.status(200).send(payment);
36
- })
37
- };
15
+ const { amount, positions, userId } = req.body;
38
16
 
39
- const get = (req, res) => {
40
- Payment.findOne({ _id: req.params._id }).exec((err, payment) => {
41
- // If error
42
- if (err) {return res.status(500).send({ message: err }); }
43
- // If not found
44
- if (!payment) {return res.status(404).send({ message: "Payment not found." }); }
45
- // If succes
46
- res.status(200).send(payment);
47
- });
48
- };
17
+ const newPayment = new Payment({ amount, positions, user: userId });
18
+ await newPayment.save();
49
19
 
50
- const update = (req, res) => {
20
+ const qrData = `PaymentID:${newPayment._id};Amount:${amount}`;
21
+ const qrCode = await QRCode.toDataURL(qrData);
22
+
23
+ res.send({ qrCode, paymentId: newPayment._id });
24
+ };
51
25
 
52
- Payment.findOneAndUpdate({ PaymentId: req.params._id }, req.body, { new: true, upsert: true}).exec((err, payment) => {
26
+ const read = (req, res) => {
27
+ Payment.find({}).sort({'createdAt': 'desc'}).exec((err, paymentes) => {
53
28
  // If error
54
29
  if (err) {return res.status(500).send({ message: err }); }
55
30
  // If not found
56
- if (!payment) {return res.status(404).send({ message: "Payment not found." }); }
31
+ if (!paymentes) {return res.status(404).send({ message: "Paymentes not found." }); }
57
32
  // If succes
58
- res.status(200).send(payment);
33
+ res.status(200).send(paymentes);
59
34
  });
60
35
  };
61
36
 
62
- const deletePayment = (req, res) => {
63
- Payment.findOneAndDelete({_id: req.params._id}, (err, payment) => {
64
- if (err) {return res.status(500).send({ message: err }); }
65
- if (!payment) {return res.status(404).send({ message: "Something wrong when deleting payment." }); }
66
- res.status(200).send(payment);
67
- })
68
- };
69
-
70
- function createToken (request) {
71
- request = Object.entries(request).map(function(key) {
72
- return { [key[0]]: key[1] }
73
- })
74
- request.push({Password: TerminalPassword})
75
- request.sort(function(a, b){
76
- if(Object.keys(a)[0] < Object.keys(b)[0]) { return -1; }
77
- if(Object.keys(a)[0] > Object.keys(b)[0]) { return 1; }
78
- return 0;
79
- })
80
- const requestContacted = request.map(function(key) {
81
- return Object.values(key)[0]
82
- }).join("")
83
-
84
- const hash = crypto.createHash('sha256').update(requestContacted).digest('hex');
85
-
86
- return hash
87
- }
88
- const newpayment = (req, res) => {
89
- // Data for payment init
90
- console.log(req.body.phone);
91
- // Send request to Tinkoff
92
- axios.post('https://securepay.tinkoff.ru/v2/Init', {
93
- TerminalKey: TerminalKey,
94
- Amount: '350000',
95
- OrderId: req.body._id,
96
- Recurrent: 'y',
97
- PayType: "О",
98
- CustomerKey: req.body.phone,
99
- Description: 'Оплата в интернет-магазине',
100
- Data: {
101
- phone: req.body.phone,
102
- },
103
- // SuccessURL: 'http://tandem.ohmybike.ru/rent/' + OrderId,
104
- // FailURL: 'http://tandem.ohmybike.ru/account'
105
- // SuccessURL: 'http://localhost:8082/rent/' + OrderId,
106
- // FailURL: 'http://localhost:8082/account'
107
- }).then(function(response) {
108
- const payment = new Payment(response.data);
109
- payment.save((err, payment) => {
110
- if (err) {
111
- res.status(500).send({ message: err });
112
- return;
113
- }
114
-
115
- payment.save(err => {
116
- if (err) {
117
- res.status(500).send({ message: err });
118
- return;
119
- }
120
- res.send(response.data);
121
- });
122
- })
123
- }).catch(function(error) {
124
- res.send(error);
125
- })
126
-
127
- };
128
- const setpayment = (req, res) => {
129
- // Data for payment
130
- const payment = new Payment({
131
- OrderId: req.body.OrderId,
132
- Success: req.body.Success,
133
- Status: req.body.Status,
134
- PaymentId: req.body.PaymentId,
135
- ErrorCode: req.body.ErrorCode,
136
- Message: req.body.Message,
137
- Details: req.body.Details
138
- });
139
- // Wright to db
140
- console.log(payment)
37
+ const update = (req, res) => {
38
+ const session = await mongoose.startSession();
39
+ session.startTransaction();
40
+ try {
41
+ const { paymentId, walletId } = req.body; // Теперь мы работаем с walletId
141
42
 
142
- payment.save((err, payment) => {
143
- if (err) {
144
- res.status(500).send({ message: err });
145
- return;
43
+ const payment = await Payment.findById(paymentId).session(session);
44
+
45
+ if (!payment) {
46
+ throw new Error('Payment not found');
47
+ }
48
+ if (payment.status !== 'pending') {
49
+ throw new Error('Payment is not in a pending state');
146
50
  }
147
51
 
148
- payment.save(err => {
149
- if (err) {
150
- res.status(500).send({ message: err });
151
- return;
152
- }
52
+ const wallet = await Wallet.findById(walletId).session(session);
153
53
 
154
- res.send({ message: "Payment was created successfully!" });
155
- });
156
- })
157
- };
158
- const getstatus = (req, res) => {
159
- console.log(req.body.order)
160
- Payment.findOne({
161
- OrderId: req.body.order
162
- })
163
- .sort({createdAt: -1})
164
- .exec((err, payment) => {
165
- if (err) {
166
- res.status(500).send({ message: err });
167
- return;
168
- }
169
- if (!payment) {
170
- return res.status(404).send({ message: "Payment Not found." });
54
+ if (!wallet) {
55
+ throw new Error('Wallet not found');
171
56
  }
172
57
 
173
-
174
- if (payment.Status === 'CONFIRMED') {
175
- console.log(payment.Status)
176
- console.log(req.body.order)
177
- Order.findOneAndUpdate({ _id: req.body.order, status: 'Подтвержден' }, {$set: {status: "Ожидает отправки"}},{ new: true}).catch(function(error) {
178
- res.status(500).send(error);
179
- });
58
+ if (wallet.amount < payment.amount) {
59
+ throw new Error('Insufficient funds');
180
60
  }
181
61
 
182
- axios.post('https://securepay.tinkoff.ru/v2/GetState', {
183
- TerminalKey: TerminalKey,
184
- PaymentId: payment.PaymentId,
185
- Token: createToken({TerminalKey: TerminalKey, PaymentId: payment.PaymentId})
186
- }).then(function(response) {
187
- payment.Status = response.data.Status
188
- payment.save()
189
- res.send(response.data);
190
- }).catch(function(error) {
191
- res.status(500).send(error);
192
- });
193
- });
62
+ // Списание средств с кошелька
63
+ wallet.amount -= payment.amount;
64
+ await wallet.save({ session });
65
+
66
+ // Обновление статуса платежа
67
+ payment.status = 'completed';
68
+ await payment.save({ session });
69
+
70
+ await session.commitTransaction();
71
+ res.send('Payment processed successfully');
72
+ } catch (error) {
73
+ await session.abortTransaction();
74
+ res.status(500).send(error.message);
75
+ } finally {
76
+ session.endSession();
77
+ }
194
78
  };
195
79
 
196
- const addcustomer = (req, res) => {
197
- console.log(req.body)
198
-
199
- axios.post('https://securepay.tinkoff.ru/v2/AddCustomer', {
200
- TerminalKey: TerminalKey,
201
- CustomerKey: req.body,
202
- Token: createToken({TerminalKey: TerminalKey, CustomerKey: req.body.phone})
203
- })
204
- .then(function(response) {
205
- res.send(response.data);
206
- })
207
- .catch(function(error) {
208
- res.status(500).send(error);
209
- });
210
- }
211
-
212
- const getcustomercards = (req, res) => {
213
- axios.post('https://securepay.tinkoff.ru/v2/GetCardList', {
214
- TerminalKey: TerminalKey,
215
- CustomerKey: req.body.phone,
216
- Token: createToken({TerminalKey: TerminalKey, CustomerKey: req.body.phone})
217
- })
218
- .then(function(response) {
219
- console.log(response.data)
220
- res.send(response.data);
80
+ const deletePayment = (req, res) => {
81
+ Payment.findOneAndDelete({_id: req.params._id}, (err, payment) => {
82
+ if (err) {return res.status(500).send({ message: err }); }
83
+ if (!payment) {return res.status(404).send({ message: "Something wrong when deleting payment." }); }
84
+ res.status(200).send(payment);
221
85
  })
222
- .catch(function(error) {
223
- res.status(500).send(error);
224
- });
225
- }
86
+ };
226
87
 
227
88
  return {
228
- getAll,
229
89
  create,
230
- get,
90
+ read,
231
91
  update,
232
92
  delete: deletePayment,
233
- createToken,
234
- newpayment,
235
- setpayment,
236
- getstatus,
237
- addcustomer,
238
- getcustomercards
239
93
  };
240
94
  };
241
95