{"version":3,"sources":["webpack://blautariff/webpack/universalModuleDefinition","webpack://blautariff/webpack/bootstrap","webpack://blautariff/external {\"commonjs\":\"@shop/common\",\"commonjs2\":\"@shop/common\",\"amd\":\"@shop/common\",\"root\":\"common\"}","webpack://blautariff/./src/web/ts/tracking/EventListenerRegistry.ts","webpack://blautariff/./src/web/ts/domain/DurationType.ts","webpack://blautariff/./src/web/ts/helpers.ts","webpack://blautariff/./src/web/ts/main.ts","webpack://blautariff/./src/web/ts/components/offerDetails/coOfferDetails/coOfferDetails.ts","webpack://blautariff/./src/web/ts/components/offerDetails/coOfferDetails/OfferDetailsController.ts","webpack://blautariff/./src/web/ts/components/offerDetails/coOfferDetails/coOfferDetailsTemplate.html","webpack://blautariff/./src/web/ts/components/tariffDetails/coTariffDetails/coTariffDetails.ts","webpack://blautariff/./src/web/ts/components/tariffDetails/coTariffDetails/TariffDetailsController.ts","webpack://blautariff/./src/web/ts/components/tariffDetails/coTariffDetails/coTariffDetailsTemplate.html","webpack://blautariff/./src/web/ts/components/tariffDetails/coTariffDetailsButtons/coTariffDetailsButtons.ts","webpack://blautariff/./src/web/ts/components/tariffDetails/coTariffDetailsButtons/TariffDetailsButtonsController.ts","webpack://blautariff/./src/web/ts/components/tariffDetails/coTariffDetailsButtons/coTariffDetailsButtonsTemplate.html","webpack://blautariff/./src/web/ts/components/offerDetails/coOfferPrices/CoOfferPrices.ts","webpack://blautariff/./src/web/ts/components/offerDetails/coOfferPrices/coOfferPricesTemplate.html","webpack://blautariff/./src/web/ts/components/offerDetails/coOfferPrices/OfferPricesController.ts","webpack://blautariff/./src/web/ts/components/shared/coPriceDisplay/CoPriceDisplay.ts","webpack://blautariff/./src/web/ts/components/shared/coPriceDisplay/coPriceDisplayTemplate.html","webpack://blautariff/./src/web/ts/components/shared/coPriceDisplay/PriceDisplayController.ts","webpack://blautariff/./src/web/ts/components/offerDetails/coOfferButtons/CoOfferButtons.ts","webpack://blautariff/./src/web/ts/components/offerDetails/coOfferButtons/OfferButtonsController.ts","webpack://blautariff/./src/web/ts/components/offerDetails/coOfferButtons/coOfferButtonsTemplate.html","webpack://blautariff/./src/web/ts/components/tariffDetails/coTariffPacks/coTariffPacks.ts","webpack://blautariff/./src/web/ts/components/tariffDetails/coTariffPacks/coTariffPacksTemplate.html","webpack://blautariff/./src/web/ts/components/tariffDetails/coTariffPacks/TariffPacksController.ts","webpack://blautariff/./src/web/ts/components/hardwareSelection/coHardwareSelection/coHardwareSelection.ts","webpack://blautariff/./src/web/ts/components/hardwareSelection/coHardwareSelection/HardwareSelectionController.ts","webpack://blautariff/./src/web/ts/components/hardwareSelection/coHardwareSelection/coHardwareSelectionTemplate.html","webpack://blautariff/./src/web/ts/components/hardwareSelection/coHardwareSelectionSlider/coHardwareSelectionSlider.ts","webpack://blautariff/./src/web/ts/service/DataService.ts","webpack://blautariff/./src/web/ts/service/UIStateService.ts","webpack://blautariff/./src/web/ts/service/ConfigurationChangeService.ts","webpack://blautariff/./src/web/ts/components/hardwareSelection/HardwareSelectionComponentService.ts","webpack://blautariff/./src/web/ts/components/offerDetails/OfferDetailsComponentService.ts","webpack://blautariff/./src/web/ts/components/tariffDetails/TariffDetailsComponentService.ts","webpack://blautariff/./src/web/ts/domain/ConfigurationCalls.ts","webpack://blautariff/./src/web/ts/domain/CurrentConfigurationValue.ts","webpack://blautariff/./src/web/ts/domain/ConfigurationValue.ts","webpack://blautariff/./src/web/ts/domain/BlauTariffPageValue.ts","webpack://blautariff/./src/web/ts/domain/PriceValue.ts","webpack://blautariff/./src/web/ts/domain/PriceContentsValue.ts","webpack://blautariff/./src/web/ts/domain/tariff/PackCalls.ts","webpack://blautariff/./src/web/ts/domain/tariff/PackContentsValue.ts","webpack://blautariff/./src/web/ts/domain/tariff/PackGroupContentsValue.ts","webpack://blautariff/./src/web/ts/domain/tariff/PackGroupValue.ts","webpack://blautariff/./src/web/ts/domain/tariff/PackValue.ts","webpack://blautariff/./src/web/ts/domain/tariff/TariffContentsValue.ts","webpack://blautariff/./src/web/ts/domain/tariff/TariffValue.ts","webpack://blautariff/./src/web/ts/components/shared/SharedComponentService.ts","webpack://blautariff/./src/web/ts/domain/TargetGroupSwitcherValue.ts","webpack://blautariff/./src/web/ts/components/targetGroupSwitcher/coTargetGroupSwitcher/coTargetGroupSwitcher.ts","webpack://blautariff/./src/web/ts/components/targetGroupSwitcher/coTargetGroupSwitcher/coTargetGroupSwitcher.html","webpack://blautariff/./src/web/ts/components/targetGroupSwitcher/coTargetGroupSwitcher/TargetGroupSwitcherController.ts","webpack://blautariff/./src/web/ts/components/targetGroupSwitcher/TargetGroupSwitcherComponentService.ts","webpack://blautariff/./src/web/ts/domain/tariff/TariffOptionValue.ts","webpack://blautariff/./src/web/ts/components/tariffSwitcher/coTariffSwitcher.ts","webpack://blautariff/./src/web/ts/components/tariffSwitcher/coTariffSwitcherTemplate.html","webpack://blautariff/./src/web/ts/tracking/BlauTrackingTariffService.ts","webpack://blautariff/external \"angular\"","webpack://blautariff/./src/web/ts/domain/InitTrackingContent.ts","webpack://blautariff/./src/web/ts/domain/EcommerceProductValue.ts","webpack://blautariff/./src/web/ts/domain/LoginStatusTrackingValue.ts"],"names":["webpackUniversalModuleDefinition","root","factory","exports","module","require","define","amd","window","__WEBPACK_EXTERNAL_MODULE__0__","__WEBPACK_EXTERNAL_MODULE__60__","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","DurationType","this","argsContract","arguments","_values","forName","obj","values","_","META_INFO","enumMetaInfo","NO_MINIMUM_CONTRACT_DURATION","WITH_MINIMUM_CONTRACT_DURATION","getVisibleDataVolumes","allTariffOptions","tariffsWithDataVolume","filter","tariffOption","dataVolumeMbNumeric","tariffOptionsToDataVolumes","tariffOptions","map","length","indexOfSelectedOption","indexOf","selected","slice","getFormattedDataVolumeGigabytes","datVolumeMbNumeric","alternativeDisplayText","suffixLTE","trimmedDatVolumeMbNumeric","replace","trim","match","Math","floor","parseInt","coOfferDetails_1","coTariffDetails_1","coTariffDetailsButtons_1","CoOfferPrices_1","CoPriceDisplay_1","CoOfferButtons_1","coTariffPacks_1","coHardwareSelection_1","coHardwareSelectionSlider_1","DataService_1","UIStateService_1","ConfigurationChangeService_1","HardwareSelectionComponentService_1","OfferDetailsComponentService_1","TariffDetailsComponentService_1","ConfigurationCalls_1","CurrentConfigurationValue_1","ConfigurationValue_1","BlauTariffPageValue_1","DurationType_1","PriceValue_1","PriceContentsValue_1","PackCalls_1","PackContentsValue_1","PackGroupContentsValue_1","PackGroupValue_1","PackValue_1","TariffContentsValue_1","TariffValue_1","SharedComponentService_1","TargetGroupSwitcherValue_1","coTargetGroupSwitcher_1","TargetGroupSwitcherComponentService_1","TariffOptionValue_1","coTariffSwitcher_1","BlauTrackingTariffService_1","EventListenerRegistry_1","angular","InitTrackingContent_1","EcommerceProductValue_1","LoginStatusTrackingValue_1","component","CoOfferDetails","CoTariffDetails","CoTariffDetailsButtons","CoOfferPrices","CoPriceDisplay","CoOfferButtons","CoTariffPacks","CoHardwareSelection","CoTariffSwitcher","CoTargetGroupSwitcher","directive","coHardwareSelectionSlider","classToFactory","DataService","UIStateService","ConfigurationChangeService","HardwareSelectionComponentService","OfferDetailsComponentService","TariffDetailsComponentService","TargetGroupSwitcherComponentService","SharedComponentService","service","BlauTrackingTariffService","run","noop","eventService","emit","BLAU_TARIFF_PDP_INITIALIZED","config","mappingServiceProvider","addAnnotatedType","BlauTariffPageValue","ConfigurationCalls","CurrentConfigurationValue","ConfigurationValue","PriceValue","PriceContentsValue","PackCalls","PackContentsValue","PackGroupContentsValue","PackGroupValue","PackValue","TariffContentsValue","TariffValue","TariffOptionValue","TargetGroupSwitcherValue","InitTrackingContent","EcommerceProductValue","LoginStatusTrackingValue","snapshotService","snapshot","OfferDetailsController_1","coOfferDetailsTemplate_html_1","controller","OfferDetailsController","template","default","offerDetailsComponentService","getTariffContents","getTariffUpsellAdspaceUrl","getFootnotes","getFormattedDataVolume","getShowHardwareSelection","switchDurationType","showDurationTypeToggle","allowDurationTypeSwitch","isNoMinimumContractDuration","getDurationType","isWithMinimumContractDuration","getTariffDuration24MonthsText","tariffDuration24MonthsText","getCancelAnyTimeText","cancelAnyTimeText","__webpack_exports__","TariffDetailsController_1","coTariffDetailsTemplate_html_1","TariffDetailsController","tariffDetailsComponentService","getTariffName","getTariffOverviewItems","getTariffConditions","getTariffNumberPorting","isTariffNumberPortingEmpty","isEmpty","isTariffConditionEmpty","isTariffOverviewItemsEmpty","getPackGroups","getPackGroupName","packGroup","contents","isAccordionEntryOpen","entryId","isTariffAccordionEntryOpen","toggleAccordionEntry","$event","preventDefault","toggleTariffAccordionEntry","TariffDetailsButtonsController_1","coTariffDetailsButtonsTemplate_html_1","TariffDetailsButtonsController","getTariffQuestionsContent","coOfferPricesTemplate_html_1","OfferPricesController_1","OfferPricesController","getPrice","getDisturber","disturber","coPriceDisplayTemplate_html_1","PriceDisplayController_1","bindings","price","PriceDisplayController","dataService","getFormattedRecurringAmount","getFormattedPrice","recurringAmount","getFormattedNonRecurringAmount","nonRecurringAmount","getContractDescription","getPriceContents","contractDurationDescription","getActivationFeeDescription","activationFeeDescription","OfferButtonsController_1","coOfferButtonsTemplate_html_1","OfferButtonsController","toggleHardwareSelection","submit","isSubmitPossible","isHardwareAdditionAllowed","coTariffPacksTemplate_html_1","TariffPacksController_1","packGroupIndex","TariffPacksController","sharedComponentService","onAnchorKeydown","event","target","click","getPacks","packs","selectPack","pack","getPackName","getPackDescription","description","getPackDetails","details","getPackPriceInteger","getPriceInteger","getPackPriceDecimal","getPriceDecimal","HardwareSelectionController_1","coHardwareSelectionTemplate_html_1","HardwareSelectionController","hardwareSelectionComponentService","getSelectHardwareAdspaceUrl","uiStateService","link","scope","element","$offerPrice","$","positionArrow","find","css","left","offset","width","on","addClass","collapse","toggle","$watch","newVal","oldVal","helpers_1","pageValueProvider","callService","visibleDataVolumes","submitCall","getConfiguration","calls","BLAU_TARIFF_PDP_PRODUCT_ADD_TO_CART","data","tariffOfferName","handleCall","getTariff","tariff","overview","conditions","numberPorting","tariffQuestionsContent","getTariffOptions","resetVisibleDataVolumes","packGroups","footnotes","durationType","setDurationType","selectHardwareAdspaceUrl","tariffUpsellAdspaceUrl","getConfigurationCalls","getTeaserContent","getPageValue","teaserContent","setConfiguration","configuration","durationTypeSwitched","toString","round","substr","withoutTrailingZeros","integer","allowHardwareAddition","getTargetGroupSwitcherValue","targetGroupSwitcherValue","uiState","UIState","getUIState","showHardwareSelection","getSubmitInProgress","submitInProgress","setSubmitInProgress","getTileState","openTariffAccordionEntryId","tileState","TileState","busyService","trackingService","setNewConfiguration","changeDurationTypeCall","setTariffOption","newActiveTariffOption","changeTariffOptionCall","BLAU_TARIFF_PDP_PRODUCT_UPDATED","tariffName","newActivePack","changePackCall","switchTargetGroupSwitcherValue","_this","busy","then","newConfiguration","track","trackingCall","configurationChangeService","promise","catch","clickedPack","valueMetaInfo","shopContext","selectedTariffPackNames","unifiedTrackingEnabled","initTrackingContent","ecommerceProductValues","loginStatusTrackingValue","id","slogan","additionalDetails","imageUrl","bannerMarkup","targetGroup","coTargetGroupSwitcher_html_1","TargetGroupSwitcherController_1","TargetGroupSwitcherController","targetGroupSwitcherService","$timeout","visibilityDelayed","triggerDelayedVisibility","setVisibleAfterDelay","visibilityDelayFn","switchTargetGroup","visible","targetGroupName","coTariffSwitcherTemplate_html_1","TariffSwitcherController","onRadioKeydown","index","radios","document","querySelectorAll","maxIndex","newIndex","forEach","setAttribute","focus","hasTariffOptions","hasDataVolumeIncluded","tariffIOption","isUnifiedTrackingEnabled","$onInit","subscribe","trackInit","updatedTariff","trackUpdate","selectedTariff","trackAddToCart","initialTariff","ecommerceProductValue","getCurrentEcommerceProductValue","undefined","eshop_login_status","__assign","page","content","category","productCategory","application","ecommerce","detail","products","quantity","attributes","pageCategory","eCat","eAct","eLab","eVal","nonInteraction","currencyCode","add","ConstantCall","rawContent","JSON","stringify","cust_cookie_value","logged_in","user_type"],"mappings":"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","file":"blautariffBundle.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[\"blautariff\"] = factory(require(\"@shop/common\"), require(\"angular\"));\n\telse\n\t\troot[\"blautariff\"] = factory(root[\"common\"], root[\"angular\"]);\n})(window, function(__WEBPACK_EXTERNAL_MODULE__0__, __WEBPACK_EXTERNAL_MODULE__60__) {\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 = 4);\n","module.exports = __WEBPACK_EXTERNAL_MODULE__0__;","export class EventListenerRegistry {\n    static $inject: string[] = ['blauTrackingTariffService']\n}\n\nexport enum Events {\n    BLAU_TARIFF_PDP_INITIALIZED = 'blauTariff:initialized',\n    BLAU_TARIFF_PDP_PRODUCT_UPDATED = 'blauTariff:productUpdated',\n    BLAU_TARIFF_PDP_PRODUCT_ADD_TO_CART = 'blauTariff:addToCart'\n}","import {MetaInfo, enumMetaInfo} from \"@shop/common\";\n\nexport class DurationType {\n\n    static META_INFO:MetaInfo = enumMetaInfo('blauTariff:DurationType');\n\n    private static _values:{ [s:string]:DurationType; } = {};\n\n    static forName(obj):DurationType {\n        argsContract(arguments, 'str');\n        if (obj === null) {\n            return null;\n        }\n        return DurationType._values[obj];\n    }\n\n    static values():DurationType[] {\n        return _.values(DurationType._values);\n    }\n\n    static NO_MINIMUM_CONTRACT_DURATION:DurationType = new DurationType(\"NO_MINIMUM_CONTRACT_DURATION\");\n    static WITH_MINIMUM_CONTRACT_DURATION:DurationType = new DurationType(\"WITH_MINIMUM_CONTRACT_DURATION\");\n\n    constructor(public  name:string) {\n        argsContract(arguments, 'str');\n        DurationType._values[name] = this;\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 * 3 GB selected\n * –> 3 GB (active) | 5 GB | 7 GB\n *\n * 5 GB selected\n * –> 3 GB | 5 GB (active) | 7 GB\n *\n * 7 GB selected\n * –> 3 GB | 5 GB | 7 GB (active)\n */\nexport function getVisibleDataVolumes(\n  allTariffOptions: TariffOptionValue[]\n): string[] {\n  const tariffsWithDataVolume = allTariffOptions.filter(tariffOption => tariffOption.dataVolumeMbNumeric);\n  const tariffOptionsToDataVolumes = (tariffOptions: TariffOptionValue[]) =>\n    tariffOptions.map(tariffOption => tariffOption.dataVolumeMbNumeric);\n\n  if (tariffsWithDataVolume.length <= 3) {\n    return tariffOptionsToDataVolumes(tariffsWithDataVolume);\n  }\n\n  const indexOfSelectedOption = tariffsWithDataVolume.indexOf(\n      tariffsWithDataVolume.filter(tariffOption => tariffOption.selected)[0] // there's only one selected option at any point in time\n  );\n\n  const numberOfHigherTariffOptions =\n      tariffsWithDataVolume.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(tariffsWithDataVolume.slice(-3)); // returns up to 3 elements from the end of our array\n  } else {\n    return tariffOptionsToDataVolumes(\n        tariffsWithDataVolume.slice(indexOfSelectedOption, indexOfSelectedOption + 3)\n    );\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 */\nexport function getFormattedDataVolumeGigabytes(\n    datVolumeMbNumeric: string,\n    alternativeDisplayText: string,\n    suffixLTE: string = ' LTE'\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  return `${Math.floor(parseInt(trimmedDatVolumeMbNumeric) / 1024)} GB${suffixLTE}`;\n}\n","/// <reference types=\"@shop/args-contract-types\" />\n\nimport {CoOfferDetails} from './components/offerDetails/coOfferDetails/coOfferDetails';\nimport {CoTariffDetails} from './components/tariffDetails/coTariffDetails/coTariffDetails';\nimport {CoTariffDetailsButtons} from './components/tariffDetails/coTariffDetailsButtons/coTariffDetailsButtons';\nimport {CoOfferPrices} from './components/offerDetails/coOfferPrices/CoOfferPrices';\nimport {CoPriceDisplay} from './components/shared/coPriceDisplay/CoPriceDisplay';\nimport {CoOfferButtons} from './components/offerDetails/coOfferButtons/CoOfferButtons';\nimport {CoTariffPacks} from './components/tariffDetails/coTariffPacks/coTariffPacks';\nimport {CoHardwareSelection} from './components/hardwareSelection/coHardwareSelection/coHardwareSelection';\nimport {coHardwareSelectionSlider} from './components/hardwareSelection/coHardwareSelectionSlider/coHardwareSelectionSlider';\nimport {DataService} from './service/DataService';\nimport {UIStateService} from './service/UIStateService';\nimport {ConfigurationChangeService} from './service/ConfigurationChangeService';\nimport {HardwareSelectionComponentService} from './components/hardwareSelection/HardwareSelectionComponentService';\nimport {classToFactory, EventService, IMappingServiceProvider, ISnapshotService} from '@shop/common';\nimport {OfferDetailsComponentService} from './components/offerDetails/OfferDetailsComponentService';\nimport {TariffDetailsComponentService} from './components/tariffDetails/TariffDetailsComponentService';\nimport {ConfigurationCalls} from './domain/ConfigurationCalls';\nimport {CurrentConfigurationValue} from './domain/CurrentConfigurationValue';\nimport {ConfigurationValue} from './domain/ConfigurationValue';\nimport {BlauTariffPageValue} from './domain/BlauTariffPageValue';\nimport {DurationType} from './domain/DurationType';\nimport {PriceValue} from './domain/PriceValue';\nimport {PriceContentsValue} from './domain/PriceContentsValue';\nimport {PackCalls} from './domain/tariff/PackCalls';\nimport {PackContentsValue} from './domain/tariff/PackContentsValue';\nimport {PackGroupContentsValue} from './domain/tariff/PackGroupContentsValue';\nimport {PackGroupValue} from './domain/tariff/PackGroupValue';\nimport {PackValue} from './domain/tariff/PackValue';\nimport {TariffContentsValue} from './domain/tariff/TariffContentsValue';\nimport {TariffValue} from './domain/tariff/TariffValue';\nimport {SharedComponentService} from \"./components/shared/SharedComponentService\";\nimport {TargetGroupSwitcherValue} from \"./domain/TargetGroupSwitcherValue\";\nimport {CoTargetGroupSwitcher} from \"./components/targetGroupSwitcher/coTargetGroupSwitcher/coTargetGroupSwitcher\";\nimport {TargetGroupSwitcherComponentService} from \"./components/targetGroupSwitcher/TargetGroupSwitcherComponentService\";\nimport {TariffOptionValue} from \"./domain/tariff/TariffOptionValue\";\nimport {CoTariffSwitcher} from \"./components/tariffSwitcher/coTariffSwitcher\";\nimport {BlauTrackingTariffService} from \"./tracking/BlauTrackingTariffService\";\nimport {EventListenerRegistry, Events} from \"./tracking/EventListenerRegistry\";\nimport angular = require('angular');\nimport {InitTrackingContent} from \"./domain/InitTrackingContent\";\nimport {EcommerceProductValue} from \"./domain/EcommerceProductValue\";\nimport {LoginStatusTrackingValue} from \"./domain/LoginStatusTrackingValue\";\n\nangular.module('commerce_blau_tariff', ['commerce_common'])\n\n    .component('coOfferDetails', new CoOfferDetails())\n    .component('coTariffDetails', new CoTariffDetails())\n    .component('coTariffDetailsButtons', new CoTariffDetailsButtons())\n    .component('coOfferPrices', new CoOfferPrices())\n    .component('coPriceDisplay', new CoPriceDisplay())\n    .component('coOfferButtons', new CoOfferButtons())\n    .component('coTariffPacks', new CoTariffPacks())\n    .component('coHardwareSelection', new CoHardwareSelection())\n    .component(\"coTariffSwitcher\", new CoTariffSwitcher())\n    .component('coTargetGroupSwitcher', new CoTargetGroupSwitcher())\n\n    .directive('coHardwareSelectionSlider', coHardwareSelectionSlider)\n\n    .factory('dataService', classToFactory(DataService))\n    .factory('uiStateService', classToFactory(UIStateService))\n    .factory('configurationChangeService', classToFactory(ConfigurationChangeService))\n    .factory('hardwareSelectionComponentService', classToFactory(HardwareSelectionComponentService))\n    .factory('offerDetailsComponentService', classToFactory(OfferDetailsComponentService))\n    .factory('tariffDetailsComponentService', classToFactory(TariffDetailsComponentService))\n    .factory('targetGroupSwitcherComponentService', classToFactory(TargetGroupSwitcherComponentService))\n    .factory('sharedComponentService', classToFactory(SharedComponentService))\n\n\n    .factory('eventListenerRegistry', classToFactory(EventListenerRegistry))\n    .service('blauTrackingTariffService', classToFactory(BlauTrackingTariffService))\n\n    .run(['eventListenerRegistry', angular.noop])\n    .run(['eventService', (eventService: EventService) => {\n            eventService.emit(Events.BLAU_TARIFF_PDP_INITIALIZED);\n    }])\n\n    .config(['mappingServiceProvider', function (mappingServiceProvider:IMappingServiceProvider) {\n        mappingServiceProvider.addAnnotatedType(BlauTariffPageValue);\n        mappingServiceProvider.addAnnotatedType(ConfigurationCalls);\n        mappingServiceProvider.addAnnotatedType(CurrentConfigurationValue);\n        mappingServiceProvider.addAnnotatedType(ConfigurationValue);\n        mappingServiceProvider.addAnnotatedType(DurationType);\n        mappingServiceProvider.addAnnotatedType(PriceValue);\n        mappingServiceProvider.addAnnotatedType(PriceContentsValue);\n        // tariff\n        mappingServiceProvider.addAnnotatedType(PackCalls);\n        mappingServiceProvider.addAnnotatedType(PackContentsValue);\n        mappingServiceProvider.addAnnotatedType(PackGroupContentsValue);\n        mappingServiceProvider.addAnnotatedType(PackGroupValue);\n        mappingServiceProvider.addAnnotatedType(PackValue);\n        mappingServiceProvider.addAnnotatedType(TariffContentsValue);\n        mappingServiceProvider.addAnnotatedType(TariffValue);\n        mappingServiceProvider.addAnnotatedType(TariffOptionValue);\n        mappingServiceProvider.addAnnotatedType(TargetGroupSwitcherValue);\n        mappingServiceProvider.addAnnotatedType(InitTrackingContent);\n\n        mappingServiceProvider.addAnnotatedType(EcommerceProductValue);\n        mappingServiceProvider.addAnnotatedType(LoginStatusTrackingValue);\n    }])\n    .run(['snapshotService', function(snapshotService:ISnapshotService){\n            snapshotService.snapshot();\n    }]);\n","import {OfferDetailsController} from \"./OfferDetailsController\";\nimport coOfferDetailsTemplateHtml from \"./coOfferDetailsTemplate.html\";\nexport class CoOfferDetails implements ng.IComponentOptions {\n    controller:any = OfferDetailsController;\n    template:string = coOfferDetailsTemplateHtml;\n}\n","import {IOfferDetailsComponentService} from \"../IOfferDetailsComponentService\";\nimport {TariffContentsValue} from \"../../../domain/tariff/TariffContentsValue\";\nimport {DurationType} from \"../../../domain/DurationType\";\n\nexport class OfferDetailsController {\n    static $inject:string[] = ['offerDetailsComponentService'];\n\n    constructor(private offerDetailsComponentService:IOfferDetailsComponentService) {}\n\n    public getTariffContents():TariffContentsValue {\n        return this.offerDetailsComponentService.getTariffContents();\n    }\n\n    public getTariffUpsellAdspaceUrl():string {\n        return this.offerDetailsComponentService.getTariffUpsellAdspaceUrl();\n    }\n\n    public getFootnotes(): string {\n        return this.offerDetailsComponentService.getFootnotes();\n    }\n\n    public getFormattedDataVolume() {\n        return this.offerDetailsComponentService.getFormattedDataVolume(\n            this.getTariffContents().dataVolumeMbNumeric\n        );\n    }\n\n    public getShowHardwareSelection(): boolean {\n        return this.offerDetailsComponentService.getShowHardwareSelection();\n    }\n\n    public switchDurationType(): void {\n        this.offerDetailsComponentService.switchDurationType();\n    }\n\n    public showDurationTypeToggle(): boolean {\n        return this.offerDetailsComponentService.allowDurationTypeSwitch();\n    }\n\n    public isNoMinimumContractDuration(): boolean {\n        return this.offerDetailsComponentService.getDurationType() === DurationType.NO_MINIMUM_CONTRACT_DURATION;\n    }\n\n    public isWithMinimumContractDuration(): boolean {\n        return this.offerDetailsComponentService.getDurationType() === DurationType.WITH_MINIMUM_CONTRACT_DURATION;\n    }\n\n    public getTariffDuration24MonthsText(): string {\n        return this.offerDetailsComponentService.getTariffContents().tariffDuration24MonthsText;\n    }\n\n    public getCancelAnyTimeText(): string {\n        return this.offerDetailsComponentService.getTariffContents().cancelAnyTimeText;\n    }\n\n}\n","export default \"<div> <section class=\\\"stage stage-alternative stage-light\\\"> <div class=inner> <div class=\\\"offer-refined offer-refined-sim-only\\\"> <div class=offer-description> <div class=offer-headline> <p class=offer-overline>{{ $ctrl.getTariffContents().slogan | coUnsafeHtml }}</p> <h1 class=offer-name-heading> <span class=offer-name>{{ $ctrl.getTariffContents().name }}</span> <span class=offer-conjunction ng-if=$ctrl.getFormattedDataVolume()> mit </span> <span class=offer-tariff data-ng-bind-html=\\\"$ctrl.getFormattedDataVolume() | coUnsafeHtml\\\" ng-if=$ctrl.getFormattedDataVolume()></span> </h1> </div> <div class=offer-bulletpoints> <p class=offer-bulletpoint data-ng-repeat=\\\"details in $ctrl.getTariffContents().additionalDetails track by $index\\\"> <span class=\\\"glyphicon glyphicon-check\\\"></span> <span class=copy data-ng-bind-html=\\\"details | coUnsafeHtml\\\"></span> </p> </div> </div> <div class=offer-overview> <div class=figures> <figure class=offer-selection-image data-ng-bind-html=\\\"$ctrl.getTariffContents().imageUrl | coUnsafeHtml\\\"></figure> </div> <div class=offer-interaction> <div class=inner> <div class=offer-configurator> <co-tariff-switcher></co-tariff-switcher> <div data-ng-class=\\\"{\\n                                        'is-disabled': $ctrl.getShowHardwareSelection()\\n                                    }\\\" class=\\\"switcher content-switcher\\\" data-ng-if=$ctrl.showDurationTypeToggle() data-ng-click=$ctrl.switchDurationType()> <div id=switcher-headline-id class=switcher-headline>Laufzeit</div> <div role=radiogroup aria-labelledby=switcher-headline-id class=\\\"switcher-box switcher-box-stretch\\\"> <div class=switcher-item> <input id=postpaid-contract name=duration type=radio value=\\\"24 Monate\\\" ng-checked=$ctrl.isWithMinimumContractDuration()> <label for=postpaid-contract data-ng-bind-html=\\\"$ctrl.getTariffDuration24MonthsText() | coUnsafeHtml\\\"> </label> </div> <div class=switcher-item> <input id=prepaid-contract name=duration type=radio value=\\\"keine feste Laufzeit\\\" ng-checked=$ctrl.isNoMinimumContractDuration()> <label for=prepaid-contract data-ng-bind-html=\\\"$ctrl.getCancelAnyTimeText() | coUnsafeHtml\\\"> </label> </div> </div> </div> <div class=links> <ul> <li> <div data-ng-bind-html=\\\"$ctrl.getTariffContents().description | coUnsafeHtml\\\" class=device-info></div> </li> </ul> </div> </div> <div class=\\\"offer-pricing is-hidden js-enhanced-top-offer-item-refined\\\" data-js=top-offer-item-refined data-js-config-top-offer-item-refined={&quot;isSticky&quot;:true}> <div class=inner> <co-offer-prices></co-offer-prices> </div> </div> </div> </div> </div> </div> </div> </section> </div> <div class=\\\"modal fade\\\" id=modal-footnotes tabindex=-1 role=dialog data-ng-if=$ctrl.getFootnotes()> <div class=\\\"modal-dialog modal-lg\\\" 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 {TariffDetailsController} from \"./TariffDetailsController\";\nimport coTariffDetailsTemplateHtml from \"./coTariffDetailsTemplate.html\"\nexport class CoTariffDetails implements ng.IComponentOptions {\n    controller:any = TariffDetailsController;\n    template:string = coTariffDetailsTemplateHtml ;\n}\n\n","import {PackGroupValue} from \"../../../domain/tariff/PackGroupValue\";\nimport {ITariffDetailsComponentService} from \"../ITariffDetailsComponentService\";\nimport IAngularEvent = angular.IAngularEvent;\n\nexport class TariffDetailsController {\n    static $inject:string[] = ['tariffDetailsComponentService'];\n\n    constructor(private tariffDetailsComponentService:ITariffDetailsComponentService) {\n    }\n\n    public getTariffName():string {\n        return this.tariffDetailsComponentService.getTariffName();\n    }\n\n    public getTariffOverviewItems():string[] {\n        return this.tariffDetailsComponentService.getTariffOverviewItems();\n    }\n\n    public getTariffConditions():string {\n        return this.tariffDetailsComponentService.getTariffConditions();\n    }\n\n    public getTariffNumberPorting():string {\n        return this.tariffDetailsComponentService.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.tariffDetailsComponentService.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.tariffDetailsComponentService.isTariffAccordionEntryOpen(entryId);\n    }\n\n    public toggleAccordionEntry(entryId:string, $event:IAngularEvent):void {\n        $event.preventDefault();\n        this.tariffDetailsComponentService.toggleTariffAccordionEntry(entryId);\n    }\n}","export default \"<div> <section aria-label=Produktvorteile class=product-benefits> <div class=inner> <div class=items> <div class=item data-ng-repeat=\\\"overviewItem in $ctrl.getTariffOverviewItems() track by $index\\\"> <div data-ng-bind-html=\\\"overviewItem | coUnsafeHtml\\\"></div> </div> </div> </div> </section> <section class=product-details> <div class=inner> <h2 class=headline> <span data-ng-bind-html=\\\"$ctrl.getTariffName() | coUnsafeHtml\\\"></span> im Detail </h2> <div id=accordion-tariff-details class=\\\"panel-group section-accordion\\\"> <div class=panel data-ng-if=!$ctrl.isTariffConditionEmpty()> <h4> <button type=button id=accordion-button-conditions class=\\\"accordion-trigger collapsed\\\" aria-expanded=\\\"{{ $ctrl.isAccordionEntryOpen('tariff-conditions') ? 'true' : 'false' }}\\\" data-ng-class=\\\"{ 'collapsed': !$ctrl.isAccordionEntryOpen('tariff-conditions') }\\\" aria-controls=accordion-tariff-details-conditions data-target=#accordion-tariff-details-conditions data-ng-click=\\\"$ctrl.toggleAccordionEntry('tariff-conditions', $event)\\\"> Konditionen </button> </h4> <div id=accordion-tariff-details-conditions class=\\\"filter-box collapse co-slide accordion-content\\\" role=region aria-labelledby=accordion-button-conditions aria-hidden=\\\"{{ $ctrl.isAccordionEntryOpen('tariff-conditions') ? 'false' : 'true' }}\\\" data-ng-class=\\\"{ 'in': $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 type=button id=\\\"accordion-button-packgroups-{{ $index }}\\\" class=\\\"accordion-trigger collapsed\\\" aria-expanded=\\\"{{ $ctrl.isAccordionEntryOpen(packGroup.id) ? 'true' : 'false' }}\\\" aria-controls=\\\"accordion-tariff-details-packgroups-{{ $index }}\\\" data-ng-class=\\\"{ 'collapsed': !$ctrl.isAccordionEntryOpen(packGroup.id) }\\\" data-ng-click=\\\"$ctrl.toggleAccordionEntry(packGroup.id, $event)\\\"> {{ $ctrl.getPackGroupName(packGroup) }} </button> </h4> <div id=\\\"accordion-tariff-details-packgroups-{{ $index }}\\\" class=\\\"accordion-content co-slide collapse\\\" role=region aria-labelledby=\\\"accordion-button-packgroups-{{ $index }}\\\" aria-hidden=\\\"{{ $ctrl.isAccordionEntryOpen(packGroup.id) ? 'false' : 'true' }}\\\" data-ng-class=\\\"{ 'in': $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 id=accordion-button-numberporting class=\\\"accordion-trigger collapsed\\\" data-toggle=collapse aria-controls=accordion-tariff-details-numberporting data-ng-class=\\\"{ 'collapsed': !$ctrl.isAccordionEntryOpen('tariff-numberporting') }\\\" data-ng-click=\\\"$ctrl.toggleAccordionEntry('tariff-numberporting', $event)\\\"> Rufnummermitnahme </button></h4> <div id=accordion-tariff-details-numberporting class=\\\"accordion-content co-slide collapse\\\" role=region aria-labelledby=accordion-button-numberporting aria-hidden=\\\"{{ $ctrl.isAccordionEntryOpen('tariff-numberporting') ? 'false' : 'true' }}\\\" data-ng-class=\\\"{ 'in': $ctrl.isAccordionEntryOpen('tariff-numberporting') }\\\"> <div data-ng-bind-html=\\\"$ctrl.getTariffNumberPorting() | coUnsafeHtml\\\"></div> </div> </div> </div> <co-tariff-details-buttons></co-tariff-details-buttons> </div> </section> </div>\";","import {TariffDetailsButtonsController} from \"./TariffDetailsButtonsController\";\nimport coTariffDetailsButtonsTemplateHtml from \"./coTariffDetailsButtonsTemplate.html\"\nexport class CoTariffDetailsButtons implements ng.IComponentOptions {\n    controller:any = TariffDetailsButtonsController;\n    template:string = coTariffDetailsButtonsTemplateHtml ;\n}\n\n","import {ITariffDetailsComponentService} from \"../ITariffDetailsComponentService\";\nexport class TariffDetailsButtonsController {\n    static $inject:string[] = ['tariffDetailsComponentService'];\n\n    constructor(private tariffDetailsComponentService:ITariffDetailsComponentService) {\n    }\n\n    public getTariffQuestionsContent():string {\n        return this.tariffDetailsComponentService.getTariffQuestionsContent();\n    }\n}\n\n","export default \"<div class=product-related> <ul> <li> <button type=button class=\\\"btn btn-beta btn-sm\\\" aria-haspopup=dialog data-co-modal-info data-co-modal-info-content={{$ctrl.getTariffQuestionsContent()}}> <span class=\\\"glyphicon glyphicon-help\\\"></span> Fragen zum Tarif </button> </li> </ul> </div>\";","import coOfferPricesTemplateHtml from \"./coOfferPricesTemplate.html\";\nimport {OfferPricesController} from \"./OfferPricesController\";\nexport class CoOfferPrices implements ng.IComponentOptions {\n    controller:any = OfferPricesController;\n    template:string = coOfferPricesTemplateHtml ;\n}\n\n","export default \"<co-price-display co-price-display-price=$ctrl.getPrice()></co-price-display> <co-offer-buttons></co-offer-buttons> \";","import { IOfferDetailsComponentService } from \"../IOfferDetailsComponentService\";\nimport { PriceValue } from \"../../../domain/PriceValue\";\nimport { DurationType } from \"../../../domain/DurationType\";\nimport {TariffContentsValue} from \"../../../domain/tariff/TariffContentsValue\";\n\nexport class OfferPricesController {\n\n    static $inject: string[] = ['offerDetailsComponentService'];\n\n    constructor(private offerDetailsComponentService: IOfferDetailsComponentService) {}\n\n    public getPrice(): PriceValue {\n        return this.offerDetailsComponentService.getPrice();\n    }\n\n    public getDisturber(): string {\n        return this.offerDetailsComponentService.getTariffContents().disturber;\n    }\n\n    public isNoMinimumContractDuration(): boolean {\n        return this.offerDetailsComponentService.getDurationType() === DurationType.NO_MINIMUM_CONTRACT_DURATION;\n    }\n\n    public isWithMinimumContractDuration(): boolean {\n        return this.offerDetailsComponentService.getDurationType() === DurationType.WITH_MINIMUM_CONTRACT_DURATION;\n    }\n}\n","import coPriceDisplayTemplateHtml from \"./coPriceDisplayTemplate.html\"\nimport {PriceDisplayController} from \"./PriceDisplayController\";\nexport class CoPriceDisplay implements ng.IComponentOptions {\n    bindings:any = {\n        price: '<coPriceDisplayPrice',\n    };\n    controller:any = PriceDisplayController;\n    template:string = coPriceDisplayTemplateHtml ;\n}\n\n","export default \"<div class=offer-price data-ng-class=\\\"{\\n        'is-disabled': $ctrl.getShowHardwareSelection()\\n    }\\\"> <div class=price-duration> <p class=cond> {{$ctrl.getContractDescription()}} <button class=info type=button aria-label=\\\"Mehr Informationen zum Angebot\\\" aria-haspopup=dialog data-toggle=modal data-target=#modal-footnotes data-ng-if=$ctrl.getFootnotes()> <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> </div> <div class=price-once> <p class=cond>Einmalig</p> <p class=price>{{$ctrl.getFormattedNonRecurringAmount()}}</p> <span class=currency>&nbsp;€</span> <p class=condAfter>{{$ctrl.getActivationFeeDescription()}}</p> </div> </div> \";","import {PriceValue} from \"../../../domain/PriceValue\";\nimport {PriceContentsValue} from \"../../../domain/PriceContentsValue\";\nimport {IDataService} from \"../../../service/IDataService\";\nimport {IOfferDetailsComponentService} from \"../../offerDetails/IOfferDetailsComponentService\";\n\nexport class PriceDisplayController {\n    public price:PriceValue;\n\n    static $inject:string[] = ['dataService', 'offerDetailsComponentService', 'sharedComponentService'];\n\n    constructor(\n        private dataService: IDataService,\n        private offerDetailsComponentService: IOfferDetailsComponentService\n    ) {}\n\n    public getFormattedRecurringAmount() {\n        return this.dataService.getFormattedPrice(\n            this.getPrice().recurringAmount,\n            true\n        );\n    }\n\n    public getFormattedNonRecurringAmount() {\n        return this.dataService.getFormattedPrice(\n            this.getPrice().nonRecurringAmount,\n            true\n        );\n    }\n    public getContractDescription() {\n        return this.getPriceContents().contractDurationDescription;\n    }\n\n    public getActivationFeeDescription() {\n        return this.getPriceContents().activationFeeDescription;\n    }\n\n    public getPrice(): PriceValue {\n        return this.price;\n    }\n\n    public getPriceContents():PriceContentsValue {\n        return this.price.contents;\n    }\n\n    public getFootnotes(): string {\n        return this.dataService.getFootnotes();\n    }\n\n    public getShowHardwareSelection(): boolean {\n        return this.offerDetailsComponentService.getShowHardwareSelection();\n    }\n}\n","import {OfferButtonsController} from \"./OfferButtonsController\";\nimport coOfferButtonsTemplateHtml from \"./coOfferButtonsTemplate.html\";\n\nexport class CoOfferButtons implements ng.IComponentOptions {\n    controller:any = OfferButtonsController;\n    template:string = coOfferButtonsTemplateHtml;\n}\n","import {IOfferDetailsComponentService} from \"../IOfferDetailsComponentService\";\nexport class OfferButtonsController {\n\n    static $inject:string[] = ['offerDetailsComponentService'];\n\n    constructor(private offerDetailsComponentService:IOfferDetailsComponentService) {\n    }\n\n    public getShowHardwareSelection():boolean {\n        return this.offerDetailsComponentService.getShowHardwareSelection();\n    }\n\n    public toggleHardwareSelection():void {\n        this.offerDetailsComponentService.toggleHardwareSelection();\n    }\n\n    public submit():void {\n        this.offerDetailsComponentService.submit();\n    }\n\n    public isSubmitPossible():boolean {\n        return this.offerDetailsComponentService.isSubmitPossible();\n    }\n\n    public isHardwareAdditionAllowed():boolean {\n        return this.offerDetailsComponentService.isHardwareAdditionAllowed();\n    }\n}\n","export default \"<div class=offer-link sticky-price-bar-target=sticky-price-bar-target> <button data-ng-class=\\\"{ 'is-disabled': !$ctrl.isSubmitPossible() }\\\" data-ng-click=$ctrl.submit() class=\\\"btn btn-alpha cart\\\" data-co-uitest-element=to-cart-button> <span class=\\\"glyphicon glyphicon-cart\\\"></span>Zum Warenkorb </button> <button type=button data-ng-if=$ctrl.isHardwareAdditionAllowed() id=select-hardware class=\\\"btn btn-ghost hardware-selection hardware-btn-large\\\" data-ng-click=$ctrl.toggleHardwareSelection()> <span data-ng-if=!$ctrl.getShowHardwareSelection() data-co-scroll-to data-co-scroll-to-target=\\\"'co-hardware-selection'\\\" data-co-scroll-to-offset=50 data-co-scroll-to-duration=1000>Oder Handy dazuwählen</span> <span data-ng-if=$ctrl.getShowHardwareSelection()>Schließen</span> </button> </div> \";","import coTariffPacksTemplateHtml from \"./coTariffPacksTemplate.html\"\nimport {TariffPacksController} from \"./TariffPacksController\";\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 role=radiogroup aria-label=\\\"Verfügbare Packs\\\"> <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 {ITariffDetailsComponentService} from \"../ITariffDetailsComponentService\";\nimport {PackValue} from \"../../../domain/tariff/PackValue\";\nimport {ISharedComponentService} from \"../../shared/ISharedComponentService\";\nexport class TariffPacksController {\n    static $inject:string[] = ['tariffDetailsComponentService', 'sharedComponentService'];\n\n    public packGroup:PackGroupValue;\n\n    constructor(private tariffDetailsComponentService:ITariffDetailsComponentService, 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(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    //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 {HardwareSelectionController} from \"./HardwareSelectionController\";\nimport coHardwareSelectionTemplateHtml from \"./coHardwareSelectionTemplate.html\";\n\nexport class CoHardwareSelection implements ng.IComponentOptions {\n    controller:any = HardwareSelectionController;\n    template:string = coHardwareSelectionTemplateHtml;\n}\n\n","import {IHardwareSelectionComponentService} from \"../IHardwareSelectionComponentService\";\nexport class HardwareSelectionController {\n    static $inject:string[] = ['hardwareSelectionComponentService'];\n\n    constructor(private hardwareSelectionComponentService:IHardwareSelectionComponentService) {\n    }\n\n    public toggleHardwareSelection():void {\n        this.hardwareSelectionComponentService.toggleHardwareSelection();\n    }\n\n    public getSelectHardwareAdspaceUrl():string {\n        return this.hardwareSelectionComponentService.getSelectHardwareAdspaceUrl();\n    }\n\n}\n\n","export default \"<section data-co-hardware-selection-slider class=\\\"tile-slider tile-slider-arrow-bottom\\\"> <button data-ng-click=$ctrl.toggleHardwareSelection() type=button class=close> <span>×</span> </button> <span class=arrow></span>  </section>\";","// Restores Slider functionality to hardware selection because it depends on Bootstrap Compendium\nimport {IUIStateService} from \"../../../service/IUIStateService\";\n\nexport function coHardwareSelectionSlider(uiStateService: IUIStateService): ng.IDirective {\n    return {\n        link: (scope: any, element: any) => {\n            // The arrow depends on the offer-price element (the element with prices, stock hints, etc.)\n            let $offerPrice: JQuery = $('.offer-price');\n\n            function positionArrow() {\n                element.find('.arrow').css({\n                    left: $offerPrice.offset().left + ($offerPrice.width() / 2) - 15\n                });\n            }\n\n            $(window).on('resize', positionArrow);\n\n            element.addClass('collapse');\n            element.collapse({ toggle: false });\n\n            // Trigger Bootstrap animations through a watcher\n            scope.$watch(\n                () => {\n                    return uiStateService.getShowHardwareSelection();\n                },\n                (newVal: boolean, oldVal: boolean) => {\n                    if (newVal) {\n                        element.collapse('show');\n                        positionArrow();\n                    } else {\n                        element.collapse('hide');\n                    }\n                }\n            );\n        }\n    };\n}\n\ncoHardwareSelectionSlider.$inject = ['uiStateService'];\n","import {IDataService} from \"./IDataService\";\nimport {TariffValue} from \"../domain/tariff/TariffValue\";\nimport {TariffContentsValue} from \"../domain/tariff/TariffContentsValue\";\nimport {BlauTariffPageValue} from \"../domain/BlauTariffPageValue\";\nimport {PackGroupValue} from \"../domain/tariff/PackGroupValue\";\nimport {PriceValue} from \"../domain/PriceValue\";\nimport {DurationType} from \"../domain/DurationType\";\nimport {ConfigurationValue} from \"../domain/ConfigurationValue\";\nimport {IPageValueProvider, ICallService, GetCall, IEventService, PostCall} from \"@shop/common\";\nimport {ConfigurationCalls} from \"../domain/ConfigurationCalls\";\nimport {TargetGroupSwitcherValue} from \"../domain/TargetGroupSwitcherValue\";\nimport {TariffOptionValue} from \"../domain/tariff/TariffOptionValue\";\nimport {getVisibleDataVolumes} from \"../helpers\";\nimport {Events} from \"../tracking/EventListenerRegistry\";\nimport {CurrentConfigurationValue} from \"../domain/CurrentConfigurationValue\";\n\nexport class DataService implements IDataService {\n\n    static $inject:string[] = ['pageValueProvider','callService', 'eventService'];\n\n    private visibleDataVolumes: string[] = null;\n\n    constructor(\n        private pageValueProvider:IPageValueProvider<BlauTariffPageValue>,\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        this.eventService.emit(Events.BLAU_TARIFF_PDP_PRODUCT_ADD_TO_CART, submitCall.data.tariffOfferName);\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 getTariffQuestionsContent():string {\n        return this.getTariffContents().tariffQuestionsContent;\n    }\n\n    public getTariffDuration24MonthsText(): string {\n        return this.getTariffContents().tariffDuration24MonthsText;\n    }\n\n    public getTariffOptions(): TariffOptionValue[] {\n        let tariffOptions = this.getTariff().tariffOptions;\n\n        if (this.visibleDataVolumes === null) {\n            this.visibleDataVolumes = getVisibleDataVolumes(tariffOptions);\n        }\n\n        tariffOptions = this.getTariff().tariffOptions;\n\n        return tariffOptions;\n    }\n\n    public resetVisibleDataVolumes() {\n        this.visibleDataVolumes = null;\n    }\n\n    public getCancelAnyTimeText(): string {\n        return this.getTariffContents().cancelAnyTimeText;\n    }\n\n    public getPackGroups():PackGroupValue[] {\n        return this.getTariff().packGroups;\n    }\n\n    public getPrice(): PriceValue {\n        return this.getConfiguration().price;\n    }\n\n    public getFootnotes():string {\n        return this.getTariffContents().footnotes;\n    }\n\n    public getDurationType():DurationType {\n        return this.getConfiguration().durationType;\n    }\n\n    public setDurationType(durationType:DurationType):void {\n        this.getConfiguration().durationType = durationType;\n    }\n\n    public getSelectHardwareAdspaceUrl():string {\n        return this.getConfiguration().selectHardwareAdspaceUrl;\n    }\n\n    public getTariffUpsellAdspaceUrl():string {\n        return this.getConfiguration().tariffUpsellAdspaceUrl;\n    }\n\n    public getConfigurationCalls():ConfigurationCalls {\n        return this.getConfiguration().calls;\n    }\n\n    public getTeaserContent():string {\n        return this.getPageValue().teaserContent;\n    }\n\n    public setConfiguration(configuration: ConfigurationValue): void {\n        if (this.durationTypeSwitched(configuration)) {\n            this.resetVisibleDataVolumes();\n        }\n        this.pageValueProvider.getPageValue().configuration = configuration\n    }\n\n    public allowDurationTypeSwitch():boolean {\n        return this.getConfiguration().allowDurationTypeSwitch;\n    }\n\n    public durationTypeSwitched(configuration: ConfigurationValue):boolean {\n        return configuration.durationType !== this.pageValueProvider.getPageValue().configuration.durationType;\n    }\n    private getConfiguration():ConfigurationValue {\n        return this.getPageValue().configuration;\n    }\n\n    private getPageValue():BlauTariffPageValue {\n        return this.pageValueProvider.getPageValue();\n    }\n\n    public getPriceInteger(price: number): string {\n        return Math.floor(price).toString();\n    }\n\n    //TODO PTI-543 replace this logic with Money type logic\n    public getPriceDecimal(price: number): string {\n        return (price === 0) ? \"00\" : Math.round(price * 100).toString().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 isHardwareAdditionAllowed(): boolean{\n        return this.getConfiguration().allowHardwareAddition;\n    }\n\n    public getTargetGroupSwitcherValue(): TargetGroupSwitcherValue {\n        return this.getPageValue().configuration.targetGroupSwitcherValue;\n    }\n}\n\n","import {IUIStateService} from \"./IUIStateService\";\nexport class UIStateService implements IUIStateService{\n    private uiState:UIState;\n\n    constructor() {\n        this.uiState = new UIState();\n    }\n\n    public getShowHardwareSelection():boolean {\n        return this.getUIState().showHardwareSelection;\n    }\n\n    public toggleHardwareSelection():void {\n        this.getUIState().showHardwareSelection = !this.getUIState().showHardwareSelection;\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    public isTariffAccordionEntryOpen(entryId:string):boolean {\n        argsContract(arguments, 'string');\n        return this.getTileState().openTariffAccordionEntryId === 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    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\nclass UIState {\n    showHardwareSelection:boolean = false;\n    tileState:TileState = null;\n    submitInProgress:boolean = false;\n}\n\nclass TileState {\n    openTariffAccordionEntryId:string;\n\n    constructor() {\n        // the entry which should be opened by default\n        this.openTariffAccordionEntryId = '';\n    }\n}","import {IDataService} from \"./IDataService\";\nimport {PackValue} from \"../domain/tariff/PackValue\";\nimport {IConfigurationChangeService} from \"./IConfigurationChangeService\";\nimport {ConfigurationValue} from \"../domain/ConfigurationValue\";\nimport {Call, GetCall, IBusyService, ICallService, IEventService, ITrackingService} from \"@shop/common\";\nimport {TariffOptionValue} from \"../domain/tariff/TariffOptionValue\";\nimport {EventListenerRegistry, Events} from \"../tracking/EventListenerRegistry\";\n\nexport class ConfigurationChangeService implements IConfigurationChangeService {\n    static $inject:string[] = ['dataService', 'callService', 'busyService', 'trackingService', 'eventService'];\n\n    constructor(\n        private dataService:IDataService,\n        private callService:ICallService,\n        private busyService:IBusyService,\n        private trackingService:ITrackingService,\n        private eventService: IEventService,\n    ) {}\n\n    public switchDurationType():void {\n        this.setNewConfiguration(this.dataService.getConfigurationCalls().changeDurationTypeCall);\n    }\n\n    public setTariffOption(newActiveTariffOption: TariffOptionValue): void {\n        let call: GetCall<ConfigurationValue> = newActiveTariffOption.changeTariffOptionCall;\n        this.eventService.emit(Events.BLAU_TARIFF_PDP_PRODUCT_UPDATED, newActiveTariffOption.tariffName);\n        this.setNewConfiguration(call);\n    }\n\n    public selectPack(newActivePack:PackValue):void {\n        this.setNewConfiguration(newActivePack.calls.changePackCall);\n    }\n\n    public switchTargetGroupSwitcherValue():void {\n        this.setNewConfiguration(this.dataService.getTargetGroupSwitcherValue().call);\n    }\n\n    private setNewConfiguration(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            })\n        );\n    }\n\n}\n","import {IHardwareSelectionComponentService} from \"./IHardwareSelectionComponentService\";\nimport {IDataService} from \"../../service/IDataService\";\nimport {IUIStateService} from \"../../service/IUIStateService\";\nexport class HardwareSelectionComponentService implements IHardwareSelectionComponentService {\n\n    static $inject:string[] = ['dataService', 'uiStateService'];\n\n    constructor(private dataService:IDataService, private uiStateService:IUIStateService) {\n    }\n\n    public getShowHardwareSelection():boolean {\n        return this.uiStateService.getShowHardwareSelection();\n    }\n\n    public toggleHardwareSelection():void {\n        this.uiStateService.toggleHardwareSelection();\n    }\n\n    public getSelectHardwareAdspaceUrl():string {\n        return this.dataService.getSelectHardwareAdspaceUrl();\n    }\n}\n\n","import { IOfferDetailsComponentService } from \"./IOfferDetailsComponentService\";\nimport { IDataService } from \"../../service/IDataService\";\nimport { IUIStateService } from \"../../service/IUIStateService\";\nimport { IConfigurationChangeService } from \"../../service/IConfigurationChangeService\";\nimport { TariffContentsValue } from \"../../domain/tariff/TariffContentsValue\";\nimport { PriceValue } from \"../../domain/PriceValue\";\nimport { DurationType } from \"../../domain/DurationType\";\nimport { getFormattedDataVolumeGigabytes } from \"../../helpers\";\n\nexport class OfferDetailsComponentService implements IOfferDetailsComponentService {\n\n    static $inject: string[] = ['dataService', 'uiStateService', 'configurationChangeService'];\n\n    constructor(\n        private dataService: IDataService,\n        private uiStateService: IUIStateService,\n        private configurationChangeService: IConfigurationChangeService\n    ) {}\n\n    public submit(): void {\n        if (this.isSubmitPossible()) {\n            var 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(): boolean {\n        return !this.uiStateService.getSubmitInProgress() && !this.uiStateService.getShowHardwareSelection();\n    }\n\n    public getSelectHardwareAdspaceUrl(): string {\n        return this.dataService.getSelectHardwareAdspaceUrl();\n    }\n\n    public getTariffName() {\n        return this.dataService.getTariffName();\n    }\n\n    public getTariffContents(): TariffContentsValue {\n        return this.dataService.getTariffContents();\n    }\n\n    public getPrice(): PriceValue {\n        return this.dataService.getPrice();\n    }\n\n    public getFootnotes(): string {\n        return this.dataService.getFootnotes();\n    }\n\n    public getDurationType(): DurationType {\n        return this.dataService.getDurationType();\n    }\n\n    public getShowHardwareSelection(): boolean {\n        return this.uiStateService.getShowHardwareSelection();\n    }\n\n    public toggleHardwareSelection(): void {\n        this.uiStateService.toggleHardwareSelection();\n    }\n\n    public switchDurationType(): void {\n        this.configurationChangeService.switchDurationType();\n    }\n\n    public allowDurationTypeSwitch(): boolean {\n        return this.dataService.allowDurationTypeSwitch();\n    }\n\n    public getTariffUpsellAdspaceUrl(): string {\n        return this.dataService.getTariffUpsellAdspaceUrl();\n    }\n\n    public isHardwareAdditionAllowed(): boolean {\n        return this.dataService.isHardwareAdditionAllowed();\n    }\n\n    public getFormattedDataVolume() {\n        return getFormattedDataVolumeGigabytes(\n            this.dataService.getTariffContents().dataVolumeMbNumeric,\n            ''\n        );\n    }\n}\n","import {PackGroupValue} from \"../../domain/tariff/PackGroupValue\";\nimport {IConfigurationChangeService} from \"../../service/IConfigurationChangeService\";\nimport {IDataService} from \"../../service/IDataService\";\nimport {ITariffDetailsComponentService} from \"./ITariffDetailsComponentService\";\nimport {PackValue} from \"../../domain/tariff/PackValue\";\nimport {IUIStateService} from \"../../service/IUIStateService\";\n\nexport class TariffDetailsComponentService implements ITariffDetailsComponentService {\n    static $inject:string[] = ['dataService', 'configurationChangeService', 'uiStateService'];\n\n    constructor(private dataService:IDataService, private configurationChangeService:IConfigurationChangeService, private uiStateService:IUIStateService) {\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 getTariffQuestionsContent():string {\n        return this.dataService.getTariffQuestionsContent();\n    }\n\n    public getTariffDuration24MonthsText(): string {\n        return this.dataService.getTariffDuration24MonthsText();\n    }\n\n    public getCancelAnyTimeText(): string {\n        return this.dataService.getCancelAnyTimeText();\n    }\n\n    public getPackGroups():PackGroupValue[] {\n        return this.dataService.getPackGroups();\n    }\n\n    public selectPack(clickedPack:PackValue):void {\n        this.configurationChangeService.selectPack(clickedPack);\n    }\n\n    public isTariffAccordionEntryOpen(entryId:string):boolean {\n        return this.uiStateService.isTariffAccordionEntryOpen(entryId);\n    }\n\n    public toggleTariffAccordionEntry(entryId:string):void {\n        this.uiStateService.toggleTariffAccordionEntry(entryId);\n    }\n}\n\n","import {\n    MetaInfo, valueMetaInfo, GetCall, PostCall, Call,\n    TrackingInfoValue, ConstantCall\n} from \"@shop/common\";\nimport {CurrentConfigurationValue} from \"./CurrentConfigurationValue\";\nimport {ConfigurationValue} from \"./ConfigurationValue\";\nexport class ConfigurationCalls {\n\n    static META_INFO:MetaInfo = valueMetaInfo('blauTariff:ConfigurationCalls', {\n        changeDurationTypeCall: 'GetCall | null',\n        submitCall: 'PostCall',\n        trackingCall: 'ConstantCall'\n    });\n\n    changeDurationTypeCall:GetCall<ConfigurationValue>;\n    submitCall:PostCall<CurrentConfigurationValue>;\n    trackingCall:ConstantCall<TrackingInfoValue>;\n}\n\n\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nexport class CurrentConfigurationValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('blauTariff:CurrentConfigurationValue', {\n        shopContext: 'string',\n        tariffOfferName: 'string',\n        selectedTariffPackNames: '[string]'\n    });\n\n    shopContext:string;\n    tariffOfferName:string;\n    selectedTariffPackNames:string[];\n}\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nimport {PriceValue} from \"./PriceValue\";\nimport {DurationType} from \"./DurationType\";\nimport {ConfigurationCalls} from \"./ConfigurationCalls\";\nimport {TariffValue} from \"./tariff/TariffValue\";\nimport {TargetGroupSwitcherValue} from \"./TargetGroupSwitcherValue\";\n\nexport class ConfigurationValue {\n\n    static META_INFO: MetaInfo = valueMetaInfo('blauTariff:ConfigurationValue', {\n        tariff: 'TariffValue',\n        price: 'PriceValue',\n        durationType: 'DurationType',\n        calls: 'ConfigurationCalls',\n        targetGroupSwitcherValue: 'TargetGroupSwitcherValue|null',\n        allowDurationTypeSwitch: 'boolean',\n        selectHardwareAdspaceUrl: 'string|null',\n        tariffUpsellAdspaceUrl: 'string',\n        allowHardwareAddition: 'boolean'\n    });\n\n    tariff: TariffValue;\n    price: PriceValue;\n    durationType: DurationType;\n    calls: ConfigurationCalls;\n    targetGroupSwitcherValue: TargetGroupSwitcherValue;\n    allowDurationTypeSwitch: boolean;\n    selectHardwareAdspaceUrl: string;\n    tariffUpsellAdspaceUrl: string;\n    allowHardwareAddition: boolean;\n}\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nimport {ConfigurationValue} from \"./ConfigurationValue\";\nimport {InitTrackingContent} from \"./InitTrackingContent\";\nimport {EcommerceProductValue} from \"./EcommerceProductValue\";\nimport {LoginStatusTrackingValue} from \"./LoginStatusTrackingValue\";\nexport class BlauTariffPageValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('blauTariff:BlauTariffPageValue', {\n        configuration: 'ConfigurationValue',\n        teaserContent: 'string',\n        unifiedTrackingEnabled: 'boolean',\n        initTrackingContent: 'InitTrackingContent',\n        ecommerceProductValues: 'EcommerceProductValue[]',\n        loginStatusTrackingValue: 'LoginStatusTrackingValue'\n    });\n\n    configuration:ConfigurationValue;\n    teaserContent:string;\n    unifiedTrackingEnabled:boolean;\n    initTrackingContent:InitTrackingContent;\n    ecommerceProductValues: EcommerceProductValue[];\n    loginStatusTrackingValue: LoginStatusTrackingValue;\n}\n\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nimport {PriceContentsValue} from \"./PriceContentsValue\";\nexport class PriceValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('blauTariff: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\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nexport class PriceContentsValue {\n    static META_INFO:MetaInfo = valueMetaInfo('blauTariff:PriceContentsValue', {\n        contractDurationDescription: 'string | null',\n        activationFeeDescription: 'string | null'\n    });\n\n    contractDurationDescription: string;\n    activationFeeDescription: string;\n}\n","import {MetaInfo, valueMetaInfo, GetCall} from \"@shop/common\";\nimport {ConfigurationValue} from \"../ConfigurationValue\";\nexport class PackCalls {\n\n    static META_INFO:MetaInfo = valueMetaInfo('blauTariff:PackCalls', {\n        changePackCall: 'GetCall',\n    });\n\n    changePackCall:GetCall<ConfigurationValue>;\n}\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nexport class PackContentsValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('blauTariff: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\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nexport class PackGroupContentsValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('blauTariff:PackGroupContentsValue', {\n        name: 'string'\n    });\n\n    name:string;\n\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('blauTariff:PackGroupValue', {\n        id: 'string',\n        contents: 'PackGroupContentsValue',\n        packs: 'PackValue[]'\n    });\n\n    id:string;\n    contents:PackGroupContentsValue;\n    packs:PackValue[];\n\n}\n\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nimport {PackContentsValue} from \"./PackContentsValue\";\nimport {PackCalls} from \"./PackCalls\";\nexport class PackValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('blauTariff:PackValue', {\n        contents: 'PackContentsValue',\n        calls: 'PackCalls',\n        selected: 'boolean'\n    });\n\n    contents:PackContentsValue;\n    calls:PackCalls;\n    selected:boolean;\n\n}\n\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nexport class TariffContentsValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('blauTariff:TariffContentsValue', {\n        slogan: 'string',\n        name: 'string',\n        description: 'string',\n        additionalDetails: '[string]',\n        imageUrl: 'string',\n        overview: '[string]',\n        conditions: 'string',\n        dataVolumeMbNumeric: 'string | null',\n        numberPorting: 'string',\n        tariffQuestionsContent: 'string',\n        tariffDuration24MonthsText: 'string',\n        cancelAnyTimeText: 'string',\n        disturber: 'string',\n        footnotes: 'string'\n    });\n\n    slogan:string;\n    name:string;\n    description:string;\n    additionalDetails:string[];\n    imageUrl:string;\n    overview:string[];\n    conditions:string;\n    dataVolumeMbNumeric: string;\n    numberPorting:string;\n    tariffQuestionsContent:string;\n    tariffDuration24MonthsText: string;\n    cancelAnyTimeText: string;\n    disturber: string;\n    footnotes: string;\n}\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\n    static META_INFO:MetaInfo = valueMetaInfo('blauTariff:TariffValue', {\n        contents: 'TariffContentsValue',\n        tariffOptions: \"[TariffOptionValue]\",\n        packGroups: 'PackGroupValue[]'\n    });\n\n    contents:TariffContentsValue;\n    tariffOptions: TariffOptionValue[];\n    packGroups:PackGroupValue[];\n}\n","import {IDataService} from \"../../service/IDataService\";\nimport {ISharedComponentService} from \"./ISharedComponentService\";\n\nexport class SharedComponentService implements ISharedComponentService {\n    static $inject:string[] = ['dataService'];\n\n    constructor(private dataService:IDataService) {\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}","import {Call, MetaInfo, valueMetaInfo} from \"@shop/common\";\nexport class TargetGroupSwitcherValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('blauTariff: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 coTargetGroupSwitcherHtml from './coTargetGroupSwitcher.html';\n\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 {ITargetGroupSwitcherComponentService} from \"./ITargetGroupSwitcherComponentService\";\nimport {TargetGroupSwitcherValue} from \"../../domain/TargetGroupSwitcherValue\";\nimport {IDataService} from \"../../service/IDataService\";\nimport {ConfigurationChangeService} from \"../../service/ConfigurationChangeService\";\n\nexport class TargetGroupSwitcherComponentService implements ITargetGroupSwitcherComponentService {\n    static $inject:string[] = [\"dataService\", \"configurationChangeService\"];\n\n    constructor(private dataService:IDataService,\n                private configurationChangeService: ConfigurationChangeService) {}\n\n    public getTargetGroupSwitcherValue(): TargetGroupSwitcherValue {\n        return this.dataService.getTargetGroupSwitcherValue();\n    }\n\n    public switchTargetGroup(): void {\n        this.configurationChangeService.switchTargetGroupSwitcherValue();\n    }\n}\n","import { GetCall, MetaInfo, valueMetaInfo } from \"@shop/common\";\n\nexport class TariffOptionValue {\n\n    static META_INFO: MetaInfo = valueMetaInfo('blauTariff:TariffOptionValue', {\n        tariffName: 'string',\n        dataVolumeMbNumeric: 'string',\n        selected: 'boolean',\n        changeTariffOptionCall: 'GetCall'\n    });\n\n    tariffName: string;\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\";\nimport {IOfferDetailsComponentService} from \"../offerDetails/IOfferDetailsComponentService\";\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\", \"offerDetailsComponentService\"];\n\n  constructor(\n    private dataService: IDataService,\n    private configurationChangeService: IConfigurationChangeService,\n    private offerDetailsComponentService: IOfferDetailsComponentService\n  ) {}\n\n  public hasTariffOptions() {\n    return this.getTariffOptions().length > 0 && this.hasDataVolumeIncluded();\n  }\n\n  public getTariffOptions() {\n    return this.dataService.getTariffOptions();\n  }\n\n  public getShowHardwareSelection(): boolean {\n    return this.offerDetailsComponentService.getShowHardwareSelection();\n  }\n\n  public getFormattedDataVolumeGigabytes(dataVolumeMbNumeric: string) {\n    return getFormattedDataVolumeGigabytes(\n      dataVolumeMbNumeric,\n      this.dataService.getTariffName(),\n        ''\n    );\n  }\n\n  public setTariffOption(tariffIOption: TariffOptionValue): void {\n    this.configurationChangeService.setTariffOption(tariffIOption);\n  }\n\n  public hasDataVolumeIncluded() {\n    return this.dataService.getTariffContents().dataVolumeMbNumeric !== '';\n  }\n\n  public onRadioKeydown = (event: KeyboardEvent, index: number) => {\n    const radios = document.querySelectorAll<HTMLElement>('.switcher-box [role=\"radio\"]');\n    const maxIndex = radios.length - 1;\n    let newIndex = index;\n\n    switch (event.key) {\n      case 'ArrowRight':\n      case 'ArrowDown':\n        newIndex = index === maxIndex ? 0 : index + 1;\n        break;\n      case 'ArrowLeft':\n      case 'ArrowUp':\n        newIndex = index === 0 ? maxIndex : index - 1;\n        break;\n      case 'Enter':\n      case ' ':\n        this.setTariffOption(this.getTariffOptions()[index]);\n        event.preventDefault();\n        return;\n      default:\n        return;\n    }\n    this.setTariffOption(this.getTariffOptions()[newIndex]);\n    radios.forEach((r, i) => {\n      r.setAttribute('tabindex', i === newIndex ? '0' : '-1');\n      r.setAttribute('aria-checked', i === newIndex ? 'true' : 'false');\n    });\n    (radios[newIndex] as HTMLElement).focus();\n    event.preventDefault();\n  };\n\n}\n","export default \"<div data-ng-class=\\\"{\\n    'is-disabled': $ctrl.getShowHardwareSelection()\\n  }\\\" class=\\\"switcher content-switcher pdp-switcher\\\" data-ng-if=$ctrl.hasTariffOptions()> <div class=switcher-headline>LTE-Datenvolumen</div> <div class=\\\"switcher-box switcher-box-stretch\\\" role=radiogroup aria-label=\\\"Auswahl LTE-Datenvolumen\\\"> <div class=switcher-item role=radio data-ng-attr-tabindex=\\\"{{tariffOption.selected ? 0 : -1}}\\\" data-ng-attr-aria-checked=\\\"{{tariffOption.selected ? 'true' : 'false'}}\\\" data-ng-repeat=\\\"tariffOption in $ctrl.getTariffOptions() track by $index\\\" data-ng-click=$ctrl.setTariffOption(tariffOption) data-ng-keydown=\\\"$ctrl.onRadioKeydown($event, $index)\\\"> <span data-ng-class=\\\"{'checked': tariffOption.selected}\\\"> {{$ctrl.getFormattedDataVolumeGigabytes(tariffOption.dataVolumeMbNumeric)}} </span> </div> </div> </div> \";","import {ConstantCall, IEventService, IPageValueProvider, ITrackingService, TrackingInfoValue} from \"@shop/common\";\nimport {BlauTariffPageValue} from \"../domain/BlauTariffPageValue\";\nimport {Events} from \"./EventListenerRegistry\";\nimport {InitTrackingContent} from \"../domain/InitTrackingContent\";\nimport {EcommerceProductValue} from \"../domain/EcommerceProductValue\";\nimport {LoginStatusTrackingValue} from \"../domain/LoginStatusTrackingValue\";\n\nexport class BlauTrackingTariffService {\n\n    static $inject: string[] = ['trackingService', 'pageValueProvider', 'eventService'];\n\n    private readonly isUnifiedTrackingEnabled: boolean;\n    private readonly initTrackingContent: InitTrackingContent;\n    private readonly ecommerceProductValues: EcommerceProductValue[];\n    private readonly loginStatusTrackingValue: LoginStatusTrackingValue;\n\n    constructor(private readonly trackingService: ITrackingService,\n                private readonly pageValueProvider: IPageValueProvider<BlauTariffPageValue>,\n                private readonly eventService: IEventService) {\n        this.isUnifiedTrackingEnabled = this.pageValueProvider.getPageValue().unifiedTrackingEnabled;\n        this.initTrackingContent = this.pageValueProvider.getPageValue().initTrackingContent;\n        this.ecommerceProductValues = this.pageValueProvider.getPageValue().ecommerceProductValues;\n        this.loginStatusTrackingValue = this.pageValueProvider.getPageValue().loginStatusTrackingValue;\n    }\n\n    $onInit() {\n        this.eventService.subscribe(Events.BLAU_TARIFF_PDP_INITIALIZED, () => {\n            // initial tariff\n            this.trackInit();\n        });\n        this.eventService.subscribe(Events.BLAU_TARIFF_PDP_PRODUCT_UPDATED, updatedTariff => {\n            if (this.isUnifiedTrackingEnabled) {\n                this.trackUpdate(updatedTariff);\n            }\n        });\n        this.eventService.subscribe(Events.BLAU_TARIFF_PDP_PRODUCT_ADD_TO_CART, selectedTariff => {\n            if (this.isUnifiedTrackingEnabled) {\n                this.trackAddToCart(selectedTariff);\n            }\n        });\n    }\n\n    public trackInit() {\n        const initialTariff = this.pageValueProvider.getPageValue().configuration.tariff.tariffOptions.filter(value => value.selected)[0];\n        const ecommerceProductValue = this.getCurrentEcommerceProductValue(initialTariff.tariffName);\n\n        if (ecommerceProductValue !== undefined) {\n            const data = this.isUnifiedTrackingEnabled ?\n                {\n                    event: 'init',\n                    eshop_login_status: {\n                        ...this.loginStatusTrackingValue\n                    },\n                    page: {\n                        content: undefined,\n                        category: this.initTrackingContent.category,\n                        productCategory: this.initTrackingContent.productCategory,\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-tariff\",\n                    page: {}\n                };\n\n            this.track(data)\n        }\n    }\n\n    public trackUpdate(tariffName: string) {\n        const ecommerceProductValue = this.getCurrentEcommerceProductValue(tariffName);\n\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(tariffName: string) {\n        const ecommerceProductValue = this.getCurrentEcommerceProductValue(tariffName);\n\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 getCurrentEcommerceProductValue(tariffName: string): EcommerceProductValue {\n        return this.ecommerceProductValues.filter(value => value.name === tariffName)[0];\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__60__;","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nexport class InitTrackingContent {\n\n    static META_INFO:MetaInfo = valueMetaInfo('blauTariff:InitTrackingContent', {\n        category: 'string',\n        productCategory: 'string'\n    });\n\n    category: string;\n    productCategory: string;\n}\n\n","import {valueMetaInfo} from \"@shop/common\";\n\nexport class EcommerceProductValue {\n\n    static META_INFO = valueMetaInfo('blauTariff: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('blauTariff: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}"],"sourceRoot":""}