@ozdao/martyrs 0.2.449 → 0.2.451

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. package/dist/martyrs/src/components/Button/Button.vue.cjs +1 -1
  2. package/dist/martyrs/src/components/Button/Button.vue.js +1 -1
  3. package/dist/martyrs/src/components/Chips/{Chips.vue2.cjs → Chips.vue.cjs} +2 -2
  4. package/dist/martyrs/src/components/Chips/Chips.vue.cjs.map +1 -0
  5. package/dist/martyrs/src/components/Chips/{Chips.vue2.js → Chips.vue.js} +2 -2
  6. package/dist/martyrs/src/components/Chips/Chips.vue.js.map +1 -0
  7. package/dist/martyrs/src/components/Dropdown/{Dropdown.vue2.cjs → Dropdown.vue.cjs} +2 -2
  8. package/dist/martyrs/src/components/Dropdown/{Dropdown.vue2.js.map → Dropdown.vue.cjs.map} +1 -1
  9. package/dist/martyrs/src/components/Dropdown/{Dropdown.vue2.js → Dropdown.vue.js} +2 -2
  10. package/dist/martyrs/src/components/Dropdown/Dropdown.vue.js.map +1 -0
  11. package/dist/martyrs/src/components/Feed/Feed.vue.cjs +2 -2
  12. package/dist/martyrs/src/components/Feed/Feed.vue.js +2 -2
  13. package/dist/martyrs/src/components/Loader/{Loader.vue.cjs → Loader.vue2.cjs} +2 -2
  14. package/dist/martyrs/src/components/Loader/Loader.vue2.cjs.map +1 -0
  15. package/dist/martyrs/src/components/Loader/{Loader.vue.js → Loader.vue2.js} +2 -2
  16. package/dist/martyrs/src/components/Loader/{Loader.vue.cjs.map → Loader.vue2.js.map} +1 -1
  17. package/dist/martyrs/src/components/LocationMarker/LocationMarker.vue2.cjs +1 -1
  18. package/dist/martyrs/src/components/LocationMarker/LocationMarker.vue2.js +1 -1
  19. package/dist/martyrs/src/components/Menu/{Menu.vue.cjs → Menu.vue2.cjs} +2 -2
  20. package/dist/martyrs/src/components/Menu/Menu.vue2.cjs.map +1 -0
  21. package/dist/martyrs/src/components/Menu/{Menu.vue.js → Menu.vue2.js} +2 -2
  22. package/dist/martyrs/src/components/Menu/Menu.vue2.js.map +1 -0
  23. package/dist/martyrs/src/components/Popup/{Popup.vue.cjs → Popup.vue2.cjs} +2 -2
  24. package/dist/martyrs/src/components/Popup/Popup.vue2.cjs.map +1 -0
  25. package/dist/martyrs/src/components/Popup/{Popup.vue.js → Popup.vue2.js} +2 -2
  26. package/dist/martyrs/src/components/Popup/{Popup.vue.cjs.map → Popup.vue2.js.map} +1 -1
  27. package/dist/martyrs/src/components/SelectMulti/{SelectMulti.vue2.cjs → SelectMulti.vue.cjs} +2 -2
  28. package/dist/martyrs/src/components/SelectMulti/{SelectMulti.vue2.js.map → SelectMulti.vue.cjs.map} +1 -1
  29. package/dist/martyrs/src/components/SelectMulti/{SelectMulti.vue2.js → SelectMulti.vue.js} +2 -2
  30. package/dist/martyrs/src/components/SelectMulti/SelectMulti.vue.js.map +1 -0
  31. package/dist/martyrs/src/components/Slider/Slider.vue.cjs +1 -1
  32. package/dist/martyrs/src/components/Slider/Slider.vue.js +1 -1
  33. package/dist/martyrs/src/components/Tab/{Tab.vue2.cjs → Tab.vue.cjs} +2 -2
  34. package/dist/martyrs/src/components/Tab/{Tab.vue2.js.map → Tab.vue.cjs.map} +1 -1
  35. package/dist/martyrs/src/components/Tab/{Tab.vue2.js → Tab.vue.js} +2 -2
  36. package/dist/martyrs/src/components/Tab/Tab.vue.js.map +1 -0
  37. package/dist/martyrs/src/components/UploadImageMultiple/UploadImageMultiple.vue.cjs +1 -1
  38. package/dist/martyrs/src/components/UploadImageMultiple/UploadImageMultiple.vue.js +1 -1
  39. package/dist/martyrs/src/modules/auth/views/components/layouts/Auth.vue.cjs +2 -2
  40. package/dist/martyrs/src/modules/auth/views/components/layouts/Auth.vue.js +2 -2
  41. package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.cjs +1 -1
  42. package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js +1 -1
  43. package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.cjs +1 -1
  44. package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js +1 -1
  45. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.cjs +3 -3
  46. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +3 -3
  47. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileBlogposts.vue.cjs +1 -1
  48. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileBlogposts.vue.js +1 -1
  49. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEdit.vue.cjs +1 -1
  50. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEdit.vue.js +1 -1
  51. package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.cjs +1 -1
  52. package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js +1 -1
  53. package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.cjs +1 -1
  54. package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js +1 -1
  55. package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.cjs +1 -1
  56. package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js +1 -1
  57. package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.cjs +1 -1
  58. package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.js +1 -1
  59. package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.cjs +1 -1
  60. package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.js +1 -1
  61. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.cjs +3 -3
  62. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js +3 -3
  63. package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.cjs +1 -1
  64. package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js +1 -1
  65. package/dist/martyrs/src/modules/community/components/sections/HotPosts.vue.cjs +2 -2
  66. package/dist/martyrs/src/modules/community/components/sections/HotPosts.vue.js +2 -2
  67. package/dist/martyrs/src/modules/events/components/blocks/CardEvent.vue.cjs +1 -1
  68. package/dist/martyrs/src/modules/events/components/blocks/CardEvent.vue.js +1 -1
  69. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.cjs +3 -3
  70. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +3 -3
  71. package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.cjs +1 -1
  72. package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js +1 -1
  73. package/dist/martyrs/src/modules/events/components/pages/Event.vue.cjs +2 -2
  74. package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +2 -2
  75. package/dist/martyrs/src/modules/events/components/pages/Events.vue.cjs +1 -1
  76. package/dist/martyrs/src/modules/events/components/pages/Events.vue.js +1 -1
  77. package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.cjs +1 -1
  78. package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.js +1 -1
  79. package/dist/martyrs/src/modules/events/components/sections/EventsHot.vue.cjs +2 -2
  80. package/dist/martyrs/src/modules/events/components/sections/EventsHot.vue.js +2 -2
  81. package/dist/martyrs/src/modules/events/components/sections/Feed.vue.cjs +1 -1
  82. package/dist/martyrs/src/modules/events/components/sections/Feed.vue.js +1 -1
  83. package/dist/martyrs/src/modules/events/components/sections/List.vue.cjs +1 -1
  84. package/dist/martyrs/src/modules/events/components/sections/List.vue.js +1 -1
  85. package/dist/martyrs/src/modules/gallery/components/pages/Gallery.vue.cjs +1 -1
  86. package/dist/martyrs/src/modules/gallery/components/pages/Gallery.vue.js +1 -1
  87. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.cjs +3 -3
  88. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +3 -3
  89. package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.cjs +2 -2
  90. package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.js +2 -2
  91. package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.cjs +3 -3
  92. package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.cjs.map +1 -1
  93. package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.js +3 -3
  94. package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.js.map +1 -1
  95. package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.cjs +3 -3
  96. package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.cjs.map +1 -1
  97. package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.js +3 -3
  98. package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.js.map +1 -1
  99. package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.cjs +1 -1
  100. package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.js +1 -1
  101. package/dist/martyrs/src/modules/globals/views/components/sections/SectionPageTitle.vue.cjs +1 -1
  102. package/dist/martyrs/src/modules/globals/views/components/sections/SectionPageTitle.vue.js +1 -1
  103. package/dist/martyrs/src/modules/marketplace/views/components/sections/SectionMenu.vue.cjs +1 -1
  104. package/dist/martyrs/src/modules/marketplace/views/components/sections/SectionMenu.vue.js +1 -1
  105. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.cjs +1 -1
  106. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +1 -1
  107. package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.cjs +3 -3
  108. package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +3 -3
  109. package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.cjs +1 -1
  110. package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.js +1 -1
  111. package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.cjs +2 -2
  112. package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +2 -2
  113. package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.cjs +1 -1
  114. package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.js +1 -1
  115. package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.cjs +3 -3
  116. package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.js +3 -3
  117. package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.cjs +3 -3
  118. package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js +3 -3
  119. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs +2 -2
  120. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js +2 -2
  121. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.cjs +2 -2
  122. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.js +2 -2
  123. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.cjs +3 -3
  124. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +3 -3
  125. package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.cjs +1 -1
  126. package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.js +1 -1
  127. package/dist/martyrs/src/modules/organizations/components/sections/DetailsTabSection.vue.cjs +2 -2
  128. package/dist/martyrs/src/modules/organizations/components/sections/DetailsTabSection.vue.js +2 -2
  129. package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.cjs +2 -2
  130. package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.js +2 -2
  131. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.cjs +2 -2
  132. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +2 -2
  133. package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.cjs +1 -1
  134. package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.js +1 -1
  135. package/dist/martyrs/src/modules/pages/views/components/partials/SidebarPages.vue.cjs +1 -1
  136. package/dist/martyrs/src/modules/pages/views/components/partials/SidebarPages.vue.js +1 -1
  137. package/dist/martyrs/src/modules/products/components/blocks/CardPosition.vue.cjs +1 -1
  138. package/dist/martyrs/src/modules/products/components/blocks/CardPosition.vue.js +1 -1
  139. package/dist/martyrs/src/modules/products/components/blocks/Images360.vue.cjs +1 -1
  140. package/dist/martyrs/src/modules/products/components/blocks/Images360.vue.js +1 -1
  141. package/dist/martyrs/src/modules/products/components/blocks/ImagesThumbnails.vue.cjs +1 -1
  142. package/dist/martyrs/src/modules/products/components/blocks/ImagesThumbnails.vue.js +1 -1
  143. package/dist/martyrs/src/modules/products/components/pages/Categories.vue.cjs +2 -2
  144. package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js +2 -2
  145. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs +2 -2
  146. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +2 -2
  147. package/dist/martyrs/src/modules/products/components/pages/EditLeftover.vue.cjs +2 -2
  148. package/dist/martyrs/src/modules/products/components/pages/EditLeftover.vue.js +2 -2
  149. package/dist/martyrs/src/modules/products/components/pages/Leftovers.vue.cjs +1 -1
  150. package/dist/martyrs/src/modules/products/components/pages/Leftovers.vue.js +1 -1
  151. package/dist/martyrs/src/modules/products/components/pages/Product.vue.cjs +2 -2
  152. package/dist/martyrs/src/modules/products/components/pages/Product.vue.js +2 -2
  153. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.cjs +2 -2
  154. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +2 -2
  155. package/dist/martyrs/src/modules/products/components/pages/ProductRecommmendation.vue.cjs +1 -1
  156. package/dist/martyrs/src/modules/products/components/pages/ProductRecommmendation.vue.js +1 -1
  157. package/dist/martyrs/src/modules/products/components/pages/Products.vue.cjs +1 -1
  158. package/dist/martyrs/src/modules/products/components/pages/Products.vue.js +1 -1
  159. package/dist/martyrs/src/modules/products/components/sections/EditProductInfo.vue.cjs +1 -1
  160. package/dist/martyrs/src/modules/products/components/sections/EditProductInfo.vue.js +1 -1
  161. package/dist/martyrs/src/modules/products/components/sections/PopularProducts.vue.cjs +1 -1
  162. package/dist/martyrs/src/modules/products/components/sections/PopularProducts.vue.js +1 -1
  163. package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.cjs +1 -1
  164. package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js +1 -1
  165. package/dist/martyrs/src/modules/rents/views/components/pages/GanttChart.vue.cjs +1 -1
  166. package/dist/martyrs/src/modules/rents/views/components/pages/GanttChart.vue.js +1 -1
  167. package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.cjs +1 -1
  168. package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.js +1 -1
  169. package/dist/martyrs/src/modules/rents/views/components/pages/RentsEdit.vue.cjs +2 -2
  170. package/dist/martyrs/src/modules/rents/views/components/pages/RentsEdit.vue.js +2 -2
  171. package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.cjs +1 -1
  172. package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.js +1 -1
  173. package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.cjs +1 -1
  174. package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.js +1 -1
  175. package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.cjs +1 -1
  176. package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js +1 -1
  177. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.cjs +2 -2
  178. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +2 -2
  179. package/dist/organizations.server.js +34 -33
  180. package/dist/organizations.server.mjs +34 -33
  181. package/package.json +1 -1
  182. package/src/modules/globals/views/components/blocks/PopupDateSelector.vue +1 -1
  183. package/src/modules/globals/views/components/layouts/Client.vue +1 -1
  184. package/src/modules/organizations/controllers/organizations.controller.js +37 -38
  185. package/dist/martyrs/src/components/Chips/Chips.vue2.cjs.map +0 -1
  186. package/dist/martyrs/src/components/Chips/Chips.vue2.js.map +0 -1
  187. package/dist/martyrs/src/components/Dropdown/Dropdown.vue2.cjs.map +0 -1
  188. package/dist/martyrs/src/components/Loader/Loader.vue.js.map +0 -1
  189. package/dist/martyrs/src/components/Menu/Menu.vue.cjs.map +0 -1
  190. package/dist/martyrs/src/components/Menu/Menu.vue.js.map +0 -1
  191. package/dist/martyrs/src/components/Popup/Popup.vue.js.map +0 -1
  192. package/dist/martyrs/src/components/SelectMulti/SelectMulti.vue2.cjs.map +0 -1
  193. package/dist/martyrs/src/components/Tab/Tab.vue2.cjs.map +0 -1
