{"version":3,"sources":["webpack:///./node_modules/lodash/_baseUniq.js","webpack:///./node_modules/lodash/_arrayIncludesWith.js","webpack:///./node_modules/lodash/_createSet.js","webpack:///./node_modules/lodash/_arrayIncludes.js","webpack:///./node_modules/lodash/uniqBy.js","webpack:///./src/types/contentServerContract.ts","webpack:///./node_modules/lodash/noop.js","webpack:///./src/project/app/themes/theme.service.ts","webpack:///./src/project/app/blocks/ImageTextVideoBlock.vue?f3c3","webpack:///./src/project/shared/responsive-umbraco-image.service.ts","webpack:///./src/project/modals/overlays/VimeoVideoFullscreenOverlay.service.ts","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":["SetCache","arrayIncludes","arrayIncludesWith","cacheHas","createSet","setToArray","LARGE_ARRAY_SIZE","baseUniq","array","iteratee","comparator","index","includes","length","isCommon","result","seen","set","outer","value","computed","seenIndex","push","module","exports","Set","noop","INFINITY","values","baseIndexOf","baseIteratee","uniqBy","ContentWidth","HorizontalAlignment","SubheaderFontSize","LinkType","takeOverThemeLayoutId","defaultTakeOverOpacity","ThemeService","activeTheme","observable","theme","themeLoaded","takeOverOpacity","this","Object","keys","layoutId","isTakeOverEnabled","takeoverTheme","toLowerCase","hex","rgb","isDarkBackground","red","green","blue","colors","white","black","themeService","afterEach","to","from","path","restoreDefaultTheme","render","_vm","_h","$createElement","_c","_self","staticClass","class","shouldUseFlexBox","showCaptionAsContentTitle","content","caption","attrs","isFirstBlock","_v","_s","_e","vimeoVideoId","video","showBackgroundImage","style","ref","isBackgroundVideo","domProps","url","extension","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","expression","headerColor","headerHeadlineLevel","subheaderColor","ctaColor","callToAction","target","clickHandler","overlayVimeoCta","clickOpenVideoOverlay","renderContent","toggleVideoState","nativeOn","contentLoadError","staticRenderFns","extensionIsGifOrUndefined","file","undefined","enableTextTrack","showModal","component","componentAttrs","options","contentAutoScroll","contentMaxHeight","disableBodyScroll","placement","showCloseButton","usePanelWrapper","closeOnBreakpointChange","wide","AbstractModalService","mobileAspectRatio","semiTransparencyPercentage","videoAspectRatio","wideBannerAspectRatio","contentBackgroundColor","vimeoVideoAspectRatio","useFlexBox","isMobile","aspectRatio","isBreakpointActive","forceVimeoAspectRatio","widthOnScreen","aspectRatioMargins","activeBpDef","find","bpDef","paddingPct","paddingBottom","margin","ensureId","idOrUrl","idParts","split","id","parseInt","$refs","videoMount","onloadeddata","autoplay","loop","muted","controls","title","byline","portrait","autopause","getVimeoVideoAspectRatio","contentAligmentValue","Left","contentWidthValue","isHeroBanner","TwoThird","FullWidth","subheaderFontSizeValue","Large","Normal","getVideoWidth","width","getVideoHeight","height","minSize","subheaderSize","min","max","pause","e","error","play","alpha","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","show","type","Boolean","default","Function","required","Number","immediate","components","SmartParagraph","SpinnerOverlay","CallToAction","SmartHeadline"],"mappings":"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","file":"js/chunk-05aa1919.dffa2098.js","sourcesContent":["var SetCache = require('./_SetCache'),\n arrayIncludes = require('./_arrayIncludes'),\n arrayIncludesWith = require('./_arrayIncludesWith'),\n cacheHas = require('./_cacheHas'),\n createSet = require('./_createSet'),\n setToArray = require('./_setToArray');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\nmodule.exports = baseUniq;\n","/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arrayIncludesWith;\n","var Set = require('./_Set'),\n noop = require('./noop'),\n setToArray = require('./_setToArray');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n};\n\nmodule.exports = createSet;\n","var baseIndexOf = require('./_baseIndexOf');\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nmodule.exports = arrayIncludes;\n","var baseIteratee = require('./_baseIteratee'),\n baseUniq = require('./_baseUniq');\n\n/**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\nfunction uniqBy(array, iteratee) {\n return (array && array.length) ? baseUniq(array, baseIteratee(iteratee, 2)) : [];\n}\n\nmodule.exports = uniqBy;\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 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 EmailPersonalizedContentBrandBlocksViewModel {\r\n backgroundColor: string;\r\n textColor: string;\r\n}\r\nexport interface EmailPersonalizedContentDepartmentsViewModel {\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","/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n // No operation performed.\n}\n\nmodule.exports = noop;\n","import Vue from 'vue';\r\nimport tailwind from '@/styling/tailwind.config';\r\nimport { hexToRgbValues, luma } from '@/core/color/color.service';\r\nimport { Route } from 'vue-router';\r\nimport { router } from '@/router/index';\r\n\r\ninterface Theme {\r\n topColor: string;\r\n menuColor: string;\r\n takeoverTheme: string;\r\n layoutId: string;\r\n}\r\n\r\nconst takeOverThemeLayoutId = 'yfrt26v3bfttmxn3';\r\nconst defaultTakeOverOpacity = 0.8;\r\n\r\nclass ThemeService {\r\n private activeTheme: {\r\n theme: Partial | null;\r\n takeOverOpacity: number;\r\n themeLoaded: boolean;\r\n } = Vue.observable({\r\n theme: null,\r\n themeLoaded: false,\r\n takeOverOpacity: defaultTakeOverOpacity\r\n });\r\n\r\n public restoreDefaultTheme() {\r\n this.activeTheme.theme = null;\r\n }\r\n\r\n public applyTheme(theme: Partial) {\r\n if (Object.keys(theme).length === 0) {\r\n this.activeTheme.theme = null;\r\n return;\r\n }\r\n\r\n this.activeTheme.themeLoaded = false;\r\n this.activeTheme.theme = theme;\r\n }\r\n\r\n public disableBackgroundOpacity() {\r\n return this.activeTheme.takeOverOpacity = 1.0;\r\n }\r\n\r\n public setThemeLoaded() {\r\n this.activeTheme.themeLoaded = true;\r\n }\r\n\r\n public restoreBackgroundOpacity() {\r\n return this.activeTheme.takeOverOpacity = defaultTakeOverOpacity;\r\n }\r\n\r\n public get isTakeOverEnabled() {\r\n return this.activeTheme.theme?.layoutId === takeOverThemeLayoutId;\r\n }\r\n\r\n public get isTakeOverEnabledAndLoaded() {\r\n return this.isTakeOverEnabled && this.activeTheme.themeLoaded;\r\n }\r\n\r\n public get isInWhiteTheme() {\r\n return this.activeTheme.theme?.takeoverTheme?.toLowerCase() === 'white';\r\n }\r\n\r\n public get takeOverOpacity() {\r\n return this.isTakeOverEnabled ? this.activeTheme.takeOverOpacity : 1.0;\r\n }\r\n\r\n public get theme() {\r\n return this.activeTheme.theme;\r\n }\r\n\r\n public getColor(hex: string) {\r\n const rgb = hexToRgbValues(hex);\r\n const isDarkBackground = luma(rgb.red, rgb.green, rgb.blue) <= 0.5;\r\n return isDarkBackground ? tailwind.theme.colors.white : tailwind.theme.colors.black;\r\n }\r\n}\r\n\r\nconst themeService = new ThemeService();\r\n\r\nrouter.afterEach((to: Route, from: Route) => {\r\n if (to.path !== from.path) {\r\n themeService.restoreDefaultTheme();\r\n }\r\n});\r\n\r\nexport default themeService;\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 }","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","\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":""}