@ozdao/martyrs 0.2.565 → 0.2.566

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 (99) hide show
  1. package/dist/martyrs/dist/main-B9o1iBAZ.js +943 -0
  2. package/dist/martyrs/dist/main-B9o1iBAZ.js.map +1 -0
  3. package/dist/martyrs/dist/web-BF3ijvEr.js +55 -0
  4. package/dist/martyrs/dist/web-BF3ijvEr.js.map +1 -0
  5. package/dist/martyrs/src/components/BottomSheet/BottomSheet.vue.js +96 -0
  6. package/dist/martyrs/src/components/BottomSheet/BottomSheet.vue.js.map +1 -0
  7. package/dist/martyrs/src/modules/core/views/components/layouts/App.vue.js +1 -1
  8. package/dist/martyrs/src/modules/core/views/components/layouts/Client.vue.js +1 -0
  9. package/dist/martyrs/src/modules/core/views/components/layouts/Client.vue.js.map +1 -1
  10. package/dist/martyrs/src/modules/core/views/components/sections/Walkthrough.vue.js +1 -1
  11. package/dist/martyrs/src/modules/events/components/elements/ButtonCheck.vue.js +1 -1
  12. package/dist/martyrs/src/modules/events/events.client.js +15 -12
  13. package/dist/martyrs/src/modules/events/events.client.js.map +1 -1
  14. package/dist/martyrs/src/modules/music/components/blocks/ActionButtons.vue.js +95 -0
  15. package/dist/martyrs/src/modules/music/components/blocks/ActionButtons.vue.js.map +1 -0
  16. package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js +5 -2
  17. package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js.map +1 -1
  18. package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.js +24 -24
  19. package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.js.map +1 -1
  20. package/dist/martyrs/src/modules/music/components/layouts/MusicBottomPlayer.vue.js +31 -6
  21. package/dist/martyrs/src/modules/music/components/layouts/MusicBottomPlayer.vue.js.map +1 -1
  22. package/dist/martyrs/src/modules/music/components/pages/Album.vue.js +120 -205
  23. package/dist/martyrs/src/modules/music/components/pages/Album.vue.js.map +1 -1
  24. package/dist/martyrs/src/modules/music/components/pages/MusicHome.vue.js +9 -13
  25. package/dist/martyrs/src/modules/music/components/pages/MusicHome.vue.js.map +1 -1
  26. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js +166 -245
  27. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js.map +1 -1
  28. package/dist/martyrs/src/modules/music/components/pages/Track.vue.js +135 -220
  29. package/dist/martyrs/src/modules/music/components/pages/Track.vue.js.map +1 -1
  30. package/dist/martyrs/src/modules/music/components/player/FullscreenPlayer.vue.js +171 -0
  31. package/dist/martyrs/src/modules/music/components/player/FullscreenPlayer.vue.js.map +1 -0
  32. package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.js +31 -153
  33. package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.js.map +1 -1
  34. package/dist/martyrs/src/modules/music/components/player/PlayerControls.vue.js +96 -0
  35. package/dist/martyrs/src/modules/music/components/player/PlayerControls.vue.js.map +1 -0
  36. package/dist/martyrs/src/modules/music/components/player/VolumeControl.vue.js +55 -27
  37. package/dist/martyrs/src/modules/music/components/player/VolumeControl.vue.js.map +1 -1
  38. package/dist/martyrs/src/modules/music/components/player/tonar.png.js +5 -0
  39. package/dist/martyrs/src/modules/music/components/player/tonar.png.js.map +1 -0
  40. package/dist/martyrs/src/modules/music/store/albums.js +8 -2
  41. package/dist/martyrs/src/modules/music/store/albums.js.map +1 -1
  42. package/dist/martyrs/src/modules/music/store/player.js +83 -65
  43. package/dist/martyrs/src/modules/music/store/player.js.map +1 -1
  44. package/dist/martyrs/src/modules/music/store/tracks.js +4 -13
  45. package/dist/martyrs/src/modules/music/store/tracks.js.map +1 -1
  46. package/dist/martyrs/src/modules/notifications/notifications.client.js +2 -2
  47. package/dist/martyrs.css +1 -1
  48. package/dist/music.server.js +33 -6
  49. 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
  50. 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
  51. 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
  52. 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
  53. 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
  54. 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
  55. package/dist/node_modules/.pnpm/{@capacitor_core@7.0.1 → @capacitor_core@7.4.4}/node_modules/@capacitor/core/dist/index.js +2 -1
  56. package/dist/node_modules/.pnpm/@capacitor_core@7.4.4/node_modules/@capacitor/core/dist/index.js.map +1 -0
  57. 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
  58. 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
  59. 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
  60. 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
  61. 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
  62. 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
  63. 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
  64. 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
  65. 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
  66. 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
  67. 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
  68. 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
  69. 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
  70. package/dist/style.css +214 -138
  71. package/package.json +1 -1
  72. package/src/components/BottomSheet/BottomSheet.vue +4 -4
  73. package/src/modules/LAYOUT.MD +767 -0
  74. package/src/modules/core/views/components/layouts/Client.vue +1 -1
  75. package/src/modules/events/events.client.js +3 -0
  76. package/src/modules/music/components/blocks/ActionButtons.vue +74 -0
  77. package/src/modules/music/components/cards/AlbumCard.vue +1 -1
  78. package/src/modules/music/components/cards/ArtistCardSmall.vue +8 -6
  79. package/src/modules/music/components/layouts/MusicBottomPlayer.vue +94 -4
  80. package/src/modules/music/components/pages/Album.vue +55 -67
  81. package/src/modules/music/components/pages/MusicHome.vue +4 -6
  82. package/src/modules/music/components/pages/Playlist.vue +61 -70
  83. package/src/modules/music/components/pages/Track.vue +54 -71
  84. package/src/modules/music/components/player/FullscreenPlayer.vue +248 -0
  85. package/src/modules/music/components/player/MusicPlayer.vue +21 -216
  86. package/src/modules/music/components/player/PlayerControls.vue +112 -0
  87. package/src/modules/music/components/player/Visualizer.vue +151 -0
  88. package/src/modules/music/components/player/VolumeControl.vue +75 -23
  89. package/src/modules/music/components/player/tonar.png +0 -0
  90. package/src/modules/music/routes/albums.routes.js +13 -12
  91. package/src/modules/music/routes/tracks.routes.js +39 -0
  92. package/src/modules/music/store/albums.js +10 -2
  93. package/src/modules/music/store/player.js +101 -89
  94. package/src/modules/music/store/tracks.js +5 -21
  95. package/src/styles/config.scss +6 -6
  96. 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
  97. 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
  98. package/dist/node_modules/.pnpm/@capacitor_core@7.0.1/node_modules/@capacitor/core/dist/index.js.map +0 -1
  99. /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 +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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -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;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,23 +1,23 @@