@@ -444,8 +444,9 @@ function requireOrganizations_controller() {
444
444
  const savedMembership = await membership.save();
445
445
  const orgTag = `organization_${savedOrganization._id}`;
446
446
  await cache.delByTag(orgTag);
447
- const newCacheKey = JSON.stringify({ _id: savedOrganization._id });
448
- await cache.setWithTags(newCacheKey, [savedOrganization], [orgTag, "organizations"]);
447
+ const organizationObject = savedOrganization.toObject();
448
+ const newCacheKey = JSON.stringify({ id: organizationObject._id });
449
+ await cache.setWithTags(newCacheKey, [organizationObject], [orgTag, "organizations"]);
449
450
  res.status(201).json(savedOrganization);
450
451
  } catch (error) {
451
452
  console.error("Error:", error);
@@ -465,35 +466,35 @@ function requireOrganizations_controller() {
465
466
  }
466
467
  const orgTag = `organization_${organizationId}`;
467
468
  await cache.delByTag(orgTag);
469
+ const organizationObject = organization.toObject();
468
470
  const updateCacheKey = JSON.stringify({ _id: organizationId });
469
- await cache.setWithTags(updateCacheKey, [organization], [orgTag, "organizations"]);
471
+ await cache.setWithTags(updateCacheKey, [organizationObject], [orgTag, "organizations"]);
470
472
  res.status(200).json({ message: "Organization updated successfully", organization });
471
473
  } catch (error) {
472
474
  res.status(500).json({ error: error.message });
473
475
  }
474
476
  };
