@ozdao/martyrs 0.2.583 → 0.2.585

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 (233) hide show
  1. package/dist/builder.js +2 -0
  2. package/dist/{main-vq1_XpmQ.js → main-xL-jtBkT.js} +12 -11
  3. package/dist/martyrs/dist/{main-vq1_XpmQ.js → main-xL-jtBkT.js} +3 -2
  4. package/dist/martyrs/dist/main-xL-jtBkT.js.map +1 -0
  5. package/dist/martyrs/dist/{web-BNJDRie_.js → web-BA6h6Z8P.js} +2 -2
  6. package/dist/martyrs/dist/{web-BNJDRie_.js.map → web-BA6h6Z8P.js.map} +1 -1
  7. package/dist/martyrs/src/components/Button/{Button.vue.js → Button.vue2.js} +3 -3
  8. package/dist/martyrs/src/components/Button/Button.vue2.js.map +1 -0
  9. package/dist/martyrs/src/components/Calendar/Calendar.vue2.js +5 -5
  10. package/dist/martyrs/src/components/Calendar/Calendar.vue2.js.map +1 -1
  11. package/dist/martyrs/src/components/Feed/Carousel.vue.js +1 -1
  12. package/dist/martyrs/src/components/Feed/Feed.vue.js +1 -1
  13. package/dist/martyrs/src/components/Field/Field.vue.js +2 -2
  14. package/dist/martyrs/src/components/Field/Field.vue.js.map +1 -1
  15. package/dist/martyrs/src/components/FieldBig/FieldBig.vue.js +2 -2
  16. package/dist/martyrs/src/components/FieldBig/FieldBig.vue.js.map +1 -1
  17. package/dist/martyrs/src/components/FieldDate/FieldDate.vue.js +2 -2
  18. package/dist/martyrs/src/components/FieldDate/FieldDate.vue.js.map +1 -1
  19. package/dist/martyrs/src/components/Loader/{Loader.vue2.js → Loader.vue.js} +2 -2
  20. package/dist/martyrs/src/components/Loader/Loader.vue.js.map +1 -0
  21. package/dist/martyrs/src/components/LocationMarker/LocationMarker.vue.js +1 -1
  22. package/dist/martyrs/src/components/Media/Media.vue.js +1 -1
  23. package/dist/martyrs/src/components/Menu/{Menu.vue2.js → Menu.vue.js} +2 -2
  24. package/dist/martyrs/src/components/Menu/Menu.vue.js.map +1 -0
  25. package/dist/martyrs/src/components/Select/{Select.vue2.js → Select.vue.js} +2 -2
  26. package/dist/martyrs/src/components/Select/Select.vue.js.map +1 -0
  27. package/dist/martyrs/src/components/UploadImage/UploadImage.vue.js +1 -1
  28. package/dist/martyrs/src/components/UploadImageMultiple/UploadImageMultiple.vue.js +1 -1
  29. package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js +1 -1
  30. package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js +1 -1
  31. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +61 -42
  32. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js.map +1 -1
  33. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEdit.vue.js +1 -1
  34. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.js +1 -1
  35. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.js +1 -1
  36. package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js +1 -1
  37. package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js +1 -1
  38. package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js +1 -1
  39. package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.js +1 -1
  40. package/dist/martyrs/src/modules/backoffice/backoffice.client.js +3 -15
  41. package/dist/martyrs/src/modules/backoffice/backoffice.client.js.map +1 -1
  42. package/dist/martyrs/src/modules/backoffice/configs/navigation.backoffice.config.js +99 -0
  43. package/dist/martyrs/src/modules/backoffice/configs/navigation.backoffice.config.js.map +1 -0
  44. package/dist/martyrs/src/modules/backoffice/{backoffice.router.js → router/backoffice.router.js} +9 -7
  45. package/dist/martyrs/src/modules/backoffice/router/backoffice.router.js.map +1 -0
  46. package/dist/martyrs/src/modules/community/components/layouts/Community.vue.js +3 -3
  47. package/dist/martyrs/src/modules/community/components/layouts/Community.vue.js.map +1 -1
  48. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js +8 -2
  49. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js.map +1 -1
  50. package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js +1 -1
  51. package/dist/martyrs/src/modules/core/core.client.js.map +1 -1
  52. package/dist/martyrs/src/modules/core/views/classes/core.app.js +5 -1
  53. package/dist/martyrs/src/modules/core/views/classes/core.app.js.map +1 -1
  54. package/dist/martyrs/src/modules/core/views/components/blocks/CardHeader.vue.js +2 -2
  55. package/dist/martyrs/src/modules/core/views/components/blocks/CardHeader.vue.js.map +1 -1
  56. package/dist/martyrs/src/modules/core/views/components/blocks/PopupAuth.vue.js +1 -1
  57. package/dist/martyrs/src/modules/core/views/components/blocks/PopupDateSelector.vue.js +2 -2
  58. package/dist/martyrs/src/modules/core/views/components/layouts/Client.vue.js +22 -28
  59. package/dist/martyrs/src/modules/core/views/components/layouts/Client.vue.js.map +1 -1
  60. package/dist/martyrs/src/modules/core/views/components/pages/404.vue.js +76 -7
  61. package/dist/martyrs/src/modules/core/views/components/pages/404.vue.js.map +1 -1
  62. package/dist/martyrs/src/modules/core/views/components/partials/Header.vue.js +3 -3
  63. package/dist/martyrs/src/modules/core/views/components/partials/Header.vue.js.map +1 -1
  64. package/dist/martyrs/src/modules/core/views/components/partials/NavigationBar.vue.js +1 -1
  65. package/dist/martyrs/src/modules/core/views/components/partials/Sidebar.vue.js +2 -2
  66. package/dist/martyrs/src/modules/core/views/components/partials/Sidebar.vue.js.map +1 -1
  67. package/dist/martyrs/src/modules/core/views/components/sections/Filters.vue2.js +3 -3
  68. package/dist/martyrs/src/modules/core/views/components/sections/Filters.vue2.js.map +1 -1
  69. package/dist/martyrs/src/modules/core/views/components/sections/SectionPageTitle.vue.js +1 -1
  70. package/dist/martyrs/src/modules/core/views/components/sections/SectionPageTitle.vue.js.map +1 -1
  71. package/dist/martyrs/src/modules/core/views/store/core.store.js +1 -0
  72. package/dist/martyrs/src/modules/core/views/store/core.store.js.map +1 -1
  73. package/dist/martyrs/src/modules/core/views/utils/vue-app-renderer.js +2 -1
  74. package/dist/martyrs/src/modules/core/views/utils/vue-app-renderer.js.map +1 -1
  75. package/dist/martyrs/src/modules/events/components/elements/ButtonCheck.vue.js +1 -1
  76. package/dist/martyrs/src/modules/events/components/elements/ButtonJoin.vue.js +1 -1
  77. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +2 -2
  78. package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js +3 -3
  79. package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js.map +1 -1
  80. package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +2 -1
  81. package/dist/martyrs/src/modules/events/components/pages/Event.vue.js.map +1 -1
  82. package/dist/martyrs/src/modules/events/components/sections/EditTickets.vue.js +1 -1
  83. package/dist/martyrs/src/modules/events/components/sections/Feed.vue.js +1 -1
  84. package/dist/martyrs/src/modules/events/components/sections/List.vue.js +1 -1
  85. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +3 -3
  86. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js.map +1 -1
  87. package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.js +2 -2
  88. package/dist/martyrs/src/modules/inventory/components/forms/ColumnSettingsMenu.vue.js +1 -1
  89. package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.js +1 -1
  90. package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.js +2 -2
  91. package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.js +4 -4
  92. package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.js.map +1 -1
  93. package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js +2 -2
  94. package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js.map +1 -1
  95. package/dist/martyrs/src/modules/marketplace/views/components/sections/SectionMenu.vue.js +1 -1
  96. package/dist/martyrs/src/modules/music/components/blocks/ActionButtons.vue.js +1 -1
  97. package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js +1 -1
  98. package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.js +1 -1
  99. package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.js +1 -1
  100. package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.js +1 -1
  101. package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js +2 -2
  102. package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js +3 -3
  103. package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js +1 -1
  104. package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.js +1 -1
  105. package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js +2 -2
  106. package/dist/martyrs/src/modules/music/components/pages/Album.vue.js +2 -2
  107. package/dist/martyrs/src/modules/music/components/pages/Artist.vue.js +2 -2
  108. package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js +1 -1
  109. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js +7 -7
  110. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js.map +1 -1
  111. package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js +2 -2
  112. package/dist/martyrs/src/modules/music/components/pages/Track.vue.js +2 -2
  113. package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.js +1 -1
  114. package/dist/martyrs/src/modules/music/components/player/FullscreenPlayer.vue.js +1 -1
  115. package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.js +1 -1
  116. package/dist/martyrs/src/modules/music/components/player/PlayerControls.vue.js +1 -1
  117. package/dist/martyrs/src/modules/music/components/player/VolumeControl.vue.js +1 -1
  118. package/dist/martyrs/src/modules/notifications/components/sections/NotificationPreferences.vue.js +2 -2
  119. package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.js +2 -2
  120. package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.js +2 -2
  121. package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.js +2 -2
  122. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +2 -2
  123. package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js +1 -1
  124. package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +1 -1
  125. package/dist/martyrs/src/modules/orders/components/sections/ApplicationDetails.vue.js +1 -1
  126. package/dist/martyrs/src/modules/orders/components/sections/CustomerDetails.vue.js +1 -1
  127. package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +1 -1
  128. package/dist/martyrs/src/modules/orders/components/sections/FormPayment.vue.js +1 -1
  129. package/dist/martyrs/src/modules/orders/router/orders.router.js +23 -0
  130. package/dist/martyrs/src/modules/orders/router/orders.router.js.map +1 -1
  131. package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.js +1 -1
  132. package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.js.map +1 -1
  133. package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.js +1 -1
  134. package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.js +1 -1
  135. package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.js +1 -1
  136. package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.js +1 -1
  137. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js +1 -1
  138. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.js +1 -1
  139. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +4 -3
  140. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js.map +1 -1
  141. package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.js +2 -2
  142. package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.js +2 -2
  143. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +2 -2
  144. package/dist/martyrs/src/modules/pages/pages.router.js +7 -5
  145. package/dist/martyrs/src/modules/pages/pages.router.js.map +1 -1
  146. package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.js +1 -1
  147. package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.js +3 -3
  148. package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.js.map +1 -1
  149. package/dist/martyrs/src/modules/pages/views/components/partials/SidebarPages.vue.js +2 -2
  150. package/dist/martyrs/src/modules/pages/views/components/partials/SidebarPages.vue.js.map +1 -1
  151. package/dist/martyrs/src/modules/products/components/elements/Image360.vue.js +1 -1
  152. package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js +1 -1
  153. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +3 -3
  154. package/dist/martyrs/src/modules/products/components/pages/Product.vue.js +1 -1
  155. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +2 -2
  156. package/dist/martyrs/src/modules/products/components/pages/Products.vue.js +1 -1
  157. package/dist/martyrs/src/modules/products/components/pages/Products.vue.js.map +1 -1
  158. package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.js +1 -1
  159. package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.js +3 -3
  160. package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.js.map +1 -1
  161. package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js +2 -2
  162. package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.js +2 -2
  163. package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.js.map +1 -1
  164. package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.js +1 -1
  165. package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js +1 -1
  166. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.js +1 -1
  167. package/dist/martyrs/src/modules/rents/views/components/pages/RentsEdit.vue.js +1 -1
  168. package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.js +2 -2
  169. package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.js +1 -1
  170. package/dist/martyrs/src/modules/spots/components/pages/Map.vue.js +1 -1
  171. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +2 -2
  172. package/dist/martyrs/src/modules/spots/components/pages/Spots.vue.js +1 -1
  173. package/dist/martyrs/src/modules/spots/components/pages/Spots.vue.js.map +1 -1
  174. package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.js +2 -2
  175. package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.js +2 -2
  176. package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.js.map +1 -1
  177. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js +3 -3
  178. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js.map +1 -1
  179. package/dist/martyrs.css +1 -1
  180. package/dist/martyrs.es.js +1 -1
  181. package/dist/style.css +38 -33
  182. package/dist/{web-BNJDRie_.js → web-BA6h6Z8P.js} +1 -1
  183. package/package.json +1 -1
  184. package/src/builder/modes/ssr.rspack.dev.js +2 -0
  185. package/src/components/Calendar/Calendar.vue +4 -4
  186. package/src/components/Completion/Completion.vue +3 -3
  187. package/src/components/Field/Field.vue +1 -1
  188. package/src/components/FieldBig/FieldBig.vue +1 -1
  189. package/src/components/FieldDate/FieldDate.vue +1 -1
  190. package/src/modules/auth/views/components/pages/Profile.vue +33 -5
  191. package/src/modules/backoffice/backoffice.client.js +1 -25
  192. package/src/modules/backoffice/configs/navigation.backoffice.config.js +99 -0
  193. package/src/modules/backoffice/router/backoffice.router.js +8 -7
  194. package/src/modules/community/components/layouts/Community.vue +2 -2
  195. package/src/modules/community/components/pages/BlogPost.vue +9 -1
  196. package/src/modules/core/core.client.js +1 -0
  197. package/src/modules/core/views/classes/core.app.js +8 -3
  198. package/src/modules/core/views/components/blocks/CardHeader.vue +1 -1
  199. package/src/modules/core/views/components/layouts/Client.vue +41 -42
  200. package/src/modules/core/views/components/pages/404.vue +55 -3
  201. package/src/modules/core/views/components/partials/Header.vue +1 -1
  202. package/src/modules/core/views/components/partials/Sidebar.vue +1 -1
  203. package/src/modules/core/views/components/sections/Filters.vue +2 -2
  204. package/src/modules/core/views/components/sections/SectionPageTitle.vue +1 -1
  205. package/src/modules/core/views/store/core.store.js +1 -0
  206. package/src/modules/core/views/utils/vue-app-renderer.js +9 -1
  207. package/src/modules/events/components/pages/EditEventTickets.vue +2 -2
  208. package/src/modules/gallery/components/sections/BackofficeGallery.vue +1 -1
  209. package/src/modules/inventory/components/pages/Inventory.vue +4 -4
  210. package/src/modules/inventory/components/pages/InventoryEdit.vue +1 -1
  211. package/src/modules/music/components/pages/Playlist.vue +5 -5
  212. package/src/modules/orders/router/orders.router.js +33 -0
  213. package/src/modules/organizations/components/blocks/CardOrganization.vue +1 -1
  214. package/src/modules/pages/pages.router.js +4 -2
  215. package/src/modules/pages/views/components/pages/PageEdit.vue +2 -2
  216. package/src/modules/pages/views/components/partials/SidebarPages.vue +1 -1
  217. package/src/modules/pages/views/router/pages.backoffice.router.js +4 -3
  218. package/src/modules/products/components/pages/Products.vue +1 -1
  219. package/src/modules/products/components/sections/EditDiscounts.vue +1 -1
  220. package/src/modules/products/components/sections/ProductConfigurator.vue +1 -1
  221. package/src/modules/spots/components/pages/Spots.vue +1 -1
  222. package/src/modules/wallet/views/components/blocks/CryptoDeposit.vue +1 -1
  223. package/src/modules/wallet/views/components/pages/Wallet.vue +1 -1
  224. package/dist/martyrs/dist/main-vq1_XpmQ.js.map +0 -1
  225. package/dist/martyrs/src/components/Button/Button.vue.js.map +0 -1
  226. package/dist/martyrs/src/components/Loader/Loader.vue2.js.map +0 -1
  227. package/dist/martyrs/src/components/Menu/Menu.vue2.js.map +0 -1
  228. package/dist/martyrs/src/components/Select/Select.vue2.js.map +0 -1
  229. package/dist/martyrs/src/modules/backoffice/backoffice.router.js.map +0 -1
  230. package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.js +0 -150
  231. package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.js.map +0 -1
  232. package/src/modules/backoffice/backoffice.router.js +0 -69
  233. package/src/modules/backoffice/components/partials/Sidebar.vue +0 -165
