@ozdao/martyrs 0.2.565 → 0.2.567

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 (122) hide show
  1. package/dist/{main-B9o1iBAZ.js → main-BFvlam0J.js} +9 -6
  2. package/dist/martyrs/dist/main-BFvlam0J.js +943 -0
  3. package/dist/martyrs/dist/main-BFvlam0J.js.map +1 -0
  4. package/dist/martyrs/dist/web-CH5wzMHy.js +55 -0
  5. package/dist/martyrs/dist/web-CH5wzMHy.js.map +1 -0
  6. package/dist/martyrs/src/components/BottomSheet/BottomSheet.vue.js +96 -0
  7. package/dist/martyrs/src/components/BottomSheet/BottomSheet.vue.js.map +1 -0
  8. package/dist/martyrs/src/components/Feed/Carousel.vue.js +2 -2
  9. package/dist/martyrs/src/components/Feed/Carousel.vue.js.map +1 -1
  10. package/dist/martyrs/src/components/Feed/Feed.vue.js +6 -3
  11. package/dist/martyrs/src/components/Feed/Feed.vue.js.map +1 -1
  12. package/dist/martyrs/src/components/Menu/{Menu.vue2.js → Menu.vue.js} +2 -2
  13. package/dist/martyrs/src/components/Menu/Menu.vue.js.map +1 -0
  14. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +1 -1
  15. package/dist/martyrs/src/modules/community/components/sections/HotPosts.vue.js.map +1 -1
  16. package/dist/martyrs/src/modules/core/views/components/layouts/App.vue.js +1 -1
  17. package/dist/martyrs/src/modules/core/views/components/layouts/Client.vue.js +1 -0
  18. package/dist/martyrs/src/modules/core/views/components/layouts/Client.vue.js.map +1 -1
  19. package/dist/martyrs/src/modules/core/views/components/sections/Walkthrough.vue.js +1 -1
  20. package/dist/martyrs/src/modules/events/components/elements/ButtonCheck.vue.js +1 -1
  21. package/dist/martyrs/src/modules/events/components/sections/EventsHot.vue.js +17 -1
  22. package/dist/martyrs/src/modules/events/components/sections/EventsHot.vue.js.map +1 -1
  23. package/dist/martyrs/src/modules/events/events.client.js +15 -12
  24. package/dist/martyrs/src/modules/events/events.client.js.map +1 -1
  25. package/dist/martyrs/src/modules/music/components/blocks/ActionButtons.vue.js +95 -0
  26. package/dist/martyrs/src/modules/music/components/blocks/ActionButtons.vue.js.map +1 -0
  27. package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js +5 -2
  28. package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js.map +1 -1
  29. package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.js +24 -24
  30. package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.js.map +1 -1
  31. package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.js +3 -3
  32. package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.js.map +1 -1
  33. package/dist/martyrs/src/modules/music/components/layouts/MusicBottomPlayer.vue.js +31 -6
  34. package/dist/martyrs/src/modules/music/components/layouts/MusicBottomPlayer.vue.js.map +1 -1
  35. package/dist/martyrs/src/modules/music/components/pages/Album.vue.js +120 -205
  36. package/dist/martyrs/src/modules/music/components/pages/Album.vue.js.map +1 -1
  37. package/dist/martyrs/src/modules/music/components/pages/MusicHome.vue.js +9 -13
  38. package/dist/martyrs/src/modules/music/components/pages/MusicHome.vue.js.map +1 -1
  39. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js +166 -245
  40. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js.map +1 -1
  41. package/dist/martyrs/src/modules/music/components/pages/Track.vue.js +135 -220
  42. package/dist/martyrs/src/modules/music/components/pages/Track.vue.js.map +1 -1
  43. package/dist/martyrs/src/modules/music/components/player/FullscreenPlayer.vue.js +171 -0
  44. package/dist/martyrs/src/modules/music/components/player/FullscreenPlayer.vue.js.map +1 -0
  45. package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.js +31 -153
  46. package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.js.map +1 -1
  47. package/dist/martyrs/src/modules/music/components/player/PlayerControls.vue.js +96 -0
  48. package/dist/martyrs/src/modules/music/components/player/PlayerControls.vue.js.map +1 -0
  49. package/dist/martyrs/src/modules/music/components/player/VolumeControl.vue.js +55 -27
  50. package/dist/martyrs/src/modules/music/components/player/VolumeControl.vue.js.map +1 -1
  51. package/dist/martyrs/src/modules/music/components/player/tonar.png.js +5 -0
  52. package/dist/martyrs/src/modules/music/components/player/tonar.png.js.map +1 -0
  53. package/dist/martyrs/src/modules/music/store/albums.js +8 -2
  54. package/dist/martyrs/src/modules/music/store/albums.js.map +1 -1
  55. package/dist/martyrs/src/modules/music/store/player.js +83 -65
  56. package/dist/martyrs/src/modules/music/store/player.js.map +1 -1
  57. package/dist/martyrs/src/modules/music/store/tracks.js +4 -13
  58. package/dist/martyrs/src/modules/music/store/tracks.js.map +1 -1
  59. package/dist/martyrs/src/modules/notifications/notifications.client.js +2 -2
  60. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js +1 -1
  61. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.js +1 -1
  62. package/dist/martyrs.css +1 -1
  63. package/dist/martyrs.es.js +1 -1
  64. package/dist/music.server.js +33 -6
  65. package/dist/node_modules/.pnpm/{@capacitor-mlkit_barcode-scanning@7.1.0_@capacitor_core@7.0.1 → @capacitor-mlkit_barcode-scanning@7.3.0_@capacitor_core@7.4.4}/node_modules/@capacitor-mlkit/barcode-scanning/dist/esm/definitions.js +1 -0
  66. package/dist/node_modules/.pnpm/@capacitor-mlkit_barcode-scanning@7.3.0_@capacitor_core@7.4.4/node_modules/@capacitor-mlkit/barcode-scanning/dist/esm/definitions.js.map +1 -0
  67. package/dist/node_modules/.pnpm/{@capacitor-mlkit_barcode-scanning@7.1.0_@capacitor_core@7.0.1 → @capacitor-mlkit_barcode-scanning@7.3.0_@capacitor_core@7.4.4}/node_modules/@capacitor-mlkit/barcode-scanning/dist/esm/index.js +1 -1
  68. package/dist/node_modules/.pnpm/{@capacitor-mlkit_barcode-scanning@7.1.0_@capacitor_core@7.0.1 → @capacitor-mlkit_barcode-scanning@7.3.0_@capacitor_core@7.4.4}/node_modules/@capacitor-mlkit/barcode-scanning/dist/esm/index.js.map +1 -1
  69. package/dist/node_modules/.pnpm/{@capacitor-mlkit_barcode-scanning@7.1.0_@capacitor_core@7.0.1 → @capacitor-mlkit_barcode-scanning@7.3.0_@capacitor_core@7.4.4}/node_modules/@capacitor-mlkit/barcode-scanning/dist/esm/web.js +16 -1
  70. package/dist/node_modules/.pnpm/@capacitor-mlkit_barcode-scanning@7.3.0_@capacitor_core@7.4.4/node_modules/@capacitor-mlkit/barcode-scanning/dist/esm/web.js.map +1 -0
  71. package/dist/node_modules/.pnpm/{@capacitor_core@7.0.1 → @capacitor_core@7.4.4}/node_modules/@capacitor/core/dist/index.js +2 -1
  72. package/dist/node_modules/.pnpm/@capacitor_core@7.4.4/node_modules/@capacitor/core/dist/index.js.map +1 -0
  73. package/dist/node_modules/.pnpm/{@capacitor_device@7.0.0_@capacitor_core@7.0.1 → @capacitor_device@7.0.1_@capacitor_core@7.4.4}/node_modules/@capacitor/device/dist/esm/index.js +1 -1
  74. package/dist/node_modules/.pnpm/{@capacitor_device@7.0.0_@capacitor_core@7.0.1 → @capacitor_device@7.0.1_@capacitor_core@7.4.4}/node_modules/@capacitor/device/dist/esm/index.js.map +1 -1
  75. package/dist/node_modules/.pnpm/{@capacitor_device@7.0.0_@capacitor_core@7.0.1 → @capacitor_device@7.0.1_@capacitor_core@7.4.4}/node_modules/@capacitor/device/dist/esm/web.js +1 -1
  76. package/dist/node_modules/.pnpm/{@capacitor_device@7.0.0_@capacitor_core@7.0.1 → @capacitor_device@7.0.1_@capacitor_core@7.4.4}/node_modules/@capacitor/device/dist/esm/web.js.map +1 -1
  77. package/dist/node_modules/.pnpm/{@capacitor_keyboard@7.0.0_@capacitor_core@7.0.1 → @capacitor_keyboard@7.0.1_@capacitor_core@7.4.4}/node_modules/@capacitor/keyboard/dist/esm/definitions.js.map +1 -1
  78. package/dist/node_modules/.pnpm/{@capacitor_keyboard@7.0.0_@capacitor_core@7.0.1 → @capacitor_keyboard@7.0.1_@capacitor_core@7.4.4}/node_modules/@capacitor/keyboard/dist/esm/index.js +1 -1
  79. package/dist/node_modules/.pnpm/{@capacitor_keyboard@7.0.0_@capacitor_core@7.0.1 → @capacitor_keyboard@7.0.1_@capacitor_core@7.4.4}/node_modules/@capacitor/keyboard/dist/esm/index.js.map +1 -1
  80. package/dist/node_modules/.pnpm/{@capacitor_push-notifications@7.0.0_@capacitor_core@7.0.1 → @capacitor_push-notifications@7.0.3_@capacitor_core@7.4.4}/node_modules/@capacitor/push-notifications/dist/esm/index.js +1 -1
  81. package/dist/node_modules/.pnpm/{@capacitor_push-notifications@7.0.0_@capacitor_core@7.0.1 → @capacitor_push-notifications@7.0.3_@capacitor_core@7.4.4}/node_modules/@capacitor/push-notifications/dist/esm/index.js.map +1 -1
  82. package/dist/node_modules/.pnpm/{capacitor-plugin-app-tracking-transparency@2.0.5_@capacitor_core@7.0.1 → capacitor-plugin-app-tracking-transparency@2.0.5_@capacitor_core@7.4.4}/node_modules/capacitor-plugin-app-tracking-transparency/dist/esm/index.js +1 -1
  83. package/dist/node_modules/.pnpm/{capacitor-plugin-app-tracking-transparency@2.0.5_@capacitor_core@7.0.1 → capacitor-plugin-app-tracking-transparency@2.0.5_@capacitor_core@7.4.4}/node_modules/capacitor-plugin-app-tracking-transparency/dist/esm/index.js.map +1 -1
  84. package/dist/node_modules/.pnpm/{capacitor-plugin-app-tracking-transparency@2.0.5_@capacitor_core@7.0.1 → capacitor-plugin-app-tracking-transparency@2.0.5_@capacitor_core@7.4.4}/node_modules/capacitor-plugin-app-tracking-transparency/dist/esm/web.js +1 -1
  85. package/dist/node_modules/.pnpm/{capacitor-plugin-app-tracking-transparency@2.0.5_@capacitor_core@7.0.1 → capacitor-plugin-app-tracking-transparency@2.0.5_@capacitor_core@7.4.4}/node_modules/capacitor-plugin-app-tracking-transparency/dist/esm/web.js.map +1 -1
  86. package/dist/style.css +221 -145
  87. package/dist/{web-BF3ijvEr.js → web-CH5wzMHy.js} +1 -1
  88. package/package.json +1 -1
  89. package/src/components/BottomSheet/BottomSheet.vue +4 -4
  90. package/src/components/Feed/Carousel.vue +1 -1
  91. package/src/components/Feed/Feed.vue +3 -3
  92. package/src/modules/LAYOUT.MD +767 -0
  93. package/src/modules/community/components/sections/HotPosts.vue +8 -4
  94. package/src/modules/core/views/components/layouts/Client.vue +1 -1
  95. package/src/modules/events/components/sections/EventsHot.vue +21 -4
  96. package/src/modules/events/events.client.js +3 -0
  97. package/src/modules/music/components/blocks/ActionButtons.vue +74 -0
  98. package/src/modules/music/components/cards/AlbumCard.vue +1 -1
  99. package/src/modules/music/components/cards/ArtistCardSmall.vue +8 -6
  100. package/src/modules/music/components/cards/TrackListCard.vue +6 -6
  101. package/src/modules/music/components/layouts/MusicBottomPlayer.vue +94 -4
  102. package/src/modules/music/components/pages/Album.vue +55 -67
  103. package/src/modules/music/components/pages/MusicHome.vue +4 -6
  104. package/src/modules/music/components/pages/Playlist.vue +61 -70
  105. package/src/modules/music/components/pages/Track.vue +54 -71
  106. package/src/modules/music/components/player/FullscreenPlayer.vue +248 -0
  107. package/src/modules/music/components/player/MusicPlayer.vue +21 -216
  108. package/src/modules/music/components/player/PlayerControls.vue +112 -0
  109. package/src/modules/music/components/player/Visualizer.vue +151 -0
  110. package/src/modules/music/components/player/VolumeControl.vue +75 -23
  111. package/src/modules/music/components/player/tonar.png +0 -0
  112. package/src/modules/music/routes/albums.routes.js +13 -12
  113. package/src/modules/music/routes/tracks.routes.js +39 -0
  114. package/src/modules/music/store/albums.js +10 -2
  115. package/src/modules/music/store/player.js +101 -89
  116. package/src/modules/music/store/tracks.js +5 -21
  117. package/src/styles/config.scss +6 -6
  118. package/dist/martyrs/src/components/Menu/Menu.vue2.js.map +0 -1
  119. package/dist/node_modules/.pnpm/@capacitor-mlkit_barcode-scanning@7.1.0_@capacitor_core@7.0.1/node_modules/@capacitor-mlkit/barcode-scanning/dist/esm/definitions.js.map +0 -1
  120. package/dist/node_modules/.pnpm/@capacitor-mlkit_barcode-scanning@7.1.0_@capacitor_core@7.0.1/node_modules/@capacitor-mlkit/barcode-scanning/dist/esm/web.js.map +0 -1
  121. package/dist/node_modules/.pnpm/@capacitor_core@7.0.1/node_modules/@capacitor/core/dist/index.js.map +0 -1
  122. /package/dist/node_modules/.pnpm/{@capacitor_keyboard@7.0.0_@capacitor_core@7.0.1 → @capacitor_keyboard@7.0.1_@capacitor_core@7.4.4}/node_modules/@capacitor/keyboard/dist/esm/definitions.js +0 -0
