{"version":3,"file":"PlaylistsPage-DkkPMbPD.mjs","names":[],"sources":["../src/components/display/playlist/PlaylistItem.vue","../src/components/display/playlist/PlaylistItem.vue","../src/stores/class/general/playlist.ts","../src/components/display/playlist/PlaylistList.vue","../src/components/display/playlist/PlaylistList.vue","../src/components/pages/PlaylistsPage.vue","../src/components/pages/PlaylistsPage.vue"],"sourcesContent":["<template>\n  <article class=\"classic-element-container\">\n    <router-link\n      :to=\"{\n        name: 'playlist',\n        params: { playlistId: playlist.playlistId },\n      }\"\n      :title=\"t('Playlist name page', { name: name })\"\n      class=\"d-flex flex-grow-1 text-dark\"\n    >\n      <div class=\"classic-element-text\">\n        <div v-if=\"!activePlaylist\" class=\"sticker-empty-ressource\">\n          {{ t(\"Empty playlist\") }}\n        </div>\n        <div class=\"d-flex align-items-center element-name basic-line-clamp\">\n          {{ name }}\n        </div>\n        <div\n          ref=\"descriptionPlaylistContainer\"\n          class=\"element-description html-wysiwyg-content\"\n        >\n          <!-- eslint-disable vue/no-v-html -->\n          <div ref=\"descriptionPlaylist\" v-html=\"urlify(description)\" />\n          <!-- eslint-enable -->\n        </div>\n        <router-link\n          v-if=\"!state.generalParameters.podcastmaker && playlist.organisation\"\n          :to=\"{\n            name: 'productor',\n            params: { productorId: playlist.organisation.id },\n          }\"\n          class=\"text-dark mt-auto py-1\"\n        >\n          © {{ playlist.organisation.name }}\n        </router-link>\n      </div>\n      <img\n        v-lazy=\"useProxyImageUrl(playlist.imageUrl, '250')\"\n        width=\"250\"\n        height=\"250\"\n        aria-hidden=\"true\"\n        alt=\"\"\n        \n        :title=\"t('Playlist name image', { name: name })\"\n        class=\"img-box\"\n      />\n    </router-link>\n  </article>\n</template>\n\n<script setup lang=\"ts\">\nimport { Playlist } from \"@/stores/class/general/playlist\";\nimport { state } from \"../../../stores/ParamSdkStore\";\nimport {useImageProxy} from \"../../composable/useImageProxy\";\nimport displayHelper from \"../../../helper/displayHelper\";\nimport { computed, onMounted, useTemplateRef } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\n//Props \nconst props = defineProps({\n  playlist: { default: () => ({}), type: Object as () => Playlist },\n})\n\n//Composables\nconst { t } = useI18n();\nconst { useProxyImageUrl } = useImageProxy();\n\n//Computed\nconst description = computed(() => props.playlist.description ?? \"\");\nconst name = computed(() => props.playlist.title ?? \"\");\nconst activePlaylist = computed(() => 0 !== Object.keys(props.playlist.samplingViews ?? []).length);\n\nonMounted(()=>{\n  const playlistDesc = useTemplateRef('descriptionPlaylist')?.value as HTMLElement;\n  const playlistDescContainer = useTemplateRef('descriptionPlaylistContainer')?.value as HTMLElement;\n  if (playlistDesc?.clientHeight > playlistDescContainer?.clientHeight) {\n    playlistDescContainer.classList.add(\"after-element-description\");\n  }\n})\n\n//Methods\nfunction urlify(text:string|undefined){\n  return displayHelper.urlify(text);\n}\n</script>\n<style lang=\"scss\">\n.octopus-app .sticker-empty-ressource{\n  position: absolute;\n  top: 5px;\n  right: 5px;\n  align-self: center;\n  background: var(--octopus-tertiary);\n  padding: 0.5rem;\n  transition: all 0.5s ease;\n  color: var(--octopus-color-on-primary);\n  font-size: 0.6rem;\n  font-weight: bold;\n  letter-spacing: 1px;\n  box-shadow: 10px 10px 34px -15px var(--octopus-shadow);\n  border-radius: 255px 15px 225px 15px/15px 225px 15px 255px;\n  border: solid 2px var(--octopus-color-text);\n  cursor: auto;\n\n  &:hover {\n    box-shadow: 2px 8px 4px -6px var(--octopus-shadow);\n    background: var(--octopus-primary);\n  }\n}\n</style>\n\n","<template>\n  <article class=\"classic-element-container\">\n    <router-link\n      :to=\"{\n        name: 'playlist',\n        params: { playlistId: playlist.playlistId },\n      }\"\n      :title=\"t('Playlist name page', { name: name })\"\n      class=\"d-flex flex-grow-1 text-dark\"\n    >\n      <div class=\"classic-element-text\">\n        <div v-if=\"!activePlaylist\" class=\"sticker-empty-ressource\">\n          {{ t(\"Empty playlist\") }}\n        </div>\n        <div class=\"d-flex align-items-center element-name basic-line-clamp\">\n          {{ name }}\n        </div>\n        <div\n          ref=\"descriptionPlaylistContainer\"\n          class=\"element-description html-wysiwyg-content\"\n        >\n          <!-- eslint-disable vue/no-v-html -->\n          <div ref=\"descriptionPlaylist\" v-html=\"urlify(description)\" />\n          <!-- eslint-enable -->\n        </div>\n        <router-link\n          v-if=\"!state.generalParameters.podcastmaker && playlist.organisation\"\n          :to=\"{\n            name: 'productor',\n            params: { productorId: playlist.organisation.id },\n          }\"\n          class=\"text-dark mt-auto py-1\"\n        >\n          © {{ playlist.organisation.name }}\n        </router-link>\n      </div>\n      <img\n        v-lazy=\"useProxyImageUrl(playlist.imageUrl, '250')\"\n        width=\"250\"\n        height=\"250\"\n        aria-hidden=\"true\"\n        alt=\"\"\n        \n        :title=\"t('Playlist name image', { name: name })\"\n        class=\"img-box\"\n      />\n    </router-link>\n  </article>\n</template>\n\n<script setup lang=\"ts\">\nimport { Playlist } from \"@/stores/class/general/playlist\";\nimport { state } from \"../../../stores/ParamSdkStore\";\nimport {useImageProxy} from \"../../composable/useImageProxy\";\nimport displayHelper from \"../../../helper/displayHelper\";\nimport { computed, onMounted, useTemplateRef } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\n//Props \nconst props = defineProps({\n  playlist: { default: () => ({}), type: Object as () => Playlist },\n})\n\n//Composables\nconst { t } = useI18n();\nconst { useProxyImageUrl } = useImageProxy();\n\n//Computed\nconst description = computed(() => props.playlist.description ?? \"\");\nconst name = computed(() => props.playlist.title ?? \"\");\nconst activePlaylist = computed(() => 0 !== Object.keys(props.playlist.samplingViews ?? []).length);\n\nonMounted(()=>{\n  const playlistDesc = useTemplateRef('descriptionPlaylist')?.value as HTMLElement;\n  const playlistDescContainer = useTemplateRef('descriptionPlaylistContainer')?.value as HTMLElement;\n  if (playlistDesc?.clientHeight > playlistDescContainer?.clientHeight) {\n    playlistDescContainer.classList.add(\"after-element-description\");\n  }\n})\n\n//Methods\nfunction urlify(text:string|undefined){\n  return displayHelper.urlify(text);\n}\n</script>\n<style lang=\"scss\">\n.octopus-app .sticker-empty-ressource{\n  position: absolute;\n  top: 5px;\n  right: 5px;\n  align-self: center;\n  background: var(--octopus-tertiary);\n  padding: 0.5rem;\n  transition: all 0.5s ease;\n  color: var(--octopus-color-on-primary);\n  font-size: 0.6rem;\n  font-weight: bold;\n  letter-spacing: 1px;\n  box-shadow: 10px 10px 34px -15px var(--octopus-shadow);\n  border-radius: 255px 15px 225px 15px/15px 225px 15px 255px;\n  border: solid 2px var(--octopus-color-text);\n  cursor: auto;\n\n  &:hover {\n    box-shadow: 2px 8px 4px -6px var(--octopus-shadow);\n    background: var(--octopus-primary);\n  }\n}\n</style>\n\n","import { emptyOrganisationData, Organisation } from \"./organisation\";\nimport { Person } from \"../user/person\";\nimport { FetchParam } from \"./fetchParam\";\nimport { Annotations } from \".\";\nimport { ItuneCategory } from \"./ituneCategory\";\n\n/**\n * Type of ambiance for the playlist\n * see #11919\n */\nexport enum PlaylistAmbianceType {\n  NONE = \"NONE\",\n  AMIBANCE = \"AMBIANCE\",\n  AMBIANCE_PROGRAMMED = \"AMBIANCE_PROGRAMMED\"\n}\n\nexport interface Playlist {\n  ambianceType?: PlaylistAmbianceType;\n  imageUrl?: string;\n  description: string;\n  organisation?: Organisation;\n  playlistId: number;\n  podcasts?: Array<number | undefined>;\n  score: number;\n  title: string;\n  type: string;\n  samplingViews?: Array<PlaylistRule>;\n  publisher?: Person;\n  /** The annotations of the playlist */\n  annotations?: Annotations;\n  copyright?: string;\n  optItunesCategories?: Array<ItuneCategory>;\n}\n\nexport function emptyPlaylistData(): Playlist {\n  return {\n    ambianceType: PlaylistAmbianceType.NONE,\n    description: \"\",\n    playlistId: 0,\n    podcasts: undefined,\n    score: 0,\n    title: \"\",\n    type: \"DYNAMIC\",\n    samplingViews: [],\n    organisation: emptyOrganisationData()\n  };\n}\n\nexport interface PlaylistRule {\n  maxSize: number;\n  podcastId?: number;\n  query?: FetchParam;\n  type?: string;\n  title?: string;\n}\n\nexport function emptyPlaylistRule(): PlaylistRule {\n  return {\n    maxSize: 1,\n    query: {},\n    title: undefined,\n  };\n}\n","<template>\n  <ListPaginate\n    id=\"playlistListPaginate\"\n    v-model:first=\"dfirst\"\n    v-model:rows-per-page=\"dsize\"\n    v-model:is-mobile=\"isMobile\"\n    :text-count=\"\n      displayCount > 1\n        ? `${t('Number playlists', { nb: displayCount })}`\n        : undefined\n    \"\n    :total-count=\"totalCount\"\n    :loading=\"loading\"\n    :loading-text=\"loading ? t('Loading content ...') : undefined\"\n    :player-responsive=\"true\"\n  >\n    <template #list>\n      <div class=\"octopus-element-list two-items-list\">\n        <ClassicLazy\n          v-for=\"p in displayArray\"\n          :key=\"p.playlistId\"\n          :min-height=\"250\"\n          class=\"d-flex flex-column flex-grow-1\"\n        >\n          <PlaylistItem v-if=\"0 !== p.playlistId\" :playlist=\"p\" />\n          <template #preview>\n            <router-link\n              :to=\"{\n                name: 'playlist',\n                params: { playlistId: p.playlistId },\n              }\"\n              :title=\"t('Playlist name page', { name: p.title })\"\n            >\n              {{ p.title }}\n            </router-link>\n          </template>\n        </ClassicLazy>\n      </div>\n    </template>\n  </ListPaginate>\n</template>\n\n<script setup lang=\"ts\">\nimport ClassicLazy from \"../../misc/ClassicLazy.vue\";\nimport ListPaginate from \"../list/ListPaginate.vue\";\nimport {useErrorHandler} from \"../../composable/useErrorHandler\";\nimport classicApi from \"../../../api/classicApi\";\nimport PlaylistItem from \"./PlaylistItem.vue\";\nimport { Playlist, emptyPlaylistData } from \"@/stores/class/general/playlist\";\nimport { useFilterStore } from \"../../../stores/FilterStore\";\nimport { computed, onMounted, Ref, ref, watch } from \"vue\";\nimport { AxiosError } from \"axios\";\nimport { ListClassicReturn } from \"@/stores/class/general/listReturn\";\nimport { useI18n } from \"vue-i18n\";\n\n//Props \nconst props = defineProps({\n  first: { default: 0, type: Number },\n  size: { default: 30, type: Number },\n  query: { default: undefined, type: String },\n  organisationId: { default: undefined, type: String },\n})\n\n//Data \nconst loading = ref(true);\nconst dfirst = ref(props.first);\nconst dsize = ref(props.size);\nconst totalCount = ref(0);\nconst displayCount = ref(0);\nconst isMobile = ref(false);\nconst playlists: Ref<Array<Playlist>> = ref([]);\n\n\n//Composables\nconst { t } = useI18n();\nconst {handle403} = useErrorHandler();\nconst filterStore = useFilterStore();\n\n\n//Computed\nconst displayArray = computed(() => {\n  if (isMobile.value) {\n    return playlists.value;\n  }\n  return playlists.value.slice(\n    dfirst.value,\n    Math.min(dfirst.value + dsize.value, totalCount.value),\n  );\n});\nconst changed = computed(() => `${props.organisationId}|${props.query}`);\nconst changePaginate = computed(() => `${props.first}|${props.size}`);\nconst sort = computed(() => !props.query ? \"NAME\" : \"SCORE\");\nconst organisation = computed(() => props.organisationId ? props.organisationId : filterStore.filterOrgaId);\n\n\n//Watch\nwatch(changePaginate, () => {\n  dfirst.value = props.first;\n  dsize.value = props.size;\n});\nwatch(changed, () => fetchContent(true));\nwatch(dsize, () =>fetchContent(true));\nwatch(dfirst, () => {\n  if (\n    !playlists.value[dfirst.value] ||\n    0 === playlists.value[dfirst.value].playlistId\n  ) {\n    fetchContent(false);\n  }\n});\n\nonMounted(()=>fetchContent(false))\n\n\n//Methods\nasync function fetchContent(reset: boolean): Promise<void> {\n  loading.value = true;\n  const param = {\n    first: reset ? 0 : dfirst.value,\n    size: dsize.value,\n    query: props.query,\n    organisationId: organisation.value,\n    type: \"NONE\",\n    sort: sort.value,\n  };\n  try {\n    const data = await classicApi.fetchData<ListClassicReturn<Playlist>>({\n      api: 0,\n      path: \"playlist/search\",\n      parameters: param,\n      specialTreatement: true,\n    });\n    afterFetching(reset, data);\n  } catch (error) {\n    handle403(error as AxiosError);\n  }\n}\nfunction afterFetching(\n  reset: boolean,\n  data: { count: number; result: Array<Playlist>; sort: string },\n): void {\n  if (reset) {\n    dfirst.value = 0;\n    playlists.value.length = 0;\n  }\n  if (dfirst.value > playlists.value.length) {\n    for (\n      let i = playlists.value.length - 1, len = dfirst.value + dsize.value;\n      i < len;\n      i++\n    ) {\n      playlists.value.push(emptyPlaylistData());\n    }\n  }\n  displayCount.value = data.count;\n  const responsePlaylists = data.result.filter((e: Playlist | null) => {\n    if (null === e) {\n      displayCount.value--;\n    }\n    return null !== e;\n  });\n  playlists.value = playlists.value\n    .slice(0, dfirst.value)\n    .concat(responsePlaylists)\n    .concat(\n      playlists.value.slice(dfirst.value + dsize.value, playlists.value.length),\n    );\n  totalCount.value = data.count;\n  loading.value = false;\n}\n</script>\n","<template>\n  <ListPaginate\n    id=\"playlistListPaginate\"\n    v-model:first=\"dfirst\"\n    v-model:rows-per-page=\"dsize\"\n    v-model:is-mobile=\"isMobile\"\n    :text-count=\"\n      displayCount > 1\n        ? `${t('Number playlists', { nb: displayCount })}`\n        : undefined\n    \"\n    :total-count=\"totalCount\"\n    :loading=\"loading\"\n    :loading-text=\"loading ? t('Loading content ...') : undefined\"\n    :player-responsive=\"true\"\n  >\n    <template #list>\n      <div class=\"octopus-element-list two-items-list\">\n        <ClassicLazy\n          v-for=\"p in displayArray\"\n          :key=\"p.playlistId\"\n          :min-height=\"250\"\n          class=\"d-flex flex-column flex-grow-1\"\n        >\n          <PlaylistItem v-if=\"0 !== p.playlistId\" :playlist=\"p\" />\n          <template #preview>\n            <router-link\n              :to=\"{\n                name: 'playlist',\n                params: { playlistId: p.playlistId },\n              }\"\n              :title=\"t('Playlist name page', { name: p.title })\"\n            >\n              {{ p.title }}\n            </router-link>\n          </template>\n        </ClassicLazy>\n      </div>\n    </template>\n  </ListPaginate>\n</template>\n\n<script setup lang=\"ts\">\nimport ClassicLazy from \"../../misc/ClassicLazy.vue\";\nimport ListPaginate from \"../list/ListPaginate.vue\";\nimport {useErrorHandler} from \"../../composable/useErrorHandler\";\nimport classicApi from \"../../../api/classicApi\";\nimport PlaylistItem from \"./PlaylistItem.vue\";\nimport { Playlist, emptyPlaylistData } from \"@/stores/class/general/playlist\";\nimport { useFilterStore } from \"../../../stores/FilterStore\";\nimport { computed, onMounted, Ref, ref, watch } from \"vue\";\nimport { AxiosError } from \"axios\";\nimport { ListClassicReturn } from \"@/stores/class/general/listReturn\";\nimport { useI18n } from \"vue-i18n\";\n\n//Props \nconst props = defineProps({\n  first: { default: 0, type: Number },\n  size: { default: 30, type: Number },\n  query: { default: undefined, type: String },\n  organisationId: { default: undefined, type: String },\n})\n\n//Data \nconst loading = ref(true);\nconst dfirst = ref(props.first);\nconst dsize = ref(props.size);\nconst totalCount = ref(0);\nconst displayCount = ref(0);\nconst isMobile = ref(false);\nconst playlists: Ref<Array<Playlist>> = ref([]);\n\n\n//Composables\nconst { t } = useI18n();\nconst {handle403} = useErrorHandler();\nconst filterStore = useFilterStore();\n\n\n//Computed\nconst displayArray = computed(() => {\n  if (isMobile.value) {\n    return playlists.value;\n  }\n  return playlists.value.slice(\n    dfirst.value,\n    Math.min(dfirst.value + dsize.value, totalCount.value),\n  );\n});\nconst changed = computed(() => `${props.organisationId}|${props.query}`);\nconst changePaginate = computed(() => `${props.first}|${props.size}`);\nconst sort = computed(() => !props.query ? \"NAME\" : \"SCORE\");\nconst organisation = computed(() => props.organisationId ? props.organisationId : filterStore.filterOrgaId);\n\n\n//Watch\nwatch(changePaginate, () => {\n  dfirst.value = props.first;\n  dsize.value = props.size;\n});\nwatch(changed, () => fetchContent(true));\nwatch(dsize, () =>fetchContent(true));\nwatch(dfirst, () => {\n  if (\n    !playlists.value[dfirst.value] ||\n    0 === playlists.value[dfirst.value].playlistId\n  ) {\n    fetchContent(false);\n  }\n});\n\nonMounted(()=>fetchContent(false))\n\n\n//Methods\nasync function fetchContent(reset: boolean): Promise<void> {\n  loading.value = true;\n  const param = {\n    first: reset ? 0 : dfirst.value,\n    size: dsize.value,\n    query: props.query,\n    organisationId: organisation.value,\n    type: \"NONE\",\n    sort: sort.value,\n  };\n  try {\n    const data = await classicApi.fetchData<ListClassicReturn<Playlist>>({\n      api: 0,\n      path: \"playlist/search\",\n      parameters: param,\n      specialTreatement: true,\n    });\n    afterFetching(reset, data);\n  } catch (error) {\n    handle403(error as AxiosError);\n  }\n}\nfunction afterFetching(\n  reset: boolean,\n  data: { count: number; result: Array<Playlist>; sort: string },\n): void {\n  if (reset) {\n    dfirst.value = 0;\n    playlists.value.length = 0;\n  }\n  if (dfirst.value > playlists.value.length) {\n    for (\n      let i = playlists.value.length - 1, len = dfirst.value + dsize.value;\n      i < len;\n      i++\n    ) {\n      playlists.value.push(emptyPlaylistData());\n    }\n  }\n  displayCount.value = data.count;\n  const responsePlaylists = data.result.filter((e: Playlist | null) => {\n    if (null === e) {\n      displayCount.value--;\n    }\n    return null !== e;\n  });\n  playlists.value = playlists.value\n    .slice(0, dfirst.value)\n    .concat(responsePlaylists)\n    .concat(\n      playlists.value.slice(dfirst.value + dsize.value, playlists.value.length),\n    );\n  totalCount.value = data.count;\n  loading.value = false;\n}\n</script>\n","<template>\n  <section v-if=\"isInit\" class=\"page-box\">\n    <router-link\n      v-if=\"isRolePlaylists && !isPodcastmaker\"\n      to=\"/main/priv/edit/playlist\"\n      class=\"d-flex justify-content-center my-3\"\n    >\n      <div class=\"btn btn-primary\">\n        {{ t(\"Create playlist\") }}\n      </div>\n    </router-link>\n    <ProductorSearch\n      v-model:organisation-id=\"organisationId\"\n      v-model:search-pattern=\"searchPattern\"\n      type=\"playlist\"\n    />\n    <PlaylistList\n      :show-count=\"true\"\n      :first=\"paginateFirst\"\n      :size=\"ps\"\n      :query=\"searchMinSize\"\n      :organisation-id=\"organisationId\"\n    />\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nimport { useSimplePageParam } from \"../composable/route/useSimplePageParam\";\nimport PlaylistList from \"../display/playlist/PlaylistList.vue\";\nimport { useAuthStore } from \"../../stores/AuthStore\";\nimport { state } from \"../../stores/ParamSdkStore\";\nimport {  computed, defineAsyncComponent } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\nconst ProductorSearch = defineAsyncComponent(\n  () => import(\"../display/filter/ProductorSearch.vue\"),\n);\n\n//Props\nconst props = defineProps({\n  pr: { default: 0, type: Number },\n  ps: { default: 30, type: Number },\n  routeOrga: { default: undefined, type: String },\n  routeQuery: { default: \"\", type: String },\n});\n\n\n//Composables\nconst { t } = useI18n();\nconst {\n  searchPattern,\n  organisationId,\n  searchMinSize,\n  paginateFirst,\n  isInit\n} = useSimplePageParam(props);\nconst authStore = useAuthStore();\n\n\n//Computed\nconst isPodcastmaker = computed(() =>state.generalParameters.podcastmaker as boolean);\nconst isRolePlaylists = computed(() =>authStore.isRolePlaylists);\n\n</script>\n","<template>\n  <section v-if=\"isInit\" class=\"page-box\">\n    <router-link\n      v-if=\"isRolePlaylists && !isPodcastmaker\"\n      to=\"/main/priv/edit/playlist\"\n      class=\"d-flex justify-content-center my-3\"\n    >\n      <div class=\"btn btn-primary\">\n        {{ t(\"Create playlist\") }}\n      </div>\n    </router-link>\n    <ProductorSearch\n      v-model:organisation-id=\"organisationId\"\n      v-model:search-pattern=\"searchPattern\"\n      type=\"playlist\"\n    />\n    <PlaylistList\n      :show-count=\"true\"\n      :first=\"paginateFirst\"\n      :size=\"ps\"\n      :query=\"searchMinSize\"\n      :organisation-id=\"organisationId\"\n    />\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nimport { useSimplePageParam } from \"../composable/route/useSimplePageParam\";\nimport PlaylistList from \"../display/playlist/PlaylistList.vue\";\nimport { useAuthStore } from \"../../stores/AuthStore\";\nimport { state } from \"../../stores/ParamSdkStore\";\nimport {  computed, defineAsyncComponent } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\nconst ProductorSearch = defineAsyncComponent(\n  () => import(\"../display/filter/ProductorSearch.vue\"),\n);\n\n//Props\nconst props = defineProps({\n  pr: { default: 0, type: Number },\n  ps: { default: 30, type: Number },\n  routeOrga: { default: undefined, type: String },\n  routeQuery: { default: \"\", type: String },\n});\n\n\n//Composables\nconst { t } = useI18n();\nconst {\n  searchPattern,\n  organisationId,\n  searchMinSize,\n  paginateFirst,\n  isInit\n} = useSimplePageParam(props);\nconst authStore = useAuthStore();\n\n\n//Computed\nconst isPodcastmaker = computed(() =>state.generalParameters.podcastmaker as boolean);\nconst isRolePlaylists = computed(() =>authStore.isRolePlaylists);\n\n</script>\n"],"mappings":"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"}