1
- import { ref, computed, onMounted, resolveComponent, createElementBlock, openBlock, createCommentVNode, createVNode, createElementVNode, toDisplayString, withCtx, createTextVNode, Fragment, renderList, createBlock } from "vue";
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$1 from "../../../../components/Button/Button.vue2.js";
4
3
  import Loader from "../../../../components/Loader/Loader.vue.js";
4
+ /* empty css */
5
5
  import Media from "../../../../components/Media/Media.vue.js";
6
- import _sfc_main$5 from "../../../../components/Dropdown/Dropdown.vue.js";
7
- import _sfc_main$a from "../../../../components/Feed/Feed.vue.js";
8
- import _sfc_main$2 from "../../../icons/navigation/IconPlay.vue.js";
9
- import _sfc_main$4 from "../../../icons/navigation/IconLike.vue.js";
10
- import _sfc_main$6 from "../../../icons/navigation/IconEllipsis.vue.js";
11
- import _sfc_main$3 from "../../../icons/navigation/IconShuffle.vue.js";
12
- import _sfc_main$7 from "../../../icons/entities/IconCalendar.vue.js";
6
+ /* empty css */
7
+ import _sfc_main$8 from "../../../../components/Feed/Feed.vue.js";
8
+ import _sfc_main$1 from "../../../icons/navigation/IconPlay.vue.js";
9
+ import _sfc_main$3 from "../../../icons/navigation/IconLike.vue.js";
10
+ import _sfc_main$2 from "../../../icons/navigation/IconShuffle.vue.js";
11
+ import _sfc_main$5 from "../../../icons/entities/IconCalendar.vue.js";
13
12
  import IconTime from "../../../icons/entities/IconTime.vue.js";
14
- import _sfc_main$9 from "../../../icons/actions/IconShow.vue.js";
15
- import _sfc_main$8 from "../../../icons/entities/IconMusic.vue.js";
16
- import _sfc_main$b from "../cards/TrackListCard.vue.js";
13
+ import _sfc_main$7 from "../../../icons/actions/IconShow.vue.js";
14
+ import _sfc_main$6 from "../../../icons/entities/IconMusic.vue.js";
15
+ import _sfc_main$4 from "../blocks/ActionButtons.vue.js";
16
+ import _sfc_main$9 from "../cards/TrackListCard.vue.js";
17
17
  import AlbumCard from "../cards/AlbumCard.vue.js";