475
477
  const deleteOrganization = async (req, res) => {
476
- Organization.findOneAndRemove({ _id: req.params._id }).then((organization) => {
478
+ try {
479
+ const organization = await Organization.findOneAndRemove({ _id: req.params._id });
477
480
  if (!organization) {
478
481
  return res.status(404).send({ message: "Organization not found" });
479
482
  }
480
- Membership.deleteMany({ target: req.params._id }).then(() => {
481
- const newToken = jwt.sign({
482
- _id: user._id,
483
- organization: null
484
- }, process.env.SECRET_KEY, {
485
- expiresIn: 86400
486
- // 24 hours
487
- });
488
- const orgTag = `organization_${req.params._id}`;
489
- cache.delByTag(orgTag);
490
- res.send({ newToken });
491
- }).catch((err) => {
492
- res.status(500).send({ message: "Error deleting memberships: " + err.message });
483
+ await Membership.deleteMany({ target: req.params._id });
484
+ const newToken = jwt.sign({
485
+ _id: req.userId,
486
+ // Предполагаю, что req.userId доступен
487
+ organization: null
488
+ }, process.env.SECRET_KEY, {
489
+ expiresIn: 86400
490
+ // 24 hours
493
491
  });
494
- }).catch((err) => {
492
+ const orgTag = `organization_${req.params._id}`;
493
+ await cache.delByTag(orgTag);
494
+ res.send({ newToken });
495
+ } catch (err) {
495
496
  res.status(500).send({ message: err.message });
496
- });
497
+ }
497
498
  };
498
499
  const checkAccesses = async (req, res) => {
499
500
  try {
@@ -503,8 +504,8 @@ function requireOrganizations_controller() {
503
504
  if (cachedResult) {
504
505
  return res.status(200).json(cachedResult);
505
506
  }
506
- const depts = await Department.find({ "members.user": uid });
507
- const ownedOrgs = await Organization.find({ owner: uid });
507
+ const depts = await Department.find({ "members.user": uid }).lean();
508
+ const ownedOrgs = await Organization.find({ owner: uid }).lean();
508
509
  const ownedOrgIds = ownedOrgs.map((org) => org._id.toString());
509
510
  const accesses = {};
510
511
  const processAccesses = (orgId, isOwner, deptAccesses) => {
@@ -667,16 +668,16 @@ function requireMemberships_controller() {
667
668
  }
668
669
  };
669
670
  const deleteMembership = async (req, res) => {
670
- const { _id, type, target, user: user2, role } = req.body;
671
+ const { _id, type, target, user, role } = req.body;
671
672
  try {
672
- const membership = _id ? await Membership.findOneAndDelete({ _id: new ObjectId(_id) }) : await Membership.findOneAndDelete({ type, target, user: user2, role });
673
+ const membership = _id ? await Membership.findOneAndDelete({ _id: new ObjectId(_id) }) : await Membership.findOneAndDelete({ type, target, user, role });
673
674
  if (!membership) {
674
675
  return res.status(404).send({ errorCode: "MEMBERSHIP_NOT_FOUND" });
675
676
  }
676
677
  if (membership.type === "organization") {
677
678
  await Department.updateMany(
678
679
  { organization: target },
679
- { $pull: { members: { user: user2 } } }
680
+ { $pull: { members: { user } } }
680
681
  );
681
682
  }
682
683
  res.status(200).send(membership);
@@ -736,18 +737,18 @@ function requireInvites_controller() {
736
737
  const createdMemberships = [];
737
738
  try {
738
739
  for (let invite of list) {
739
- let user2 = null;
740
+ let user = null;
740
741
  if (!invite || !invite.contact) {
741
742
  continue;
742
743
  }
743
744
  if (invite.contact.includes("@")) {
744
- user2 = await User.findOne({ email: invite.contact });
745
+ user = await User.findOne({ email: invite.contact });
745
746
  } else {
746
- user2 = await User.findOne({ phone: invite.contact });
747
+ user = await User.findOne({ phone: invite.contact });
747
748
  }
748
- if (user2) {
749
+ if (user) {
749
750
  const membership = new Membership({
750
- user: user2._id,
751
+ user: user._id,
751
752
  type: "organization",
752
753
  target: req.body.owner.target,
753
754
  role: "member",
@@ -1375,7 +1376,7 @@ function requireOrganizations_policies() {
1375
1376
  }
1376
1377
  });
1377
1378
  abacAccessControl.registerGlobalPolicy("OrganizationAccessPolicy", async (context) => {
1378
- const { user: user2, resource, data, action, currentResource, req } = context;
1379
+ const { user, resource, data, action, currentResource, req } = context;
1379
1380
  if (!resource || !action) {
1380
1381
  return false;
1381
1382
  }
@@ -1394,19 +1395,19 @@ function requireOrganizations_policies() {
1394
1395
  };
1395
1396
  const orgId = findOrgId();
1396
1397
  if (orgId) {
1397
- if (user2) {
1398
+ if (user) {
1398
1399
  try {
1399
1400
  const objectId = new db.mongoose.Types.ObjectId(orgId);
1400
1401
  const isOrgOwner = await Organization.exists({
1401
1402
  _id: objectId,
1402
- owner: user2
1403
+ owner: user
1403
1404
  });
1404
1405
  if (isOrgOwner) {
1405
1406
  return true;
1406
1407
  }
1407
1408
  const departments = await Department.find({
1408
1409
  organization: objectId,
1409
- "members.user": user2
1410
+ "members.user": user
1410
1411
  });
1411
1412
  const hasAccess = departments.some((department) => {
1412
1413
  const accessRights = department.accesses?.[resource];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ozdao/martyrs",
3
- "version": "0.2.449",
3
+ "version": "0.2.451",
4
4
  "description": "Fullstack 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",
@@ -22,7 +22,7 @@
22
22
 
23
23
  <PriceTotal
24
24
  :totalPrice="totalAmount"
25
- :currency="product.price_currency"
25
+ :currency="returnCurrency()"
26
26
  :showFees="showFees"
27
27
  :feesRate="feesRate"
28
28
  :showVat="showVat"
@@ -78,7 +78,7 @@
78
78
  :widthHidden='route.meta?.sidebar_width_hidden'
79
79
  :width="route.meta?.sidebar_width"
80
80
  :theme="headerTheme"
81
- @closeSidebar="() => globals.state.isOpenSidebar = !globals.state.isOpenSidebar"
81
+ @closeSidebar="() => globals.state.isOpenSidebar = false"
82
82
  >
83
83
  <transition name="moveFromTop" mode="out-in" appear>
84
84
  <component
@@ -84,11 +84,9 @@ const controllerFactory = (db) => {
84
84
  if(req.body._id === null) {
85
85
  delete req.body._id;
86
86
  }
87
-
88
87
  try {
89
88
  const organization = new Organization(req.body);
90
89
  const savedOrganization = await organization.save();
91
-
92
90
  const membership = new Membership({
93
91
  user: savedOrganization.owner,
94
92
  type: 'organization',
@@ -98,15 +96,18 @@ const controllerFactory = (db) => {
98
96
  });
99
97
 
100
98
  const savedMembership = await membership.save();
101
-
99
+
102
100
  // Очищаем кэш для этой организации
103
101
  const orgTag = `organization_${savedOrganization._id}`;
104
102
  await cache.delByTag(orgTag);
105
-
103
+
104
+ // Convert the Mongoose document to a plain JavaScript object before caching
105
+ const organizationObject = savedOrganization.toObject();
106
+
106
107
  // Обновляем кэш, добавляя новую организацию
107
- const newCacheKey = JSON.stringify({ _id: savedOrganization._id }); // Ключ для новой записи
108
- await cache.setWithTags(newCacheKey, [savedOrganization], [orgTag, 'organizations']);
109
-
108
+ const newCacheKey = JSON.stringify({ id: organizationObject._id });
109
+ await cache.setWithTags(newCacheKey, [organizationObject], [orgTag, 'organizations']);
110
+
110
111
  res.status(201).json(savedOrganization);
111
112
  } catch (error) {
112
113
  console.error('Error:', error);
@@ -117,7 +118,6 @@ const controllerFactory = (db) => {
117
118
  const update = async (req, res) => {
118
119
  try {
119
120
  const organizationId = req.params._id;
120
-
121
121
  const updatedData = req.body;
122
122
 
123
123
  const organization = await Organization.findByIdAndUpdate(organizationId, updatedData, {
@@ -133,9 +133,12 @@ const controllerFactory = (db) => {
133
133
  const orgTag = `organization_${organizationId}`;
134
134
  await cache.delByTag(orgTag);
135
135
 
136
+ // Преобразуем документ Mongoose в обычный объект перед кэшированием
137
+ const organizationObject = organization.toObject();
138
+
136
139
  // Обновляем кэш новой версией организации
137
- const updateCacheKey = JSON.stringify({ _id: organizationId }); // Ключ для обновленной записи
138
- await cache.setWithTags(updateCacheKey, [organization], [orgTag, 'organizations']);
140
+ const updateCacheKey = JSON.stringify({ _id: organizationId });
141
+ await cache.setWithTags(updateCacheKey, [organizationObject], [orgTag, 'organizations']);
139
142
 
140
143
  res.status(200).json({ message: 'Organization updated successfully', organization });
141
144
  } catch (error) {
@@ -144,35 +147,31 @@ const controllerFactory = (db) => {
144
147
  };
145
148
 
146
149
  const deleteOrganization = async (req, res) => {
147
- Organization.findOneAndRemove({ _id: req.params._id })
148
- .then(organization => {
149
- if (!organization) {
150
- return res.status(404).send({ message: "Organization not found" });
151
- }
150
+ try {
151
+ const organization = await Organization.findOneAndRemove({ _id: req.params._id });
152
+
153
+ if (!organization) {
154
+ return res.status(404).send({ message: "Organization not found" });
155
+ }
152
156
 
153
- // Удаление всех memberships, связанных с этой организацией
154
- Membership.deleteMany({ target: req.params._id })
155
- .then(() => {
156
- const newToken = jwt.sign({
157
- _id: user._id,
158
- organization: null
159
- }, process.env.SECRET_KEY, {
160
- expiresIn: 86400 // 24 hours
161
- });
157
+ // Удаление всех memberships, связанных с этой организацией
158
+ await Membership.deleteMany({ target: req.params._id });
159
+
160
+ const newToken = jwt.sign({
161
+ _id: req.userId, // Предполагаю, что req.userId доступен
162
+ organization: null
163
+ }, process.env.SECRET_KEY, {
164
+ expiresIn: 86400 // 24 hours
165
+ });
162
166
 
163
- // Очищаем кэш для этой организации
164
- const orgTag = `organization_${req.params._id}`;
165
- cache.delByTag(orgTag);
167
+ // Очищаем кэш для этой организации
168
+ const orgTag = `organization_${req.params._id}`;
169
+ await cache.delByTag(orgTag);
166
170
 
167
- res.send({ newToken });
168
- })
169
- .catch(err => {
170
- res.status(500).send({ message: "Error deleting memberships: " + err.message });
171
- });
172
- })
173
- .catch(err => {
174
- res.status(500).send({ message: err.message });
175
- });
171
+ res.send({ newToken });
172
+ } catch (err) {
173
+ res.status(500).send({ message: err.message });
174
+ }
176
175
  };
177
176
 
178
177
  const checkAccesses = async (req, res) => {
@@ -186,8 +185,8 @@ const controllerFactory = (db) => {
186
185
  return res.status(200).json(cachedResult);
187
186
  }
188
187
 
189
- const depts = await Department.find({ 'members.user': uid });
190
- const ownedOrgs = await Organization.find({ owner: uid });
188
+ const depts = await Department.find({ 'members.user': uid }).lean(); // Используем lean() для получения обычных объектов
189
+ const ownedOrgs = await Organization.find({ owner: uid }).lean(); // Используем lean() для получения обычных объектов
191
190
  const ownedOrgIds = ownedOrgs.map(org => org._id.toString());
192
191
 
193
192
  const accesses = {};
@@ -1 +0,0 @@
1
- {"version":3,"file":"Chips.vue2.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Chips.vue2.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Dropdown.vue2.cjs","sources":["../../../../../src/components/Dropdown/Dropdown.vue"],"sourcesContent":["<template>\n <div class=\"dropdown pos-relative\" v-click-outside=\"clickedOutside\" @click.stop=\"isOpen = !isOpen\">\n <div v-if=\"isComponentLabel\" class=\"w-100 h-100 flex-center flex\">\n <component :is=\"label.component\" v-bind=\"label.props\" :class=\"label.class\"></component>\n </div>\n <div v-else>\n {{ label }}\n </div>\n <transition name=\"TransitionTranslateY\" mode=\"out-in\">\n <div \n v-show=\"isOpen\" \n :style=\"{ left: align === 'left' ? '0' : 'auto', right: align === 'right' ? '0' : 'auto' }\" \n class=\"dropdown-content radius-big\" \n >\n <slot></slot>\n </div>\n </transition>\n </div>\n</template>\n\n<script setup>\nimport { ref, computed } from 'vue';\nimport clickOutside from '../FieldPhone/click-outside';\n\nlet vClickOutside = clickOutside\n\nconst props = defineProps({\n label: {\n type: [String, Object],\n default: 'Open'\n },\n align: {\n type: String,\n default: 'left'\n }\n})\n\nconst isOpen = ref(false);\nconst isComponentLabel = computed(() => typeof props.label === 'object');\n\nfunction clickedOutside () {\n isOpen.value = false\n}\n</script>\n\n<style >\n.dropdown-content {\n display: block;\n position: absolute;\n box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);\n z-index: 1;\n}\n\n/*.dropdown:hover .dropdown-content {\n display: block;\n}*/\n</style>\n"],"names":["clickOutside","ref","computed"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAwBA,QAAI,gBAAgBA,aAAAA;AAEpB,UAAM,QAAQ;AAWd,UAAM,SAASC,IAAG,IAAC,KAAK;AACxB,UAAM,mBAAmBC,IAAAA,SAAS,MAAM,OAAO,MAAM,UAAU,QAAQ;AAEvE,aAAS,iBAAkB;AACzB,aAAO,QAAQ;AAAA,IACjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Loader.vue.js","sources":["../../../../../src/components/Loader/Loader.vue"],"sourcesContent":["<template>\n <div class=\"circular-loader\" :class=\"{ 'circular-loader-centered': centered }\">\n <svg viewBox=\"25 25 50 50\">\n <circle class=\"circular-loader-fill\" cx=\"50\" cy=\"50\" r=\"20\" fill=\"none\" stroke-width=\"4\" stroke-miterlimit=\"10\" />\n <circle class=\"circular-loader-circle\" cx=\"50\" cy=\"50\" r=\"20\" fill=\"none\" stroke-width=\"4\" stroke-miterlimit=\"10\" />\n </svg>\n <div v-if=\"progress\" class=\"progress-text\">{{ progress }}</div>\n <div v-if=\"status\" class=\"uppercase t-semi w-m-10r status-text\">{{ status }}</div>\n </div>\n</template>\n\n<script>\nexport default {\n props: {\n progress: {\n type: Number,\n default: null,\n },\n status: {\n type: String,\n default: null,\n },\n centered: {\n type: Boolean,\n default: true, // По умолчанию лоадер центрирован (для обратной совместимости)\n },\n },\n};\n</script>\n\n<style>\n.circular-loader {\n position: relative;\n z-index: 50;\n height: 2rem;\n width: 2rem;\n}\n\n.circular-loader-centered {\n top: calc(50% - 1rem);\n left: calc(50% - 1rem);\n}\n\n.circular-loader svg {\n animation: rotate 2s linear infinite;\n}\n\n.circular-loader-circle {\n stroke-dasharray: 1, 200;\n stroke-dashoffset: 0;\n stroke-linecap: round;\n stroke: rgb(var(--main));\n animation: dash 1.5s ease-in-out infinite;\n}\n\n.circular-loader-fill {\n stroke-linecap: round;\n stroke: rgba(var(--black),0.2);\n}\n\n.progress-text {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n font-size: 0.8rem;\n color: rgb(var(--main));;\n}\n\n.status-text {\n position: absolute;\n top: 120%;\n left: calc(50% - 5rem);\n font-size: 0.8rem;\n width: 10rem !important;\n text-align: center;\n}\n\n@keyframes rotate {\n 100% {\n transform: rotate(360deg);\n }\n}\n\n@keyframes dash {\n 0% {\n stroke-dasharray: 1, 200;\n stroke-dashoffset: 0;\n }\n 50% {\n stroke-dasharray: 89, 200;\n stroke-dashoffset: -35;\n }\n 100% {\n stroke-dasharray: 1, 200;\n stroke-dashoffset: -124;\n }\n}\n</style>"],"names":["_createElementBlock","_normalizeClass","_createElementVNode","_toDisplayString","_createCommentVNode"],"mappings":";;;AAYA,MAAK,YAAU;AAAA,EACb,OAAO;AAAA,IACL,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA;AAAA,IACV;AAAA,EACF;AACH;;EA3BA,KAAA;AAAA,EAMyB,OAAM;;;EAN/B,KAAA;AAAA,EAOuB,OAAM;;;sBAN3BA,mBAOM,OAAA;AAAA,IAPD,OADPC,eAAA,CACa,mBAAiB,EAAA,4BAAuC,OAAQ,UAAA,CAAA;AAAA;8BACzEC,mBAGM,OAAA,EAHD,SAAQ,iBAAa;AAAA,MACxBA,mBAAkH,UAAA;AAAA,QAA1G,OAAM;AAAA,QAAuB,IAAG;AAAA,QAAK,IAAG;AAAA,QAAK,GAAE;AAAA,QAAK,MAAK;AAAA,QAAO,gBAAa;AAAA,QAAI,qBAAkB;AAAA;MAC3GA,mBAAoH,UAAA;AAAA,QAA5G,OAAM;AAAA,QAAyB,IAAG;AAAA,QAAK,IAAG;AAAA,QAAK,GAAE;AAAA,QAAK,MAAK;AAAA,QAAO,gBAAa;AAAA,QAAI,qBAAkB;AAAA;;IAEpG,OAAQ,yBAAnBF,mBAA+D,OAA/D,YAA+DG,gBAAjB,OAAQ,QAAA,GAAA,CAAA,KAN1DC,mBAAA,IAAA,IAAA;AAAA,IAOe,OAAM,uBAAjBJ,mBAAkF,OAAlF,YAAkFG,gBAAf,OAAM,MAAA,GAAA,CAAA,KAP7EC,mBAAA,IAAA,IAAA;AAAA;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Menu.vue.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Menu.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Popup.vue.js","sources":["../../../../../src/components/Popup/Popup.vue"],"sourcesContent":["<template>\n\t\t<transition name=\"moveFromTop\">\n\t\t\t<teleport to=\"body\" v-if=\"isPopupOpen\">\n\t\t\t\t<div v-if=\"isPopupOpen\" key=\"popup-content\" class=\"pd-small z-index-6 popup-wrapper\"\n\t\t\t\t\t:class=\"{\n \t\t\t\t\t'pd-t-extra': MOBILE_APP === 'ios', \n\t\t\t\t\t}\"\n\t\t\t\t>\n\n\t\t\t\t\t<transition name=\"TransitionTranslateY\" mode=\"out-in\">\n\t\t\t\t\t\t<section class=\"h-max-100 o-y-scroll pos-relative z-index-4\" v-bind=\"$attrs\" :class=\"$attrs.class\">\n\t\t\t\t\t\t\t\t<h4 v-if=\"title\" class=\"mn-b-small\">{{title}}</h4>\n\t\t\t\t\t\t\t\t<IconCross :fill=\"'rgb(var(--white))'\" @click=\"closePopup()\" class=\"cursor-pointer bg-second pd-micro radius-extra pos-absolute pos-t-0 pos-r-0 mn-t-semi mn-r-semi hover-scale-1 i-medium z-index-5\"/>\n\t\t\t\t\t\t\t\t<slot></slot>\n\t\t\t\t\t\t</section> \n\t\t\t\t\t</transition>\n\n\t\t\t\t\t<div \n\t\t\t\t\t\t@click=\"closePopup()\" \n\t\t\t\t :class=\"{'active':isPopupOpen === true}\" \n\t\t\t\t class=\"color-overlay z-index-3\">\n\t\t\t\t\t</div>\n\n\t\t\t\t</div>\n\t\t</teleport>\n\t</transition>\n</template>\n\n<script setup>\nimport { computed, watch, onMounted, ref, nextTick } from 'vue';\n// Import libs\nimport { useRoute, useRouter } from 'vue-router'\nimport { useI18n } from 'vue-i18n'\n// Icons\nimport IconCross from '@martyrs/src/modules/icons/navigation/IconCross.vue';\n// Define props\nconst props = defineProps({\n isPopupOpen: {\n \ttype: Boolean,\n\t default: false\n },\n style: String,\n title: String,\n});\nconst emits = defineEmits(['close-popup'])\n\nfunction closePopup() {\n emits(\"close-popup\");\n} \n\nwatch(() => props.isPopupOpen, (newVal) => {\n if (newVal) {\n document.body.classList.add('no-scroll');\n } else {\n document.body.classList.remove('no-scroll');\n }\n});\n\n// Accessing router and store\nconst route = useRoute()\nconst router = useRouter()\n// Localization\nconst text = {\n \tmessages: {\n\t en: {},\n\t ru: {}\n\t}\n}\nconst { t } = useI18n(text)\n</script>\n\n<style lang=\"scss\">\n\t.no-scroll {\n\t overflow: hidden;\n\t}\n\n\t.popup-wrapper {\n\t\tdisplay: flex;\n\t\tposition: fixed;\n\n\t\talign-items: center;\n\t\tjustify-content: center;\n\n\t\twidth: 100%;\n\t\theight: 100%;\n\n\t\tleft: 0;\n\t\ttop: 0;\n\n\t\tz-index: 40;\n\n\t\t.popup {\n\t\t\tposition: absolute;\n\t\t\theight: auto;\n\t\t\tpadding: 2rem;\n\t\t\tmin-width: 24rem;\n\t\t\tborder-radius: 2rem;\n\t\t\toverflow: hidden;\n\n\t\t\tcolor: white;\n\t\t\tbackground: black;\n\n\t\t\tz-index: 40;\n\t\t}\n\t}\n\n\t.color-overlay {\n\t\tdisplay: block;\n\t\tposition: fixed;\n\n\t\tleft: 0;\n\t\ttop: 0;\n\n\t\twidth: 100%;\n\t\theight: 100%;\n\n\t\tbackground: rgba(0,0,0,0.0);\n\t\tpointer-events: none;\n\n\t\ttransform: scale(1.5);\n\n\t\ttransition: all 0.5s cubic-bezier(.31,.79,.24,.92);\n\n\t\t&.active {\n\t\t\tbackground: rgba(#000,0.25);\n\t\t\tpointer-events: all;\n\t\t}\n\t}\n</style>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAoCA,UAAM,QAAQ;AAQd,UAAM,QAAQ;AAEd,aAAS,aAAa;AACpB,YAAM,aAAa;AAAA,IACrB;AAEA,UAAM,MAAM,MAAM,aAAa,CAAC,WAAW;AACzC,UAAI,QAAQ;AACV,iBAAS,KAAK,UAAU,IAAI,WAAW;AAAA,MAC3C,OAAS;AACL,iBAAS,KAAK,UAAU,OAAO,WAAW;AAAA,MAC9C;AAAA,IACA,CAAC;AAGa,aAAQ;AACP,cAAS;AAExB,UAAM,OAAO;AAAA,MACV,UAAU;AAAA,QACR,IAAI,CAAE;AAAA,QACN,IAAI,CAAA;AAAA,MACT;AAAA,IACA;AACA,UAAM,EAAE,EAAC,IAAK,QAAQ,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SelectMulti.vue2.cjs","sources":["../../../../../src/components/SelectMulti/SelectMulti.vue"],"sourcesContent":["<template>\n <div\n :tabindex=\"searchable ? -1 : tabindex\"\n :class=\"{ 'multiselect--active': isOpen, 'multiselect--disabled': disabled, 'multiselect--above': isAbove, 'multiselect--has-options-group': hasOptionGroup }\"\n @focus=\"activate()\"\n @blur=\"searchable ? false : deactivate()\"\n @keydown.self.down.prevent=\"pointerForward()\"\n @keydown.self.up.prevent=\"pointerBackward()\"\n @keypress.enter.tab.stop.self=\"addPointerElement($event)\"\n @keyup.esc=\"deactivate()\"\n class=\"multiselect flex flex-v-center\"\n role=\"combobox\"\n :aria-owns=\"'listbox-'+id\">\n \n <slot name=\"caret\" :toggle=\"toggle\">\n <div @mousedown.prevent.stop=\"toggle()\" class=\"multiselect__select\"></div>\n </slot>\n \n <slot name=\"clear\" :search=\"search\"></slot>\n \n <div ref=\"tags\" class=\"multiselect__tags\">\n <slot\n name=\"selection\"\n :search=\"search\"\n :remove=\"removeElement\"\n :values=\"visibleValues\"\n :is-open=\"isOpen\"\n >\n <div class=\"multiselect__tags-wrap\" v-show=\"visibleValues.length > 0\">\n <template v-for=\"(option, index) of visibleValues\" @mousedown.prevent>\n <slot name=\"tag\" :option=\"option\" :search=\"search\" :remove=\"removeElement\">\n <span class=\"multiselect__tag\" :key=\"index\">\n <span v-text=\"getOptionLabel(option)\"></span>\n <i tabindex=\"1\" @keypress.enter.prevent=\"removeElement(option)\"\n @mousedown.prevent=\"removeElement(option)\" class=\"multiselect__tag-icon\"></i>\n </span>\n </slot>\n </template>\n </div>\n <template v-if=\"internalValue && internalValue.length > limit\">\n <slot name=\"limit\">\n <strong class=\"multiselect__strong\" v-text=\"limitText(internalValue.length - limit)\"/>\n </slot>\n </template>\n </slot>\n <transition name=\"multiselect__loading\">\n <slot name=\"loading\">\n <div v-show=\"loading\" class=\"multiselect__spinner\"/>\n </slot>\n </transition>\n <input\n ref=\"search\"\n v-if=\"searchable\"\n :name=\"name\"\n :id=\"id\"\n type=\"text\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n :placeholder=\"placeholder\"\n :style=\"inputStyle\"\n :value=\"search\"\n :disabled=\"disabled\"\n :tabindex=\"tabindex\"\n @input=\"updateSearch($event.target.value)\"\n @focus.prevent=\"activate()\"\n @blur.prevent=\"deactivate()\"\n @keyup.esc=\"deactivate()\"\n @keydown.down.prevent=\"pointerForward()\"\n @keydown.up.prevent=\"pointerBackward()\"\n @keypress.enter.prevent.stop.self=\"addPointerElement($event)\"\n @keydown.delete.stop=\"removeLastElement()\"\n class=\"multiselect__input\"\n :aria-controls=\"'listbox-'+id\"\n />\n <span\n v-if=\"isSingleLabelVisible\"\n class=\"multiselect__single\"\n @mousedown.prevent=\"toggle\"\n >\n <slot name=\"singleLabel\" :option=\"singleValue\">\n {{ currentOptionLabel }}\n </slot>\n </span>\n <span\n v-if=\"isPlaceholderVisible\"\n class=\"multiselect__placeholder\"\n @mousedown.prevent=\"toggle\"\n >\n <slot name=\"placeholder\">\n {{ placeholder }}\n </slot>\n </span>\n </div>\n \n <transition name=\"multiselect\">\n <div\n class=\"multiselect__content-wrapper\"\n v-show=\"isOpen\"\n @focus=\"activate\"\n tabindex=\"-1\"\n @mousedown.prevent\n :style=\"{ maxHeight: optimizedHeight + 'px' }\"\n ref=\"list\"\n :class=\"$attrs.class\"\n >\n <ul class=\"multiselect__content\" :style=\"contentStyle\" role=\"listbox\" :id=\"'listbox-'+id\">\n <slot name=\"beforeList\"></slot>\n <li v-if=\"multiple && max === internalValue.length\">\n <span class=\"multiselect__option\">\n <slot name=\"maxElements\">Maximum of {{ max }} options selected. First remove a selected option to select another.</slot>\n </span>\n </li>\n <template v-if=\"!max || internalValue.length < max\">\n <li class=\"multiselect__element\"\n v-for=\"(option, index) of filteredOptions\"\n :key=\"index\"\n v-bind:id=\"id + '-' + index\"\n v-bind:role=\"!(option && (option.$isLabel || option.$isDisabled)) ? 'option' : null\">\n <span\n v-if=\"!(option && (option.$isLabel || option.$isDisabled))\"\n :class=\"optionHighlight(index, option)\"\n @click.stop=\"select(option)\"\n @mouseenter.self=\"pointerSet(index)\"\n :data-select=\"option && option.isTag ? tagPlaceholder : selectLabelText\"\n :data-selected=\"selectedLabelText\"\n :data-deselect=\"deselectLabelText\"\n class=\"multiselect__option\">\n <slot name=\"option\" :option=\"option\" :search=\"search\" :index=\"index\">\n <span>{{ getOptionLabel(option) }}</span>\n </slot>\n </span>\n <span\n v-if=\"option && (option.$isLabel || option.$isDisabled)\"\n :data-select=\"groupSelect && selectGroupLabelText\"\n :data-deselect=\"groupSelect && deselectGroupLabelText\"\n :class=\"groupHighlight(index, option)\"\n @mouseenter.self=\"groupSelect && pointerSet(index)\"\n @mousedown.prevent=\"selectGroup(option)\"\n class=\"multiselect__option\">\n <slot name=\"option\" :option=\"option\" :search=\"search\" :index=\"index\">\n <span>{{ getOptionLabel(option) }}</span>\n </slot>\n </span>\n </li>\n </template>\n <li v-show=\"showNoResults && (filteredOptions.length === 0 && search && !loading)\">\n <span class=\"multiselect__option\">\n <slot name=\"noResult\" :search=\"search\">No elements found. Consider changing the search query.</slot>\n </span>\n </li>\n <li v-show=\"showNoOptions && ((options.length === 0 || (hasOptionGroup === true && filteredOptions.length === 0)) && !search && !loading)\">\n <span class=\"multiselect__option\">\n <slot name=\"noOptions\">List is empty.</slot>\n </span>\n </li>\n <slot name=\"afterList\"></slot>\n </ul>\n </div>\n </transition>\n </div>\n</template>\n\n<script>\nimport multiselectMixin from './multiselectMixin'\nimport pointerMixin from './pointerMixin'\n\nexport default {\n name: 'vue-multiselect',\n mixins: [multiselectMixin, pointerMixin],\n compatConfig: {\n MODE: 3,\n ATTR_ENUMERATED_COERCION: false\n },\n props: {\n /**\n * name attribute to match optional label element\n * @default ''\n * @type {String}\n */\n name: {\n type: String,\n default: ''\n },\n /**\n * Presets the selected options value.\n * @type {Object||Array||String||Integer}\n */\n modelValue: {\n type: null,\n default () {\n return []\n }\n },\n /**\n * String to show when pointing to an option\n * @default 'Press enter to select'\n * @type {String}\n */\n selectLabel: {\n type: String,\n default: 'Press enter to select'\n },\n /**\n * String to show when pointing to an option\n * @default 'Press enter to select'\n * @type {String}\n */\n selectGroupLabel: {\n type: String,\n default: 'Press enter to select group'\n },\n /**\n * String to show next to selected option\n * @default 'Selected'\n * @type {String}\n */\n selectedLabel: {\n type: String,\n default: 'Selected'\n },\n /**\n * String to show when pointing to an already selected option\n * @default 'Press enter to remove'\n * @type {String}\n */\n deselectLabel: {\n type: String,\n default: 'Press enter to remove'\n },\n /**\n * String to show when pointing to an already selected option\n * @default 'Press enter to remove'\n * @type {String}\n */\n deselectGroupLabel: {\n type: String,\n default: 'Press enter to deselect group'\n },\n /**\n * Decide whether to show pointer labels\n * @default true\n * @type {Boolean}\n */\n showLabels: {\n type: Boolean,\n default: true\n },\n /**\n * Limit the display of selected options. The rest will be hidden within the limitText string.\n * @default 99999\n * @type {Integer}\n */\n limit: {\n type: Number,\n default: 99999\n },\n /**\n * Sets maxHeight style value of the dropdown\n * @default 300\n * @type {Integer}\n */\n maxHeight: {\n type: Number,\n default: 300\n },\n /**\n * Function that process the message shown when selected\n * elements pass the defined limit.\n * @default 'and * more'\n * @param {Int} count Number of elements more than limit\n * @type {Function}\n */\n limitText: {\n type: Function,\n default: (count) => `and ${count} more`\n },\n /**\n * Set true to trigger the loading spinner.\n * @default False\n * @type {Boolean}\n */\n loading: {\n type: Boolean,\n default: false\n },\n /**\n * Disables the multiselect if true.\n * @default false\n * @type {Boolean}\n */\n disabled: {\n type: Boolean,\n default: false\n },\n /**\n * Fixed opening direction\n * @default ''\n * @type {String}\n */\n openDirection: {\n type: String,\n default: ''\n },\n /**\n * Shows slot with message about empty options\n * @default true\n * @type {Boolean}\n */\n showNoOptions: {\n type: Boolean,\n default: true\n },\n showNoResults: {\n type: Boolean,\n default: true\n },\n tabindex: {\n type: Number,\n default: 0\n }\n },\n computed: {\n hasOptionGroup () {\n return this.groupValues && this.groupLabel && this.groupSelect\n },\n isSingleLabelVisible () {\n return (\n (this.singleValue || this.singleValue === 0) &&\n (!this.isOpen || !this.searchable) &&\n !this.visibleValues.length\n )\n },\n isPlaceholderVisible () {\n return !this.internalValue.length && (!this.searchable || !this.isOpen)\n },\n visibleValues () {\n return this.multiple ? this.internalValue.slice(0, this.limit) : []\n },\n singleValue () {\n return this.internalValue[0]\n },\n deselectLabelText () {\n return this.showLabels ? this.deselectLabel : ''\n },\n deselectGroupLabelText () {\n return this.showLabels ? this.deselectGroupLabel : ''\n },\n selectLabelText () {\n return this.showLabels ? this.selectLabel : ''\n },\n selectGroupLabelText () {\n return this.showLabels ? this.selectGroupLabel : ''\n },\n selectedLabelText () {\n return this.showLabels ? this.selectedLabel : ''\n },\n inputStyle () {\n if (\n this.searchable ||\n (this.multiple && this.modelValue && this.modelValue.length)\n ) {\n // Hide input by setting the width to 0 allowing it to receive focus\n return this.isOpen\n ? {width: '100%'}\n : {width: '0', position: 'absolute', padding: '0'}\n }\n return ''\n },\n contentStyle () {\n return this.options.length\n ? {display: 'inline-block'}\n : {display: 'block'}\n },\n isAbove () {\n if (this.openDirection === 'above' || this.openDirection === 'top') {\n return true\n } else if (\n this.openDirection === 'below' ||\n this.openDirection === 'bottom'\n ) {\n return false\n } else {\n return this.preferredOpenDirection === 'above'\n }\n },\n showSearchInput () {\n return (\n this.searchable &&\n (this.hasSingleSelectedSlot &&\n (this.visibleSingleValue || this.visibleSingleValue === 0)\n ? this.isOpen\n : true)\n )\n }\n }\n}\n</script>\n\n<style>\n\n fieldset[disabled] .multiselect {\n pointer-events: none;\n }\n\n .multiselect__spinner {\n position: absolute;\n right: 1px;\n top: 1px;\n width: 40px;\n height: 38px;\n background: #fff;\n display: block;\n }\n\n .multiselect__spinner::before,\n .multiselect__spinner::after {\n position: absolute;\n content: \"\";\n top: 50%;\n left: 50%;\n margin: -8px 0 0 -8px;\n width: 16px;\n height: 16px;\n border-radius: 100%;\n border-color: #41b883 transparent transparent;\n border-style: solid;\n border-width: 2px;\n box-shadow: 0 0 0 1px transparent;\n }\n\n .multiselect__spinner::before {\n animation: spinning 2.4s cubic-bezier(0.41, 0.26, 0.2, 0.62);\n animation-iteration-count: infinite;\n }\n\n .multiselect__spinner::after {\n animation: spinning 2.4s cubic-bezier(0.51, 0.09, 0.21, 0.8);\n animation-iteration-count: infinite;\n }\n\n .multiselect__loading-enter-active,\n .multiselect__loading-leave-active {\n transition: opacity 0.4s ease-in-out;\n opacity: 1;\n }\n\n .multiselect__loading-enter,\n .multiselect__loading-leave-active {\n opacity: 0;\n }\n\n .multiselect,\n .multiselect__input,\n .multiselect__single {\n font-family: inherit;\n touch-action: manipulation;\n }\n\n .multiselect {\n display: block;\n position: relative;\n width: 100%;\n min-height: 40px;\n }\n\n .multiselect * {\n box-sizing: border-box;\n }\n\n .multiselect:focus {\n outline: none;\n }\n\n .multiselect--disabled {\n background: #ededed;\n pointer-events: none;\n opacity: 0.6;\n }\n\n .multiselect--active {\n z-index: 50;\n }\n\n .multiselect--active:not(.multiselect--above) .multiselect__current,\n .multiselect--active:not(.multiselect--above) .multiselect__input,\n .multiselect--active:not(.multiselect--above) .multiselect__tags {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n }\n\n .multiselect--active .multiselect__select {\n transform: rotateZ(180deg);\n }\n\n .multiselect--above.multiselect--active .multiselect__current,\n .multiselect--above.multiselect--active .multiselect__input,\n .multiselect--above.multiselect--active .multiselect__tags {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n\n .multiselect__input,\n .multiselect__single,\n .multiselect__placeholder {\n position: relative;\n display: inline-block;\n min-height: 20px;\n line-height: 20px;\n border: none;\n width: calc(100%);\n height: inherit;\n box-sizing: border-box;\n vertical-align: top;\n display: flex;\n align-items: center;\n }\n\n .multiselect__input::placeholder {\n color: #35495e;\n }\n\n .multiselect__tag ~ .multiselect__input,\n .multiselect__tag ~ .multiselect__single {\n width: auto;\n }\n\n .multiselect__input:hover,\n .multiselect__single:hover {\n border-color: #cfcfcf;\n }\n\n .multiselect__input:focus,\n .multiselect__single:focus {\n border-color: #a8a8a8;\n outline: none;\n }\n\n .multiselect__tags-wrap {\n display: inline;\n }\n\n .multiselect__tags {\n display: block;\n height: inherit;\n }\n\n .multiselect__tag {\n position: relative;\n display: inline-block;\n padding: 4px 26px 4px 10px;\n border-radius: 5px;\n margin-right: 10px;\n color: #fff;\n line-height: 1;\n background: #41b883;\n margin-bottom: 5px;\n white-space: nowrap;\n overflow: hidden;\n max-width: 100%;\n text-overflow: ellipsis;\n }\n\n .multiselect__tag-icon {\n cursor: pointer;\n margin-left: 7px;\n position: absolute;\n right: 0;\n top: 0;\n bottom: 0;\n font-weight: 700;\n font-style: initial;\n width: 22px;\n text-align: center;\n line-height: 22px;\n transition: all 0.2s ease;\n border-radius: 5px;\n }\n\n .multiselect__tag-icon::after {\n content: \"×\";\n color: #266d4d;\n font-size: 14px;\n }\n\n /* // Remove these lines to avoid green closing button\n //.multiselect__tag-icon:focus,\n //.multiselect__tag-icon:hover {\n // background: #369a6e;\n //} */\n\n .multiselect__tag-icon:focus::after,\n .multiselect__tag-icon:hover::after {\n color: white;\n }\n\n .multiselect__current {\n line-height: 16px;\n min-height: 40px;\n box-sizing: border-box;\n display: block;\n overflow: hidden;\n padding: 8px 12px 0;\n padding-right: 30px;\n white-space: nowrap;\n margin: 0;\n text-decoration: none;\n border-radius: 5px;\n border: 1px solid #e8e8e8;\n cursor: pointer;\n }\n\n .multiselect__select {\n line-height: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n position: center;\n position: absolute;\n box-sizing: border-box;\n width: 40px;\n height: 38px;\n right: 1px;\n top: calc( 50% - 19px);\n padding: 4px 8px;\n margin: 0;\n text-decoration: none;\n text-align: center;\n cursor: pointer;\n transition: transform 0.2s ease;\n }\n\n .multiselect__select::before {\n position: relative;\n color: #999;\n margin-top: 4px;\n border-style: solid;\n border-width: 5px 5px 0 5px;\n border-color: #999 transparent transparent transparent;\n content: \"\";\n }\n\n\n .multiselect--active .multiselect__placeholder {\n display: none;\n }\n\n .multiselect__content-wrapper {\n position: absolute;\n display: block;\n background: #fff;\n width: 100%;\n max-height: 240px;\n height: min-content;\n overflow: auto;\n left: 0;\n border-top: none;\n border-bottom-left-radius: 5px;\n border-bottom-right-radius: 5px;\n z-index: 50;\n -webkit-overflow-scrolling: touch;\n }\n\n .multiselect__content {\n list-style: none;\n display: inline-block;\n padding: 0;\n margin: 0;\n min-width: 100%;\n vertical-align: top;\n }\n\n .multiselect--above .multiselect__content-wrapper {\n bottom: 100%;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n border-top-left-radius: 5px;\n border-top-right-radius: 5px;\n border-bottom: none;\n border-top: 1px solid #e8e8e8;\n }\n\n .multiselect__content::-webkit-scrollbar {\n display: none;\n }\n\n .multiselect__element {\n display: block;\n }\n\n .multiselect__option {\n display: block;\n padding: 12px;\n min-height: 40px;\n line-height: 16px;\n text-decoration: none;\n text-transform: none;\n vertical-align: middle;\n position: relative;\n cursor: pointer;\n white-space: nowrap;\n }\n\n .multiselect__option::after {\n top: 0;\n right: 0;\n position: absolute;\n line-height: 40px;\n padding-right: 12px;\n padding-left: 20px;\n font-size: 13px;\n }\n\n .multiselect__option--highlight {\n background: rgba(var(--main),0.1);\n outline: none;\n }\n\n .multiselect__option--highlight::after {\n content: attr(data-select);\n }\n\n .multiselect__option--selected {\n background: #f3f3f3;\n color: #35495e;\n font-weight: bold;\n }\n\n .multiselect__option--selected::after {\n content: attr(data-selected);\n color: silver;\n background: inherit;\n }\n\n .multiselect__option--selected.multiselect__option--highlight {\n background: rgba(var(--red),0.1);\n }\n\n .multiselect__option--selected.multiselect__option--highlight::after {\n content: attr(data-deselect);\n }\n\n .multiselect--disabled .multiselect__current,\n .multiselect--disabled .multiselect__select {\n background: #ededed;\n color: #a6a6a6;\n }\n\n .multiselect__option--disabled {\n background: #ededed !important;\n color: #a6a6a6 !important;\n cursor: text;\n pointer-events: none;\n }\n\n .multiselect__option--group {\n background: #ededed;\n color: #35495e;\n }\n\n .multiselect__option--group.multiselect__option--highlight {\n background: #35495e;\n color: #fff;\n }\n\n .multiselect__option--group.multiselect__option--highlight::after {\n background: #35495e;\n }\n\n .multiselect__option--disabled.multiselect__option--highlight {\n background: #dedede;\n }\n\n .multiselect__option--group-selected.multiselect__option--highlight {\n background: #ff6a6a;\n color: #fff;\n }\n\n .multiselect__option--group-selected.multiselect__option--highlight::after {\n background: #ff6a6a;\n content: attr(data-deselect);\n color: #fff;\n }\n\n .multiselect-enter-active,\n .multiselect-leave-active {\n transition: all 0.15s ease;\n }\n\n .multiselect-enter,\n .multiselect-leave-active {\n opacity: 0;\n }\n\n .multiselect__strong {\n margin-bottom: 8px;\n line-height: 20px;\n display: inline-block;\n vertical-align: top;\n }\n\n *[dir=\"rtl\"] .multiselect {\n text-align: right;\n }\n\n *[dir=\"rtl\"] .multiselect__select {\n right: auto;\n left: 1px;\n }\n\n *[dir=\"rtl\"] .multiselect__tags {\n padding: 8px 8px 0 40px;\n }\n\n *[dir=\"rtl\"] .multiselect__content {\n text-align: right;\n }\n\n *[dir=\"rtl\"] .multiselect__option::after {\n right: auto;\n left: 0;\n }\n\n *[dir=\"rtl\"] .multiselect__clear {\n right: auto;\n left: 12px;\n }\n\n *[dir=\"rtl\"] .multiselect__spinner {\n right: auto;\n left: 1px;\n }\n\n @keyframes spinning {\n from {\n transform: rotate(0);\n }\n\n to {\n transform: rotate(2turn);\n }\n }\n</style>\n"],"names":["multiselectMixin","pointerMixin","_createElementBlock","_normalizeClass","_withKeys","_withModifiers","_renderSlot","_createElementVNode","_withDirectives","_openBlock","_Fragment","_renderList","_toDisplayString","_vShow","_createCommentVNode","_createVNode","_Transition","_withCtx","_normalizeStyle","_createTextVNode"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Tab.vue2.cjs","sources":["../../../../../src/components/Tab/Tab.vue"],"sourcesContent":["<template>\n <div class=\"flex-nowrap flex-v-center flex pos-relative\">\n <button \n v-for=\"(tab, index) in tabs\" \n :key=\"index\" \n @click=\"handleTabClick(index, tab)\" \n class=\"z-index-1 t-center cursor-pointer\"\n :style=\"isSelected(index, tab) ? 'background: rgb(var(--main)) !important' : ''\"\n :class=\"[\n isSelected(index, tab) ? 'bg-main' : '',\n tabClass ? tabClass : 'pd-small pd-r-medium pd-l-medium w-max pd-small radius-small'\n ]\"\n >\n {{tab.name || tab.label}}\n </button>\n </div>\n</template>\n\n<script setup>\nimport { ref, computed, watch } from 'vue'\n\nconst emit = defineEmits(['update:selected', 'tab-click']);\n\nconst props = defineProps({\n tabs: Array,\n tabClass: String,\n selected: [String, Number],\n modelValue: [String, Number],\n callback: Function\n})\n\nconst selectedTab = ref(0)\n\n// Handle both v-model and selected prop for backward compatibility\nconst updateSelectedIndex = () => {\n if (props.modelValue !== undefined) {\n const selectedIndex = props.tabs.findIndex(tab => tab.value === props.modelValue)\n if (selectedIndex !== -1) {\n selectedTab.value = selectedIndex\n }\n } else if (props.selected !== undefined) {\n const selectedIndex = props.tabs.findIndex(tab => tab.value === props.selected)\n if (selectedIndex !== -1) {\n selectedTab.value = selectedIndex\n }\n }\n}\n\n// Initial setup\nupdateSelectedIndex()\n\n// Watch for changes in selected or modelValue props\nwatch(() => props.selected, updateSelectedIndex)\nwatch(() => props.modelValue, updateSelectedIndex)\n\n// Check if tab is selected\nconst isSelected = (index, tab) => {\n if (props.modelValue !== undefined) {\n return tab.value === props.modelValue\n } else if (props.selected !== undefined) {\n return tab.value === props.selected\n }\n return index === selectedTab.value\n}\n\n// Handle tab click\nfunction handleTabClick(index, tab) {\n selectedTab.value = index\n \n // Emit both events for flexibility\n emit('update:selected', tab.value)\n emit('tab-click', { index, tab })\n \n // For v-model support\n if (props.modelValue !== undefined) {\n emit('update:modelValue', tab.value)\n }\n \n // Call callback if provided\n if (props.callback) props.callback(tab)\n}\n</script>\n\n<style lang=\"scss\">\n.tab-selector {\n position: absolute;\n width: 50%;\n height: 100%;\n left: 0;\n top: 0;\n z-index: 0;\n transition: left 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n}\n</style>"],"names":["ref","watch"],"mappings":";;;;;;;;;;;;;;;;;AAqBA,UAAM,OAAO;AAEb,UAAM,QAAQ;AAQd,UAAM,cAAcA,IAAG,IAAC,CAAC;AAGzB,UAAM,sBAAsB,MAAM;AAChC,UAAI,MAAM,eAAe,QAAW;AAClC,cAAM,gBAAgB,MAAM,KAAK,UAAU,SAAO,IAAI,UAAU,MAAM,UAAU;AAChF,YAAI,kBAAkB,IAAI;AACxB,sBAAY,QAAQ;AAAA,QAC1B;AAAA,MACA,WAAa,MAAM,aAAa,QAAW;AACvC,cAAM,gBAAgB,MAAM,KAAK,UAAU,SAAO,IAAI,UAAU,MAAM,QAAQ;AAC9E,YAAI,kBAAkB,IAAI;AACxB,sBAAY,QAAQ;AAAA,QAC1B;AAAA,MACA;AAAA,IACA;AAGA,wBAAmB;AAGnBC,QAAAA,MAAM,MAAM,MAAM,UAAU,mBAAmB;AAC/CA,QAAAA,MAAM,MAAM,MAAM,YAAY,mBAAmB;AAGjD,UAAM,aAAa,CAAC,OAAO,QAAQ;AACjC,UAAI,MAAM,eAAe,QAAW;AAClC,eAAO,IAAI,UAAU,MAAM;AAAA,MAC/B,WAAa,MAAM,aAAa,QAAW;AACvC,eAAO,IAAI,UAAU,MAAM;AAAA,MAC/B;AACE,aAAO,UAAU,YAAY;AAAA,IAC/B;AAGA,aAAS,eAAe,OAAO,KAAK;AAClC,kBAAY,QAAQ;AAGpB,WAAK,mBAAmB,IAAI,KAAK;AACjC,WAAK,aAAa,EAAE,OAAO,IAAK,CAAA;AAGhC,UAAI,MAAM,eAAe,QAAW;AAClC,aAAK,qBAAqB,IAAI,KAAK;AAAA,MACvC;AAGE,UAAI,MAAM,SAAU,OAAM,SAAS,GAAG;AAAA,IACxC;;;;;;;;;;;;;;;;;;;"}