@@ -1 +1 @@
1
- {"version":3,"file":"InventoryEdit.vue.js","sources":["../../../../../../../src/modules/inventory/components/pages/InventoryEdit.vue"],"sourcesContent":["<template>\n <div class=\"pd-medium mobile:pd-thin\">\n <header class=\"mn-b-medium gap-small flex-v-center flex-nowrap flex\">\n <h2 class=\"\">Create Inventory Audit</h2>\n </header>\n \n <Popup \n title=\"Add position\" \n @close-popup=\"closeProductsPopup\" \n :isPopupOpen=\"isOpenProductsPopup\"\n class=\"bg-white w-100 w-max-30r radius-medium pd-medium\"\n >\n <Feed\n :search=\"{\n class: 'bg-light radius-small'\n }\"\n :states=\"{\n empty: {\n title: 'No Products Found',\n description: 'Currently, there are no such products available.'\n }\n }\"\n :store=\"{\n read: (options) => products.actions.read(options),\n state: null\n }\"\n :options=\"{\n owner: route.params._id,\n }\"\n v-slot=\"{ \n items \n }\"\n class=\"flex-column flex gap-thin h-max-20r o-scroll\"\n >\n <CardOrderItem\n v-for=\"(product, index) in items\" \n :key=\"`${product._id}_${product.variant || 'no-variant'}_${index}`\"\n :editable=\"false\" \n :productId=\"product._id\"\n :variantId=\"product.variant\"\n :images=\"product.images\"\n :name=\"product.name\"\n :quantity=\"product.quantity || 1\"\n :unit=\"product.unit\"\n :dates=\"product.date\"\n :listing=\"product.listing\"\n :price=\"product.price\"\n @click=\"() => selectProduct(product)\"\n class=\"bg-light pd-small radius-small w-100\"\n />\n </Feed>\n </Popup>\n \n <!-- Popup for selecting variant of the product -->\n <Popup \n title=\"Select variant\" \n @close-popup=\"closeVariantsPopup\" \n :isPopupOpen=\"isVariantsPopupOpen\"\n class=\"bg-white w-100 w-max-30r radius-medium pd-medium\"\n >\n <Feed\n :store=\"variants\"\n :options=\"{\n product: selectedProduct._id,\n }\"\n :skeleton=\"{\n structure: [\n { block: 'text', size: 'small' },\n { block: 'text', size: 'medium' },\n { block: 'text', size: 'small' }\n ]\n }\"\n :states=\"{\n empty: {\n title: 'No variants',\n description: 'Create your first variant'\n }\n }\"\n v-slot=\"{ items }\"\n >\n <div class=\"gap-thin flex flex-column\">\n <div \n v-for=\"(variant, index) in items\" \n :key=\"index\"\n @click=\"addVariantToInventory(variant)\"\n class=\"w-100 cursor-pointer hover:scale-[1.05] bg-light pd-small radius-small flex-v-center flex-nowrap flex gap-thin\"\n >\n <div v-if=\"variant.images && variant.images.length\" class=\"aspect-1x1 h-3r radius-small o-hidden\">\n <img \n :src=\"(FILE_SERVER_URL || '') + variant.images[0]\" \n class=\"w-100 h-100 object-fit-cover\"\n />\n </div>\n <div>\n <p class=\"fw-medium\">{{ variant.name || 'Default variant' }}</p>\n <p v-if=\"variant.attributes && variant.attributes.length\" class=\"t-small t-transp\">\n {{ variant.attributes.map(attr => `${attr.name}: ${attr.value}`).join(', ') }}\n </p>\n </div>\n <p class=\"mn-l-auto\">{{ formatPrice(variant.cost) }}</p>\n </div>\n </div>\n </Feed>\n </Popup>\n\n <Block\n class=\"mn-b-thin\"\n >\n <Field\n v-model:field=\"inventory.state.current.comment\"\n placeholder=\"Describe details of the inventory audit\"\n type=\"textarea\"\n class=\"w-100 bg-white radius-small pd-medium\"\n /> \n <div class=\"fw-medium mn-t-small mn-b-thin\">Select Storage:</div>\n <Feed\n :states=\"{\n empty: {\n title: 'No Spots Found',\n description: 'Currently, there are no spots available.'\n }\n }\"\n :store=\"{\n read: (options) => spots.actions.read(options),\n state: null\n }\"\n :options=\"{\n user: auth.state.user._id,\n organization: route.params._id,\n limit: 3\n }\"\n v-slot=\"{ \n items \n }\"\n class=\"flex-nowrap flex-column gap-thin flex\"\n >\n <CardSpot\n v-for=\"(spot, index) in items\"\n :key=\"index\"\n :spot=\"spot\"\n :organization=\"route.params._id\"\n :selected=\"inventory.state.current.storage === spot._id\"\n @click=\"() => inventory.state.current.storage = inventory.state.current.storage === spot._id ? null : spot._id\"\n class=\"radius-small h-min-big clickable bg-white\"\n />\n </Feed>\n\n\n </Block>\n\n <Block\n title=\"Positions\"\n :actions=\"[{\n label: '+',\n function: () => openProductsPopup()\n }]\"\n placeholder=\"No positions added yet\"\n class=\"h-100 flex-column flex gap-thin mn-b-thin\"\n >\n <CardPosition\n v-for=\"(position, index) in inventory.state.current.positions\" \n :key=\"position._id || index\" \n :image=\"position.image\"\n :name=\"position.name\"\n :title=\"formatPrice(position.cost * position.quantity)\"\n :title_class=\"[position.cost * position.quantity < 0 ? 't-red' : 't-grey']\"\n :subtitle=\"`${formatPrice(position.cost)} × ${Math.abs(position.quantity)}${position.unit} `\"\n >\n <template v-slot:actions>\n <QuantitySelector v-model=\"position.quantity\"/>\n \n <!-- <Dropdown\n :label=\"{ component: IconEllipsis, class: 't-transp i-medium' }\"\n class=\"cursor-pointer aspect-1x1 pd-nano radius-small hover:bg-light\"\n align=\"right\"\n >\n <div class=\"bg-white radius-small\">\n <button @click=\"leftovers.state.current.positions.splice(index, 1)\" class=\"cursor-pointer t-left t-nowrap w-100 pd-small\">\n Delete\n </button>\n </div>\n </Dropdown> -->\n\n </template>\n </CardPosition>\n \n </Block>\n\n <!-- :actions=\"[{\n component: IconEdit,\n handler: () => store.core.actions.add(leftovers.state.current.positions, position),\n class: 'bg-light'\n },{\n component: IconDelete,\n handler: () => leftovers.state.current.positions.splice(index, 1),\n class: 'bg-red'\n }]\" -->\n\n <Block class=\"\">\n <section class=\"gap-thin flex-v-center flex-justify-start flex\">\n <span class=\"h3 mn-r-auto\">\n In total: {{formatPrice(totalPrice)}}\n </span>\n\n <!-- Save Draft -->\n <Button\n :submit=\"onSaveDraft\"\n class=\"bg-second w-min-5r button\"\n >\n <span>Save Draft</span>\n </Button>\n\n <!-- Publish -->\n <Button\n :submit=\"onPublish\"\n class=\"bg-main w-min-5r button\"\n >\n <span>Publish</span>\n </Button>\n\n <!-- Reset -->\n <Button\n :submit=\"onReset\"\n class=\"t-white w-min-5r bg-second button\"\n >\n <span>Reset</span>\n </Button>\n\n <!-- Delete button removed - only create mode supported -->\n </section>\n </Block>\n </div>\n</template>\n\n\n<script setup>\n import Block from '@martyrs/src/components/Block/Block.vue';\n import Button from \"@martyrs/src/components/Button/Button.vue\";\n import Field from '@martyrs/src/components/Field/Field.vue';\n import Feed from '@martyrs/src/components/Feed/Feed.vue';\n import Select from '@martyrs/src/components/Select/Select.vue';\n import Dropdown from '@martyrs/src/components/Dropdown/Dropdown.vue'\n import Popup from '@martyrs/src/components/Popup/Popup.vue';\n\n import CardOrderItem from '@martyrs/src/modules/orders/components/blocks/CardOrderItem.vue';\n import CardSpot from '@martyrs/src/modules/spots/components/blocks/CardSpot.vue'; \n\n import CardPosition from '@martyrs/src/modules/products/components/blocks/CardPosition.vue';\n import QuantitySelector from '@martyrs/src/modules/products/components/elements/QuantitySelector.vue';\n\n import { computed, onMounted, ref, reactive } from 'vue';\n import { useRoute, useRouter } from 'vue-router';\n import { useGlobalMixins } from '@martyrs/src/modules/core/views/mixins/mixins.js';\n\n import { useStore } from '@martyrs/src/modules/core/views/store/core.store.js';\n import * as auth from '@martyrs/src/modules/auth/views/store/auth.js';\n const store = useStore();\n import * as inventory from '@martyrs/src/modules/inventory/store/inventory.store.js';\n import * as products from '@martyrs/src/modules/products/store/products.js';\n import * as spots from '@martyrs/src/modules/spots/store/spots.js';\n import variants from '@martyrs/src/modules/products/store/variants.store.js';\n\n import IconEdit from '@martyrs/src/modules/icons/navigation/IconEdit.vue';\n import IconDelete from '@martyrs/src/modules/icons/navigation/IconDelete.vue';\n import IconEllipsis from '@martyrs/src/modules/icons/navigation/IconEllipsis.vue'\n\n const route = useRoute();\n const router = useRouter();\n const { formatPrice } = useGlobalMixins();\n \n const isOpenProductsPopup = ref(false);\n const isVariantsPopupOpen = ref(false);\n const selectedProduct = ref(null);\n\n const totalPrice = computed(() => {\n return inventory.state.current.positions.reduce((sum, position) => {\n return Number(sum) + Number(position.cost || 0) * Number(position.quantity || 1);\n }, 0);\n });\n\n function openProductsPopup() {\n isOpenProductsPopup.value = true;\n }\n\n function closeProductsPopup() {\n isOpenProductsPopup.value = false;\n }\n \n function closeVariantsPopup() {\n isVariantsPopupOpen.value = false;\n selectedProduct.value = null;\n }\n \n function selectProduct(product) {\n selectedProduct.value = product;\n closeProductsPopup();\n \n // If product has only one variant, add it directly without showing popup\n if (product.variants && product.variants.length === 1) {\n addVariantToInventory(product.variants[0]);\n return;\n }\n \n // If product has multiple variants or no variants defined, show popup\n isVariantsPopupOpen.value = true;\n }\n\n function formatProductName(product, variant) {\n if (!variant || product.variants?.length === 1 && !(variant.attributes?.length))\n return product.name;\n\n const attrs = variant.attributes?.map(a => a.value).filter(Boolean);\n return attrs?.length\n ? `${product.name} / ${attrs.join(' / ')}`\n : `${product.name} / ${variant.name}`;\n }\n\n \n function addVariantToInventory(variant) {\n // Create a position object that includes variant information\n console.log('variant',variant)\n const position = {\n _id: variant._id,\n product: selectedProduct.value._id, \n name: formatProductName(selectedProduct.value, variant),\n image: variant.images?.[0] || selectedProduct.value?.images?.[0] || null,\n cost: variant.cost || variant.price || 0,\n unit: variant.unit || 'pcs',\n quantity: 1,\n variant: {\n _id: variant._id,\n name: variant.name,\n attributes: variant.attributes || []\n }\n };\n // Add position to inventory state\n store.core.actions.add(inventory.state.current.positions, position);\n closeVariantsPopup();\n }\n\n onMounted(async () => {\n // Reset inventory state for new audit\n inventory.mutations.resetCurrent();\n });\n\n async function onReset() {\n inventory.mutations.resetCurrent();\n return true;\n }\n\n\n function prepareInventoryData(status = 'draft') {\n return {\n storage: inventory.state.current.storage,\n comment: inventory.state.current.comment,\n status: status,\n positions: inventory.state.current.positions.map(pos => ({\n product: pos.product,\n variant: pos.variant?._id,\n storage: inventory.state.current.storage,\n quantity: pos.quantity,\n reason: 'custom',\n comment: `Inventory audit: ${pos.name}`,\n cost: pos.cost\n })),\n owner: {\n type: 'organization',\n target: route.params._id\n },\n creator: {\n type: 'user',\n target: auth.state.user._id\n }\n };\n }\n\n function navigateBack() {\n if (route.meta.context === 'backoffice') {\n router.push({ name: 'BackofficeInventoryList' });\n } else if (route.meta.context === 'organization') {\n router.push({ name: 'OrganizationInventoryList', params: { _id: route.params._id } });\n }\n }\n\n async function onSaveDraft() {\n try {\n const inventoryData = prepareInventoryData('draft');\n await inventory.actions.createInventory(inventoryData);\n navigateBack();\n } catch (error) {\n console.error('Error creating draft inventory:', error);\n }\n }\n\n async function onPublish() {\n try {\n const inventoryData = prepareInventoryData('published');\n await inventory.actions.createInventory(inventoryData);\n navigateBack();\n } catch (error) {\n console.error('Error publishing inventory:', error);\n }\n }\n\n // Remove delete function as we only support creation mode\n</script>"],"names":["inventory.state","inventory.mutations","auth.state","inventory.actions"],"mappings":"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"}
1
+ {"version":3,"file":"InventoryEdit.vue.js","sources":["../../../../../../../src/modules/inventory/components/pages/InventoryEdit.vue"],"sourcesContent":["<template>\n <div class=\"pd-medium mobile:pd-thin\">\n <header class=\"mn-b-medium gap-small flex-v-center flex-nowrap flex\">\n <h2 class=\"\">Create Inventory Audit</h2>\n </header>\n \n <Popup \n title=\"Add position\" \n @close-popup=\"closeProductsPopup\" \n :isPopupOpen=\"isOpenProductsPopup\"\n class=\"bg-white w-100 w-max-30r radius-medium pd-medium\"\n >\n <Feed\n :search=\"{\n class: 'bg-light radius-small'\n }\"\n :states=\"{\n empty: {\n title: 'No Products Found',\n description: 'Currently, there are no such products available.'\n }\n }\"\n :store=\"{\n read: (options) => products.actions.read(options),\n state: null\n }\"\n :options=\"{\n owner: route.params._id,\n }\"\n v-slot=\"{ \n items \n }\"\n class=\"flex-column flex gap-thin h-max-20r o-scroll\"\n >\n <CardOrderItem\n v-for=\"(product, index) in items\" \n :key=\"`${product._id}_${product.variant || 'no-variant'}_${index}`\"\n :editable=\"false\" \n :productId=\"product._id\"\n :variantId=\"product.variant\"\n :images=\"product.images\"\n :name=\"product.name\"\n :quantity=\"product.quantity || 1\"\n :unit=\"product.unit\"\n :dates=\"product.date\"\n :listing=\"product.listing\"\n :price=\"product.price\"\n @click=\"() => selectProduct(product)\"\n class=\"bg-light pd-small radius-small w-100\"\n />\n </Feed>\n </Popup>\n \n <!-- Popup for selecting variant of the product -->\n <Popup \n title=\"Select variant\" \n @close-popup=\"closeVariantsPopup\" \n :isPopupOpen=\"isVariantsPopupOpen\"\n class=\"bg-white w-100 w-max-30r radius-medium pd-medium\"\n >\n <Feed\n :store=\"variants\"\n :options=\"{\n product: selectedProduct._id,\n }\"\n :skeleton=\"{\n structure: [\n { block: 'text', size: 'small' },\n { block: 'text', size: 'medium' },\n { block: 'text', size: 'small' }\n ]\n }\"\n :states=\"{\n empty: {\n title: 'No variants',\n description: 'Create your first variant'\n }\n }\"\n v-slot=\"{ items }\"\n >\n <div class=\"gap-thin flex flex-column\">\n <div \n v-for=\"(variant, index) in items\" \n :key=\"index\"\n @click=\"addVariantToInventory(variant)\"\n class=\"w-100 cursor-pointer hover:scale-[1.05] bg-light pd-small radius-small flex-v-center flex-nowrap flex gap-thin\"\n >\n <div v-if=\"variant.images && variant.images.length\" class=\"aspect-1x1 h-3r radius-small o-hidden\">\n <img \n :src=\"(FILE_SERVER_URL || '') + variant.images[0]\" \n class=\"w-100 h-100 object-fit-cover\"\n />\n </div>\n <div>\n <p class=\"fw-medium\">{{ variant.name || 'Default variant' }}</p>\n <p v-if=\"variant.attributes && variant.attributes.length\" class=\"t-small t-transp\">\n {{ variant.attributes.map(attr => `${attr.name}: ${attr.value}`).join(', ') }}\n </p>\n </div>\n <p class=\"mn-l-auto\">{{ formatPrice(variant.cost) }}</p>\n </div>\n </div>\n </Feed>\n </Popup>\n\n <Block\n class=\"mn-b-thin\"\n >\n <Field\n v-model:field=\"inventory.state.current.comment\"\n placeholder=\"Describe details of the inventory audit\"\n type=\"textarea\"\n class=\"w-100 bg-white radius-small pd-medium\"\n /> \n <div class=\"fw-medium mn-t-small mn-b-thin\">Select Storage:</div>\n <Feed\n :states=\"{\n empty: {\n title: 'No Spots Found',\n description: 'Currently, there are no spots available.'\n }\n }\"\n :store=\"{\n read: (options) => spots.actions.read(options),\n state: null\n }\"\n :options=\"{\n user: auth.state.user._id,\n organization: route.params._id,\n limit: 3\n }\"\n v-slot=\"{ \n items \n }\"\n class=\"flex-nowrap flex-column gap-thin flex\"\n >\n <CardSpot\n v-for=\"(spot, index) in items\"\n :key=\"index\"\n :spot=\"spot\"\n :organization=\"route.params._id\"\n :selected=\"inventory.state.current.storage === spot._id\"\n @click=\"() => inventory.state.current.storage = inventory.state.current.storage === spot._id ? null : spot._id\"\n class=\"radius-small h-min-big clickable bg-white\"\n />\n </Feed>\n\n\n </Block>\n\n <Block\n title=\"Positions\"\n :actions=\"[{\n label: '+',\n function: () => openProductsPopup()\n }]\"\n placeholder=\"No positions added yet\"\n class=\"h-100 flex-column flex gap-thin mn-b-thin\"\n >\n <CardPosition\n v-for=\"(position, index) in inventory.state.current.positions\" \n :key=\"position._id || index\" \n :image=\"position.image\"\n :name=\"position.name\"\n :title=\"formatPrice(position.cost * position.quantity)\"\n :title_class=\"[position.cost * position.quantity < 0 ? 't-red' : 't-grey']\"\n :subtitle=\"`${formatPrice(position.cost)} × ${Math.abs(position.quantity)}${position.unit} `\"\n >\n <template v-slot:actions>\n <QuantitySelector v-model=\"position.quantity\"/>\n \n <!-- <Dropdown\n :label=\"{ component: IconEllipsis, class: 't-transp i-medium' }\"\n class=\"cursor-pointer aspect-1x1 pd-nano radius-small hover:bg-light\"\n align=\"right\"\n >\n <div class=\"bg-white radius-small\">\n <button @click=\"leftovers.state.current.positions.splice(index, 1)\" class=\"cursor-pointer t-left ws-nowrap w-100 pd-small\">\n Delete\n </button>\n </div>\n </Dropdown> -->\n\n </template>\n </CardPosition>\n \n </Block>\n\n <!-- :actions=\"[{\n component: IconEdit,\n handler: () => store.core.actions.add(leftovers.state.current.positions, position),\n class: 'bg-light'\n },{\n component: IconDelete,\n handler: () => leftovers.state.current.positions.splice(index, 1),\n class: 'bg-red'\n }]\" -->\n\n <Block class=\"\">\n <section class=\"gap-thin flex-v-center flex-justify-start flex\">\n <span class=\"h3 mn-r-auto\">\n In total: {{formatPrice(totalPrice)}}\n </span>\n\n <!-- Save Draft -->\n <Button\n :submit=\"onSaveDraft\"\n class=\"bg-second w-min-5r button\"\n >\n <span>Save Draft</span>\n </Button>\n\n <!-- Publish -->\n <Button\n :submit=\"onPublish\"\n class=\"bg-main w-min-5r button\"\n >\n <span>Publish</span>\n </Button>\n\n <!-- Reset -->\n <Button\n :submit=\"onReset\"\n class=\"t-white w-min-5r bg-second button\"\n >\n <span>Reset</span>\n </Button>\n\n <!-- Delete button removed - only create mode supported -->\n </section>\n </Block>\n </div>\n</template>\n\n\n<script setup>\n import Block from '@martyrs/src/components/Block/Block.vue';\n import Button from \"@martyrs/src/components/Button/Button.vue\";\n import Field from '@martyrs/src/components/Field/Field.vue';\n import Feed from '@martyrs/src/components/Feed/Feed.vue';\n import Select from '@martyrs/src/components/Select/Select.vue';\n import Dropdown from '@martyrs/src/components/Dropdown/Dropdown.vue'\n import Popup from '@martyrs/src/components/Popup/Popup.vue';\n\n import CardOrderItem from '@martyrs/src/modules/orders/components/blocks/CardOrderItem.vue';\n import CardSpot from '@martyrs/src/modules/spots/components/blocks/CardSpot.vue'; \n\n import CardPosition from '@martyrs/src/modules/products/components/blocks/CardPosition.vue';\n import QuantitySelector from '@martyrs/src/modules/products/components/elements/QuantitySelector.vue';\n\n import { computed, onMounted, ref, reactive } from 'vue';\n import { useRoute, useRouter } from 'vue-router';\n import { useGlobalMixins } from '@martyrs/src/modules/core/views/mixins/mixins.js';\n\n import { useStore } from '@martyrs/src/modules/core/views/store/core.store.js';\n import * as auth from '@martyrs/src/modules/auth/views/store/auth.js';\n const store = useStore();\n import * as inventory from '@martyrs/src/modules/inventory/store/inventory.store.js';\n import * as products from '@martyrs/src/modules/products/store/products.js';\n import * as spots from '@martyrs/src/modules/spots/store/spots.js';\n import variants from '@martyrs/src/modules/products/store/variants.store.js';\n\n import IconEdit from '@martyrs/src/modules/icons/navigation/IconEdit.vue';\n import IconDelete from '@martyrs/src/modules/icons/navigation/IconDelete.vue';\n import IconEllipsis from '@martyrs/src/modules/icons/navigation/IconEllipsis.vue'\n\n const route = useRoute();\n const router = useRouter();\n const { formatPrice } = useGlobalMixins();\n \n const isOpenProductsPopup = ref(false);\n const isVariantsPopupOpen = ref(false);\n const selectedProduct = ref(null);\n\n const totalPrice = computed(() => {\n return inventory.state.current.positions.reduce((sum, position) => {\n return Number(sum) + Number(position.cost || 0) * Number(position.quantity || 1);\n }, 0);\n });\n\n function openProductsPopup() {\n isOpenProductsPopup.value = true;\n }\n\n function closeProductsPopup() {\n isOpenProductsPopup.value = false;\n }\n \n function closeVariantsPopup() {\n isVariantsPopupOpen.value = false;\n selectedProduct.value = null;\n }\n \n function selectProduct(product) {\n selectedProduct.value = product;\n closeProductsPopup();\n \n // If product has only one variant, add it directly without showing popup\n if (product.variants && product.variants.length === 1) {\n addVariantToInventory(product.variants[0]);\n return;\n }\n \n // If product has multiple variants or no variants defined, show popup\n isVariantsPopupOpen.value = true;\n }\n\n function formatProductName(product, variant) {\n if (!variant || product.variants?.length === 1 && !(variant.attributes?.length))\n return product.name;\n\n const attrs = variant.attributes?.map(a => a.value).filter(Boolean);\n return attrs?.length\n ? `${product.name} / ${attrs.join(' / ')}`\n : `${product.name} / ${variant.name}`;\n }\n\n \n function addVariantToInventory(variant) {\n // Create a position object that includes variant information\n console.log('variant',variant)\n const position = {\n _id: variant._id,\n product: selectedProduct.value._id, \n name: formatProductName(selectedProduct.value, variant),\n image: variant.images?.[0] || selectedProduct.value?.images?.[0] || null,\n cost: variant.cost || variant.price || 0,\n unit: variant.unit || 'pcs',\n quantity: 1,\n variant: {\n _id: variant._id,\n name: variant.name,\n attributes: variant.attributes || []\n }\n };\n // Add position to inventory state\n store.core.actions.add(inventory.state.current.positions, position);\n closeVariantsPopup();\n }\n\n onMounted(async () => {\n // Reset inventory state for new audit\n inventory.mutations.resetCurrent();\n });\n\n async function onReset() {\n inventory.mutations.resetCurrent();\n return true;\n }\n\n\n function prepareInventoryData(status = 'draft') {\n return {\n storage: inventory.state.current.storage,\n comment: inventory.state.current.comment,\n status: status,\n positions: inventory.state.current.positions.map(pos => ({\n product: pos.product,\n variant: pos.variant?._id,\n storage: inventory.state.current.storage,\n quantity: pos.quantity,\n reason: 'custom',\n comment: `Inventory audit: ${pos.name}`,\n cost: pos.cost\n })),\n owner: {\n type: 'organization',\n target: route.params._id\n },\n creator: {\n type: 'user',\n target: auth.state.user._id\n }\n };\n }\n\n function navigateBack() {\n if (route.meta.context === 'backoffice') {\n router.push({ name: 'BackofficeInventoryList' });\n } else if (route.meta.context === 'organization') {\n router.push({ name: 'OrganizationInventoryList', params: { _id: route.params._id } });\n }\n }\n\n async function onSaveDraft() {\n try {\n const inventoryData = prepareInventoryData('draft');\n await inventory.actions.createInventory(inventoryData);\n navigateBack();\n } catch (error) {\n console.error('Error creating draft inventory:', error);\n }\n }\n\n async function onPublish() {\n try {\n const inventoryData = prepareInventoryData('published');\n await inventory.actions.createInventory(inventoryData);\n navigateBack();\n } catch (error) {\n console.error('Error publishing inventory:', error);\n }\n }\n\n // Remove delete function as we only support creation mode\n</script>"],"names":["inventory.state","inventory.mutations","auth.state","inventory.actions"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { ref, onMounted, resolveComponent, createElementBlock, openBlock, createElementVNode, createVNode, createTextVNode, Transition, withCtx, Fragment, renderList, createBlock, createCommentVNode, normalizeClass, toDisplayString } from "vue";
2
- import Loader from "../../../../../components/Loader/Loader.vue2.js";
2
+ import Loader from "../../../../../components/Loader/Loader.vue.js";
3
3
  import { useRouter } from "vue-router";
4
4
  import { useI18n } from "vue-i18n";
5
5
  import { actions as actions$1 } from "../../../../products/store/categories.js";
@@ -1,5 +1,5 @@
1
1
  import { ref, createElementBlock, openBlock, Fragment, renderList, createBlock, normalizeClass, withCtx, createCommentVNode, createTextVNode, resolveDynamicComponent, toDisplayString, createElementVNode, createVNode } from "vue";
2
- import _sfc_main$1 from "../../../../components/Button/Button.vue.js";
2
+ import _sfc_main$1 from "../../../../components/Button/Button.vue2.js";
3
3
  import _sfc_main$2 from "../../../../components/Dropdown/Dropdown.vue.js";
4
4
  import _sfc_main$3 from "../../../icons/navigation/IconEllipsis.vue.js";
5
5
  const _hoisted_1 = { class: "flex gap-small mn-b-medium" };
@@ -1,6 +1,6 @@
1
1
  import { computed, resolveComponent, createBlock, openBlock, withCtx, createElementVNode, createVNode, createElementBlock, createCommentVNode, withModifiers, toDisplayString } from "vue";
2
2
  import Media from "../../../../components/Media/Media.vue.js";
3
- import _sfc_main$1 from "../../../../components/Button/Button.vue.js";
3
+ import _sfc_main$1 from "../../../../components/Button/Button.vue2.js";
4
4
  import _sfc_main$2 from "../../../icons/navigation/IconPlay.vue.js";
5
5
  import { actions } from "../../store/player.js";
6
6
  import { state, actions as actions$1 } from "../../store/albums.js";
@@ -1,5 +1,5 @@
1
1
  import { resolveComponent, createBlock, openBlock, withCtx, createElementVNode, createCommentVNode, createElementBlock, toDisplayString, createTextVNode } from "vue";
2
- import _sfc_main$2 from "../../../../components/Button/Button.vue.js";
2
+ import _sfc_main$2 from "../../../../components/Button/Button.vue2.js";
3
3
  import Media from "../../../../components/Media/Media.vue.js";
4
4
  import _sfc_main$1 from "../../../icons/navigation/IconCheckmark.vue.js";
5
5
  /* empty css */
@@ -1,6 +1,6 @@
1
1
  import { computed, resolveComponent, createBlock, openBlock, withCtx, createElementVNode, createVNode, createElementBlock, createCommentVNode, withModifiers, toDisplayString } from "vue";
2
2
  import Media from "../../../../components/Media/Media.vue.js";
3
- import _sfc_main$1 from "../../../../components/Button/Button.vue.js";
3
+ import _sfc_main$1 from "../../../../components/Button/Button.vue2.js";
4
4
  import _sfc_main$2 from "../../../icons/navigation/IconPlay.vue.js";
5
5
  import { actions as actions$1 } from "../../store/player.js";
6
6
  import { actions, state } from "../../store/playlists.js";
@@ -1,5 +1,5 @@
1
1
  import { ref, resolveComponent, createElementBlock, openBlock, normalizeClass, createElementVNode, createCommentVNode, createBlock, toDisplayString, withModifiers, withCtx, createVNode, createTextVNode } from "vue";
2
- import _sfc_main$1 from "../../../../components/Button/Button.vue.js";
2
+ import _sfc_main$1 from "../../../../components/Button/Button.vue2.js";
3
3
  import Media from "../../../../components/Media/Media.vue.js";
4
4
  import _sfc_main$2 from "../../../icons/navigation/IconPlay.vue.js";
5
5
  import _sfc_main$3 from "../../../icons/navigation/IconPause.vue.js";
@@ -2,8 +2,8 @@ import { reactive, ref, watch, onMounted, createElementBlock, openBlock, createE
2
2
  import { useRouter, useRoute } from "vue-router";
3
3
  import Field from "../../../../components/Field/Field.vue.js";
4
4
  import _sfc_main$1 from "../../../../components/Block/Block.vue.js";
5
- import _sfc_main$3 from "../../../../components/Button/Button.vue.js";
6
- import Select from "../../../../components/Select/Select.vue2.js";
5
+ import _sfc_main$3 from "../../../../components/Button/Button.vue2.js";
6
+ import Select from "../../../../components/Select/Select.vue.js";
7
7
  import UploadImage from "../../../../components/UploadImage/UploadImage.vue.js";
8
8
  import _sfc_main$2 from "../../../icons/navigation/IconCross.vue.js";
9
9
  import BlockMultiselect from "../../../core/views/components/blocks/BlockMultiselect.vue.js";
@@ -2,11 +2,11 @@ import { reactive, ref, watch, onMounted, createElementBlock, openBlock, createE
2
2
  import { useRouter, useRoute } from "vue-router";
3
3
  import Field from "../../../../components/Field/Field.vue.js";
4
4
  import _sfc_main$1 from "../../../../components/Block/Block.vue.js";
5
- import _sfc_main$4 from "../../../../components/Button/Button.vue.js";
5
+ import _sfc_main$4 from "../../../../components/Button/Button.vue2.js";
6
6
  import _sfc_main$3 from "../../../../components/Checkbox/Checkbox.vue.js";
7
- import Select from "../../../../components/Select/Select.vue2.js";
7
+ import Select from "../../../../components/Select/Select.vue.js";
8
8
  import UploadImage from "../../../../components/UploadImage/UploadImage.vue.js";
9
- /* empty css */
9
+ /* empty css */
10
10
  import BlockMultiselect from "../../../core/views/components/blocks/BlockMultiselect.vue.js";
11
11
  import _sfc_main$2 from "../../../icons/navigation/IconCross.vue.js";
12
12
  import { actions as actions$1 } from "../../store/artists.js";
@@ -2,7 +2,7 @@ import { reactive, ref, watch, computed, onMounted, createElementBlock, openBloc
2
2
  import { useRouter, useRoute } from "vue-router";
3
3
  import Field from "../../../../components/Field/Field.vue.js";
4
4
  import _sfc_main$1 from "../../../../components/Block/Block.vue.js";
5
- import _sfc_main$4 from "../../../../components/Button/Button.vue.js";
5
+ import _sfc_main$4 from "../../../../components/Button/Button.vue2.js";
6
6
  import _sfc_main$3 from "../../../../components/Radio/Radio.vue.js";
7
7
  import UploadImage from "../../../../components/UploadImage/UploadImage.vue.js";
8
8
  import _sfc_main$2 from "../../../icons/navigation/IconCross.vue.js";
@@ -1,5 +1,5 @@
1
1
  import { ref, watch, onMounted, createElementBlock, openBlock, createVNode, withDirectives, createBlock, createCommentVNode, createElementVNode, withKeys, vModelText, withCtx } from "vue";
2
- import _sfc_main$2 from "../../../../components/Button/Button.vue.js";
2
+ import _sfc_main$2 from "../../../../components/Button/Button.vue2.js";
3
3
  import _sfc_main$1 from "../../../icons/navigation/IconSearch.vue.js";
4
4
  import _sfc_main$3 from "../../../icons/navigation/IconCross.vue.js";
5
5
  /* empty css */
@@ -2,9 +2,9 @@ import { reactive, ref, watch, onMounted, createElementBlock, openBlock, createE
2
2
  import { useRouter, useRoute } from "vue-router";
3
3
  import Field from "../../../../components/Field/Field.vue.js";
4
4
  import _sfc_main$1 from "../../../../components/Block/Block.vue.js";
5
- import _sfc_main$4 from "../../../../components/Button/Button.vue.js";
5
+ import _sfc_main$4 from "../../../../components/Button/Button.vue2.js";
6
6
  import _sfc_main$3 from "../../../../components/Checkbox/Checkbox.vue.js";
7
- import Select from "../../../../components/Select/Select.vue2.js";
7
+ import Select from "../../../../components/Select/Select.vue.js";
8
8
  import UploadImage from "../../../../components/UploadImage/UploadImage.vue.js";
9
9
  import Upload from "../../../../components/Upload/Upload.vue2.js";
10
10
  import _sfc_main$2 from "../../../icons/navigation/IconCross.vue.js";
@@ -1,7 +1,7 @@
1
1
  import { ref, computed, onMounted, resolveComponent, createElementBlock, openBlock, createCommentVNode, createVNode, createElementVNode, toDisplayString, Fragment, renderList, createBlock, withCtx, createTextVNode } from "vue";
2
2
  import { useRoute, useRouter } from "vue-router";
3
- import Loader from "../../../../components/Loader/Loader.vue2.js";
4
- /* empty css */
3
+ import Loader from "../../../../components/Loader/Loader.vue.js";
4
+ /* empty css */
5
5
  import Media from "../../../../components/Media/Media.vue.js";
6
6
  /* empty css */
7
7
  import _sfc_main$8 from "../../../../components/Feed/Feed.vue.js";
@@ -1,7 +1,7 @@
1
1
  import { ref, computed, onMounted, createElementBlock, openBlock, createCommentVNode, createElementVNode, createVNode, unref, withCtx, createTextVNode, normalizeStyle, normalizeClass, toDisplayString, Fragment, renderList, createBlock } from "vue";
2
2
  import { useRouter, useRoute } from "vue-router";
3
- import _sfc_main$1 from "../../../../components/Button/Button.vue.js";
4
- /* empty css */
3
+ import _sfc_main$1 from "../../../../components/Button/Button.vue2.js";
4
+ /* empty css */
5
5
  import _sfc_main$2 from "../cards/TrackListCard.vue.js";
6
6
  import { state, actions } from "../../store/artists.js";
7
7
  import { state as state$1 } from "../../../auth/views/store/auth.js";
@@ -5,7 +5,7 @@ import _sfc_main$3 from "../cards/TrackListCard.vue.js";
5
5
  import AlbumCard from "../cards/AlbumCard.vue.js";
6
6
  import PlaylistCard from "../cards/PlaylistCard.vue.js";
7
7
  import ArtistCard from "../cards/ArtistCard.vue.js";
8
- import _sfc_main$1 from "../../../../components/Button/Button.vue.js";
8
+ import _sfc_main$1 from "../../../../components/Button/Button.vue2.js";
9
9
  import { state } from "../../../auth/views/store/auth.js";
10
10
  import { state as state$1, actions } from "../../store/playlists.js";
11
11
  import { state as state$2, actions as actions$1 } from "../../store/albums.js";
@@ -1,7 +1,7 @@
1
1
  import { ref, computed, onMounted, resolveComponent, createElementBlock, openBlock, createCommentVNode, createVNode, createElementVNode, toDisplayString, Fragment, renderList, createBlock, withCtx, createTextVNode } from "vue";
2
2
  import { useRoute, useRouter } from "vue-router";
3
- import _sfc_main$9 from "../../../../components/Button/Button.vue.js";
4
- /* empty css */
3
+ import _sfc_main$9 from "../../../../components/Button/Button.vue2.js";
4
+ /* empty css */
5
5
  import Media from "../../../../components/Media/Media.vue.js";
6
6
  /* empty css */
7
7
  import _sfc_main$7 from "../../../../components/Feed/Feed.vue.js";
@@ -154,26 +154,26 @@ const _sfc_main = {
154
154
  {
155
155
  type: "dropdown",
156
156
  items: [
157
- { text: "Add to Queue", action: addToQueue, class: "t-nowrap" },
158
- { text: "Copy Link", action: copyLink, class: "t-nowrap" }
157
+ { text: "Add to Queue", action: addToQueue, class: "ws-nowrap" },
158
+ { text: "Copy Link", action: copyLink, class: "ws-nowrap" }
159
159
  ]
160
160
  }
161
161
  ];
162
162
  if (isOwner.value || isCollaborator.value) {
163
163
  const items = buttons[3].items;
164
164
  items.push({ separator: true });
165
- items.push({ text: "Edit Playlist", action: editPlaylist, class: "t-nowrap" });
165
+ items.push({ text: "Edit Playlist", action: editPlaylist, class: "ws-nowrap" });
166
166
  if (isOwner.value) {
167
167
  items.push({
168
168
  text: playlist.value?.isCollaborative ? "Make Private" : "Make Collaborative",
169
169
  action: toggleCollaborative,
170
- class: "t-nowrap"
170
+ class: "ws-nowrap"
171
171
  });
172
172
  items.push({
173
173
  text: "Delete Playlist",
174
174
  action: deletePlaylist,
175
175
  color: "danger",
176
- class: "t-nowrap"
176
+ class: "ws-nowrap"
177
177
  });
178
178
  }
179
179
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Playlist.vue.js","sources":["../../../../../../../src/modules/music/components/pages/Playlist.vue"],"sourcesContent":["<template>\n <div class=\"playlist-page pd-small\">\n <!-- Not Found -->\n <div v-if=\"hasLoaded && !playlist\" class=\"t-center pd-big\">\n <h2 class=\"\">Playlist not found</h2>\n <p class=\"t-transp fw-medium\">The playlist you're looking for doesn't exist or has been removed.</p>\n </div>\n \n <!-- Playlist Content -->\n <div v-if=\"playlist\" class=\"playlist-content cols-2 mobile:cols-1 gap-big\">\n <!-- Left Column - Cover & Stats -->\n <div class=\"pos-sticky pos-t-0 mobile:pos-relative playlist-cover-section\">\n <!-- Cover -->\n <div class=\"cover-container relative mn-b-medium radius-big overflow-hidden shadow-big\">\n <Media \n :url=\"playlist.coverUrl || '/assets/placeholder-playlist.jpg'\"\n :alt=\"playlist.title\"\n class=\"aspect-1x1 w-100 radius-medium o-hidden\"\n />\n </div>\n\n <!-- Quick Stats -->\n <div class=\"stats-grid d-grid cols-2 gap-small\">\n <div class=\"stat-card bg-light pd-medium radius-medium t-center\">\n <div class=\" mn-b-thin\">{{ playlistTracks.length }}</div>\n <div class=\"t-small t-transp t-uppercase\">Tracks</div>\n </div>\n <div class=\"stat-card bg-light pd-medium radius-medium t-center\">\n <div class=\" mn-b-thin\">{{ formatNumber(playlist.followers || 0) }}</div>\n <div class=\"t-small t-transp t-uppercase\">Followers</div>\n </div>\n </div>\n </div>\n\n <!-- Right Column - Playlist Details -->\n <div class=\"playlist-details-section\">\n <!-- Playlist Type Badge -->\n <div class=\"flex items-center gap-small mn-b-small\">\n <span class=\"bg-light fw-medium pd-thin radius-thin uppercase t-small t-uppercase\">\n Playlist\n </span>\n <span v-if=\"playlist.isCollaborative\" class=\"bg-light fw-medium pd-thin radius-thin uppercase t-small t-uppercase\">\n Collaborative\n </span>\n <span v-if=\"playlist.status === 'published'\" class=\"bg-light fw-medium pd-thin radius-thin uppercase t-small t-uppercase\">\n Published\n </span>\n </div>\n\n <!-- Playlist Title -->\n <h1 class=\"h1 mn-b-medium\">{{ playlist.title }}</h1>\n\n <!-- Action Buttons -->\n <ActionButtons :buttons=\"actionButtons\" />\n\n <div class=\"artists-section mn-b-medium\">\n <h3 class=\"fw-medium mn-b-small\">Created by</h3>\n <div class=\"flex flex-column gap-small\">\n <ArtistCardSmall \n :artist=\"{\n _id: playlist.creator.target,\n to: { name: 'User Profile', params: { _id: playlist.creator.target } },\n photoUrl: null,\n name: playlist.creator.target,\n isVerified: false\n }\"\n :is-following=\"followedUsers.includes(playlist.creator.target)\"\n :show-follow-button=\"!isOwner\"\n @toggle-follow=\"toggleFollowUser(playlist.creator.target)\"\n />\n </div>\n </div>\n\n <!-- Collaborators -->\n <div v-if=\"playlist.collaborators && playlist.collaborators.length > 0\" class=\"collaborators-section mn-b-big\">\n <h3 class=\"fw-medium mn-b-small\">Collaborators</h3>\n <div class=\"flex flex-wrap gap-small\">\n <div \n v-for=\"collaborator in playlist.collaborators\"\n :key=\"collaborator._id || collaborator\"\n class=\"collaborator-chip bg-light pd-thin-big radius-full flex items-center gap-thin\"\n >\n <Media \n v-if=\"collaborator.photoUrl\"\n :url=\"collaborator.photoUrl\"\n class=\"i-medium radius-full object-cover\"\n />\n <span class=\"t-small\">{{ collaborator.name || collaborator.profile?.name || 'User' }}</span>\n </div>\n </div>\n </div>\n\n <!-- Metadata Cards -->\n <h3 class=\"fw-medium mn-b-small\">Metadata</h3>\n <div class=\"metadata-grid d-grid cols-2 gap-small mn-b-medium\">\n <!-- Created Date -->\n <div class=\"metadata-card bg-light pd-medium radius-medium flex items-center gap-regular\">\n <IconCalendar class=\"i-medium t-main\" />\n <div>\n <div class=\"t-small t-transp t-uppercase\">Created</div>\n <div class=\"fw-medium \">{{ formatDate(playlist.createdAt) }}</div>\n </div>\n </div>\n\n <!-- Total Duration -->\n <div class=\"metadata-card bg-light pd-medium radius-medium flex items-center gap-regular\">\n <IconClock class=\"i-medium t-main\" />\n <div>\n <div class=\"t-small t-transp t-uppercase\">Duration</div>\n <div class=\"fw-medium \">{{ totalDuration }}</div>\n </div>\n </div>\n\n <!-- Updated Date -->\n <div class=\"metadata-card bg-light pd-medium radius-medium flex items-center gap-regular\">\n <IconRefresh class=\"i-medium t-main\" />\n <div>\n <div class=\"t-small t-transp t-uppercase\">Updated</div>\n <div class=\"fw-medium \">{{ formatDate(playlist.updatedAt) }}</div>\n </div>\n </div>\n\n <!-- Visibility -->\n <div class=\"metadata-card bg-light pd-medium radius-medium flex items-center gap-regular\">\n <IconEye class=\"i-medium t-main\" />\n <div>\n <div class=\"t-small t-transp t-uppercase\">Visibility</div>\n <div class=\"fw-medium \">{{ playlist.isPublic ? 'Public' : 'Private' }}</div>\n </div>\n </div>\n </div>\n\n <!-- Tags -->\n <div v-if=\"playlist.tags && playlist.tags.length\" class=\"tags-section mn-b-medium\">\n <h3 class=\"fw-medium mn-b-small\">Tags</h3>\n <div class=\"flex gap-thin flex-wrap\">\n <span \n v-for=\"tag in playlist.tags\" \n :key=\"tag\"\n class=\"tag bg-light t-transp pd-thin-big radius-small t-small hover:bg-light cursor-pointer\"\n >\n #{{ tag }}\n </span>\n </div>\n </div>\n\n <!-- Description -->\n <div v-if=\"playlist.description\" class=\"description-section bg-light pd-medium radius-medium mn-b-medium\">\n <h3 class=\"fw-medium mn-b-small\">About</h3>\n <p class=\"t-transp\">{{ playlist.description }}</p>\n </div>\n </div>\n </div>\n\n <!-- Playlist Tracks -->\n <section v-if=\"!isLoading && playlist && playlistTracks.length\" class=\"tracks-section mn-t-big\">\n <h2 class=\"h2 mn-b-medium\">Tracklist</h2>\n <Feed\n :store=\"{\n read: () => Promise.resolve(playlistTracks),\n state: { isLoading: false }\n }\"\n :external=\"true\"\n :items=\"playlistTracks\"\n :states=\"{\n empty: {\n title: 'No tracks in playlist',\n description: 'Add some tracks to get started',\n class: 'pd-medium t-center'\n }\n }\"\n >\n <template #default=\"{ items }\">\n <div class=\"bg-light radius-medium o-hidden\">\n <TrackListCard\n v-for=\"(track, index) in items\"\n :key=\"track._id\"\n :track=\"track\"\n :index=\"index + 1\"\n :showAlbum=\"true\"\n :showCover=\"true\"\n :canRemove=\"isOwner || isCollaborator\"\n @remove=\"() => removeTrack(track._id)\"\n />\n </div>\n </template>\n </Feed>\n </section>\n\n <!-- Empty State -->\n <section v-else-if=\"!isLoading && playlist && !playlistTracks.length\" class=\"empty-section mn-t-big\">\n <div class=\"empty-tracks t-center pd-big bg-light radius-medium\">\n <h3 class=\" mn-b-small\">This playlist is empty</h3>\n <p class=\"t-transp fw-medium mn-b-medium\">Add some tracks to get started</p>\n \n <Button \n v-if=\"isOwner || isCollaborator\"\n @click=\"$router.push({ name: 'music-search' })\"\n color=\"primary\"\n size=\"medium\"\n >\n Find Tracks\n </Button>\n </div>\n </section>\n\n <!-- More Playlists -->\n <section v-if=\"!isLoading && playlist && morePlaylists.length\" class=\"more-playlists-section mn-t-big\">\n <div class=\"flex justify-between items-center mn-b-medium\">\n <h2 class=\"h2\">More Playlists</h2>\n <router-link \n v-if=\"playlist.creator\"\n :to=\"getOwnerProfileLink(playlist.creator)\" \n class=\"t-main hover:opacity-70\"\n >\n See all\n </router-link>\n </div>\n <div class=\"flex flex-nowrap gap-small o-x-scroll overscroll-x-contain scroll-smooth scroll-snap-x-mandatory scroll-hide\">\n <li v-for=\"relatedPlaylist in morePlaylists\" :key=\"relatedPlaylist._id\" class=\"flex-none scroll-snap-start\">\n <PlaylistCard :playlist=\"relatedPlaylist\" class=\"w-min-15r ease-cubic-in-out\" />\n </li>\n </div>\n </section>\n\n <!-- Edit Playlist Modal -->\n <Popup \n :isPopupOpen=\"showEditModal && (isOwner || isCollaborator)\"\n @close-popup=\"showEditModal = false\" \n class=\"bg-white pd-medium w-m-30r radius-medium\"\n >\n <PlaylistForm \n :editMode=\"true\"\n :url=\"playlist.url\"\n @cancel=\"showEditModal = false\"\n @updated=\"handlePlaylistUpdated\"\n />\n </Popup>\n\n <!-- Delete Confirmation Modal -->\n <Popup \n :isPopupOpen=\"showDeleteModal\"\n @close-popup=\"showDeleteModal = false\" \n class=\"bg-white pd-medium w-m-25r radius-medium\"\n >\n <h3 class=\"mn-b-medium\">Delete Playlist</h3>\n <p class=\"t-transp mn-b-medium\">Are you sure you want to delete \"{{ playlist.title }}\"? This action cannot be undone.</p>\n \n <div class=\"flex justify-end gap-small\">\n <Button \n @click=\"showDeleteModal = false\"\n color=\"transp\"\n size=\"medium\"\n >\n Cancel\n </Button>\n \n <Button \n @click=\"confirmDelete\"\n color=\"danger\"\n size=\"medium\"\n >\n Delete Playlist\n </Button>\n </div>\n </Popup>\n </div>\n</template>\n\n<script setup>\nimport { ref, computed, onMounted, watch } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport Button from '@martyrs/src/components/Button/Button.vue';\nimport Loader from '@martyrs/src/components/Loader/Loader.vue';\nimport Media from '@martyrs/src/components/Media/Media.vue';\nimport Dropdown from '@martyrs/src/components/Dropdown/Dropdown.vue';\nimport Feed from '@martyrs/src/components/Feed/Feed.vue';\nimport Popup from '@martyrs/src/components/Popup/Popup.vue';\n\n// Icons\nimport IconPlay from '@martyrs/src/modules/icons/navigation/IconPlay.vue';\nimport IconLike from '@martyrs/src/modules/icons/navigation/IconLike.vue';\nimport IconEllipsis from '@martyrs/src/modules/icons/navigation/IconEllipsis.vue';\nimport IconShuffle from '@martyrs/src/modules/icons/navigation/IconShuffle.vue';\nimport IconCalendar from '@martyrs/src/modules/icons/entities/IconCalendar.vue';\nimport IconClock from '@martyrs/src/modules/icons/entities/IconTime.vue';\nimport IconEye from '@martyrs/src/modules/icons/actions/IconShow.vue';\nimport IconRefresh from '@martyrs/src/modules/icons/navigation/IconRefresh.vue';\nimport IconVerified from '@martyrs/src/modules/icons/navigation/IconCheckmark.vue';\n\n// Components\nimport ActionButtons from '../blocks/ActionButtons.vue';\nimport TrackListCard from '../cards/TrackListCard.vue';\nimport PlaylistCard from '../cards/PlaylistCard.vue';\nimport PlaylistForm from '../forms/PlaylistForm.vue';\nimport ArtistCardSmall from '../cards/ArtistCardSmall.vue';\n\n// Store\nimport { state as playlistsState, actions as playlistsActions } from '../../store/playlists.js';\nimport { state as tracksState, actions as tracksActions } from '../../store/tracks.js';\nimport { actions as playerActions } from '../../store/player.js';\nimport { state as authState } from '@martyrs/src/modules/auth/views/store/auth.js';\nimport { useStore } from '@martyrs/src/modules/core/views/store/core.store.js';\n\nconst store = useStore();\n\nconst route = useRoute();\nconst router = useRouter();\n\n// Emits\nconst emits = defineEmits(['page-loading', 'page-loaded']);\n\n// State\nconst hasLoaded = ref(false);\nconst isFollowing = ref(false);\nconst showEditModal = ref(false);\nconst showDeleteModal = ref(false);\nconst followedUsers = ref([]);\nconst morePlaylists = ref([]);\n\n// Clear state\nplaylistsState.currentPlaylist = null;\nplaylistsState.currentPlaylistTracks = [];\n\n// Computed\nconst playlist = computed(() => playlistsState.currentPlaylist);\nconst playlistTracks = computed(() => playlistsState.currentPlaylistTracks || []);\n\nconst isOwner = computed(() => {\n if (!playlist.value || !authState.user) return false;\n \n const ownerId = playlist.value.owner?.target?._id || playlist.value.owner?.target;\n return ownerId === authState.user._id;\n});\n\nconst isCollaborator = computed(() => {\n if (!playlist.value || !authState.user) return false;\n \n return playlist.value.collaborators?.some(collab => \n (collab._id || collab) === authState.user._id\n );\n});\n\nconst totalDuration = computed(() => {\n if (!playlistTracks.value.length) return '0:00';\n const totalSeconds = playlistTracks.value.reduce((sum, track) => sum + (track.duration || 0), 0);\n return formatDuration(totalSeconds);\n});\n\nconst actionButtons = computed(() => {\n const buttons = [\n {\n type: 'button',\n class: 't-white bg-black',\n icon: IconPlay,\n iconFill: 'rgb(var(--white))',\n text: 'Play All',\n action: playPlaylist\n },\n {\n type: 'button',\n class: 'bg-light',\n icon: IconShuffle,\n text: 'Shuffle',\n action: shufflePlay\n },\n {\n type: 'button',\n class: 'bg-light',\n icon: null,\n text: isFollowing.value ? 'Unfollow' : 'Follow',\n action: toggleFollow\n },\n {\n type: 'dropdown',\n items: [\n { text: 'Add to Queue', action: addToQueue, class: 't-nowrap' },\n { text: 'Copy Link', action: copyLink, class: 't-nowrap' }\n ]\n }\n ];\n\n if (isOwner.value || isCollaborator.value) {\n const items = buttons[3].items;\n items.push({ separator: true });\n items.push({ text: 'Edit Playlist', action: editPlaylist, class: 't-nowrap' });\n\n if (isOwner.value) {\n items.push({\n text: playlist.value?.isCollaborative ? 'Make Private' : 'Make Collaborative',\n action: toggleCollaborative,\n class: 't-nowrap'\n });\n items.push({\n text: 'Delete Playlist',\n action: deletePlaylist,\n color: 'danger',\n class: 't-nowrap'\n });\n }\n }\n\n return buttons;\n});\n\n// Helper functions\nconst getOwnerData = (playlist) => {\n if (!playlist) return null;\n const owner = playlist.creator?.target || playlist.owner?.target;\n return typeof owner === 'object' ? owner : null;\n};\n\nconst getOwnerId = (playlist) => {\n if (!playlist) return null;\n const owner = playlist.creator?.target || playlist.owner?.target;\n return typeof owner === 'object' ? owner._id : owner;\n};\n\nconst getPlaylistOwnerName = (playlist) => {\n if (!playlist) return 'Unknown';\n \n const owner = getOwnerData(playlist);\n if (owner) {\n return owner.profile?.name || owner.name || 'Unknown';\n }\n \n return 'Unknown';\n};\n\nconst getOwnerProfileLink = (owner) => {\n if (!owner || !owner.target) return { name: 'music-home' };\n \n const targetId = typeof owner.target === 'object' ? owner.target._id : owner.target;\n \n if (owner.type === 'user' || owner.type === 'User') {\n return { name: 'User Profile', params: { _id: targetId } };\n } else if (owner.type === 'organization' || owner.type === 'Organization') {\n return { name: 'Organizatio', params: { _id: targetId } };\n }\n \n return { name: 'music-home' };\n};\n\n// Format helpers\nconst formatDate = (dateString) => {\n if (!dateString) return 'Unknown';\n return new Date(dateString).toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'long',\n day: 'numeric'\n });\n};\n\nconst formatDuration = (seconds) => {\n if (!seconds) return '0:00';\n const h = Math.floor(seconds / 3600);\n const m = Math.floor((seconds % 3600) / 60);\n const s = Math.floor(seconds % 60);\n \n if (h > 0) {\n return `${h}:${m.toString().padStart(2, '0')}:${s.toString().padStart(2, '0')}`;\n }\n return `${m}:${s.toString().padStart(2, '0')}`;\n};\n\nconst formatNumber = (num) => {\n if (!num) return '0';\n if (num >= 1000000) {\n return (num / 1000000).toFixed(1) + 'M';\n } else if (num >= 1000) {\n return (num / 1000).toFixed(1) + 'K';\n }\n return num.toString();\n};\n\n// Actions\nconst playPlaylist = () => {\n if (playlistTracks.value && playlistTracks.value.length > 0) {\n playerActions.setQueue(playlistTracks.value);\n }\n};\n\nconst shufflePlay = () => {\n if (playlistTracks.value && playlistTracks.value.length > 0) {\n const shuffled = [...playlistTracks.value].sort(() => Math.random() - 0.5);\n playerActions.setQueue(shuffled);\n }\n};\n\nconst toggleFollow = async () => {\n isFollowing.value = !isFollowing.value;\n // TODO: Implement actual following\n try {\n if (isFollowing.value) {\n await playlistsActions.followPlaylist(playlist.value._id);\n } else {\n await playlistsActions.unfollowPlaylist(playlist.value._id);\n }\n } catch (error) {\n console.error('Error toggling follow:', error);\n isFollowing.value = !isFollowing.value; // Revert on error\n }\n};\n\nconst toggleFollowUser = (userId) => {\n const index = followedUsers.value.indexOf(userId);\n if (index > -1) {\n followedUsers.value.splice(index, 1);\n } else {\n followedUsers.value.push(userId);\n }\n // TODO: Implement actual following\n};\n\nconst addToQueue = () => {\n if (playlistTracks.value && playlistTracks.value.length > 0) {\n playlistTracks.value.forEach(track => {\n playerActions.addToQueue(track);\n });\n }\n};\n\nconst editPlaylist = () => {\n showEditModal.value = true;\n};\n\nconst toggleCollaborative = async () => {\n try {\n const updatedData = {\n _id: playlist.value._id,\n isCollaborative: !playlist.value.isCollaborative\n };\n\n await playlistsActions.updatePlaylist(updatedData);\n } catch (error) {\n console.error('Error updating playlist:', error);\n }\n};\n\nconst deletePlaylist = () => {\n showDeleteModal.value = true;\n};\n\nconst confirmDelete = async () => {\n try {\n await playlistsActions.deletePlaylist(playlist.value._id);\n router.push({ name: 'music-library' });\n } catch (error) {\n console.error('Error deleting playlist:', error);\n store.core.actions.setError({\n message: 'Failed to delete playlist'\n });\n }\n};\n\nconst removeTrack = async (trackId) => {\n try {\n await playlistsActions.removeTrackFromPlaylist(playlist.value._id, trackId);\n // Refresh playlist data\n await fetchPlaylistData();\n } catch (error) {\n console.error('Error removing track:', error);\n store.core.actions.setError({\n message: 'Failed to remove track'\n });\n }\n};\n\nconst copyLink = () => {\n navigator.clipboard.writeText(window.location.href);\n};\n\nconst handlePlaylistUpdated = () => {\n showEditModal.value = false;\n fetchPlaylistData();\n};\n\n// Data fetching\nconst fetchPlaylistData = async () => {\n try {\n await playlistsActions.fetchPlaylistByUrl(route.params.url);\n \n // Check if following\n if (authState.user && playlist.value) {\n // TODO: Check if user is following this playlist\n }\n \n // Fetch more playlists from the same creator\n if (playlist.value?.creator?.target) {\n const creatorId = typeof playlist.value.creator.target === 'object' \n ? playlist.value.creator.target._id \n : playlist.value.creator.target;\n \n const playlists = await playlistsActions.fetchPlaylists({\n 'creator.target': creatorId,\n isPublic: true,\n limit: 6\n });\n \n // Filter out current playlist\n morePlaylists.value = playlists.filter(p => p._id !== playlist.value._id).slice(0, 5);\n }\n } catch (error) {\n console.error('Error fetching playlist data:', error);\n }\n};\n\n// Lifecycle\nonMounted(async () => {\n emits('page-loading');\n \n await fetchPlaylistData();\n \n hasLoaded.value = true;\n emits('page-loaded');\n});\n</script>\n"],"names":["playlistsState","authState","IconPlay","IconShuffle","playerActions","playlistsActions"],"mappings":"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"}
1
+ {"version":3,"file":"Playlist.vue.js","sources":["../../../../../../../src/modules/music/components/pages/Playlist.vue"],"sourcesContent":["<template>\n <div class=\"playlist-page pd-small\">\n <!-- Not Found -->\n <div v-if=\"hasLoaded && !playlist\" class=\"t-center pd-big\">\n <h2 class=\"\">Playlist not found</h2>\n <p class=\"t-transp fw-medium\">The playlist you're looking for doesn't exist or has been removed.</p>\n </div>\n \n <!-- Playlist Content -->\n <div v-if=\"playlist\" class=\"playlist-content cols-2 mobile:cols-1 gap-big\">\n <!-- Left Column - Cover & Stats -->\n <div class=\"pos-sticky pos-t-0 mobile:pos-relative playlist-cover-section\">\n <!-- Cover -->\n <div class=\"cover-container relative mn-b-medium radius-big overflow-hidden shadow-big\">\n <Media \n :url=\"playlist.coverUrl || '/assets/placeholder-playlist.jpg'\"\n :alt=\"playlist.title\"\n class=\"aspect-1x1 w-100 radius-medium o-hidden\"\n />\n </div>\n\n <!-- Quick Stats -->\n <div class=\"stats-grid d-grid cols-2 gap-small\">\n <div class=\"stat-card bg-light pd-medium radius-medium t-center\">\n <div class=\" mn-b-thin\">{{ playlistTracks.length }}</div>\n <div class=\"t-small t-transp t-uppercase\">Tracks</div>\n </div>\n <div class=\"stat-card bg-light pd-medium radius-medium t-center\">\n <div class=\" mn-b-thin\">{{ formatNumber(playlist.followers || 0) }}</div>\n <div class=\"t-small t-transp t-uppercase\">Followers</div>\n </div>\n </div>\n </div>\n\n <!-- Right Column - Playlist Details -->\n <div class=\"playlist-details-section\">\n <!-- Playlist Type Badge -->\n <div class=\"flex items-center gap-small mn-b-small\">\n <span class=\"bg-light fw-medium pd-thin radius-thin uppercase t-small t-uppercase\">\n Playlist\n </span>\n <span v-if=\"playlist.isCollaborative\" class=\"bg-light fw-medium pd-thin radius-thin uppercase t-small t-uppercase\">\n Collaborative\n </span>\n <span v-if=\"playlist.status === 'published'\" class=\"bg-light fw-medium pd-thin radius-thin uppercase t-small t-uppercase\">\n Published\n </span>\n </div>\n\n <!-- Playlist Title -->\n <h1 class=\"h1 mn-b-medium\">{{ playlist.title }}</h1>\n\n <!-- Action Buttons -->\n <ActionButtons :buttons=\"actionButtons\" />\n\n <div class=\"artists-section mn-b-medium\">\n <h3 class=\"fw-medium mn-b-small\">Created by</h3>\n <div class=\"flex flex-column gap-small\">\n <ArtistCardSmall \n :artist=\"{\n _id: playlist.creator.target,\n to: { name: 'User Profile', params: { _id: playlist.creator.target } },\n photoUrl: null,\n name: playlist.creator.target,\n isVerified: false\n }\"\n :is-following=\"followedUsers.includes(playlist.creator.target)\"\n :show-follow-button=\"!isOwner\"\n @toggle-follow=\"toggleFollowUser(playlist.creator.target)\"\n />\n </div>\n </div>\n\n <!-- Collaborators -->\n <div v-if=\"playlist.collaborators && playlist.collaborators.length > 0\" class=\"collaborators-section mn-b-big\">\n <h3 class=\"fw-medium mn-b-small\">Collaborators</h3>\n <div class=\"flex flex-wrap gap-small\">\n <div \n v-for=\"collaborator in playlist.collaborators\"\n :key=\"collaborator._id || collaborator\"\n class=\"collaborator-chip bg-light pd-thin-big radius-full flex items-center gap-thin\"\n >\n <Media \n v-if=\"collaborator.photoUrl\"\n :url=\"collaborator.photoUrl\"\n class=\"i-medium radius-full object-cover\"\n />\n <span class=\"t-small\">{{ collaborator.name || collaborator.profile?.name || 'User' }}</span>\n </div>\n </div>\n </div>\n\n <!-- Metadata Cards -->\n <h3 class=\"fw-medium mn-b-small\">Metadata</h3>\n <div class=\"metadata-grid d-grid cols-2 gap-small mn-b-medium\">\n <!-- Created Date -->\n <div class=\"metadata-card bg-light pd-medium radius-medium flex items-center gap-regular\">\n <IconCalendar class=\"i-medium t-main\" />\n <div>\n <div class=\"t-small t-transp t-uppercase\">Created</div>\n <div class=\"fw-medium \">{{ formatDate(playlist.createdAt) }}</div>\n </div>\n </div>\n\n <!-- Total Duration -->\n <div class=\"metadata-card bg-light pd-medium radius-medium flex items-center gap-regular\">\n <IconClock class=\"i-medium t-main\" />\n <div>\n <div class=\"t-small t-transp t-uppercase\">Duration</div>\n <div class=\"fw-medium \">{{ totalDuration }}</div>\n </div>\n </div>\n\n <!-- Updated Date -->\n <div class=\"metadata-card bg-light pd-medium radius-medium flex items-center gap-regular\">\n <IconRefresh class=\"i-medium t-main\" />\n <div>\n <div class=\"t-small t-transp t-uppercase\">Updated</div>\n <div class=\"fw-medium \">{{ formatDate(playlist.updatedAt) }}</div>\n </div>\n </div>\n\n <!-- Visibility -->\n <div class=\"metadata-card bg-light pd-medium radius-medium flex items-center gap-regular\">\n <IconEye class=\"i-medium t-main\" />\n <div>\n <div class=\"t-small t-transp t-uppercase\">Visibility</div>\n <div class=\"fw-medium \">{{ playlist.isPublic ? 'Public' : 'Private' }}</div>\n </div>\n </div>\n </div>\n\n <!-- Tags -->\n <div v-if=\"playlist.tags && playlist.tags.length\" class=\"tags-section mn-b-medium\">\n <h3 class=\"fw-medium mn-b-small\">Tags</h3>\n <div class=\"flex gap-thin flex-wrap\">\n <span \n v-for=\"tag in playlist.tags\" \n :key=\"tag\"\n class=\"tag bg-light t-transp pd-thin-big radius-small t-small hover:bg-light cursor-pointer\"\n >\n #{{ tag }}\n </span>\n </div>\n </div>\n\n <!-- Description -->\n <div v-if=\"playlist.description\" class=\"description-section bg-light pd-medium radius-medium mn-b-medium\">\n <h3 class=\"fw-medium mn-b-small\">About</h3>\n <p class=\"t-transp\">{{ playlist.description }}</p>\n </div>\n </div>\n </div>\n\n <!-- Playlist Tracks -->\n <section v-if=\"!isLoading && playlist && playlistTracks.length\" class=\"tracks-section mn-t-big\">\n <h2 class=\"h2 mn-b-medium\">Tracklist</h2>\n <Feed\n :store=\"{\n read: () => Promise.resolve(playlistTracks),\n state: { isLoading: false }\n }\"\n :external=\"true\"\n :items=\"playlistTracks\"\n :states=\"{\n empty: {\n title: 'No tracks in playlist',\n description: 'Add some tracks to get started',\n class: 'pd-medium t-center'\n }\n }\"\n >\n <template #default=\"{ items }\">\n <div class=\"bg-light radius-medium o-hidden\">\n <TrackListCard\n v-for=\"(track, index) in items\"\n :key=\"track._id\"\n :track=\"track\"\n :index=\"index + 1\"\n :showAlbum=\"true\"\n :showCover=\"true\"\n :canRemove=\"isOwner || isCollaborator\"\n @remove=\"() => removeTrack(track._id)\"\n />\n </div>\n </template>\n </Feed>\n </section>\n\n <!-- Empty State -->\n <section v-else-if=\"!isLoading && playlist && !playlistTracks.length\" class=\"empty-section mn-t-big\">\n <div class=\"empty-tracks t-center pd-big bg-light radius-medium\">\n <h3 class=\" mn-b-small\">This playlist is empty</h3>\n <p class=\"t-transp fw-medium mn-b-medium\">Add some tracks to get started</p>\n \n <Button \n v-if=\"isOwner || isCollaborator\"\n @click=\"$router.push({ name: 'music-search' })\"\n color=\"primary\"\n size=\"medium\"\n >\n Find Tracks\n </Button>\n </div>\n </section>\n\n <!-- More Playlists -->\n <section v-if=\"!isLoading && playlist && morePlaylists.length\" class=\"more-playlists-section mn-t-big\">\n <div class=\"flex justify-between items-center mn-b-medium\">\n <h2 class=\"h2\">More Playlists</h2>\n <router-link \n v-if=\"playlist.creator\"\n :to=\"getOwnerProfileLink(playlist.creator)\" \n class=\"t-main hover:opacity-70\"\n >\n See all\n </router-link>\n </div>\n <div class=\"flex flex-nowrap gap-small o-x-scroll overscroll-x-contain scroll-smooth scroll-snap-x-mandatory scroll-hide\">\n <li v-for=\"relatedPlaylist in morePlaylists\" :key=\"relatedPlaylist._id\" class=\"flex-none scroll-snap-start\">\n <PlaylistCard :playlist=\"relatedPlaylist\" class=\"w-min-15r ease-cubic-in-out\" />\n </li>\n </div>\n </section>\n\n <!-- Edit Playlist Modal -->\n <Popup \n :isPopupOpen=\"showEditModal && (isOwner || isCollaborator)\"\n @close-popup=\"showEditModal = false\" \n class=\"bg-white pd-medium w-m-30r radius-medium\"\n >\n <PlaylistForm \n :editMode=\"true\"\n :url=\"playlist.url\"\n @cancel=\"showEditModal = false\"\n @updated=\"handlePlaylistUpdated\"\n />\n </Popup>\n\n <!-- Delete Confirmation Modal -->\n <Popup \n :isPopupOpen=\"showDeleteModal\"\n @close-popup=\"showDeleteModal = false\" \n class=\"bg-white pd-medium w-m-25r radius-medium\"\n >\n <h3 class=\"mn-b-medium\">Delete Playlist</h3>\n <p class=\"t-transp mn-b-medium\">Are you sure you want to delete \"{{ playlist.title }}\"? This action cannot be undone.</p>\n \n <div class=\"flex justify-end gap-small\">\n <Button \n @click=\"showDeleteModal = false\"\n color=\"transp\"\n size=\"medium\"\n >\n Cancel\n </Button>\n \n <Button \n @click=\"confirmDelete\"\n color=\"danger\"\n size=\"medium\"\n >\n Delete Playlist\n </Button>\n </div>\n </Popup>\n </div>\n</template>\n\n<script setup>\nimport { ref, computed, onMounted, watch } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport Button from '@martyrs/src/components/Button/Button.vue';\nimport Loader from '@martyrs/src/components/Loader/Loader.vue';\nimport Media from '@martyrs/src/components/Media/Media.vue';\nimport Dropdown from '@martyrs/src/components/Dropdown/Dropdown.vue';\nimport Feed from '@martyrs/src/components/Feed/Feed.vue';\nimport Popup from '@martyrs/src/components/Popup/Popup.vue';\n\n// Icons\nimport IconPlay from '@martyrs/src/modules/icons/navigation/IconPlay.vue';\nimport IconLike from '@martyrs/src/modules/icons/navigation/IconLike.vue';\nimport IconEllipsis from '@martyrs/src/modules/icons/navigation/IconEllipsis.vue';\nimport IconShuffle from '@martyrs/src/modules/icons/navigation/IconShuffle.vue';\nimport IconCalendar from '@martyrs/src/modules/icons/entities/IconCalendar.vue';\nimport IconClock from '@martyrs/src/modules/icons/entities/IconTime.vue';\nimport IconEye from '@martyrs/src/modules/icons/actions/IconShow.vue';\nimport IconRefresh from '@martyrs/src/modules/icons/navigation/IconRefresh.vue';\nimport IconVerified from '@martyrs/src/modules/icons/navigation/IconCheckmark.vue';\n\n// Components\nimport ActionButtons from '../blocks/ActionButtons.vue';\nimport TrackListCard from '../cards/TrackListCard.vue';\nimport PlaylistCard from '../cards/PlaylistCard.vue';\nimport PlaylistForm from '../forms/PlaylistForm.vue';\nimport ArtistCardSmall from '../cards/ArtistCardSmall.vue';\n\n// Store\nimport { state as playlistsState, actions as playlistsActions } from '../../store/playlists.js';\nimport { state as tracksState, actions as tracksActions } from '../../store/tracks.js';\nimport { actions as playerActions } from '../../store/player.js';\nimport { state as authState } from '@martyrs/src/modules/auth/views/store/auth.js';\nimport { useStore } from '@martyrs/src/modules/core/views/store/core.store.js';\n\nconst store = useStore();\n\nconst route = useRoute();\nconst router = useRouter();\n\n// Emits\nconst emits = defineEmits(['page-loading', 'page-loaded']);\n\n// State\nconst hasLoaded = ref(false);\nconst isFollowing = ref(false);\nconst showEditModal = ref(false);\nconst showDeleteModal = ref(false);\nconst followedUsers = ref([]);\nconst morePlaylists = ref([]);\n\n// Clear state\nplaylistsState.currentPlaylist = null;\nplaylistsState.currentPlaylistTracks = [];\n\n// Computed\nconst playlist = computed(() => playlistsState.currentPlaylist);\nconst playlistTracks = computed(() => playlistsState.currentPlaylistTracks || []);\n\nconst isOwner = computed(() => {\n if (!playlist.value || !authState.user) return false;\n \n const ownerId = playlist.value.owner?.target?._id || playlist.value.owner?.target;\n return ownerId === authState.user._id;\n});\n\nconst isCollaborator = computed(() => {\n if (!playlist.value || !authState.user) return false;\n \n return playlist.value.collaborators?.some(collab => \n (collab._id || collab) === authState.user._id\n );\n});\n\nconst totalDuration = computed(() => {\n if (!playlistTracks.value.length) return '0:00';\n const totalSeconds = playlistTracks.value.reduce((sum, track) => sum + (track.duration || 0), 0);\n return formatDuration(totalSeconds);\n});\n\nconst actionButtons = computed(() => {\n const buttons = [\n {\n type: 'button',\n class: 't-white bg-black',\n icon: IconPlay,\n iconFill: 'rgb(var(--white))',\n text: 'Play All',\n action: playPlaylist\n },\n {\n type: 'button',\n class: 'bg-light',\n icon: IconShuffle,\n text: 'Shuffle',\n action: shufflePlay\n },\n {\n type: 'button',\n class: 'bg-light',\n icon: null,\n text: isFollowing.value ? 'Unfollow' : 'Follow',\n action: toggleFollow\n },\n {\n type: 'dropdown',\n items: [\n { text: 'Add to Queue', action: addToQueue, class: 'ws-nowrap' },\n { text: 'Copy Link', action: copyLink, class: 'ws-nowrap' }\n ]\n }\n ];\n\n if (isOwner.value || isCollaborator.value) {\n const items = buttons[3].items;\n items.push({ separator: true });\n items.push({ text: 'Edit Playlist', action: editPlaylist, class: 'ws-nowrap' });\n\n if (isOwner.value) {\n items.push({\n text: playlist.value?.isCollaborative ? 'Make Private' : 'Make Collaborative',\n action: toggleCollaborative,\n class: 'ws-nowrap'\n });\n items.push({\n text: 'Delete Playlist',\n action: deletePlaylist,\n color: 'danger',\n class: 'ws-nowrap'\n });\n }\n }\n\n return buttons;\n});\n\n// Helper functions\nconst getOwnerData = (playlist) => {\n if (!playlist) return null;\n const owner = playlist.creator?.target || playlist.owner?.target;\n return typeof owner === 'object' ? owner : null;\n};\n\nconst getOwnerId = (playlist) => {\n if (!playlist) return null;\n const owner = playlist.creator?.target || playlist.owner?.target;\n return typeof owner === 'object' ? owner._id : owner;\n};\n\nconst getPlaylistOwnerName = (playlist) => {\n if (!playlist) return 'Unknown';\n \n const owner = getOwnerData(playlist);\n if (owner) {\n return owner.profile?.name || owner.name || 'Unknown';\n }\n \n return 'Unknown';\n};\n\nconst getOwnerProfileLink = (owner) => {\n if (!owner || !owner.target) return { name: 'music-home' };\n \n const targetId = typeof owner.target === 'object' ? owner.target._id : owner.target;\n \n if (owner.type === 'user' || owner.type === 'User') {\n return { name: 'User Profile', params: { _id: targetId } };\n } else if (owner.type === 'organization' || owner.type === 'Organization') {\n return { name: 'Organizatio', params: { _id: targetId } };\n }\n \n return { name: 'music-home' };\n};\n\n// Format helpers\nconst formatDate = (dateString) => {\n if (!dateString) return 'Unknown';\n return new Date(dateString).toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'long',\n day: 'numeric'\n });\n};\n\nconst formatDuration = (seconds) => {\n if (!seconds) return '0:00';\n const h = Math.floor(seconds / 3600);\n const m = Math.floor((seconds % 3600) / 60);\n const s = Math.floor(seconds % 60);\n \n if (h > 0) {\n return `${h}:${m.toString().padStart(2, '0')}:${s.toString().padStart(2, '0')}`;\n }\n return `${m}:${s.toString().padStart(2, '0')}`;\n};\n\nconst formatNumber = (num) => {\n if (!num) return '0';\n if (num >= 1000000) {\n return (num / 1000000).toFixed(1) + 'M';\n } else if (num >= 1000) {\n return (num / 1000).toFixed(1) + 'K';\n }\n return num.toString();\n};\n\n// Actions\nconst playPlaylist = () => {\n if (playlistTracks.value && playlistTracks.value.length > 0) {\n playerActions.setQueue(playlistTracks.value);\n }\n};\n\nconst shufflePlay = () => {\n if (playlistTracks.value && playlistTracks.value.length > 0) {\n const shuffled = [...playlistTracks.value].sort(() => Math.random() - 0.5);\n playerActions.setQueue(shuffled);\n }\n};\n\nconst toggleFollow = async () => {\n isFollowing.value = !isFollowing.value;\n // TODO: Implement actual following\n try {\n if (isFollowing.value) {\n await playlistsActions.followPlaylist(playlist.value._id);\n } else {\n await playlistsActions.unfollowPlaylist(playlist.value._id);\n }\n } catch (error) {\n console.error('Error toggling follow:', error);\n isFollowing.value = !isFollowing.value; // Revert on error\n }\n};\n\nconst toggleFollowUser = (userId) => {\n const index = followedUsers.value.indexOf(userId);\n if (index > -1) {\n followedUsers.value.splice(index, 1);\n } else {\n followedUsers.value.push(userId);\n }\n // TODO: Implement actual following\n};\n\nconst addToQueue = () => {\n if (playlistTracks.value && playlistTracks.value.length > 0) {\n playlistTracks.value.forEach(track => {\n playerActions.addToQueue(track);\n });\n }\n};\n\nconst editPlaylist = () => {\n showEditModal.value = true;\n};\n\nconst toggleCollaborative = async () => {\n try {\n const updatedData = {\n _id: playlist.value._id,\n isCollaborative: !playlist.value.isCollaborative\n };\n\n await playlistsActions.updatePlaylist(updatedData);\n } catch (error) {\n console.error('Error updating playlist:', error);\n }\n};\n\nconst deletePlaylist = () => {\n showDeleteModal.value = true;\n};\n\nconst confirmDelete = async () => {\n try {\n await playlistsActions.deletePlaylist(playlist.value._id);\n router.push({ name: 'music-library' });\n } catch (error) {\n console.error('Error deleting playlist:', error);\n store.core.actions.setError({\n message: 'Failed to delete playlist'\n });\n }\n};\n\nconst removeTrack = async (trackId) => {\n try {\n await playlistsActions.removeTrackFromPlaylist(playlist.value._id, trackId);\n // Refresh playlist data\n await fetchPlaylistData();\n } catch (error) {\n console.error('Error removing track:', error);\n store.core.actions.setError({\n message: 'Failed to remove track'\n });\n }\n};\n\nconst copyLink = () => {\n navigator.clipboard.writeText(window.location.href);\n};\n\nconst handlePlaylistUpdated = () => {\n showEditModal.value = false;\n fetchPlaylistData();\n};\n\n// Data fetching\nconst fetchPlaylistData = async () => {\n try {\n await playlistsActions.fetchPlaylistByUrl(route.params.url);\n \n // Check if following\n if (authState.user && playlist.value) {\n // TODO: Check if user is following this playlist\n }\n \n // Fetch more playlists from the same creator\n if (playlist.value?.creator?.target) {\n const creatorId = typeof playlist.value.creator.target === 'object' \n ? playlist.value.creator.target._id \n : playlist.value.creator.target;\n \n const playlists = await playlistsActions.fetchPlaylists({\n 'creator.target': creatorId,\n isPublic: true,\n limit: 6\n });\n \n // Filter out current playlist\n morePlaylists.value = playlists.filter(p => p._id !== playlist.value._id).slice(0, 5);\n }\n } catch (error) {\n console.error('Error fetching playlist data:', error);\n }\n};\n\n// Lifecycle\nonMounted(async () => {\n emits('page-loading');\n \n await fetchPlaylistData();\n \n hasLoaded.value = true;\n emits('page-loaded');\n});\n</script>\n"],"names":["playlistsState","authState","IconPlay","IconShuffle","playerActions","playlistsActions"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgTA,UAAM,QAAQ,SAAQ;AAEtB,UAAM,QAAQ,SAAQ;AACtB,UAAM,SAAS,UAAS;AAGxB,UAAM,QAAQ;AAGd,UAAM,YAAY,IAAI,KAAK;AAC3B,UAAM,cAAc,IAAI,KAAK;AAC7B,UAAM,gBAAgB,IAAI,KAAK;AAC/B,UAAM,kBAAkB,IAAI,KAAK;AACjC,UAAM,gBAAgB,IAAI,EAAE;AAC5B,UAAM,gBAAgB,IAAI,EAAE;AAG5BA,UAAe,kBAAkB;AACjCA,UAAe,wBAAwB,CAAA;AAGvC,UAAM,WAAW,SAAS,MAAMA,MAAe,eAAe;AAC9D,UAAM,iBAAiB,SAAS,MAAMA,MAAe,yBAAyB,CAAA,CAAE;AAEhF,UAAM,UAAU,SAAS,MAAM;AAC7B,UAAI,CAAC,SAAS,SAAS,CAACC,QAAU,KAAM,QAAO;AAE/C,YAAM,UAAU,SAAS,MAAM,OAAO,QAAQ,OAAO,SAAS,MAAM,OAAO;AAC3E,aAAO,YAAYA,QAAU,KAAK;AAAA,IACpC,CAAC;AAED,UAAM,iBAAiB,SAAS,MAAM;AACpC,UAAI,CAAC,SAAS,SAAS,CAACA,QAAU,KAAM,QAAO;AAE/C,aAAO,SAAS,MAAM,eAAe;AAAA,QAAK,aACvC,OAAO,OAAO,YAAYA,QAAU,KAAK;AAAA,MAC9C;AAAA,IACA,CAAC;AAED,UAAM,gBAAgB,SAAS,MAAM;AACnC,UAAI,CAAC,eAAe,MAAM,OAAQ,QAAO;AACzC,YAAM,eAAe,eAAe,MAAM,OAAO,CAAC,KAAK,UAAU,OAAO,MAAM,YAAY,IAAI,CAAC;AAC/F,aAAO,eAAe,YAAY;AAAA,IACpC,CAAC;AAED,UAAM,gBAAgB,SAAS,MAAM;AACnC,YAAM,UAAU;AAAA,QACd;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,MAAMC;AAAAA,UACN,UAAU;AAAA,UACV,MAAM;AAAA,UACN,QAAQ;AAAA,QACd;AAAA,QACI;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,MAAMC;AAAAA,UACN,MAAM;AAAA,UACN,QAAQ;AAAA,QACd;AAAA,QACI;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,MAAM;AAAA,UACN,MAAM,YAAY,QAAQ,aAAa;AAAA,UACvC,QAAQ;AAAA,QACd;AAAA,QACI;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL,EAAE,MAAM,gBAAgB,QAAQ,YAAY,OAAO,YAAW;AAAA,YAC9D,EAAE,MAAM,aAAa,QAAQ,UAAU,OAAO,YAAW;AAAA,UACjE;AAAA,QACA;AAAA,MACA;AAEE,UAAI,QAAQ,SAAS,eAAe,OAAO;AACzC,cAAM,QAAQ,QAAQ,CAAC,EAAE;AACzB,cAAM,KAAK,EAAE,WAAW,KAAI,CAAE;AAC9B,cAAM,KAAK,EAAE,MAAM,iBAAiB,QAAQ,cAAc,OAAO,aAAa;AAE9E,YAAI,QAAQ,OAAO;AACjB,gBAAM,KAAK;AAAA,YACT,MAAM,SAAS,OAAO,kBAAkB,iBAAiB;AAAA,YACzD,QAAQ;AAAA,YACR,OAAO;AAAA,UACf,CAAO;AACD,gBAAM,KAAK;AAAA,YACT,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,OAAO;AAAA,YACP,OAAO;AAAA,UACf,CAAO;AAAA,QACH;AAAA,MACF;AAEA,aAAO;AAAA,IACT,CAAC;AA0BD,UAAM,sBAAsB,CAAC,UAAU;AACrC,UAAI,CAAC,SAAS,CAAC,MAAM,OAAQ,QAAO,EAAE,MAAM,aAAY;AAExD,YAAM,WAAW,OAAO,MAAM,WAAW,WAAW,MAAM,OAAO,MAAM,MAAM;AAE9E,UAAI,MAAM,SAAS,UAAU,MAAM,SAAS,QAAQ;AACjD,eAAO,EAAE,MAAM,gBAAgB,QAAQ,EAAE,KAAK,WAAU;AAAA,MAC1D,WAAW,MAAM,SAAS,kBAAkB,MAAM,SAAS,gBAAgB;AACzE,eAAO,EAAE,MAAM,eAAe,QAAQ,EAAE,KAAK,WAAU;AAAA,MACzD;AAEA,aAAO,EAAE,MAAM,aAAY;AAAA,IAC7B;AAGA,UAAM,aAAa,CAAC,eAAe;AACjC,UAAI,CAAC,WAAY,QAAO;AACxB,aAAO,IAAI,KAAK,UAAU,EAAE,mBAAmB,SAAS;AAAA,QACtD,MAAM;AAAA,QACN,OAAO;AAAA,QACP,KAAK;AAAA,MACT,CAAG;AAAA,IACH;AAEA,UAAM,iBAAiB,CAAC,YAAY;AAClC,UAAI,CAAC,QAAS,QAAO;AACrB,YAAM,IAAI,KAAK,MAAM,UAAU,IAAI;AACnC,YAAM,IAAI,KAAK,MAAO,UAAU,OAAQ,EAAE;AAC1C,YAAM,IAAI,KAAK,MAAM,UAAU,EAAE;AAEjC,UAAI,IAAI,GAAG;AACT,eAAO,GAAG,CAAC,IAAI,EAAE,SAAQ,EAAG,SAAS,GAAG,GAAG,CAAC,IAAI,EAAE,SAAQ,EAAG,SAAS,GAAG,GAAG,CAAC;AAAA,MAC/E;AACA,aAAO,GAAG,CAAC,IAAI,EAAE,SAAQ,EAAG,SAAS,GAAG,GAAG,CAAC;AAAA,IAC9C;AAEA,UAAM,eAAe,CAAC,QAAQ;AAC5B,UAAI,CAAC,IAAK,QAAO;AACjB,UAAI,OAAO,KAAS;AAClB,gBAAQ,MAAM,KAAS,QAAQ,CAAC,IAAI;AAAA,MACtC,WAAW,OAAO,KAAM;AACtB,gBAAQ,MAAM,KAAM,QAAQ,CAAC,IAAI;AAAA,MACnC;AACA,aAAO,IAAI,SAAQ;AAAA,IACrB;AAGA,UAAM,eAAe,MAAM;AACzB,UAAI,eAAe,SAAS,eAAe,MAAM,SAAS,GAAG;AAC3DC,gBAAc,SAAS,eAAe,KAAK;AAAA,MAC7C;AAAA,IACF;AAEA,UAAM,cAAc,MAAM;AACxB,UAAI,eAAe,SAAS,eAAe,MAAM,SAAS,GAAG;AAC3D,cAAM,WAAW,CAAC,GAAG,eAAe,KAAK,EAAE,KAAK,MAAM,KAAK,OAAM,IAAK,GAAG;AACzEA,gBAAc,SAAS,QAAQ;AAAA,MACjC;AAAA,IACF;AAEA,UAAM,eAAe,YAAY;AAC/B,kBAAY,QAAQ,CAAC,YAAY;AAEjC,UAAI;AACF,YAAI,YAAY,OAAO;AACrB,gBAAMC,UAAiB,eAAe,SAAS,MAAM,GAAG;AAAA,QAC1D,OAAO;AACL,gBAAMA,UAAiB,iBAAiB,SAAS,MAAM,GAAG;AAAA,QAC5D;AAAA,MACF,SAAS,OAAO;AACd,gBAAQ,MAAM,0BAA0B,KAAK;AAC7C,oBAAY,QAAQ,CAAC,YAAY;AAAA,MACnC;AAAA,IACF;AAEA,UAAM,mBAAmB,CAAC,WAAW;AACnC,YAAM,QAAQ,cAAc,MAAM,QAAQ,MAAM;AAChD,UAAI,QAAQ,IAAI;AACd,sBAAc,MAAM,OAAO,OAAO,CAAC;AAAA,MACrC,OAAO;AACL,sBAAc,MAAM,KAAK,MAAM;AAAA,MACjC;AAAA,IAEF;AAEA,UAAM,aAAa,MAAM;AACvB,UAAI,eAAe,SAAS,eAAe,MAAM,SAAS,GAAG;AAC3D,uBAAe,MAAM,QAAQ,WAAS;AACpCD,kBAAc,WAAW,KAAK;AAAA,QAChC,CAAC;AAAA,MACH;AAAA,IACF;AAEA,UAAM,eAAe,MAAM;AACzB,oBAAc,QAAQ;AAAA,IACxB;AAEA,UAAM,sBAAsB,YAAY;AACtC,UAAI;AACF,cAAM,cAAc;AAAA,UAClB,KAAK,SAAS,MAAM;AAAA,UACpB,iBAAiB,CAAC,SAAS,MAAM;AAAA,QACvC;AAEI,cAAMC,UAAiB,eAAe,WAAW;AAAA,MACnD,SAAS,OAAO;AACd,gBAAQ,MAAM,4BAA4B,KAAK;AAAA,MACjD;AAAA,IACF;AAEA,UAAM,iBAAiB,MAAM;AAC3B,sBAAgB,QAAQ;AAAA,IAC1B;AAEA,UAAM,gBAAgB,YAAY;AAChC,UAAI;AACF,cAAMA,UAAiB,eAAe,SAAS,MAAM,GAAG;AACxD,eAAO,KAAK,EAAE,MAAM,gBAAe,CAAE;AAAA,MACvC,SAAS,OAAO;AACd,gBAAQ,MAAM,4BAA4B,KAAK;AAC/C,cAAM,KAAK,QAAQ,SAAS;AAAA,UAC1B,SAAS;AAAA,QACf,CAAK;AAAA,MACH;AAAA,IACF;AAEA,UAAM,cAAc,OAAO,YAAY;AACrC,UAAI;AACF,cAAMA,UAAiB,wBAAwB,SAAS,MAAM,KAAK,OAAO;AAE1E,cAAM,kBAAiB;AAAA,MACzB,SAAS,OAAO;AACd,gBAAQ,MAAM,yBAAyB,KAAK;AAC5C,cAAM,KAAK,QAAQ,SAAS;AAAA,UAC1B,SAAS;AAAA,QACf,CAAK;AAAA,MACH;AAAA,IACF;AAEA,UAAM,WAAW,MAAM;AACrB,gBAAU,UAAU,UAAU,OAAO,SAAS,IAAI;AAAA,IACpD;AAEA,UAAM,wBAAwB,MAAM;AAClC,oBAAc,QAAQ;AACtB,wBAAiB;AAAA,IACnB;AAGA,UAAM,oBAAoB,YAAY;AACpC,UAAI;AACF,cAAMA,UAAiB,mBAAmB,MAAM,OAAO,GAAG;AAG1D,YAAIJ,QAAU,QAAQ,SAAS,OAAO;AAAA,QAEtC;AAGA,YAAI,SAAS,OAAO,SAAS,QAAQ;AACnC,gBAAM,YAAY,OAAO,SAAS,MAAM,QAAQ,WAAW,WACvD,SAAS,MAAM,QAAQ,OAAO,MAC9B,SAAS,MAAM,QAAQ;AAE3B,gBAAM,YAAY,MAAMI,UAAiB,eAAe;AAAA,YACtD,kBAAkB;AAAA,YAClB,UAAU;AAAA,YACV,OAAO;AAAA,UACf,CAAO;AAGD,wBAAc,QAAQ,UAAU,OAAO,OAAK,EAAE,QAAQ,SAAS,MAAM,GAAG,EAAE,MAAM,GAAG,CAAC;AAAA,QACtF;AAAA,MACF,SAAS,OAAO;AACd,gBAAQ,MAAM,iCAAiC,KAAK;AAAA,MACtD;AAAA,IACF;AAGA,cAAU,YAAY;AACpB,YAAM,cAAc;AAEpB,YAAM,kBAAiB;AAEvB,gBAAU,QAAQ;AAClB,YAAM,aAAa;AAAA,IACrB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -5,8 +5,8 @@ import _sfc_main$3 from "../cards/TrackListCard.vue.js";
5
5
  import AlbumCard from "../cards/AlbumCard.vue.js";
6
6
  import PlaylistCard from "../cards/PlaylistCard.vue.js";
7
7
  import ArtistCard from "../cards/ArtistCard.vue.js";
8
- import _sfc_main$2 from "../../../../components/Button/Button.vue.js";
9
- import Loader from "../../../../components/Loader/Loader.vue2.js";
8
+ import _sfc_main$2 from "../../../../components/Button/Button.vue2.js";
9
+ import Loader from "../../../../components/Loader/Loader.vue.js";
10
10
  import { state, actions } from "../../store/search.js";
11
11
  /* empty css */
12
12
  import _export_sfc from "../../../../../../_virtual/_plugin-vue_export-helper.js";
@@ -1,7 +1,7 @@
1
1
  import { computed, ref, onMounted, resolveComponent, createElementBlock, openBlock, createCommentVNode, createBlock, createVNode, createElementVNode, withCtx, toDisplayString, Fragment, renderList } from "vue";
2
2
  import { useRoute, useRouter } from "vue-router";
3
- import _sfc_main$5 from "../../../../components/Button/Button.vue.js";
4
- import Loader from "../../../../components/Loader/Loader.vue2.js";
3
+ import _sfc_main$5 from "../../../../components/Button/Button.vue2.js";
4
+ import Loader from "../../../../components/Loader/Loader.vue.js";
5
5
  import Media from "../../../../components/Media/Media.vue.js";
6
6
  /* empty css */
7
7
  import _sfc_main$c from "../../../../components/Popup/Popup.vue.js";
@@ -1,7 +1,7 @@
1
1
  import { createElementBlock, openBlock, createVNode } from "vue";
2
2
  import { useRouter } from "vue-router";
3
- /* empty css */
4
3
  /* empty css */
4
+ /* empty css */
5
5
  import _sfc_main$1 from "../forms/TrackForm.vue.js";
6
6
  const _hoisted_1 = { class: "track-create-page" };
7
7
  const _sfc_main = {
@@ -1,6 +1,6 @@
1
1
  import { ref, onMounted, createElementBlock, openBlock, createElementVNode, createCommentVNode, normalizeClass, unref, normalizeStyle, Fragment, renderList, createBlock, withCtx, createTextVNode, toDisplayString, createVNode } from "vue";
2
2
  import _imports_0 from "./tonar.png.js";
3
- import { r as cu } from "../../../../../dist/main-vq1_XpmQ.js";
3
+ import { r as cu } from "../../../../../dist/main-xL-jtBkT.js";
4
4
  import _sfc_main$1 from "../../../icons/navigation/IconLike.vue.js";
5
5
  import _sfc_main$2 from "../../../icons/entities/IconEvents.vue.js";
6
6
  import _sfc_main$3 from "../cards/TrackListCard.vue.js";
@@ -1,6 +1,6 @@
1
1
  import { ref, computed, createElementBlock, openBlock, createElementVNode, createVNode, createBlock, createCommentVNode, toDisplayString, unref, normalizeClass, withModifiers, withCtx } from "vue";
2
2
  import Media from "../../../../components/Media/Media.vue.js";
3
- import _sfc_main$1 from "../../../../components/Button/Button.vue.js";
3
+ import _sfc_main$1 from "../../../../components/Button/Button.vue2.js";
4
4
  import TrackProgress from "./TrackProgress.vue.js";
5
5
  import VolumeControl from "./VolumeControl.vue.js";
6
6
  import PlayerControls from "./PlayerControls.vue.js";
@@ -1,5 +1,5 @@
1
1
  import { createElementBlock, openBlock, createVNode, normalizeClass, unref, withCtx, createElementVNode } from "vue";
2
- import _sfc_main$1 from "../../../../components/Button/Button.vue.js";
2
+ import _sfc_main$1 from "../../../../components/Button/Button.vue2.js";
3
3
  import IconPrevious from "../../../icons/navigation/IconChevronLeft.vue.js";
4
4
  import IconNext from "../../../icons/navigation/IconChevronRight.vue.js";
5
5
  import _sfc_main$2 from "../../../icons/navigation/IconShuffle.vue.js";
@@ -1,5 +1,5 @@
1
1
  import { ref, computed, createElementBlock, openBlock, createVNode, createElementVNode, unref, withCtx, createBlock, normalizeStyle } from "vue";
2
- import _sfc_main$1 from "../../../../components/Button/Button.vue.js";
2
+ import _sfc_main$1 from "../../../../components/Button/Button.vue2.js";
3
3
  import _sfc_main$2 from "../../../icons/navigation/IconMute.vue.js";
4
4
  import _sfc_main$3 from "../../../icons/navigation/IconUnMute.vue.js";
5
5
  import { state, actions } from "../../store/player.js";
@@ -1,7 +1,7 @@
1
1
  import { inject, reactive, ref, computed, onMounted, createElementBlock, openBlock, createElementVNode, unref, createVNode, Fragment, renderList, toDisplayString, createBlock, createCommentVNode, withCtx, createTextVNode } from "vue";
2
2
  import _sfc_main$1 from "../../../../components/Checkbox/Checkbox.vue.js";
3
- import _sfc_main$2 from "../../../../components/Button/Button.vue.js";
4
- import Loader from "../../../../components/Loader/Loader.vue2.js";
3
+ import _sfc_main$2 from "../../../../components/Button/Button.vue2.js";
4
+ import Loader from "../../../../components/Loader/Loader.vue.js";
5
5
  const _hoisted_1 = {
6
6
  key: 0,
7
7
  class: "pd-large t-center t-transp"
@@ -1,8 +1,8 @@
1
1
  import { mergeModels, useModel, ref, watch, createBlock, openBlock, withCtx, createVNode, createElementVNode, unref, isRef, createTextVNode, toDisplayString } from "vue";
2
2
  import _sfc_main$1 from "../../../../components/Block/Block.vue.js";
3
3
  import Field from "../../../../components/Field/Field.vue.js";
4
- import Select from "../../../../components/Select/Select.vue2.js";
5
- import _sfc_main$2 from "../../../../components/Button/Button.vue.js";
4
+ import Select from "../../../../components/Select/Select.vue.js";
5
+ import _sfc_main$2 from "../../../../components/Button/Button.vue2.js";
6
6
  const _hoisted_1 = { class: "gap-thin flex mn-t-small" };
7
7
  const _sfc_main = {
8
8
  __name: "FormApplicationDetails",
@@ -2,8 +2,8 @@ import { mergeModels, useModel, ref, watch, createBlock, openBlock, withCtx, cre
2
2
  import _sfc_main$1 from "../../../../components/Block/Block.vue.js";
3
3
  import Field from "../../../../components/Field/Field.vue.js";
4
4
  import _sfc_main$2 from "../../../../components/FieldPhone/FieldPhone.vue.js";
5
- import Select from "../../../../components/Select/Select.vue2.js";
6
- import _sfc_main$3 from "../../../../components/Button/Button.vue.js";
5
+ import Select from "../../../../components/Select/Select.vue.js";
6
+ import _sfc_main$3 from "../../../../components/Button/Button.vue2.js";
7
7
  const _hoisted_1 = { class: "gap-thin mn-b-thin flex-justify-between flex-nowrap flex" };
8
8
  const _hoisted_2 = {
9
9
  key: 2,
@@ -1,9 +1,9 @@
1
1
  import { useModel, ref, createElementBlock, openBlock, Fragment, createVNode, withCtx, createBlock, unref, renderList } from "vue";
2
2
  import { useRoute } from "vue-router";
3
3
  import _sfc_main$1 from "../../../../components/Block/Block.vue.js";
4
- /* empty css */
5
- import _sfc_main$3 from "../../../icons/navigation/IconCross.vue.js";
6
4
  /* empty css */
5
+ import _sfc_main$3 from "../../../icons/navigation/IconCross.vue.js";
6
+ /* empty css */
7
7
  import _sfc_main$6 from "../../../../components/Popup/Popup.vue.js";
8
8
  import _sfc_main$5 from "../../../../components/Feed/Feed.vue.js";
9
9
  import _sfc_main$4 from "../../../core/views/components/blocks/BlockSearch.vue.js";
@@ -1,7 +1,7 @@
1
1
  import { ref, onMounted, computed, createElementBlock, createCommentVNode, openBlock, createVNode, createElementVNode, createTextVNode, toDisplayString, Fragment, renderList, unref, normalizeClass, withCtx, createBlock } from "vue";
2
2
  import { useRouter, useRoute } from "vue-router";
3
- import _sfc_main$2 from "../../../../components/Button/Button.vue.js";
4
- import Select from "../../../../components/Select/Select.vue2.js";
3
+ import _sfc_main$2 from "../../../../components/Button/Button.vue2.js";
4
+ import Select from "../../../../components/Select/Select.vue.js";
5
5
  import _sfc_main$1 from "../../../../components/Popup/Popup.vue.js";
6
6
  import IconTime from "../../../icons/entities/IconTime.vue.js";
7
7
  import _sfc_main$3 from "../blocks/CardOrderItem.vue.js";
@@ -1,5 +1,5 @@
1
1
  import { ref, computed, onMounted, watch, createElementBlock, openBlock, createBlock, createCommentVNode, createElementVNode, unref, toDisplayString, createVNode, Fragment, renderList, withCtx, createTextVNode } from "vue";
2
- import _sfc_main$9 from "../../../../components/Button/Button.vue.js";
2
+ import _sfc_main$9 from "../../../../components/Button/Button.vue2.js";
3
3
  import _sfc_main$7 from "../blocks/CardOrderItem.vue.js";
4
4
  import _sfc_main$1 from "../sections/AskToLogin.vue.js";
5
5
  import _sfc_main$3 from "../sections/Succes.vue.js";
@@ -1,7 +1,7 @@
1
1
  import { getCurrentInstance, computed, ref, onMounted, createElementBlock, openBlock, createVNode, createBlock, createCommentVNode, withCtx, createElementVNode, createTextVNode, unref, Fragment, renderList, toDisplayString } from "vue";
2
2
  import { useRoute, useRouter } from "vue-router";
3
3
  /* empty css */
4
- import _sfc_main$2 from "../../../../components/Button/Button.vue.js";
4
+ import _sfc_main$2 from "../../../../components/Button/Button.vue2.js";
5
5
  import _sfc_main$3 from "../../../../components/Tab/Tab.vue2.js";
6
6
  import _sfc_main$4 from "../../../../components/Popup/Popup.vue.js";
7
7
  import _sfc_main$1 from "../../../../components/Block/Block.vue.js";