{"version":3,"file":"TopBar-fuXUSGGb.mjs","names":[],"sources":["../src/components/misc/RightsScopeSelector.vue","../src/components/misc/RightsScopeSelector.vue","../src/components/misc/TopBarMainContent.vue","../src/components/misc/TopBarMainContent.vue","../src/components/misc/TopBar.vue","../src/components/misc/TopBar.vue"],"sourcesContent":["<template>\n    <div\n        v-if=\"subOrganisations.length > 0\"\n        class=\"d-flex flex-column ms-4\"\n    >\n        <span class=\"label mb-1\">Filtrage du contenu ({{ rubriquage?.title }})</span>\n        <div class=\"d-flex selected\">\n            <span class=\"me-2\">{{ selectedSubOrganisation?.name ?? 'Aucun filtrage' }}</span>\n            <SwapIcon @click=\"$emit('change')\" />\n            <ClearIcon v-if=\"selectedSubOrganisation\" />\n        </div>\n    </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { useAuthStore } from \"../../stores/AuthStore\";\nimport { ref, toRef, watch } from \"vue\";\nimport { useSubOrganisations } from \"../composable/useSubOrganisations\";\nimport { Rubriquage } from \"@/stores/class/rubrique/rubriquage\";\nimport { rubriquesApi } from \"@/api\";\n\nimport SwapIcon from \"vue-material-design-icons/SwapHorizontalCircleOutline.vue\";\nimport ClearIcon from \"vue-material-design-icons/CloseCircleOutline.vue\";\n\n//Composables\nconst authStore = useAuthStore();\nconst authOrgaId = toRef(authStore, 'authOrgaId');\nconst rubriquage = ref<Rubriquage|null>(null);\nconst {\n    selectedSubOrganisation,\n    subOrganisations\n} = useSubOrganisations(authOrgaId);\n\ndefineEmits<{\n    (e: 'change'): void;\n}>();\n\nwatch(authOrgaId, async () => {\n    rubriquage.value = await rubriquesApi.findRestrictiveRubriquage(authOrgaId.value);\n}, { immediate: true });\n</script>\n\n<style scoped lang=\"scss\">\n#header-scope-selector:deep(.octopus-select-field) {\n    background: transparent;\n    border-color: rgba(255, 255, 255, 0.1);\n    margin-left: 200px;\n\n    .octopus-select-value {\n        color: var(--octopus-secondary);\n        font-weight: bold;\n        align-content: center;\n    }\n\n    input {\n        color: white;\n    }\n\n    button {\n        color: rgba(255, 255, 255, 0.3);\n    }\n}\n\n.selected {\n    color: var(--octopus-secondary);\n    font-weight: bold;\n    align-content: center;\n    align-items: center;\n}\n\n.label {\n    color: rgba(255, 255, 255, 0.3);\n    font-weight: 600;\n    font-style: italic;\n    font-size: 14px;\n    white-space: nowrap;\n    overflow-y: visible;\n}\n</style>\n","<template>\n    <div\n        v-if=\"subOrganisations.length > 0\"\n        class=\"d-flex flex-column ms-4\"\n    >\n        <span class=\"label mb-1\">Filtrage du contenu ({{ rubriquage?.title }})</span>\n        <div class=\"d-flex selected\">\n            <span class=\"me-2\">{{ selectedSubOrganisation?.name ?? 'Aucun filtrage' }}</span>\n            <SwapIcon @click=\"$emit('change')\" />\n            <ClearIcon v-if=\"selectedSubOrganisation\" />\n        </div>\n    </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { useAuthStore } from \"../../stores/AuthStore\";\nimport { ref, toRef, watch } from \"vue\";\nimport { useSubOrganisations } from \"../composable/useSubOrganisations\";\nimport { Rubriquage } from \"@/stores/class/rubrique/rubriquage\";\nimport { rubriquesApi } from \"@/api\";\n\nimport SwapIcon from \"vue-material-design-icons/SwapHorizontalCircleOutline.vue\";\nimport ClearIcon from \"vue-material-design-icons/CloseCircleOutline.vue\";\n\n//Composables\nconst authStore = useAuthStore();\nconst authOrgaId = toRef(authStore, 'authOrgaId');\nconst rubriquage = ref<Rubriquage|null>(null);\nconst {\n    selectedSubOrganisation,\n    subOrganisations\n} = useSubOrganisations(authOrgaId);\n\ndefineEmits<{\n    (e: 'change'): void;\n}>();\n\nwatch(authOrgaId, async () => {\n    rubriquage.value = await rubriquesApi.findRestrictiveRubriquage(authOrgaId.value);\n}, { immediate: true });\n</script>\n\n<style scoped lang=\"scss\">\n#header-scope-selector:deep(.octopus-select-field) {\n    background: transparent;\n    border-color: rgba(255, 255, 255, 0.1);\n    margin-left: 200px;\n\n    .octopus-select-value {\n        color: var(--octopus-secondary);\n        font-weight: bold;\n        align-content: center;\n    }\n\n    input {\n        color: white;\n    }\n\n    button {\n        color: rgba(255, 255, 255, 0.3);\n    }\n}\n\n.selected {\n    color: var(--octopus-secondary);\n    font-weight: bold;\n    align-content: center;\n    align-items: center;\n}\n\n.label {\n    color: rgba(255, 255, 255, 0.3);\n    font-weight: 600;\n    font-style: italic;\n    font-size: 14px;\n    white-space: nowrap;\n    overflow-y: visible;\n}\n</style>\n","<template>\n    <div class=\"top-bar-grid header-content\" :class=\"{ scrolled: titleIsDisplayed }\">\n        <div class=\"d-flex align-items-center\">\n            <!-- Logo to the left -->\n            <router-link\n                class=\"top-bar-logo d-block\"\n                :to=\"{\n                    name: 'home',\n                    query: getQueriesRouter('home'),\n                }\"\n                :title=\"t('Home')\"\n            >\n                <img\n                    v-if=\"!filterStore.filterOrgaId || '' === imgUrl\"\n                    :src=\"logoUrl\"\n                    aria-hidden=\"true\"\n                    alt=\"\"\n                    width=\"140\"\n                    height=\"50\"\n                    title=\"Logo\"\n                    :class=\"generalStore.platformEducation ? 'education-logo' : 'octopus-logo'\"\n                >\n                <img\n                    v-else\n                    :src=\"useProxyImageUrl(imgUrl, '', '80')\"\n                    aria-hidden=\"true\"\n                    alt=\"\"\n                    class=\"client-logo\"\n                    title=\"Logo\"\n                    :class=\"generalStore.platformEducation ? 'education-logo' : ''\"\n                >\n            </router-link>\n\n            <RightsScopeSelector class=\"ms-4\" />\n        </div>\n\n        <h1 v-if=\"titleIsDisplayed\" class=\"text-truncate m-0 align-self-center\">\n            {{ titleDisplay }}\n        </h1>\n\n        <!-- Right section -->\n        <div\n            class=\"d-flex right-section\"\n            :class=\"[\n                inContentDisplayPage || isPhone\n                    ? 'flex-row-reverse align-items-center'\n                    : 'flex-column align-items-end',\n            ]\"\n        >\n            <!-- Logo to the right -->\n            <template v-if=\"filterStore.filterOrgaId && '' !== imgUrl\">\n                <img\n                    v-if=\"authStore.isGarRole\"\n                    :src=\"logoUrl\"\n                    aria-hidden=\"true\"\n                    alt=\"\"\n                    width=\"100\"\n                    height=\"29\"\n                    class=\"ms-2\"\n                    title=\"Logo\"\n                    :class=\"generalStore.platformEducation ? 'education-logo' : 'octopus-logo'\"\n                >\n                <a\n                    v-else\n                    href=\"https://www.saooti.com/\"\n                    target=\"_blank\"\n                    rel=\"noreferrer noopener\"\n                    :title=\"t('New window', {text: 'Saooti'})\"\n                >\n                    <img\n                        :src=\"logoUrl\"\n                        aria-hidden=\"true\"\n                        alt=\"\"\n                        title=\"Saooti\"\n                        width=\"100\"\n                        height=\"29\"\n                        class=\"ms-2\"\n                        :class=\"generalStore.platformEducation ? 'education-logo' : 'octopus-logo'\"\n                    >\n                </a>\n            </template>\n\n            <div role=\"navigation\" class=\"d-flex align-items-center justify-content-end flex-grow-1\">\n                <nav :aria-label=\"t('Site menu')\">\n                    <ul class=\"d-flex\">\n                        <template v-for=\"link in routerLinkArray\" :key=\"link.routeName\">\n                            <li v-if=\"link.condition\" class=\"li-style-none\">\n                                <router-link\n                                    v-show=\"!isPhone\"\n                                    :to=\"{\n                                        name: link.routeName,\n                                        query: getQueriesRouter(link.routeName),\n                                    }\"\n                                    class=\"link-hover py-2 px-3\"\n                                >\n                                    {{ link.title }}\n                                </router-link>\n                            </li>\n                        </template>\n                    </ul>\n                </nav>\n                <button\n                    v-show=\"!isPhone && !inContentDisplayPage\"\n                    id=\"more-dropdown\"\n                    :title=\"t('More')\"\n                    class=\"d-flex-column flex-nowrap align-items-center btn-transparent py-2 px-3 text-white\"\n                >\n                    <span class=\"link-hover\">\n                        {{ t(\"More\") }}\n                    </span>\n                    <ChevronDownIcon />\n                </button>\n                <ClassicPopover\n                    target=\"more-dropdown\"\n                    :only-click=\"true\"\n                    :is-fixed=\"true\"\n                    :left-pos=\"true\"\n                    :is-top-layer=\"true\"\n                >\n                    <nav class=\"d-flex flex-column\" :aria-label=\"t('Site menu')\">\n                        <ul class=\"p-0 m-0\">\n                            <template v-for=\"link in routerLinkInsideArray\" :key=\"link.routeName\">\n                                <li\n                                    v-if=\"link.condition\"\n                                    class=\"li-style-none\"\n                                >\n                                    <router-link\n                                        :to=\"{\n                                            name: link.routeName,\n                                            query: getQueriesRouter(link.routeName),\n                                        }\"\n                                        class=\"p-1 octopus-dropdown-item\"\n                                    >\n                                        {{ link.title }}\n                                    </router-link>\n                                </li>\n                            </template>\n                        </ul>\n                    </nav>\n                </ClassicPopover>\n\n                <MobileMenu\n                    :is-education=\"generalStore.platformEducation\"\n                    :show=\"mobileMenuDisplay\"\n                    :not-podcast-and-emission=\"inContentDisplayPage && !scrolled\"\n                />\n                <HomeDropdown\n                    :is-education=\"generalStore.platformEducation\"\n                    :mobile-menu-display=\"mobileMenuDisplay\"\n                    v-bind=\"options?.homeDropdown\"\n                />\n                <router-link\n                    v-show=\"!isPhone && !inContentDisplayPage\"\n                    :title=\"t('Search')\"\n                    :to=\"{\n                        name: 'podcasts',\n                    }\"\n                    class=\"btn admin-button m-1 text-blue-octopus\"\n                    role=\"search\"\n                >\n                    <MagnifyIcon :size=\"30\" />\n                </router-link>\n            </div>\n        </div>\n    </div>\n</template>\n\n<script setup lang=\"ts\">\nimport ChevronDownIcon from \"vue-material-design-icons/ChevronDown.vue\";\nimport MagnifyIcon from \"vue-material-design-icons/Magnify.vue\";\nimport { useRubriquesFilterComputed } from \"../composable/route/useRubriquesFilterComputed\";\nimport { state } from \"../../stores/ParamSdkStore\";\nimport HomeDropdown, { type HomeDropdownProps } from \"./HomeDropdown.vue\";\nimport {useImageProxy} from \"../composable/useImageProxy\";\nimport { useFilterStore } from \"../../stores/FilterStore\";\nimport { useAuthStore } from \"../../stores/AuthStore\";\nimport ClassicPopover from \"../misc/ClassicPopover.vue\";\nimport { defineAsyncComponent, computed, ref } from \"vue\";\nimport { useGeneralStore } from \"../../stores/GeneralStore\";\nimport { useI18n } from \"vue-i18n\";\nimport RightsScopeSelector from \"./RightsScopeSelector.vue\";\nimport RightsScopeMenu from \"./RightsScopeMenu.vue\"; \nconst MobileMenu = defineAsyncComponent(() => import(\"./MobileMenu.vue\"));\n\nexport interface TopBarMainContentOptions {\n    homeDropdown?: HomeDropdownProps;\n}\n\nexport interface TopBarMainContentProps {\n    isPhone?: boolean;\n    titleDisplay?: string;\n    scrolled?: boolean;\n};\n\n//Props \nconst props = defineProps<TopBarMainContentProps & {\n    /** Props for subcomponents */\n    options?: TopBarMainContentOptions;\n}>();\n\n\n//Composables\nconst { t } = useI18n();\nconst { useProxyImageUrl } = useImageProxy();\nconst { rubriqueQueryParam } = useRubriquesFilterComputed();\nconst authStore = useAuthStore();\nconst generalStore = useGeneralStore();\nconst filterStore = useFilterStore();\n\n//Computed\nconst mobileMenuDisplay = computed(() => props.isPhone || inContentDisplayPage.value);\nconst titleIsDisplayed = computed(() => inContentDisplayPage.value && props.scrolled && !props.isPhone);\nconst inContentDisplayPage = computed(() => 0 !== props.titleDisplay.length);\nconst routerLinkArray = computed(() => [{\n    title: t(\"Radio & Live\"),\n    routeName: \"lives\",\n    condition:\n        !inContentDisplayPage.value &&\n        (state.generalParameters.isLiveTab as boolean) &&\n        ((filterStore.filterOrgaId && filterStore.filterLive) || !filterStore.filterOrgaId),\n}, {\n    title: t(\"Podcasts\"),\n    routeName: \"podcasts\",\n    condition:\n        !inContentDisplayPage.value ||\n        (inContentDisplayPage.value && !props.scrolled),\n}, {\n    title: t(\"Emissions\"),\n    routeName: \"emissions\",\n    condition:\n        !inContentDisplayPage.value ||\n        (inContentDisplayPage.value && !props.scrolled),\n}]);\n\nconst routerLinkInsideArray = computed(() =>{\n    return [\n        {\n            title: t(\"Speakers\"),\n            routeName: \"participants\",\n            condition: true,\n        },\n        {\n            title: t(\"Playlists\"),\n            routeName: \"playlists\",\n            condition: true,\n        },\n        {\n            title: t(\"Productors\"),\n            routeName: \"productors\",\n            condition:\n                !state.generalParameters.podcastmaker && (!filterStore.filterOrgaId || generalStore.platformEducation),\n        },\n    ];\n});\nconst logoUrl = computed(() =>{\n    if (generalStore.platformEducation) {\n        return \"/img/logo_education_white.svg\";\n    }\n    return props.isPhone\n        ? \"/img/logo_octopus_bubble.svg\"\n        : \"/img/logo_saooti_play_white.svg\";\n});\nconst imgUrl = computed(() =>{\n    if (!filterStore.filterImgUrl?.includes(\"emptypodcast\")){\n        return `${filterStore.filterImgUrl}`;\n    }\n    return \"\";\n});\n \n//Methods\nfunction getQueriesRouter(routeName: string) {\n    if (\"podcasts\" !== routeName && \"emissions\" !== routeName  && \"home\" !== routeName) {\n        return { productor: filterStore.filterOrgaId };\n    }\n    return {\n        productor: filterStore.filterOrgaId,\n        iabId: filterStore.filterIab?.id,\n        rubriquesId: rubriqueQueryParam.value,\n    };\n}\n</script>\n\n<style scoped lang=\"scss\">\n.top-bar-grid {\n    display: grid;\n    grid-template-columns: 1fr 5fr;\n    padding: 0 1rem 0 0.5rem;\n\n    &.scrolled {\n        grid-template-columns: 1fr 2fr 1fr;\n    }\n\n    @media (width <= 450px) {\n        padding: 0 0.5rem;\n    }\n\n    .link-hover {\n        color: white;\n        font-weight: bold;\n        font-size: 0.93rem;\n        text-decoration: underline;\n        text-decoration-color: transparent;\n        transition: text-decoration-color 250ms;\n        text-underline-offset: 8px;\n\n        &.link-hover:hover,\n        &.link-hover.router-link-exact-active.router-link-active {\n            color: white;\n            text-decoration-color: white;\n        }\n    }\n\n    .client-logo {\n        border-radius: var(--octopus-border-radius);\n    }\n\n    .top-bar-logo img {\n        max-width: 140px !important;\n        max-height: 4rem;\n        height: 4rem;\n\n        &.education-logo {\n            height: auto;\n        }\n\n        @media (width <= 650px) {\n            max-height: 2rem;\n        }\n    }\n\n    .octopus-logo {\n        @media (width <= 960px) {\n            max-width: 30px !important;\n        }\n    }\n}\n\n.right-section {\n    padding-top: 0.5rem;\n}\n</style>\n","<template>\n    <div class=\"top-bar-grid header-content\" :class=\"{ scrolled: titleIsDisplayed }\">\n        <div class=\"d-flex align-items-center\">\n            <!-- Logo to the left -->\n            <router-link\n                class=\"top-bar-logo d-block\"\n                :to=\"{\n                    name: 'home',\n                    query: getQueriesRouter('home'),\n                }\"\n                :title=\"t('Home')\"\n            >\n                <img\n                    v-if=\"!filterStore.filterOrgaId || '' === imgUrl\"\n                    :src=\"logoUrl\"\n                    aria-hidden=\"true\"\n                    alt=\"\"\n                    width=\"140\"\n                    height=\"50\"\n                    title=\"Logo\"\n                    :class=\"generalStore.platformEducation ? 'education-logo' : 'octopus-logo'\"\n                >\n                <img\n                    v-else\n                    :src=\"useProxyImageUrl(imgUrl, '', '80')\"\n                    aria-hidden=\"true\"\n                    alt=\"\"\n                    class=\"client-logo\"\n                    title=\"Logo\"\n                    :class=\"generalStore.platformEducation ? 'education-logo' : ''\"\n                >\n            </router-link>\n\n            <RightsScopeSelector class=\"ms-4\" />\n        </div>\n\n        <h1 v-if=\"titleIsDisplayed\" class=\"text-truncate m-0 align-self-center\">\n            {{ titleDisplay }}\n        </h1>\n\n        <!-- Right section -->\n        <div\n            class=\"d-flex right-section\"\n            :class=\"[\n                inContentDisplayPage || isPhone\n                    ? 'flex-row-reverse align-items-center'\n                    : 'flex-column align-items-end',\n            ]\"\n        >\n            <!-- Logo to the right -->\n            <template v-if=\"filterStore.filterOrgaId && '' !== imgUrl\">\n                <img\n                    v-if=\"authStore.isGarRole\"\n                    :src=\"logoUrl\"\n                    aria-hidden=\"true\"\n                    alt=\"\"\n                    width=\"100\"\n                    height=\"29\"\n                    class=\"ms-2\"\n                    title=\"Logo\"\n                    :class=\"generalStore.platformEducation ? 'education-logo' : 'octopus-logo'\"\n                >\n                <a\n                    v-else\n                    href=\"https://www.saooti.com/\"\n                    target=\"_blank\"\n                    rel=\"noreferrer noopener\"\n                    :title=\"t('New window', {text: 'Saooti'})\"\n                >\n                    <img\n                        :src=\"logoUrl\"\n                        aria-hidden=\"true\"\n                        alt=\"\"\n                        title=\"Saooti\"\n                        width=\"100\"\n                        height=\"29\"\n                        class=\"ms-2\"\n                        :class=\"generalStore.platformEducation ? 'education-logo' : 'octopus-logo'\"\n                    >\n                </a>\n            </template>\n\n            <div role=\"navigation\" class=\"d-flex align-items-center justify-content-end flex-grow-1\">\n                <nav :aria-label=\"t('Site menu')\">\n                    <ul class=\"d-flex\">\n                        <template v-for=\"link in routerLinkArray\" :key=\"link.routeName\">\n                            <li v-if=\"link.condition\" class=\"li-style-none\">\n                                <router-link\n                                    v-show=\"!isPhone\"\n                                    :to=\"{\n                                        name: link.routeName,\n                                        query: getQueriesRouter(link.routeName),\n                                    }\"\n                                    class=\"link-hover py-2 px-3\"\n                                >\n                                    {{ link.title }}\n                                </router-link>\n                            </li>\n                        </template>\n                    </ul>\n                </nav>\n                <button\n                    v-show=\"!isPhone && !inContentDisplayPage\"\n                    id=\"more-dropdown\"\n                    :title=\"t('More')\"\n                    class=\"d-flex-column flex-nowrap align-items-center btn-transparent py-2 px-3 text-white\"\n                >\n                    <span class=\"link-hover\">\n                        {{ t(\"More\") }}\n                    </span>\n                    <ChevronDownIcon />\n                </button>\n                <ClassicPopover\n                    target=\"more-dropdown\"\n                    :only-click=\"true\"\n                    :is-fixed=\"true\"\n                    :left-pos=\"true\"\n                    :is-top-layer=\"true\"\n                >\n                    <nav class=\"d-flex flex-column\" :aria-label=\"t('Site menu')\">\n                        <ul class=\"p-0 m-0\">\n                            <template v-for=\"link in routerLinkInsideArray\" :key=\"link.routeName\">\n                                <li\n                                    v-if=\"link.condition\"\n                                    class=\"li-style-none\"\n                                >\n                                    <router-link\n                                        :to=\"{\n                                            name: link.routeName,\n                                            query: getQueriesRouter(link.routeName),\n                                        }\"\n                                        class=\"p-1 octopus-dropdown-item\"\n                                    >\n                                        {{ link.title }}\n                                    </router-link>\n                                </li>\n                            </template>\n                        </ul>\n                    </nav>\n                </ClassicPopover>\n\n                <MobileMenu\n                    :is-education=\"generalStore.platformEducation\"\n                    :show=\"mobileMenuDisplay\"\n                    :not-podcast-and-emission=\"inContentDisplayPage && !scrolled\"\n                />\n                <HomeDropdown\n                    :is-education=\"generalStore.platformEducation\"\n                    :mobile-menu-display=\"mobileMenuDisplay\"\n                    v-bind=\"options?.homeDropdown\"\n                />\n                <router-link\n                    v-show=\"!isPhone && !inContentDisplayPage\"\n                    :title=\"t('Search')\"\n                    :to=\"{\n                        name: 'podcasts',\n                    }\"\n                    class=\"btn admin-button m-1 text-blue-octopus\"\n                    role=\"search\"\n                >\n                    <MagnifyIcon :size=\"30\" />\n                </router-link>\n            </div>\n        </div>\n    </div>\n</template>\n\n<script setup lang=\"ts\">\nimport ChevronDownIcon from \"vue-material-design-icons/ChevronDown.vue\";\nimport MagnifyIcon from \"vue-material-design-icons/Magnify.vue\";\nimport { useRubriquesFilterComputed } from \"../composable/route/useRubriquesFilterComputed\";\nimport { state } from \"../../stores/ParamSdkStore\";\nimport HomeDropdown, { type HomeDropdownProps } from \"./HomeDropdown.vue\";\nimport {useImageProxy} from \"../composable/useImageProxy\";\nimport { useFilterStore } from \"../../stores/FilterStore\";\nimport { useAuthStore } from \"../../stores/AuthStore\";\nimport ClassicPopover from \"../misc/ClassicPopover.vue\";\nimport { defineAsyncComponent, computed, ref } from \"vue\";\nimport { useGeneralStore } from \"../../stores/GeneralStore\";\nimport { useI18n } from \"vue-i18n\";\nimport RightsScopeSelector from \"./RightsScopeSelector.vue\";\nimport RightsScopeMenu from \"./RightsScopeMenu.vue\"; \nconst MobileMenu = defineAsyncComponent(() => import(\"./MobileMenu.vue\"));\n\nexport interface TopBarMainContentOptions {\n    homeDropdown?: HomeDropdownProps;\n}\n\nexport interface TopBarMainContentProps {\n    isPhone?: boolean;\n    titleDisplay?: string;\n    scrolled?: boolean;\n};\n\n//Props \nconst props = defineProps<TopBarMainContentProps & {\n    /** Props for subcomponents */\n    options?: TopBarMainContentOptions;\n}>();\n\n\n//Composables\nconst { t } = useI18n();\nconst { useProxyImageUrl } = useImageProxy();\nconst { rubriqueQueryParam } = useRubriquesFilterComputed();\nconst authStore = useAuthStore();\nconst generalStore = useGeneralStore();\nconst filterStore = useFilterStore();\n\n//Computed\nconst mobileMenuDisplay = computed(() => props.isPhone || inContentDisplayPage.value);\nconst titleIsDisplayed = computed(() => inContentDisplayPage.value && props.scrolled && !props.isPhone);\nconst inContentDisplayPage = computed(() => 0 !== props.titleDisplay.length);\nconst routerLinkArray = computed(() => [{\n    title: t(\"Radio & Live\"),\n    routeName: \"lives\",\n    condition:\n        !inContentDisplayPage.value &&\n        (state.generalParameters.isLiveTab as boolean) &&\n        ((filterStore.filterOrgaId && filterStore.filterLive) || !filterStore.filterOrgaId),\n}, {\n    title: t(\"Podcasts\"),\n    routeName: \"podcasts\",\n    condition:\n        !inContentDisplayPage.value ||\n        (inContentDisplayPage.value && !props.scrolled),\n}, {\n    title: t(\"Emissions\"),\n    routeName: \"emissions\",\n    condition:\n        !inContentDisplayPage.value ||\n        (inContentDisplayPage.value && !props.scrolled),\n}]);\n\nconst routerLinkInsideArray = computed(() =>{\n    return [\n        {\n            title: t(\"Speakers\"),\n            routeName: \"participants\",\n            condition: true,\n        },\n        {\n            title: t(\"Playlists\"),\n            routeName: \"playlists\",\n            condition: true,\n        },\n        {\n            title: t(\"Productors\"),\n            routeName: \"productors\",\n            condition:\n                !state.generalParameters.podcastmaker && (!filterStore.filterOrgaId || generalStore.platformEducation),\n        },\n    ];\n});\nconst logoUrl = computed(() =>{\n    if (generalStore.platformEducation) {\n        return \"/img/logo_education_white.svg\";\n    }\n    return props.isPhone\n        ? \"/img/logo_octopus_bubble.svg\"\n        : \"/img/logo_saooti_play_white.svg\";\n});\nconst imgUrl = computed(() =>{\n    if (!filterStore.filterImgUrl?.includes(\"emptypodcast\")){\n        return `${filterStore.filterImgUrl}`;\n    }\n    return \"\";\n});\n \n//Methods\nfunction getQueriesRouter(routeName: string) {\n    if (\"podcasts\" !== routeName && \"emissions\" !== routeName  && \"home\" !== routeName) {\n        return { productor: filterStore.filterOrgaId };\n    }\n    return {\n        productor: filterStore.filterOrgaId,\n        iabId: filterStore.filterIab?.id,\n        rubriquesId: rubriqueQueryParam.value,\n    };\n}\n</script>\n\n<style scoped lang=\"scss\">\n.top-bar-grid {\n    display: grid;\n    grid-template-columns: 1fr 5fr;\n    padding: 0 1rem 0 0.5rem;\n\n    &.scrolled {\n        grid-template-columns: 1fr 2fr 1fr;\n    }\n\n    @media (width <= 450px) {\n        padding: 0 0.5rem;\n    }\n\n    .link-hover {\n        color: white;\n        font-weight: bold;\n        font-size: 0.93rem;\n        text-decoration: underline;\n        text-decoration-color: transparent;\n        transition: text-decoration-color 250ms;\n        text-underline-offset: 8px;\n\n        &.link-hover:hover,\n        &.link-hover.router-link-exact-active.router-link-active {\n            color: white;\n            text-decoration-color: white;\n        }\n    }\n\n    .client-logo {\n        border-radius: var(--octopus-border-radius);\n    }\n\n    .top-bar-logo img {\n        max-width: 140px !important;\n        max-height: 4rem;\n        height: 4rem;\n\n        &.education-logo {\n            height: auto;\n        }\n\n        @media (width <= 650px) {\n            max-height: 2rem;\n        }\n    }\n\n    .octopus-logo {\n        @media (width <= 960px) {\n            max-width: 30px !important;\n        }\n    }\n}\n\n.right-section {\n    padding-top: 0.5rem;\n}\n</style>\n","<template>\n  <header\n    role=\"banner\"\n    class=\"header-saooti-play\"\n    :style=\"headerBackgroundImage\"\n    :class=\"[generalStore.contentToDisplay ? 'header-img-bg':'bg-gradient', scrolled? 'scrolled':'', needToBlur ? 'header-force-blur':'']\"\n  >\n    <TopBarMainContent\n      :is-phone=\"isPhone\"\n      :scrolled=\"scrolled\"\n      :title-display=\"titleToDisplay\"\n      style=\"height: var(--header-size);\"\n      :class=\"headerBackgroundImage.length ? 'header-opacity':''\"\n      :options=\"options?.topBarMainContent\"\n    />\n  </header>\n\n  <div\n    v-if=\"generalStore.contentToDisplay\"\n    class=\"header-content-bg\"\n    :style=\"headerBackgroundImage\"\n    :class=\"{ scrolled: scrolled, 'header-force-blur':needToBlur }\"\n  >\n    <div class=\"header-additional-content header-content\">\n      <h1 v-if=\"!scrolled\" class=\"text-truncate\">\n        {{ titleToDisplay }}\n      </h1>\n      <SubscribeButtons\n        v-if=\"!authStore.isGarRole && content\"\n        v-show=\"!scrolled\"\n        :content=\"content\"\n        :window-width=\"windowWidth\"\n      />\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {useImageProxy} from \"../composable/useImageProxy\";\nimport TopBarMainContent, { type TopBarMainContentOptions } from \"./TopBarMainContent.vue\";\nimport { computed, defineAsyncComponent, onBeforeUnmount, onMounted, ref, watch } from \"vue\";\nimport { useAuthStore } from \"../../stores/AuthStore\";\nimport { useGeneralStore } from \"../../stores/GeneralStore\";\nimport { Podcast } from \"@/stores/class/general/podcast\";\nimport { Emission } from \"@/stores/class/general/emission\";\nimport {useResizePhone} from \"../composable/useResizePhone\";\nimport { Playlist } from \"@/stores/class/general/playlist\";\nimport { Canal } from \"@/stores/class/radio/canal\";\nimport axios from \"axios\";\nconst SubscribeButtons = defineAsyncComponent(\n  () => import(\"../display/sharing/SubscribeButtons.vue\"),\n);\n\ndefineProps<{\n  options?: {\n    topBarMainContent?: TopBarMainContentOptions\n  }\n}>();\n\n//Data \nconst scrolled = ref(false);\nconst oldScrollY = ref(0);\nconst minScroll = ref(0);\nconst headerBackgroundImage = ref(\"\");\nconst needToBlur = ref(false);\n\n\n//Composables\nconst { isPhone, windowWidth } = useResizePhone();\nconst { useProxyImageUrl } = useImageProxy();\nconst authStore = useAuthStore();\nconst generalStore = useGeneralStore();\n\n//Computed\nconst titleToDisplay = computed(() => {\n  if ((generalStore.contentToDisplay as Podcast)?.podcastId) {\n    return (generalStore.contentToDisplay as Podcast).emission.name;\n  }\n  if ((generalStore.contentToDisplay as Playlist)?.playlistId) {\n    return (generalStore.contentToDisplay as Playlist).title;\n  }\n  if ((generalStore.contentToDisplay as Emission)?.emissionId) {\n    return (generalStore.contentToDisplay as Emission).name;\n  }\n  if ((generalStore.contentToDisplay as Canal)?.id) {\n    return (generalStore.contentToDisplay as Canal).name;\n  }\n  return \"\";\n});\n\n/** The element displayed by the subscribe buttons */\nconst content = computed(() => {\n  if ((generalStore.contentToDisplay as Podcast)?.podcastId) {\n    return (generalStore.contentToDisplay as Podcast).emission;\n  }\n  if ((generalStore.contentToDisplay as Emission)?.emissionId) {\n    return generalStore.contentToDisplay as Emission;\n  }\n  if ((generalStore.contentToDisplay as Playlist)?.playlistId) {\n    return generalStore.contentToDisplay as Playlist;\n  }\n  return null;\n});\n\n//Watch\nwatch(()=>generalStore.contentToDisplay, async () => {\n  if(!generalStore.contentToDisplay){\n    headerBackgroundImage.value = \"\";\n    needToBlur.value = false;\n    return;\n  }\n  const widthAsked = window.innerWidth > 960 ? \"1600\":\"1000\";\n  const proxyUrl = useProxyImageUrl(generalStore.contentToDisplay.imageUrl, widthAsked, undefined, true);\n  try {\n    const result = await axios.get(proxyUrl);\n    headerBackgroundImage.value = `background-image: url('${result.data}');`;\n    needToBlur.value = result.data === generalStore.contentToDisplay.imageUrl;\n  } catch {\n    if (generalStore.contentToDisplay.imageUrl) {\n      const url = encodeURI(generalStore.contentToDisplay.imageUrl);\n      headerBackgroundImage.value = `background-image: url('${url}');`;\n      needToBlur.value = true;\n    } else {\n      headerBackgroundImage.value = '';\n    }\n  }\n}, {deep: true, immediate: true});\n\n\nonMounted(()=>{\n  window.addEventListener(\"scroll\", handleScroll);\n})\nonBeforeUnmount(() => {\n  window.removeEventListener(\"scroll\", handleScroll);\n})\n\n\n//Methods\nfunction handleScroll(): void {\n  if (\n    window.scrollY - oldScrollY.value > 0 &&\n    window.scrollY > 1 &&\n    document.body.offsetHeight - window.innerHeight > 40\n  ) {\n    if (!scrolled.value) {\n      scrolled.value = true;\n      minScroll.value = 0;\n    }\n  } else if (\n    window.scrollY - oldScrollY.value  < 0 &&\n    window.scrollY < 1 &&\n    minScroll.value > 20\n  ) {\n    scrolled.value = false;\n    minScroll.value = 0;\n  }\n  oldScrollY.value  = window.scrollY;\n  if (minScroll.value < window.scrollY) {\n    minScroll.value = window.scrollY;\n  }\n}\n</script>\n\n<style lang=\"scss\">\n.octopus-app {\n  --header-size: 5rem;\n  --header-additional-content-size: 22rem;\n  @media (width <= 650px) {\n    --header-size: 3.5rem;\n  }\n  @media (width <= 550px) {\n    --header-additional-content-size: 13rem;\n  }\n  .header-saooti-play{\n    z-index: 11;\n    position: sticky;\n    top: 0;\n    background-color: black;\n    &.header-img-bg{\n      background-position: center -20vw;\n      background-repeat: no-repeat;\n      background-size: cover;\n    }\n    &.bg-gradient, &.scrolled{\n      box-shadow: 0 2px 15px 5px var(--octopus-shadow) !important; \n    }\n  }\n  .header-content-bg{\n    background-position: center calc(calc(var(--header-size) * -1) - 20vw);\n    background-repeat: no-repeat;\n    background-size: cover;\n    width: 100%;\n    display: flex;\n    background-color: black;\n    transition: height 0.7s;\n    height: calc(var(--header-additional-content-size) - var(--header-size));\n    @starting-style {\n      height: 0rem;\n    }\n    &.scrolled {\n      height: 0rem;\n    }\n  }\n  .header-additional-content{\n    display: flex;\n    flex-direction: column;\n    flex-grow: 1;\n    width: 100%;\n  }\n  .header-additional-content, .header-opacity{\n    background: oklch(0 0 0 / 0.5);\n  }\n  .header-force-blur .header-additional-content, .header-force-blur .header-opacity{\n    backdrop-filter: blur(8px);\n  }\n  .header-content{\n    *:focus-visible {\n      box-shadow: 0 0 10px 1px white !important;\n    }\n    h1 {\n      color: white !important;\n      font-size: 1.8rem;\n      margin: 2rem 5rem;\n      @media (width <= 550px) {\n        font-size: 1rem;\n        margin: 1rem 0.5rem 0.5rem;\n      }\n    }\n    .admin-button:hover,\n    .share-btn:hover {\n      background: white;\n    }\n  }\n}\n</style>\n","<template>\n  <header\n    role=\"banner\"\n    class=\"header-saooti-play\"\n    :style=\"headerBackgroundImage\"\n    :class=\"[generalStore.contentToDisplay ? 'header-img-bg':'bg-gradient', scrolled? 'scrolled':'', needToBlur ? 'header-force-blur':'']\"\n  >\n    <TopBarMainContent\n      :is-phone=\"isPhone\"\n      :scrolled=\"scrolled\"\n      :title-display=\"titleToDisplay\"\n      style=\"height: var(--header-size);\"\n      :class=\"headerBackgroundImage.length ? 'header-opacity':''\"\n      :options=\"options?.topBarMainContent\"\n    />\n  </header>\n\n  <div\n    v-if=\"generalStore.contentToDisplay\"\n    class=\"header-content-bg\"\n    :style=\"headerBackgroundImage\"\n    :class=\"{ scrolled: scrolled, 'header-force-blur':needToBlur }\"\n  >\n    <div class=\"header-additional-content header-content\">\n      <h1 v-if=\"!scrolled\" class=\"text-truncate\">\n        {{ titleToDisplay }}\n      </h1>\n      <SubscribeButtons\n        v-if=\"!authStore.isGarRole && content\"\n        v-show=\"!scrolled\"\n        :content=\"content\"\n        :window-width=\"windowWidth\"\n      />\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {useImageProxy} from \"../composable/useImageProxy\";\nimport TopBarMainContent, { type TopBarMainContentOptions } from \"./TopBarMainContent.vue\";\nimport { computed, defineAsyncComponent, onBeforeUnmount, onMounted, ref, watch } from \"vue\";\nimport { useAuthStore } from \"../../stores/AuthStore\";\nimport { useGeneralStore } from \"../../stores/GeneralStore\";\nimport { Podcast } from \"@/stores/class/general/podcast\";\nimport { Emission } from \"@/stores/class/general/emission\";\nimport {useResizePhone} from \"../composable/useResizePhone\";\nimport { Playlist } from \"@/stores/class/general/playlist\";\nimport { Canal } from \"@/stores/class/radio/canal\";\nimport axios from \"axios\";\nconst SubscribeButtons = defineAsyncComponent(\n  () => import(\"../display/sharing/SubscribeButtons.vue\"),\n);\n\ndefineProps<{\n  options?: {\n    topBarMainContent?: TopBarMainContentOptions\n  }\n}>();\n\n//Data \nconst scrolled = ref(false);\nconst oldScrollY = ref(0);\nconst minScroll = ref(0);\nconst headerBackgroundImage = ref(\"\");\nconst needToBlur = ref(false);\n\n\n//Composables\nconst { isPhone, windowWidth } = useResizePhone();\nconst { useProxyImageUrl } = useImageProxy();\nconst authStore = useAuthStore();\nconst generalStore = useGeneralStore();\n\n//Computed\nconst titleToDisplay = computed(() => {\n  if ((generalStore.contentToDisplay as Podcast)?.podcastId) {\n    return (generalStore.contentToDisplay as Podcast).emission.name;\n  }\n  if ((generalStore.contentToDisplay as Playlist)?.playlistId) {\n    return (generalStore.contentToDisplay as Playlist).title;\n  }\n  if ((generalStore.contentToDisplay as Emission)?.emissionId) {\n    return (generalStore.contentToDisplay as Emission).name;\n  }\n  if ((generalStore.contentToDisplay as Canal)?.id) {\n    return (generalStore.contentToDisplay as Canal).name;\n  }\n  return \"\";\n});\n\n/** The element displayed by the subscribe buttons */\nconst content = computed(() => {\n  if ((generalStore.contentToDisplay as Podcast)?.podcastId) {\n    return (generalStore.contentToDisplay as Podcast).emission;\n  }\n  if ((generalStore.contentToDisplay as Emission)?.emissionId) {\n    return generalStore.contentToDisplay as Emission;\n  }\n  if ((generalStore.contentToDisplay as Playlist)?.playlistId) {\n    return generalStore.contentToDisplay as Playlist;\n  }\n  return null;\n});\n\n//Watch\nwatch(()=>generalStore.contentToDisplay, async () => {\n  if(!generalStore.contentToDisplay){\n    headerBackgroundImage.value = \"\";\n    needToBlur.value = false;\n    return;\n  }\n  const widthAsked = window.innerWidth > 960 ? \"1600\":\"1000\";\n  const proxyUrl = useProxyImageUrl(generalStore.contentToDisplay.imageUrl, widthAsked, undefined, true);\n  try {\n    const result = await axios.get(proxyUrl);\n    headerBackgroundImage.value = `background-image: url('${result.data}');`;\n    needToBlur.value = result.data === generalStore.contentToDisplay.imageUrl;\n  } catch {\n    if (generalStore.contentToDisplay.imageUrl) {\n      const url = encodeURI(generalStore.contentToDisplay.imageUrl);\n      headerBackgroundImage.value = `background-image: url('${url}');`;\n      needToBlur.value = true;\n    } else {\n      headerBackgroundImage.value = '';\n    }\n  }\n}, {deep: true, immediate: true});\n\n\nonMounted(()=>{\n  window.addEventListener(\"scroll\", handleScroll);\n})\nonBeforeUnmount(() => {\n  window.removeEventListener(\"scroll\", handleScroll);\n})\n\n\n//Methods\nfunction handleScroll(): void {\n  if (\n    window.scrollY - oldScrollY.value > 0 &&\n    window.scrollY > 1 &&\n    document.body.offsetHeight - window.innerHeight > 40\n  ) {\n    if (!scrolled.value) {\n      scrolled.value = true;\n      minScroll.value = 0;\n    }\n  } else if (\n    window.scrollY - oldScrollY.value  < 0 &&\n    window.scrollY < 1 &&\n    minScroll.value > 20\n  ) {\n    scrolled.value = false;\n    minScroll.value = 0;\n  }\n  oldScrollY.value  = window.scrollY;\n  if (minScroll.value < window.scrollY) {\n    minScroll.value = window.scrollY;\n  }\n}\n</script>\n\n<style lang=\"scss\">\n.octopus-app {\n  --header-size: 5rem;\n  --header-additional-content-size: 22rem;\n  @media (width <= 650px) {\n    --header-size: 3.5rem;\n  }\n  @media (width <= 550px) {\n    --header-additional-content-size: 13rem;\n  }\n  .header-saooti-play{\n    z-index: 11;\n    position: sticky;\n    top: 0;\n    background-color: black;\n    &.header-img-bg{\n      background-position: center -20vw;\n      background-repeat: no-repeat;\n      background-size: cover;\n    }\n    &.bg-gradient, &.scrolled{\n      box-shadow: 0 2px 15px 5px var(--octopus-shadow) !important; \n    }\n  }\n  .header-content-bg{\n    background-position: center calc(calc(var(--header-size) * -1) - 20vw);\n    background-repeat: no-repeat;\n    background-size: cover;\n    width: 100%;\n    display: flex;\n    background-color: black;\n    transition: height 0.7s;\n    height: calc(var(--header-additional-content-size) - var(--header-size));\n    @starting-style {\n      height: 0rem;\n    }\n    &.scrolled {\n      height: 0rem;\n    }\n  }\n  .header-additional-content{\n    display: flex;\n    flex-direction: column;\n    flex-grow: 1;\n    width: 100%;\n  }\n  .header-additional-content, .header-opacity{\n    background: oklch(0 0 0 / 0.5);\n  }\n  .header-force-blur .header-additional-content, .header-force-blur .header-opacity{\n    backdrop-filter: blur(8px);\n  }\n  .header-content{\n    *:focus-visible {\n      box-shadow: 0 0 10px 1px white !important;\n    }\n    h1 {\n      color: white !important;\n      font-size: 1.8rem;\n      margin: 2rem 5rem;\n      @media (width <= 550px) {\n        font-size: 1rem;\n        margin: 1rem 0.5rem 0.5rem;\n      }\n    }\n    .admin-button:hover,\n    .share-btn:hover {\n      background: white;\n    }\n  }\n}\n</style>\n"],"mappings":"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"}