{"version":3,"file":"brand-Dq6nTMy8.js","sources":["../../../scripts/components/shared/generic-cards.vue","../../../scripts/components/pages/brand-page.vue","../../../scripts/entry-points/brand.ts"],"sourcesContent":["<template>\r\n    <ul v-if=\"cards.length\" ref=\"genericCards\" class=\"generic-cards\">\r\n        <li v-for=\"(card, cardIndex) in cards\" :key=\"cardIndex\">\r\n            <div v-if=\"card.imageUrl\" class=\"-image-container\">\r\n                <a :href=\"card.link\">\r\n                    <img :src=\"card.imageUrl\" class=\"img-fit--cover -focus-center\" width=\"100%\" :alt=\"card.title\" loading=\"lazy\" />\r\n                </a>\r\n            </div>\r\n            <div class=\"-content\">\r\n                <button v-if=\"showHearts\" class=\"wl-heartable -right weglot-exclude\" :data-wl-type=\"card.wlType || wlType\" :data-wl-id=\"card.heartableUrl\" :data-wl-title=\"card.title\"></button>\r\n                <h3 class=\"-title weglot-exclude\">\r\n                    <a :href=\"card.link\" :title=\"card.title\" v-html=\"card.title\"></a>\r\n                </h3>\r\n                <div v-if=\"card.content\" class=\"-text\" v-html=\"card.content\"></div>\r\n            </div>\r\n        </li>\r\n    </ul>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n    import { GenericCard } from \"interfaces/card\";\r\n    import { enableHearts } from \"services/wanderlist\";\r\n    import { nextTick, PropType, useTemplateRef } from \"vue\";\r\n\r\n    defineProps({\r\n        cards: {\r\n            type: Array as PropType<GenericCard[]>,\r\n            required: true\r\n        },\r\n        showHearts: {\r\n            type: Boolean,\r\n            default: false\r\n        },\r\n        wlType: {\r\n            type: String,\r\n            default: \"custom-url\"\r\n        }\r\n    });\r\n\r\n    const genericCards = useTemplateRef(\"genericCards\");\r\n\r\n    nextTick(() => enableHearts(genericCards.value));\r\n</script>\r\n","<template>\r\n    <div v-if=\"isReady\" ref=\"brand-page\" class=\"product-detail brand-page\">\r\n        <top-splash-component :top-splash-data=\"topSplashData\" @promo-click=\"showTab('promotions', false)\"></top-splash-component>\r\n        <div class=\"container my-4\">\r\n            <div class=\"product-detail-overview\" data-testid=\"product-detail-overview\">\r\n                <div class=\"-info\">\r\n                    <h1 class=\"weglot-exclude\" v-html=\"supplier.companyName\"></h1>\r\n                    <h3 v-if=\"supplier.headline\" class=\"mt-2 mb-0 text--serif\" v-html=\"supplier.headline\"></h3>\r\n                    <div class=\"-description mt-2\" v-html=\"supplier.description\"></div>\r\n                    <div class=\"mt-3\">Many of these perks and amenities are only available when you book your stay through a Virtuoso travel advisor.</div>\r\n                    <a v-if=\"!isNetworkUser() && !isEmbeddedMode()\" class=\"mt-2 btn btn-primary-emphasis btn-sm d-block\" :href=\"advisorCatalogLink\" v-html=\"findAnAdvisorLabel\"></a>\r\n                </div>\r\n                <div class=\"-gallery mt-5 mt-md-0\">\r\n                    <image-gallery-component v-if=\"supplier.galleryImages && supplier.galleryImages.length\"\r\n                                             :gallery-data=\"supplier.galleryImages\"\r\n                                             :product-id=\"supplier.id.toString()\"\r\n                                             :product-name=\"supplier.companyName\"\r\n                                             :product-type=\"productType\"></image-gallery-component>\r\n                    <a v-if=\"!isConsumer() && !isEmbeddedMode()\" :class=\"['mt-2 btn btn-sm btn-secondary d-block', isAnonymous() ? 'd-none' : '']\" :href=\"legacyLink\" @click=\"handleLegacyLinkClick\">{{ legacyLinkLabel }}</a>\r\n                    <button class=\"wl-heartable -save-this mt-3\" :data-wl-type=\"wlType\" :data-wl-id=\"heartableUrl\" :data-wl-title=\"supplier.companyName\" aria-label=\"Save to Wanderlist\"></button>\r\n                </div>\r\n            </div>\r\n        </div>\r\n\r\n        <section v-if=\"showFeaturedProduct\" :class=\"['container-fluid feature-item mb-4 context-dark', getCropFocus(supplier.featuredProduct.backgroundImageCropFocus, supplier.featuredProduct.backgroundImageDesktopCropFocus)]\">\r\n            <div class=\"-wrapper\">\r\n                <div v-if=\"supplier.featuredProduct.header\" class=\"mb-2\" v-html=\"supplier.featuredProduct.header\"></div>\r\n                <h2 class=\"text--serif\" v-html=\"supplier.featuredProduct.title\"></h2>\r\n                <div v-if=\"supplier.featuredProduct.description\" class=\"mt-2\" v-html=\"supplier.featuredProduct.description\"></div>\r\n                <a v-if=\"supplier.featuredProduct.url\" class=\"mt-2 btn btn-primary-emphasis btn-sm\" :href=\"supplier.featuredProduct.url\" v-html=\"supplier.featuredProduct.buttonLabel\"></a>\r\n            </div>\r\n            <component :is=\"'style'\">\r\n                .feature-item {\r\n                background-image: url('{{ supplier.featuredProduct.backgroundImageUrl }}');\r\n                background-repeat: no-repeat;\r\n                background-size: cover;\r\n                }\r\n\r\n                @media (min-width: 1200px) {\r\n                .feature-item {\r\n                background-image: url('{{ supplier.featuredProduct.backgroundImageDesktopUrl }}');\r\n                }\r\n                }\r\n            </component>\r\n        </section>\r\n\r\n        <div v-if=\"supplier.searchRegions.length > 1\" class=\"container mb-4\">\r\n            <h1>{{ supplier.companyName }} Destinations</h1>\r\n            <div v-if=\"supplier.destinationsTagline\" v-html=\"supplier.destinationsTagline\"></div>\r\n            <ul class=\"brand-regions list-unstyled\">\r\n                <li v-for=\"(region, index) in supplier.searchRegions\" :key=\"index\">\r\n                    <div class=\"mb-1\">\r\n                        <a :href=\"getRegionSearchLink(region)\"><img :src=\"getRegionImage(region)\" width=\"100%\" class=\"img-fit--cover\" :title=\"getRegionSearchText(region)\" :alt=\"getRegionSearchText(region)\" loading=\"lazy\" /></a>\r\n                    </div>\r\n                    <a :href=\"getRegionSearchLink(region)\" class=\"-no-decoration-idle text-emphasis\" v-html=\"region\"></a>\r\n                </li>\r\n            </ul>\r\n        </div>\r\n\r\n        <div id=\"detail-tabs\"></div>\r\n        <div v-if=\"showTabBlock\" class=\"container d-none d-md-block\">\r\n            <ul ref=\"tab-nav-container\" class=\"tab-nav-container\">\r\n                <li v-if=\"productCardCollection.productCards.length\" id=\"tab-products\"><button @click=\"showTab('products')\" v-html=\"productTabName\"></button></li>\r\n                <li v-if=\"supplier.promotions.length\" id=\"tab-promotions\"><button @click=\"showTab('promotions')\">Promotions</button></li>\r\n                <li v-if=\"supplier.ships.length\" id=\"tab-ships\"><button @click=\"showTab('ships')\">Ships</button></li>\r\n                <li v-if=\"supplier.reviewsCount > 0\" id=\"tab-reviews\"><button @click=\"showTab('reviews')\">Reviews &amp; Recommendations</button></li>\r\n                <li v-if=\"hasSustainabilityContent\" id=\"tab-sustainability\"><button @click=\"showTab('sustainability')\">Sustainability</button></li>\r\n            </ul>\r\n        </div>\r\n        <div v-if=\"showTabBlock\" class=\"slab -tab-slab\">\r\n            <div class=\"container\">\r\n                <ul class=\"tab-content\">\r\n                    <li v-if=\"productCardCollection.productCards.length\" id=\"tc-products\">\r\n                        <button class=\"tab-nav\" @click=\"showTab('products')\" v-html=\"productTabName\"></button>\r\n                        <div class=\"-container\">\r\n                            <h4 class=\"tab-title\" v-html=\"productTabName\"></h4>\r\n                            <product-cards-component :content=\"productCardCollection\" class=\"slab py-0\"></product-cards-component>\r\n                        </div>\r\n                    </li>\r\n                    <li v-if=\"supplier.promotions.length\" id=\"tc-promotions\">\r\n                        <button class=\"tab-nav\" @click=\"showTab('promotions')\">Promotions</button>\r\n                        <div class=\"-container\">\r\n                            <h4 class=\"tab-title\">Promotions</h4>\r\n                            <promotions-component :product-type=\"productType\" :promotions=\"supplier.promotions\"></promotions-component>\r\n                        </div>\r\n                    </li>\r\n                    <li v-if=\"supplier.ships.length\" id=\"tc-ships\">\r\n                        <button class=\"tab-nav\" @click=\"showTab('ships')\">Ships</button>\r\n                        <div class=\"-container\">\r\n                            <h4 class=\"tab-title\">Ships</h4>\r\n                            <generic-cards-component :cards=\"supplier.ships\" :show-hearts=\"true\" class=\"-white\"></generic-cards-component>\r\n                        </div>\r\n                    </li>\r\n                    <li v-if=\"supplier.reviewsCount > 0\" id=\"tc-reviews\">\r\n                        <button class=\"tab-nav\" @click=\"showTab('reviews')\">Reviews &amp; Recommendations</button>\r\n                        <div class=\"-container\">\r\n                            <h4 class=\"tab-title\">Reviews &amp; Recommendations</h4>\r\n                            <product-reviews-component :company-id=\"supplier.id\" :product-type=\"suppliers\" :reviews-data=\"reviewsData\"></product-reviews-component>\r\n                        </div>\r\n                    </li>\r\n                    <li v-if=\"hasSustainabilityContent\" id=\"tc-sustainability\">\r\n                        <button class=\"tab-nav\" @click=\"showTab('sustainability')\">Sustainability</button>\r\n                        <div class=\"-container\">\r\n                            <h4 class=\"tab-title\">Sustainability</h4>\r\n                            <template v-if=\"supplier.sustainability\">\r\n                                <h4 class=\"fw-bold\">Our Commitment</h4>\r\n                                <div class=\"mb-3\" v-html=\"supplier.sustainability\"></div>\r\n                            </template>\r\n                            <template v-if=\"supplier.sustainabilityCertifications.length > 0\">\r\n                                <h4 class=\"fw-bold\">Our Credentials</h4>\r\n                                <ul class=\"centered-list mb-3 weglot-exclude\">\r\n                                    <li v-for=\"(cert, index) in supplier.sustainabilityCertifications\" :key=\"index\"><a :href=\"cert.url\" target=\"_blank\" v-html=\"cert.text\"></a></li>\r\n                                </ul>\r\n                            </template>\r\n                            <template v-if=\"supplier.sustainabilityVideoUrl\">\r\n                                <video controls playsinline :src=\"supplier.sustainabilityVideoUrl\" width=\"100%\"></video>\r\n                            </template>\r\n                        </div>\r\n                    </li>\r\n                </ul>\r\n            </div>\r\n        </div>\r\n    </div>\r\n    <LogoSplash v-else />\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n    import PromotionsComponent from \"components/products/details/product-promotions.vue\";\r\n    import ProductReviewsComponent from \"components/products/details/product-reviews.vue\";\r\n    import ProductCardsComponent from \"components/products/product-cards.vue\";\r\n    import GenericCardsComponent from \"components/shared/generic-cards.vue\";\r\n    import ImageGalleryComponent from \"components/shared/image-gallery.vue\";\r\n    import LogoSplash from \"components/shared/logo-splash.vue\";\r\n    import TopSplashComponent from \"components/shared/top-splash.vue\";\r\n    import { tourBrandSupplierTypes } from \"config/collections\";\r\n    import { DotCMSBrandPageResponse } from \"interfaces/responses/dotcms-responses\";\r\n    import { SupplierDetailResponse } from \"interfaces/responses/product-detail-responses\";\r\n    import { Subset } from \"interfaces/types/app-types\";\r\n    import { GenericCard, ProductCards, ProductCardSearchResult } from \"interfaces/card\";\r\n    import { ProductQuery } from \"interfaces/cms\";\r\n    import { ProductType, SupplierType } from \"interfaces/enums\";\r\n    import { GalleryItem } from \"interfaces/image\";\r\n    import { BrandDetail, ProductTopSplash, Promotion } from \"interfaces/product\";\r\n    import { getCmsContent } from \"services/api/cms\";\r\n    import { getSupplierDetails } from \"services/api/products\";\r\n    import { isAnonymous, isConsumer, isNetworkUser, isSupplier } from \"services/auth/user-info\";\r\n    import { baseImageUrl } from \"services/cms/cms\";\r\n    import { generateCmsImageUrl, getImageCropFocusClass, hydrateImageGallery } from \"services/helpers/images\";\r\n    import { toastError } from \"services/helpers/toasts\";\r\n    import { isEmbeddedMode, isMobileScreenWidth } from \"services/layout/environment\";\r\n    import { getSustainabilityCerts } from \"services/transformers/products\";\r\n    import { trackEvent } from \"services/analytics\";\r\n    import { getSponsoredAndRandomProducts, getViewAllLabel } from \"services/product-cards\";\r\n    import { enableHearts } from \"services/wanderlist\";\r\n    import { capitalizeFirst, cobrandLink, getPlural, isCobranded, parseURLParameters, slugify } from \"virtuoso-shared-web-ui\";\r\n    import { nextTick, PropType, ref, useTemplateRef } from \"vue\";\r\n\r\n    let companyNameFromServer = \"\";\r\n    let qsParams: Record<string, string> = parseURLParameters();\r\n\r\n    const props = defineProps({\r\n        productType: {\r\n            type: String as PropType<ProductType>,\r\n            default: undefined\r\n        },\r\n        supplierId: {\r\n            type: Number,\r\n            default: undefined\r\n        }\r\n    });\r\n\r\n    const advisorCatalogLink = cobrandLink(\"/travel/advisors\");\r\n    const brandPageRef = useTemplateRef(\"brand-page\");       \r\n    const findAnAdvisorLabel = (isCobranded()) ? \"Contact Travel Advisor\" : \"Find a Travel Advisor\";\r\n    const hasSustainabilityContent = ref(false);\r\n    const heartableUrl = ref(\"\");    \r\n    const isReady = ref(false);\r\n    const legacyLink = ref(cobrandLink(`/suppliers/${props.supplierId}`));\r\n    const legacyLinkLabel = ref(isSupplier() ? \"For Partners: Update Your Profile\" : \"For Advisors: View Supplier Details\");\r\n    const productCardCollection = ref<ProductCards>({} as ProductCards);\r\n    const productTabName = (props.productType === ProductType.CRUISES) ? \"Sailings\" : \"Tours\";\r\n    const reviewsData = ref({});\r\n    const showFeaturedProduct = ref(false);\r\n    const showTabBlock = ref(false);\r\n    const supplier = ref<BrandDetail>({} as BrandDetail);\r\n    const suppliers = ProductType.SUPPLIERS;\r\n    const tabNavContainerRef = useTemplateRef(\"tab-nav-container\");\r\n    const topSplashData = ref<ProductTopSplash>({} as ProductTopSplash);\r\n    const wlType = ref((props.productType === ProductType.CRUISES) ? \"cruise\" : \"tour\");\r\n\r\n    function getCropFocus(cropFocusMobile: string, cropFocusDesktop: string): string {\r\n        return `${getImageCropFocusClass(cropFocusMobile)} -mobile ${getImageCropFocusClass(cropFocusDesktop)} -desktop`;\r\n    }\r\n\r\n    function getRegionImage(region: string): string {\r\n        const regionType = (props.productType === ProductType.CRUISES) ? \"cruise-regions/\" : \"regions/region-\";\r\n        return generateCmsImageUrl(`/images/${regionType}${slugify(region)}.jpg`);        \r\n    }\r\n\r\n    function getRegionSearchLink(region: string): string {\r\n        if (props.productType === ProductType.CRUISES) {\r\n            return cobrandLink(`/travel/luxury-cruises/search#destinations=${encodeURIComponent(region)}&cruiseLines=${encodeURIComponent(companyNameFromServer)}`);\r\n        } else if (props.productType === ProductType.TOURS) {\r\n            return cobrandLink(`/travel/luxury-tours/search#destinations=${encodeURIComponent(region)}&companies=${encodeURIComponent(companyNameFromServer)}`);\r\n        }\r\n    }\r\n\r\n    function getRegionSearchText(region: string): string {\r\n        return `Search for ${capitalizeFirst(props.productType)} in ${region}`;\r\n    }\r\n\r\n    function handleLegacyLinkClick(): void {\r\n        trackEvent(\"legacy_page_click\", {\r\n            affiliation: `${supplier.value.companyId}`,\r\n            item_id: `${props.supplierId}`,\r\n            item_name: supplier.value.companyName,\r\n            item_category: capitalizeFirst(ProductType.SUPPLIERS.slice(0,-1))\r\n        });\r\n    }\r\n\r\n    function jumpToTab() : void{\r\n        // Which bottom tab should be selected by default\r\n        const defaultTabName =\r\n            (productCardCollection.value.productCards.length) ? \"products\" :\r\n            (supplier.value.promotions.length) ? \"promotions\" :\r\n            (supplier.value.ships.length) ? \"ships\" :\r\n            (supplier.value.reviewsCount > 0) ? \"reviews\" :\r\n            (hasSustainabilityContent.value) ? \"sustainability\" : \"\";\r\n\r\n        const qsTabLabel = qsParams[\"tab\"];\r\n\r\n        showTabBlock.value = (defaultTabName.length > 0);\r\n\r\n        nextTick(() => { // Tab Show then Scroll - function called before mounted\r\n            // Show\r\n            if (defaultTabName) { // first tab\r\n                showTab(defaultTabName, true);\r\n            }\r\n            if (qsTabLabel && document.getElementById(`tc-${qsTabLabel}`)) { // check qsParam tab exists\r\n                showTab(qsTabLabel, true);\r\n            }\r\n            // Show Promo Manual Tab\r\n            if (qsParams.promotions === \"1\") { // If the manually added ?promotions=1 query string variable is present, scroll to the promotions section on load\r\n                const qsPromoTabName = (supplier.value.promotions.length) ? \"promotions\" : defaultTabName;\r\n                showTab(qsPromoTabName, true);\r\n            }\r\n            // Default Scroll\r\n            if ((\"tab\" in qsParams) || (\"promotions\" in qsParams)) {\r\n                scrollToTabResponsive();\r\n            }\r\n        });\r\n    }\r\n\r\n    function loadSupplier(): void {\r\n        let isInvalid = false;\r\n        let cmsJSON: DotCMSBrandPageResponse = {};\r\n        let resultSupplier: SupplierDetailResponse = {} as SupplierDetailResponse;\r\n\r\n        // Load the dotCMS data\r\n        const cmsContentPromise = getCmsContent<DotCMSBrandPageResponse[]>({\r\n            contentTypes: [\"BrandPage\"],\r\n            depth: 1,\r\n            limit: 1,\r\n            queryClauses: [\r\n                `+(BrandPage.supplierId:${props.supplierId})`,\r\n                `+(BrandPage.supplierType:${props.productType.slice(0, -1)})`\r\n            ]\r\n        });\r\n\r\n        cmsContentPromise.then((brandJSON) => { // There isn't necessarily a dotCMS page for every supplier\r\n            if (brandJSON?.length) {\r\n                cmsJSON = brandJSON[0];\r\n            }\r\n        }); // Reject is caught in the Promise.all below\r\n\r\n\r\n        // Load the supplier data\r\n        const supplierContentPromise = getSupplierDetails(props.supplierId);\r\n\r\n        supplierContentPromise.then((supplierJSON) => {\r\n            if (supplierJSON && supplierJSON.name) {\r\n                resultSupplier = supplierJSON;\r\n            } else {\r\n                isInvalid = true;\r\n            }\r\n        }); // Reject is caught in the Promise.all below\r\n\r\n\r\n        Promise.all([cmsContentPromise, supplierContentPromise]).then(() => {\r\n            if (!isInvalid) {\r\n\r\n                const thisSupplier: BrandDetail = {\r\n                    companyName: cmsJSON.title || resultSupplier.name,\r\n                    companyId: props.supplierId,\r\n                    description: cmsJSON.overview || resultSupplier.bestOfTheBest,\r\n                    destinationsTagline: cmsJSON.destinationsTagline || \"\",\r\n                    featuredImageCaption: \"\", // Populated below\r\n                    featuredImageUrl: (cmsJSON.featuredImage) ? generateCmsImageUrl(cmsJSON.featuredImage) : \"\",\r\n                    featuredProduct: null, // Populated below\r\n                    featuredVideoCaption: (cmsJSON.featuredVideoUrl) ? \"Featured video\" : \"\",\r\n                    featuredVideoUrl: cmsJSON.featuredVideoUrl || \"\",\r\n                    galleryImages: [], // Populated below\r\n                    headline: cmsJSON.headline || \"\",\r\n                    id: props.supplierId,\r\n                    logoUrl: (cmsJSON.logo) ? baseImageUrl + cmsJSON.logo : resultSupplier.logoImageUrl,\r\n                    promotions: [], // Populated below\r\n                    reviewsCount: (props.productType !== ProductType.CRUISES) ? resultSupplier.totalActiveReviews || 0 : 0, // Reviews are at the ship level for cruises\r\n                    reviewsPercent: (props.productType !== ProductType.CRUISES) ? resultSupplier.totalRecommendedPercent || 0 : 0,\r\n                    searchRegions: resultSupplier.destinationSubRegions || resultSupplier.productRegions || [],\r\n                    ships: [], // Populated below\r\n                    supplierType: resultSupplier.supplierType,\r\n                    sustainability: (resultSupplier.supplierSustainability) ? resultSupplier.supplierSustainability : \"\",\r\n                    sustainabilityCertifications: getSustainabilityCerts(resultSupplier.sustainabilityCertifications),\r\n                    sustainabilityVideoUrl: resultSupplier.sustainabilityVideoUrl\r\n                };\r\n\r\n                companyNameFromServer = resultSupplier.name; // Needed for links into the catalog\r\n\r\n\r\n                // Supplier type & product type restrictions\r\n                if ((props.productType === ProductType.CRUISES && thisSupplier.supplierType !== SupplierType.CruiseLine) ||\r\n                    (props.productType === ProductType.TOURS && !tourBrandSupplierTypes.includes(thisSupplier.supplierType))) {\r\n                    location.href = cobrandLink(`/suppliers/${window.VIRTUOSO.supplierId}/${slugify(companyNameFromServer)}`); // TODO: is this supplierId difference than the props supplierId?\r\n                }\r\n\r\n\r\n                // Featured product\r\n                if (cmsJSON.featuredProductTitle && cmsJSON.featuredProductImageMobile && cmsJSON.featuredProductImageDesktop) {\r\n                    let isExpired = false;\r\n\r\n                    if (cmsJSON.featuredProductExpirationDate) {\r\n                        const expiredMS = new Date(cmsJSON.featuredProductExpirationDate).getTime();\r\n                        isExpired = (expiredMS < window.VIRTUOSO.serverUTCMS);\r\n                    }\r\n\r\n                    if (!isExpired) {\r\n                        thisSupplier.featuredProduct = {\r\n                            backgroundImageCropFocus: cmsJSON.featuredProductImageMobileCropFocus || \"center\",\r\n                            backgroundImageDesktopCropFocus: cmsJSON.featuredProductImageDesktopCropFocus || \"center\",\r\n                            backgroundImageDesktopUrl: (cmsJSON.featuredProductImageDesktop) ? generateCmsImageUrl(cmsJSON.featuredProductImageDesktop) : \"\",\r\n                            backgroundImageUrl: (cmsJSON.featuredProductImageMobile) ? generateCmsImageUrl(cmsJSON.featuredProductImageMobile) : \"\",\r\n                            buttonLabel: cmsJSON.featuredProductButtonLabel || \"Learn More\",\r\n                            description: cmsJSON.featuredProductDescription || \"\",\r\n                            header: cmsJSON.featuredProductHeader || \"\",\r\n                            title: cmsJSON.featuredProductTitle,\r\n                            url: cobrandLink(cmsJSON.featuredProductLink) || \"\"\r\n                        };\r\n                        showFeaturedProduct.value = true;\r\n                    }\r\n                }\r\n\r\n\r\n                // Ships (Cruise suppliers only)\r\n                if (resultSupplier.shipInfo && resultSupplier.shipInfo.length) {\r\n                    const ships: GenericCard[] = [];\r\n                    resultSupplier.shipInfo.forEach((ship) => {\r\n                        if (ship.shipName && ship.firstImage && ship.firstImage.url) {\r\n                            const vanillaLink = `/travel/luxury-cruises/ships/${ship.shipMasterEntityId}/${slugify(ship.shipName)}`;\r\n                            ships.push({\r\n                                content: ship.shipDescription,\r\n                                heartableUrl: `https://www.virtuoso.com${vanillaLink}`,\r\n                                imageUrl: ship.firstImage.url,\r\n                                link: cobrandLink(vanillaLink),\r\n                                title: ship.shipName,\r\n                                wlType: \"cruise\"\r\n                            });\r\n                        }\r\n                    });\r\n                    thisSupplier.ships = ships;\r\n                }\r\n\r\n                        \r\n                // Images -- first image is the featured image\r\n                let galleryImages: GalleryItem[] = [];\r\n                if (resultSupplier.imageLibraryItems && resultSupplier.imageLibraryItems.length) {\r\n                    galleryImages = hydrateImageGallery(resultSupplier.imageLibraryItems);\r\n                    thisSupplier.featuredImageUrl = thisSupplier.featuredImageUrl || galleryImages[0].image;\r\n                    thisSupplier.featuredImageCaption = galleryImages[0].description;\r\n                }\r\n                thisSupplier.galleryImages = galleryImages;\r\n                        \r\n\r\n                // \"Featured\" and random products\r\n                const combinedProductCards: ProductCards = {\r\n                    productCards: [],\r\n                    productType: props.productType\r\n                };\r\n\r\n                const productQuery: ProductQuery = { rowsLimit: 6, selectedFacets: [] };\r\n\r\n                if (props.productType === ProductType.CRUISES) {\r\n                    combinedProductCards.viewAllLink = cobrandLink(`/travel/luxury-cruises/search#cruiseLines=${encodeURIComponent(resultSupplier.name)}`);\r\n                    combinedProductCards.viewAllText = \"See More Cruises\";\r\n                    productQuery.selectedFacets.push({\r\n                        category: \"cruise_company\",\r\n                        name: resultSupplier.name,\r\n                        selected: true\r\n                    });\r\n                } else if (props.productType === ProductType.TOURS) {\r\n                    combinedProductCards.viewAllLink = cobrandLink(`/travel/luxury-tours/search#companies=${encodeURIComponent(resultSupplier.name)}`);\r\n                    combinedProductCards.viewAllText = \"See More Tours & Experiences\";\r\n                    productQuery.selectedFacets.push({\r\n                        category: \"tour_company\",\r\n                        name: resultSupplier.name,\r\n                        selected: true\r\n                    });\r\n                }\r\n\r\n                const featuredProductIds: string = cmsJSON.featuredProductIds || \"\";\r\n\r\n                getSponsoredAndRandomProducts(props.productType, productQuery, featuredProductIds, false, true).then((prods: ProductCardSearchResult) => {\r\n                    combinedProductCards.productCards = prods.productCards;                    \r\n                    const isProductTypeSubset = props.productType as Subset<ProductType, ProductType.HOTELS | ProductType.CRUISES | ProductType.TOURS | ProductType.SHIPS>;\r\n                    // productType cast for get view all label \r\n                    combinedProductCards.viewAllText = getViewAllLabel(isProductTypeSubset, prods.totalResults, productQuery.rowsLimit);\r\n                    jumpToTab(); // Don't check which tab to show first until we know if there are products\r\n                });\r\n\r\n                productCardCollection.value = combinedProductCards;\r\n\r\n\r\n                // Promotions\r\n                if (resultSupplier.promotions && resultSupplier.promotions.length) {\r\n                    const visiblePromotions: Promotion[] = [];\r\n                    resultSupplier.promotions.forEach((promo) => {\r\n                        if (!promo.isAdvisorIncentive && !promo.incentiveTypeCode) {\r\n                            visiblePromotions.push({\r\n                                description: promo.description || \"\",\r\n                                endDateMS: (promo.travelEndDate) ? new Date(promo.travelEndDate).getTime() : 0,\r\n                                formattedTravelDates: promo.formattedTravelDates || \"\",\r\n                                isExclusive: false,\r\n                                name: promo.promotionName || \"\",\r\n                                promotionId: promo.masterEntityId,\r\n                                startDateMS: (promo.travelStartDate) ? new Date(promo.travelStartDate).getTime() : 0,\r\n                                url: (promo.masterEntityId) ? cobrandLink(`/promotions/${promo.masterEntityId}/${slugify(promo.promotionName)}`) : \"\"\r\n                            });\r\n                        }\r\n                    });\r\n\r\n                    // Check for featured promotion and reorder the array if necessary\r\n                    if (cmsJSON.featuredPromotionId && visiblePromotions.length > 1) {\r\n                        const featuredPromoIndex = visiblePromotions.findIndex((promo) => parseInt(cmsJSON.featuredPromotionId, 10) === promo.promotionId);\r\n                        if (featuredPromoIndex > 0) {\r\n                            const featuredItem = visiblePromotions.splice(featuredPromoIndex, 1);\r\n                            visiblePromotions.unshift(featuredItem[0]);\r\n                        }\r\n                    }\r\n\r\n                    thisSupplier.promotions = visiblePromotions;\r\n                }\r\n\r\n                if (thisSupplier.reviewsCount > 0) {\r\n                    // passed to reviews component\r\n                    reviewsData.value = {\r\n                        percent: `<b>${thisSupplier.reviewsPercent}% Recommended</b>`,\r\n                        count: `<b>${thisSupplier.reviewsCount} Review${getPlural(thisSupplier.reviewsCount)}</b>`\r\n                    };\r\n                }\r\n\r\n\r\n                supplier.value = thisSupplier;\r\n                hasSustainabilityContent.value = !!(thisSupplier.sustainability || thisSupplier.sustainabilityCertifications.length || thisSupplier.sustainabilityVideoUrl);\r\n                \r\n\r\n                legacyLink.value = cobrandLink(`/suppliers/${props.supplierId}/${slugify(companyNameFromServer)}`);\r\n                if (props.productType === ProductType.CRUISES) {\r\n                    heartableUrl.value = `https://www.virtuoso.com/travel/luxury-cruises/cruise-lines/${props.supplierId}/${slugify(companyNameFromServer)}`;\r\n                } else if (props.productType === ProductType.TOURS) {\r\n                    heartableUrl.value = `https://www.virtuoso.com/travel/luxury-tours/tour-operators/${props.supplierId}/${slugify(companyNameFromServer)}`;\r\n                }\r\n\r\n\r\n                topSplashData.value = {\r\n                    ...(thisSupplier.promotions[0] && { promotion: thisSupplier.promotions[0]}), // promotion\r\n                    companyName: thisSupplier.companyName,\r\n                    featuredImageCaption: thisSupplier.featuredImageCaption,\r\n                    featuredImageUrl: thisSupplier.featuredImageUrl,\r\n                    featuredVideoUrl: thisSupplier.featuredVideoUrl,\r\n                    logoUrl: thisSupplier.logoUrl,\r\n                    productName: thisSupplier.companyName,\r\n                    productType: ProductType.SUPPLIERS,                            \r\n                    supplierType: thisSupplier.supplierType,\r\n                    wanderlistId: heartableUrl.value\r\n                };\r\n\r\n                isReady.value = true;\r\n\r\n                nextTick(() => {\r\n                    enableHearts(brandPageRef.value);\r\n                });\r\n            } else {\r\n                redirectOnError();\r\n            }\r\n        }, () => redirectOnError());\r\n\r\n    }\r\n\r\n    function redirectOnError(): void {\r\n        toastError(\"Error retrieving data\");\r\n        setTimeout(() => {\r\n            location.href = cobrandLink(`/travel/luxury-${props.productType}`);\r\n        }, 3000);\r\n    }\r\n\r\n    function scrollToTabResponsive(tabName = \"\"): void {\r\n        if (isMobileScreenWidth()) {\r\n            return (tabName) ? document.getElementById(`tc-${tabName}`)?.scrollIntoView()\r\n                : document.querySelector(\".tab-content .-active\")?.scrollIntoView({ block: \"start\" });\r\n        }\r\n        tabNavContainerRef.value.scrollIntoView();\r\n    }\r\n\r\n    function showTab(tabName: string, preventJump = false): void {\r\n        document.querySelector(\".tab-nav-container .-active\")?.classList.remove(\"-active\");\r\n        document.querySelector(\".tab-content .-active\")?.classList.remove(\"-active\");\r\n        document.getElementById(`tab-${tabName}`).classList.add(\"-active\");\r\n        document.getElementById(`tc-${tabName}`).classList.add(\"-active\");\r\n\r\n        if (!preventJump) {\r\n            scrollToTabResponsive(tabName);\r\n        }\r\n    }\r\n\r\n    loadSupplier();\r\n  \r\n</script>\r\n","import BrandPageComponent from \"components/pages/brand-page.vue\";\r\nimport { cobrandLink } from \"virtuoso-shared-web-ui\";\r\nimport { createApp } from \"vue\";\r\nimport { mountApp } from \"vue-app\";\r\n\r\nif (window.VIRTUOSO.productType && window.VIRTUOSO.supplierId) {\r\n\r\n    const app = createApp(BrandPageComponent,\r\n        {\r\n            productType: window.VIRTUOSO.productType,\r\n            supplierId: window.VIRTUOSO.supplierId\r\n        });\r\n    mountApp(app, \"page-app\");\r\n\r\n} else if (window.VIRTUOSO.productType) {\r\n    console.error(\"Supplier ID not provided\");\r\n    location.href = cobrandLink(`/travel/luxury-${window.VIRTUOSO.productType}/`);\r\n} else {\r\n    console.error(\"Product Type not provided\");\r\n    location.href = cobrandLink(`/travel`);\r\n}\r\n"],"names":["genericCards","useTemplateRef","nextTick","enableHearts","companyNameFromServer","qsParams","parseURLParameters","props","__props","advisorCatalogLink","cobrandLink","brandPageRef","findAnAdvisorLabel","isCobranded","hasSustainabilityContent","ref","heartableUrl","isReady","legacyLink","legacyLinkLabel","isSupplier","productCardCollection","productTabName","ProductType","reviewsData","showFeaturedProduct","showTabBlock","supplier","suppliers","tabNavContainerRef","topSplashData","wlType","getCropFocus","cropFocusMobile","cropFocusDesktop","getImageCropFocusClass","getRegionImage","region","regionType","generateCmsImageUrl","slugify","getRegionSearchLink","getRegionSearchText","capitalizeFirst","handleLegacyLinkClick","trackEvent","jumpToTab","defaultTabName","qsTabLabel","showTab","qsPromoTabName","scrollToTabResponsive","loadSupplier","isInvalid","cmsJSON","resultSupplier","cmsContentPromise","getCmsContent","brandJSON","supplierContentPromise","getSupplierDetails","supplierJSON","redirectOnError","thisSupplier","baseImageUrl","getSustainabilityCerts","SupplierType","tourBrandSupplierTypes","isExpired","ships","ship","vanillaLink","galleryImages","hydrateImageGallery","combinedProductCards","productQuery","featuredProductIds","getSponsoredAndRandomProducts","prods","isProductTypeSubset","getViewAllLabel","visiblePromotions","promo","featuredPromoIndex","featuredItem","getPlural","toastError","tabName","isMobileScreenWidth","_a","_b","preventJump","app","createApp","BrandPageComponent","mountApp"],"mappings":"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"}