18
18
  import ArtistCardSmall from "../cards/ArtistCardSmall.vue.js";
19
- import { state, actions } from "../../store/albums.js";
20
- import { actions as actions$1 } from "../../store/player.js";
19
+ import { state, actions as actions$1 } from "../../store/albums.js";
20
+ import { actions } from "../../store/player.js";
21
21
  import { state as state$1 } from "../../../auth/views/store/auth.js";
22
22
  const _hoisted_1 = { class: "album-page pd-small" };
23
23
  const _hoisted_2 = {
@@ -30,7 +30,7 @@ const _hoisted_3 = {
30
30
  };
31
31
  const _hoisted_4 = {
32
32
  key: 2,
33
- class: "album-content cols-2-fit-content mobile:cols-1 gap-big"
33
+ class: "album-content cols-2 mobile:cols-1 gap-big"
34
34
  };
35
35
  const _hoisted_5 = { class: "pos-sticky pos-t-0 mobile:pos-relative album-cover-section" };
36
36
  const _hoisted_6 = { class: "stats-grid grid cols-2 gap-small" };
@@ -46,42 +46,40 @@ const _hoisted_14 = {
46
46
  class: "bg-light t-medium pd-thin radius-thin uppercase t-small t-uppercase"
47
47
  };
48
48
  const _hoisted_15 = { class: "h1 mn-b-medium" };
49
- const _hoisted_16 = { class: "flex gap-small mn-b-medium" };
50
- const _hoisted_17 = { class: "dropdown-menu bg-white pd-small radius-medium shadow-big mn-t-thin" };
51
- const _hoisted_18 = { class: "artists-section mn-b-medium" };
52
- const _hoisted_19 = {
49
+ const _hoisted_16 = { class: "artists-section mn-b-medium" };
50
+ const _hoisted_17 = {
53
51
  key: 0,
54
52
  class: "t-medium mn-b-small"
55
53
  };
56
- const _hoisted_20 = { class: "flex flex-column gap-small" };
57
- const _hoisted_21 = { class: "metadata-grid grid cols-2 gap-small mn-b-medium" };
54
+ const _hoisted_18 = { class: "flex flex-column gap-small" };
55
+ const _hoisted_19 = { class: "metadata-grid grid cols-2 gap-small mn-b-medium" };
56
+ const _hoisted_20 = { class: "metadata-card bg-light pd-medium radius-medium flex items-center gap-regular" };
57
+ const _hoisted_21 = { class: "t-medium" };
58
58
  const _hoisted_22 = { class: "metadata-card bg-light pd-medium radius-medium flex items-center gap-regular" };
59
59
  const _hoisted_23 = { class: "t-medium" };
60
- const _hoisted_24 = { class: "metadata-card bg-light pd-medium radius-medium flex items-center gap-regular" };
61
- const _hoisted_25 = { class: "t-medium" };
62
- const _hoisted_26 = {
60
+ const _hoisted_24 = {
63
61
  key: 0,
64
62
  class: "metadata-card bg-light pd-medium radius-medium flex items-center gap-regular"
65
63
  };
64
+ const _hoisted_25 = { class: "t-medium" };
65
+ const _hoisted_26 = { class: "metadata-card bg-light pd-medium radius-medium flex items-center gap-regular" };
66
66
  const _hoisted_27 = { class: "t-medium" };
67
- const _hoisted_28 = { class: "metadata-card bg-light pd-medium radius-medium flex items-center gap-regular" };
68
- const _hoisted_29 = { class: "t-medium" };
69
- const _hoisted_30 = {
67
+ const _hoisted_28 = {
70
68
  key: 0,
71
69
  class: "tags-section mn-b-medium"
72
70
  };
73
- const _hoisted_31 = { class: "flex gap-thin flex-wrap" };
74
- const _hoisted_32 = {
71
+ const _hoisted_29 = { class: "flex gap-thin flex-wrap" };
72
+ const _hoisted_30 = {
75
73
  key: 3,
76
74
  class: "tracks-section mn-t-big"
77
75
  };
78
- const _hoisted_33 = { class: "bg-light radius-medium o-hidden" };
79
- const _hoisted_34 = {
76
+ const _hoisted_31 = { class: "bg-light radius-medium o-hidden" };
77
+ const _hoisted_32 = {
80
78
  key: 4,
81
79
  class: "more-albums-section mn-t-big"
82
80
  };
83
- const _hoisted_35 = { class: "flex justify-between items-center mn-b-medium" };
84
- const _hoisted_36 = { class: "flex flex-nowrap gap-small o-x-scroll overscroll-behavior-x-contain scroll-behavior-smooth scroll-snap-type-x-mandatory scroll-hide" };
81
+ const _hoisted_33 = { class: "flex justify-between items-center mn-b-medium" };
82
+ const _hoisted_34 = { class: "flex flex-nowrap gap-small o-x-scroll overscroll-behavior-x-contain scroll-behavior-smooth scroll-snap-type-x-mandatory scroll-hide" };
85
83
  const _sfc_main = {
86
84
  __name: "Album",
87
85
  emits: ["page-loading", "page-loaded"],
@@ -91,7 +89,6 @@ const _sfc_main = {
91
89
  const emits = __emit;
92
90
  const hasLoaded = ref(false);
93
91
  const isFavorite = ref(false);
94
- const showDropdown = ref(false);
95
92
  const followedArtists = ref([]);
96
93
  const moreAlbums = ref([]);
97
94
  state.currentAlbum = null;
@@ -106,6 +103,48 @@ const _sfc_main = {
106
103
  const totalSeconds = albumTracks.value.reduce((sum, track) => sum + (track.duration || 0), 0);
107
104
  return formatDuration(totalSeconds);
108
105
  });
106
+ const actionButtons = computed(() => {
107
+ const buttons = [
108
+ {
109
+ type: "button",
110
+ class: "t-white bg-black",
111
+ icon: _sfc_main$1,
112
+ iconFill: "rgb(var(--white))",
113
+ text: "Play All",
114
+ action: playAlbum
115
+ },
116
+ {
117
+ type: "button",
118
+ class: "bg-light",
119
+ icon: _sfc_main$2,
120
+ text: "Shuffle",
121
+ action: shufflePlay
122
+ },
123
+ {
124
+ type: "button",
125
+ class: "bg-light",
126
+ icon: _sfc_main$3,
127
+ iconFill: isFavorite.value ? "rgb(var(--main))" : "rgb(var(--black))",
128
+ text: isFavorite.value ? "Liked" : "Like",
129
+ action: toggleFavorite
130
+ },
131
+ {
132
+ type: "dropdown",
133
+ items: [
134
+ { text: "Add to Queue", action: addToQueue },
135
+ { text: "Copy Link", action: copyLink },
136
+ { text: "Add to Playlist", action: addToPlaylist }
137
+ ]
138
+ }
139
+ ];
140
+ if (isOwner.value) {
141
+ const items = buttons[3].items;
142
+ items.push({ separator: true });
143
+ items.push({ text: "Edit Album", action: editAlbum });
144
+ items.push({ text: "Delete Album", action: deleteAlbum, color: "danger" });
145
+ }
146
+ return buttons;
147
+ });
109
148
  const formatDate = (dateString) => {
110
149
  if (!dateString) return "Unknown";
111
150
  return new Date(dateString).toLocaleDateString("en-US", {
@@ -135,13 +174,13 @@ const _sfc_main = {
135
174
  };
136
175
  const playAlbum = () => {
137
176
  if (albumTracks.value && albumTracks.value.length > 0) {
138
- actions$1.setQueue(albumTracks.value);
177
+ actions.setQueue(albumTracks.value);
139
178
  }
140
179
  };
141
180
  const shufflePlay = () => {
142
181
  if (albumTracks.value && albumTracks.value.length > 0) {
143
182
  const shuffled = [...albumTracks.value].sort(() => Math.random() - 0.5);
144
- actions$1.setQueue(shuffled);
183
+ actions.setQueue(shuffled);
145
184
  }
146
185
  };
147
186
  const toggleFavorite = () => {
@@ -158,18 +197,20 @@ const _sfc_main = {
158
197
  const addToQueue = () => {
159
198
  if (albumTracks.value.length > 0) {
160
199
  albumTracks.value.forEach((track) => {
161
- actions$1.addToQueue(track);
200
+ actions.addToQueue(track);
162
201
  });
163
- showDropdown.value = false;
164
202
  }
165
203
  };
204
+ const addToPlaylist = () => {
205
+ console.log("Add album to playlist");
206
+ };
166
207
  const editAlbum = () => {
167
208
  router.push({ name: "album-edit", params: { url: album.value.url } });
168
209
  };
169
210
  const deleteAlbum = async () => {
170
211
  if (confirm("Are you sure you want to delete this album?")) {
171
212
  try {
172
- await actions.deleteAlbum(album.value._id);
213
+ await actions$1.deleteAlbum(album.value._id);
173
214
  router.push({ name: "music-library" });
174
215
  } catch (error) {
175
216
  console.error("Failed to delete album:", error);
@@ -178,14 +219,13 @@ const _sfc_main = {
178
219
  };
179
220
  const copyLink = () => {
180
221
  navigator.clipboard.writeText(window.location.href);
181
- showDropdown.value = false;
182
222
  };
183
223
  const fetchAlbumData = async () => {
184
224
  try {
185
- await actions.fetchAlbumByUrl(route.params.url);
225
+ await actions$1.fetchAlbumByUrl(route.params.url);
186
226
  if (album.value?.artists?.length) {
187
227
  const artistIds = album.value.artists.map((a) => a._id);
188
- const albums = await actions.fetchAlbums({
228
+ const albums = await actions$1.fetchAlbums({
189
229
  artist: { $in: artistIds },
190
230
  status: "published",
191
231
  isPublic: true,
@@ -209,7 +249,7 @@ const _sfc_main = {
209
249
  _ctx.isLoading ? (openBlock(), createElementBlock("div", _hoisted_2, [
210
250
  createVNode(Loader)
211
251
  ])) : createCommentVNode("", true),
212
- hasLoaded.value && !album.value ? (openBlock(), createElementBlock("div", _hoisted_3, _cache[1] || (_cache[1] = [
252
+ hasLoaded.value && !album.value ? (openBlock(), createElementBlock("div", _hoisted_3, _cache[0] || (_cache[0] = [
213
253
  createElementVNode("h2", { class: "" }, "Album not found", -1),
214
254
  createElementVNode("p", { class: "t-transp t-medium" }, "The album you're looking for doesn't exist or has been removed.", -1)
215
255
  ]))) : createCommentVNode("", true),
@@ -218,16 +258,16 @@ const _sfc_main = {
218
258
  createVNode(Media, {
219
259
  url: album.value.coverArt || "/logo/logo-placeholder.jpg",
220
260
  alt: album.value.title,
221
- class: "aspect-1x1 w-100 w-max-30r mn-b-small radius-medium o-hidden"
261
+ class: "aspect-1x1 w-100 mn-b-small radius-medium o-hidden"
222
262
  }, null, 8, ["url", "alt"]),
223
263
  createElementVNode("div", _hoisted_6, [
224
264
  createElementVNode("div", _hoisted_7, [
225
265
  createElementVNode("div", _hoisted_8, toDisplayString(album.value.totalTracks || 0), 1),
226
- _cache[2] || (_cache[2] = createElementVNode("div", { class: "t-small t-transp t-uppercase" }, "Tracks", -1))
266
+ _cache[1] || (_cache[1] = createElementVNode("div", { class: "t-small t-transp t-uppercase" }, "Tracks", -1))
227
267
  ]),
228
268
  createElementVNode("div", _hoisted_9, [
229
269
  createElementVNode("div", _hoisted_10, toDisplayString(formatNumber(album.value.views)), 1),
230
- _cache[3] || (_cache[3] = createElementVNode("div", { class: "t-small t-transp t-uppercase" }, "Views", -1))
270
+ _cache[2] || (_cache[2] = createElementVNode("div", { class: "t-small t-transp t-uppercase" }, "Views", -1))
231
271
  ])
232
272
  ])
233
273
  ]),
@@ -237,135 +277,10 @@ const _sfc_main = {
237
277
  album.value.status === "published" ? (openBlock(), createElementBlock("span", _hoisted_14, " Published ")) : createCommentVNode("", true)
238
278
  ]),
239
279
  createElementVNode("h1", _hoisted_15, toDisplayString(album.value.title), 1),
280
+ createVNode(_sfc_main$4, { buttons: actionButtons.value }, null, 8, ["buttons"]),
240
281
  createElementVNode("div", _hoisted_16, [
241
- createVNode(_sfc_main$1, {
242
- onClick: playAlbum,
243
- color: "primary",
244
- size: "medium",
245
- class: "flex-1 t-white bg-black radius-thin flex-center gap-thin"
246
- }, {
247
- default: withCtx(() => [
248
- createVNode(_sfc_main$2, {
249
- fill: "rgb(var(--white))",
250
- class: "i-medium"
251
- }),
252
- _cache[4] || (_cache[4] = createTextVNode(" Play All "))
253
- ]),
254
- _: 1
255
- }),
256
- createVNode(_sfc_main$1, {
257
- onClick: shufflePlay,
258
- color: "primary",
259
- size: "medium",
260
- class: "flex-1 bg-light radius-thin flex-center gap-thin"
261
- }, {
262
- default: withCtx(() => [
263
- createVNode(_sfc_main$3, { class: "i-medium" }),
264
- _cache[5] || (_cache[5] = createTextVNode(" Shuffle "))
265
- ]),
266
- _: 1
267
- }),
268
- createVNode(_sfc_main$1, {
269
- onClick: toggleFavorite,
270
- color: "primary",
271
- size: "medium",
272
- class: "flex-1 bg-light radius-thin flex-center gap-thin"
273
- }, {
274
- default: withCtx(() => [
275
- createVNode(_sfc_main$4, {
276
- class: "i-medium",
277
- fill: isFavorite.value ? "rgb(var(--main)" : "rgb(var(--black)"
278
- }, null, 8, ["fill"]),
279
- createTextVNode(" " + toDisplayString(isFavorite.value ? "Liked" : "Like"), 1)
280
- ]),
281
- _: 1
282
- }),
283
- createVNode(_sfc_main$5, {
284
- label: { component: _sfc_main$6, class: "bg-light radius-thin pd-thin i-big" },
285
- modelValue: showDropdown.value,
286
- "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => showDropdown.value = $event),
287
- class: "relative"
288
- }, {
289
- trigger: withCtx(() => [
290
- createVNode(_sfc_main$1, {
291
- color: "transp",
292
- size: "medium",
293
- class: "w-3r h-3r radius-full"
294
- }, {
295
- default: withCtx(() => [
296
- createVNode(_sfc_main$6, { class: "w-1-25r h-1-25r" })
297
- ]),
298
- _: 1
299
- })
300
- ]),
301
- default: withCtx(() => [
302
- createElementVNode("div", _hoisted_17, [
303
- createVNode(_sfc_main$1, {
304
- onClick: addToQueue,
305
- color: "transp",
306
- size: "small",
307
- class: "w-100 justify-start"
308
- }, {
309
- default: withCtx(() => _cache[6] || (_cache[6] = [
310
- createTextVNode(" Add to Queue ")
311
- ])),
312
- _: 1
313
- }),
314
- createVNode(_sfc_main$1, {
315
- onClick: copyLink,
316
- color: "transp",
317
- size: "small",
318
- class: "w-100 justify-start"
319
- }, {
320
- default: withCtx(() => _cache[7] || (_cache[7] = [
321
- createTextVNode(" Copy Link ")
322
- ])),
323
- _: 1
324
- }),
325
- createVNode(_sfc_main$1, {
326
- onClick: _ctx.addToPlaylist,
327
- color: "transp",
328
- size: "small",
329
- class: "w-100 justify-start"
330
- }, {
331
- default: withCtx(() => _cache[8] || (_cache[8] = [
332
- createTextVNode(" Add to Playlist ")
333
- ])),
334
- _: 1
335
- }, 8, ["onClick"]),
336
- isOwner.value ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
337
- _cache[11] || (_cache[11] = createElementVNode("hr", { class: "mn-v-thin border-dark-transp-10" }, null, -1)),
338
- createVNode(_sfc_main$1, {
339
- onClick: editAlbum,
340
- color: "transp",
341
- size: "small",
342
- class: "w-100 justify-start"
343
- }, {
344
- default: withCtx(() => _cache[9] || (_cache[9] = [
345
- createTextVNode(" Edit Album ")
346
- ])),
347
- _: 1
348
- }),
349
- createVNode(_sfc_main$1, {
350
- onClick: deleteAlbum,
351
- color: "danger",
352
- size: "small",
353
- class: "w-100 justify-start"
354
- }, {
355
- default: withCtx(() => _cache[10] || (_cache[10] = [
356
- createTextVNode(" Delete Album ")
357
- ])),
358
- _: 1
359
- })
360
- ], 64)) : createCommentVNode("", true)
361
- ])
362
- ]),
363
- _: 1
364
- }, 8, ["label", "modelValue"])
365
- ]),
366
- createElementVNode("div", _hoisted_18, [
367
- album.value.artists ? (openBlock(), createElementBlock("h3", _hoisted_19, "Artists")) : createCommentVNode("", true),
368
- createElementVNode("div", _hoisted_20, [
282
+ album.value.artists ? (openBlock(), createElementBlock("h3", _hoisted_17, "Artists")) : createCommentVNode("", true),
283
+ createElementVNode("div", _hoisted_18, [
369
284
  (openBlock(true), createElementBlock(Fragment, null, renderList(album.value.artists, (artist) => {
370
285
  return openBlock(), createBlock(ArtistCardSmall, {
371
286
  key: artist._id,
@@ -377,40 +292,40 @@ const _sfc_main = {
377
292
  }), 128))
378
293
  ])
379
294
  ]),
380
- _cache[17] || (_cache[17] = createElementVNode("h3", { class: "t-medium mn-b-small" }, "Metadata", -1)),
381
- createElementVNode("div", _hoisted_21, [
382
- createElementVNode("div", _hoisted_22, [
383
- createVNode(_sfc_main$7, { class: "i-medium t-primary" }),
295
+ _cache[8] || (_cache[8] = createElementVNode("h3", { class: "t-medium mn-b-small" }, "Metadata", -1)),
296
+ createElementVNode("div", _hoisted_19, [
297
+ createElementVNode("div", _hoisted_20, [
298
+ createVNode(_sfc_main$5, { class: "i-medium t-primary" }),
384
299
  createElementVNode("div", null, [
385
- _cache[12] || (_cache[12] = createElementVNode("div", { class: "t-small t-transp t-uppercase" }, "Released", -1)),
386
- createElementVNode("div", _hoisted_23, toDisplayString(formatDate(album.value.releaseDate)), 1)
300
+ _cache[3] || (_cache[3] = createElementVNode("div", { class: "t-small t-transp t-uppercase" }, "Released", -1)),
301
+ createElementVNode("div", _hoisted_21, toDisplayString(formatDate(album.value.releaseDate)), 1)
387
302
  ])
388
303
  ]),
389
- createElementVNode("div", _hoisted_24, [
304
+ createElementVNode("div", _hoisted_22, [
390
305
  createVNode(IconTime, { class: "i-medium t-primary" }),
391
306
  createElementVNode("div", null, [
392
- _cache[13] || (_cache[13] = createElementVNode("div", { class: "t-small t-transp t-uppercase" }, "Duration", -1)),
393
- createElementVNode("div", _hoisted_25, toDisplayString(totalDuration.value), 1)
307
+ _cache[4] || (_cache[4] = createElementVNode("div", { class: "t-small t-transp t-uppercase" }, "Duration", -1)),
308
+ createElementVNode("div", _hoisted_23, toDisplayString(totalDuration.value), 1)
394
309
  ])
395
310
  ]),
396
- album.value.label ? (openBlock(), createElementBlock("div", _hoisted_26, [
397
- createVNode(_sfc_main$8, { class: "i-medium t-primary" }),
311
+ album.value.label ? (openBlock(), createElementBlock("div", _hoisted_24, [
312
+ createVNode(_sfc_main$6, { class: "i-medium t-primary" }),
398
313
  createElementVNode("div", null, [
399
- _cache[14] || (_cache[14] = createElementVNode("div", { class: "t-small t-transp t-uppercase" }, "Label", -1)),
400
- createElementVNode("div", _hoisted_27, toDisplayString(album.value.label), 1)
314
+ _cache[5] || (_cache[5] = createElementVNode("div", { class: "t-small t-transp t-uppercase" }, "Label", -1)),
315
+ createElementVNode("div", _hoisted_25, toDisplayString(album.value.label), 1)
401
316
  ])
402
317
  ])) : createCommentVNode("", true),
403
- createElementVNode("div", _hoisted_28, [
404
- createVNode(_sfc_main$9, { class: "i-medium t-primary" }),
318
+ createElementVNode("div", _hoisted_26, [
319
+ createVNode(_sfc_main$7, { class: "i-medium t-primary" }),
405
320
  createElementVNode("div", null, [
406
- _cache[15] || (_cache[15] = createElementVNode("div", { class: "t-small t-transp t-uppercase" }, "Visibility", -1)),
407
- createElementVNode("div", _hoisted_29, toDisplayString(album.value.isPublic ? "Public" : "Private"), 1)
321
+ _cache[6] || (_cache[6] = createElementVNode("div", { class: "t-small t-transp t-uppercase" }, "Visibility", -1)),
322
+ createElementVNode("div", _hoisted_27, toDisplayString(album.value.isPublic ? "Public" : "Private"), 1)
408
323
  ])
409
324
  ])
410
325
  ]),
411
- album.value.genres && album.value.genres.length || album.value.tags && album.value.tags.length ? (openBlock(), createElementBlock("div", _hoisted_30, [
412
- _cache[16] || (_cache[16] = createElementVNode("h3", { class: "t-medium mn-b-small" }, "Genres & Tags", -1)),
413
- createElementVNode("div", _hoisted_31, [
326
+ album.value.genres && album.value.genres.length || album.value.tags && album.value.tags.length ? (openBlock(), createElementBlock("div", _hoisted_28, [
327
+ _cache[7] || (_cache[7] = createElementVNode("h3", { class: "t-medium mn-b-small" }, "Genres & Tags", -1)),
328
+ createElementVNode("div", _hoisted_29, [
414
329
  (openBlock(true), createElementBlock(Fragment, null, renderList(album.value.genres, (genre) => {
415
330
  return openBlock(), createElementBlock("span", {
416
331
  key: genre,
@@ -427,9 +342,9 @@ const _sfc_main = {
427
342
  ])) : createCommentVNode("", true)
428
343
  ])
429
344
  ])) : createCommentVNode("", true),
430
- !_ctx.isLoading && album.value && albumTracks.value.length ? (openBlock(), createElementBlock("section", _hoisted_32, [
431
- _cache[18] || (_cache[18] = createElementVNode("h2", { class: "h2 mn-b-medium" }, "Tracklist", -1)),
432
- createVNode(_sfc_main$a, {
345
+ !_ctx.isLoading && album.value && albumTracks.value.length ? (openBlock(), createElementBlock("section", _hoisted_30, [
346
+ _cache[9] || (_cache[9] = createElementVNode("h2", { class: "h2 mn-b-medium" }, "Tracklist", -1)),
347
+ createVNode(_sfc_main$8, {
433
348
  store: {
434
349
  read: () => _ctx.Promise.resolve(albumTracks.value),
435
350
  state: { isLoading: false }
@@ -445,9 +360,9 @@ const _sfc_main = {
445
360
  }
446
361
  }, {
447
362
  default: withCtx(({ items }) => [
448
- createElementVNode("div", _hoisted_33, [
363
+ createElementVNode("div", _hoisted_31, [
449
364
  (openBlock(true), createElementBlock(Fragment, null, renderList(items, (track, index) => {
450
- return openBlock(), createBlock(_sfc_main$b, {
365
+ return openBlock(), createBlock(_sfc_main$9, {
451
366
  key: track._id,
452
367
  track,
453
368
  index: index + 1,
@@ -460,21 +375,21 @@ const _sfc_main = {
460
375
  _: 1
461
376
  }, 8, ["store", "items"])
462
377
  ])) : createCommentVNode("", true),
463
- !_ctx.isLoading && album.value && moreAlbums.value.length ? (openBlock(), createElementBlock("section", _hoisted_34, [
464
- createElementVNode("div", _hoisted_35, [
465
- _cache[20] || (_cache[20] = createElementVNode("h2", { class: "h2" }, "More Albums", -1)),
378
+ !_ctx.isLoading && album.value && moreAlbums.value.length ? (openBlock(), createElementBlock("section", _hoisted_32, [
379
+ createElementVNode("div", _hoisted_33, [
380
+ _cache[11] || (_cache[11] = createElementVNode("h2", { class: "h2" }, "More Albums", -1)),
466
381
  album.value.artists && album.value.artists[0] ? (openBlock(), createBlock(_component_router_link, {
467
382
  key: 0,
468
383
  to: { name: "artist", params: { url: album.value.artists[0].url } },
469
384
  class: "t-primary hover-opacity"
470
385
  }, {
471
- default: withCtx(() => _cache[19] || (_cache[19] = [
386
+ default: withCtx(() => _cache[10] || (_cache[10] = [
472
387
  createTextVNode(" See all ")
473
388
  ])),
474
389
  _: 1
475
390
  }, 8, ["to"])) : createCommentVNode("", true)
476
391
  ]),
477
- createElementVNode("div", _hoisted_36, [
392
+ createElementVNode("div", _hoisted_34, [
478
393
  (openBlock(true), createElementBlock(Fragment, null, renderList(moreAlbums.value, (relatedAlbum) => {
479
394
  return openBlock(), createElementBlock("li", {
480
395
  key: album.value._id,
@@ -482,7 +397,7 @@ const _sfc_main = {
482
397
  }, [
483
398
  createVNode(AlbumCard, {
484
399
  album: relatedAlbum,
485
- class: "w-min-15r transition-cubic-in-out"
400
+ class: "w-15r transition-cubic-in-out"
486
401
  }, null, 8, ["album"])
487
402
  ]);
488
403
  }), 128))