@@ -1,15 +1,16 @@
1
1
  import addRoutes from "../core/views/router/addRoutes.js";
2
2
  import * as events from "./store/events.js";
3
3
  import { getRoutes } from "./router/events.router.js";
4
- import _sfc_main$7 from "./components/blocks/CardEvent.vue.js";
5
- import _sfc_main$6 from "./components/blocks/CardEventShort.vue.js";
4
+ import _sfc_main$8 from "./components/blocks/CardEvent.vue.js";
5
+ import _sfc_main$7 from "./components/blocks/CardEventShort.vue.js";
6
6
  import _sfc_main$3 from "./components/layouts/layoutEvents.vue.js";
7
7
  import _sfc_main$2 from "./components/pages/EditEvent.vue.js";
8
8
  import _sfc_main$1 from "./components/pages/Event.vue.js";
9
9
  import _sfc_main from "./components/pages/Events.vue.js";
10
10
  import FeaturedEvents from "./components/sections/FeaturedEvents.vue.js";
11
- import _sfc_main$5 from "./components/sections/Feed.vue.js";
12
- import _sfc_main$4 from "./components/sections/List.vue.js";
11
+ import _sfc_main$4 from "./components/sections/EventsHot.vue.js";
12
+ import _sfc_main$6 from "./components/sections/Feed.vue.js";
13
+ import _sfc_main$5 from "./components/sections/List.vue.js";
13
14
  function initializeEvents(app, store, router, options = {}) {
14
15
  const routes = getRoutes(options);
15
16
  routes.forEach(({ parentName, config }) => {
@@ -28,12 +29,13 @@ const ModuleEvents = {
28
29
  },
29
30
  components: {
30
31
  // Blocks
31
- CardEvent: _sfc_main$7,
32
- CardEventShort: _sfc_main$6,
32
+ CardEvent: _sfc_main$8,
33
+ CardEventShort: _sfc_main$7,
33
34
  // Sections
34
- Feed: _sfc_main$5,
35
- List: _sfc_main$4,
35
+ Feed: _sfc_main$6,
36
+ List: _sfc_main$5,
36
37
  FeaturedEvents,
38
+ EventsHot: _sfc_main$4,
37
39
  // Layouts
38
40
  EventsLayout: _sfc_main$3,
39
41
  // Pages
@@ -44,15 +46,16 @@ const ModuleEvents = {
44
46
  }
45
47
  };
46
48
  export {
47
- _sfc_main$7 as CardEvent,
48
- _sfc_main$6 as CardEventShort,
49
+ _sfc_main$8 as CardEvent,
50
+ _sfc_main$7 as CardEventShort,
49
51
  _sfc_main$2 as EditEvent,
50
52
  _sfc_main$1 as Event,
53
+ _sfc_main$4 as EventsHot,
51
54
  _sfc_main$3 as EventsLayout,
52
55
  _sfc_main as EventsPage,
53
56
  FeaturedEvents,
54
- _sfc_main$5 as Feed,
55
- _sfc_main$4 as List,
57
+ _sfc_main$6 as Feed,
58
+ _sfc_main$5 as List,
56
59
  ModuleEvents as default,
57
60
  getRoutes,
58
61
  initializeEvents,
@@ -1 +1 @@
1
- {"version":3,"file":"events.client.js","sources":["../../../../../src/modules/events/events.client.js"],"sourcesContent":["import addRoutes from '@martyrs/src/modules/core/views/router/addRoutes.js';\n\n// Store\nimport * as storeEvents from './store/events.js';\n\n// Router\nimport { getRoutes } from './router/events.router.js';\n\n// Views\nimport CardEvent from './components/blocks/CardEvent.vue';\nimport CardEventShort from './components/blocks/CardEventShort.vue';\nimport EventsLayout from './components/layouts/layoutEvents.vue';\nimport EditEvent from './components/pages/EditEvent.vue';\nimport Event from './components/pages/Event.vue';\nimport EventsPage from './components/pages/Events.vue';\nimport FeaturedEvents from './components/sections/FeaturedEvents.vue';\nimport Feed from './components/sections/Feed.vue';\nimport List from './components/sections/List.vue';\n\n// Пример функции инициализации для модуля событий\nfunction initializeEvents(app, store, router, options = {}) {\n const routes = getRoutes(options);\n routes.forEach(({ parentName, config }) => {\n addRoutes(router, { ...config, parentName });\n });\n\n store.addStore('events', storeEvents);\n}\n\nconst ModuleEvents = {\n initialize: initializeEvents,\n views: {\n store: {\n storeEvents,\n },\n router: {\n getRoutes,\n },\n components: {\n // Blocks\n CardEvent,\n CardEventShort,\n // Sections\n Feed,\n List,\n FeaturedEvents,\n // Layouts\n EventsLayout,\n // Pages\n EditEvent,\n Event,\n EventsPage,\n },\n },\n};\n\nexport {\n // Blocks\n CardEvent,\n CardEventShort,\n getRoutes,\n EditEvent,\n Event,\n EventsLayout,\n EventsPage,\n FeaturedEvents,\n Feed,\n initializeEvents,\n List,\n storeEvents,\n};\n\nexport default ModuleEvents;\n"],"names":["storeEvents","CardEvent","CardEventShort","Feed","List","EventsLayout","EditEvent","Event","EventsPage"],"mappings":";;;;;;;;;;;;AAoBA,SAAS,iBAAiB,KAAK,OAAO,QAAQ,UAAU,CAAA,GAAI;AAC1D,QAAM,SAAS,UAAU,OAAO;AAChC,SAAO,QAAQ,CAAC,EAAE,YAAY,OAAM,MAAO;AACzC,cAAU,QAAQ,EAAE,GAAG,QAAQ,WAAU,CAAE;AAAA,EAC7C,CAAC;AAED,QAAM,SAAS,UAAUA,MAAW;AACtC;AAEK,MAAC,eAAe;AAAA,EACnB,YAAY;AAAA,EACZ,OAAO;AAAA,IACL,OAAO;AAAA,MACX,aAAMA;AAAAA,IACN;AAAA,IACI,QAAQ;AAAA,MACN;AAAA,IACN;AAAA,IACI,YAAY;AAAA;AAAA,MAEhB,WAAMC;AAAAA,MACN,gBAAMC;AAAAA;AAAAA,MAEN,MAAMC;AAAAA,MACN,MAAMC;AAAAA,MACA;AAAA;AAAA,MAEN,cAAMC;AAAAA;AAAAA,MAEN,WAAMC;AAAAA,MACN,OAAMC;AAAAA,MACN,YAAMC;AAAAA,IACN;AAAA,EACA;AACA;"}
1
+ {"version":3,"file":"events.client.js","sources":["../../../../../src/modules/events/events.client.js"],"sourcesContent":["import addRoutes from '@martyrs/src/modules/core/views/router/addRoutes.js';\n\n// Store\nimport * as storeEvents from './store/events.js';\n\n// Router\nimport { getRoutes } from './router/events.router.js';\n\n// Views\nimport CardEvent from './components/blocks/CardEvent.vue';\nimport CardEventShort from './components/blocks/CardEventShort.vue';\nimport EventsLayout from './components/layouts/layoutEvents.vue';\nimport EditEvent from './components/pages/EditEvent.vue';\nimport Event from './components/pages/Event.vue';\nimport EventsPage from './components/pages/Events.vue';\nimport FeaturedEvents from './components/sections/FeaturedEvents.vue';\nimport EventsHot from './components/sections/EventsHot.vue';\nimport Feed from './components/sections/Feed.vue';\nimport List from './components/sections/List.vue';\n\n// Пример функции инициализации для модуля событий\nfunction initializeEvents(app, store, router, options = {}) {\n const routes = getRoutes(options);\n routes.forEach(({ parentName, config }) => {\n addRoutes(router, { ...config, parentName });\n });\n\n store.addStore('events', storeEvents);\n}\n\nconst ModuleEvents = {\n initialize: initializeEvents,\n views: {\n store: {\n storeEvents,\n },\n router: {\n getRoutes,\n },\n components: {\n // Blocks\n CardEvent,\n CardEventShort,\n // Sections\n Feed,\n List,\n FeaturedEvents,\n EventsHot,\n // Layouts\n EventsLayout,\n // Pages\n EditEvent,\n Event,\n EventsPage,\n },\n },\n};\n\nexport {\n // Blocks\n CardEvent,\n CardEventShort,\n getRoutes,\n EditEvent,\n Event,\n EventsLayout,\n EventsPage,\n FeaturedEvents,\n EventsHot,\n Feed,\n initializeEvents,\n List,\n storeEvents,\n};\n\nexport default ModuleEvents;\n"],"names":["storeEvents","CardEvent","CardEventShort","Feed","List","EventsHot","EventsLayout","EditEvent","Event","EventsPage"],"mappings":";;;;;;;;;;;;;AAqBA,SAAS,iBAAiB,KAAK,OAAO,QAAQ,UAAU,CAAA,GAAI;AAC1D,QAAM,SAAS,UAAU,OAAO;AAChC,SAAO,QAAQ,CAAC,EAAE,YAAY,OAAM,MAAO;AACzC,cAAU,QAAQ,EAAE,GAAG,QAAQ,WAAU,CAAE;AAAA,EAC7C,CAAC;AAED,QAAM,SAAS,UAAUA,MAAW;AACtC;AAEK,MAAC,eAAe;AAAA,EACnB,YAAY;AAAA,EACZ,OAAO;AAAA,IACL,OAAO;AAAA,MACX,aAAMA;AAAAA,IACN;AAAA,IACI,QAAQ;AAAA,MACN;AAAA,IACN;AAAA,IACI,YAAY;AAAA;AAAA,MAEhB,WAAMC;AAAAA,MACN,gBAAMC;AAAAA;AAAAA,MAEN,MAAMC;AAAAA,MACN,MAAMC;AAAAA,MACA;AAAA,MACN,WAAMC;AAAAA;AAAAA,MAEN,cAAMC;AAAAA;AAAAA,MAEN,WAAMC;AAAAA,MACN,OAAMC;AAAAA,MACN,YAAMC;AAAAA,IACN;AAAA,EACA;AACA;"}
@@ -0,0 +1,95 @@
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.vue2.js";
3
+ import _sfc_main$2 from "../../../../components/Dropdown/Dropdown.vue.js";
4
+ import _sfc_main$3 from "../../../icons/navigation/IconEllipsis.vue.js";
5
+ const _hoisted_1 = { class: "flex gap-small mn-b-medium" };
6
+ const _hoisted_2 = { class: "dropdown-menu bg-white pd-small radius-medium shadow-big mn-t-thin" };
7
+ const _hoisted_3 = {
8
+ key: 0,
9
+ class: "mn-v-thin border-dark-transp-10"
10
+ };
11
+ const _sfc_main = {
12
+ __name: "ActionButtons",
13
+ props: {
14
+ buttons: {
15
+ type: Array,
16
+ required: true
17
+ }
18
+ },
19
+ setup(__props) {
20
+ const dropdownOpen = ref(false);
21
+ const handleDropdownClick = (action) => {
22
+ if (action) {
23
+ action();
24
+ }
25
+ dropdownOpen.value = false;
26
+ };
27
+ return (_ctx, _cache) => {
28
+ return openBlock(), createElementBlock("div", _hoisted_1, [
29
+ (openBlock(true), createElementBlock(Fragment, null, renderList(__props.buttons, (button, index) => {
30
+ return openBlock(), createElementBlock(Fragment, { key: index }, [
31
+ button.type !== "dropdown" ? (openBlock(), createBlock(_sfc_main$1, {
32
+ key: 0,
33
+ class: normalizeClass(["flex-1 radius-thin flex-center gap-thin", button.class]),
34
+ onClick: button.action
35
+ }, {
36
+ default: withCtx(() => [
37
+ button.icon ? (openBlock(), createBlock(resolveDynamicComponent(button.icon), {
38
+ key: 0,
39
+ fill: button.iconFill,
40
+ class: "i-medium"
41
+ }, null, 8, ["fill"])) : createCommentVNode("", true),
42
+ createTextVNode(" " + toDisplayString(button.text), 1)
43
+ ]),
44
+ _: 2
45
+ }, 1032, ["class", "onClick"])) : (openBlock(), createBlock(_sfc_main$2, {
46
+ key: 1,
47
+ label: { component: _sfc_main$3, class: "bg-light radius-thin pd-thin i-big" },
48
+ modelValue: dropdownOpen.value,
49
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => dropdownOpen.value = $event),
50
+ class: "relative"
51
+ }, {
52
+ trigger: withCtx(() => [
53
+ createVNode(_sfc_main$1, {
54
+ color: "transp",
55
+ size: "medium",
56
+ class: "w-3r h-3r radius-full"
57
+ }, {
58
+ default: withCtx(() => [
59
+ createVNode(_sfc_main$3, { class: "i-medium" })
60
+ ]),
61
+ _: 1
62
+ })
63
+ ]),
64
+ default: withCtx(() => [
65
+ createElementVNode("div", _hoisted_2, [
66
+ (openBlock(true), createElementBlock(Fragment, null, renderList(button.items, (item, idx) => {
67
+ return openBlock(), createElementBlock(Fragment, { key: idx }, [
68
+ item.separator ? (openBlock(), createElementBlock("hr", _hoisted_3)) : (openBlock(), createBlock(_sfc_main$1, {
69
+ key: 1,
70
+ onClick: ($event) => handleDropdownClick(item.action),
71
+ color: item.color || "transp",
72
+ size: "small",
73
+ class: normalizeClass(["w-100 justify-start", item.class])
74
+ }, {
75
+ default: withCtx(() => [
76
+ createTextVNode(toDisplayString(item.text), 1)
77
+ ]),
78
+ _: 2
79
+ }, 1032, ["onClick", "color", "class"]))
80
+ ], 64);
81
+ }), 128))
82
+ ])
83
+ ]),
84
+ _: 2
85
+ }, 1032, ["label", "modelValue"]))
86
+ ], 64);
87
+ }), 128))
88
+ ]);
89
+ };
90
+ }
91
+ };
92
+ export {
93
+ _sfc_main as default
94
+ };
95
+ //# sourceMappingURL=ActionButtons.vue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActionButtons.vue.js","sources":["../../../../../../../src/modules/music/components/blocks/ActionButtons.vue"],"sourcesContent":["<template>\n <div class=\"flex gap-small mn-b-medium\">\n <template v-for=\"(button, index) in buttons\" :key=\"index\">\n <!-- Regular button -->\n <Button\n v-if=\"button.type !== 'dropdown'\"\n :class=\"['flex-1 radius-thin flex-center gap-thin', button.class]\"\n @click=\"button.action\"\n >\n <component\n v-if=\"button.icon\"\n :is=\"button.icon\"\n :fill=\"button.iconFill\"\n class=\"i-medium\"\n />\n {{ button.text }}\n </Button>\n\n <!-- Dropdown button -->\n <Dropdown\n v-else\n :label=\"{component: IconEllipsis, class: 'bg-light radius-thin pd-thin i-big' }\"\n v-model=\"dropdownOpen\"\n class=\"relative\"\n >\n <template #trigger>\n <Button color=\"transp\" size=\"medium\" class=\"w-3r h-3r radius-full\">\n <IconEllipsis class=\"i-medium\" />\n </Button>\n </template>\n <template #default>\n <div class=\"dropdown-menu bg-white pd-small radius-medium shadow-big mn-t-thin\">\n <template v-for=\"(item, idx) in button.items\" :key=\"idx\">\n <hr v-if=\"item.separator\" class=\"mn-v-thin border-dark-transp-10\" />\n <Button\n v-else\n @click=\"handleDropdownClick(item.action)\"\n :color=\"item.color || 'transp'\"\n size=\"small\"\n class=\"w-100 justify-start\"\n :class=\"item.class\"\n >\n {{ item.text }}\n </Button>\n </template>\n </div>\n </template>\n </Dropdown>\n </template>\n </div>\n</template>\n\n<script setup>\nimport { ref } from 'vue';\nimport Button from '@martyrs/src/components/Button/Button.vue';\nimport Dropdown from '@martyrs/src/components/Dropdown/Dropdown.vue';\nimport IconEllipsis from '@martyrs/src/modules/icons/navigation/IconEllipsis.vue';\n\nconst props = defineProps({\n buttons: {\n type: Array,\n required: true\n }\n});\n\nconst dropdownOpen = ref(false);\n\nconst handleDropdownClick = (action) => {\n if (action) {\n action();\n }\n dropdownOpen.value = false;\n};\n</script>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAiEA,UAAM,eAAe,IAAI,KAAK;AAE9B,UAAM,sBAAsB,CAAC,WAAW;AACtC,UAAI,QAAQ;AACV,eAAM;AAAA,MACR;AACA,mBAAa,QAAQ;AAAA,IACvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -12,7 +12,10 @@ const _hoisted_2 = {
12
12
  class: "album-overlay pos-absolute pos-t-0 pos-l-0 w-100 h-100 flex-center flex transition-cubic-in-out"
13
13
  };
14
14
  const _hoisted_3 = { class: "album-info pd-medium bg-light" };
15
- const _hoisted_4 = { class: "mn-b-thin t-medium t-truncate" };
15
+ const _hoisted_4 = {
16
+ class: "mn-b-thin t-medium t-truncate",
17
+ style: { "height": "1.50rem" }
18
+ };
16
19
  const _hoisted_5 = { class: "t-transp t-small t-truncate" };
17
20
  const _sfc_main = {
18
21
  __name: "AlbumCard",
@@ -87,7 +90,7 @@ const _sfc_main = {
87
90
  };
88
91
  }
89
92
  };
90
- const AlbumCard = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-faf7f060"]]);
93
+ const AlbumCard = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-7bd0bb4d"]]);
91
94
  export {
92
95
  AlbumCard as default
93
96
  };
@@ -1 +1 @@
1
- {"version":3,"file":"AlbumCard.vue.js","sources":["../../../../../../../src/modules/music/components/cards/AlbumCard.vue"],"sourcesContent":["<!-- components/cards/AlbumCard.vue -->\n<template>\n <router-link \n :to=\"{ name: 'album', params: { url: album.url } }\" \n class=\"album-card d-block radius-medium o-hidden\"\n >\n <div class=\"album-cover pos-relative\">\n <Media \n :url=\"album.coverArt || album.coverUrl || '/logo/logo-placeholder.jpg'\" \n class=\"w-100 aspect-1x1 object-fit-cover\"\n />\n <div v-if=\"album.totalTracks && album.totalTracks > 0\" class=\"album-overlay pos-absolute pos-t-0 pos-l-0 w-100 h-100 flex-center flex transition-cubic-in-out\">\n <Button \n @click.stop.prevent=\"playAlbum(album)\" \n class=\"play-button i-big bg-main radius-round flex-center flex aspect-1x1\"\n :showLoader=\"false\"\n :showSucces=\"false\"\n >\n <IconPlay class=\"i-small\" fill=\"rgb(var(--white))\" />\n </Button>\n </div>\n </div>\n <div class=\"album-info pd-medium bg-light\">\n <h3 class=\"mn-b-thin t-medium t-truncate\">{{ album.title }}</h3>\n <p class=\"t-transp t-small t-truncate\">{{ albumInfo }}</p>\n </div>\n </router-link>\n</template>\n\n<script setup>\nimport { computed } from 'vue';\nimport Media from '@martyrs/src/components/Media/Media.vue';\nimport Button from '@martyrs/src/components/Button/Button.vue';\nimport IconPlay from '@martyrs/src/modules/icons/navigation/IconPlay.vue';\n\n// Import player store & albums store\nimport { actions as playerActions } from '../../store/player.js';\nimport { state as albumsState, actions as albumsActions } from '../../store/albums.js';\n\nconst props = defineProps({\n album: {\n type: Object,\n required: true\n }\n});\n\n// Computed properties\nconst albumInfo = computed(() => {\n const releaseYear = props.album.releaseDate ? new Date(props.album.releaseDate).getFullYear() : '';\n let artistName = 'Unknown Artist';\n \n // Handle artists array (model uses 'artists' not 'artist')\n if (props.album.artists && props.album.artists.length > 0) {\n // If populated, artists[0] will have name property\n if (props.album.artists[0]?.name) {\n artistName = props.album.artists.map(artist => artist.name).join(', ');\n } else if (typeof props.album.artists[0] === 'string') {\n // If not populated, it might be just IDs\n artistName = 'Various Artists';\n }\n } else if (props.album.artist?.name) {\n // Fallback for old data structure\n artistName = props.album.artist.name;\n }\n \n return releaseYear ? `${artistName} • ${releaseYear}` : artistName;\n});\n\n// Methods\nconst playAlbum = async (album) => {\n // If album tracks are already loaded in state, use those\n if (albumsState.currentAlbum && albumsState.currentAlbum._id === album._id && albumsState.currentAlbumTracks.length > 0) {\n playerActions.setQueue(albumsState.currentAlbumTracks);\n return;\n }\n \n // Otherwise fetch tracks for this album\n const tracks = await albumsActions.fetchAlbumTracks(album._id);\n \n if (tracks && tracks.length > 0) {\n playerActions.setQueue(tracks);\n }\n};\n</script>\n\n<style scoped>\n.album-card {\n transition: transform 0.3s ease;\n}\n\n.album-card:hover {\n transform: translateY(-5px);\n}\n\n.album-overlay {\n background: rgba(0, 0, 0, 0.5);\n opacity: 0;\n transition: opacity 0.3s ease;\n}\n\n.album-card:hover .album-overlay {\n opacity: 1;\n}\n\n.play-button {\n transform: scale(0.8);\n transition: transform 0.3s ease;\n}\n\n.album-card:hover .play-button {\n transform: scale(1);\n}\n</style>"],"names":["albumsState","playerActions","albumsActions"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAuCA,UAAM,QAAQ;AAQd,UAAM,YAAY,SAAS,MAAM;AAC/B,YAAM,cAAc,MAAM,MAAM,cAAc,IAAI,KAAK,MAAM,MAAM,WAAW,EAAE,YAAW,IAAK;AAChG,UAAI,aAAa;AAGjB,UAAI,MAAM,MAAM,WAAW,MAAM,MAAM,QAAQ,SAAS,GAAG;AAEzD,YAAI,MAAM,MAAM,QAAQ,CAAC,GAAG,MAAM;AAChC,uBAAa,MAAM,MAAM,QAAQ,IAAI,YAAU,OAAO,IAAI,EAAE,KAAK,IAAI;AAAA,QACvE,WAAW,OAAO,MAAM,MAAM,QAAQ,CAAC,MAAM,UAAU;AAErD,uBAAa;AAAA,QACf;AAAA,MACF,WAAW,MAAM,MAAM,QAAQ,MAAM;AAEnC,qBAAa,MAAM,MAAM,OAAO;AAAA,MAClC;AAEA,aAAO,cAAc,GAAG,UAAU,MAAM,WAAW,KAAK;AAAA,IAC1D,CAAC;AAGD,UAAM,YAAY,OAAO,UAAU;AAEjC,UAAIA,MAAY,gBAAgBA,MAAY,aAAa,QAAQ,MAAM,OAAOA,MAAY,mBAAmB,SAAS,GAAG;AACvHC,gBAAc,SAASD,MAAY,kBAAkB;AACrD;AAAA,MACF;AAGA,YAAM,SAAS,MAAME,UAAc,iBAAiB,MAAM,GAAG;AAE7D,UAAI,UAAU,OAAO,SAAS,GAAG;AAC/BD,gBAAc,SAAS,MAAM;AAAA,MAC/B;AAAA,IACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"AlbumCard.vue.js","sources":["../../../../../../../src/modules/music/components/cards/AlbumCard.vue"],"sourcesContent":["<!-- components/cards/AlbumCard.vue -->\n<template>\n <router-link \n :to=\"{ name: 'album', params: { url: album.url } }\" \n class=\"album-card d-block radius-medium o-hidden\"\n >\n <div class=\"album-cover pos-relative\">\n <Media \n :url=\"album.coverArt || album.coverUrl || '/logo/logo-placeholder.jpg'\" \n class=\"w-100 aspect-1x1 object-fit-cover\"\n />\n <div v-if=\"album.totalTracks && album.totalTracks > 0\" class=\"album-overlay pos-absolute pos-t-0 pos-l-0 w-100 h-100 flex-center flex transition-cubic-in-out\">\n <Button \n @click.stop.prevent=\"playAlbum(album)\" \n class=\"play-button i-big bg-main radius-round flex-center flex aspect-1x1\"\n :showLoader=\"false\"\n :showSucces=\"false\"\n >\n <IconPlay class=\"i-small\" fill=\"rgb(var(--white))\" />\n </Button>\n </div>\n </div>\n <div class=\"album-info pd-medium bg-light\">\n <h3 class=\"mn-b-thin t-medium t-truncate\" style=\"height: 1.50rem\">{{ album.title }}</h3>\n <p class=\"t-transp t-small t-truncate\">{{ albumInfo }}</p>\n </div>\n </router-link>\n</template>\n\n<script setup>\nimport { computed } from 'vue';\nimport Media from '@martyrs/src/components/Media/Media.vue';\nimport Button from '@martyrs/src/components/Button/Button.vue';\nimport IconPlay from '@martyrs/src/modules/icons/navigation/IconPlay.vue';\n\n// Import player store & albums store\nimport { actions as playerActions } from '../../store/player.js';\nimport { state as albumsState, actions as albumsActions } from '../../store/albums.js';\n\nconst props = defineProps({\n album: {\n type: Object,\n required: true\n }\n});\n\n// Computed properties\nconst albumInfo = computed(() => {\n const releaseYear = props.album.releaseDate ? new Date(props.album.releaseDate).getFullYear() : '';\n let artistName = 'Unknown Artist';\n \n // Handle artists array (model uses 'artists' not 'artist')\n if (props.album.artists && props.album.artists.length > 0) {\n // If populated, artists[0] will have name property\n if (props.album.artists[0]?.name) {\n artistName = props.album.artists.map(artist => artist.name).join(', ');\n } else if (typeof props.album.artists[0] === 'string') {\n // If not populated, it might be just IDs\n artistName = 'Various Artists';\n }\n } else if (props.album.artist?.name) {\n // Fallback for old data structure\n artistName = props.album.artist.name;\n }\n \n return releaseYear ? `${artistName} • ${releaseYear}` : artistName;\n});\n\n// Methods\nconst playAlbum = async (album) => {\n // If album tracks are already loaded in state, use those\n if (albumsState.currentAlbum && albumsState.currentAlbum._id === album._id && albumsState.currentAlbumTracks.length > 0) {\n playerActions.setQueue(albumsState.currentAlbumTracks);\n return;\n }\n \n // Otherwise fetch tracks for this album\n const tracks = await albumsActions.fetchAlbumTracks(album._id);\n \n if (tracks && tracks.length > 0) {\n playerActions.setQueue(tracks);\n }\n};\n</script>\n\n<style scoped>\n.album-card {\n transition: transform 0.3s ease;\n}\n\n.album-card:hover {\n transform: translateY(-5px);\n}\n\n.album-overlay {\n background: rgba(0, 0, 0, 0.5);\n opacity: 0;\n transition: opacity 0.3s ease;\n}\n\n.album-card:hover .album-overlay {\n opacity: 1;\n}\n\n.play-button {\n transform: scale(0.8);\n transition: transform 0.3s ease;\n}\n\n.album-card:hover .play-button {\n transform: scale(1);\n}\n</style>"],"names":["albumsState","playerActions","albumsActions"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCA,UAAM,QAAQ;AAQd,UAAM,YAAY,SAAS,MAAM;AAC/B,YAAM,cAAc,MAAM,MAAM,cAAc,IAAI,KAAK,MAAM,MAAM,WAAW,EAAE,YAAW,IAAK;AAChG,UAAI,aAAa;AAGjB,UAAI,MAAM,MAAM,WAAW,MAAM,MAAM,QAAQ,SAAS,GAAG;AAEzD,YAAI,MAAM,MAAM,QAAQ,CAAC,GAAG,MAAM;AAChC,uBAAa,MAAM,MAAM,QAAQ,IAAI,YAAU,OAAO,IAAI,EAAE,KAAK,IAAI;AAAA,QACvE,WAAW,OAAO,MAAM,MAAM,QAAQ,CAAC,MAAM,UAAU;AAErD,uBAAa;AAAA,QACf;AAAA,MACF,WAAW,MAAM,MAAM,QAAQ,MAAM;AAEnC,qBAAa,MAAM,MAAM,OAAO;AAAA,MAClC;AAEA,aAAO,cAAc,GAAG,UAAU,MAAM,WAAW,KAAK;AAAA,IAC1D,CAAC;AAGD,UAAM,YAAY,OAAO,UAAU;AAEjC,UAAIA,MAAY,gBAAgBA,MAAY,aAAa,QAAQ,MAAM,OAAOA,MAAY,mBAAmB,SAAS,GAAG;AACvHC,gBAAc,SAASD,MAAY,kBAAkB;AACrD;AAAA,MACF;AAGA,YAAM,SAAS,MAAME,UAAc,iBAAiB,MAAM,GAAG;AAE7D,UAAI,UAAU,OAAO,SAAS,GAAG;AAC/BD,gBAAc,SAAS,MAAM;AAAA,MAC/B;AAAA,IACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,10 +1,10 @@
1
- import { resolveComponent, createElementBlock, openBlock, createVNode, createBlock, createCommentVNode, withCtx, createElementVNode, toDisplayString, createTextVNode } from "vue";
1
+ import { resolveComponent, createBlock, openBlock, withCtx, createElementVNode, createCommentVNode, createElementBlock, toDisplayString, createTextVNode } from "vue";
2
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 */
6
6
  import _export_sfc from "../../../../../../_virtual/_plugin-vue_export-helper.js";
7
- const _hoisted_1 = { class: "artist-card bg-light pd-medium radius-medium flex flex-center gap-big" };
7
+ const _hoisted_1 = { class: "flex flex-nowrap flex-v-center gap-thin" };
8
8
  const _hoisted_2 = { class: "artist-avatar" };
9
9
  const _hoisted_3 = {
10
10
  key: 1,
@@ -45,12 +45,12 @@ const _sfc_main = {
45
45
  };
46
46
  return (_ctx, _cache) => {
47
47
  const _component_router_link = resolveComponent("router-link");
48
- return openBlock(), createElementBlock("div", _hoisted_1, [
49
- createVNode(_component_router_link, {
50
- to: __props.artist.url ? { name: "artist", params: { url: __props.artist.url } } : __props.artist.to,
51
- class: "flex flex-v-center gap-thin flex-1 hover-opacity"
52
- }, {
53
- default: withCtx(() => [
48
+ return openBlock(), createBlock(_component_router_link, {
49
+ to: __props.artist.url ? { name: "artist", params: { url: __props.artist.url } } : __props.artist.to,
50
+ class: "artist-card bg-light pd-medium radius-medium flex flex-v-center flex-justify-between gap-thin flex-1 hover-opacity"
51
+ }, {
52
+ default: withCtx(() => [
53
+ createElementVNode("div", _hoisted_1, [
54
54
  createElementVNode("div", _hoisted_2, [
55
55
  __props.artist.photoUrl ? (openBlock(), createBlock(Media, {
56
56
  key: 0,
@@ -70,25 +70,25 @@ const _sfc_main = {
70
70
  createElementVNode("span", _hoisted_6, toDisplayString(__props.artistType), 1)
71
71
  ])
72
72
  ]),
73
- _: 1
74
- }, 8, ["to"]),
75
- __props.showFollowButton ? (openBlock(), createBlock(_sfc_main$2, {
76
- key: 0,
77
- onClick: handleFollowClick,
78
- color: __props.isFollowing ? "primary" : "transp",
79
- size: "small",
80
- class: "bg-main"
81
- }, {
82
- default: withCtx(() => [
83
- createTextVNode(toDisplayString(__props.isFollowing ? "Following" : "Follow"), 1)
84
- ]),
85
- _: 1
86
- }, 8, ["color"])) : createCommentVNode("", true)
87
- ]);
73
+ __props.showFollowButton ? (openBlock(), createBlock(_sfc_main$2, {
74
+ key: 0,
75
+ onClick: handleFollowClick,
76
+ color: __props.isFollowing ? "primary" : "transp",
77
+ size: "small",
78
+ class: "bg-main"
79
+ }, {
80
+ default: withCtx(() => [
81
+ createTextVNode(toDisplayString(__props.isFollowing ? "Following" : "Follow"), 1)
82
+ ]),
83
+ _: 1
84
+ }, 8, ["color"])) : createCommentVNode("", true)
85
+ ]),
86
+ _: 1
87
+ }, 8, ["to"]);
88
88
  };
89
89
  }
90
90
  };
91
- const ArtistCardSmall = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-7fd022f7"]]);
91
+ const ArtistCardSmall = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-64fdf510"]]);
92
92
  export {
93
93
  ArtistCardSmall as default
94
94
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ArtistCardSmall.vue.js","sources":["../../../../../../../src/modules/music/components/cards/ArtistCardSmall.vue"],"sourcesContent":["<!-- components/cards/ArtistCard.vue -->\n<template>\n <div class=\"artist-card bg-light pd-medium radius-medium flex flex-center gap-big\">\n <router-link \n :to=\"artist.url ? { name: 'artist', params: { url: artist.url } } : artist.to\"\n class=\"flex flex-v-center gap-thin flex-1 hover-opacity\"\n >\n <div class=\"artist-avatar\">\n <Media \n v-if=\"artist.photoUrl\"\n :url=\"artist.photoUrl\"\n :alt=\"artist.name\"\n class=\"w-4r h-4r radius-full object-fit-cover\"\n />\n <div v-else class=\"w-4r h-4r flex flex center radius-extra radius-full bg-main flex-center\">\n {{ artist.name.charAt(0) }}\n </div>\n </div>\n\n <div>\n <div class=\"flex items-center gap-thin\">\n <span class=\"mn-b-thin\">{{ artist.name }}</span>\n <IconVerified v-if=\"artist.isVerified\" class=\"w-1r h-1r t-primary\" />\n </div>\n <span class=\"t-small t-transp\">{{ artistType }}</span>\n </div>\n </router-link>\n\n <Button \n v-if=\"showFollowButton\"\n @click=\"handleFollowClick\"\n :color=\"isFollowing ? 'primary' : 'transp'\"\n size=\"small\"\n class=\"bg-main\"\n >\n {{ isFollowing ? 'Following' : 'Follow' }}\n </Button>\n </div>\n</template>\n\n<script setup>\nimport { computed } from 'vue';\nimport Button from '@martyrs/src/components/Button/Button.vue';\nimport Media from '@martyrs/src/components/Media/Media.vue';\nimport IconVerified from '@martyrs/src/modules/icons/navigation/IconCheckmark.vue';\n\nconst props = defineProps({\n artist: {\n type: Object,\n required: true,\n validator: (value) => {\n return value._id && value.name && value.url;\n }\n },\n isFollowing: {\n type: Boolean,\n default: false\n },\n showFollowButton: {\n type: Boolean,\n default: true\n },\n artistType: {\n type: String,\n default: 'Artist'\n }\n});\n\nconst emit = defineEmits(['toggle-follow']);\n\nconst handleFollowClick = () => {\n emit('toggle-follow', props.artist._id);\n};\n</script>\n\n<style scoped>\n.artist-card {\n transition: all 0.2s ease;\n}\n\n.artist-card:hover {\n transform: translateY(-5px);\n}\n\n.artist-avatar img {\n transition: transform 0.2s ease;\n}\n\n.artist-card:hover .artist-avatar img {\n transform: scale(1.05);\n}\n</style>"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CA,UAAM,QAAQ;AAsBd,UAAM,OAAO;AAEb,UAAM,oBAAoB,MAAM;AAC9B,WAAK,iBAAiB,MAAM,OAAO,GAAG;AAAA,IACxC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"ArtistCardSmall.vue.js","sources":["../../../../../../../src/modules/music/components/cards/ArtistCardSmall.vue"],"sourcesContent":["<!-- components/cards/ArtistCard.vue -->\n<template>\n <router-link\n :to=\"artist.url ? { name: 'artist', params: { url: artist.url } } : artist.to\"\n class=\"artist-card bg-light pd-medium radius-medium flex flex-v-center flex-justify-between gap-thin flex-1 hover-opacity\"\n >\n <div\n class=\"flex flex-nowrap flex-v-center gap-thin\"\n >\n <div class=\"artist-avatar\">\n <Media \n v-if=\"artist.photoUrl\"\n :url=\"artist.photoUrl\"\n :alt=\"artist.name\"\n class=\"w-4r h-4r radius-full object-fit-cover\"\n />\n <div v-else class=\"w-4r h-4r flex flex center radius-extra radius-full bg-main flex-center\">\n {{ artist.name.charAt(0) }}\n </div>\n </div>\n\n <div>\n <div class=\"flex items-center gap-thin\">\n <span class=\"mn-b-thin\">{{ artist.name }}</span>\n <IconVerified v-if=\"artist.isVerified\" class=\"w-1r h-1r t-primary\" />\n </div>\n <span class=\"t-small t-transp\">{{ artistType }}</span>\n </div>\n </div>\n\n <Button \n v-if=\"showFollowButton\"\n @click=\"handleFollowClick\"\n :color=\"isFollowing ? 'primary' : 'transp'\"\n size=\"small\"\n class=\"bg-main\"\n >\n {{ isFollowing ? 'Following' : 'Follow' }}\n </Button>\n </router-link>\n</template>\n\n<script setup>\nimport { computed } from 'vue';\nimport Button from '@martyrs/src/components/Button/Button.vue';\nimport Media from '@martyrs/src/components/Media/Media.vue';\nimport IconVerified from '@martyrs/src/modules/icons/navigation/IconCheckmark.vue';\n\nconst props = defineProps({\n artist: {\n type: Object,\n required: true,\n validator: (value) => {\n return value._id && value.name && value.url;\n }\n },\n isFollowing: {\n type: Boolean,\n default: false\n },\n showFollowButton: {\n type: Boolean,\n default: true\n },\n artistType: {\n type: String,\n default: 'Artist'\n }\n});\n\nconst emit = defineEmits(['toggle-follow']);\n\nconst handleFollowClick = () => {\n emit('toggle-follow', props.artist._id);\n};\n</script>\n\n<style scoped>\n.artist-card {\n transition: all 0.2s ease;\n}\n\n.artist-card:hover {\n transform: translateY(-5px);\n}\n\n.artist-avatar img {\n transition: transform 0.2s ease;\n}\n\n.artist-card:hover .artist-avatar img {\n transform: scale(1.05);\n}\n</style>"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgDA,UAAM,QAAQ;AAsBd,UAAM,OAAO;AAEb,UAAM,oBAAoB,MAAM;AAC9B,WAAK,iBAAiB,MAAM,OAAO,GAAG;AAAA,IACxC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -124,7 +124,7 @@ const _sfc_main = {
124
124
  }, [
125
125
  __props.track.url ? (openBlock(), createBlock(_component_router_link, {
126
126
  key: 0,
127
- to: { name: "track", params: { url: __props.track.url } },
127
+ to: "/music/tracks/" + __props.track.url,
128
128
  class: normalizeClass(["hover-t-main hover-t-underline", { "t-main": isPlaying(__props.track) }]),
129
129
  onClick: _cache[4] || (_cache[4] = withModifiers(() => {
130
130
  }, ["stop"]))
@@ -140,7 +140,7 @@ const _sfc_main = {
140
140
  }, [
141
141
  __props.track.artist && __props.track.artist._id ? (openBlock(), createBlock(_component_router_link, {
142
142
  key: 0,
143
- to: { name: "artist", params: { url: __props.track.artist.url } },
143
+ to: "/music/artists/" + __props.track.artist.url,
144
144
  class: "t-transp hover-t-underline",
145
145
  onClick: _cache[5] || (_cache[5] = withModifiers(() => {
146
146
  }, ["stop"]))
@@ -156,7 +156,7 @@ const _sfc_main = {
156
156
  __props.showAlbum ? (openBlock(), createElementBlock("div", _hoisted_8, [
157
157
  __props.track.album && __props.track.album._id ? (openBlock(), createBlock(_component_router_link, {
158
158
  key: 0,
159
- to: { name: "album", params: { url: __props.track.album.url } },
159
+ to: "/music/albums/" + __props.track.album.url,
160
160
  class: "t-transp hover-t-underline",
161
161
  onClick: _cache[6] || (_cache[6] = withModifiers(() => {
162
162
  }, ["stop"]))
@@ -1 +1 @@
1
- {"version":3,"file":"TrackListCard.vue.js","sources":["../../../../../../../src/modules/music/components/cards/TrackListCard.vue"],"sourcesContent":["<!-- components/cards/TrackListCard.vue -->\n<template>\n <div \n class=\"track-item pd-small hover-bg-white-transp-25 flex-v-center flex cursor-pointer\"\n :class=\"{'bg-main-transp-10': isPlaying(track)}\"\n @click=\"playTrack(track)\"\n @dblclick=\"playTrack(track, true)\"\n @mouseenter=\"hoveredIndex = props.index\"\n @mouseleave=\"hoveredIndex = -1\"\n >\n <div class=\"track-number w-3r t-center pos-relative\">\n <span v-if=\"!isPlaying(track) && hoveredIndex !== props.index\" class=\"t-transp\">{{ props.index + 1 }}</span>\n <Button \n v-else-if=\"!isPlaying(track) && hoveredIndex === props.index\"\n @click.stop=\"playTrack(track)\"\n class=\"bg-main pd-thin\"\n :showLoader=\"false\"\n :showSucces=\"false\"\n >\n <IconPlay @click.stop=\"playTrack(track)\" class=\"i-small\" fill=\"rgb(var(--white))\"/>\n </Button>\n <Button \n v-else\n @click.stop=\"pauseTrack()\"\n class=\"bg-main pd-thin\"\n :showLoader=\"false\"\n :showSucces=\"false\"\n >\n <IconPause @click.stop=\"pauseTrack()\" class=\"i-small\" fill=\"rgb(var(--white))\"/>\n </Button>\n </div>\n \n <div class=\"track-title flex-child-1 flex flex-v-center\">\n <div v-if=\"showCover\" class=\"track-cover mn-r-small\">\n <Media \n :url=\"track.coverUrl || (track.album && track.album.coverUrl) || '/logo/logo-placeholder.jpg'\" \n class=\"w-3r h-3r object-fit-cover o-hidden radius-small\"\n />\n </div>\n \n <div class=\"track-info\">\n <div class=\"track-name \" :class=\"{'t-main': isPlaying(track)}\">\n <router-link \n v-if=\"track.url\"\n :to=\"{ name: 'track', params: { url: track.url } }\"\n class=\"hover-t-main hover-t-underline\"\n :class=\"{'t-main': isPlaying(track)}\"\n @click.stop\n >\n {{ track.title }}\n </router-link>\n <span v-else>{{ track.title }}</span>\n </div>\n <div :class=\"{'t-main': isPlaying(track)}\" class=\"track-artist t-transp t-small\">\n <router-link \n v-if=\"track.artist && track.artist._id\"\n :to=\"{ name: 'artist', params: { url: track.artist.url } }\"\n class=\"t-transp hover-t-underline\"\n @click.stop\n >\n {{ getArtistName(track) }}\n </router-link>\n <span v-else>{{ getArtistName(track) }}</span>\n </div>\n </div>\n </div>\n \n <div v-if=\"showAlbum\" class=\"track-album w-15r mobile:w-0 mobile:hidden t-transp t-truncate\">\n <router-link \n v-if=\"track.album && track.album._id\"\n :to=\"{ name: 'album', params: { url: track.album.url } }\"\n class=\"t-transp hover-t-underline\"\n @click.stop\n >\n {{ track.album.title }}\n </router-link>\n <span v-else>{{ track.album?.title || 'Single' }}</span>\n </div>\n \n <div class=\"track-duration w-5r t-right t-transp\">{{ formatDuration(track.duration) }}</div>\n </div>\n</template>\n\n<script setup>\nimport { ref } from 'vue';\nimport Button from '@martyrs/src/components/Button/Button.vue';\nimport Media from '@martyrs/src/components/Media/Media.vue';\nimport IconPlay from '@martyrs/src/modules/icons/navigation/IconPlay.vue';\nimport IconPause from '@martyrs/src/modules/icons/navigation/IconPause.vue';\n\n// Import player store\nimport { state as playerState, actions as playerActions } from '../../store/player.js';\n\n// Props\nconst props = defineProps({\n track: {\n type: Object,\n required: true\n },\n index: {\n type: Number,\n default: 0\n },\n showCover: {\n type: Boolean,\n default: true\n },\n showAlbum: {\n type: Boolean,\n default: true\n }\n});\n\n// State\nconst hoveredIndex = ref(-1);\n\n// Methods\nconst isPlaying = (track) => {\n return playerState.currentTrack && playerState.currentTrack._id === track._id && playerState.isPlaying;\n};\n\nconst playTrack = (track, force = false) => {\n if (isPlaying(track) && !force) {\n playerActions.togglePlay();\n } else {\n playerActions.playTrack(track);\n }\n};\n\nconst pauseTrack = () => {\n playerActions.togglePlay();\n};\n\nconst getArtistName = (track) => {\n if (!track || !track.artist) return 'Unknown Artist';\n return typeof track.artist === 'object' ? track.artist.name : 'Unknown Artist';\n};\n\nconst formatDuration = (duration) => {\n if (!duration) return '--:--';\n \n const minutes = Math.floor(duration / 60);\n const seconds = Math.floor(duration % 60);\n return `${minutes}:${seconds.toString().padStart(2, '0')}`;\n};\n</script>"],"names":["playerState","playerActions"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8FA,UAAM,QAAQ;AAoBd,UAAM,eAAe,IAAI,EAAE;AAG3B,UAAM,YAAY,CAAC,UAAU;AAC3B,aAAOA,MAAY,gBAAgBA,MAAY,aAAa,QAAQ,MAAM,OAAOA,MAAY;AAAA,IAC/F;AAEA,UAAM,YAAY,CAAC,OAAO,QAAQ,UAAU;AAC1C,UAAI,UAAU,KAAK,KAAK,CAAC,OAAO;AAC9BC,gBAAc,WAAU;AAAA,MAC1B,OAAO;AACLA,gBAAc,UAAU,KAAK;AAAA,MAC/B;AAAA,IACF;AAEA,UAAM,aAAa,MAAM;AACvBA,cAAc,WAAU;AAAA,IAC1B;AAEA,UAAM,gBAAgB,CAAC,UAAU;AAC/B,UAAI,CAAC,SAAS,CAAC,MAAM,OAAQ,QAAO;AACpC,aAAO,OAAO,MAAM,WAAW,WAAW,MAAM,OAAO,OAAO;AAAA,IAChE;AAEA,UAAM,iBAAiB,CAAC,aAAa;AACnC,UAAI,CAAC,SAAU,QAAO;AAEtB,YAAM,UAAU,KAAK,MAAM,WAAW,EAAE;AACxC,YAAM,UAAU,KAAK,MAAM,WAAW,EAAE;AACxC,aAAO,GAAG,OAAO,IAAI,QAAQ,SAAQ,EAAG,SAAS,GAAG,GAAG,CAAC;AAAA,IAC1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"TrackListCard.vue.js","sources":["../../../../../../../src/modules/music/components/cards/TrackListCard.vue"],"sourcesContent":["<!-- components/cards/TrackListCard.vue -->\n<template>\n <div \n class=\"track-item pd-small hover-bg-white-transp-25 flex-v-center flex cursor-pointer\"\n :class=\"{'bg-main-transp-10': isPlaying(track)}\"\n @click=\"playTrack(track)\"\n @dblclick=\"playTrack(track, true)\"\n @mouseenter=\"hoveredIndex = props.index\"\n @mouseleave=\"hoveredIndex = -1\"\n >\n <div class=\"track-number w-3r t-center pos-relative\">\n <span v-if=\"!isPlaying(track) && hoveredIndex !== props.index\" class=\"t-transp\">{{ props.index + 1 }}</span>\n <Button \n v-else-if=\"!isPlaying(track) && hoveredIndex === props.index\"\n @click.stop=\"playTrack(track)\"\n class=\"bg-main pd-thin\"\n :showLoader=\"false\"\n :showSucces=\"false\"\n >\n <IconPlay @click.stop=\"playTrack(track)\" class=\"i-small\" fill=\"rgb(var(--white))\"/>\n </Button>\n <Button \n v-else\n @click.stop=\"pauseTrack()\"\n class=\"bg-main pd-thin\"\n :showLoader=\"false\"\n :showSucces=\"false\"\n >\n <IconPause @click.stop=\"pauseTrack()\" class=\"i-small\" fill=\"rgb(var(--white))\"/>\n </Button>\n </div>\n \n <div class=\"track-title flex-child-1 flex flex-v-center\">\n <div v-if=\"showCover\" class=\"track-cover mn-r-small\">\n <Media \n :url=\"track.coverUrl || (track.album && track.album.coverUrl) || '/logo/logo-placeholder.jpg'\" \n class=\"w-3r h-3r object-fit-cover o-hidden radius-small\"\n />\n </div>\n \n <div class=\"track-info\">\n <div class=\"track-name \" :class=\"{'t-main': isPlaying(track)}\">\n <router-link\n v-if=\"track.url\"\n :to=\"'/music/tracks/' + track.url\"\n class=\"hover-t-main hover-t-underline\"\n :class=\"{'t-main': isPlaying(track)}\"\n @click.stop\n >\n {{ track.title }}\n </router-link>\n <span v-else>{{ track.title }}</span>\n </div>\n <div :class=\"{'t-main': isPlaying(track)}\" class=\"track-artist t-transp t-small\">\n <router-link\n v-if=\"track.artist && track.artist._id\"\n :to=\"'/music/artists/' + track.artist.url\"\n class=\"t-transp hover-t-underline\"\n @click.stop\n >\n {{ getArtistName(track) }}\n </router-link>\n <span v-else>{{ getArtistName(track) }}</span>\n </div>\n </div>\n </div>\n \n <div v-if=\"showAlbum\" class=\"track-album w-15r mobile:w-0 mobile:hidden t-transp t-truncate\">\n <router-link\n v-if=\"track.album && track.album._id\"\n :to=\"'/music/albums/' + track.album.url\"\n class=\"t-transp hover-t-underline\"\n @click.stop\n >\n {{ track.album.title }}\n </router-link>\n <span v-else>{{ track.album?.title || 'Single' }}</span>\n </div>\n \n <div class=\"track-duration w-5r t-right t-transp\">{{ formatDuration(track.duration) }}</div>\n </div>\n</template>\n\n<script setup>\nimport { ref } from 'vue';\nimport Button from '@martyrs/src/components/Button/Button.vue';\nimport Media from '@martyrs/src/components/Media/Media.vue';\nimport IconPlay from '@martyrs/src/modules/icons/navigation/IconPlay.vue';\nimport IconPause from '@martyrs/src/modules/icons/navigation/IconPause.vue';\n\n// Import player store\nimport { state as playerState, actions as playerActions } from '../../store/player.js';\n\n// Props\nconst props = defineProps({\n track: {\n type: Object,\n required: true\n },\n index: {\n type: Number,\n default: 0\n },\n showCover: {\n type: Boolean,\n default: true\n },\n showAlbum: {\n type: Boolean,\n default: true\n }\n});\n\n// State\nconst hoveredIndex = ref(-1);\n\n// Methods\nconst isPlaying = (track) => {\n return playerState.currentTrack && playerState.currentTrack._id === track._id && playerState.isPlaying;\n};\n\nconst playTrack = (track, force = false) => {\n if (isPlaying(track) && !force) {\n playerActions.togglePlay();\n } else {\n playerActions.playTrack(track);\n }\n};\n\nconst pauseTrack = () => {\n playerActions.togglePlay();\n};\n\nconst getArtistName = (track) => {\n if (!track || !track.artist) return 'Unknown Artist';\n return typeof track.artist === 'object' ? track.artist.name : 'Unknown Artist';\n};\n\nconst formatDuration = (duration) => {\n if (!duration) return '--:--';\n \n const minutes = Math.floor(duration / 60);\n const seconds = Math.floor(duration % 60);\n return `${minutes}:${seconds.toString().padStart(2, '0')}`;\n};\n</script>"],"names":["playerState","playerActions"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8FA,UAAM,QAAQ;AAoBd,UAAM,eAAe,IAAI,EAAE;AAG3B,UAAM,YAAY,CAAC,UAAU;AAC3B,aAAOA,MAAY,gBAAgBA,MAAY,aAAa,QAAQ,MAAM,OAAOA,MAAY;AAAA,IAC/F;AAEA,UAAM,YAAY,CAAC,OAAO,QAAQ,UAAU;AAC1C,UAAI,UAAU,KAAK,KAAK,CAAC,OAAO;AAC9BC,gBAAc,WAAU;AAAA,MAC1B,OAAO;AACLA,gBAAc,UAAU,KAAK;AAAA,MAC/B;AAAA,IACF;AAEA,UAAM,aAAa,MAAM;AACvBA,cAAc,WAAU;AAAA,IAC1B;AAEA,UAAM,gBAAgB,CAAC,UAAU;AAC/B,UAAI,CAAC,SAAS,CAAC,MAAM,OAAQ,QAAO;AACpC,aAAO,OAAO,MAAM,WAAW,WAAW,MAAM,OAAO,OAAO;AAAA,IAChE;AAEA,UAAM,iBAAiB,CAAC,aAAa;AACnC,UAAI,CAAC,SAAU,QAAO;AAEtB,YAAM,UAAU,KAAK,MAAM,WAAW,EAAE;AACxC,YAAM,UAAU,KAAK,MAAM,WAAW,EAAE;AACxC,aAAO,GAAG,OAAO,IAAI,QAAQ,SAAQ,EAAG,SAAS,GAAG,GAAG,CAAC;AAAA,IAC1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,17 +1,42 @@
1
- import { computed, createBlock, createCommentVNode, openBlock } from "vue";
1
+ import { computed, watch, createElementBlock, openBlock, createBlock, createCommentVNode, unref, withCtx, createVNode } from "vue";
2
+ import { useRoute } from "vue-router";
2
3
  import MusicPlayer from "../player/MusicPlayer.vue.js";
3
- import { state } from "../../store/player.js";
4
+ import FullscreenPlayer from "../player/FullscreenPlayer.vue.js";
5
+ import _sfc_main$1 from "../../../../components/BottomSheet/BottomSheet.vue.js";
6
+ import { state, actions } from "../../store/player.js";
7
+ /* empty css */
4
8
  const _sfc_main = {
5
9
  __name: "MusicBottomPlayer",
6
10
  setup(__props) {
11
+ const route = useRoute();
7
12
  const currentTrack = computed(() => {
8
13
  return state.currentTrack;
9
14
  });
15
+ const showFullPlayer = computed(() => {
16
+ return state.showFullPlayer;
17
+ });
18
+ watch(() => route.path, () => {
19
+ if (state.showFullPlayer) {
20
+ actions.toggleFullPlayer();
21
+ }
22
+ });
10
23
  return (_ctx, _cache) => {
11
- return currentTrack.value ? (openBlock(), createBlock(MusicPlayer, {
12
- key: 0,
13
- class: "pos-absolute pos-b-0 w-100"
14
- })) : createCommentVNode("", true);
24
+ return openBlock(), createElementBlock("div", null, [
25
+ currentTrack.value && !showFullPlayer.value ? (openBlock(), createBlock(MusicPlayer, {
26
+ key: 0,
27
+ class: "pos-absolute pos-b-0 w-100"
28
+ })) : createCommentVNode("", true),
29
+ showFullPlayer.value ? (openBlock(), createBlock(_sfc_main$1, {
30
+ key: 1,
31
+ show: showFullPlayer.value,
32
+ onToggle: _cache[0] || (_cache[0] = ($event) => unref(actions).toggleFullPlayer())
33
+ }, {
34
+ default: withCtx(() => [
35
+ createVNode(FullscreenPlayer)
36
+ ]),
37
+ _: 1
38
+ }, 8, ["show"])) : createCommentVNode("", true)
39
+ ]);
15
40
  };
16
41
  }
17
42
  };
@@ -1 +1 @@
1
- {"version":3,"file":"MusicBottomPlayer.vue.js","sources":["../../../../../../../src/modules/music/components/layouts/MusicBottomPlayer.vue"],"sourcesContent":["<!-- components/layouts/MusicBottomPlayer.vue -->\n<template>\n <MusicPlayer v-if=\"currentTrack\" class=\"pos-absolute pos-b-0 w-100\" />\n</template>\n\n<script setup>\nimport { computed } from 'vue';\nimport MusicPlayer from '../player/MusicPlayer.vue';\n\n// Import store modules\nimport { state as playerState } from '../../store/player.js';\n\n// Current track from player store\nconst currentTrack = computed(() => {\n return playerState.currentTrack;\n});\n</script>"],"names":["playerState"],"mappings":";;;;;;AAaA,UAAM,eAAe,SAAS,MAAM;AAClC,aAAOA,MAAY;AAAA,IACrB,CAAC;;;;;;;;;"}
1
+ {"version":3,"file":"MusicBottomPlayer.vue.js","sources":["../../../../../../../src/modules/music/components/layouts/MusicBottomPlayer.vue"],"sourcesContent":["<!-- components/layouts/MusicBottomPlayer.vue -->\n<template>\n <div>\n <MusicPlayer v-if=\"currentTrack && !showFullPlayer\" class=\"pos-absolute pos-b-0 w-100\" />\n\n <BottomSheet\n v-if=\"showFullPlayer\"\n :show=\"showFullPlayer\"\n @toggle=\"playerActions.toggleFullPlayer()\"\n >\n <FullscreenPlayer />\n </BottomSheet>\n </div>\n</template>\n\n<script setup>\nimport { computed, watch } from 'vue';\nimport { useRoute } from 'vue-router';\nimport MusicPlayer from '../player/MusicPlayer.vue';\nimport FullscreenPlayer from '../player/FullscreenPlayer.vue';\nimport BottomSheet from '@martyrs/src/components/BottomSheet/BottomSheet.vue';\n\n// Import store modules\nimport { state as playerState, actions as playerActions } from '../../store/player.js';\n\nconst route = useRoute();\n\n// Current track from player store\nconst currentTrack = computed(() => {\n return playerState.currentTrack;\n});\n\n// Fullscreen player state\nconst showFullPlayer = computed(() => {\n return playerState.showFullPlayer;\n});\n\n// Close fullscreen player on route change\nwatch(() => route.path, () => {\n if (playerState.showFullPlayer) {\n playerActions.toggleFullPlayer();\n }\n});\n</script>\n\n<style>\n/* Shared control button styles for both players */\n.control-btn {\n background: none;\n border: none;\n color: rgb(var(--grey));\n cursor: pointer;\n padding: 8px;\n border-radius: 50%;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.control-icon {\n width: 16px;\n height: 16px;\n}\n\n.control-btn.primary {\n background: rgb(var(--second));\n color: rgb(var(--white));\n width: 32px;\n height: 32px;\n}\n\n.play-icon {\n width: 14px;\n height: 14px;\n fill: rgb(var(--white));\n}\n\n.control-btn.primary:hover {\n background: rgb(var(--second));\n transform: scale(1.06);\n}\n\n.control-btn.secondary:hover {\n color: rgb(var(--white));\n background: rgba(var(--black),0.1);\n}\n\n.control-btn.secondary:hover .control-icon {\n fill: rgb(var(--white));\n}\n\n.control-btn.active {\n color: rgb(var(--main));\n background: rgba(var(--second),0.1);\n}\n\n.control-btn.active .control-icon {\n fill: rgb(var(--main));\n}\n\n.control-btn.active:hover {\n color: rgb(var(--main));\n opacity: 0.8;\n background: rgba(var(--second),0.2);\n}\n</style>"],"names":["playerState","playerActions"],"mappings":";;;;;;;;;;AAyBA,UAAM,QAAQ,SAAQ;AAGtB,UAAM,eAAe,SAAS,MAAM;AAClC,aAAOA,MAAY;AAAA,IACrB,CAAC;AAGD,UAAM,iBAAiB,SAAS,MAAM;AACpC,aAAOA,MAAY;AAAA,IACrB,CAAC;AAGD,UAAM,MAAM,MAAM,MAAM,MAAM;AAC5B,UAAIA,MAAY,gBAAgB;AAC9BC,gBAAc,iBAAgB;AAAA,MAChC;AAAA,IACF,CAAC;;;;;;;;;;;;;;;;;;;;;"}