{"version":3,"sources":["webpack:///./src/project/shared/responsive-umbraco-image.service.ts","webpack:///./src/project/modals/overlays/VimeoVideoFullscreenOverlay.service.ts","webpack:///./src/types/contentServerContract.ts","webpack:///./src/project/app/blocks/ImageTextVideoBlock.vue?786e","webpack:///./src/project/app/blocks/ImageTextVideoBlock.vue","webpack:///./src/project/app/blocks/ImageTextVideoBlock.vue?abe2","webpack:///./src/project/app/blocks/ImageTextVideoBlock.vue?7d41","webpack:///./src/project/app/blocks/ImageTextVideoBlock.vue?6a76"],"names":["extensionIsGifOrUndefined","file","extension","undefined","VideoFullscreenOverlayService","vimeoVideoId","enableTextTrack","this","showModal","component","componentAttrs","options","contentAutoScroll","contentMaxHeight","disableBodyScroll","placement","showCloseButton","usePanelWrapper","closeOnBreakpointChange","wide","ContentWidth","HorizontalAlignment","SubheaderFontSize","LinkType","render","_vm","_h","$createElement","_c","_self","staticClass","class","shouldUseFlexBox","showCaptionAsContentTitle","content","caption","attrs","isFirstBlock","_v","_s","_e","video","showBackgroundImage","style","ref","isBackgroundVideo","domProps","url","loadingVideo","backgroundImage","realAspectRatio","realWidthOnScreen","backgroundImageFormat","focalPoint","name","on","$event","$emit","_b","adImageProps","backgroundColorStyle","backgroundColor","showVideoControls","isPlaying","isWithinWideBannerAspectRatio","alignRight","contentClass","header","subheader","colorStyle","captionColor","directives","rawName","value","expression","headerColor","headerHeadlineLevel","subheaderColor","ctaColor","callToAction","target","clickHandler","overlayVimeoCta","clickOpenVideoOverlay","renderContent","toggleVideoState","nativeOn","contentLoadError","staticRenderFns","mobileAspectRatio","semiTransparencyPercentage","videoAspectRatio","wideBannerAspectRatio","contentBackgroundColor","vimeoVideoAspectRatio","useFlexBox","isMobile","aspectRatio","isBreakpointActive","forceVimeoAspectRatio","widthOnScreen","aspectRatioMargins","activeBpDef","Object","keys","find","bpDef","result","paddingPct","paddingBottom","margin","$refs","videoMount","onloadeddata","id","ensureId","autoplay","loop","muted","controls","title","byline","portrait","autopause","getVimeoVideoAspectRatio","idOrUrl","idParts","split","length","parseInt","contentAligmentValue","Left","contentWidthValue","isHeroBanner","TwoThird","FullWidth","subheaderFontSizeValue","Large","Normal","width","getVideoWidth","height","getVideoHeight","minSize","subheaderSize","min","max","pause","e","error","play","hex","alpha","theme","colors","black","semiTransparent","isColorDefined","hexToRgbWithDefault","makeContentBackgroundTransparent","shouldShowContentBackground","translateY","isTakeOverBanner","transform","callToActionColor","level","color","hexColor","EETBlack","Right","widthCls","OneThird","maxSize","maxLines","adImages","backgroundImages","filter","img","isMatchingImageAspectRatio","image","allowedDelta","Math","abs","adnuntiusImages","srcset","map","join","src","sort","imageA","imageB","sizes","shimColor","opacity","imgAspectRatio","maxWidth","left","maxHeight","top","videoContainerMoreNarrowThanVideo","captionLocation","showCallToActionButton","overlayVimeoVideoId","isTakeOverEnabled","show","type","Boolean","default","Function","required","Number","immediate","components","SmartParagraph","SpinnerOverlay","CallToAction","SmartHeadline"],"mappings":"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","file":"js/chunk-31b9288a.72df5f0e.js","sourcesContent":["import { Media } from '@/types/contentServerContract';\r\n\r\nfunction extensionIsGifOrUndefined(file:Media|undefined): 'gif' | undefined {\r\n return file?.extension === 'gif' ? 'gif' : undefined;\r\n}\r\nexport {\r\n extensionIsGifOrUndefined\r\n};\r\n","import { AbstractModalService } from '@/core/modals/AbstractModalService';\r\n\r\nclass VideoFullscreenOverlayService extends AbstractModalService {\r\n public show(\r\n vimeoVideoId: string,\r\n enableTextTrack: boolean) {\r\n return this.showModal({\r\n component: () => import(\r\n /* webpackPrefetch: true */\r\n '@/project/video/VideoFullscreenOverlay.vue'),\r\n componentAttrs: {\r\n vimeoVideoId,\r\n enableTextTrack\r\n },\r\n options: {\r\n contentAutoScroll: false,\r\n contentMaxHeight: false,\r\n disableBodyScroll: true,\r\n placement: 'center',\r\n showCloseButton: true,\r\n usePanelWrapper: false,\r\n closeOnBreakpointChange: false,\r\n wide: true\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport default new VideoFullscreenOverlayService();\r\n","/* eslint-disable */\r\nexport interface PreviewSitesViewModel {\r\n previewSites: PreviewSiteViewObject[];\r\n}\r\nexport interface PreviewSiteViewObject {\r\n culture: string;\r\n id: number;\r\n releaseCulture: string;\r\n}\r\nexport interface BasketPageViewModel extends BaseContentModel {\r\n}\r\nexport interface BecomeACustomerViewModel extends BaseContentModel {\r\n areaOfInterest: string[];\r\n becomeCustomerPostFinishSteps: JsonContent[];\r\n image: Media;\r\n imageText: string;\r\n showCrn: boolean;\r\n skipNewsletterStep: boolean;\r\n}\r\nexport interface BecomeCustomerPostFinishStepViewModel {\r\n headline: string;\r\n icon: Media;\r\n text: string;\r\n}\r\nexport interface BrandPageViewModel extends BaseContentModel {\r\n brandName: string;\r\n listAllProducts: boolean;\r\n}\r\nexport interface BrandSearchPageLinkViewModel {\r\n brandName: string;\r\n links: BrandSearchPageLinkViewObject[];\r\n}\r\nexport interface BrandSearchPageLinkViewObject {\r\n categoryIds: string[];\r\n displayName: string;\r\n pageName: string;\r\n url: string;\r\n}\r\nexport interface BrandSearchPageViewModel extends BaseContentModel {\r\n brandName: string;\r\n categoryIds: string[];\r\n displayName: string;\r\n}\r\nexport interface BrandsViewModel extends BaseContentModel {\r\n}\r\nexport interface CampaignBlockViewModel {\r\n buttonText: string;\r\n campaignName: string;\r\n campaignUrl: string;\r\n categories: string[];\r\n endDate: string;\r\n iconUrl: string;\r\n id: number;\r\n image: Media;\r\n showIcon: boolean;\r\n startDate: string;\r\n teaser: string;\r\n}\r\nexport interface CampaignPageViewModel extends BaseContentModel {\r\n buttonText: string;\r\n campaignName: string;\r\n campaignText: string;\r\n categories: string[];\r\n hideAccessories: boolean;\r\n image: Media;\r\n listAllProducts: boolean;\r\n}\r\nexport interface CampaignsViewModel extends BaseContentModel {\r\n campaignPageSize: number;\r\n campaigns: CampaignBlockViewModel[];\r\n categories: string[];\r\n count: number;\r\n firstCampaign: CampaignBlockViewModel;\r\n headline: string;\r\n}\r\nexport interface CategoryPageViewModel extends BaseContentModel {\r\n categoryId: number;\r\n listAllProducts: boolean;\r\n}\r\nexport interface CategorySeoInformationViewModel {\r\n seoDescription: string;\r\n seoTitle: string;\r\n}\r\nexport interface DepartmentsViewModel extends BaseContentModel {\r\n}\r\nexport interface EmailViewModel {\r\n modules: JsonContent[];\r\n preheader: string;\r\n subject: string;\r\n}\r\nexport interface FooterCompanyDetails {\r\n addressInformation: string;\r\n city: string;\r\n companyName: string;\r\n email: string;\r\n openingHours: string;\r\n phoneNumber: string;\r\n postalCode: string;\r\n vatNumber: string;\r\n}\r\nexport interface FooterSitemapColumnViewModel {\r\n links: NameAndUrl[];\r\n socialMediaLinks: IconNameAndUrl[];\r\n title: string;\r\n}\r\nexport interface FrontpageViewModel extends BaseContentModel {\r\n}\r\nexport interface News {\r\n categories: string[];\r\n date: string;\r\n header: string;\r\n id: number;\r\n image: Media;\r\n teaser: string;\r\n url: NameAndUrl;\r\n}\r\nexport interface NewsArticlePageViewModel extends BaseContentModel {\r\n articleText: string;\r\n campaignLink: Link;\r\n categories: string[];\r\n date: Date;\r\n dateFormatted: string;\r\n header: string;\r\n image: Media;\r\n pressMaterial: Media[];\r\n pressRelease: boolean;\r\n relatedLinks: Link[];\r\n}\r\nexport interface NewsPageViewModel extends BaseContentModel {\r\n categories: string[];\r\n count: number;\r\n firstNews: News;\r\n headline: string;\r\n news: News[];\r\n newsPageSize: number;\r\n}\r\nexport interface Product404PageViewModel extends BaseContentModel {\r\n}\r\nexport interface ProductDetailsPageViewModel {\r\n recommendations: JsonContent[];\r\n seoDescription: string;\r\n seoTitles: string[];\r\n}\r\nexport interface RackConfiguratorPageViewModel {\r\n leaveModalBody: string;\r\n leaveModalTitle: string;\r\n step1Headline: string;\r\n step1LinkText: string;\r\n step1MetaDescription: string;\r\n step1MetaTitle: string;\r\n step1RackTiles: JsonContent[];\r\n step1StepName: string;\r\n step1SubHeader: string;\r\n step2MetaDescription: string;\r\n step2MetaTitle: string;\r\n step2StepName: string;\r\n step2SubHeader: string;\r\n step3MetaTitle: string;\r\n step3StepName: string;\r\n step3SubHeader: string;\r\n}\r\nexport interface ResourceMenuBannerViewModel {\r\n callToActionLink: NameAndUrl | null;\r\n headline: string | null;\r\n image: Media | null;\r\n text: string | null;\r\n}\r\nexport interface ResourceMenuItemGroupViewModel {\r\n groupUrl: string | null;\r\n headline: string | null;\r\n icon: Media | null;\r\n links: NameAndUrl[] | null;\r\n}\r\nexport interface ResourceMenuViewModel {\r\n personalizedContent: PersonalizedContentModel | null;\r\n resourceMenuItemGroups: ResourceMenuItemGroupViewModel[] | null;\r\n}\r\nexport interface RMAPageViewModel {\r\n rmaFrontpageBlocks: JsonContent[];\r\n rmaReceiptPageBlocks: JsonContent[];\r\n}\r\nexport interface SearchBlockViewModel {\r\n contentBlocks: JsonContent[];\r\n heading: string;\r\n sanitizedSearchTerm: string;\r\n}\r\nexport interface SettingsViewModel {\r\n accessRequestPage: string;\r\n basketPage: string;\r\n becomeACustomerPage: string;\r\n brandsPage: string;\r\n campaignPage: string;\r\n dataProcessingAgreementPage: string;\r\n departmentPage: string;\r\n directDebitPage: string;\r\n enableClientSideLogging: boolean;\r\n financialDepartment: string;\r\n genericBrandProductGuidePage: string;\r\n menuCampaignIcon: string;\r\n menuCampaignLink: Link;\r\n newsPage: string;\r\n orderIntegrationPage: string;\r\n priceFilesPage: string;\r\n product404Page: string;\r\n productDetailsPage: string;\r\n productGuidePage: string;\r\n productGuideSpecificGuidePage: string;\r\n productListContentPlacementIndex: number;\r\n rackConfiguratorPage: string;\r\n receiptPage: string;\r\n rmaPage: string;\r\n salesAndSupportPage: string;\r\n standardFreightPage: string;\r\n termsPage: string;\r\n}\r\nexport interface SiteChromeViewModel {\r\n resourceMenu: ResourceMenuViewModel;\r\n settings: SettingsViewModel;\r\n siteFooter: SiteFooterViewModel;\r\n}\r\nexport interface SiteFooterViewModel {\r\n companyDetails: FooterCompanyDetails;\r\n sitemapColumns: FooterSitemapColumnViewModel[];\r\n}\r\nexport interface BaseContentModel {\r\n blocks: JsonContent[];\r\n blocksBelow: JsonContent[];\r\n}\r\nexport interface BreadcrumbItem {\r\n id: string;\r\n name: string;\r\n page?: string;\r\n url: string;\r\n}\r\nexport interface IconNameAndUrl {\r\n icon: string;\r\n name: string;\r\n target: string;\r\n url: string;\r\n}\r\nexport interface JsonContent {\r\n alias: string;\r\n content: any;\r\n name: string;\r\n}\r\nexport interface LanguageAndUrl {\r\n language: string;\r\n url: string;\r\n}\r\nexport interface Link {\r\n name: string;\r\n target: string;\r\n type: LinkType;\r\n url: string;\r\n}\r\nexport interface Media extends NameAndUrl {\r\n extension: string;\r\n focalPoint: ImageCropperFocalPoint;\r\n height: number;\r\n width: number;\r\n}\r\nexport interface Metadata {\r\n businessEntity: string;\r\n id: number;\r\n index: boolean;\r\n key: string;\r\n languages: LanguageAndUrl[];\r\n navigationTitle: string;\r\n seoDescription: string;\r\n seoImage: Media;\r\n seoTitle: string;\r\n url: string;\r\n}\r\nexport interface NameAndUrl {\r\n name: string;\r\n target: string;\r\n url: string;\r\n}\r\nexport interface Navigation {\r\n breadcrumb: BreadcrumbItem[];\r\n hideLeftMenu: boolean;\r\n leftMenu: NavigationItem[];\r\n}\r\nexport interface NavigationItem {\r\n children: NavigationItem[];\r\n id: string;\r\n name: string;\r\n url: string;\r\n}\r\nexport interface PageData {\r\n jsonContent: JsonContent;\r\n metadata: Metadata;\r\n navigation: Navigation;\r\n}\r\nexport interface PreviewModel {\r\n apiHost: string;\r\n assets: { [key: string]: string };\r\n assetsUrl: string;\r\n businessEntityName: string;\r\n clientAssetsUrl: string;\r\n contentHost: string;\r\n countryCode: string;\r\n cssFiles: string[];\r\n culture: string;\r\n currentPath: string;\r\n customCulture: string;\r\n devServerUrl: string;\r\n dictionary: string;\r\n erpBusinessEntityId: number;\r\n externalProductGuideLink: string;\r\n externalProductGuideLinkText: string;\r\n googleTagManagerId: string;\r\n isExternalProductGuide: boolean;\r\n jsFiles: string[];\r\n languageCode: string;\r\n marketId: number;\r\n pageData: PageData;\r\n siteChromeJson: any;\r\n siteId: number;\r\n url: string;\r\n}\r\nexport interface ImageCropperFocalPoint {\r\n left: number;\r\n top: number;\r\n}\r\nexport interface AdUnitIdContentModel {\r\n adUnitId: string;\r\n id: number;\r\n name: string;\r\n}\r\nexport interface PersonalizedContentModel {\r\n selectedAdUnitIdContent: AdUnitIdContentModel;\r\n}\r\nexport interface EmailBrandRecommendationsBlockViewModel {\r\n brandIdFilterList: string[];\r\n categoryIdFilterNegativeList: string[];\r\n categoryIdFilterPositiveList: string[];\r\n headline: string;\r\n interval: number;\r\n popularityType: string;\r\n recommendationsType: string;\r\n}\r\nexport interface EmailBreaker3ElementsViewModel {\r\n}\r\nexport interface EmailBreaker4ElementsViewModel {\r\n}\r\nexport interface EmailBreakerOneLineViewModel {\r\n backgroundColor: string;\r\n header: string;\r\n headerColor: string;\r\n headerSize: string;\r\n}\r\nexport interface EmailCategoryRecommendationsBlockViewModel {\r\n brandIdFilterList: string[];\r\n categoryIdFilterNegativeList: string[];\r\n categoryIdFilterPositiveList: string[];\r\n headline: string;\r\n interval: number;\r\n popularityType: string;\r\n recommendationsType: string;\r\n}\r\nexport interface EmailFullWidthTestimonialViewModel {\r\n backgroundColor: string;\r\n bodyText: string;\r\n bodyTextColor: string;\r\n bodyTextSize: string;\r\n cleanBodyText: string;\r\n header: string;\r\n headerColor: string;\r\n headerSize: string;\r\n image: Media;\r\n imageText1: string;\r\n imageText2: string;\r\n imageTextColor: string;\r\n}\r\nexport interface EmailHeroBannerViewModel {\r\n backgroundColor: string;\r\n backgroundImage: Media;\r\n callToAction: Link;\r\n callToActionColor: string;\r\n callToActionTextColor: string;\r\n caption: string;\r\n captionColor: string;\r\n cleanSubheader: string;\r\n contentBackgroundColor: string;\r\n contentBackgroundColorTransparent: boolean;\r\n header: string;\r\n headerColor: string;\r\n headerSize: string;\r\n shim: boolean;\r\n subheader: string;\r\n subheaderColor: string;\r\n subheaderSize: string;\r\n}\r\nexport interface EmailImageBannerViewModel {\r\n image: Media;\r\n link: Link;\r\n}\r\nexport interface EmailImageTextBlockViewModel {\r\n bodyText: string;\r\n bodyTextColor: string;\r\n bodyTextSize: string;\r\n bullets: JsonContent[];\r\n callToAction: Link;\r\n callToActionColor: string;\r\n callToActionTextColor: string;\r\n cleanBodyText: string;\r\n cleanSubheader: string;\r\n header: string;\r\n headerColor: string;\r\n headerSize: string;\r\n image: Media;\r\n imageAlignment: string;\r\n imageWidth: string;\r\n subheader: string;\r\n subheaderColor: string;\r\n subheaderSize: string;\r\n}\r\nexport interface EmailPersonalizedContentBannerViewModel {\r\n adUnitId: PersonalizedContentModel;\r\n}\r\nexport interface EmailProductBlocksViewModel {\r\n blocks: JsonContent[];\r\n}\r\nexport interface EmailProductRecommendationsBlockViewModel {\r\n brandIdFilterList: string[];\r\n categoryIdFilterNegativeList: string[];\r\n categoryIdFilterPositiveList: string[];\r\n headline: string;\r\n interval: number;\r\n popularityType: string;\r\n recommendationsType: string;\r\n}\r\nexport interface EmailTextBlockViewModel {\r\n bodyText: string;\r\n bodyTextColor: string;\r\n bodyTextSize: string;\r\n callToAction: Link;\r\n callToActionColor: string;\r\n callToActionTextColor: string;\r\n cleanBodyText: string;\r\n cleanSubheader: string;\r\n header: string;\r\n headerColor: string;\r\n headerSize: string;\r\n subheader: string;\r\n subheaderColor: string;\r\n subheaderSize: string;\r\n textAlignment: string;\r\n}\r\nexport interface EmailThreeStepBlockViewModel {\r\n backgroundColor: string;\r\n header: string;\r\n headerColor: string;\r\n headerSize: string;\r\n image: Media;\r\n imageLink: Link;\r\n steps: JsonContent[];\r\n stepsColor: string;\r\n}\r\nexport interface EmailUspBlockViewModel {\r\n backgroundColor: string;\r\n caption: string;\r\n captionColor: string;\r\n uspItems: JsonContent[];\r\n}\r\nexport interface BulletViewModel {\r\n color: string;\r\n text: string;\r\n type: string;\r\n}\r\nexport interface EmailProductViewModel {\r\n block: ProductBlockModel;\r\n}\r\nexport interface NestedBulletViewModel {\r\n value: string;\r\n}\r\nexport interface StepViewModel {\r\n bodyText: string;\r\n cleanBodyText: string;\r\n cleanHeader: string;\r\n header: string;\r\n}\r\nexport interface UspItemViewModel {\r\n callToAction: Link;\r\n callToActionColor: string;\r\n callToActionTextColor: string;\r\n headline: string;\r\n icon: Media;\r\n shortText: string;\r\n}\r\nexport interface Image {\r\n extension: string;\r\n isOriginIceCat: boolean;\r\n name: string;\r\n sortOrder: any;\r\n uri: string;\r\n}\r\nexport interface ProductBlockModel {\r\n brand: string;\r\n categoryId: string;\r\n description: string;\r\n displayName: string;\r\n image: Image;\r\n inStock: number;\r\n itemId: string;\r\n mpn: string;\r\n name: string;\r\n showPrice: boolean;\r\n title: string;\r\n url: string;\r\n wid: string;\r\n}\r\nexport enum ContentWidth {\r\n FullWidth = 0,\r\n TwoThird = 1,\r\n OneThird = 2\r\n}\r\nexport enum HorizontalAlignment {\r\n Left = 0,\r\n Right = 1\r\n}\r\nexport enum SubheaderFontSize {\r\n Normal = 0,\r\n Large = 1\r\n}\r\nexport interface BaseBlockViewModel {\r\n anchorLink: string;\r\n backgroundColor: string;\r\n backgroundImage: Media;\r\n backgroundImageBehavior: string;\r\n callToAction: Link;\r\n callToActionColor: string;\r\n caption: string;\r\n captionColor: string;\r\n captionLocation: string;\r\n contentBackgroundColor: string;\r\n header: string;\r\n headerColor: string;\r\n isBackgroundVideo: boolean;\r\n makeContentBackgroundTransparent: boolean;\r\n shimColor: string;\r\n showVideoControls: boolean;\r\n subheader: string;\r\n subheaderColor: string;\r\n video: Media;\r\n vimeoVideoId: string;\r\n}\r\nexport interface BaseTextBlockViewModel {\r\n anchorLink: string;\r\n backgroundColor: string;\r\n bodyText: string;\r\n callToAction: Link;\r\n callToActionColor: string;\r\n customBackgroundColor: string;\r\n headline: string;\r\n}\r\nexport interface BecomeACustomerBlockViewModel {\r\n anchorLink: string;\r\n appendToPreviousBlock: boolean;\r\n headline: string;\r\n info: string;\r\n origin: string;\r\n remark: string;\r\n subtitle: string;\r\n}\r\nexport interface BecomeAResellerBlockViewModel {\r\n anchorLink: string;\r\n appendToPreviousBlock: boolean;\r\n headline: string;\r\n informationBoxBullets: JsonContent[];\r\n informationBoxHeadline: string;\r\n origin: string;\r\n receiptBody: string;\r\n receiptHeadline: string;\r\n receiptImage: Media;\r\n receiptImageContent: string;\r\n receiptImageHeadline: string;\r\n showCrnField: boolean;\r\n}\r\nexport interface BrandProductGuideBlockViewModel {\r\n brandName: string;\r\n}\r\nexport interface BrandRecommendationsBlockViewModel {\r\n anchorLink: string;\r\n appendToPreviousBlock: boolean;\r\n brandCount: number;\r\n brandId: string;\r\n brandIdFilterList: string[];\r\n categoryIdFilterNegativeList: string[];\r\n categoryIdFilterPositiveList: string[];\r\n displayLocation: string;\r\n headline: string;\r\n interval: number;\r\n isSimpleView: boolean;\r\n popularity: number;\r\n type: number;\r\n useDiverseRecommendations: boolean;\r\n}\r\nexport interface BrandsBlockViewModel {\r\n anchorLink: string;\r\n appendToPreviousBlock: boolean;\r\n headline: string;\r\n linkText: string;\r\n}\r\nexport interface CableGuideBlockViewModel {\r\n anchorLink: string;\r\n appendToPreviousBlock: boolean;\r\n productPageSize: number;\r\n}\r\nexport interface CancelNewsletterBlockViewModel {\r\n anchorLink: string;\r\n appendToPreviousBlock: boolean;\r\n headline: string;\r\n subtitle: string;\r\n}\r\nexport interface CategoryBlockViewModel {\r\n anchorLink: string;\r\n appendToPreviousBlock: boolean;\r\n backgroundColor: string;\r\n customBackgroundColor: string;\r\n headline: string;\r\n settings: PersonalizedContentModel;\r\n}\r\nexport interface CategoryRecommendationsBlockViewModel {\r\n anchorLink: string;\r\n appendToPreviousBlock: boolean;\r\n brandId: string;\r\n brandIdFilterList: string[];\r\n categoryCount: number;\r\n categoryIdFilterNegativeList: string[];\r\n categoryIdFilterPositiveList: string[];\r\n displayLocation: string;\r\n headline: string;\r\n interval: number;\r\n popularity: number;\r\n type: number;\r\n}\r\nexport interface CategoryTileBlockViewModel {\r\n anchorLink: string;\r\n headline: string;\r\n imageMode: string;\r\n tiles: JsonContent[];\r\n}\r\nexport interface CategoryTileViewModel {\r\n buttonFullWidth: boolean;\r\n callToAction: Link;\r\n description: string;\r\n headline: string;\r\n image: Media;\r\n}\r\nexport interface CodeBlockViewModel {\r\n anchorLink: string;\r\n appendToPreviousBlock: boolean;\r\n author: string;\r\n code: string;\r\n description: string;\r\n heading: string;\r\n}\r\nexport interface EmployeesBlockViewModel {\r\n employeeNumbers: string[];\r\n headline: string;\r\n}\r\nexport interface FaqBlockItemViewModel {\r\n answer: string;\r\n question: string;\r\n}\r\nexport interface FaqBlockViewModel {\r\n faqs: JsonContent[];\r\n headline: string;\r\n}\r\nexport interface FullWidthTextBlockViewModel extends BaseTextBlockViewModel {\r\n appendToPreviousBlock: boolean;\r\n}\r\nexport interface HalfWidthBlocksViewModel {\r\n anchorLink: string;\r\n appendToPreviousBlock: boolean;\r\n blocks: JsonContent[];\r\n}\r\nexport interface HalfWidthBlockViewModel extends BaseBlockViewModel {\r\n}\r\nexport interface HeroBannerUspItemViewModel {\r\n icon: Media;\r\n text: string;\r\n}\r\nexport interface HeroBannerViewModel extends BaseBlockViewModel {\r\n appendToPreviousBlock: boolean;\r\n contentAligmentValue: HorizontalAlignment;\r\n contentWidthValue: ContentWidth;\r\n subheaderFontSizeValue: SubheaderFontSize;\r\n}\r\nexport interface HeroBannerWithUspBlockViewModel {\r\n backgroundImage: Media;\r\n callToAction: Link;\r\n callToActionColor: string;\r\n header: string;\r\n headerColor: string;\r\n mobileVimeoVideoId: string;\r\n shimColor: string;\r\n showUspItemsOnMobile: boolean;\r\n subheader: string;\r\n uspItems: JsonContent[];\r\n vimeoVideoId: string;\r\n}\r\nexport interface IframeBlockViewModel {\r\n anchorLink: string;\r\n headline: string;\r\n iframeTitle: string;\r\n iframeUrl: string;\r\n}\r\nexport interface JotFormBlockViewModel {\r\n allowFullscreen: boolean;\r\n allowScrolling: boolean;\r\n allowTransparency: boolean;\r\n anchorLink: string;\r\n headline: string;\r\n jotFormId: string;\r\n}\r\nexport interface LatestCampaignsBlockViewModel {\r\n}\r\nexport interface LatestNewsBlockViewModel {\r\n anchorLink: string;\r\n}\r\nexport interface MapBlockViewModel {\r\n anchorLink: string;\r\n mapLocations: JsonContent[];\r\n mapType: string;\r\n maxZoom: number;\r\n minZoom: number;\r\n}\r\nexport interface MapLocationBlockViewModel {\r\n address: string;\r\n businessEntityID: string;\r\n country: string;\r\n email: string;\r\n gpsLatitude: string;\r\n gpsLongitude: string;\r\n groupName: string;\r\n link: Link;\r\n locationType: string;\r\n phoneNumber: string;\r\n postalCodeAndCity: string;\r\n}\r\nexport interface PersonalizedContentBlockViewModel {\r\n anchorLink: string;\r\n appendToPreviousBlock: boolean;\r\n settings: PersonalizedContentModel;\r\n smallAdUnit1: PersonalizedContentModel;\r\n smallAdUnit2: PersonalizedContentModel;\r\n}\r\nexport interface ProductCategoriesViewModel {\r\n anchorLink: string;\r\n header: string;\r\n}\r\nexport interface ProductGuideBlockViewModel {\r\n anchorLink: string;\r\n appendToPreviousBlock: boolean;\r\n guideId: string;\r\n productGuideTitle: string;\r\n productPageSize: number;\r\n searchContent: string;\r\n searchHeadline: string;\r\n startInStepByStep: boolean;\r\n stepByStepContent: string;\r\n stepByStepHeadline: string;\r\n}\r\nexport interface ProductGuideBrandItemViewModel {\r\n brand: string;\r\n imageUrl: string;\r\n optionalBrandProductGuideLink: NameAndUrl;\r\n}\r\nexport interface ProductGuideBrandsBlockViewModel {\r\n enableOtherBrands: boolean;\r\n headline: string;\r\n productGuideBrandItems: JsonContent[];\r\n subheadline: string;\r\n}\r\nexport interface ProductGuideConfigurationBlockViewModel {\r\n anchorLink?: string;\r\n blocks?: JsonContent[];\r\n confirmText?: string;\r\n headline: string;\r\n introductionText?: string;\r\n successText?: string;\r\n}\r\nexport interface ProductListBlockViewModel {\r\n anchorLink: string;\r\n header: string;\r\n productBackgroundColor: string;\r\n productIds: string[];\r\n}\r\nexport interface ProductRecommendationsBlockViewModel {\r\n allowFillIfNecessary: boolean;\r\n anchorLink: string;\r\n appendToPreviousBlock: boolean;\r\n brandId: string;\r\n brandIdFilterList: string[];\r\n categoryId: string;\r\n categoryIdFilterNegativeList: string[];\r\n categoryIdFilterPositiveList: string[];\r\n displayLocation: string;\r\n hasImages: boolean;\r\n headline: string;\r\n interval: number;\r\n popularity: number;\r\n productBackgroundColor: string;\r\n productCount: number;\r\n showFeedProducts: boolean;\r\n stockFilter: number;\r\n type: number;\r\n useListView: boolean;\r\n}\r\nexport interface QuoteBlockViewModel {\r\n anchorLink: string;\r\n appendToPreviousBlock: boolean;\r\n author: string;\r\n backgroundColor: string;\r\n customBackgroundColor: string;\r\n quote: string;\r\n}\r\nexport interface RackConfiguratorTileViewmodel {\r\n buttonText: string;\r\n headline: string;\r\n icon: Media;\r\n rackType: number;\r\n subHeader: string;\r\n}\r\nexport interface RecentlyViewedProductsViewModel {\r\n anchorLink: string;\r\n recentlyViewedHeader: string;\r\n}\r\nexport interface SimpleUspBlockViewModel {\r\n appendToPreviousBlock: boolean;\r\n backgroundColor: string;\r\n showBlockOnMobile: boolean;\r\n textColor: string;\r\n uniqueSellingPointItems: JsonContent[];\r\n}\r\nexport interface StatisticBlockItemViewModel {\r\n animationDurationMS: number;\r\n color: string;\r\n customColor: string;\r\n statistic: string;\r\n value: number;\r\n valuePrefix: string;\r\n valueSuffix: string;\r\n}\r\nexport interface StatisticsBlockViewModel {\r\n appendToPreviousBlock: boolean;\r\n backgroundColor: string;\r\n customBackgroundColor: string;\r\n statistics: JsonContent[];\r\n}\r\nexport interface StepBlockViewModel {\r\n description: string;\r\n headline: string;\r\n icon: Media;\r\n}\r\nexport interface StepsBlockViewModel {\r\n stepItems: JsonContent[];\r\n}\r\nexport interface SubscribeNewsletterBlockViewModel {\r\n anchorLink: string;\r\n appendToPreviousBlock: boolean;\r\n}\r\nexport interface TabbedContentBlockViewModel {\r\n anchorLink: string;\r\n tabs: JsonContent[];\r\n}\r\nexport interface TabbedContentViewModel {\r\n anchorLink: string;\r\n blocks: JsonContent[];\r\n headline: string;\r\n keepAlive: boolean;\r\n}\r\nexport interface TextBlockViewModel extends BaseTextBlockViewModel {\r\n}\r\nexport interface TextWithImageBlockViewModel {\r\n anchorLink: string;\r\n callToAction: Link;\r\n callToActionColor: string;\r\n headline: string;\r\n headlineColor: string;\r\n image: Media;\r\n placeImageRight: boolean;\r\n subHeadline: string;\r\n subHeadlineColor: string;\r\n text: string;\r\n textColor: string;\r\n}\r\nexport interface TwoPlusOneBlocksViewModel {\r\n anchorLink: string;\r\n appendToPreviousBlock: boolean;\r\n halfWidthBlocks: JsonContent[];\r\n largeBlock: JsonContent[];\r\n largeBlockAlignmentValue: HorizontalAlignment;\r\n}\r\nexport interface UniqueSellingPointBlocksViewModel {\r\n anchorLink: string;\r\n appendToPreviousBlock: boolean;\r\n backgroundColor: string;\r\n customBackgroundColor: string;\r\n headline: string;\r\n uniqueSellingPointItems: JsonContent[];\r\n}\r\nexport interface UniqueSellingPointItemViewModel {\r\n anchorLink: string;\r\n headline: string;\r\n icon: Media;\r\n iconBackgroundColor: string;\r\n link: Link;\r\n shortText: string;\r\n}\r\nexport interface ProductGuideBrandSettingsViewModel {\r\n brands: ProductGuideBrandSettingsViewObject[];\r\n general: ProductGuideBrandSettingsViewObject;\r\n}\r\nexport interface ProductGuideBrandSettingsViewObject {\r\n brand: string;\r\n headline: string;\r\n helpLinkText: string;\r\n helpText: string;\r\n searchPlaceholder: string;\r\n}\r\nexport interface ProductGuideSettingsViewModel {\r\n confirmText: string;\r\n introductionText: string;\r\n successText: string;\r\n}\r\nexport interface DataViewModel {\r\n audience: string[];\r\n audienceName: string[];\r\n id: string;\r\n launchDate: string;\r\n message: string;\r\n scheduled: boolean;\r\n timeOfDay: string;\r\n}\r\nexport interface EmailLaunchStatusViewModel {\r\n data: DataViewModel;\r\n lambdaVersion: string;\r\n result: string;\r\n status: string;\r\n statusMessage: string;\r\n}\r\nexport interface DictionaryViewModel {\r\n created: Date;\r\n cultureName: string;\r\n dictionaryKey: string;\r\n dictionaryValues: { [key: string]: string };\r\n}\r\nexport interface KeyValuePair {\r\n key: TKey;\r\n value: TValue;\r\n}\r\nexport enum LinkType {\r\n Content = 0,\r\n Media = 1,\r\n External = 2\r\n}\r\n\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"h-full overflow-hidden\",class:{ 'flex flex-col': _vm.shouldUseFlexBox }},[(_vm.showCaptionAsContentTitle && _vm.content.caption)?_c('SmartHeadline',{staticClass:\"text-18 md:text-34 mb-10\",attrs:{\"style-as-h1\":_vm.isFirstBlock}},[_vm._v(\" \"+_vm._s(_vm.content.caption)+\" \")]):_vm._e(),(_vm.content)?_c('section',{staticClass:\"relative\",class:{ 'has-video-or-image' : _vm.content.vimeoVideoId || _vm.content.video || _vm.showBackgroundImage,\n 'flex flex-col flex-1': _vm.shouldUseFlexBox }},[_c('section',{staticClass:\"relative\",class:{ 'flex flex-col flex-1': _vm.shouldUseFlexBox },style:(_vm.aspectRatioStyling)},[_c('div',{class:{ 'absolute inset-0 overflow-hidden': !_vm.shouldUseFlexBox,\n 'flex flex-col flex-1': _vm.shouldUseFlexBox }},[(_vm.content.vimeoVideoId || _vm.content.video)?_c('div',{staticClass:\"relative flex flex-col h-full flex-1\",style:(_vm.videoContainerStyle)},[(_vm.content.video)?_c('video',{ref:\"videoMount\",staticClass:\"video flex-1\",attrs:{\"controls\":false,\"autoplay\":_vm.content.isBackgroundVideo,\"loop\":_vm.content.isBackgroundVideo,\"height\":\"100%\",\"width\":\"100%\"},domProps:{\"muted\":_vm.content.isBackgroundVideo}},[_c('source',{attrs:{\"src\":_vm.content.video.url,\"type\":'video/' + _vm.content.video.extension}}),_vm._v(\" Your browser does not support the video tag. \")]):(_vm.content.vimeoVideoId)?_c('div',{ref:\"videoMount\",class:{'video absolute inset-0': !_vm.loadingVideo}}):_vm._e()]):(_vm.showBackgroundImage)?_c('div',{staticClass:\"h-full\"},[_c('ResponsiveImage',{attrs:{\"image-url\":_vm.content.backgroundImage.url,\"aspect-ratio\":_vm.realAspectRatio,\"width-on-screen\":_vm.realWidthOnScreen,\"format\":_vm.backgroundImageFormat,\"mode\":\"crop\",\"focal-point\":_vm.content.backgroundImage.focalPoint,\"alt\":_vm.content.backgroundImage.name},on:{\"loaded\":function($event){return _vm.$emit('loaded')}}})],1):(_vm.adImageProps)?_c('img',_vm._b({staticClass:\"h-full relative\",style:(_vm.adImageStyle),attrs:{\"alt\":\"\"},on:{\"load\":function($event){return _vm.$emit('loaded')}}},'img',_vm.adImageProps,false)):_c('div',{staticClass:\"h-full\",style:(_vm.backgroundColorStyle(_vm.content.backgroundColor))})]),(_vm.showShim)?_c('section',{staticClass:\"absolute inset-0\",style:(_vm.shimColor)}):_vm._e()]),_c('section',{staticClass:\"content-wrapper flex flex-col h-full w-full justify-center\",class:{ 'has-controls': _vm.showVideoControls, 'playing': _vm.isPlaying, 'wide-banner': _vm.isWithinWideBannerAspectRatio }},[(_vm.renderContent)?_c('div',{staticClass:\"flex flex-col justify-center overflow-hidden\",class:{'items-end': _vm.alignRight },style:(_vm.contentTakeoverTransformStyle)},[_c('div',{staticClass:\"content flex items-center\",class:_vm.contentClass,style:(_vm.backgroundContentColorStyle)},[_c('div',[(_vm.content.caption)?_c('SmartHeadline',{staticClass:\"text-12 font-bold\",class:{\n 'mb-10': _vm.content.header || _vm.content.subheader,\n 'sm:mb-15': (_vm.content.header || _vm.content.subheader) && !_vm.isWithinWideBannerAspectRatio },style:(_vm.colorStyle(_vm.content.captionColor)),attrs:{\"level\":_vm.isFirstBlock ? 'h1' : 'h2'}},[_vm._v(\" \"+_vm._s(_vm.content.caption)+\" \")]):_vm._e(),(_vm.content.header)?_c('SmartHeadline',{directives:[{name:\"font-content-sync\",rawName:\"v-font-content-sync\",value:(_vm.headerFontSyncData),expression:\"headerFontSyncData\"}],class:{ 'mb-10': _vm.content.subheader, 'sm:mb-15': _vm.content.subheader && !_vm.isWithinWideBannerAspectRatio },style:(_vm.colorStyle(_vm.content.headerColor)),attrs:{\"level\":_vm.headerHeadlineLevel,\"style-as-h1\":true}},[_vm._v(\" \"+_vm._s(_vm.content.header)+\" \")]):_vm._e(),(_vm.content.subheader)?_c('p',{directives:[{name:\"font-content-sync\",rawName:\"v-font-content-sync\",value:(_vm.subHeaderFontSyncData),expression:\"subHeaderFontSyncData\"}],staticClass:\"leading-normal whitespace-pre-line\",style:(_vm.colorStyle(_vm.content.subheaderColor))},[_vm._v(\" \"+_vm._s(_vm.content.subheader)+\" \")]):_vm._e(),(_vm.showCallToActionButton)?_c('CallToAction',{staticClass:\"cta--rounded\",class:{ 'mt-15': _vm.isWithinWideBannerAspectRatio, 'mt-20': !_vm.isWithinWideBannerAspectRatio },attrs:{\"hex-color\":_vm.ctaColor,\"text\":_vm.content.callToAction.name,\"href\":_vm.content.callToAction.url,\"target\":_vm.content.callToAction.target,\"on-click-event\":_vm.clickHandler}}):(_vm.showCallToActionVideoOverlayButton)?_c('CallToAction',{staticClass:\"cta--rounded\",class:{ 'mt-15': _vm.isWithinWideBannerAspectRatio, 'mt-20': !_vm.isWithinWideBannerAspectRatio },attrs:{\"hex-color\":_vm.ctaColor,\"text\":_vm.content.overlayVimeoCta,\"on-click-event\":_vm.clickHandler},on:{\"click\":_vm.clickOpenVideoOverlay}}):_vm._e()],1)])]):_vm._e(),(_vm.showVideoControls)?_c('div',{staticClass:\"video-controls flex justify-center\",class:{ 'mt-20': _vm.renderContent }},[_c('button',{staticClass:\"controls\",on:{\"click\":function($event){return _vm.toggleVideoState()}}},[(!_vm.isPlaying)?[_c('CIcon',{staticClass:\"play\",attrs:{\"name\":\"play\",\"width\":\"30\",\"height\":\"30\"}}),_c('span',{staticClass:\"sr-only\"},[_vm._v(\"Play\")])]:[_c('CIcon',{staticClass:\"pause\",attrs:{\"name\":\"pause\",\"width\":\"30\",\"height\":\"30\"}}),_c('span',{staticClass:\"sr-only\"},[_vm._v(\"Pause\")])]],2)]):_vm._e(),(_vm.loadingVideo)?_c('div',{staticClass:\"absolute inset-0\"},[_c('SpinnerOverlay',{attrs:{\"show\":\"\"}})],1):_vm._e()]),(_vm.showCallToActionBlock)?_c('CultureAwareRouterLink',{staticClass:\"absolute inset-0\",attrs:{\"to\":_vm.content.callToAction.url,\"target\":_vm.content.callToAction.target},nativeOn:{\"click\":function($event){return _vm.clickHandler()}}}):_vm._e()],1):_c('section',{staticClass:\"relative\",style:(_vm.aspectRatioStyling)},[_c('div',{staticClass:\"absolute inset-0\"},[_c('SpinnerOverlay',{attrs:{\"show\":!_vm.contentLoadError}})],1)])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Vue, Component, Prop, Watch } from 'vue-property-decorator';\r\nimport { ContentWidth, HeroBannerViewModel, HorizontalAlignment, SubheaderFontSize } from '@/types/contentServerContract';\r\nimport CallToAction from '@/project/form/CallToAction.vue';\r\nimport VimeoPlayer from '@vimeo/player';\r\nimport breakpointState from '@/core/responsive/breakpoints/breakpointsState.observable';\r\nimport { MAX_MD, MIN_LG, MIN_MD, MAX_SM, MIN_XS } from '@/core/config/breakpointConfig';\r\nimport { hexToRgb, isValidHexColor } from '@/core/color/color.service';\r\nimport { AdContentBlockViewModel, AdImage } from '@/types/apiServerContract';\r\nimport SpinnerOverlay from '@/project/spinners/SpinnerOverlay.vue';\r\nimport SmartHeadline from '@/core/ui-components/SmartHeadline.vue';\r\nimport tailwind from '@/styling/tailwind.config';\r\nimport themeService from '@/project/app/themes/theme.service';\r\nimport loggingService from '@/core/logging.service';\r\nimport SmartParagraph from '@/core/ui-components/SmartParagraph.vue';\r\nimport { extensionIsGifOrUndefined } from '@/project/shared/responsive-umbraco-image.service';\r\nimport videoFullscreenOverlayService from '@/project/modals/overlays/VimeoVideoFullscreenOverlay.service';\r\n\r\nconst mobileAspectRatio = 3 / 2;\r\nconst semiTransparencyPercentage = 0.75;\r\nconst videoAspectRatio = 16 / 9;\r\nconst wideBannerAspectRatio = 5;\r\n\r\ninterface VideoElm {\r\n play: () => void;\r\n pause: () => void;\r\n on: any;\r\n onloadeddata: () => void;\r\n getVideoWidth: () => Promise;\r\n getVideoHeight: () => Promise;\r\n}\r\ninterface CombinedHeroBannerViewModel extends HeroBannerViewModel {\r\n // Mixing HeroBannerViewModel with stuff from AdContentBlockViewModel\r\n overlayVimeoVideoId?:string;\r\n overlayVimeoCta?:string;\r\n}\r\n\r\n@Component({\r\n components: { SmartParagraph, SpinnerOverlay, CallToAction, SmartHeadline }\r\n})\r\nexport default class ImageTextVideoBlock extends Vue {\r\n /* Could also be a BaseBlockViewModel - but we handle the missing props:\r\n contentAlignment, contentWidth, subheaderFontSize.\r\n Could also be a AdContentBlockViewModel, but we handle the extra backgroundImages special */\r\n @Prop({\r\n type: Object\r\n }) content!: CombinedHeroBannerViewModel | null;\r\n\r\n @Prop({\r\n type: Boolean,\r\n default: false\r\n }) isFirstBlock!: boolean;\r\n\r\n @Prop({\r\n type: Boolean,\r\n default: false\r\n }) contentLoadError!: boolean;\r\n\r\n @Prop({\r\n type: Function,\r\n default: () => {}\r\n }) clickHandler!: () => void;\r\n\r\n @Prop({\r\n type: Boolean,\r\n default: false\r\n }) isHeroBanner!: boolean;\r\n\r\n @Prop({\r\n type: Boolean,\r\n default: false\r\n }) useFlexBox!: boolean;\r\n\r\n @Prop({\r\n required: true,\r\n type: Number\r\n }) widthOnScreen!: number;\r\n\r\n @Prop({\r\n required: true,\r\n type: Number\r\n }) aspectRatio!: number;\r\n\r\n @Prop()\r\n forceVimeoAspectRatio!: number;\r\n\r\n @Prop({\r\n required: false,\r\n type: Object\r\n }) aspectRatioMargins!: { [bp: string]: number };\r\n\r\n get shouldUseFlexBox() {\r\n return this.useFlexBox && !this.isMobile;\r\n }\r\n\r\n video: VimeoPlayer | VideoElm | null = null;\r\n isPlaying: boolean = false;\r\n loadingVideo: boolean = false;\r\n contentBackgroundColor: string = '';\r\n vimeoVideoAspectRatio: number = 0;\r\n\r\n get isWithinWideBannerAspectRatio() {\r\n return this.aspectRatio >= wideBannerAspectRatio;\r\n }\r\n\r\n get isMobile() {\r\n return breakpointState.isBreakpointActive(MAX_SM);\r\n }\r\n\r\n get realAspectRatio(): number {\r\n if (this.shouldUseFlexBox) return 0;\r\n if (!this.isMobile && this.forceVimeoAspectRatio) return this.forceVimeoAspectRatio;\r\n\r\n // For mobile, aspect-ratio is controlled from within.\r\n return this.isMobile ? mobileAspectRatio : this.vimeoVideoAspectRatio ? this.vimeoVideoAspectRatio : this.aspectRatio;\r\n }\r\n\r\n get realWidthOnScreen(): number {\r\n // For mobile, widht is controlled from within.\r\n return this.isMobile ? 100 : this.widthOnScreen;\r\n }\r\n\r\n get margin() {\r\n if (!this.aspectRatioMargins) return 0;\r\n\r\n const activeBpDef = Object.keys(this.aspectRatioMargins).find(bpDef => breakpointState.isBreakpointActive(bpDef));\r\n const result = activeBpDef ? this.aspectRatioMargins[activeBpDef] : 0;\r\n return result;\r\n }\r\n\r\n get aspectRatioStyling(): Partial {\r\n if (this.shouldUseFlexBox) return {};\r\n\r\n const paddingPct = (1 / this.realAspectRatio) * 100;\r\n return ({\r\n paddingBottom: `calc(${paddingPct}% - ${this.margin}px)`\r\n });\r\n }\r\n\r\n get renderContent() {\r\n return !this.loadingVideo && !this.showCaptionAsContentTitle &&\r\n (this.content?.caption !== '' || this.content?.header !== '' || this.content?.subheader !== '' || this.content?.callToAction !== null);\r\n }\r\n\r\n created() {\r\n this.loadingVideo = !!(this.content?.video || this.content?.vimeoVideoId);\r\n }\r\n\r\n async mounted() {\r\n if (!this.content) return; // For normal blocks (not ad) it will always be not null\r\n\r\n if (this.content.video) {\r\n this.video = this.$refs.videoMount as any as VideoElm;\r\n\r\n this.video.onloadeddata = () => {\r\n this.loadingVideo = false;\r\n };\r\n } else if (this.content.vimeoVideoId) {\r\n const options = {\r\n id: ensureId(this.content.vimeoVideoId),\r\n autoplay: this.content.isBackgroundVideo,\r\n loop: this.content.isBackgroundVideo,\r\n muted: this.content.isBackgroundVideo,\r\n controls: false,\r\n title: false,\r\n byline: false,\r\n portrait: false,\r\n autopause: !this.content.isBackgroundVideo // Ensure that all videos on a page will autoplay\r\n };\r\n // eslint-disable-next-line no-new\r\n this.video = new VimeoPlayer(this.$refs.videoMount as HTMLElement, options) as VimeoPlayer;\r\n\r\n this.video.on('ended', () => {\r\n this.isPlaying = false;\r\n });\r\n\r\n this.video.on('loaded', () => {\r\n this.getVimeoVideoAspectRatio();\r\n });\r\n }\r\n\r\n function ensureId(idOrUrl: string): number {\r\n const idParts = idOrUrl.split(/(\\\\|\\/)/);\r\n let id = idOrUrl;\r\n if (idParts.length > 1) {\r\n id = idParts[idParts.length - 1];\r\n }\r\n return parseInt(id, 10);\r\n }\r\n }\r\n\r\n @Watch('content', {\r\n immediate: true\r\n })\r\n onContentChange(content: HeroBannerViewModel | undefined) {\r\n if (!content) return;\r\n // Set defaults for properties. Width and subheader-font varies depending on whether hero or not\r\n content.contentAligmentValue = content.contentAligmentValue ?? HorizontalAlignment.Left;\r\n content.contentWidthValue = content.contentWidthValue ?? (this.isHeroBanner ? ContentWidth.TwoThird : ContentWidth.FullWidth);\r\n content.subheaderFontSizeValue = content.subheaderFontSizeValue ?? (this.isHeroBanner ? SubheaderFontSize.Large : SubheaderFontSize.Normal);\r\n }\r\n\r\n async getVimeoVideoAspectRatio() {\r\n if (this.video) {\r\n const width = await this.video.getVideoWidth();\r\n const height = await this.video.getVideoHeight();\r\n this.vimeoVideoAspectRatio = width / height;\r\n }\r\n\r\n this.loadingVideo = false;\r\n }\r\n\r\n get headerFontSyncData(): object {\r\n // Minimum is controlled by current subheader size\r\n const minSize = this.subheaderSize === 'small' ? 15 : 22;\r\n return [\r\n [MIN_LG, { min: minSize, max: 34 }],\r\n [MIN_MD, { min: minSize, max: 22 }],\r\n [MIN_XS, { min: minSize, max: 18 }]\r\n ];\r\n }\r\n\r\n toggleVideoState() {\r\n if (!this.video) return;\r\n\r\n if (this.isPlaying) {\r\n try {\r\n this.video.pause();\r\n } catch (e) {\r\n loggingService.error(e);\r\n }\r\n } else {\r\n try {\r\n this.video.play();\r\n } catch (e) {\r\n loggingService.error(e);\r\n }\r\n }\r\n\r\n this.isPlaying = !this.isPlaying;\r\n }\r\n\r\n hexToRgbWithDefault(hex: string, alpha?: number): string {\r\n if (!isValidHexColor(hex)) return tailwind.theme.colors.black;\r\n return hexToRgb(hex, alpha);\r\n }\r\n\r\n backgroundColorStyle(backgroundColor: string, semiTransparent = false): object {\r\n let result = 'transparent';\r\n\r\n if (this.isColorDefined(backgroundColor)) {\r\n result = this.hexToRgbWithDefault(backgroundColor, semiTransparent ? semiTransparencyPercentage : undefined);\r\n }\r\n\r\n return ({\r\n backgroundColor: result\r\n });\r\n }\r\n\r\n get backgroundContentColorStyle(): Partial {\r\n if (!this.content || this.loadingVideo) return {};\r\n\r\n const backgroundColor = this.content.contentBackgroundColor;\r\n const semiTransparent = this.content.makeContentBackgroundTransparent;\r\n\r\n let result = 'transparent';\r\n\r\n if (this.shouldShowContentBackground && this.isColorDefined(backgroundColor)) {\r\n result = this.hexToRgbWithDefault(backgroundColor, semiTransparent ? semiTransparencyPercentage : undefined);\r\n }\r\n\r\n this.contentBackgroundColor = result;\r\n\r\n return ({\r\n backgroundColor: result\r\n });\r\n }\r\n\r\n get backgroundImageFormat() {\r\n return extensionIsGifOrUndefined(this.content?.backgroundImage);\r\n }\r\n\r\n get contentTakeoverTransformStyle(): Partial {\r\n // Take over banner is 200px taller than normal banners, so we have to push content down by half (100)\r\n // to ensure it is centered correctly\r\n const translateY = this.isTakeOverBanner && !this.isMobile ? 100 : 0;\r\n\r\n return ({\r\n transform: `translateY(${translateY}px)`\r\n });\r\n }\r\n\r\n get ctaColor(): string | null {\r\n return this.content?.callToActionColor || null;\r\n }\r\n\r\n get headerHeadlineLevel(): string {\r\n let level;\r\n\r\n if (this.isFirstBlock && !this.content?.caption && this.content?.header) {\r\n level = 'h1';\r\n } else if ((this.isFirstBlock && this.content?.caption && this.content?.header) || (!this.isFirstBlock && !this.content?.caption && this.content?.header)) {\r\n level = 'h2';\r\n } else {\r\n level = 'h3';\r\n }\r\n\r\n return level;\r\n }\r\n\r\n isColorDefined(color: string): boolean {\r\n return color?.length === 7 ?? false; // #233445\r\n }\r\n\r\n colorStyle(hexColor: string): object {\r\n const EETBlack = tailwind.theme.colors.black;\r\n return ({\r\n color: this.contentBackgroundColor === 'white' ? EETBlack : hexColor ? this.hexToRgbWithDefault(hexColor) : EETBlack\r\n });\r\n }\r\n\r\n get alignRight(): boolean {\r\n return this.content?.contentAligmentValue === HorizontalAlignment.Right; // Left is default\r\n }\r\n\r\n get contentClass(): string {\r\n if (!this.content) return '';\r\n\r\n let widthCls = 'w-full'; // Default for mobile\r\n if (!this.isMobile) {\r\n switch (this.content.contentWidthValue) {\r\n case ContentWidth.OneThird:\r\n widthCls = 'w-1/3';\r\n break;\r\n case ContentWidth.TwoThird:\r\n widthCls = 'w-2/3';\r\n break;\r\n case ContentWidth.FullWidth:\r\n widthCls = 'w-full';\r\n break;\r\n }\r\n }\r\n return `${widthCls}`;\r\n }\r\n\r\n get subHeaderFontSyncData(): object {\r\n // Minimum is controlled by current subheader size\r\n const minSize = this.subheaderSize === 'small' ? 12 : this.video ? 14 : 12;\r\n const maxSize = this.subheaderSize === 'small' ? 15 : this.video ? 18 : 22;\r\n const maxLines = 5;\r\n return [\r\n [MIN_LG, { min: minSize, max: maxSize, maxLines: maxLines }],\r\n [MIN_MD, { min: minSize, max: maxSize, maxLines: maxLines }],\r\n [MIN_XS, { min: minSize, max: maxSize, maxLines: maxLines }]\r\n ];\r\n }\r\n\r\n get subheaderSize(): undefined | 'small' | 'large' {\r\n if (!this.content) return undefined;\r\n\r\n if (breakpointState.isBreakpointActive(MAX_MD)) {\r\n return 'small';\r\n }\r\n\r\n return this.content.subheaderFontSizeValue === SubheaderFontSize.Normal ? 'small' : 'large';\r\n }\r\n\r\n get adnuntiusImages() : AdImage[] {\r\n const adImages = (this.content as any as AdContentBlockViewModel).backgroundImages;\r\n if (!adImages || adImages.length === 0) {\r\n return [];\r\n }\r\n\r\n // Take the ones matching aspect-ratio\r\n return adImages\r\n .filter(img => isMatchingImageAspectRatio(img, this.realAspectRatio));\r\n\r\n function isMatchingImageAspectRatio(image: AdImage, aspectRatio: number): boolean {\r\n // Allow for 5 percentage in difference, to be a bit relaxed. Image will overflow correctly\r\n const allowedDelta = aspectRatio * 0.05;\r\n return Math.abs(image.width / image.height - aspectRatio) <= allowedDelta;\r\n }\r\n }\r\n\r\n get adImageProps(): object | null {\r\n if (this.adnuntiusImages.length === 0) {\r\n return null;\r\n }\r\n\r\n // Src-set\r\n const srcset = this.adnuntiusImages\r\n .map(img => `${img.url} ${img.width}w`)\r\n .join(', ');\r\n\r\n // src. Take largest\r\n const src = this.adnuntiusImages\r\n .sort((imageA, imageB) => imageA.width - imageB.width)[this.adnuntiusImages.length - 1].url;\r\n\r\n // Sizes\r\n const sizes = `${this.realWidthOnScreen}vw`;\r\n\r\n return {\r\n srcset,\r\n src,\r\n sizes\r\n };\r\n }\r\n\r\n get shimColor(): Partial {\r\n return { backgroundColor: this.content?.shimColor, opacity: '0.3' };\r\n }\r\n\r\n get adImageStyle(): object {\r\n if (this.adnuntiusImages.length === 0) return {};\r\n\r\n // Assume aspect ratio is the same for all pictures (they are filtered on aspect-ratio), so grab the first\r\n const image = this.adnuntiusImages[0];\r\n const imgAspectRatio = image.width / image.height;\r\n if (imgAspectRatio > this.realAspectRatio) {\r\n return ({\r\n height: '100%',\r\n width: 'auto',\r\n maxWidth: 'none',\r\n left: '50%',\r\n transform: 'translateX(-50%)'\r\n });\r\n } else {\r\n return ({\r\n height: 'auto',\r\n width: '100%',\r\n maxHeight: 'none',\r\n top: '50%',\r\n transform: 'translateY(-50%)'\r\n });\r\n }\r\n }\r\n\r\n get videoContainerMoreNarrowThanVideo() {\r\n return this.realAspectRatio < videoAspectRatio;\r\n }\r\n\r\n get videoContainerStyle(): Partial {\r\n if (!this.content) return {};\r\n\r\n return this.videoContainerMoreNarrowThanVideo ? ({\r\n width: 100 + '%',\r\n height: '100%',\r\n left: '50%',\r\n transform: 'translateX(-50%)'\r\n }) : ({\r\n ...(!!(this.content.vimeoVideoId) && { height: 100 * videoAspectRatio + '%' }),\r\n width: '100%',\r\n top: '50%',\r\n transform: 'translateY(-50%)'\r\n });\r\n }\r\n\r\n get shouldShowContentBackground(): boolean {\r\n return this.showBackgroundImage || !!((this.content as any as AdContentBlockViewModel)?.backgroundImages?.length > 0) || !!this.content?.vimeoVideoId;\r\n }\r\n\r\n get showVideoControls() {\r\n return this.content && !this.loadingVideo && this.video && !this.content.isBackgroundVideo;\r\n }\r\n\r\n get showCaptionAsContentTitle() {\r\n return this.content?.captionLocation === 'Top';\r\n }\r\n\r\n get showBackgroundImage(): boolean {\r\n return !!(this.content?.backgroundImage?.url ?? false);\r\n }\r\n\r\n get showShim(): boolean {\r\n return !!this.content?.shimColor && (!!this.content.vimeoVideoId || !!this.content.video || this.showBackgroundImage || !!this.adImageProps);\r\n }\r\n\r\n get showCallToActionButton(): boolean {\r\n // Show button if there are no overlayVimeoVideoId (then another button should be shown)\r\n return !!(this.content?.callToAction?.name ?? false);\r\n }\r\n\r\n get showCallToActionBlock(): boolean {\r\n return !this.showCallToActionButton && (!!this.content?.callToAction?.url ?? false);\r\n }\r\n\r\n get showCallToActionVideoOverlayButton(): boolean {\r\n return !!(this.content?.overlayVimeoVideoId && this.content?.overlayVimeoCta);\r\n }\r\n\r\n get isTakeOverBanner() {\r\n return this.isFirstBlock && themeService.isTakeOverEnabled;\r\n }\r\n\r\n async clickOpenVideoOverlay() {\r\n if (this.content?.overlayVimeoVideoId) {\r\n if (this.video) {\r\n // Pauses video background while playing overlay video\r\n this.video.pause();\r\n }\r\n await videoFullscreenOverlayService.show(this.content.overlayVimeoVideoId, true);\r\n if (this.video) {\r\n // Starts video background again, after video overlay has been closed\r\n this.video.play();\r\n }\r\n }\r\n }\r\n}\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ImageTextVideoBlock.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ImageTextVideoBlock.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ImageTextVideoBlock.vue?vue&type=template&id=c395eb4e&scoped=true&\"\nimport script from \"./ImageTextVideoBlock.vue?vue&type=script&lang=ts&\"\nexport * from \"./ImageTextVideoBlock.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./ImageTextVideoBlock.vue?vue&type=style&index=0&id=c395eb4e&lang=less&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"c395eb4e\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--11-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../../../node_modules/less-loader/dist/cjs.js??ref--11-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ImageTextVideoBlock.vue?vue&type=style&index=0&id=c395eb4e&lang=less&scoped=true&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--11-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../../../node_modules/less-loader/dist/cjs.js??ref--11-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ImageTextVideoBlock.vue?vue&type=style&index=0&id=c395eb4e&lang=less&scoped=true&\""],"sourceRoot":""}