{"version":3,"sources":["webpack://blaubundle/webpack/universalModuleDefinition","webpack://blaubundle/webpack/bootstrap","webpack://blaubundle/external {\"commonjs\":\"@shop/common\",\"commonjs2\":\"@shop/common\",\"amd\":\"@shop/common\",\"root\":\"common\"}","webpack://blaubundle/./src/web/ts/tracking/EventListenerRegistry.ts","webpack://blaubundle/./src/web/ts/domain/hardware/StockHintType.ts","webpack://blaubundle/./src/web/ts/domain/hardware/AbstractTechnicalDetailsValue.ts","webpack://blaubundle/./src/web/ts/helpers.ts","webpack://blaubundle/./src/web/ts/domain/hardware/StringTechnicalDetailsValue.ts","webpack://blaubundle/./src/web/ts/domain/hardware/EmptyTechnicalDetailsValue.ts","webpack://blaubundle/./src/web/ts/domain/hardware/MediaGalleryItemType.ts","webpack://blaubundle/./src/web/ts/main.ts","webpack://blaubundle/./src/web/ts/components/productDetails/coTariffDetails/coTariffDetails.ts","webpack://blaubundle/./src/web/ts/components/productDetails/coTariffDetails/TariffDetailsController.ts","webpack://blaubundle/./src/web/ts/components/productDetails/coTariffDetails/coTariffDetailsTemplate.html","webpack://blaubundle/./src/web/ts/components/productDetails/coTariffPacks/coTariffPacks.ts","webpack://blaubundle/./src/web/ts/components/productDetails/coTariffPacks/coTariffPacksTemplate.html","webpack://blaubundle/./src/web/ts/components/productDetails/coTariffPacks/TariffPacksController.ts","webpack://blaubundle/./src/web/ts/components/productDetails/coProductDetails/coProductDetails.ts","webpack://blaubundle/./src/web/ts/components/productDetails/coProductDetails/ProductDetailsController.ts","webpack://blaubundle/./src/web/ts/components/productDetails/coProductDetails/coProductDetailsTemplate.html","webpack://blaubundle/./src/web/ts/components/productDetails/coHardwareDetails/coHardwareDetails.ts","webpack://blaubundle/./src/web/ts/components/productDetails/coHardwareDetails/HardwareDetailsController.ts","webpack://blaubundle/./src/web/ts/components/productDetails/coHardwareDetails/coHardwareDetailsTemplate.html","webpack://blaubundle/./src/web/ts/components/shared/coOfferStockHint/CoOfferStockHint.ts","webpack://blaubundle/./src/web/ts/components/shared/coOfferStockHint/OfferStockHintController.ts","webpack://blaubundle/./src/web/ts/components/shared/coOfferStockHint/coOfferStockHintTemplate.html","webpack://blaubundle/./src/web/ts/service/DataService.ts","webpack://blaubundle/./src/web/ts/service/UIStateService.ts","webpack://blaubundle/./src/web/ts/components/shared/coHardwareMedia/coHardwareMedia.ts","webpack://blaubundle/./src/web/ts/components/shared/coHardwareMedia/HardwareMediaController.ts","webpack://blaubundle/./src/web/ts/components/shared/coHardwareMedia/coHardwareMediaTemplate.html","webpack://blaubundle/./src/web/ts/service/ConfigurationChangeService.ts","webpack://blaubundle/./src/web/ts/components/productDetails/ProductDetailsComponentService.ts","webpack://blaubundle/./src/web/ts/components/shared/SharedComponentService.ts","webpack://blaubundle/./src/web/ts/domain/BlauBundlePageValue.ts","webpack://blaubundle/./src/web/ts/domain/ConfigurationValue.ts","webpack://blaubundle/./src/web/ts/domain/ConfigurationCalls.ts","webpack://blaubundle/./src/web/ts/domain/CurrentConfigurationValue.ts","webpack://blaubundle/./src/web/ts/domain/hardware/HardwareValue.ts","webpack://blaubundle/./src/web/ts/domain/hardware/HardwareContentsValue.ts","webpack://blaubundle/./src/web/ts/domain/hardware/ColorOptionContentsValue.ts","webpack://blaubundle/./src/web/ts/domain/hardware/ColorOptionCalls.ts","webpack://blaubundle/./src/web/ts/domain/hardware/ColorOptionValue.ts","webpack://blaubundle/./src/web/ts/domain/hardware/BooleanTechnicalDetailsValue.ts","webpack://blaubundle/./src/web/ts/domain/PriceContentsValue.ts","webpack://blaubundle/./src/web/ts/domain/PriceValue.ts","webpack://blaubundle/./src/web/ts/domain/hardware/MediaGalleryItemValue.ts","webpack://blaubundle/./src/web/ts/domain/hardware/MediaGalleryItemContentsValue.ts","webpack://blaubundle/./src/web/ts/domain/hardware/MediaGalleryValue.ts","webpack://blaubundle/./src/web/ts/domain/hardware/StockHintValue.ts","webpack://blaubundle/./src/web/ts/domain/hardware/StockHintContentsValue.ts","webpack://blaubundle/./src/web/ts/domain/hardware/StorageOptionValue.ts","webpack://blaubundle/./src/web/ts/domain/hardware/StorageOptionCalls.ts","webpack://blaubundle/./src/web/ts/domain/hardware/StorageOptionContentsValue.ts","webpack://blaubundle/./src/web/ts/domain/tariff/PackGroupValue.ts","webpack://blaubundle/./src/web/ts/domain/hardware/TechnicalDetailsGroupValue.ts","webpack://blaubundle/./src/web/ts/domain/hardware/TechnicalDetailsGroupType.ts","webpack://blaubundle/./src/web/ts/domain/tariff/PackGroupContentsValue.ts","webpack://blaubundle/./src/web/ts/domain/tariff/PackValue.ts","webpack://blaubundle/./src/web/ts/domain/tariff/PackCalls.ts","webpack://blaubundle/./src/web/ts/domain/tariff/PackContentsValue.ts","webpack://blaubundle/./src/web/ts/domain/tariff/TariffContentsValue.ts","webpack://blaubundle/./src/web/ts/domain/tariff/TariffValue.ts","webpack://blaubundle/./src/web/ts/domain/ContentsValue.ts","webpack://blaubundle/./src/web/ts/app/App.ts","webpack://blaubundle/./src/web/ts/app/appTemplate.html","webpack://blaubundle/./src/web/ts/domain/TargetGroupSwitcherValue.ts","webpack://blaubundle/./src/web/ts/components/targetGroupSwitcher/TargetGroupSwitcherComponentService.ts","webpack://blaubundle/./src/web/ts/components/targetGroupSwitcher/coTargetGroupSwitcher/coTargetGroupSwitcher.ts","webpack://blaubundle/./src/web/ts/components/targetGroupSwitcher/coTargetGroupSwitcher/coTargetGroupSwitcher.html","webpack://blaubundle/./src/web/ts/components/targetGroupSwitcher/coTargetGroupSwitcher/TargetGroupSwitcherController.ts","webpack://blaubundle/./src/web/ts/components/offerStage/offerStage/coOfferStage.ts","webpack://blaubundle/./src/web/ts/components/offerStage/offerStage/coOfferStageTemplate.html","webpack://blaubundle/./src/web/ts/components/offerStage/offerDescription/coOfferDescription.ts","webpack://blaubundle/./src/web/ts/components/offerStage/offerDescription/coOfferDescriptionTemplate.html","webpack://blaubundle/./src/web/ts/components/offerStage/offerOverview/coOfferOverview.ts","webpack://blaubundle/./src/web/ts/components/offerStage/offerOverview/coOfferOverviewTemplate.html","webpack://blaubundle/./src/web/ts/tracking/BlauTracking.ts","webpack://blaubundle/./src/web/ts/components/offerStage/colorSwitcher/coColorSwitcher.ts","webpack://blaubundle/./src/web/ts/components/offerStage/colorSwitcher/coColorSwitcherTemplate.html","webpack://blaubundle/./src/web/ts/components/offerStage/storageSwitcher/coStorageSwitcher.ts","webpack://blaubundle/./src/web/ts/components/offerStage/storageSwitcher/coStorageSwitcherTemplate.html","webpack://blaubundle/./src/web/ts/components/offerStage/coOfferPricing/coOfferPricing.ts","webpack://blaubundle/./src/web/ts/components/offerStage/coOfferPricing/coOfferPricingTemplate.html","webpack://blaubundle/./src/web/ts/domain/tariff/TariffOptionValue.ts","webpack://blaubundle/./src/web/ts/components/offerStage/tariffSwitcher/coTariffSwitcher.ts","webpack://blaubundle/./src/web/ts/components/offerStage/tariffSwitcher/coTariffSwitcherTemplate.html","webpack://blaubundle/./src/web/ts/tracking/BlauTrackingBundleService.ts","webpack://blaubundle/external \"angular\"","webpack://blaubundle/./src/web/ts/domain/EcommerceProductValue.ts","webpack://blaubundle/./src/web/ts/domain/LoginStatusTrackingValue.ts","webpack://blaubundle/./src/web/ts/domain/hardware/RatePlanOption.ts","webpack://blaubundle/./src/web/ts/domain/hardware/RatePlanOptionCall.ts","webpack://blaubundle/./src/web/ts/components/offerStage/coRatePlanSwitcher/coRatePlanSwitcher.ts","webpack://blaubundle/./src/web/ts/components/offerStage/coRatePlanSwitcher/coRatePlanSwitcherTemplate.html","webpack://blaubundle/./src/web/ts/domain/hardware/EnergyEfficiency.ts"],"names":["webpackUniversalModuleDefinition","root","factory","exports","module","require","define","amd","window","__WEBPACK_EXTERNAL_MODULE__0__","__WEBPACK_EXTERNAL_MODULE__87__","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","getDefault","getModuleExports","object","property","prototype","hasOwnProperty","p","s","EventListenerRegistry","$inject","Events","common_1","StockHintType","this","argsContract","arguments","META_INFO","enumMetaInfo","ON_STOCK","ON_STOCK_LIMITED_AVAILABILITY","VIRTUAL_STOCK","OUT_OF_STOCK","AbstractTechnicalDetailsValue","isBooleanTypedField","Error","getVisibleDataVolumes","allTariffOptions","tariffOptionsToDataVolumes","tariffOptions","map","tariffOption","dataVolumeMbNumeric","length","indexOfSelectedOption","indexOf","filter","selected","slice","getFormattedDataVolumeGigabytes","datVolumeMbNumeric","alternativeDisplayText","trimmedDatVolumeMbNumeric","replace","trim","match","Math","floor","parseInt","AbstractTechnicalDetailsValue_1","StringTechnicalDetailsValue","_super","__extends","valueMetaInfo","keyName","keyValue","EmptyTechnicalDetailsValue","MediaGalleryItemType","_values","forName","obj","values","_","PICTURE","VIDEO","THREE_D","coTariffDetails_1","coTariffPacks_1","coProductDetails_1","coHardwareDetails_1","CoOfferStockHint_1","DataService_1","UIStateService_1","coHardwareMedia_1","ConfigurationChangeService_1","ProductDetailsComponentService_1","SharedComponentService_1","BlauBundlePageValue_1","ConfigurationValue_1","ConfigurationCalls_1","CurrentConfigurationValue_1","HardwareValue_1","HardwareContentsValue_1","EmptyTechnicalDetailsValue_1","ColorOptionContentsValue_1","ColorOptionCalls_1","ColorOptionValue_1","BooleanTechnicalDetailsValue_1","PriceContentsValue_1","PriceValue_1","MediaGalleryItemType_1","MediaGalleryItemValue_1","MediaGalleryItemContentsValue_1","MediaGalleryValue_1","StockHintType_1","StockHintValue_1","StockHintContentsValue_1","StorageOptionValue_1","StorageOptionCalls_1","StorageOptionContentsValue_1","StringTechnicalDetailsValue_1","PackGroupValue_1","TechnicalDetailsGroupValue_1","TechnicalDetailsGroupType_1","PackGroupContentsValue_1","PackValue_1","PackCalls_1","PackContentsValue_1","TariffContentsValue_1","TariffValue_1","ContentsValue_1","App_1","TargetGroupSwitcherValue_1","TargetGroupSwitcherComponentService_1","coTargetGroupSwitcher_1","coOfferStage_1","coOfferDescription_1","coOfferOverview_1","coColorSwitcher_1","coStorageSwitcher_1","coOfferPricing_1","TariffOptionValue_1","coTariffSwitcher_1","BlauTrackingBundleService_1","EventListenerRegistry_1","angular","EcommerceProductValue_1","LoginStatusTrackingValue_1","RatePlanOption_1","RatePlanOptionCall_1","coRatePlanSwitcher_1","EnergyEfficiency_1","component","CoOfferStage","CoOfferDescription","CoOfferOverview","CoColorSwitcher","CoStorageSwitcher","CoRatePlanSwitcher","CoTariffSwitcher","CoOfferPricing","CoProductDetails","CoTariffDetails","CoTariffPacks","CoHardwareDetails","CoTargetGroupSwitcher","App","CoOfferStockHint","directive","coHardwareMedia","classToFactory","DataService","UIStateService","ConfigurationChangeService","ProductDetailsComponentService","SharedComponentService","TargetGroupSwitcherComponentService","service","BlauTrackingBundleService","run","noop","eventService","emit","BLAU_BUNDLE_PDP_INITIALIZED","config","mappingServiceProvider","addAnnotatedType","BlauBundlePageValue","ConfigurationValue","ContentsValue","ConfigurationCalls","CurrentConfigurationValue","PriceValue","PriceContentsValue","BooleanTechnicalDetailsValue","ColorOptionValue","ColorOptionCalls","ColorOptionContentsValue","EnergyEfficiency","HardwareContentsValue","HardwareValue","MediaGalleryItemValue","MediaGalleryItemContentsValue","MediaGalleryValue","StockHintValue","StockHintContentsValue","StorageOptionValue","StorageOptionCalls","RatePlanOption","RatePlanOptionCall","StorageOptionContentsValue","TechnicalDetailsGroupType","TechnicalDetailsGroupValue","PackGroupValue","PackGroupContentsValue","PackValue","PackCalls","PackContentsValue","TariffContentsValue","TariffValue","TariffOptionValue","TargetGroupSwitcherValue","EcommerceProductValue","LoginStatusTrackingValue","snapshotService","snapshot","externalService","initExternalApps","TariffDetailsController_1","coTariffDetailsTemplate_html_1","controller","TariffDetailsController","template","default","productDetailsComponentService","getTariffName","getTariffOverviewItems","getTariffConditions","getTariffNumberPorting","isTariffNumberPortingEmpty","isEmpty","isTariffConditionEmpty","isTariffOverviewItemsEmpty","getPackGroups","getPackGroupName","packGroup","contents","isAccordionEntryOpen","entryId","isTariffAccordionEntryOpen","toggleAccordionEntry","$event","preventDefault","toggleTariffAccordionEntry","__webpack_exports__","coTariffPacksTemplate_html_1","TariffPacksController_1","bindings","packGroupIndex","TariffPacksController","tariffDetailsComponentService","sharedComponentService","onAnchorKeydown","event","target","click","getPacks","packs","selectPack","pack","getPackName","getPackDescription","description","getPackDetails","details","getPackPriceInteger","getPriceInteger","price","getPackPriceDecimal","getPriceDecimal","ProductDetailsController_1","coProductDetailsTemplate_html_1","ProductDetailsController","getIntroContent","getDetailContent","HardwareDetailsController_1","coHardwareDetailsTemplate_html_1","HardwareDetailsController","getHardwareName","getHardwareOverviewItems","isHardwareOverviewItemsEmpty","getTransformedHardwareTechnicalDetailGroups","isHardwareAccordionEntryOpen","toggleHardwareAccordionEntry","OfferStockHintController_1","coOfferStockHintTemplate_html_1","OfferStockHintController","getStockHintText","getStockHint","hint","getCssClassForStockHint","hintType","helpers_1","pageValueProvider","callService","visibleDataVolumes","submit","submitCall","getConfiguration","calls","data","BLAU_BUNDLE_PDP_PRODUCT_ADD_TO_CART","ecommerceProductValue","handleCall","getTariff","tariff","getTariffContents","overview","conditions","numberPorting","getHardware","hardware","getHardwareContents","getHardwareColors","colorOptions","getHardwareStorages","storageOptions","getRatePlan","ratePlanOptions","getImageUrlList","imageUrlList","getTariffOptions","technicalDetailGroups","chain","technicalDetailsGroup","technicalDetails","technicalDetailsEntry","categoryItem","getMediaGallery","mediaGallery","getInitialMediaGalleryItemType","find","items","item","contentAvailable","type","isMediaGalleryAvailable","getCreditInfoHint","stockHint","creditInfoHint","console","warn","getarticle12TextHint","article12Text","isInstallmentSelected","ratePlans","log","displayText","getimportantHint","importantHint","isSubmitEnabled","submitEnabled","getPrices","getFootnotes","footnotes","getTeaserContent","getPageValue","teaserContent","packGroups","setConfiguration","newConfiguration","configuration","toString","round","substr","getFormattedPrice","withoutTrailingZeros","integer","introContent","getRatePlanInfoText","ratePlanInfoText","detailContent","getBundleUpsellAdspaceUrl","bundleUpsellAdspaceUrl","getTargetGroupSwitcherValue","targetGroupSwitcherValue","uiState","UIState","isShowMediaGallery","getUIState","showMediaGallery","openMediaGallery","closeMediaGallery","getActiveMediaGalleryItemType","activeMediaGalleryItemType","setActiveMediaGalleryItemType","getTileState","openTariffAccordionEntryId","openHardwareAccordionEntryId","openReviewsModal","showReviewsModal","closeReviewsModal","isReviewsModalOpen","tileState","TileState","getSubmitInProgress","submitInProgress","setSubmitInProgress","showHardwareSelection","HardwareMediaController_1","coHardwareMediaTemplate_html_1","scope","HardwareMediaController","controllerAs","dataService","uiStateService","getTabName","isMediaGalleryTypeActive","isMediaGalleryTabShown","busyService","trackingService","setHardwareColor","newActiveColor","changeColorOptionCall","getNewConfiguration","setRatePlan","selectedRatePlan","selectCall","changeRatePlanOptionCall","setHardwareStorage","newActiveStorage","changeStorageOptionCall","setTariffOption","newActiveTariffOption","changeTariffOptionCall","newActivePack","changePackCall","switchTargetGroup","_this","busy","then","track","trackingCall","BLAU_BUNDLE_PDP_PRODUCT_UPDATED","configurationChangeService","clickedPack","unifiedTrackingEnabled","loginStatusTrackingValue","shopContext","targetGroup","hardwareOfferName","tariffOfferName","selectedTariffPackNames","hardwareImageLink","ratingStars","ratingReviews","energyEfficiency","externalId","infoIconToggle","growHint","networkHint","packList","$","append","parseHTML","imageHtml","attr","optionName","contractDurationDescription","activationFeeDescription","recurringAmount","nonRecurringAmount","markup","amount","id","technicalDetailsGroupType","CAMERA","DISPLAY","DEVICE","MEMORY","additionalDetails","appTemplate_html_1","bannerMarkup","coTargetGroupSwitcher_html_1","TargetGroupSwitcherController_1","TargetGroupSwitcherController","targetGroupSwitcherService","$timeout","visibilityDelayed","triggerDelayedVisibility","setVisibleAfterDelay","visibilityDelayFn","visible","targetGroupName","coOfferStageTemplate_html_1","CoOfferStageController","initData","isInstallment","coOfferDescriptionTemplate_html_1","OfferDescriptionController","getAdditionalDetails","getFormattedDataVolume","coOfferOverviewTemplate_html_1","BlauTracking_1","OfferOverviewController","$onInit","addEventListener","pushToTefDataLayer","buildTrackingGalleryInteractionTracking","once","getEnergyEfficiency","productDataSheet","energyEfficiencyLabel","getTariffDescription","image","isRatePlanOptionEnabled","some","rateplanOption","tefDataLayer","push","currentAction","event_name","eCat","eAct","eVal","nonInteraction","coColorSwitcherTemplate_html_1","ColorSwitcherController","hasHardwareColors","color","getSelectedColorName","coStorageSwitcherTemplate_html_1","StorageSwitcherController","hasValidHardwareStorages","storage","getValidHardwareStorages","coOfferPricingTemplate_html_1","OfferPricingController","getFormattedRecurringAmount","getFormattedNonRecurringAmount","getContractDescription","getActivationFeeDescription","getConfigForStickyModule","isSubmitPossible","promise","catch","getInfoIconToggle","getOcclModalInfoId","hardwareContents","getHardwareDisplayName","getTotalPriceAmount","getHardwareRuntime","getConnectionFeeDescription","getMonthlyHwPrice","attributes","metric3","Number","getTariffMonthlyRate","metric2","getTariffBundleName","getTariffContractMonths","metric17","parts","split","getHardwareRuntimePlus","firstValue","isNaN","getMonthlyAfterBenefit","getTariffDataVolumeGb","mb","toFixed","getGrowHintText","getBrandNetworkHintText","getEuRoamingPackText","coTariffSwitcherTemplate_html_1","TariffSwitcherController","hasTariffOptions","tariffIOption","isUnifiedTrackingEnabled","subscribe","trackInit","trackUpdate","trackAddToCart","eshop_login_status","__assign","page","content","undefined","category","productCategory","application","ecommerce","detail","products","quantity","pageCategory","eLab","currencyCode","add","ConstantCall","rawContent","JSON","stringify","cust_cookie_value","logged_in","user_type","duration","coRatePlanSwitcherTemplate_html_1","RatePlanSwitcherController","hasRatePlanOption","getRatePlanData","getSelectedDisplayValue","select","ratePlanOption"],"mappings":"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","file":"blaubundleBundle.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"@shop/common\"), require(\"angular\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"@shop/common\", \"angular\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"blaubundle\"] = factory(require(\"@shop/common\"), require(\"angular\"));\n\telse\n\t\troot[\"blaubundle\"] = factory(root[\"common\"], root[\"angular\"]);\n})(window, function(__WEBPACK_EXTERNAL_MODULE__0__, __WEBPACK_EXTERNAL_MODULE__87__) {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 8);\n","module.exports = __WEBPACK_EXTERNAL_MODULE__0__;","export class EventListenerRegistry {\n    static $inject: string[] = ['blauTrackingBundleService']\n}\n\nexport enum Events {\n    BLAU_BUNDLE_PDP_INITIALIZED = 'blauBundle:initialized',\n    BLAU_BUNDLE_PDP_PRODUCT_UPDATED = 'blauBundle:productUpdated',\n    BLAU_BUNDLE_PDP_PRODUCT_ADD_TO_CART = 'blauBundle:addToCart'\n}","import {MetaInfo, enumMetaInfo} from \"@shop/common\";\nexport class StockHintType {\n\n    static META_INFO:MetaInfo = enumMetaInfo('blauBundle:StockHintType');\n\n    static ON_STOCK:StockHintType = new StockHintType(\"ON_STOCK\");\n    static ON_STOCK_LIMITED_AVAILABILITY:StockHintType = new StockHintType(\"ON_STOCK_LIMITED_AVAILABILITY\");\n    static VIRTUAL_STOCK:StockHintType = new StockHintType(\"VIRTUAL_STOCK\");\n    static OUT_OF_STOCK:StockHintType = new StockHintType(\"OUT_OF_STOCK\");\n\n    constructor(public name:string) {\n        argsContract(arguments, 'str');\n    }\n}\n\n","export class AbstractTechnicalDetailsValue {\n    keyName:string;\n\n    public isBooleanTypedField():boolean {\n        throw new Error('This method is abstract');\n    }\n}\n","import { TariffOptionValue } from \"./domain/tariff/TariffOptionValue\";\n\n/*\n * The UI should always show alternative options for data volumes based upon the data volume that is selected when initially entering the page.\n * Example: If we enter the page with a tariff with a 2GB data volume, we will show two higher data volumes e.g. 3GB and 5GB. If the user selects\n * 3GB, we want to retain the three options (2GB, 3GB and 5GB) instead of showing higher options (e.g. 3GB, 5GB and 8GB) as this would lead to confusing\n * shifts in the UI and would prevent the user from switching back to a lower data volume.\n */\n\nexport function getVisibleDataVolumes(\n  allTariffOptions: TariffOptionValue[]\n): string[] {\n  const tariffOptionsToDataVolumes = (tariffOptions: TariffOptionValue[]) =>\n    tariffOptions.map(tariffOption => tariffOption.dataVolumeMbNumeric);\n\n  if (allTariffOptions.length <= 3) {\n    return tariffOptionsToDataVolumes(allTariffOptions);\n  }\n\n  const indexOfSelectedOption = allTariffOptions.indexOf(\n    allTariffOptions.filter(tariffOption => tariffOption.selected)[0] // there's only one selected option at any point in time\n  );\n\n  const numberOfHigherTariffOptions =\n    allTariffOptions.slice(indexOfSelectedOption).length - 1;\n\n  if (numberOfHigherTariffOptions <= 1) {\n    // the currently selected option has the the highest or second highest data volume\n    return tariffOptionsToDataVolumes(allTariffOptions.slice(-3)); // returns up to 3 elements from the end of our array\n  } else {\n    return tariffOptionsToDataVolumes(\n      allTariffOptions.slice(indexOfSelectedOption, indexOfSelectedOption + 3)\n    );\n  }\n}\n\n/*  The API call for the numeric data volume might not return content for some tariffs, or being plain text it could return words.\n * Since this is not supported in this UI we can provide an alternative text to be displayed instead\n */\n\nexport function getFormattedDataVolumeGigabytes(\n    datVolumeMbNumeric: string,\n    alternativeDisplayText: string\n): string {\n  const trimmedDatVolumeMbNumeric = datVolumeMbNumeric\n    .replace(/\\s+/g, \"\")\n    .trim();\n\n  if (trimmedDatVolumeMbNumeric === \"-1\") {\n    return \"Unbegrenzt LTE\";\n  }\n\n  if (\n      trimmedDatVolumeMbNumeric.length === 0 ||\n      !trimmedDatVolumeMbNumeric.match(/^[0-9]+$/)\n  ) {\n    return alternativeDisplayText;\n  }\n\n  /*\n   * As agreed upon with Pixie the CMS API-call for the data volume will return data volumes as follows:\n   * - \"1024\" for 1 GB\n   * - \"2048\" for 2 GB\n   * - ...\n   */\n\n  return `${Math.floor(parseInt(trimmedDatVolumeMbNumeric) / 1024)} GB`;\n}","import {AbstractTechnicalDetailsValue} from \"./AbstractTechnicalDetailsValue\";\nimport {valueMetaInfo} from \"@shop/common\";\nexport class StringTechnicalDetailsValue extends AbstractTechnicalDetailsValue {\n\n    static META_INFO = valueMetaInfo('blauBundle:StringTechnicalDetailsValue', {\n        keyName: 'string | null',\n        keyValue: 'string | null'\n    });\n\n    keyValue:string;\n\n    public isBooleanTypedField():boolean {\n        return false;\n    }\n}","import {AbstractTechnicalDetailsValue} from \"./AbstractTechnicalDetailsValue\";\nimport {valueMetaInfo} from \"@shop/common\";\nexport class EmptyTechnicalDetailsValue extends AbstractTechnicalDetailsValue {\n\n    static META_INFO = valueMetaInfo('blauBundle:EmptyTechnicalDetailsValue', {\n        keyName: 'string | null'\n    });\n\n    public isBooleanTypedField():boolean {\n        return false;\n    }\n}\n","import {MetaInfo, enumMetaInfo} from \"@shop/common\";\nexport class MediaGalleryItemType {\n\n    static META_INFO:MetaInfo = enumMetaInfo('blauBundle:MediaGalleryItemType');\n\n    private static _values:{ [s:string]:MediaGalleryItemType; } = {};\n\n    static forName(obj):MediaGalleryItemType {\n        argsContract(arguments, 'str');\n        if (obj === null) {\n            return null;\n        }\n        return MediaGalleryItemType._values[obj];\n    }\n\n    static values():MediaGalleryItemType[] {\n        return _.values(MediaGalleryItemType._values);\n    }\n\n    static PICTURE:MediaGalleryItemType = new MediaGalleryItemType(\"PICTURE\");\n    static VIDEO:MediaGalleryItemType = new MediaGalleryItemType(\"VIDEO\");\n    static THREE_D:MediaGalleryItemType = new MediaGalleryItemType(\"THREE_D\");\n\n    constructor(public  name:string) {\n        argsContract(arguments, 'str');\n        MediaGalleryItemType._values[name] = this;\n    }\n\n}\n\n","import { CoTariffDetails } from \"./components/productDetails/coTariffDetails/coTariffDetails\";\nimport { CoTariffPacks } from \"./components/productDetails/coTariffPacks/coTariffPacks\";\nimport { CoProductDetails } from \"./components/productDetails/coProductDetails/coProductDetails\";\nimport { CoHardwareDetails } from \"./components/productDetails/coHardwareDetails/coHardwareDetails\";\nimport { CoOfferStockHint } from \"./components/shared/coOfferStockHint/CoOfferStockHint\";\nimport { DataService } from \"./service/DataService\";\nimport { UIStateService } from \"./service/UIStateService\";\nimport { coHardwareMedia } from \"./components/shared/coHardwareMedia/coHardwareMedia\";\nimport { ConfigurationChangeService } from \"./service/ConfigurationChangeService\";\nimport { classToFactory, IExternalService, EventService, IMappingServiceProvider, ISnapshotService } from \"@shop/common\";\nimport { ProductDetailsComponentService } from \"./components/productDetails/ProductDetailsComponentService\";\nimport { SharedComponentService } from \"./components/shared/SharedComponentService\";\nimport { BlauBundlePageValue } from \"./domain/BlauBundlePageValue\";\nimport { ConfigurationValue } from \"./domain/ConfigurationValue\";\nimport { ConfigurationCalls } from \"./domain/ConfigurationCalls\";\nimport { CurrentConfigurationValue } from \"./domain/CurrentConfigurationValue\";\nimport { HardwareValue } from \"./domain/hardware/HardwareValue\";\nimport { HardwareContentsValue } from \"./domain/hardware/HardwareContentsValue\";\nimport { EmptyTechnicalDetailsValue } from \"./domain/hardware/EmptyTechnicalDetailsValue\";\nimport { ColorOptionContentsValue } from \"./domain/hardware/ColorOptionContentsValue\";\nimport { ColorOptionCalls } from \"./domain/hardware/ColorOptionCalls\";\nimport { ColorOptionValue } from \"./domain/hardware/ColorOptionValue\";\nimport { BooleanTechnicalDetailsValue } from \"./domain/hardware/BooleanTechnicalDetailsValue\";\nimport { PriceContentsValue } from \"./domain/PriceContentsValue\";\nimport { PriceValue } from \"./domain/PriceValue\";\nimport { MediaGalleryItemType } from \"./domain/hardware/MediaGalleryItemType\";\nimport { MediaGalleryItemValue } from \"./domain/hardware/MediaGalleryItemValue\";\nimport { MediaGalleryItemContentsValue } from \"./domain/hardware/MediaGalleryItemContentsValue\";\nimport { MediaGalleryValue } from \"./domain/hardware/MediaGalleryValue\";\nimport { StockHintType } from \"./domain/hardware/StockHintType\";\nimport { StockHintValue } from \"./domain/hardware/StockHintValue\";\nimport { StockHintContentsValue } from \"./domain/hardware/StockHintContentsValue\";\nimport { StorageOptionValue } from \"./domain/hardware/StorageOptionValue\";\nimport { StorageOptionCalls } from \"./domain/hardware/StorageOptionCalls\";\nimport { StorageOptionContentsValue } from \"./domain/hardware/StorageOptionContentsValue\";\nimport { StringTechnicalDetailsValue } from \"./domain/hardware/StringTechnicalDetailsValue\";\nimport { PackGroupValue } from \"./domain/tariff/PackGroupValue\";\nimport { TechnicalDetailsGroupValue } from \"./domain/hardware/TechnicalDetailsGroupValue\";\nimport { TechnicalDetailsGroupType } from \"./domain/hardware/TechnicalDetailsGroupType\";\nimport { PackGroupContentsValue } from \"./domain/tariff/PackGroupContentsValue\";\nimport { PackValue } from \"./domain/tariff/PackValue\";\nimport { PackCalls } from \"./domain/tariff/PackCalls\";\nimport { PackContentsValue } from \"./domain/tariff/PackContentsValue\";\nimport { TariffContentsValue } from \"./domain/tariff/TariffContentsValue\";\nimport { TariffValue } from \"./domain/tariff/TariffValue\";\nimport { ContentsValue } from \"./domain/ContentsValue\";\nimport { App } from \"./app/App\";\nimport { TargetGroupSwitcherValue } from \"./domain/TargetGroupSwitcherValue\";\nimport { TargetGroupSwitcherComponentService } from \"./components/targetGroupSwitcher/TargetGroupSwitcherComponentService\";\nimport { CoTargetGroupSwitcher } from \"./components/targetGroupSwitcher/coTargetGroupSwitcher/coTargetGroupSwitcher\";\nimport { CoOfferStage } from \"./components/offerStage/offerStage/coOfferStage\";\nimport { CoOfferDescription } from \"./components/offerStage/offerDescription/coOfferDescription\";\nimport { CoOfferOverview } from \"./components/offerStage/offerOverview/coOfferOverview\";\nimport { CoColorSwitcher } from \"./components/offerStage/colorSwitcher/coColorSwitcher\";\nimport { CoStorageSwitcher } from \"./components/offerStage/storageSwitcher/coStorageSwitcher\";\nimport { CoOfferPricing } from \"./components/offerStage/coOfferPricing/coOfferPricing\";\nimport { TariffOptionValue } from \"./domain/tariff/TariffOptionValue\";\nimport { CoTariffSwitcher } from \"./components/offerStage/tariffSwitcher/coTariffSwitcher\";\nimport {BlauTrackingBundleService} from \"./tracking/BlauTrackingBundleService\";\nimport {EventListenerRegistry, Events} from \"./tracking/EventListenerRegistry\";\nimport angular = require('angular');\nimport {EcommerceProductValue} from \"./domain/EcommerceProductValue\";\nimport {LoginStatusTrackingValue} from \"./domain/LoginStatusTrackingValue\";\nimport {RatePlanOption} from \"./domain/hardware/RatePlanOption\";\nimport {RatePlanOptionCall} from \"./domain/hardware/RatePlanOptionCall\";\nimport {CoRatePlanSwitcher} from \"./components/offerStage/coRatePlanSwitcher/coRatePlanSwitcher\";\nimport {EnergyEfficiency} from \"./domain/hardware/EnergyEfficiency\";\nangular\n  .module(\"commerce_blau_bundle\", [\"commerce_common\"])\n\n  .component(\"coOfferStage\", new CoOfferStage())\n  .component(\"coOfferDescription\", new CoOfferDescription())\n  .component(\"coOfferOverview\", new CoOfferOverview())\n  .component(\"coColorSwitcher\", new CoColorSwitcher())\n  .component(\"coStorageSwitcher\", new CoStorageSwitcher())\n  .component(\"coRatePlanSwitcher\", new CoRatePlanSwitcher())\n  .component(\"coTariffSwitcher\", new CoTariffSwitcher())\n  .component(\"coOfferPricing\", new CoOfferPricing())\n\n  .component(\"coProductDetails\", new CoProductDetails())\n  .component(\"coTariffDetails\", new CoTariffDetails())\n  .component(\"coTariffPacks\", new CoTariffPacks())\n  .component(\"coHardwareDetails\", new CoHardwareDetails())\n  .component(\"coTargetGroupSwitcher\", new CoTargetGroupSwitcher())\n  .component(\"app\", new App())\n\n  // shared compontents\n  .component(\"coOfferStockHint\", new CoOfferStockHint())\n\n  .directive(\"coHardwareMedia\", coHardwareMedia)\n\n  .factory(\"dataService\", classToFactory(DataService))\n  .factory(\"uiStateService\", classToFactory(UIStateService))\n  .factory(\n    \"configurationChangeService\",\n    classToFactory(ConfigurationChangeService)\n  )\n  .factory(\n    \"productDetailsComponentService\",\n    classToFactory(ProductDetailsComponentService)\n  )\n  .factory(\"sharedComponentService\", classToFactory(SharedComponentService))\n  .factory(\n    \"targetGroupSwitcherComponentService\",\n    classToFactory(TargetGroupSwitcherComponentService)\n  )\n    .factory('eventListenerRegistry', classToFactory(EventListenerRegistry))\n    .service('blauTrackingBundleService', classToFactory(BlauTrackingBundleService))\n\n    .run(['eventListenerRegistry', angular.noop])\n    .run(['eventService', (eventService: EventService) => {\n      eventService.emit(Events.BLAU_BUNDLE_PDP_INITIALIZED);\n    }])\n\n  .config([\n    \"mappingServiceProvider\",\n    function(mappingServiceProvider: IMappingServiceProvider) {\n      mappingServiceProvider.addAnnotatedType(BlauBundlePageValue);\n      mappingServiceProvider.addAnnotatedType(ConfigurationValue);\n      mappingServiceProvider.addAnnotatedType(ContentsValue);\n      mappingServiceProvider.addAnnotatedType(ConfigurationCalls);\n      mappingServiceProvider.addAnnotatedType(CurrentConfigurationValue);\n      mappingServiceProvider.addAnnotatedType(PriceValue);\n      mappingServiceProvider.addAnnotatedType(PriceContentsValue);\n      // hardware\n      mappingServiceProvider.addAnnotatedType(BooleanTechnicalDetailsValue);\n      mappingServiceProvider.addAnnotatedType(ColorOptionValue);\n      mappingServiceProvider.addAnnotatedType(ColorOptionCalls);\n      mappingServiceProvider.addAnnotatedType(ColorOptionContentsValue);\n      mappingServiceProvider.addAnnotatedType(EnergyEfficiency);\n      mappingServiceProvider.addAnnotatedType(EmptyTechnicalDetailsValue);\n      mappingServiceProvider.addAnnotatedType(HardwareContentsValue);\n      mappingServiceProvider.addAnnotatedType(HardwareValue);\n      mappingServiceProvider.addAnnotatedType(MediaGalleryItemType);\n      mappingServiceProvider.addAnnotatedType(MediaGalleryItemValue);\n      mappingServiceProvider.addAnnotatedType(MediaGalleryItemContentsValue);\n      mappingServiceProvider.addAnnotatedType(MediaGalleryValue);\n      mappingServiceProvider.addAnnotatedType(StockHintType);\n      mappingServiceProvider.addAnnotatedType(StockHintValue);\n      mappingServiceProvider.addAnnotatedType(StockHintContentsValue);\n      mappingServiceProvider.addAnnotatedType(StorageOptionValue);\n      mappingServiceProvider.addAnnotatedType(StorageOptionCalls);\n      mappingServiceProvider.addAnnotatedType(RatePlanOption);\n      mappingServiceProvider.addAnnotatedType(RatePlanOptionCall);\n      mappingServiceProvider.addAnnotatedType(StorageOptionContentsValue);\n      mappingServiceProvider.addAnnotatedType(StringTechnicalDetailsValue);\n      mappingServiceProvider.addAnnotatedType(TechnicalDetailsGroupType);\n      mappingServiceProvider.addAnnotatedType(TechnicalDetailsGroupValue);\n      // tariff\n      mappingServiceProvider.addAnnotatedType(PackGroupValue);\n      mappingServiceProvider.addAnnotatedType(PackGroupContentsValue);\n      mappingServiceProvider.addAnnotatedType(PackValue);\n      mappingServiceProvider.addAnnotatedType(PackCalls);\n      mappingServiceProvider.addAnnotatedType(PackContentsValue);\n      mappingServiceProvider.addAnnotatedType(TariffContentsValue);\n      mappingServiceProvider.addAnnotatedType(TariffValue);\n      mappingServiceProvider.addAnnotatedType(TariffOptionValue);\n      mappingServiceProvider.addAnnotatedType(TargetGroupSwitcherValue);\n\n      mappingServiceProvider.addAnnotatedType(EcommerceProductValue);\n      mappingServiceProvider.addAnnotatedType(LoginStatusTrackingValue);\n    }\n  ])\n  .run([\n    \"snapshotService\",\n    function(snapshotService: ISnapshotService) {\n      snapshotService.snapshot();\n    }\n  ])\n  .run([\n    \"externalService\",\n    (externalService: IExternalService) => {\n      externalService.initExternalApps();\n    }\n  ]);\n","import {TariffDetailsController} from \"./TariffDetailsController\";\nimport coTariffDetailsTemplateHtml from \"./coTariffDetailsTemplate.html\";\n\nexport class CoTariffDetails implements ng.IComponentOptions {\n    controller:any = TariffDetailsController;\n    template:string = coTariffDetailsTemplateHtml;\n}\n","import {PackGroupValue} from \"../../../domain/tariff/PackGroupValue\";\nimport {IProductDetailsComponentService} from \"../IProductDetailsComponentService\";\nimport IAngularEvent = angular.IAngularEvent;\n\nexport class TariffDetailsController {\n    static $inject:string[] = ['productDetailsComponentService'];\n\n    constructor(private productDetailsComponentService:IProductDetailsComponentService) {\n    }\n\n    public getTariffName():string {\n        return this.productDetailsComponentService.getTariffName();\n    }\n\n    public getTariffOverviewItems():string[] {\n        return this.productDetailsComponentService.getTariffOverviewItems();\n    }\n\n    public getTariffConditions():string {\n        return this.productDetailsComponentService.getTariffConditions();\n    }\n\n    public getTariffNumberPorting():string {\n        return this.productDetailsComponentService.getTariffNumberPorting();\n    }\n\n    public isTariffNumberPortingEmpty():boolean {\n        return _.isEmpty(this.getTariffNumberPorting());\n    }\n\n    public isTariffConditionEmpty():boolean {\n        return _.isEmpty(this.getTariffConditions());\n    }\n\n    public isTariffOverviewItemsEmpty():boolean {\n        return _.isEmpty(this.getTariffOverviewItems());\n    }\n\n    public getPackGroups():PackGroupValue[] {\n        return this.productDetailsComponentService.getPackGroups();\n    }\n\n    public getPackGroupName(packGroup:PackGroupValue):string {\n        return packGroup.contents.name;\n    }\n\n    public isAccordionEntryOpen(entryId:string):boolean {\n        return this.productDetailsComponentService.isTariffAccordionEntryOpen(entryId);\n    }\n\n    public toggleAccordionEntry(entryId:string, $event:IAngularEvent):void {\n        $event.preventDefault();\n        this.productDetailsComponentService.toggleTariffAccordionEntry(entryId);\n    }\n}\n\n","export default \"<div> <h2 class=\\\"h2 headline\\\"> <span class=\\\"glyphicon glyphicon-sim-card\\\"></span> <span data-ng-bind-html=\\\"$ctrl.getTariffName() | coUnsafeHtml\\\"></span> </h2> <div id=accordion-product-tariff class=\\\"panel-group section-accordion\\\"> <div class=panel data-ng-if=!$ctrl.isTariffOverviewItemsEmpty()> <h4> <button class=collapsed type=button data-toggle=collapse aria-controls=accordion-product-tariff-overview data-target=#accordion-product-tariff-overview data-ng-class=\\\"{ 'collapsed': !$ctrl.isAccordionEntryOpen('tariff-overview') }\\\" data-ng-click=\\\"$ctrl.toggleAccordionEntry('tariff-overview', $event)\\\">Im Überblick </button> </h4> <div id=accordion-product-tariff-overview class=\\\"accordion-content co-slide collapse\\\" data-ng-if=\\\"$ctrl.isAccordionEntryOpen('tariff-overview')\\\"> <div class=item data-ng-repeat=\\\"overviewItem in $ctrl.getTariffOverviewItems() track by $index\\\"> <div data-ng-bind-html=\\\"overviewItem | coUnsafeHtml\\\"></div> </div> </div> </div> <div class=panel data-ng-if=!$ctrl.isTariffConditionEmpty()> <h4> <button class=collapsed type=button data-toggle=collapse aria-controls=accordion-product-tariff-conditions data-target=#accordion-product-tariff-conditions data-ng-class=\\\"{ 'collapsed': !$ctrl.isAccordionEntryOpen('tariff-conditions') }\\\" data-ng-click=\\\"$ctrl.toggleAccordionEntry('tariff-conditions', $event)\\\">Konditionen </button> </h4> <div id=accordion-product-tariff-conditions class=\\\"accordion-content co-slide collapse\\\" data-ng-if=\\\"$ctrl.isAccordionEntryOpen('tariff-conditions')\\\"> <div data-ng-bind-html=\\\"$ctrl.getTariffConditions() | coUnsafeHtml\\\"></div> </div> </div> <div class=panel data-ng-repeat=\\\"packGroup in $ctrl.getPackGroups()\\\"> <h4> <button class=collapsed type=button data-toggle=collapse aria-controls=\\\"accordion-product-tariff-packgroups-{{ $index }}\\\" data-target=\\\"#accordion-product-tariff-packgroups-{{ $index }}\\\" data-ng-class=\\\"{ 'collapsed': !$ctrl.isAccordionEntryOpen(packGroup.id) }\\\" data-co-uitest-element=\\\"pack-{{ $ctrl.getPackGroupName(packGroup) }}-toggle\\\" data-ng-click=\\\"$ctrl.toggleAccordionEntry(packGroup.id, $event)\\\">{{ $ctrl.getPackGroupName(packGroup) }} </button> </h4> <div id=\\\"accordion-product-tariff-packgroups-{{ $index }}\\\" class=\\\"accordion-content co-slide collapse\\\" data-ng-if=$ctrl.isAccordionEntryOpen(packGroup.id)> <p class=h4>Verfügbare Packs</p> <co-tariff-packs co-tariff-packs-pack-group=packGroup co-tariff-packs-pack-group-index=$index> </co-tariff-packs> </div> </div> <div class=panel data-ng-if=!$ctrl.isTariffNumberPortingEmpty()> <h4> <button class=collapsed type=button data-toggle=collapse aria-controls=accordion-product-tariff-numberporting data-target=#accordion-product-tariff-numberporting data-ng-class=\\\"{ 'collapsed': !$ctrl.isAccordionEntryOpen('tariff-numberporting') }\\\" data-ng-click=\\\"$ctrl.toggleAccordionEntry('tariff-numberporting', $event)\\\"> Rufnummermitnahme </button> </h4> <div id=accordion-product-tariff-numberporting class=\\\"accordion-content co-slide collapse\\\" data-ng-if=\\\"$ctrl.isAccordionEntryOpen('tariff-numberporting')\\\"> <div data-ng-bind-html=\\\"$ctrl.getTariffNumberPorting() | coUnsafeHtml\\\"></div> </div> </div> </div> </div>\";","import coTariffPacksTemplateHtml from \"./coTariffPacksTemplate.html\";\nimport {TariffPacksController} from \"./TariffPacksController\";\n\nexport class CoTariffPacks implements ng.IComponentOptions {\n    bindings:any = {\n        packGroup: '<coTariffPacksPackGroup',\n        packGroupIndex: '<coTariffPacksPackGroupIndex'\n    };\n    controller:any = TariffPacksController;\n    template:string = coTariffPacksTemplateHtml;\n}\n\n","export default \"<div class=panel-radios> <div data-ng-repeat=\\\"pack in $ctrl.getPacks() track by pack.contents.name\\\" class=\\\"panel panel-radio\\\"> <input data-ng-checked=pack.selected type=radio class=sr-only name=\\\"packs-{{ $ctrl.packGroupIndex }}\\\" id=\\\"radio-{{ $ctrl.packGroupIndex }}-{{ $index }}\\\"> <div class=panel-body> <label data-ng-click=$ctrl.selectPack(pack) for=\\\"radio-{{ $ctrl.packGroupIndex }}-{{ $index }}\\\" style=\\\"padding:30px 20px 30px 80px\\\"> <span class=panel-label> <strong>{{ $ctrl.getPackName(pack) }}</strong> <span data-ng-bind-html=\\\"$ctrl.getPackDescription(pack) | coUnsafeHtml\\\"></span> <a class=link data-ng-if=$ctrl.getPackDetails(pack) href=\\\"#modal-pack-details-{{ $ctrl.packGroupIndex }}-{{ $index }}\\\" occl-modal=\\\"modal-pack-details-{{ $ctrl.packGroupIndex }}-{{ $index }}\\\" tabindex=0 aria-haspopup=dialog aria-controls=\\\"modal-pack-details-{{ $ctrl.packGroupIndex }}-{{ $index }}\\\" data-ng-click=$event.stopPropagation()> Mehr erfahren </a> </span> <tef-modal cloak=\\\"\\\" data-ng-if=$ctrl.getPackDetails(pack) id=\\\"modal-pack-details-{{ $ctrl.packGroupIndex }}-{{ $index }}\\\" close-icon=\\\"\\\" color-close-icon=\\\"\\\" aria-label=\\\"Informationen über {{ $ctrl.getPackName(pack) }}\\\" data-ng-click=$event.stopPropagation()> <div slot=title> <h2>{{ $ctrl.getPackName(pack) }}</h2> </div> <div slot=body data-ng-bind-html=\\\"$ctrl.getPackDetails(pack) | coUnsafeHtml\\\" class=co-tariff-pack></div> </tef-modal> <span class=\\\"price price-sm\\\" style=min-width:95px> <span class=sum>{{ $ctrl.getPackPriceInteger(pack) }}</span> <span class=suffix>{{ $ctrl.getPackPriceDecimal(pack) }}</span> <span class=currency>€</span> </span> </label> </div> </div> </div> \";","import {PackGroupValue} from \"../../../domain/tariff/PackGroupValue\";\nimport {IProductDetailsComponentService} from \"../IProductDetailsComponentService\";\nimport {PackValue} from \"../../../domain/tariff/PackValue\";\nimport {ISharedComponentService} from \"../../shared/ISharedComponentService\";\n\nexport class TariffPacksController {\n    static $inject:string[] = ['productDetailsComponentService', 'sharedComponentService'];\n\n    public packGroup:PackGroupValue;\n    public packGroupIndex:number;\n\n    constructor(private tariffDetailsComponentService:IProductDetailsComponentService, private sharedComponentService:ISharedComponentService) {\n    }\n\n    public getPacks():PackValue[] {\n        return this.packGroup.packs;\n    }\n\n    public selectPack(pack:PackValue):void {\n        this.tariffDetailsComponentService.selectPack(this.packGroup, pack);\n    }\n\n    public getPackName(pack:PackValue):string {\n        return pack.contents.name;\n    }\n\n    public getPackDescription(pack:PackValue):string {\n        return pack.contents.description;\n    }\n\n    public getPackDetails(pack:PackValue):string {\n        return pack.contents.details;\n    }\n\n    public getPackPriceInteger(pack:PackValue):string {\n        return this.sharedComponentService.getPriceInteger(pack.contents.price);\n    }\n\n    public getPackGroupName():string {\n        return this.packGroup.contents.name;\n    }\n\n    //TODO PTI-543 replace this logic with Money type logic\n    public getPackPriceDecimal(pack:PackValue):string {\n        return this.sharedComponentService.getPriceDecimal(pack.contents.price);\n    }\n\n    public onAnchorKeydown = (event: KeyboardEvent) => {\n        if (event.key === 'Enter' || event.key === ' ') {\n            const target = event.target as HTMLElement;\n            target.click();\n            event.preventDefault();\n        }\n    };\n}\n\n","import {ProductDetailsController} from \"./ProductDetailsController\";\nimport coProductDetailsTemplateHtml from \"./coProductDetailsTemplate.html\";\n\nexport class CoProductDetails implements ng.IComponentOptions {\n    controller:any = ProductDetailsController;\n    template:string = coProductDetailsTemplateHtml;\n}\n","import { IProductDetailsComponentService } from '../IProductDetailsComponentService';\n\nexport class ProductDetailsController {\n\n    static $inject: string[] = ['productDetailsComponentService'];\n\n    constructor(private productDetailsComponentService: IProductDetailsComponentService) {\n    }\n\n    public getIntroContent(): string {\n        return this.productDetailsComponentService.getIntroContent();\n    }\n\n    public getDetailContent(): string {\n        return this.productDetailsComponentService.getDetailContent();\n    }\n\n}","export default \" <section class=intro-content data-ng-if=$ctrl.getIntroContent()> <div data-ng-bind-html=\\\"$ctrl.getIntroContent() | coUnsafeHtml\\\"></div> </section> <section class=product-benefits> <div class=inner> <div class=\\\"item-group item-group-visuals\\\"> <div class=\\\"items items-tariff\\\" data-co-seo-hide> <co-tariff-details></co-tariff-details> </div> <div class=\\\"items items-device\\\"> <co-hardware-details></co-hardware-details> </div> </div> </div> </section> <section class=detail-content data-ng-if=$ctrl.getDetailContent()> <div data-ng-bind-html=\\\"$ctrl.getDetailContent() | coUnsafeHtml\\\"></div> </section> \";","import {HardwareDetailsController} from \"./HardwareDetailsController\";\nimport coHardwareDetailsTemplateHtml from \"./coHardwareDetailsTemplate.html\";\n\nexport class CoHardwareDetails implements ng.IComponentOptions {\n    controller:any = HardwareDetailsController;\n    template:string = coHardwareDetailsTemplateHtml;\n}\n\n","import {IProductDetailsComponentService} from \"../IProductDetailsComponentService\";\nimport {TechnicalDetailsGroupValue} from \"../../../domain/hardware/TechnicalDetailsGroupValue\";\nimport IAngularEvent = angular.IAngularEvent;\n\nexport class HardwareDetailsController {\n    static $inject:string[] = ['productDetailsComponentService'];\n\n    constructor(private productDetailsComponentService:IProductDetailsComponentService) {\n    }\n\n    public getHardwareName():string {\n        return this.productDetailsComponentService.getHardwareName();\n    }\n\n    public getHardwareOverviewItems():string[] {\n        return this.productDetailsComponentService.getHardwareOverviewItems();\n    }\n\n    public isHardwareOverviewItemsEmpty():boolean {\n        return _.isEmpty(this.getHardwareOverviewItems());\n    }\n\n    public getTransformedHardwareTechnicalDetailGroups():TechnicalDetailsGroupValue[] {\n        return this.productDetailsComponentService.getTransformedHardwareTechnicalDetailGroups();\n    }\n\n    public isAccordionEntryOpen(entryId:string):boolean {\n        return this.productDetailsComponentService.isHardwareAccordionEntryOpen(entryId);\n    }\n\n    public toggleAccordionEntry(entryId:string, $event:IAngularEvent):void {\n        $event.preventDefault();\n        this.productDetailsComponentService.toggleHardwareAccordionEntry(entryId);\n    }\n\n}\n\n","export default \"<div> <h2 class=\\\"h2 headline\\\"> <span class=\\\"glyphicon glyphicon-smartphone\\\"></span> <span data-ng-bind-html=\\\"$ctrl.getHardwareName() | coUnsafeHtml\\\"></span> </h2> <div id=accordion-product-hardware class=\\\"panel-group section-accordion\\\"> <div class=panel data-ng-if=!$ctrl.isHardwareOverviewItemsEmpty()> <h4> <button class=collapsed type=button data-toggle=collapse aria-controls=accordion-product-hardware-overview data-target=#accordion-product-hardware-overview data-ng-class=\\\"{ 'collapsed': !$ctrl.isAccordionEntryOpen('hardware-overview') }\\\" data-ng-click=\\\"$ctrl.toggleAccordionEntry('hardware-overview', $event)\\\" data-co-tracking-attributes data-co-tracking-attributes-action=link data-co-tracking-attributes-element-id=\\\"Im Überblick\\\"> Im Überblick </button> </h4> <div id=accordion-product-hardware-overview class=\\\"accordion-content co-slide collapse\\\" data-ng-if=\\\"$ctrl.isAccordionEntryOpen('hardware-overview')\\\"> <div class=item data-ng-repeat=\\\"overviewItem in $ctrl.getHardwareOverviewItems()\\\"> <div data-ng-bind-html=\\\"overviewItem | coUnsafeHtml\\\"></div> </div> </div> </div> <div class=panel data-ng-repeat=\\\"detailsGroup in $ctrl.getTransformedHardwareTechnicalDetailGroups()\\\"> <h4> <button class=collapsed type=button data-toggle=collapse aria-controls=\\\"accordion-product-hardware-technical-details-{{ $index + 1 }}\\\" data-target=\\\"#accordion-product-hardware-technical-details-{{ $index + 1 }}\\\" data-ng-class=\\\"{ 'collapsed': !$ctrl.isAccordionEntryOpen(detailsGroup.name) }\\\" data-ng-click=\\\"$ctrl.toggleAccordionEntry(detailsGroup.name, $event)\\\"> {{ detailsGroup.name }} </button> </h4> <div id=\\\"accordion-product-hardware-technical-details-{{ $index + 1 }}\\\" class=\\\"accordion-content co-slide collapse\\\" data-ng-if=$ctrl.isAccordionEntryOpen(detailsGroup.name)> <div class=table-responsive> <table class=\\\"table table-striped\\\"> <tbody> <tr data-ng-repeat=\\\"detailsEntry in detailsGroup.technicalDetails\\\"> <th scope=row>{{ detailsEntry.keyName }}</th> <td data-ng-if=detailsEntry.isBooleanTypedField()> <div> {{ detailsEntry.keyValue ? \\\"ja\\\" : \\\"nein\\\" }} </div> </td> <td data-ng-if=!detailsEntry.isBooleanTypedField()> <div>{{ detailsEntry.keyValue }}</div> </td> </tr> </tbody> </table> </div> </div> </div> </div> </div>\";","import {OfferStockHintController} from \"./OfferStockHintController\";\nimport coOfferStockHintTemplateHtml from \"./coOfferStockHintTemplate.html\";\n\nexport class CoOfferStockHint implements ng.IComponentOptions {\n    controller:any = OfferStockHintController;\n    template:string = coOfferStockHintTemplateHtml;\n}\n    \n","import {ISharedComponentService} from \"../ISharedComponentService\";\nimport {StockHintValue} from \"../../../domain/hardware/StockHintValue\";\nimport {StockHintType} from \"../../../domain/hardware/StockHintType\";\n\nexport class OfferStockHintController {\n\n    static $inject:string[] = ['sharedComponentService'];\n\n    constructor(private sharedComponentService:ISharedComponentService) {\n    }\n\n    public getStockHintText():string {\n        return this.getStockHint().contents.hint;\n    }\n\n    public getCssClassForStockHint():string {\n        let stockHint:StockHintValue = this.getStockHint();\n\n        switch (stockHint.hintType) {\n            case StockHintType.OUT_OF_STOCK:\n                return 'not-available';\n            case StockHintType.ON_STOCK_LIMITED_AVAILABILITY:\n                return 'short';\n            case StockHintType.ON_STOCK:\n            case StockHintType.VIRTUAL_STOCK:\n                return 'available';\n            default:\n                return '';\n        }\n    }\n\n    private getStockHint():StockHintValue {\n        return this.sharedComponentService.getStockHint();\n    }\n\n}\n","export default \"<div class=stock data-ng-class=$ctrl.getCssClassForStockHint()> <span data-ng-bind-html=\\\"$ctrl.getStockHintText() | coUnsafeHtml\\\"></span> </div>\";","import { IDataService } from \"./IDataService\";\nimport { BlauBundlePageValue } from \"../domain/BlauBundlePageValue\";\nimport { TariffValue } from \"../domain/tariff/TariffValue\";\nimport { TariffContentsValue } from \"../domain/tariff/TariffContentsValue\";\nimport { HardwareValue } from \"../domain/hardware/HardwareValue\";\nimport { HardwareContentsValue } from \"../domain/hardware/HardwareContentsValue\";\nimport { ColorOptionValue } from \"../domain/hardware/ColorOptionValue\";\nimport { StorageOptionValue } from \"../domain/hardware/StorageOptionValue\";\nimport { TechnicalDetailsGroupValue } from \"../domain/hardware/TechnicalDetailsGroupValue\";\nimport { MediaGalleryValue } from \"../domain/hardware/MediaGalleryValue\";\nimport { MediaGalleryItemType } from \"../domain/hardware/MediaGalleryItemType\";\nimport { MediaGalleryItemValue } from \"../domain/hardware/MediaGalleryItemValue\";\nimport { PriceValue } from \"../domain/PriceValue\";\nimport { StockHintValue } from \"../domain/hardware/StockHintValue\";\nimport { PackGroupValue } from \"../domain/tariff/PackGroupValue\";\nimport { ConfigurationValue } from \"../domain/ConfigurationValue\";\nimport {ICallService, IEventService, IPageValueProvider, PostCall} from \"@shop/common\";\nimport { StringTechnicalDetailsValue } from \"../domain/hardware/StringTechnicalDetailsValue\";\nimport { AbstractTechnicalDetailsValue } from \"../domain/hardware/AbstractTechnicalDetailsValue\";\nimport { EmptyTechnicalDetailsValue } from \"../domain/hardware/EmptyTechnicalDetailsValue\";\nimport { TargetGroupSwitcherValue } from \"../domain/TargetGroupSwitcherValue\";\nimport { TariffOptionValue } from \"../domain/tariff/TariffOptionValue\";\nimport { getVisibleDataVolumes } from \"../helpers\";\nimport {CurrentConfigurationValue} from \"../domain/CurrentConfigurationValue\";\nimport {Events} from \"../tracking/EventListenerRegistry\";\nimport {RatePlanOption} from \"../domain/hardware/RatePlanOption\";\n\nexport class DataService implements IDataService {\n  static $inject: string[] = [\"pageValueProvider\", \"callService\", \"eventService\"];\n\n  private visibleDataVolumes: string[] = null;\n\n  constructor(\n    private pageValueProvider: IPageValueProvider<BlauBundlePageValue>,\n    private callService: ICallService,\n    private eventService: IEventService\n  ) {}\n\n  public submit(): ng.IPromise<any> {\n    const submitCall: PostCall<CurrentConfigurationValue> = this.getConfiguration().calls.submitCall;\n    if (submitCall && submitCall.data) {\n      this.eventService.emit(Events.BLAU_BUNDLE_PDP_PRODUCT_ADD_TO_CART, submitCall.data.ecommerceProductValue);\n    }\n    var promise: ng.IPromise<any> = this.callService.handleCall(submitCall);\n    return promise;\n  }\n\n  public getTariff(): TariffValue {\n    return this.getConfiguration().tariff;\n  }\n\n  public getTariffContents(): TariffContentsValue {\n    return this.getTariff().contents;\n  }\n\n  public getTariffName(): string {\n    return this.getTariffContents().name;\n  }\n\n  public getTariffOverviewItems(): string[] {\n    return this.getTariffContents().overview;\n  }\n\n  public getTariffConditions(): string {\n    return this.getTariffContents().conditions;\n  }\n\n  public getTariffNumberPorting(): string {\n    return this.getTariffContents().numberPorting;\n  }\n\n  public getHardware(): HardwareValue {\n    return this.getConfiguration().hardware;\n  }\n\n  public getHardwareContents(): HardwareContentsValue {\n    return this.getHardware().contents;\n  }\n\n  public getHardwareName(): string {\n    return this.getHardwareContents().name;\n  }\n\n  public getHardwareColors(): ColorOptionValue[] {\n    return this.getHardware().colorOptions;\n  }\n\n  public getHardwareStorages(): StorageOptionValue[] {\n    return this.getHardware().storageOptions;\n  }\n\n  public getRatePlan(): RatePlanOption[] {\n    return this.getHardware().ratePlanOptions;\n  }\n\n  public getImageUrlList(): string[] {\n    return this.getHardwareContents().imageUrlList;\n  }\n\n  public getTariffOptions(): TariffOptionValue[] {\n    if (this.visibleDataVolumes === null) {\n      this.visibleDataVolumes = getVisibleDataVolumes(\n        this.getTariff().tariffOptions\n      );\n    }\n\n    let tariffOptions = this.getTariff().tariffOptions;\n\n    return tariffOptions;\n  }\n\n  /**\n   * transforms a tech data TechnicalDetailsGroupValues so that empty or incomplete tech data entries are omitted\n   */\n  public getTransformedHardwareTechnicalDetailGroups(): TechnicalDetailsGroupValue[] {\n    var omitEmptyTechnicalDetailsGroups = function(\n      categoryItem: TechnicalDetailsGroupValue\n    ): boolean {\n      // omit TechnicalDetailsGroups with no entries\n      return categoryItem.technicalDetails.length > 0;\n    };\n\n    var omitEmptyTechnicalDetails = function(\n      technicalDetailsGroup: TechnicalDetailsGroupValue\n    ): TechnicalDetailsGroupValue {\n      // omit EmptyTechnicalDetailsValue instances\n      technicalDetailsGroup.technicalDetails = _(\n        technicalDetailsGroup.technicalDetails\n      ).filter((technicalDetailsEntry: AbstractTechnicalDetailsValue) => {\n        return !(technicalDetailsEntry instanceof EmptyTechnicalDetailsValue);\n      });\n      return technicalDetailsGroup;\n    };\n\n    var omitEmptyStringTechnicalDetails = function(\n      technicalDetailsGroup: TechnicalDetailsGroupValue\n    ): TechnicalDetailsGroupValue {\n      // omit StringTechnicalDetailsValue instances with an empty or missing keyValue\n      technicalDetailsGroup.technicalDetails = _(\n        technicalDetailsGroup.technicalDetails\n      ).filter((technicalDetailsEntry: AbstractTechnicalDetailsValue) => {\n        return !(\n          technicalDetailsEntry instanceof StringTechnicalDetailsValue &&\n          ((<StringTechnicalDetailsValue>technicalDetailsEntry).keyValue ===\n            \"\" ||\n            (<StringTechnicalDetailsValue>technicalDetailsEntry).keyValue ==\n              null)\n        ); // non-strict equality check indended here\n      });\n      return technicalDetailsGroup;\n    };\n\n    return _(this.getHardware().technicalDetailGroups)\n      .chain()\n      .map(omitEmptyTechnicalDetails)\n      .map(omitEmptyStringTechnicalDetails)\n      .filter(omitEmptyTechnicalDetailsGroups)\n      .value();\n  }\n\n  public getHardwareOverviewItems(): string[] {\n    return this.getHardwareContents().overview;\n  }\n\n  public getMediaGallery(): MediaGalleryValue {\n    return this.getHardware().mediaGallery;\n  }\n\n  public getInitialMediaGalleryItemType(): MediaGalleryItemType {\n    var firstItemWithContent: MediaGalleryItemValue = _.find(\n      this.getMediaGallery().items,\n      item => {\n        return item.contentAvailable;\n      }\n    );\n\n    return firstItemWithContent.type;\n  }\n\n  public isMediaGalleryAvailable(): boolean {\n    return (\n      _.filter(this.getMediaGallery().items, item => {\n        return item.contentAvailable;\n      }).length > 0\n    );\n  }\n\n  public getStockHint(): StockHintValue {\n    this.getCreditInfoHint();\n    return this.getHardware().stockHint;\n  }\n  public getCreditInfoHint(): string {\n    const hardware = this.getHardware();\n    if (hardware && hardware.creditInfoHint) {\n      return hardware.creditInfoHint;\n    }\n    console.warn(\"CHECK 3: Credit Hint missing in JSON!\");\n    return '';\n  }\n\n  public getarticle12TextHint(): string {\n    const hardware = this.getHardware();\n    if (hardware && hardware.article12Text) {\n      return hardware.article12Text;\n    }\n    console.warn(\"CHECK 3: Credit Hint missing in JSON!\");\n    return '';\n  }\n  public isInstallmentSelected(): boolean {\n    const ratePlans = this.getRatePlan();\n    console.log(\" Rate Plan::::\",ratePlans);\n    if (!ratePlans) return false;\n\n    // Standard loop: No underscore, no .find() error\n    for (var i = 0; i < ratePlans.length; i++) {\n      if (ratePlans[i].selected) {\n        const value = ratePlans[i].displayText;\n        const isInstallment = value.indexOf('24') !== -1 || value.indexOf('36') !== -1;\n        return isInstallment;\n      }\n    }\n    return false;\n  }\n\n\n  public getimportantHint(): string {\n    const hardware = this.getHardware();\n    if (hardware && hardware.importantHint) {\n      return hardware.importantHint;\n    }\n    console.warn(\"CHECK 3: Credit Hint missing in JSON!\");\n    return '';\n  }\n\n  public isSubmitEnabled(): boolean {\n    return this.getConfiguration().submitEnabled;\n  }\n\n  public getPrices(): PriceValue {\n    return this.getConfiguration().price;\n  }\n\n  public getFootnotes(): string {\n    return this.getTariffContents().footnotes;\n  }\n\n  public getTeaserContent(): string {\n    return this.getPageValue().contents.teaserContent;\n  }\n\n  public getPackGroups(): PackGroupValue[] {\n    return this.getTariff().packGroups;\n  }\n\n  public setConfiguration(newConfiguration: ConfigurationValue): void {\n    this.pageValueProvider.getPageValue().configuration = newConfiguration;\n  }\n\n  private getConfiguration(): ConfigurationValue {\n    return this.getPageValue().configuration;\n  }\n\n  private getPageValue(): BlauBundlePageValue {\n    return this.pageValueProvider.getPageValue();\n  }\n\n  public getPriceInteger(price: number): string {\n    return Math.floor(price).toString();\n  }\n\n  public getPriceDecimal(price: number): string {\n    return price === 0\n      ? \"00\"\n      : Math.round(price * 100)\n          .toString()\n          .substr(-2);\n  }\n\n  public getFormattedPrice(\n    price: number,\n    withoutTrailingZeros: boolean = false\n  ) {\n    const integer = this.getPriceInteger(price);\n    const decimal = this.getPriceDecimal(price);\n\n    if (decimal === \"00\" && withoutTrailingZeros) {\n      return integer;\n    }\n\n    return `${this.getPriceInteger(price)},${this.getPriceDecimal(price)}`;\n  }\n\n  public getIntroContent(): string {\n    return this.getPageValue().contents.introContent;\n  }\n\n  public getRatePlanInfoText(): string {\n    return this.getPageValue().contents.ratePlanInfoText;\n  }\n\n  public getDetailContent(): string {\n    return this.getPageValue().contents.detailContent;\n  }\n\n  public getBundleUpsellAdspaceUrl(): string {\n    return this.getConfiguration().bundleUpsellAdspaceUrl;\n  }\n\n  public getTargetGroupSwitcherValue(): TargetGroupSwitcherValue {\n    return this.getPageValue().configuration.targetGroupSwitcherValue;\n  }\n}\n","import {MediaGalleryItemType} from \"../domain/hardware/MediaGalleryItemType\";\nimport {IUIStateService} from \"./IUIStateService\";\nexport class UIStateService implements IUIStateService{\n    private uiState:UIState;\n\n    constructor() {\n        this.uiState = new UIState();\n    }\n\n    public isShowMediaGallery():boolean {\n        return this.getUIState().showMediaGallery;\n    }\n\n    public openMediaGallery():void {\n        this.getUIState().showMediaGallery = true;\n    }\n\n    public closeMediaGallery():void {\n        this.getUIState().showMediaGallery = false;\n    }\n\n    public getActiveMediaGalleryItemType():MediaGalleryItemType {\n        return this.getUIState().activeMediaGalleryItemType;\n    }\n\n    public setActiveMediaGalleryItemType(type:MediaGalleryItemType) {\n        this.getUIState().activeMediaGalleryItemType = type;\n    }\n\n    public isTariffAccordionEntryOpen(entryId:string):boolean {\n        argsContract(arguments, 'string');\n        return this.getTileState().openTariffAccordionEntryId === entryId;\n    }\n\n    public isHardwareAccordionEntryOpen(entryId:string):boolean {\n        argsContract(arguments, 'string');\n        return this.getTileState().openHardwareAccordionEntryId === entryId;\n    }\n\n    public toggleTariffAccordionEntry(entryId:string):void {\n        argsContract(arguments, 'string');\n        this.getTileState().openTariffAccordionEntryId = this.getTileState().openTariffAccordionEntryId === entryId ? '' : entryId;\n    }\n\n    public toggleHardwareAccordionEntry(entryId:string):void {\n        argsContract(arguments, 'string');\n        this.getTileState().openHardwareAccordionEntryId = this.getTileState().openHardwareAccordionEntryId === entryId ? '' : entryId;\n    }\n\n    public openReviewsModal() {\n        this.getUIState().showReviewsModal = true;\n    }\n\n    public closeReviewsModal() {\n        this.getUIState().showReviewsModal = false;\n    }\n\n    public isReviewsModalOpen() {\n        return this.getUIState().showReviewsModal;\n    }\n\n    private getUIState():UIState {\n        return this.uiState;\n    }\n\n    private getTileState():TileState {\n        if (!this.getUIState().tileState) {\n            this.getUIState().tileState = new TileState();\n        }\n        return this.getUIState().tileState;\n    }\n\n    public getSubmitInProgress():boolean {\n        return this.getUIState().submitInProgress;\n    }\n\n    public setSubmitInProgress(submitInProgress:boolean):void {\n        this.getUIState().submitInProgress = submitInProgress;\n    }\n}\n\nclass UIState {\n    showHardwareSelection:boolean = false;\n    showMediaGallery:boolean = false;\n    activeMediaGalleryItemType:MediaGalleryItemType = null;\n    tileState:TileState = null;\n    showReviewsModal:boolean = false;\n    submitInProgress:boolean = false;\n}\n\nclass TileState {\n    openTariffAccordionEntryId:string;\n    openHardwareAccordionEntryId:string;\n\n    constructor() {\n        // the entries which should be opened by default\n        this.openTariffAccordionEntryId = 'tariff-overview';\n        this.openHardwareAccordionEntryId = 'hardware-overview';\n    }\n}\n","import { HardwareMediaController } from \"./HardwareMediaController\";\nimport coHardwareMediaTemplateHtml from \"./coHardwareMediaTemplate.html\";\n\n/*\n * The media gallery isn't used in the current design of the Blau bundle page, but we might need it again in the future\n */\n\nexport function coHardwareMedia(): ng.IDirective {\n  return {\n    scope: {},\n    replace: true,\n    template: coHardwareMediaTemplateHtml,\n    controller: <any>HardwareMediaController,\n    controllerAs: \"$ctrl\"\n  };\n}\n","import IAngularEvent = angular.IAngularEvent;\nimport { MediaGalleryItemType } from \"../../../domain/hardware/MediaGalleryItemType\";\nimport { MediaGalleryValue } from \"../../../domain/hardware/MediaGalleryValue\";\nimport { MediaGalleryItemValue } from \"../../../domain/hardware/MediaGalleryItemValue\";\nimport { IDataService } from \"../../../service/IDataService\";\nimport { IUIStateService } from \"../../../service/IUIStateService\";\n\nexport class HardwareMediaController {\n  static $inject: string[] = [\"dataService\", \"uiStateService\"];\n\n  constructor(\n    public dataService: IDataService,\n    private uiStateService: IUIStateService\n  ) {}\n\n  public getTabName(type: MediaGalleryItemType): string {\n    switch (type) {\n      case MediaGalleryItemType.PICTURE:\n        return \"Galerie\";\n      case MediaGalleryItemType.VIDEO:\n        return \"Video\";\n      case MediaGalleryItemType.THREE_D:\n        return \"3D\";\n      default:\n        return \"\";\n    }\n  }\n\n  public isShowMediaGallery(): boolean {\n    return this.uiStateService.isShowMediaGallery();\n  }\n\n  public closeMediaGallery(): void {\n    this.uiStateService.closeMediaGallery();\n  }\n\n  public getMediaGallery(): MediaGalleryValue {\n    return this.dataService.getMediaGallery();\n  }\n\n  public isMediaGalleryTypeActive(type: MediaGalleryItemType): boolean {\n    return type === this.getActiveMediaGalleryItemType();\n  }\n\n  public getActiveMediaGalleryItemType(): MediaGalleryItemType {\n    return this.uiStateService.getActiveMediaGalleryItemType();\n  }\n\n  public isMediaGalleryTabShown(item: MediaGalleryItemValue): boolean {\n    return item.contentAvailable;\n  }\n\n  public setActiveMediaGalleryItemType(\n    type: MediaGalleryItemType,\n    $event: IAngularEvent\n  ): void {\n    $event.preventDefault();\n    this.uiStateService.setActiveMediaGalleryItemType(type);\n  }\n}\n","export default \"<div class=handy-media id=device-media> <div data-co-modal-dialog data-co-modal-dialog-open=$ctrl.isShowMediaGallery() data-co-modal-dialog-on-close=$ctrl.closeMediaGallery() data-co-modal-dialog-title=\\\"\\\" data-co-modal-dialog-limit-height=true> <div class=nav-tabs-wrapper> <ul role=tablist data-js=nav-tabs class=\\\"nav nav-tabs nav-justified margin-top-md margin-bottom-md\\\"> <li class=nav-tab data-ng-repeat=\\\"item in $ctrl.getMediaGallery().items\\\" data-ng-class=\\\"{'active': $ctrl.isMediaGalleryTypeActive(item.type)}\\\" data-ng-if=$ctrl.isMediaGalleryTabShown(item)> <a data-ng-href=#device-media-{{$index}} data-ng-click=\\\"$ctrl.setActiveMediaGalleryItemType(item.type, $event)\\\"> {{ $ctrl.getTabName(item.type) }} </a> </li> </ul> <div class=tab-content> <div class=tab-pane id=device-media-{{$index}} data-ng-repeat=\\\"item in $ctrl.getMediaGallery().items\\\" data-ng-class=\\\"{'active': $ctrl.isMediaGalleryTypeActive(item.type)}\\\" data-ng-if=$ctrl.isMediaGalleryTabShown(item)> <div data-ng-bind-html=\\\"item.contents.markup | coUnsafeHtml\\\"></div> </div> </div> </div> </div> </div> \";","import { IConfigurationChangeService } from \"./IConfigurationChangeService\";\nimport { IDataService } from \"./IDataService\";\nimport { ColorOptionValue } from \"../domain/hardware/ColorOptionValue\";\nimport { StorageOptionValue } from \"../domain/hardware/StorageOptionValue\";\nimport { PackGroupValue } from \"../domain/tariff/PackGroupValue\";\nimport { PackValue } from \"../domain/tariff/PackValue\";\nimport {GetCall, ICallService, IBusyService, ITrackingService, IEventService} from \"@shop/common\";\nimport { ConfigurationValue } from \"../domain/ConfigurationValue\";\nimport { Call } from \"@shop/common\";\nimport { TargetGroupSwitcherValue } from \"../domain/TargetGroupSwitcherValue\";\nimport { TariffOptionValue } from \"../domain/tariff/TariffOptionValue\";\nimport {Events} from \"../tracking/EventListenerRegistry\";\nimport {RatePlanOption} from \"../domain/hardware/RatePlanOption\";\n\nexport class ConfigurationChangeService implements IConfigurationChangeService {\n    static $inject: string[] = ['dataService', 'callService', 'busyService', 'trackingService', 'eventService'];\n\n    constructor(private dataService: IDataService, private callService: ICallService, private busyService: IBusyService, private trackingService: ITrackingService, private eventService: IEventService) {\n    }\n\n    public setHardwareColor(newActiveColor: ColorOptionValue): void {\n        let call: GetCall<ConfigurationValue> = newActiveColor.calls.changeColorOptionCall;\n        this.getNewConfiguration(call)\n    }\n\n    public setRatePlan(selectedRatePlan: RatePlanOption): void {\n        let call: GetCall<ConfigurationValue> = selectedRatePlan.selectCall.changeRatePlanOptionCall;\n        this.getNewConfiguration(call)\n    }\n\n    public setHardwareStorage(newActiveStorage: StorageOptionValue): void {\n        let call: GetCall<ConfigurationValue> = newActiveStorage.calls.changeStorageOptionCall;\n        this.getNewConfiguration(call)\n    }\n\n    setTariffOption(newActiveTariffOption: TariffOptionValue): void {\n        let call: GetCall<ConfigurationValue> = newActiveTariffOption.changeTariffOptionCall;\n        this.getNewConfiguration(call);\n    }\n\n    public selectPack(packGroup: PackGroupValue, newActivePack: PackValue): void {\n        let call: Call<ConfigurationValue> = newActivePack.calls.changePackCall;\n        this.getNewConfiguration(call)\n    }\n\n    public switchTargetGroup(targetGroupSwitcherValue: TargetGroupSwitcherValue): void {\n        let call: Call<ConfigurationValue> = targetGroupSwitcherValue.call;\n        this.getNewConfiguration(call)\n    }\n\n    private getNewConfiguration(call: Call<ConfigurationValue>): void {\n        this.busyService.busy(\n            this.callService.handleCall(call).then((newConfiguration: ConfigurationValue) => {\n                this.dataService.setConfiguration(newConfiguration);\n                this.trackingService.track(newConfiguration.calls.trackingCall);\n                this.eventService.emit(Events.BLAU_BUNDLE_PDP_PRODUCT_UPDATED, newConfiguration.ecommerceProductValue)\n            })\n        );\n    }\n\n}\n\n","import {TechnicalDetailsGroupValue} from \"../../domain/hardware/TechnicalDetailsGroupValue\";\nimport {IConfigurationChangeService} from \"../../service/IConfigurationChangeService\";\nimport {IDataService} from \"../../service/IDataService\";\nimport {IProductDetailsComponentService} from \"./IProductDetailsComponentService\";\nimport {PackGroupValue} from \"../../domain/tariff/PackGroupValue\";\nimport {PackValue} from \"../../domain/tariff/PackValue\";\nimport {IUIStateService} from \"../../service/IUIStateService\";\nimport {TargetGroupSwitcherValue} from \"../../domain/TargetGroupSwitcherValue\";\n\nexport class ProductDetailsComponentService implements IProductDetailsComponentService {\n    static $inject:string[] = ['dataService', 'configurationChangeService', 'uiStateService'];\n\n    constructor(private dataService:IDataService, private configurationChangeService:IConfigurationChangeService, private uiStateService:IUIStateService) {\n    }\n\n    public getTransformedHardwareTechnicalDetailGroups():TechnicalDetailsGroupValue[] {\n        return this.dataService.getTransformedHardwareTechnicalDetailGroups();\n    }\n\n    public getHardwareName():string {\n        return this.dataService.getHardwareName();\n    }\n\n    public getHardwareOverviewItems():string[] {\n        return this.dataService.getHardwareOverviewItems();\n    }\n\n    public getTariffName():string {\n        return this.dataService.getTariffName();\n    }\n\n    public getTariffOverviewItems():string[] {\n        return this.dataService.getTariffOverviewItems();\n    }\n\n    public getTariffConditions():string {\n        return this.dataService.getTariffConditions();\n    }\n\n    public getTariffNumberPorting():string {\n        return this.dataService.getTariffNumberPorting();\n    }\n\n    public getPackGroups():PackGroupValue[] {\n        return this.dataService.getPackGroups();\n    }\n\n    public getIntroContent(): string {\n        return this.dataService.getIntroContent();\n    }\n\n    public getDetailContent(): string {\n        return this.dataService.getDetailContent();\n    }\n\n    public selectPack(packGroup:PackGroupValue, clickedPack:PackValue):void {\n        this.configurationChangeService.selectPack(packGroup, clickedPack);\n    }\n\n    public switchTargetGroup(targetGroupSwitcherValue: TargetGroupSwitcherValue):void {\n        this.configurationChangeService.switchTargetGroup(targetGroupSwitcherValue);\n    }\n\n    public isTariffAccordionEntryOpen(entryId:string):boolean {\n        return this.uiStateService.isTariffAccordionEntryOpen(entryId);\n    }\n\n    public isHardwareAccordionEntryOpen(entryId:string):boolean {\n        return this.uiStateService.isHardwareAccordionEntryOpen(entryId);\n    }\n\n    public toggleTariffAccordionEntry(entryId:string):void {\n        this.uiStateService.toggleTariffAccordionEntry(entryId);\n    }\n\n    public toggleHardwareAccordionEntry(entryId:string):void {\n        this.uiStateService.toggleHardwareAccordionEntry(entryId);\n    }\n}\n\n","import {StockHintValue} from \"../../domain/hardware/StockHintValue\";\nimport {IUIStateService} from \"../../service/IUIStateService\";\nimport {IDataService} from \"../../service/IDataService\";\nimport {ISharedComponentService} from \"./ISharedComponentService\";\n\nexport class SharedComponentService implements ISharedComponentService {\n    static $inject:string[] = ['dataService', 'uiStateService'];\n\n    constructor(private dataService:IDataService, private uiStateService:IUIStateService) {\n    }\n\n    public getStockHint():StockHintValue {\n        return this.dataService.getStockHint();\n    }\n\n    public getPriceInteger(price:number):string {\n        return this.dataService.getPriceInteger(price);\n    }\n\n    public getPriceDecimal(price:number):string {\n        return this.dataService.getPriceDecimal(price);\n    }\n}\n\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nimport {ConfigurationValue} from './ConfigurationValue';\nimport {ContentsValue} from './ContentsValue';\nimport {LoginStatusTrackingValue} from \"./LoginStatusTrackingValue\";\n\nexport class BlauBundlePageValue {\n\n    static META_INFO: MetaInfo = valueMetaInfo('blauBundle:BlauBundlePageValue', {\n        configuration: 'ConfigurationValue',\n        contents: 'ContentsValue',\n        unifiedTrackingEnabled: 'boolean',\n        loginStatusTrackingValue: 'LoginStatusTrackingValue',\n    });\n\n    configuration: ConfigurationValue;\n    contents: ContentsValue;\n    unifiedTrackingEnabled: boolean;\n    loginStatusTrackingValue: LoginStatusTrackingValue;\n}\n\n","import { MetaInfo, valueMetaInfo } from \"@shop/common\";\nimport { HardwareValue } from \"./hardware/HardwareValue\";\nimport { TariffValue } from \"./tariff/TariffValue\";\nimport { ConfigurationCalls } from \"./ConfigurationCalls\";\nimport { PriceValue } from \"./PriceValue\";\nimport { TargetGroupSwitcherValue } from \"./TargetGroupSwitcherValue\";\nimport {EcommerceProductValue} from \"./EcommerceProductValue\";\n\nexport class ConfigurationValue {\n    static META_INFO: MetaInfo = valueMetaInfo('blauBundle:ConfigurationValue', {\n        hardware: 'HardwareValue',\n        tariff: 'TariffValue',\n        price: 'PriceValue',\n        calls: 'ConfigurationCalls',\n        submitEnabled: 'boolean',\n        bundleUpsellAdspaceUrl: 'string|null',\n        targetGroupSwitcherValue: 'TargetGroupSwitcherValue|null',\n        ecommerceProductValue: 'EcommerceProductValue | null'\n    });\n\n    hardware: HardwareValue;\n    tariff: TariffValue;\n    price: PriceValue;\n    calls: ConfigurationCalls;\n    submitEnabled: boolean;\n    bundleUpsellAdspaceUrl: string;\n    targetGroupSwitcherValue: TargetGroupSwitcherValue;\n    ecommerceProductValue: EcommerceProductValue;\n}\n\n","import {\n    MetaInfo, valueMetaInfo, PostCall, ConstantCall,\n    TrackingInfoValue\n} from \"@shop/common\";\nimport {CurrentConfigurationValue} from \"./CurrentConfigurationValue\";\nexport class ConfigurationCalls {\n    static META_INFO:MetaInfo = valueMetaInfo('blauBundle:ConfigurationCalls', {\n        submitCall: 'PostCall',\n        trackingCall: 'ConstantCall'\n    });\n\n    submitCall:PostCall<CurrentConfigurationValue>;\n    trackingCall:ConstantCall<TrackingInfoValue>;\n}\n\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nimport {EcommerceProductValue} from \"./EcommerceProductValue\";\nexport class CurrentConfigurationValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('blauBundle:CurrentConfigurationValue', {\n        shopContext: 'string',\n        targetGroup: 'string',\n        hardwareOfferName: 'string',\n        tariffOfferName: 'string',\n        selectedTariffPackNames: '[string]',\n        ecommerceProductValue: 'EcommerceProductValue | null'\n    });\n\n    shopContext:string;\n    targetGroup:string;\n    hardwareOfferName:string;\n    tariffOfferName:string;\n    selectedTariffPackNames:string[];\n    ecommerceProductValue:EcommerceProductValue;\n}\n\n","import {HardwareContentsValue} from \"./HardwareContentsValue\";\nimport {MetaInfo, valueMetaInfo} from \"@shop/common\";\nimport {ColorOptionValue} from \"./ColorOptionValue\";\nimport {StorageOptionValue} from \"./StorageOptionValue\";\nimport {MediaGalleryValue} from \"./MediaGalleryValue\";\nimport {TechnicalDetailsGroupValue} from \"./TechnicalDetailsGroupValue\";\nimport {StockHintValue} from \"./StockHintValue\";\nimport {RatePlanOption} from \"./RatePlanOption\";\nexport class HardwareValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('blauBundle:HardwareValue', {\n        contents: 'HardwareContentsValue',\n        colorOptions: 'ColorOptionValue[]',\n        storageOptions: 'StorageOptionValue[]',\n        ratePlanOptions: 'RatePlanOption[]',\n        mediaGallery: 'MediaGalleryValue',\n        technicalDetailGroups: 'TechnicalDetailsGroupValue[]',\n        stockHint: 'StockHintValue',\n        creditInfoHint: 'string',\n        article12Text: 'string',\n        importantHint: 'string'\n    });\n\n    contents:HardwareContentsValue;\n    colorOptions:ColorOptionValue[];\n    storageOptions:StorageOptionValue[];\n    ratePlanOptions:RatePlanOption[];\n    mediaGallery:MediaGalleryValue;\n    technicalDetailGroups:TechnicalDetailsGroupValue[];\n    stockHint:StockHintValue;\n    creditInfoHint:string;\n    article12Text:string;\n    importantHint:string;\n}\n\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nimport {EnergyEfficiency} from \"./EnergyEfficiency\";\nexport class HardwareContentsValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('blauBundle:HardwareContentsValue', {\n        name: 'string',\n        hardwareImageLink: 'string',\n        description: 'string',\n        overview: '[string]',\n        ratingStars: 'string',\n        ratingReviews: 'string',\n        imageUrlList: '[string]',\n        energyEfficiency: 'EnergyEfficiency',\n        externalId: 'string',\n        infoIconToggle: 'boolean',\n        growHint: 'string',\n        networkHint: 'string',\n        packList: 'string'\n    });\n\n    name:string;\n    hardwareImageLink:string;\n    description:string;\n    overview:string[];\n    ratingStars:string;\n    ratingReviews:string;\n    imageUrlList:string[];\n    externalId: string;\n    infoIconToggle: boolean;\n    growHint: string;\n    networkHint: string;\n    packList: string;\n    energyEfficiency: EnergyEfficiency\n}\n\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nexport class ColorOptionContentsValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('blauBundle:ColorOptionContentsValue', {\n        optionName: 'string',\n        imageHtml: 'string | null'\n    });\n\n    optionName:string;\n    imageHtml:string;\n\n    get imageUrl():String {\n        // since the image HTML snippet from the CMS does not have a root element,\n        // the content must be wrapped in a dummy, root <div> element for the\n        // jQuery selectors to work\n        return $('<div>').append($.parseHTML(this.imageHtml)).find('img').attr('src');\n    }\n\n}\n","import {MetaInfo, valueMetaInfo, GetCall} from \"@shop/common\";\nexport class ColorOptionCalls {\n\n    static META_INFO:MetaInfo = valueMetaInfo('blauBundle:ColorOptionCalls', {\n        changeColorOptionCall: 'GetCall'\n    });\n\n    changeColorOptionCall:GetCall<any>;\n}\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nimport {ColorOptionContentsValue} from \"./ColorOptionContentsValue\";\nimport {ColorOptionCalls} from \"./ColorOptionCalls\";\nexport class ColorOptionValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('blauBundle:ColorOptionValue', {\n        contents: 'ColorOptionContentsValue',\n        selected: 'boolean',\n        calls: 'ColorOptionCalls'\n    });\n\n    contents:ColorOptionContentsValue;\n    selected:boolean;\n    calls:ColorOptionCalls;\n}\n\n","import {AbstractTechnicalDetailsValue} from \"./AbstractTechnicalDetailsValue\";\nimport {valueMetaInfo} from \"@shop/common\";\nexport class BooleanTechnicalDetailsValue extends AbstractTechnicalDetailsValue {\n\n    static META_INFO = valueMetaInfo('blauBundle:BooleanTechnicalDetailsValue', {\n        keyName: 'string | null',\n        keyValue: 'boolean | null'\n    });\n\n    keyValue:boolean;\n\n    public isBooleanTypedField():boolean {\n        return true;\n    }\n}\n","import { MetaInfo, valueMetaInfo } from \"@shop/common\";\nexport class PriceContentsValue {\n  static META_INFO: MetaInfo = valueMetaInfo(\"blauBundle:PriceContentsValue\", {\n    contractDurationDescription: \"string | null\",\n    activationFeeDescription: \"string | null\"\n  });\n\n  contractDurationDescription: string;\n  activationFeeDescription: string;\n}\n","import { MetaInfo, valueMetaInfo } from \"@shop/common\";\nimport { PriceContentsValue } from \"./PriceContentsValue\";\nexport class PriceValue {\n  static META_INFO: MetaInfo = valueMetaInfo(\"blauBundle:PriceValue\", {\n    recurringAmount: \"number | null\",\n    nonRecurringAmount: \"number | null\",\n    contents: \"PriceContentsValue\"\n  });\n\n  recurringAmount: number;\n  nonRecurringAmount: number;\n  contents: PriceContentsValue;\n}\n","import {MediaGalleryItemContentsValue} from \"./MediaGalleryItemContentsValue\";\nimport {MetaInfo, valueMetaInfo} from \"@shop/common\";\nimport {MediaGalleryItemType} from \"./MediaGalleryItemType\";\nexport class MediaGalleryItemValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('blauBundle:MediaGalleryItemValue', {\n        contents: 'MediaGalleryItemContentsValue',\n        type: 'MediaGalleryItemType',\n        contentAvailable: 'boolean'\n    });\n\n    contents:MediaGalleryItemContentsValue;\n    type:MediaGalleryItemType;\n    contentAvailable: boolean;\n\n}\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nexport class MediaGalleryItemContentsValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('blauBundle:MediaGalleryItemContentsValue', {\n        markup: 'string'\n    });\n\n    markup:string;\n}\n","import {MediaGalleryItemValue} from \"./MediaGalleryItemValue\";\nimport {MetaInfo, valueMetaInfo} from \"@shop/common\";\nexport class MediaGalleryValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('blauBundle:MediaGalleryValue', {\n        items: '[MediaGalleryItemValue]'\n    });\n\n    items:MediaGalleryItemValue[];\n}","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nimport {StockHintContentsValue} from \"./StockHintContentsValue\";\nimport {StockHintType} from \"./StockHintType\";\nexport class StockHintValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('blauBundle:StockHintValue', {\n        contents: 'StockHintContentsValue',\n        hintType: 'StockHintType'\n    });\n\n    contents:StockHintContentsValue;\n    hintType:StockHintType;\n\n}\n\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nexport class StockHintContentsValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('blauBundle:StockHintContentsValue', {\n        hint: 'string',\n    });\n\n    hint:string;\n}\n\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nimport {StorageOptionContentsValue} from \"./StorageOptionContentsValue\";\nimport {StorageOptionCalls} from \"./StorageOptionCalls\";\nexport class StorageOptionValue {\n    static META_INFO:MetaInfo = valueMetaInfo('blauBundle:StorageOptionValue', {\n        contents: 'StorageOptionContentsValue',\n        selected: 'boolean',\n        calls: 'StorageOptionCalls'\n    });\n\n    contents:StorageOptionContentsValue;\n    selected:boolean;\n    calls:StorageOptionCalls;\n}\n","import {MetaInfo, valueMetaInfo, GetCall} from \"@shop/common\";\nexport class StorageOptionCalls {\n    static META_INFO:MetaInfo = valueMetaInfo('blauBundle:StorageOptionCalls', {\n        changeStorageOptionCall: 'GetCall'\n    });\n\n    changeStorageOptionCall:GetCall<any>;\n}\n\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nexport class StorageOptionContentsValue {\n    static META_INFO:MetaInfo = valueMetaInfo('blauBundle:StorageOptionContentsValue', {\n        optionName: 'string',\n        amount: 'number'\n    });\n\n    optionName:string;\n    amount:number;\n}\n\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nimport {PackGroupContentsValue} from \"./PackGroupContentsValue\";\nimport {PackValue} from \"./PackValue\";\nexport class PackGroupValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('blauBundle:PackGroupValue', {\n        id: 'string',\n        contents: 'PackGroupContentsValue',\n        packs: 'PackValue[]'\n\n    });\n\n    id:string;\n    contents:PackGroupContentsValue;\n    packs:PackValue[];\n\n}","import {valueMetaInfo} from \"@shop/common\";\nimport {TechnicalDetailsGroupType} from \"./TechnicalDetailsGroupType\";\nimport {AbstractTechnicalDetailsValue} from \"./AbstractTechnicalDetailsValue\";\nexport class TechnicalDetailsGroupValue {\n\n    static META_INFO = valueMetaInfo('blauBundle:TechnicalDetailsGroupValue', {\n        name: 'string | null',\n        technicalDetailsGroupType: 'TechnicalDetailsGroupType | null',\n        technicalDetails: 'AbstractTechnicalDetailsValue[] | null'\n    });\n\n    name:string;\n    technicalDetailsGroupType:TechnicalDetailsGroupType;\n    technicalDetails:AbstractTechnicalDetailsValue[];\n}\n","import {enumMetaInfo} from \"@shop/common\";\nexport class TechnicalDetailsGroupType {\n\n    static META_INFO = enumMetaInfo('blauBundle:TechnicalDetailsGroupType');\n\n    static CAMERA = new TechnicalDetailsGroupType(\"CAMERA\");\n    static DISPLAY = new TechnicalDetailsGroupType(\"DISPLAY\");\n    static DEVICE = new TechnicalDetailsGroupType(\"DEVICE\");\n    static MEMORY = new TechnicalDetailsGroupType(\"MEMORY\");\n\n    constructor(public name:string) {\n        argsContract(arguments, 'str');\n    }\n}\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nexport class PackGroupContentsValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('blauBundle:PackGroupContentsValue', {\n        name: 'string',\n    });\n\n    name:string;\n}\n\n","import {PackContentsValue} from \"./PackContentsValue\";\nimport {MetaInfo, valueMetaInfo} from \"@shop/common\";\nimport {PackCalls} from \"./PackCalls\";\nexport class PackValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('blauBundle:PackValue', {\n        contents: 'PackContentsValue',\n        calls: 'PackCalls',\n        selected: 'boolean'\n    });\n\n    contents:PackContentsValue;\n    calls:PackCalls;\n    selected:boolean;\n}\n\n","import {MetaInfo, valueMetaInfo, Call} from \"@shop/common\";\nexport class PackCalls {\n\n    static META_INFO:MetaInfo = valueMetaInfo('blauBundle:PackCalls', {\n        changePackCall: 'Call'\n    });\n\n    changePackCall:Call<any>;\n}\n\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nexport class PackContentsValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('blauBundle:PackContentsValue', {\n        name: 'string',\n        price: 'number',\n        description: 'string | null',\n        details: 'string | null'\n    });\n\n    name:string;\n    price:number;\n    description:string;\n    details:string;\n}\n","import { MetaInfo, valueMetaInfo } from \"@shop/common\";\n\nexport class TariffContentsValue {\n\n    static META_INFO: MetaInfo = valueMetaInfo('blauBundle:TariffContentsValue', {\n        name: 'string',\n        description: 'string',\n        additionalDetails: '[string]',\n        overview: '[string]',\n        conditions: 'string | null',\n        dataVolumeMbNumeric: 'string | null',\n        numberPorting: 'string | null',\n        footnotes: 'string'\n    });\n\n    name: string;\n    description: string;\n    additionalDetails: string[];\n    overview: string[];\n    conditions: string;\n    dataVolumeMbNumeric: string;\n    numberPorting: string;\n    footnotes: string;\n}\n","import { MetaInfo, valueMetaInfo } from \"@shop/common\";\nimport { TariffContentsValue } from \"./TariffContentsValue\";\nimport { PackGroupValue } from \"./PackGroupValue\";\nimport { TariffOptionValue } from \"./TariffOptionValue\";\n\nexport class TariffValue {\n  static META_INFO: MetaInfo = valueMetaInfo(\"blauBundle:TariffValue\", {\n    contents: \"TariffContentsValue\",\n    tariffOptions: \"[TariffOptionValue]\",\n    packGroups: \"[PackGroupValue]\"\n  });\n\n  contents: TariffContentsValue;\n  tariffOptions: TariffOptionValue[];\n  packGroups: PackGroupValue[];\n}\n","import { MetaInfo, valueMetaInfo } from \"@shop/common\";\n\nexport class ContentsValue {\n    static META_INFO: MetaInfo = valueMetaInfo('blauBundle:ContentsValue', {\n        teaserContent: 'string',\n        detailContent: 'string',\n        introContent: 'string',\n        ratePlanInfoText: 'string'\n    });\n\n    teaserContent: string;\n    detailContent: string;\n    introContent: string;\n    ratePlanInfoText: string;\n}\n","import appTemplateHtml from \"./appTemplate.html\";\n\nexport class App implements ng.IComponentOptions {\n    template: string = appTemplateHtml;\n}","export default \"<div> <main id=content data-co-tracking-product-lines=\\\"['BUNDLE','HARDWARE_ONLY']\\\"> <co-offer-stage></co-offer-stage> <co-target-group-switcher></co-target-group-switcher> <co-product-details></co-product-details> <co-offer-summary></co-offer-summary> </main> </div>\";","import {Call, MetaInfo, valueMetaInfo} from \"@shop/common\";\nexport class TargetGroupSwitcherValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('blauBundle:TargetGroupSwitcherValue', {\n        call: 'Call',\n        bannerMarkup: 'string',\n        targetGroup: 'string'\n    });\n\n    call:Call<any>;\n    bannerMarkup: string;\n    targetGroup: string;\n}\n","import {ITargetGroupSwitcherComponentService} from \"./ITargetGroupSwitcherComponentService\";\nimport {TargetGroupSwitcherValue} from \"../../domain/TargetGroupSwitcherValue\";\nimport {IDataService} from \"../../service/IDataService\";\nimport {IProductDetailsComponentService} from \"../productDetails/IProductDetailsComponentService\";\n\nexport class TargetGroupSwitcherComponentService implements ITargetGroupSwitcherComponentService {\n    static $inject:string[] = [\"dataService\", \"productDetailsComponentService\"];\n\n    constructor(private dataService:IDataService,\n                private productDetailsComponentService: IProductDetailsComponentService) {}\n\n    public getTargetGroupSwitcherValue(): TargetGroupSwitcherValue {\n        return this.dataService.getTargetGroupSwitcherValue();\n    }\n\n    public switchTargetGroup(): void {\n        let targetGroupSwitcherValue:TargetGroupSwitcherValue = this.getTargetGroupSwitcherValue();\n        return this.productDetailsComponentService.switchTargetGroup(targetGroupSwitcherValue);\n    }\n}\n","import coTargetGroupSwitcherHtml from './coTargetGroupSwitcher.html';\nimport {TargetGroupSwitcherController} from \"./TargetGroupSwitcherController\";\n\nexport class CoTargetGroupSwitcher implements ng.IComponentOptions {\n        controller:any = TargetGroupSwitcherController;\n        template:string = coTargetGroupSwitcherHtml;\n}\n\n\n","export default \"<div data-ng-if=$ctrl.visible()> <a href=# data-ng-click=$ctrl.switchTargetGroup() data-co-click-prevent-default data-ng-bind-html=\\\"$ctrl.bannerMarkup() | coUnsafeHtml\\\" data-co-tracking-attributes data-co-tracking-attributes-action=link data-co-tracking-attributes-element-id=co-target-group-switch-to-{{$ctrl.targetGroupName()}}> </a> </div>\";","import {ITargetGroupSwitcherComponentService} from \"../ITargetGroupSwitcherComponentService\";\n\nexport class TargetGroupSwitcherController {\n    static $inject: string[] = ['targetGroupSwitcherComponentService', '$timeout'];\n\n    /**\n     * We have this delay for 2 reasons:\n     * 1. Forced update of tracking attributes to make sure we can distinguish between both directions in Google Analytics.\n     * 2. Make the switcher more prominent.\n     */\n    private visibilityDelayed: boolean = true;\n\n    constructor(private targetGroupSwitcherService: ITargetGroupSwitcherComponentService,\n                private $timeout) {\n        this.triggerDelayedVisibility();\n    }\n\n    private setVisibleAfterDelay(): void {\n        this.visibilityDelayed = false;\n    }\n\n    private triggerDelayedVisibility(): void {\n        this.visibilityDelayed = true;\n        let visibilityDelayFn = this.setVisibleAfterDelay.bind(this);\n        this.$timeout(visibilityDelayFn, 2000);\n    }\n\n    public switchTargetGroup(): void {\n        this.triggerDelayedVisibility();\n        this.targetGroupSwitcherService.switchTargetGroup();\n    }\n\n    public bannerMarkup(): string {\n        return this.targetGroupSwitcherService.getTargetGroupSwitcherValue().bannerMarkup;\n    }\n\n    public visible(): boolean {\n        return this.targetGroupSwitcherService.getTargetGroupSwitcherValue() && !this.visibilityDelayed;\n    }\n\n    public targetGroupName(): string {\n        return this.targetGroupSwitcherService.getTargetGroupSwitcherValue().targetGroup;\n    }\n}\n","import coOfferStageTemplateHtml from \"./coOfferStageTemplate.html\";\nimport { IDataService } from \"../../../service/IDataService\";\n\nexport class CoOfferStage implements ng.IComponentOptions {\n  template: string = coOfferStageTemplateHtml;\n  controller: any = CoOfferStageController;\n}\n\nclass CoOfferStageController {\n  static $inject: string[] = [\"dataService\"];\n  public creditInfoHint: string = \"\";\n  public article12Text: string = \"\";\n  public importantHint: string = \"\";\n\n  constructor(private dataService: IDataService) {\n    this.initData();\n  }\n\n  public isInstallment(): boolean {\n    return this.dataService.isInstallmentSelected();\n  }\n\n  private initData() {\n    this.creditInfoHint = this.dataService.getCreditInfoHint();\n    this.article12Text = this.dataService.getarticle12TextHint();\n    this.importantHint = this.dataService.getimportantHint();\n  }\n\n  public getFootnotes() {\n    return this.dataService.getFootnotes();\n  }\n}\n","export default \"<section class=\\\"stage stage-light\\\"> <div class=inner> <div class=offer-refined> <div class=\\\"stage-hint-box important-hint\\\" data-ng-if=$ctrl.importantHint> <div class=stage-hint-text data-ng-bind-html=\\\"$ctrl.importantHint | coUnsafeHtml\\\"></div> </div> <co-offer-description></co-offer-description> <co-offer-overview></co-offer-overview> <div class=\\\"stage-hint-box credit-hint\\\" data-ng-if=\\\"$ctrl.creditInfoHint && $ctrl.isInstallment()\\\"> <div class=stage-hint-text data-ng-bind-html=\\\"$ctrl.creditInfoHint | coUnsafeHtml\\\"></div> </div> <div class=\\\"stage-hint-box important-hint\\\" data-ng-if=\\\"$ctrl.article12Text && $ctrl.isInstallment()\\\"> <div class=stage-hint-text data-ng-bind-html=\\\"$ctrl.article12Text | coUnsafeHtml\\\"></div> </div> </div> </div> </section> <div class=\\\"modal fade\\\" id=modal-footnotes tabindex=-1 role=dialog> <div class=\\\"modal-dialog modal-md\\\" role=document> <div class=modal-content> <div class=modal-header> <button class=close type=button data-dismiss=modal aria-label=Close> <span aria-hidden=true>&#xD7;</span> </button> <h4 class=modal-title>Weitere Hinweise und Fußnoten</h4> </div> <div class=modal-body data-ng-bind-html=\\\"$ctrl.getFootnotes() | coUnsafeHtml\\\"></div> </div> </div> </div> \";","import coOfferDescriptionTemplateHtml from \"./coOfferDescriptionTemplate.html\";\nimport { IDataService } from \"../../../service/IDataService\";\nimport { getFormattedDataVolumeGigabytes } from \"../../../helpers\";\n\nexport class CoOfferDescription implements ng.IComponentOptions {\n  controller: any = OfferDescriptionController;\n  template: string = coOfferDescriptionTemplateHtml;\n}\n\nclass OfferDescriptionController {\n  static $inject: string[] = [\"dataService\"];\n\n  constructor(private dataService: IDataService) {}\n\n  public getHardwareName() {\n    return this.dataService.getHardwareName();\n  }\n\n  public getTariffName() {\n    return this.dataService.getTariffName();\n  }\n\n  public getAdditionalDetails() {\n    return this.dataService.getTariffContents().additionalDetails;\n  }\n\n  public getFormattedDataVolume() {\n    return getFormattedDataVolumeGigabytes(\n      this.dataService.getTariffContents().dataVolumeMbNumeric,\n      this.getTariffName()\n    );\n  }\n}\n","export default \"<div class=offer-description> <div class=offer-headline> <span class=offer-name data-ng-bind-html=\\\"$ctrl.getHardwareName() | coUnsafeHtml\\\"></span> <span class=offer-conjunction> mit </span><span class=offer-tariff data-ng-bind-html=\\\"$ctrl.getFormattedDataVolume() | coUnsafeHtml\\\"></span> </div> <div class=offer-bulletpoints> <p class=offer-bulletpoint data-ng-repeat=\\\"additionalDetail in $ctrl.getAdditionalDetails() track by $index\\\"> <span class=\\\"glyphicon glyphicon-check\\\"> </span><span class=copy data-ng-bind-html=\\\"additionalDetail | coUnsafeHtml\\\"></span> </p> </div> </div> \";","import coOfferOverviewTemplateHtml from \"./coOfferOverviewTemplate.html\";\nimport { IDataService } from \"../../../service/IDataService\";\nimport {buildTrackingGalleryInteractionTracking, pushToTefDataLayer} from \"../../../tracking/BlauTracking\";\n\nexport class CoOfferOverview implements ng.IComponentOptions {\n  controller: any = OfferOverviewController;\n  template: string = coOfferOverviewTemplateHtml;\n}\n\nclass OfferOverviewController {\n  static $inject: string[] = [\"dataService\"];\n\n  constructor(private dataService: IDataService) {}\n\n  $onInit() {\n    window.addEventListener('occl.shop-media-gallery.arrow', (event) => {\n      pushToTefDataLayer(buildTrackingGalleryInteractionTracking(\"click - arrow\"));\n    }, { once: true });\n\n    window.addEventListener('occl.shop-media-gallery.slid', (event) => {\n      pushToTefDataLayer(buildTrackingGalleryInteractionTracking(\"swipe - big picture\"));\n    }, { once: true });\n  }\n\n  public getEnergyEfficiency(){\n    let productDataSheet = this.dataService.getHardwareContents().energyEfficiency.productDataSheet\n    let energyLevelLabel = this.dataService.getHardwareContents().energyEfficiency.energyEfficiencyLabel\n    return \"<div class='dataSheet'>\"+ productDataSheet + \"</div>\"+ \"<div class='energyLevel'>\" + energyLevelLabel +\"</div>\";\n  }\n\n  public getHardwareName() {\n    return this.dataService.getHardwareName();\n  }\n\n  public getTariffDescription() {\n    return this.dataService.getTariffContents().description;\n  }\n\n  public getImageUrlList() {\n    return this.dataService.getImageUrlList().map(image => ({\"image\": image}));\n  }\n\n  public isRatePlanOptionEnabled() {\n    return this.dataService.getRatePlan().some(item => item.rateplanOption);\n  }\n}\n","export default \"<div class=offer-overview> <div class=figures> <tef-carousel cloak aria-label=\\\"Carousel shows ...\\\"> <script type=application/json slot=options> {\\\"type\\\":\\\"slider\\\",\\\"rewind\\\":false,\\\"bound\\\":true,\\\"perView\\\":1,\\\"autoplay\\\":false,\\\"gap\\\":10,\\\"equalHeight\\\":true,\\\"layout\\\":{\\\"dots\\\":false,\\\"navigation\\\":true,\\\"navigationSpaced\\\":true,\\\"dotsSpaced\\\":false}} </script> <div data-ng-repeat=\\\"image in $ctrl.getImageUrlList()\\\" class=slide> <tef-image cloak desc-color=black> <div slot=image> <picture> <img loading=lazy alt=\\\"Slide {{ $index + 1 }}\\\" data-ng-src={{image.image}} /> </picture> </div> </tef-image> </div> </tef-carousel> <div class=energy-efficiency data-ng-bind-html=\\\"$ctrl.getEnergyEfficiency() | coUnsafeHtml\\\"> </div> </div> <div class=offer-interaction> <div class=inner> <div class=offer-configurator> <co-color-switcher></co-color-switcher> <co-storage-switcher></co-storage-switcher> <co-rate-plan-switcher ng-if=$ctrl.isRatePlanOptionEnabled()></co-rate-plan-switcher> <co-tariff-switcher></co-tariff-switcher> </div> <co-offer-pricing></co-offer-pricing> </div> <div class=links data-ng-bind-html=\\\"$ctrl.getTariffDescription() | coUnsafeHtml\\\"></div> </div> </div> \";","// Blau tracking file to push tracking data to TefDataLayer\ndeclare global {\n    interface Window {\n        tefDataLayer: any;\n    }\n}\nexport function pushToTefDataLayer(data: {}) {\n    if (window.tefDataLayer) {\n        window.tefDataLayer.push(data);\n    }\n}\n\nexport function buildTrackingGalleryInteractionTracking(currentAction: string): object {\n    return {\n        event: \"iconGallery_interaction\",\n        event_name: 'icon_gallery',\n        eCat: 'iconGallery',\n        eAct: currentAction,\n        eVal: 0,\n        nonInteraction: false\n    };\n}\n","import coColorSwitcherTemplateHtml from \"./coColorSwitcherTemplate.html\";\nimport { IDataService } from \"../../../service/IDataService\";\nimport { ColorOptionValue } from \"../../../domain/hardware/ColorOptionValue\";\nimport { IConfigurationChangeService } from \"../../../service/IConfigurationChangeService\";\n\nexport class CoColorSwitcher implements ng.IComponentOptions {\n  controller: any = ColorSwitcherController;\n  template: string = coColorSwitcherTemplateHtml;\n}\n\nclass ColorSwitcherController {\n  static $inject: string[] = [\"dataService\", \"configurationChangeService\"];\n\n  constructor(\n    private dataService: IDataService,\n    private configurationChangeService: IConfigurationChangeService\n  ) {}\n\n  public hasHardwareColors() {\n    return this.getHardwareColors().length > 0;\n  }\n\n  public getHardwareColors() {\n    return this.dataService.getHardwareColors();\n  }\n\n  public setHardwareColor(color: ColorOptionValue): void {\n    this.configurationChangeService.setHardwareColor(color);\n  }\n\n  public getSelectedColorName() {\n    return this.getHardwareColors().filter(color => color.selected)[0].contents\n      .optionName;\n  }\n}\n","export default \"<div class=\\\"switcher color-switcher\\\" data-ng-if=$ctrl.hasHardwareColors()> <div class=switcher-headline> Gewählte Farbe: <span data-ng-bind-html=\\\"$ctrl.getSelectedColorName() | coUnsafeHtml\\\"></span> <div class=switcher-box> <div class=\\\"switcher-item color-switcher-item\\\" data-ng-repeat=\\\"color in $ctrl.getHardwareColors() track by color.contents.optionName\\\"> <input id=\\\"{{'color-' + color.contents.optionName}}\\\" name=\\\"\\\" type=radio value={{color.contents.optionName}} data-ng-checked=color.selected data-ng-click=$ctrl.setHardwareColor(color) /> <label class=color-switcher-item-label-blau for=\\\"{{'color-' + color.contents.optionName}}\\\"><img class=color-switcher-item-color data-ng-src={{color.contents.imageUrl}} title={{color.contents.optionName}} alt={{color.contents.optionName}} width=36 height=36 /></label> </div> </div> </div> </div> \";","import coStorageSwitcherTemplateHtml from \"./coStorageSwitcherTemplate.html\";\nimport { IDataService } from \"../../../service/IDataService\";\nimport { IConfigurationChangeService } from \"../../../service/IConfigurationChangeService\";\nimport { StorageOptionValue } from \"../../../domain/hardware/StorageOptionValue\";\n\nexport class CoStorageSwitcher implements ng.IComponentOptions {\n  controller: any = StorageSwitcherController;\n  template: string = coStorageSwitcherTemplateHtml;\n}\n\nclass StorageSwitcherController {\n  static $inject: string[] = [\"dataService\", \"configurationChangeService\"];\n\n  constructor(\n    private dataService: IDataService,\n    private configurationChangeService: IConfigurationChangeService\n  ) {}\n\n  public hasValidHardwareStorages(): boolean {\n    return this.getHardwareStorages().some(\n        s => s.contents && s.contents.optionName !== \"\" && s.contents.amount > 0\n    );\n  }\n\n  public getHardwareStorages() {\n    return this.dataService.getHardwareStorages();\n  }\n\n  public setHardwareStorage(storage: StorageOptionValue): void {\n    this.configurationChangeService.setHardwareStorage(storage);\n  }\n\n  public getValidHardwareStorages(): StorageOptionValue[] {\n    return this.getHardwareStorages().filter(\n        s => s.contents && s.contents.optionName !== \"\" && s.contents.amount > 0\n    );\n  }\n}\n","export default \"<div class=\\\"switcher content-switcher\\\" data-ng-if=$ctrl.hasValidHardwareStorages() xmlns=http://www.w3.org/1999/html> <div class=switcher-headline>Gerätespeicher</div> <div class=switcher-box aria-label=\\\"Auswahl Gerätespeicher\\\" role=radiogroup> <div class=switcher-item data-ng-repeat=\\\"storage in $ctrl.getValidHardwareStorages() track by storage.contents.optionName\\\" aria-checked=storage.selected role=radio> <input id=\\\"{{'storage-' + storage.contents.optionName}}\\\" type=radio value={{storage.contents.optionName}} data-ng-checked=storage.selected data-ng-click=$ctrl.setHardwareStorage(storage) /> <label for=\\\"{{'storage-' + storage.contents.optionName}}\\\"><span data-ng-bind-html=\\\"storage.contents.optionName | coUnsafeHtml\\\"></span></label> </div> </div> </div> \";","import coOfferPricingTemplateHtml from \"./coOfferPricingTemplate.html\";\nimport { IDataService } from \"../../../service/IDataService\";\nimport { IUIStateService } from \"../../../service/IUIStateService\";\nimport {StockHintType} from \"../../../domain/hardware/StockHintType\";\n\nexport class CoOfferPricing implements ng.IComponentOptions {\n  controller: any = OfferPricingController;\n  template: string = coOfferPricingTemplateHtml;\n}\n\nclass OfferPricingController {\n  static $inject: string[] = [\"dataService\", \"uiStateService\"];\n\n  constructor(\n    private dataService: IDataService,\n    private uiStateService: IUIStateService,\n  ) {}\n\n  public getFormattedRecurringAmount() {\n    return this.dataService.getFormattedPrice(this.getPrices().recurringAmount);\n  }\n\n  public getFormattedNonRecurringAmount() {\n    return this.dataService.getFormattedPrice(\n      this.getPrices().nonRecurringAmount,\n      true\n    );\n  }\n\n  public getContractDescription() {\n    return this.getPrices().contents.contractDurationDescription;\n  }\n\n  public getActivationFeeDescription() {\n    return this.getPrices().contents.activationFeeDescription;\n  }\n\n  /*\n   * the Compendium JS expects a valid JSON-String as the value for the config attribute. We can't write this value\n   * in the template directly since the usage of double-quotes would clash with the double quotes used to surround\n   * attribute values in HTML templates. Using single quotes for this particular attribute value isn't an option since\n   * auto-formatters like Prettier will automatically replace then with double quotes again\n   */\n  public getConfigForStickyModule() {\n    return '{\"isSticky\": true}';\n  }\n\n  public submit() {\n    if (this.isSubmitPossible()) {\n      const promise = this.dataService.submit();\n      this.uiStateService.setSubmitInProgress(true); // prevent submit as soon as user clicked the submit button\n      promise.catch(() => {\n        this.uiStateService.setSubmitInProgress(false);\n      });\n    }\n  }\n\n  public isSubmitPossible() {\n    return (\n      this.dataService.isSubmitEnabled() &&\n      !this.uiStateService.getSubmitInProgress()\n    );\n  }\n\n  private getPrices() {\n    return this.dataService.getPrices();\n  }\n\n\n  public getStockHintText(): string {\n    return this.getStockHint().contents.hint;\n  }\n\n  public getCssClassForStockHint(): string {\n    let stockHint = this.getStockHint();\n\n    switch (stockHint.hintType) {\n      case StockHintType.OUT_OF_STOCK:\n        return \"not-available\";\n      case StockHintType.ON_STOCK_LIMITED_AVAILABILITY:\n        return \"short\";\n      case StockHintType.ON_STOCK:\n      case StockHintType.VIRTUAL_STOCK:\n        return \"available\";\n      default:\n        return \"\";\n    }\n  }\n\n  private getStockHint() {\n    return this.dataService.getStockHint();\n  }\n\n  public getInfoIconToggle(): boolean {\n    const data = this.dataService.getHardwareContents();\n    return data && data.infoIconToggle != null ? data.infoIconToggle : false;\n  }\n\n  public getOcclModalInfoId(): string {\n    const hardwareContents = this.dataService.getHardwareContents();\n    if (\n        hardwareContents &&\n        hardwareContents.externalId\n    ) {\n      return hardwareContents.externalId;\n    }\n    return \"\";\n  }\n\n  public getHardwareDisplayName(): string {\n    const hardware = this.dataService.getHardware();\n    if (\n        hardware &&\n        hardware.contents &&\n        hardware.contents.name\n    ) {\n      return hardware.contents.name;\n    }\n    return '';\n  }\n\n  public getTotalPriceAmount(): number {\n    const price = this.dataService.getPrices();\n\n    if (price && price.recurringAmount != null) {\n      return price.recurringAmount;\n    }\n    return 0;\n  }\n\n  public getHardwareRuntime(): string {\n    const price = this.dataService.getPrices();\n\n    if (price && price.contents && price.contents.contractDurationDescription) {\n      return price.contents.contractDurationDescription;\n    }\n    return '';\n  }\n\n  public getConnectionFeeDescription(): string {\n    const price = this.dataService.getPrices();\n    if (price && price.contents && price.contents.activationFeeDescription) {\n      return price.contents.activationFeeDescription;\n    }\n    return '';\n  }\n\n  public getMonthlyHwPrice(): number {\n    const hardware = this.dataService.getHardware();\n\n    return hardware &&\n    (hardware as any).calls &&\n    (hardware as any).calls.submitCall &&\n    (hardware as any).calls.submitCall.data &&\n    (hardware as any).calls.submitCall.data.ecommerceProductValue &&\n    (hardware as any).calls.submitCall.data.ecommerceProductValue.attributes &&\n    (hardware as any).calls.submitCall.data.ecommerceProductValue.attributes.metric3\n        ? Number((hardware as any).calls.submitCall.data.ecommerceProductValue.attributes.metric3)\n        : 0;\n  }\n\n  public getTariffMonthlyRate(): number {\n    const hardware = this.dataService.getHardware();\n\n    return hardware &&\n    (hardware as any).calls &&\n    (hardware as any).calls.submitCall &&\n    (hardware as any).calls.submitCall.data &&\n    (hardware as any).calls.submitCall.data.ecommerceProductValue &&\n    (hardware as any).calls.submitCall.data.ecommerceProductValue.attributes &&\n    (hardware as any).calls.submitCall.data.ecommerceProductValue.attributes.metric2\n        ? Number((hardware as any).calls.submitCall.data.ecommerceProductValue.attributes.metric2)\n        : 0;\n  }\n\n  public getTariffBundleName(): string {\n    const tariff = this.dataService.getTariff();\n\n    if (\n        tariff &&\n        tariff.contents &&\n        tariff.contents.name\n    ) {\n      return tariff.contents.name;\n    }\n    return '';\n  }\n\n  public getTariffContractMonths(): number {\n    const hardware: any = this.dataService.getHardware();\n    const metric17 =\n        hardware &&\n        hardware.calls &&\n        hardware.calls.submitCall &&\n        hardware.calls.submitCall.data &&\n        hardware.calls.submitCall.data.ecommerceProductValue &&\n        hardware.calls.submitCall.data.ecommerceProductValue.attributes &&\n        hardware.calls.submitCall.data.ecommerceProductValue.attributes.metric17;\n\n    if (metric17 && typeof metric17 === 'string') {\n      const parts = metric17.split('|');\n      return parts.length > 1 ? Number(parts[1]) : 0;\n    }\n    return 0;\n  }\n\n  public getHardwareRuntimePlus(): string {\n    const hardware: any = this.dataService.getHardware();\n    const metric17 =\n        hardware &&\n        hardware.calls &&\n        hardware.calls.submitCall &&\n        hardware.calls.submitCall.data &&\n        hardware.calls.submitCall.data.ecommerceProductValue &&\n        hardware.calls.submitCall.data.ecommerceProductValue.attributes &&\n        hardware.calls.submitCall.data.ecommerceProductValue.attributes.metric17;\n\n    if (!metric17) {\n      return '';\n    }\n    const parts = metric17.split('|');\n    const firstValue = Number(parts[0]);\n    return isNaN(firstValue) ? '' : `${firstValue + 1} Monate`;\n  }\n\n  public getMonthlyAfterBenefit(): number {\n    return this.getTotalPriceAmount();\n  }\n\n  public getTariffDataVolumeGb(): string {\n    const tariff = this.dataService.getTariff();\n\n    if (!tariff || !tariff.contents || !tariff.contents.dataVolumeMbNumeric) {\n      return '';\n    }\n    const mb = tariff.contents.dataVolumeMbNumeric;\n    const gb = Number(mb) / 1024;\n    return gb.toFixed(0) + ' GB';\n  }\n\n  public getGrowHintText(): string {\n    const data = this.dataService.getHardwareContents();\n    return data ? data.growHint : '';\n  }\n\n  public getBrandNetworkHintText(): string {\n    const data = this.dataService.getHardwareContents();\n    return data ? data.networkHint : '';\n  }\n\n  public getEuRoamingPackText(): string {\n    const data = this.dataService.getHardwareContents();\n    return data ? data.packList : '';\n  }\n\n\n}\n","export default \"<div class=offer-pricing data-js=top-offer-item-refined data-js-config-top-offer-item-refined={{$ctrl.getConfigForStickyModule()}}> <div class=inner> <div class=offer-price> <div class=price-duration> <p class=cond> <span data-ng-bind-html=\\\"$ctrl.getContractDescription() | coUnsafeHtml\\\"></span> <a data-ng-if=$ctrl.getInfoIconToggle() class=occl-modal-link data-ng-attr-occl-modal={{$ctrl.getOcclModalInfoId()}} aria-haspopup=dialog aria-label=info-icon role=button> <tef-icon icon=information size=1.4 type=functional context=default ratio=even size-type=numeric></tef-icon> </a> <button class=info type=button style=font-size:1rem aria-label=\\\"Mehr Informationen zum Angebot\\\" aria-haspopup=dialog data-toggle=modal data-target=#modal-footnotes> <tef-icon icon=information size=1.0 type=functional context=default ratio=even size-type=numeric aria-hidden=true> </tef-icon> </button> </p> <p class=price>{{$ctrl.getFormattedRecurringAmount()}}</p> <span class=currency> €</span> <p class=condAfter></p> </div> <div class=price-once> <p class=cond>Einmalig</p> <p class=price>{{$ctrl.getFormattedNonRecurringAmount()}}</p> <span class=currency> €</span> <p class=condAfter data-ng-bind-html=\\\"$ctrl.getActivationFeeDescription() | coUnsafeHtml\\\"></p> </div> </div> <div class=offer-link sticky-price-bar-target=sticky-price-bar-target> <button class=\\\"btn btn-alpha\\\" data-ng-click=$ctrl.submit() data-ng-class=\\\"{ 'disabled': !$ctrl.isSubmitPossible() }\\\" data-co-uitest-element=to-cart-button><span class=\\\"glyphicon glyphicon-cart\\\"></span>Zum Warenkorb</button> </div> <span class=stock data-ng-class=$ctrl.getCssClassForStockHint() data-ng-bind-html=\\\"$ctrl.getStockHintText() | coUnsafeHtml\\\"></span> </div> </div> <tef-modal cloak id={{$ctrl.getOcclModalInfoId()}} close-icon color-close-icon aria-label=info-modal data-ng-click=$event.stopPropagation()> <div slot=title>Monatliche Kosten </div> <div slot=body> Für Neukunden und besteht aus einem blau Mein Handyvertrag mit dem {{ $ctrl.getHardwareDisplayName() }} mit Ratenzahlung à {{ $ctrl.getMonthlyHwPrice() }} monatlich über {{ $ctrl.getHardwareRuntime() }} (Gesamtpreis: {{ $ctrl.getTotalPriceAmount() }}) sowie die {{ $ctrl.getTariffBundleName() }} Mobilfunkvertrag mit {{ $ctrl.getTariffContractMonths() }} Mindestlaufzeit von Monaten für monatliche Zahlungen {{ $ctrl.getTariffMonthlyRate() }} Plus {{ $ctrl.getConnectionFeeDescription() }}. Sofern nicht gekündigt, {{ $ctrl.getTariffBundleName() }} wird abgerechnet {{ $ctrl.getHardwareRuntimePlus() }}, {{ $ctrl.getMonthlyAfterBenefit() }} Pro Monat pro Abrechnungsmonat sind Folgendes enthalten: nationale Anrufe (ausgenommen Sondernummern, Rufumleitung) und SMS in alle deutschen Netze sowie {{ $ctrl.getTariffDataVolumeGb() }} Datenvolumen für mobiles Surfen in Deutschland <span data-ng-bind-html=\\\"$ctrl.getBrandNetworkHintText() | coUnsafeHtml\\\"></span> <span data-ng-bind-html=\\\"$ctrl.getGrowHintText() | coUnsafeHtml\\\"></span> <span data-ng-bind-html=\\\"$ctrl.getEuRoamingPackText() | coUnsafeHtml\\\"></span> </div> </tef-modal> \";","import { GetCall, MetaInfo, valueMetaInfo } from \"@shop/common\";\n\nexport class TariffOptionValue {\n\n    static META_INFO: MetaInfo = valueMetaInfo('blauBundle:TariffOptionValue', {\n        dataVolumeMbNumeric: 'string',\n        selected: 'boolean',\n        changeTariffOptionCall: 'GetCall'\n    });\n\n    dataVolumeMbNumeric: string;\n    selected: boolean;\n    changeTariffOptionCall: GetCall<any>;\n}\n","import coTariffSwitcherTemplateHtml from \"./coTariffSwitcherTemplate.html\";\nimport { IDataService } from \"../../../service/IDataService\";\nimport { IConfigurationChangeService } from \"../../../service/IConfigurationChangeService\";\nimport { TariffOptionValue } from \"../../../domain/tariff/TariffOptionValue\";\nimport { getFormattedDataVolumeGigabytes } from \"../../../helpers\";\n\nexport class CoTariffSwitcher implements ng.IComponentOptions {\n  controller: any = TariffSwitcherController;\n  template: string = coTariffSwitcherTemplateHtml;\n}\n\nclass TariffSwitcherController {\n  static $inject: string[] = [\"dataService\", \"configurationChangeService\"];\n\n  constructor(\n    private dataService: IDataService,\n    private configurationChangeService: IConfigurationChangeService\n  ) {}\n\n  public hasTariffOptions() {\n    return this.getTariffOptions().length > 0;\n  }\n\n  public getTariffOptions() {\n    return this.dataService.getTariffOptions();\n  }\n\n  public getFormattedDataVolumeGigabytes(dataVolumeMbNumeric: string) {\n    return getFormattedDataVolumeGigabytes(\n      dataVolumeMbNumeric,\n      this.dataService.getTariffName()\n    );\n  }\n\n  public setTariffOption(tariffIOption: TariffOptionValue): void {\n    this.configurationChangeService.setTariffOption(tariffIOption);\n  }\n}\n","export default \"<div class=\\\"switcher content-switcher pdp-switcher\\\" data-ng-if=$ctrl.hasTariffOptions()> <div class=switcher-headline>5G-Datenvolumen</div> <div class=\\\"switcher-box switcher-box-stretch\\\" role=radiogroup aria-label=\\\"Auswahl 5G-Datenvolumen\\\"> <div class=switcher-item data-ng-repeat=\\\"tariffOption in $ctrl.getTariffOptions() track by $index\\\" role=radio aria-checked=tariffOption.selected> <input id=tariff-option-{{$index}} type=radio value=tariff-option-{{$index}} data-ng-checked=tariffOption.selected data-ng-click=$ctrl.setTariffOption(tariffOption) /> <label for=tariff-option-{{$index}}><span>{{$ctrl.getFormattedDataVolumeGigabytes(tariffOption.dataVolumeMbNumeric)}}</span></label> </div> </div> </div> \";","import {ConstantCall, IEventService, IPageValueProvider, ITrackingService, TrackingInfoValue} from \"@shop/common\";\nimport {BlauBundlePageValue} from \"../domain/BlauBundlePageValue\";\nimport {Events} from \"./EventListenerRegistry\";\nimport {EcommerceProductValue} from \"../domain/EcommerceProductValue\";\nimport {LoginStatusTrackingValue} from \"../domain/LoginStatusTrackingValue\";\n\nexport class BlauTrackingBundleService {\n\n    static $inject: string[] = ['trackingService', 'pageValueProvider', \"eventService\"]\n\n    private readonly isUnifiedTrackingEnabled: boolean;\n    private readonly loginStatusTrackingValue: LoginStatusTrackingValue;\n\n    constructor(private readonly trackingService: ITrackingService,\n                private readonly pageValueProvider: IPageValueProvider<BlauBundlePageValue>,\n                private readonly eventService: IEventService) {\n        this.isUnifiedTrackingEnabled = this.pageValueProvider.getPageValue().unifiedTrackingEnabled;\n        this.loginStatusTrackingValue = this.pageValueProvider.getPageValue().loginStatusTrackingValue;\n    }\n\n    $onInit() {\n        this.eventService.subscribe(Events.BLAU_BUNDLE_PDP_INITIALIZED, () => {\n            const ecommerceProductValue = this.pageValueProvider.getPageValue().configuration.ecommerceProductValue;\n            this.trackInit(ecommerceProductValue);\n        })\n        this.eventService.subscribe(Events.BLAU_BUNDLE_PDP_PRODUCT_UPDATED, ecommerceProductValue => {\n            if (this.isUnifiedTrackingEnabled) {\n                this.trackUpdate(ecommerceProductValue);\n            }\n        })\n        this.eventService.subscribe(Events.BLAU_BUNDLE_PDP_PRODUCT_ADD_TO_CART, ecommerceProductValue => {\n            if (this.isUnifiedTrackingEnabled) {\n                this.trackAddToCart(ecommerceProductValue);\n            }\n        })\n    }\n\n    public trackInit(ecommerceProductValue: EcommerceProductValue) {\n        const data = this.isUnifiedTrackingEnabled ?\n            {\n                event:'init',\n                eshop_login_status: {\n                    ...this.loginStatusTrackingValue\n                },\n                page:{\n                    content: undefined,\n                    category: 'postpaid-pdp',\n                    productCategory : 'postpaid_bundle',\n                    application:'e-shop',\n                    template:'whitelabel-pdp-dev'\n                },\n                ecommerce: {\n                    detail: {\n                        products: [\n                            {\n                                name: ecommerceProductValue.name,\n                                quantity: ecommerceProductValue.quantity,\n                                ...ecommerceProductValue.attributes,\n                            },\n                        ],\n                    },\n                }\n            }\n            :\n            {\n                pageCategory : \"blau-bundle\",\n                page : {}\n            };\n\n        this.track(data)\n    }\n\n\n    public trackUpdate(ecommerceProductValue: EcommerceProductValue) {\n        if (ecommerceProductValue !== undefined) {\n            const data = {\n                event: 'productUpdate',\n                eCat: 'EEC',\n                eAct: 'productUpdate - detail',\n                eLab: ecommerceProductValue.name,\n                eVal: 0,\n                nonInteraction: false,\n                ecommerce: {\n                    detail: {\n                        products: [\n                            {\n                                name: ecommerceProductValue.name,\n                                quantity: ecommerceProductValue.quantity,\n                                ...ecommerceProductValue.attributes,\n                            },\n                        ],\n                    },\n                },\n            };\n\n            this.track(data)\n        }\n    }\n\n    public trackAddToCart(ecommerceProductValue: EcommerceProductValue) {\n        if (ecommerceProductValue !== undefined) {\n            const data = {\n                event: 'addToCart',\n                eCat: 'EEC - Basket',\n                eAct: 'click - addToCart',\n                eLab: ecommerceProductValue.name,\n                eVal: 0,\n                nonInteraction: false,\n                ecommerce: {\n                    currencyCode: 'EUR',\n                    add: {\n                        products: [\n                            {\n                                name: ecommerceProductValue.name,\n                                quantity: ecommerceProductValue.quantity,\n                                ...ecommerceProductValue.attributes,\n                            },\n                        ],\n                    },\n                },\n            };\n\n            this.track(data)\n        }\n    }\n\n    private track(data: any) {\n        this.trackingService.track(new ConstantCall<TrackingInfoValue>({rawContent: JSON.stringify(data)}))\n    }\n\n}","module.exports = __WEBPACK_EXTERNAL_MODULE__87__;","import {valueMetaInfo} from \"@shop/common\";\n\nexport class EcommerceProductValue {\n\n    static META_INFO = valueMetaInfo('blauBundle:EcommerceProductValue', {\n        attributes: 'any',\n        name: 'string',\n        quantity: 'number',\n    });\n\n    attributes: any;\n    name: string;\n    quantity: number;\n}","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\n\nexport class LoginStatusTrackingValue {\n\n    static META_INFO: MetaInfo = valueMetaInfo('blauBundle:LoginStatusTrackingValue', {\n        cust_cookie_value: 'string',\n        logged_in: 'boolean',\n        user_type: 'string',\n    });\n\n    cust_cookie_value: string;\n    logged_in: boolean;\n    user_type: string;\n}","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nimport {RatePlanOptionCall} from \"./RatePlanOptionCall\";\nexport class RatePlanOption {\n    static META_INFO:MetaInfo = valueMetaInfo('blauBundle:RatePlanOption', {\n        displayText: 'string',\n        duration: 'number',\n        selected: 'boolean',\n        selectCall: 'RatePlanOptionCall',\n        rateplanOption: 'boolean'\n    });\n\n    displayText: string;\n    duration: number;\n    selected: boolean;\n    selectCall: RatePlanOptionCall;\n    rateplanOption: boolean;\n}\n","import {MetaInfo, valueMetaInfo, GetCall} from \"@shop/common\";\nexport class RatePlanOptionCall {\n\n    static META_INFO:MetaInfo = valueMetaInfo('blauBundle:RatePlanOptionCall', {\n        changeRatePlanOptionCall: 'GetCall'\n    });\n\n    changeRatePlanOptionCall:GetCall<any>;\n}\n","import coRatePlanSwitcherTemplate from \"./coRatePlanSwitcherTemplate.html\";\nimport { IDataService } from \"../../../service/IDataService\";\nimport { IConfigurationChangeService } from \"../../../service/IConfigurationChangeService\";\nimport {RatePlanOption} from \"../../../domain/hardware/RatePlanOption\";\n\nexport class CoRatePlanSwitcher implements ng.IComponentOptions {\n    controller: any = RatePlanSwitcherController;\n    template: string = coRatePlanSwitcherTemplate;\n}\n\nclass RatePlanSwitcherController {\n    static $inject: string[] = [\"dataService\", \"configurationChangeService\"];\n\n    constructor(\n        private dataService: IDataService,\n        private configurationChangeService: IConfigurationChangeService,\n    ) {}\n\n    public hasRatePlanOption(): boolean {\n        return this.getRatePlanData().length > 1;\n    }\n\n    public getRatePlanData() {\n        return this.dataService.getRatePlan();\n    }\n\n    public getRatePlanInfoText() {\n        return this.dataService.getRatePlanInfoText();\n    }\n\n    public getSelectedDisplayValue(): string {\n        return this.getRatePlanData().find(select => select.selected).displayText;\n    }\n\n    public setRatePlan(ratePlanOption: RatePlanOption) {\n        this.configurationChangeService.setRatePlan(ratePlanOption);\n    }\n}","export default \"<div class=\\\"switcher content-switcher\\\"> <div class=switcher-headline>Ratenzahlung: <span>{{$ctrl.getSelectedDisplayValue()}} </span> <span data-ng-bind-html=\\\"$ctrl.getRatePlanInfoText() | coUnsafeHtml\\\"></span> </div> <div class=switcher-box data-ng-if=$ctrl.hasRatePlanOption() aria-label=\\\"Auswahl Ratenzahlung\\\" role=radiogroup> <div class=switcher-item data-ng-repeat=\\\"ratePlan in $ctrl.getRatePlanData() track by ratePlan.displayText\\\" role=radio aria-checked=ratePlan.selected> <input id=\\\"{{'ratePlan-' + ratePlan.displayText}}\\\" type=radio value={{ratePlan.displayText}} data-ng-checked=ratePlan.selected data-ng-click=$ctrl.setRatePlan(ratePlan) /> <label for=\\\"{{'ratePlan-' + ratePlan.displayText}}\\\"><span data-ng-bind-html=\\\"ratePlan.displayText | coUnsafeHtml\\\"></span></label> </div> </div> </div>\";","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nexport class EnergyEfficiency {\n\n    static META_INFO:MetaInfo = valueMetaInfo('EnergyEfficiency', {\n        productDataSheet: 'string',\n        energyEfficiencyLabel: 'string',\n    });\n\n    productDataSheet:string;\n    energyEfficiencyLabel:string;\n}\n\n"],"sourceRoot":""}