PageSourceSearch

https://www.bosch-pt.co.in/kits/kits.js

js bosch-pt.co.in collected 2026-10-04 09:51:06 UTC 128,864 bytes, 386 lines download raw bytes

vendor: 641 bytes, lines 1-11
1/*
2 * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
3 * This devtool is neither made for production nor for readable output files.
4 * It uses "eval()" calls to create a separate source file in the browser devtools.
5 * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
6 * or disable the default devtool with "devtool: false".
7 * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
8 */
9/******/ (() => { // webpackBootstrap
10/******/ 	var __webpack_modules__ = ({
11
vendor: 8,035 bytes, lines 12-21
12/***/ "./node_modules/tingle.js/dist/tingle.min.js":
13/*!***************************************************!*\
14  !*** ./node_modules/tingle.js/dist/tingle.min.js ***!
15  \***************************************************/
16/***/ (function(module, exports, __webpack_require__) {
17
18eval("var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;!function(t,o){ true?!(__WEBPACK_AMD_DEFINE_FACTORY__ = (o),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :\n\t\t__WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)):0}(this,function(){function t(t){var o={onClose:null,onOpen:null,beforeOpen:null,beforeClose:null,stickyFooter:!1,footer:!1,cssClass:[],closeLabel:\"Close\",closeMethods:[\"overlay\",\"button\",\"escape\"]};this.opts=r({},o,t),this.init()}function o(){this.modalBoxFooter&&(this.modalBoxFooter.style.width=this.modalBox.clientWidth+\"px\",this.modalBoxFooter.style.left=this.modalBox.offsetLeft+\"px\")}function e(){this.modal=document.createElement(\"div\"),this.modal.classList.add(\"tingle-modal\"),0!==this.opts.closeMethods.length&&this.opts.closeMethods.indexOf(\"overlay\")!==-1||this.modal.classList.add(\"tingle-modal--noOverlayClose\"),this.modal.style.display=\"none\",this.opts.cssClass.forEach(function(t){\"string\"==typeof t&&this.modal.classList.add(t)},this),this.opts.closeMethods.indexOf(\"button\")!==-1&&(this.modalCloseBtn=document.createElement(\"button\"),this.modalCloseBtn.classList.add(\"tingle-modal__close\"),this.modalCloseBtnIcon=document.createElement(\"span\"),this.modalCloseBtnIcon.classList.add(\"tingle-modal__closeIcon\"),this.modalCloseBtnIcon.innerHTML=\"×\",this.modalCloseBtnLabel=document.createElement(\"span\"),this.modalCloseBtnLabel.classList.add(\"tingle-modal__closeLabel\"),this.modalCloseBtnLabel.innerHTML=this.opts.closeLabel,this.modalCloseBtn.appendChild(this.modalCloseBtnIcon),this.modalCloseBtn.appendChild(this.modalCloseBtnLabel)),this.modalBox=document.createElement(\"div\"),this.modalBox.classList.add(\"tingle-modal-box\"),this.modalBoxContent=document.createElement(\"div\"),this.modalBoxContent.classList.add(\"tingle-modal-box__content\"),this.modalBox.appendChild(this.modalBoxContent),this.opts.closeMethods.indexOf(\"button\")!==-1&&this.modal.appendChild(this.modalCloseBtn),this.modal.appendChild(this.modalBox)}function s(){this.modalBoxFooter=document.createElement(\"div\"),this.modalBoxFooter.classList.add(\"tingle-modal-box__footer\"),this.modalBox.appendChild(this.modalBoxFooter)}function i(){this._events={clickCloseBtn:this.close.bind(this),clickOverlay:l.bind(this),resize:this.checkOverflow.bind(this),keyboardNav:n.bind(this)},this.opts.closeMethods.indexOf(\"button\")!==-1&&this.modalCloseBtn.addEventListener(\"click\",this._events.clickCloseBtn),this.modal.addEventListener(\"mousedown\",this._events.clickOverlay),window.addEventListener(\"resize\",this._events.resize),document.addEventListener(\"keydown\",this._events.keyboardNav)}function n(t){this.opts.closeMethods.indexOf(\"escape\")!==-1&&27===t.which&&this.isOpen()&&this.close()}function l(t){this.opts.closeMethods.indexOf(\"overlay\")!==-1&&!d(t.target,\"tingle-modal\")&&t.clientX<this.modal.clientWidth&&this.close()}function d(t,o){for(;(t=t.parentElement)&&!t.classList.contains(o););return t}function a(){this.opts.closeMethods.indexOf(\"button\")!==-1&&this.modalCloseBtn.removeEventListener(\"click\",this._events.clickCloseBtn),this.modal.removeEventListener(\"mousedown\",this._events.clickOverlay),window.removeEventListener(\"resize\",this._events.resize),document.removeEventListener(\"keydown\",this._events.keyboardNav)}function r(){for(var t=1;t<arguments.length;t++)for(var o in arguments[t])arguments[t].hasOwnProperty(o)&&(arguments[0][o]=arguments[t][o]);return arguments[0]}function h(){var t,o=document.createElement(\"tingle-test-transition\"),e={transition:\"transitionend\",OTransition:\"oTransitionEnd\",MozTransition:\"transitionend\",WebkitTransition:\"webkitTransitionEnd\"};for(t in e)if(void 0!==o.style[t])return e[t]}var c=h();return t.prototype.init=function(){this.modal||(e.call(this),i.call(this),document.body.insertBefore(this.modal,document.body.firstChild),this.opts.footer&&this.addFooter())},t.prototype.destroy=function(){null!==this.modal&&(a.call(this),this.modal.parentNode.removeChild(this.modal),this.modal=null)},t.prototype.open=function(){var t=this;\"function\"==typeof t.opts.beforeOpen&&t.opts.beforeOpen(),this.modal.style.removeProperty?this.modal.style.removeProperty(\"display\"):this.modal.style.removeAttribute(\"display\"),this._scrollPosition=window.pageYOffset,document.body.classList.add(\"tingle-enabled\"),document.body.style.top=-this._scrollPosition+\"px\",this.setStickyFooter(this.opts.stickyFooter),this.modal.classList.add(\"tingle-modal--visible\"),c?this.modal.addEventListener(c,function o(){\"function\"==typeof t.opts.onOpen&&t.opts.onOpen.call(t),t.modal.removeEventListener(c,o,!1)},!1):\"function\"==typeof t.opts.onOpen&&t.opts.onOpen.call(t),this.checkOverflow()},t.prototype.isOpen=function(){return!!this.modal.classList.contains(\"tingle-modal--visible\")},t.prototype.close=function(){if(\"function\"==typeof this.opts.beforeClose){var t=this.opts.beforeClose.call(this);if(!t)return}document.body.classList.remove(\"tingle-enabled\"),window.scrollTo(0,this._scrollPosition),document.body.style.top=null,this.modal.classList.remove(\"tingle-modal--visible\");var o=this;c?this.modal.addEventListener(c,function t(){o.modal.removeEventListener(c,t,!1),o.modal.style.display=\"none\",\"function\"==typeof o.opts.onClose&&o.opts.onClose.call(this)},!1):(o.modal.style.display=\"none\",\"function\"==typeof o.opts.onClose&&o.opts.onClose.call(this))},t.prototype.setContent=function(t){\"string\"==typeof t?this.modalBoxContent.innerHTML=t:(this.modalBoxContent.innerHTML=\"\",this.modalBoxContent.appendChild(t))},t.prototype.getContent=function(){return this.modalBoxContent},t.prototype.addFooter=function(){s.call(this)},t.prototype.setFooterContent=function(t){this.modalBoxFooter.innerHTML=t},t.prototype.getFooterContent=function(){return this.modalBoxFooter},t.prototype.setStickyFooter=function(t){this.isOverflow()||(t=!1),t?this.modalBox.contains(this.modalBoxFooter)&&(this.modalBox.removeChild(this.modalBoxFooter),this.modal.appendChild(this.modalBoxFooter),this.modalBoxFooter.classList.add(\"tingle-modal-box__footer--sticky\"),o.call(this),this.modalBoxContent.style[\"padding-bottom\"]=this.modalBoxFooter.clientHeight+20+\"px\"):this.modalBoxFooter&&(this.modalBox.contains(this.modalBoxFooter)||(this.modal.removeChild(this.modalBoxFooter),this.modalBox.appendChild(this.modalBoxFooter),this.modalBoxFooter.style.width=\"auto\",this.modalBoxFooter.style.left=\"\",this.modalBoxContent.style[\"padding-bottom\"]=\"\",this.modalBoxFooter.classList.remove(\"tingle-modal-box__footer--sticky\")))},t.prototype.addFooterBtn=function(t,o,e){var s=document.createElement(\"button\");return s.innerHTML=t,s.addEventListener(\"click\",e),\"string\"==typeof o&&o.length&&o.split(\" \").forEach(function(t){s.classList.add(t)}),this.modalBoxFooter.appendChild(s),s},t.prototype.resize=function(){console.warn(\"Resize is deprecated and will be removed in version 1.0\")},t.prototype.isOverflow=function(){var t=window.innerHeight,o=this.modalBox.clientHeight;return o>=t},t.prototype.checkOverflow=function(){this.modal.classList.contains(\"tingle-modal--visible\")&&(this.isOverflow()?this.modal.classList.add(\"tingle-modal--overflow\"):this.modal.classList.remove(\"tingle-modal--overflow\"),!this.isOverflow()&&this.opts.stickyFooter?this.setStickyFooter(!1):this.isOverflow()&&this.opts.stickyFooter&&(o.call(this),this.setStickyFooter(!0)))},{modal:t}});\n\n//# sourceURL=webpack://kits/./node_modules/tingle.js/dist/tingle.min.js?");
19
20/***/ }),
21
22/***/ "./src/kits.ts":
23/*!*********************!*\
24  !*** ./src/kits.ts ***!
25  \*********************/
26/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
27
28"use strict";
29eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst TrackingService_1 = __webpack_require__(/*! ./service/TrackingService */ \"./src/service/TrackingService.ts\");\nconst TealiumTracker_1 = __webpack_require__(/*! ./tracker/TealiumTracker */ \"./src/tracker/TealiumTracker.ts\");\nconst TealiumParamResolver_1 = __webpack_require__(/*! ./resolver/TealiumParamResolver */ \"./src/resolver/TealiumParamResolver.ts\");\nconst DocumentationService_1 = __webpack_require__(/*! ./service/documentationServices/DocumentationService */ \"./src/service/documentationServices/DocumentationService.ts\");\nconst TealiumBaseTrackingParamResolver_1 = __webpack_require__(/*! ./resolver/TealiumBaseTrackingParamResolver */ \"./src/resolver/TealiumBaseTrackingParamResolver.ts\");\nconst GTMTracker_1 = __webpack_require__(/*! ./tracker/GTMTracker */ \"./src/tracker/GTMTracker.ts\");\nconst GTMParamResolver_1 = __webpack_require__(/*! ./resolver/GTMParamResolver */ \"./src/resolver/GTMParamResolver.ts\");\nconst GTMOptionsService_1 = __webpack_require__(/*! ./service/optionServices/GTMOptionsService */ \"./src/service/optionServices/GTMOptionsService.ts\");\nconst OfficeOnOptionsService_1 = __webpack_require__(/*! ./service/optionServices/OfficeOnOptionsService */ \"./src/service/optionServices/OfficeOnOptionsService.ts\");\nconst OfficeOnTracker_1 = __webpack_require__(/*! ./tracker/OfficeOnTracker */ \"./src/tracker/OfficeOnTracker.ts\");\nconst TealiumOptionsService_1 = __webpack_require__(/*! ./service/optionServices/TealiumOptionsService */ \"./src/service/optionServices/TealiumOptionsService.ts\");\nconst OfficeOnParamResolver_1 = __webpack_require__(/*! ./resolver/OfficeOnParamResolver */ \"./src/resolver/OfficeOnParamResolver.ts\");\nconst trackingService = new TrackingService_1.TrackingService(window);\nconst tealiumTracker = new TealiumTracker_1.TealiumTracker(window);\ntealiumTracker.setParamResolver(new TealiumParamResolver_1.TealiumParamResolver());\ntealiumTracker.setOptionsService(new TealiumOptionsService_1.TealiumOptionsService(window));\ntealiumTracker.registerAtService(trackingService);\ntealiumTracker.onPageLoadEvents();\nconst officeOnTracker = new OfficeOnTracker_1.OfficeOnTracker(window);\nofficeOnTracker.setParamResolver(new OfficeOnParamResolver_1.OfficeOnParamResolver());\nofficeOnTracker.setOptionsService(new OfficeOnOptionsService_1.OfficeOnOptionsService(window));\nofficeOnTracker.registerAtService(trackingService);\nconst gtmTracker = new GTMTracker_1.GTMTracker(window);\ngtmTracker.setParamResolver(new GTMParamResolver_1.GTMParamResolver(window));\ngtmTracker.setOptionsService(new GTMOptionsService_1.GTMOptionsService(window));\ngtmTracker.registerAtService(trackingService);\ngtmTracker.onPageLoadEvents();\ntrackingService.registerEvents();\nglobalThis.trackingService = trackingService;\nconst kitsDocumentation = new DocumentationService_1.DocumentationService();\nkitsDocumentation.addBaseTrackingParamresolver(new TealiumBaseTrackingParamResolver_1.TealiumBaseTrackingParamResolver());\nkitsDocumentation.run();\n\n\n//# sourceURL=webpack://kits/./src/kits.ts?");
30
31/***/ }),
32
33/***/ "./src/model/DataTuple.ts":
34/*!********************************!*\
35  !*** ./src/model/DataTuple.ts ***!
36  \********************************/
37/***/ ((__unused_webpack_module, exports) => {
38
39"use strict";
40eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.DataTuple = void 0;\nclass DataTuple {\n    constructor() {\n    }\n    get key() {\n        return this._key;\n    }\n    set key(value) {\n        this._key = value;\n    }\n    get value() {\n        return this._value;\n    }\n    set value(value) {\n        this._value = value;\n    }\n}\nexports.DataTuple = DataTuple;\n\n\n//# sourceURL=webpack://kits/./src/model/DataTuple.ts?");
41
42/***/ }),
43
44/***/ "./src/model/GTMDataLayer.ts":
45/*!***********************************!*\
46  !*** ./src/model/GTMDataLayer.ts ***!
47  \***********************************/
48/***/ ((__unused_webpack_module, exports) => {
49
50"use strict";
51eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.GTMDataLayer = void 0;\nclass GTMDataLayer {\n    constructor(ecommerceData, trackingEvent) {\n        this.event = trackingEvent;\n        this.ecommerce = ecommerceData;\n    }\n}\nexports.GTMDataLayer = GTMDataLayer;\n\n\n//# sourceURL=webpack://kits/./src/model/GTMDataLayer.ts?");
52
53/***/ }),
54
55/***/ "./src/model/GTMEcommerce.ts":
56/*!***********************************!*\
57  !*** ./src/model/GTMEcommerce.ts ***!
58  \***********************************/
59/***/ ((__unused_webpack_module, exports) => {
60
61"use strict";
62eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.GTMEcommerce = void 0;\nclass GTMEcommerce {\n    constructor(instantiateItemsList = true) {\n        if (instantiateItemsList) {\n            this.items = [];\n        }\n    }\n}\nexports.GTMEcommerce = GTMEcommerce;\n\n\n//# sourceURL=webpack://kits/./src/model/GTMEcommerce.ts?");
63
64/***/ }),
65
66/***/ "./src/model/GTMEcommerceItem.ts":
67/*!***************************************!*\
68  !*** ./src/model/GTMEcommerceItem.ts ***!
69  \***************************************/
70/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
71
72"use strict";
73eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.GTMEcommerceItem = void 0;\nconst DataUtils_1 = __webpack_require__(/*! ../util/DataUtils */ \"./src/util/DataUtils.ts\");\nclass GTMEcommerceItem {\n    constructor(options) {\n        this.item_name = this.getStringFromArrayOrString(options.product_name);\n        this.item_id = this.getStringFromArrayOrString(options.product_id);\n        this.price = DataUtils_1.DataUtils.convertEmptyPriceToZero(this.getStringFromArrayOrString(options.product_price));\n        this.item_brand = this.getStringFromArrayOrString(options.product_brand);\n        this.item_category = this.getStringFromArrayOrString(options.product_category);\n        this.item_category_id = this.getStringFromArrayOrString(options.product_category_id);\n        this.item_category2 = this.getStringFromArrayOrString(options.product_main_category);\n        this.item_list_name = this.getStringFromArrayOrString(options.product_list_name);\n        this.item_list_id = this.getStringFromArrayOrString(options.product_list_section_id);\n        this.index = options.product_list_id || \"\";\n        this.quantity = \"1\";\n        this.product_availability = DataUtils_1.DataUtils.mapAvailability(this.getStringFromArrayOrString(options.product_availability));\n        const cordlessTool = this.getStringFromArrayOrString(options.cordless_tool);\n        if (cordlessTool !== \"\") {\n            this.cordless_tool = cordlessTool;\n        }\n        this.baretool_number = this.getStringFromArrayOrString(options.baretool_number);\n        this.battery_voltage = this.getStringFromArrayOrString(options.battery_voltage);\n        this.master_order_number = this.getStringFromArrayOrString(options.master_order_number);\n    }\n    getStringFromArrayOrString(stringOrArray) {\n        if (stringOrArray === undefined || stringOrArray === null) {\n            return \"\";\n        }\n        if (Array.isArray(stringOrArray)) {\n            if (stringOrArray.length > 0) {\n                return stringOrArray[0];\n            }\n            else {\n                return \"\";\n            }\n        }\n        else {\n            return stringOrArray;\n        }\n    }\n}\nexports.GTMEcommerceItem = GTMEcommerceItem;\n\n\n//# sourceURL=webpack://kits/./src/model/GTMEcommerceItem.ts?");
74
75/***/ }),
76
77/***/ "./src/model/GTMFilterClick.ts":
78/*!*************************************!*\
79  !*** ./src/model/GTMFilterClick.ts ***!
80  \*************************************/
81/***/ ((__unused_webpack_module, exports) => {
82
83"use strict";
84eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.GTMFilterClick = void 0;\nclass GTMFilterClick {\n}\nexports.GTMFilterClick = GTMFilterClick;\n\n\n//# sourceURL=webpack://kits/./src/model/GTMFilterClick.ts?");
85
86/***/ }),
87
88/***/ "./src/model/GTMFormInitialized.ts":
89/*!*****************************************!*\
90  !*** ./src/model/GTMFormInitialized.ts ***!
91  \*****************************************/
92/***/ ((__unused_webpack_module, exports) => {
93
94"use strict";
95eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.GTMFormInitialized = void 0;\nclass GTMFormInitialized {\n    constructor(formName, formType) {\n        this.event = \"PT_Form_Initialized\";\n        this.form_name = formName || \"\";\n        this.form_type = formType || \"\";\n    }\n}\nexports.GTMFormInitialized = GTMFormInitialized;\n\n\n//# sourceURL=webpack://kits/./src/model/GTMFormInitialized.ts?");
96
97/***/ }),
98
99/***/ "./src/model/GTMFormSubmit.ts":
100/*!************************************!*\
101  !*** ./src/model/GTMFormSubmit.ts ***!
102  \************************************/
103/***/ ((__unused_webpack_module, exports) => {
104
105"use strict";
106eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.GTMFormSubmit = void 0;\nclass GTMFormSubmit {\n    constructor(formName, formType, formStepName, email) {\n        this.event = \"PT_FormSubmit_Click\";\n        this.form_name = formName || \"\";\n        this.form_type = formType || \"\";\n        this.form_step_name = formStepName || \"\";\n        if (email) {\n            this.email = email;\n        }\n    }\n}\nexports.GTMFormSubmit = GTMFormSubmit;\n\n\n//# sourceURL=webpack://kits/./src/model/GTMFormSubmit.ts?");
107
108/***/ }),
109
110/***/ "./src/model/GTMRetailConnect.ts":
111/*!***************************************!*\
112  !*** ./src/model/GTMRetailConnect.ts ***!
113  \***************************************/
114/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
115
116"use strict";
117eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.GTMRetailConnect = void 0;\nconst DataUtils_1 = __webpack_require__(/*! ../util/DataUtils */ \"./src/util/DataUtils.ts\");\nclass GTMRetailConnect {\n    constructor(options, eventName) {\n        this.event = eventName;\n        this.product_availability = DataUtils_1.DataUtils.mapAvailability(this.getStringFromArrayOrString(options.product_availability));\n        this.product_bi_trade_code = this.getConcatStringFromArray(options.product_bi_trade_code);\n        this.product_bi_trade_name = this.getConcatStringFromArray(options.product_bi_trade_name);\n        this.product_bi_trade_relevance = this.getConcatStringFromArray(options.product_bi_trade_relevance);\n        this.product_price = DataUtils_1.DataUtils.convertEmptyPriceToZero(this.getStringFromArrayOrString(options.product_price));\n        this.product_category = this.getStringFromArrayOrString(options.product_category);\n        this.product_brand = this.getStringFromArrayOrString(options.product_brand);\n        this.product_category_id = this.getStringFromArrayOrString(options.product_category_id);\n        this.product_id = this.getStringFromArrayOrString(options.product_id);\n        this.product_name = this.getStringFromArrayOrString(options.product_name);\n    }\n    getStringFromArrayOrString(stringOrArray) {\n        if (stringOrArray === undefined) {\n            return \"\";\n        }\n        if (Array.isArray(stringOrArray)) {\n            if (stringOrArray.length > 0) {\n                return stringOrArray[0];\n            }\n            else {\n                return \"\";\n            }\n        }\n        else {\n            return stringOrArray;\n        }\n    }\n    getConcatStringFromArray(arrayOrString) {\n        if (arrayOrString === undefined) {\n            return \"\";\n        }\n        if (Array.isArray(arrayOrString)) {\n            return arrayOrString.join(\", \");\n        }\n        else {\n            return arrayOrString;\n        }\n    }\n}\nexports.GTMRetailConnect = GTMRetailConnect;\n\n\n//# sourceURL=webpack://kits/./src/model/GTMRetailConnect.ts?");
118
119/***/ }),
120
121/***/ "./src/observer/PromotionTeaserTrackingObserver.ts":
122/*!*********************************************************!*\
123  !*** ./src/observer/PromotionTeaserTrackingObserver.ts ***!
124  \*********************************************************/
125/***/ ((__unused_webpack_module, exports) => {
126
127"use strict";
128eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.PromotionTeaserTrackingObserver = void 0;\nclass PromotionTeaserTrackingObserver {\n    constructor(jQueryInstance, documentRef, onVisible) {\n        this.jQ = jQueryInstance;\n        this.documentRef = documentRef;\n        this.callback = onVisible;\n        if (typeof IntersectionObserver !== \"undefined\") {\n            this.intersectionObserver = new IntersectionObserver(this.handleIntersection.bind(this), {\n                root: null,\n                rootMargin: \"0px\",\n                threshold: 0.7,\n            });\n        }\n        if (typeof MutationObserver !== \"undefined\") {\n            this.mutationObserver = new MutationObserver(this.handleMutations.bind(this));\n        }\n    }\n    start() {\n        if (this.intersectionObserver) {\n            this.observeExistingTeasers();\n        }\n        if (this.mutationObserver) {\n            this.mutationObserver.observe(this.documentRef.body, {\n                childList: true,\n                subtree: true,\n            });\n        }\n    }\n    stop() {\n        var _a, _b;\n        (_a = this.intersectionObserver) === null || _a === void 0 ? void 0 : _a.disconnect();\n        (_b = this.mutationObserver) === null || _b === void 0 ? void 0 : _b.disconnect();\n    }\n    observeExistingTeasers(root = this.documentRef) {\n        if (!this.intersectionObserver) {\n            return;\n        }\n        const elements = root.querySelectorAll(\"[data-track_dyn_teaserid]\");\n        elements.forEach((el) => this.observeIfNotNested(el));\n    }\n    observeIfNotNested(el) {\n        if (this.hasAncestorWithSameTeaserId(el)) {\n            return;\n        }\n        this.intersectionObserver.observe(el);\n    }\n    hasAncestorWithSameTeaserId(el) {\n        const teaserId = el.getAttribute(\"data-track_dyn_teaserid\");\n        if (!teaserId) {\n            return false;\n        }\n        let parent = el.parentElement;\n        while (parent) {\n            if (parent.getAttribute(\"data-track_dyn_teaserid\") === teaserId) {\n                return true;\n            }\n            parent = parent.parentElement;\n        }\n        return false;\n    }\n    handleMutations(mutations) {\n        if (!this.intersectionObserver) {\n            return;\n        }\n        mutations.forEach((mutation) => {\n            mutation.addedNodes.forEach((node) => {\n                if (!(node instanceof HTMLElement)) {\n                    return;\n                }\n                if (node.matches(\"[data-track_dyn_teaserid]\")) {\n                    this.observeIfNotNested(node);\n                }\n                node\n                    .querySelectorAll(\"[data-track_dyn_teaserid]\")\n                    .forEach((child) => this.observeIfNotNested(child));\n            });\n        });\n    }\n    handleIntersection(entries, obs) {\n        entries.forEach((entry) => {\n            if (!entry.isIntersecting) {\n                return;\n            }\n            const element = entry.target;\n            const $element = this.jQ(element);\n            this.callback($element);\n            obs.unobserve(element);\n        });\n    }\n}\nexports.PromotionTeaserTrackingObserver = PromotionTeaserTrackingObserver;\n\n\n//# sourceURL=webpack://kits/./src/observer/PromotionTeaserTrackingObserver.ts?");
129
130/***/ }),
131
132/***/ "./src/resolver/AbstractResolver.ts":
133/*!******************************************!*\
134  !*** ./src/resolver/AbstractResolver.ts ***!
135  \******************************************/
136/***/ ((__unused_webpack_module, exports) => {
137
138"use strict";
139eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.AbstractResolver = void 0;\nclass AbstractResolver {\n    resolve(paramKey) {\n        return this.paramMapping[paramKey];\n    }\n}\nexports.AbstractResolver = AbstractResolver;\n\n\n//# sourceURL=webpack://kits/./src/resolver/AbstractResolver.ts?");
140
141/***/ }),
142
143/***/ "./src/resolver/GTMParamResolver.ts":
144/*!******************************************!*\
145  !*** ./src/resolver/GTMParamResolver.ts ***!
146  \******************************************/
147/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
148
149"use strict";
150eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.GTMParamResolver = void 0;\nconst AbstractResolver_1 = __webpack_require__(/*! ./AbstractResolver */ \"./src/resolver/AbstractResolver.ts\");\nclass GTMParamResolver extends AbstractResolver_1.AbstractResolver {\n    constructor(...args) {\n        super();\n        this.paramMapping = {\n            baretoolnumber: \"baretool_number\",\n            batteryvoltage: \"battery_voltage\",\n            cordlesstool: \"cordless_tool\",\n            event_type: \"event_type\",\n            filterattribute: \"filter_value\",\n            filtercategory: \"filter_category\",\n            filtercomb: \"filter_set\",\n            filtername: \"filter_name\",\n            onoff: \"filter_action\",\n            productaction: \"product_action\",\n            producttradename: \"product_bi_trade_name\",\n            producttradecode: \"product_bi_trade_code\",\n            producttraderelevance: \"product_bi_trade_relevance\",\n            productavailability: \"product_availability\",\n            productbrand: \"product_brand\",\n            productcategory: \"product_category\",\n            productmaincategory: \"product_main_category\",\n            productcategoryid: \"product_category_id\",\n            productid: \"product_id\",\n            productname: \"product_name\",\n            productprice: \"product_price\",\n            productquantity: \"product_quantity\",\n            productsku: \"product_sku\",\n            subteasercontent: \"teaser_subcontent\",\n            logged_in_user: \"logged_in_user\",\n            clickelementclass: \"click_element_class\",\n            clickelementid: \"click_element_id\",\n            clickname: \"click_name\",\n            clicktargettype: \"click_target_type\",\n            clicktargeturl: \"click_target_url\",\n            clicktargeturlhost: \"click_target_url_host\",\n            currency: \"currency\",\n            contacttype: \"contact_type\",\n            masterordernumber: \"master_order_number\",\n            tealiumevent: \"tealium_event\",\n            retailername: \"retailer_name\",\n            product_list_sku: \"product_list_sku\",\n            product_list_id: \"product_list_id\",\n            product_list_section_id: \"product_list_section_id\",\n            product_list_name: \"product_list_name\",\n            teaserid: \"promotion_id\",\n            teasername: \"promotion_name\",\n            creativename: \"creative_name\",\n            form_name: \"form_name\",\n            form_type: \"form_type\",\n            form_step_name: \"form_step_name\",\n            email: \"email\",\n        };\n        if (typeof globalThis !== \"undefined\" &&\n            globalThis.tealiumParamMapping !== null &&\n            typeof globalThis.tealiumParamMapping === \"object\") {\n            for (const key of Object.keys(globalThis.tealiumParamMapping)) {\n                this.paramMapping[key] = globalThis.tealiumParamMapping[key];\n            }\n        }\n        if (typeof globalThis !== \"undefined\" &&\n            globalThis.linkDecoration !== null &&\n            typeof globalThis.linkDecoration === \"object\") {\n            for (const key of Object.keys(globalThis.linkDecoration)) {\n                this.paramMapping[key] = globalThis.linkDecoration[key];\n            }\n        }\n        if (args.length > 0) {\n            const pMapping = args[0];\n            if (typeof pMapping === \"object\") {\n                for (const key of Object.keys(pMapping)) {\n                    this.paramMapping[key] = pMapping[key];\n                }\n            }\n        }\n    }\n}\nexports.GTMParamResolver = GTMParamResolver;\n\n\n//# sourceURL=webpack://kits/./src/resolver/GTMParamResolver.ts?");
151
152/***/ }),
153
154/***/ "./src/resolver/OfficeOnParamResolver.ts":
155/*!***********************************************!*\
156  !*** ./src/resolver/OfficeOnParamResolver.ts ***!
157  \***********************************************/
158/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
159
160"use strict";
161eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.OfficeOnParamResolver = void 0;\nconst AbstractResolver_1 = __webpack_require__(/*! ./AbstractResolver */ \"./src/resolver/AbstractResolver.ts\");\nclass OfficeOnParamResolver extends AbstractResolver_1.AbstractResolver {\n    constructor(...args) {\n        super();\n        this.paramMapping = {\n            productaction: \"product_action\",\n            productavailability: \"product_availability\",\n            productbrand: \"product_brand\",\n            sortby: \"sort_by\",\n            sorttype: \"sort_type\",\n            subteasercontent: \"teaser_subcontent\",\n            logged_in_user: \"logged_in_user\",\n            clickelementclass: \"click_element_class\",\n            clickelementid: \"click_element_id\",\n            clickname: \"click_name\",\n            clicktargettype: \"click_target_type\",\n            clicktargeturl: \"click_target_url\",\n            clicktargeturlhost: \"click_target_url_host\",\n            currency: \"currency\",\n            contacttype: \"contact_type\",\n            masterordernumber: \"master_order_number\",\n            tealiumevent: \"tealium_event\",\n        };\n        if (typeof globalThis !== \"undefined\"\n            && globalThis.tealiumParamMapping !== null\n            && typeof globalThis.tealiumParamMapping === \"object\") {\n            for (const key of Object.keys(globalThis.tealiumParamMapping)) {\n                this.paramMapping[key] = globalThis.tealiumParamMapping[key];\n            }\n        }\n        if (typeof globalThis !== \"undefined\"\n            && globalThis.linkDecoration !== null\n            && typeof globalThis.linkDecoration === \"object\") {\n            for (const key of Object.keys(globalThis.linkDecoration)) {\n                this.paramMapping[key] = globalThis.linkDecoration[key];\n            }\n        }\n        if (args.length > 0) {\n            const pMapping = args[0];\n            if (typeof pMapping === \"object\") {\n                for (const key of Object.keys(pMapping)) {\n                    this.paramMapping[key] = pMapping[key];\n                }\n            }\n        }\n    }\n}\nexports.OfficeOnParamResolver = OfficeOnParamResolver;\n\n\n//# sourceURL=webpack://kits/./src/resolver/OfficeOnParamResolver.ts?");
162
163/***/ }),
164
165/***/ "./src/resolver/TealiumBaseTrackingParamResolver.ts":
166/*!**********************************************************!*\
167  !*** ./src/resolver/TealiumBaseTrackingParamResolver.ts ***!
168  \**********************************************************/
169/***/ ((__unused_webpack_module, exports) => {
170
171"use strict";
172eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.TealiumBaseTrackingParamResolver = void 0;\nclass TealiumBaseTrackingParamResolver {\n    constructor() {\n        this.objectNameInWindow = \"utag_data\";\n        this.trackerName = \"Tealium\";\n    }\n    getBaseTrackingPrams() {\n        const params = {};\n        if (globalThis.hasOwnProperty(this.objectNameInWindow)) {\n            params[this.trackerName] = globalThis[this.objectNameInWindow];\n            return params;\n        }\n        return {};\n    }\n    getTrackerName() {\n        return this.trackerName;\n    }\n    setTrackerName(name) {\n        this.trackerName = name;\n    }\n}\nexports.TealiumBaseTrackingParamResolver = TealiumBaseTrackingParamResolver;\n\n\n//# sourceURL=webpack://kits/./src/resolver/TealiumBaseTrackingParamResolver.ts?");
173
174/***/ }),
175
176/***/ "./src/resolver/TealiumParamResolver.ts":
177/*!**********************************************!*\
178  !*** ./src/resolver/TealiumParamResolver.ts ***!
179  \**********************************************/
180/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
181
182"use strict";
183eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.TealiumParamResolver = void 0;\nconst AbstractResolver_1 = __webpack_require__(/*! ./AbstractResolver */ \"./src/resolver/AbstractResolver.ts\");\nclass TealiumParamResolver extends AbstractResolver_1.AbstractResolver {\n    constructor(...args) {\n        super();\n        this.paramMapping = {\n            baretoolnumber: \"baretool_number\",\n            batteryvoltage: \"battery_voltage\",\n            cordlesstool: \"cordless_tool\",\n            filterattribute: \"filter_value\",\n            filtercategory: \"filter_category\",\n            filtercomb: \"filter_set\",\n            onoff: \"filter_action\",\n            productaction: \"product_action\",\n            productavailability: \"product_availability\",\n            producttradename: \"product_bi_trade_name\",\n            producttradecode: \"product_bi_trade_code\",\n            producttraderelevance: \"product_bi_trade_relevance\",\n            productbrand: \"product_brand\",\n            productcategory: \"product_category\",\n            productmaincategory: \"product_main_category\",\n            productcategoryid: \"product_category_id\",\n            productid: \"product_id\",\n            productname: \"product_name\",\n            productprice: \"product_price\",\n            productquantity: \"product_quantity\",\n            productsku: \"product_sku\",\n            searchcategory: \"search_category\",\n            searchterm: \"search_term\",\n            sortby: \"sort_by\",\n            sorttype: \"sort_type\",\n            subteasercontent: \"teaser_subcontent\",\n            logged_in_user: \"logged_in_user\",\n            clickelementclass: \"click_element_class\",\n            clickelementid: \"click_element_id\",\n            clickname: \"click_name\",\n            clicktargettype: \"click_target_type\",\n            clicktargeturl: \"click_target_url\",\n            clicktargeturlhost: \"click_target_url_host\",\n            currency: \"currency\",\n            contacttype: \"contact_type\",\n            masterordernumber: \"master_order_number\",\n            tealiumevent: \"tealium_event\",\n            retailername: \"retailer_name\",\n            product_list_name: \"product_list_name\",\n            product_list_id: \"product_list_id\",\n            product_index: \"product_index\",\n            form_name: \"form_name\",\n            form_type: \"form_type\",\n            form_step_name: \"form_step_name\",\n            email: \"email\",\n            teaserid: \"promotion_id\",\n            teasername: \"promotion_name\",\n            creativename: \"creative_name\",\n        };\n        if (typeof globalThis !== \"undefined\" &&\n            globalThis.tealiumParamMapping !== null &&\n            typeof globalThis.tealiumParamMapping === \"object\") {\n            for (const key of Object.keys(globalThis.tealiumParamMapping)) {\n                this.paramMapping[key] = globalThis.tealiumParamMapping[key];\n            }\n        }\n        if (typeof globalThis !== \"undefined\" &&\n            globalThis.linkDecoration !== null &&\n            typeof globalThis.linkDecoration === \"object\") {\n            for (const key of Object.keys(globalThis.linkDecoration)) {\n                this.paramMapping[key] = globalThis.linkDecoration[key];\n            }\n        }\n        if (args.length > 0) {\n            const pMapping = args[0];\n            if (typeof pMapping === \"object\") {\n                for (const key of Object.keys(pMapping)) {\n                    this.paramMapping[key] = pMapping[key];\n                }\n            }\n        }\n    }\n}\nexports.TealiumParamResolver = TealiumParamResolver;\n\n\n//# sourceURL=webpack://kits/./src/resolver/TealiumParamResolver.ts?");
184
185/***/ }),
186
187/***/ "./src/service/TrackingService.ts":
188/*!****************************************!*\
189  !*** ./src/service/TrackingService.ts ***!
190  \****************************************/
191/***/ ((__unused_webpack_module, exports) => {
192
193"use strict";
194eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.TrackingService = void 0;\nclass TrackingService {\n    constructor(windowObject) {\n        this.TRACKINGELEMENT_CSS_CLASS = \"trackingElement\";\n        this.ONCE_ONLY_EVENTS = [\"input\"];\n        if (typeof windowObject !== \"undefined\") {\n            this.localWindow = windowObject;\n        }\n        else {\n            if (typeof window !== \"undefined\") {\n                this.localWindow = window;\n            }\n            else {\n            }\n        }\n        this.trackers = [];\n        this._$ = this.localWindow.$;\n        this.registerDomObserver();\n    }\n    registerTracker(tracker) {\n        this.trackers.push(tracker);\n    }\n    registerEvents() {\n        const jQ = this._$;\n        const localTrackers = this.trackers;\n        const onceOnlyEvents = this.ONCE_ONLY_EVENTS;\n        this._$(\".\" + this.TRACKINGELEMENT_CSS_CLASS).each(function (index, htmlElem) {\n            const jqueryElement = jQ(htmlElem);\n            const eventType = jqueryElement.data(\"track_domevent\");\n            if (typeof eventType !== \"undefined\" && eventType.length > 0) {\n                const handler = (eventObject) => {\n                    const jquerElem = jQ(this);\n                    for (const tracker of localTrackers) {\n                        if (tracker.shouldTrack()) {\n                            tracker.track(jquerElem);\n                        }\n                    }\n                };\n                jqueryElement.off(eventType + \".tracking\");\n                if (onceOnlyEvents.indexOf(eventType) !== -1) {\n                    jqueryElement.one(eventType + \".tracking\", handler);\n                }\n                else {\n                    jqueryElement.on(eventType + \".tracking\", handler);\n                }\n            }\n        });\n    }\n    getTrackingParams(...args) {\n        const retval = {};\n        if (args != null && \"undefined\" !== typeof args) {\n            for (const t of this.trackers) {\n                const tmpTrackingParams = t.getTrackingParams(args);\n                if (null != tmpTrackingParams && \"object\" === typeof tmpTrackingParams) {\n                    for (const key in tmpTrackingParams) {\n                        retval[key] = tmpTrackingParams[key];\n                    }\n                }\n            }\n        }\n        return retval;\n    }\n    track(...args) {\n        if (args.length > 0) {\n            for (const tracker of this.trackers) {\n                if (tracker.shouldTrack()) {\n                    tracker.track(args);\n                }\n            }\n        }\n    }\n    registerAjaxEvents(html) {\n        if (this._$(html).hasClass(this.TRACKINGELEMENT_CSS_CLASS)) {\n            this.registerEventsForCallback(0, html);\n        }\n        else {\n            const elems = this._$(html).find(\".\" + this.TRACKINGELEMENT_CSS_CLASS);\n            if (elems != null && elems.length > 0) {\n                for (const element of elems) {\n                    const elem = element;\n                    this.registerEventsForCallback(0, elem);\n                }\n            }\n        }\n    }\n    registerEventsForCallback(index, htmlElem) {\n        const jQ = this._$;\n        const localTrackers = this.trackers;\n        const jqueryElement = jQ(htmlElem);\n        const eventType = jqueryElement.data(\"track_domevent\");\n        if (typeof eventType !== \"undefined\" && eventType.length > 0) {\n            const handler = (eventObject) => {\n                const jquerElem = jQ(eventObject.currentTarget);\n                for (const tracker of localTrackers) {\n                    if (tracker.shouldTrack()) {\n                        tracker.track(jquerElem);\n                    }\n                }\n            };\n            jqueryElement.off(eventType + \".tracking\");\n            if (this.ONCE_ONLY_EVENTS.indexOf(eventType) !== -1) {\n                jqueryElement.one(eventType + \".tracking\", handler);\n            }\n            else {\n                jqueryElement.on(eventType + \".tracking\", handler);\n            }\n            const event = new CustomEvent(\"kitsAjaxEventsRegistered\", { detail: jqueryElement });\n            window.dispatchEvent(event);\n        }\n    }\n    registerDomObserver() {\n        try {\n            MutationObserver\n                = this.localWindow.MutationObserver || this.localWindow.WebKitMutationObserver;\n            const localThis = this;\n            this.localWindow.observer = new MutationObserver((mutations, observer) => {\n                const arrayLength = mutations.length;\n                for (let i = 0; i < arrayLength;
194 i++) {\n                    const mutation = mutations[i];\n                    if (mutation.type === \"childList\") {\n                        const innerArrayLength = mutation.addedNodes.length;\n                        for (let j = 0; j < innerArrayLength; j++) {\n                            const addedNode = mutation.addedNodes[j];\n                            localThis.registerAjaxEvents((addedNode));\n                        }\n                    }\n                }\n            });\n            this.localWindow.observer.observe(document, {\n                attributes: true,\n                childList: true,\n                subtree: true,\n            });\n        }\n        catch (e) {\n            console.debug(e);\n        }\n    }\n}\nexports.TrackingService = TrackingService;\n\n\n//# sourceURL=webpack://kits/./src/service/TrackingService.ts?");
195
196/***/ }),
197
198/***/ "./src/service/documentationServices/DocumentationService.ts":
199/*!*******************************************************************!*\
200  !*** ./src/service/documentationServices/DocumentationService.ts ***!
201  \*******************************************************************/
202/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
203
204"use strict";
205eval("\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n    var ownKeys = function(o) {\n        ownKeys = Object.getOwnPropertyNames || function (o) {\n            var ar = [];\n            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n            return ar;\n        };\n        return ownKeys(o);\n    };\n    return function (mod) {\n        if (mod && mod.__esModule) return mod;\n        var result = {};\n        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n        __setModuleDefault(result, mod);\n        return result;\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.DocumentationService = void 0;\nconst tingle = __importStar(__webpack_require__(/*! tingle.js */ \"./node_modules/tingle.js/dist/tingle.min.js\"));\nclass DocumentationService {\n    constructor(...args) {\n        this.config = {\n            documentationEnabled: false,\n            enablePattern: \"1\",\n            paramName: \"kitEnableDoku\",\n            trackingElements: {\n                classNames: {\n                    element: \"trackingElement\",\n                    module: \"trackingModule\",\n                    teaser: \"trackingTeaser\",\n                },\n                cssFiles: [\"/kits/css/kits_documentation.css\"],\n            },\n            trackingOverlay: {\n                cssFiles: [\n                    \"/kits/css/custom.css\",\n                ],\n            },\n        };\n        this.baseTrackingParamResolvers = [];\n        if (args.length > 0) {\n            const dokConfig = args[0];\n            if (\"object\" === typeof dokConfig) {\n                this.extendConfiguration(dokConfig);\n            }\n        }\n        if (globalThis.hasOwnProperty(\"kitsDocConfig\")) {\n            this.extendConfiguration(globalThis.kitsDocConfig);\n        }\n        this.toggleDokModus();\n    }\n    applyParameterPopups() {\n        this.loadCssFiles(this.config.trackingOverlay.cssFiles);\n        this.createPopUps();\n    }\n    markElements() {\n        this.loadCssFiles(this.config.trackingElements.cssFiles);\n    }\n    run() {\n        if (this.config.documentationEnabled) {\n            this.markElements();\n            this.applyParameterPopups();\n            window.addEventListener(\"kitsAjaxEventsRegistered\", (event) => {\n                this.createPopup(event.detail[0]);\n            });\n            this.createBaseTrackingPopup();\n        }\n    }\n    addBaseTrackingParamresolver(resolver) {\n        this.baseTrackingParamResolvers.push(resolver);\n    }\n    getParamValue(url) {\n        const regexS = \"[\\\\?&]\" + this.config.paramName + \"=([^&#]*)\";\n        const regex = new RegExp(regexS);\n        const results = regex.exec(url);\n        return results == null ? null : results[1];\n    }\n    eraseCookie() {\n        document.cookie = this.config.paramName + \"=; Max-Age=-99999999;\";\n    }\n    getCookie() {\n        const nameEQ = this.config.paramName + \"=\";\n        const ca = document.cookie.split(\";\");\n        for (let i = 0; i < ca.length;
205 i++) {\n            let c = ca[i];\n            while (c.charAt(0) === \" \") {\n                c = c.substring(1, c.length);\n            }\n            if (c.indexOf(nameEQ) === 0) {\n                return c.substring(nameEQ.length, c.length);\n            }\n        }\n        return null;\n    }\n    extendConfiguration(sourceObject) {\n        if (null != sourceObject && \"object\" === typeof sourceObject) {\n            for (const key in sourceObject) {\n                this.config[key] = sourceObject[key];\n            }\n        }\n    }\n    toggleDokModus() {\n        const url = window.location.href;\n        const paramValue = this.getParamValue(url) + \"\";\n        if (null !== paramValue) {\n            if (paramValue === this.config.enablePattern) {\n                document.cookie =\n                    this.config.paramName + \"=\" + this.config.enablePattern + \"; expires=Fri, 31 Dec 9999 23:59:59 GMT; path=/\";\n                this.config.documentationEnabled = true;\n            }\n            else {\n                this.config.documentationEnabled = false;\n                if (!this.config.documentationEnabled) {\n                    this.eraseCookie();\n                }\n            }\n        }\n    }\n    loadCssFiles(cssFiles) {\n        if (null != cssFiles && Array.isArray(cssFiles)) {\n            for (const key in cssFiles) {\n                this.loadCssFile(cssFiles[key]);\n            }\n        }\n    }\n    loadCssFile(cssFile) {\n        if (null != cssFile && \"string\" === typeof cssFile) {\n            const link = document.createElement(\"link\");\n            link.href = cssFile;\n            link.type = \"text/css\";\n            link.rel = \"stylesheet\";\n            link.media = \"screen\";\n            document.getElementsByTagName(\"head\")[0].appendChild(link);\n        }\n    }\n    createBaseTrackingPopup() {\n        document.addEventListener(\"click\", (event) => {\n            if (event.altKey) {\n                const params = {};\n                for (const resolver of this.baseTrackingParamResolvers) {\n                    const btp = resolver.getBaseTrackingPrams();\n                    console.debug(\"btp Params\", btp);\n                    for (const key in btp) {\n                        params[key] = btp[key];\n                    }\n                }\n                const modal = new tingle.modal({\n                    footer: true,\n                    stickyFooter: true,\n                });\n                let content = \"<h2 class='kits-doc-h2'>Base Tracking Params: </h2>\";\n                content += this.createTrackingParamContent(params);\n                modal.setContent(content);\n                modal.addFooterBtn(\"OK\", \"tingle-btn tingle-btn--primary tingle-btn--pull-right\", () => {\n                    modal.close();\n                });\n                modal.open();\n            }\n        });\n    }\n    createPopUps() {\n        for (const className in this.config.trackingElements.classNames) {\n            const fullClassName = \".\" + this.config.trackingElements.classNames[className];\n            const elements = document.querySelectorAll(fullClassName);\n            for (let i = 0; i < elements.length; i++) {\n                const element = elements[i];\n                this.createPopup(element);\n            }\n        }\n    }\n    createPopup(element) {\n        const classNames = element.classList;\n        const fullClassNames = [];\n        for (let i = 0; i < classNames.length; i++) {\n            for (const key in this.config.trackingElements.classNames) {\n                if (this.config.trackingElements.classNames[key] === classNames[i]) {\n                    fullClassNames.push(classNames[i]);\n                    break;\n                }\n            }\n        }\n        element.addEventListener(\"click\", (eventParam) => {\n            if (eventParam.ctrlKey) {\n                eventParam.stopPropagation();\n                const trackingParams = globalThis.trackingService.getTrackingParams(element);\n                const modal = new tingle.modal({\n                    footer: true,\n                    stickyFooter: true,\n                });\n                let content = \"<h2 class='kits-doc-h2'>Tracking Params: \" +\n                    element.tagName + \"/\" + fullClassNames.join(\";\") + \"</h2><p class='kits-doc-dompath'>\" +\n                    \" with DOM path: \" + this.getDomPath(element).join(\"
205->\") + \"</p>\";\n                content += this.createTrackingParamContent(trackingParams);\n                modal.setContent(content);\n                modal.addFooterBtn(\"OK\", \"tingle-btn tingle-btn--primary tingle-btn--pull-right\", () => {\n                    modal.close();\n                });\n                modal.open();\n            }\n        });\n    }\n    createTrackingParamContent(trackingParams) {\n        if (null != trackingParams && \"object\" === typeof trackingParams) {\n            let content = \"\";\n            for (const trackerName in trackingParams) {\n                content += \"<table class='kits-doc-table'><thead><tr><td class='kits-doc-td' colspan='2'><h3>\" +\n                    trackerName + \"</h3></td></tr></thead>\" +\n                    \"<tbody><tr><td colspan='2'><pre class='kits-doc-pre'>\" +\n                    JSON.stringify(trackingParams[trackerName], null, 2) +\n                    \"</pre></td></tr></tbody></table>\";\n            }\n            return content;\n        }\n        return \"\";\n    }\n    getDomPath(el) {\n        const stack = [];\n        while (el.parentNode != null) {\n            let sibCount = 0;\n            let sibIndex = 0;\n            for (let i = 0; i < el.parentNode.childNodes.length; i++) {\n                const sib = el.parentNode.childNodes[i];\n                if (sib.nodeName === el.nodeName) {\n                    if (sib === el) {\n                        sibIndex = sibCount;\n                    }\n                    sibCount++;\n                }\n            }\n            let classNames = \"\";\n            if (el.classList.length > 0) {\n                const tmpArr = [];\n                for (let i = 0; i < el.classList.length; i++) {\n                    tmpArr.push(el.classList[i]);\n                }\n                classNames += \".\" + tmpArr.join(\".\");\n            }\n            if (el.hasAttribute(\"id\") && el.id !== \"\") {\n                stack.unshift(el.nodeName.toLowerCase() + \"#\" + el.id + \" \" + classNames);\n            }\n            else if (sibCount > 1) {\n                stack.unshift(el.nodeName.toLowerCase() + \":eq(\" + sibIndex + \")\" + classNames);\n            }\n            else {\n                stack.unshift(el.nodeName.toLowerCase() + classNames);\n            }\n            el = el.parentNode;\n        }\n        return stack.slice(1);\n    }\n}\nexports.DocumentationService = DocumentationService;\n\n\n//# sourceURL=webpack://kits/./src/service/documentationServices/DocumentationService.ts?");
206
207/***/ }),
208
209/***/ "./src/service/optionServices/AbstractOptionsService.ts":
210/*!**************************************************************!*\
211  !*** ./src/service/optionServices/AbstractOptionsService.ts ***!
212  \**************************************************************/
213/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
214
215"use strict";
216eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.AbstractOptionsService = void 0;\nconst PageUtils_1 = __webpack_require__(/*! ../../util/PageUtils */ \"./src/util/PageUtils.ts\");\nclass AbstractOptionsService {\n    handleCommonClickTargetType(jQueryElmen, retval, clickTargetUrlHost) {\n        if (PageUtils_1.PageUtils.isAddToCart(jQueryElmen)) {\n            this.appendValueToOptionsIfAbsent(retval, \"clicktargettype\", \"basket\");\n        }\n        else if (PageUtils_1.PageUtils.isContactLink(jQueryElmen, this.localWindow)) {\n            this.appendValueToOptionsIfAbsent(retval, \"clicktargettype\", \"contact\");\n        }\n        else if (PageUtils_1.PageUtils.isDownloadLink(jQueryElmen)) {\n            this.appendValueToOptionsIfAbsent(retval, \"clicktargettype\", \"download\");\n        }\n        else if (PageUtils_1.PageUtils.isSocialExit(jQueryElmen)) {\n            this.appendValueToOptionsIfAbsent(retval, \"clicktargettype\", \"social_exit\");\n        }\n        else if (PageUtils_1.PageUtils.isSocialShare(jQueryElmen)) {\n            this.appendValueToOptionsIfAbsent(retval, \"clicktargettype\", \"social_share\");\n        }\n        else if (PageUtils_1.PageUtils.isOtherHost(clickTargetUrlHost, this.localWindow)) {\n            this.appendValueToOptionsIfAbsent(retval, \"clicktargettype\", \"external\");\n        }\n        else {\n            this.appendValueToOptionsIfAbsent(retval, \"clicktargettype\", \"onsite\");\n        }\n    }\n    handleCommonAttributes(retval, jQueryElmen) {\n        this.appendValueToOptions(retval, \"clickelementclass\", PageUtils_1.PageUtils.getClickElementClass(jQueryElmen));\n        this.appendValueToOptions(retval, \"clickelementid\", PageUtils_1.PageUtils.getClickElementId(jQueryElmen));\n        const elementInfo = PageUtils_1.PageUtils.getElementInfo(jQueryElmen);\n        if (typeof elementInfo !== \"undefined\" && elementInfo.length > 0) {\n            this.appendValueToOptions(retval, \"clickname\", elementInfo.trim());\n        }\n        this.appendValueToOptions(retval, \"clicktargeturl\", PageUtils_1.PageUtils.getClickTargetUrl(jQueryElmen, this.localWindow));\n    }\n    addParamsFromPDLWithGivenDecorator(options, linkDecoration, pdlData) {\n        this.addParams(options, linkDecoration, pdlData);\n    }\n    addParamsFromPDL(options, pdlData) {\n        var _a;\n        const linkDecoration = (_a = this.localWindow) === null || _a === void 0 ? void 0 : _a.linkDecoration;\n        this.addParams(options, linkDecoration, pdlData);\n    }\n    appendValueToOptionsIfAbsent(options, key, value) {\n        if (key !== null && typeof key !== \"undefined\" && value !== null && typeof value !== \"undefined\") {\n            if (options[key] === undefined) {\n                options[key] = value;\n            }\n        }\n    }\n    appendValueToOptions(options, key, value) {\n        if (key !== null && typeof key !== \"undefined\" && value !== null && typeof value !== \"undefined\") {\n            options[key] = value;\n        }\n    }\n    addParams(options, linkDecoration, pdlData) {\n        if (typeof this.localWindow !== \"undefined\" &&\n            linkDecoration !== null &&\n            typeof linkDecoration === \"object\") {\n            for (const key of Object.keys(linkDecoration)) {\n                const keyFromPdl = linkDecoration[key];\n                const pdlElement = pdlData ? pdlData[keyFromPdl] : undefined;\n                this.appendValueToOptions(options, key, pdlElement);\n            }\n        }\n    }\n}\nexports.AbstractOptionsService = AbstractOptionsService;\n\n\n//# sourceURL=webpack://kits/./src/service/optionServices/AbstractOptionsService.ts?");
217
218/***/ }),
219
220/***/ "./src/service/optionServices/GTMOptionsService.ts":
221/*!*********************************************************!*\
222  !*** ./src/service/optionServices/GTMOptionsService.ts ***!
223  \*********************************************************/
224/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
225
226"use strict";
227eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.GTMOptionsService = void 0;\nconst DataUtils_1 = __webpack_require__(/*! ../../util/DataUtils */ \"./src/util/DataUtils.ts\");\nconst PageUtils_1 = __webpack_require__(/*! ../../util/PageUtils */ \"./src/util/PageUtils.ts\");\nconst ProductCartMapUtils_1 = __webpack_require__(/*! ../../util/ProductCartMapUtils */ \"./src/util/ProductCartMapUtils.ts\");\nconst AbstractOptionsService_1 = __webpack_require__(/*! ./AbstractOptionsService */ \"./src/service/optionServices/AbstractOptionsService.ts\");\nclass GTMOptionsService extends AbstractOptionsService_1.AbstractOptionsService {\n    constructor(windowObject) {\n        super();\n        if (typeof windowObject !== \"undefined\") {\n            this.localWindow = windowObject;\n        }\n        else {\n            if (typeof window !== \"undefined\") {\n                this.localWindow = window;\n            }\n        }\n        this._$ = this.localWindow.$;\n    }\n    createOptions(jQueryElmen) {\n        const retval = {};\n        if (jQueryElmen !== null && typeof jQueryElmen !== \"undefined\") {\n            const data = jQueryElmen.data();\n            const dyndata = DataUtils_1.DataUtils.extractDyndata(data);\n            this.handleCommonAttributes(retval, jQueryElmen);\n            const clickTargetUrlHost = PageUtils_1.PageUtils.getClickTargetUrlHost(jQueryElmen, this.localWindow);\n            this.appendValueToOptions(retval, \"clicktargeturlhost\", clickTargetUrlHost);\n            if (PageUtils_1.PageUtils.isAddToCart(jQueryElmen)) {\n                this.appendValueToOptions(retval, \"tealiumevent\", \"PT_BasketAdd_Click\");\n            }\n            else if (PageUtils_1.PageUtils.isRetailConnectOpenLayerClick(jQueryElmen)) {\n                this.appendValueToOptionsIfAbsent(retval, \"tealiumevent\", \"PT_RetailConnectOpenLayer_Click\");\n            }\n            else {\n                this.appendValueToOptionsIfAbsent(retval, \"tealiumevent\", \"PT_Generic_Click\");\n            }\n            for (const key of Object.keys(dyndata)) {\n                this.appendValueToOptions(retval, key, dyndata[key]);\n            }\n            this.handleCommonClickTargetType(jQueryElmen, retval, clickTargetUrlHost);\n            if (PageUtils_1.PageUtils.isContactPhoneLink(jQueryElmen, this.localWindow)) {\n                this.appendValueToOptions(retval, \"contacttype\", \"call\");\n            }\n            else if (PageUtils_1.PageUtils.isContactEmailLink(jQueryElmen, this.localWindow)) {\n                this.appendValueToOptions(retval, \"contacttype\", \"email\");\n            }\n            const filterParams = PageUtils_1.PageUtils.getFilterParams(jQueryElmen, this._$);\n            for (const key of Object.keys(filterParams)) {\n                this.appendValueToOptions(retval, key, filterParams[key]);\n            }\n            this.addParamsFromPDL(retval, this.localWindow.kb_data);\n            if (retval.tealiumevent === \"PT_RetailConnectOpenLayer_Click\"\n                || retval.tealiumevent === \"PT_RetailConnectRetailLink_Click\") {\n                const retailConnectResolver = {};\n                retailConnectResolver.baretoolnumber = \"baretool_number\";\n                retailConnectResolver.batteryvoltage = \"battery_voltage\";\n                retailConnectResolver.masterordernumber = \"master_order_number\";\n                retailConnectResolver.productavailability = \"product_availability\";\n                retailConnectResolver.producttradecode = \"product_bi_trade_code\";\n                retailConnectResolver.producttradename = \"product_bi_trade_name\";\n                retailConnectResolver.producttraderelevance = \"product_bi_trade_relevance\";\n                retailConnectResolver.productbrand = \"product_brand\";\n                retailConnectResolver.productcategory = \"product_category\";\n                retailConnectResolver.productcategoryid = \"product_category_id\";\n                retailConnectResolver.productid = \"product_id\";\n                retailConnectResolver.productname = \"product_name\";\n                retailConnectResolver.productprice = \"product_price\";\n                this.addParamsFromPDLWithGivenDecorator(retval, retailConnectResolver, this.localWindow.kb_data);\n            }\n            this.handleGTMSpecificStuff(retval, jQueryElmen);\n        }\n        return retval;\n    }\n    handleGTMSpecificStuff(retval, jQueryElmen) {\n        if (!PageUtils_1.PageUtils.isGTMTracking(this.localWindow)) {\n            return;\n        }\n        this.appendValueToOptions(retval, \"product_list_sku\", PageUtils_1.PageUtils.getClickedElementSkuForGTM(jQueryElmen));\n        this.appendValueToOptions(retval, \"product_list_id\", PageUtils_1.PageUtils.getClickedElementIndexF
227orGTM(jQueryElmen));\n        this.appendValueToOptions(retval, \"product_list_name\", PageUtils_1.PageUtils.getClickedElementListNameForGTM(jQueryElmen));\n        this.appendValueToOptions(retval, \"product_list_section_id\", PageUtils_1.PageUtils.getParentElementIdForGTM(jQueryElmen));\n        if (PageUtils_1.PageUtils.isAddToCart(jQueryElmen)\n            || retval.tealiumevent === \"PT_RetailConnectOpenLayer_Click\"\n            || retval.tealiumevent === \"PT_RetailConnectRetailLink_Click\") {\n            this.appendValueToOptions(retval, \"product_list_sku\", PageUtils_1.PageUtils.getClickedElementAddToCartSku(jQueryElmen));\n        }\n        if (retval.teaserid) {\n            const imageFilename = DataUtils_1.DataUtils.findClosestImageFilename(jQueryElmen);\n            this.appendValueToOptions(retval, \"creativename\", imageFilename);\n        }\n        const cartMapParams = ProductCartMapUtils_1.ProductCartMapUtils.collectProductParams(this.localWindow.productCartMap, retval.product_list_sku);\n        for (const key of Object.keys(cartMapParams)) {\n            this.appendValueToOptions(retval, key, cartMapParams[key]);\n        }\n    }\n}\nexports.GTMOptionsService = GTMOptionsService;\n\n\n//# sourceURL=webpack://kits/./src/service/optionServices/GTMOptionsService.ts?");
228
229/***/ }),
230
231/***/ "./src/service/optionServices/OfficeOnOptionsService.ts":
232/*!**************************************************************!*\
233  !*** ./src/service/optionServices/OfficeOnOptionsService.ts ***!
234  \**************************************************************/
235/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
236
237"use strict";
238eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.OfficeOnOptionsService = void 0;\nconst DataUtils_1 = __webpack_require__(/*! ../../util/DataUtils */ \"./src/util/DataUtils.ts\");\nconst PageUtils_1 = __webpack_require__(/*! ../../util/PageUtils */ \"./src/util/PageUtils.ts\");\nconst AbstractOptionsService_1 = __webpack_require__(/*! ./AbstractOptionsService */ \"./src/service/optionServices/AbstractOptionsService.ts\");\nclass OfficeOnOptionsService extends AbstractOptionsService_1.AbstractOptionsService {\n    constructor(windowObject) {\n        super();\n        if (typeof windowObject !== \"undefined\") {\n            this.localWindow = windowObject;\n        }\n        else {\n            if (typeof window !== \"undefined\") {\n                this.localWindow = window;\n            }\n        }\n        this._$ = this.localWindow.$;\n    }\n    createOptions(jQueryElmen) {\n        const retval = {};\n        if (jQueryElmen !== null && typeof jQueryElmen !== \"undefined\") {\n            const data = jQueryElmen.data();\n            const dyndata = DataUtils_1.DataUtils.extractDyndata(data);\n            this.appendValueToOptions(retval, \"tealiumevent\", dyndata.eventaction);\n            this.handleCommonAttributes(retval, jQueryElmen);\n            const clickTargetUrlHost = PageUtils_1.PageUtils.getClickTargetUrlHost(jQueryElmen, this.localWindow);\n            this.appendValueToOptions(retval, \"clicktargeturlhost\", clickTargetUrlHost);\n            for (const key of Object.keys(dyndata)) {\n                this.appendValueToOptions(retval, key, dyndata[key]);\n            }\n            this.handleCommonClickTargetType(jQueryElmen, retval, clickTargetUrlHost);\n            if (PageUtils_1.PageUtils.isContactPhoneLink(jQueryElmen, this.localWindow)) {\n                this.appendValueToOptions(retval, \"contacttype\", \"call\");\n            }\n            else if (PageUtils_1.PageUtils.isContactEmailLink(jQueryElmen, this.localWindow)) {\n                this.appendValueToOptions(retval, \"contacttype\", \"email\");\n            }\n            if (this.localWindow.utag_data\n                && this.localWindow.utag_data.page_name\n                && this.localWindow.utag_data.page_name.length > 0) {\n                retval.event_source = this.localWindow.utag_data.page_name;\n            }\n            this.addParamsFromPDL(retval, this.localWindow.utag_data);\n        }\n        return retval;\n    }\n}\nexports.OfficeOnOptionsService = OfficeOnOptionsService;\n\n\n//# sourceURL=webpack://kits/./src/service/optionServices/OfficeOnOptionsService.ts?");
239
240/***/ }),
241
242/***/ "./src/service/optionServices/TealiumOptionsService.ts":
243/*!*************************************************************!*\
244  !*** ./src/service/optionServices/TealiumOptionsService.ts ***!
245  \*************************************************************/
246/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
247
248"use strict";
249eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.TealiumOptionsService = void 0;\nconst DataUtils_1 = __webpack_require__(/*! ../../util/DataUtils */ \"./src/util/DataUtils.ts\");\nconst PageUtils_1 = __webpack_require__(/*! ../../util/PageUtils */ \"./src/util/PageUtils.ts\");\nconst AbstractOptionsService_1 = __webpack_require__(/*! ./AbstractOptionsService */ \"./src/service/optionServices/AbstractOptionsService.ts\");\nclass TealiumOptionsService extends AbstractOptionsService_1.AbstractOptionsService {\n    constructor(windowObject) {\n        super();\n        if (typeof windowObject !== \"undefined\") {\n            this.localWindow = windowObject;\n        }\n        else {\n            if (typeof window !== \"undefined\") {\n                this.localWindow = window;\n            }\n        }\n        this._$ = this.localWindow.$;\n    }\n    createOptions(jQueryElmen) {\n        const retval = {};\n        if (jQueryElmen !== null && typeof jQueryElmen !== \"undefined\") {\n            const data = jQueryElmen.data();\n            const dyndata = DataUtils_1.DataUtils.extractDyndata(data);\n            this.handleCommonAttributes(retval, jQueryElmen);\n            const clickTargetUrlHost = PageUtils_1.PageUtils.getClickTargetUrlHost(jQueryElmen, this.localWindow);\n            this.appendValueToOptions(retval, \"clicktargeturlhost\", clickTargetUrlHost);\n            if (PageUtils_1.PageUtils.isAddToCart(jQueryElmen)) {\n                this.appendValueToOptions(retval, \"tealiumevent\", \"PT_BasketAdd_Click\");\n            }\n            else if (PageUtils_1.PageUtils.isRetailConnectOpenLayerClick(jQueryElmen)) {\n                this.appendValueToOptionsIfAbsent(retval, \"tealiumevent\", \"PT_RetailConnectOpenLayer_Click\");\n            }\n            else {\n                this.appendValueToOptionsIfAbsent(retval, \"tealiumevent\", \"PT_Generic_Click\");\n            }\n            for (const key of Object.keys(dyndata)) {\n                this.appendValueToOptions(retval, key, dyndata[key]);\n            }\n            this.handleCommonClickTargetType(jQueryElmen, retval, clickTargetUrlHost);\n            if (PageUtils_1.PageUtils.isContactPhoneLink(jQueryElmen, this.localWindow)) {\n                this.appendValueToOptions(retval, \"contacttype\", \"call\");\n            }\n            else if (PageUtils_1.PageUtils.isContactEmailLink(jQueryElmen, this.localWindow)) {\n                this.appendValueToOptions(retval, \"contacttype\", \"email\");\n            }\n            const filterParams = PageUtils_1.PageUtils.getFilterParams(jQueryElmen, this._$);\n            for (const key of Object.keys(filterParams)) {\n                this.appendValueToOptions(retval, key, filterParams[key]);\n            }\n            if (this.localWindow.utag_data\n                && this.localWindow.utag_data.page_name\n                && this.localWindow.utag_data.page_name.length > 0) {\n                retval.event_source = this.localWindow.utag_data.page_name;\n            }\n            this.addParamsFromPDL(retval, this.localWindow.utag_data);\n            if (retval.tealiumevent === \"PT_RetailConnectOpenLayer_Click\"\n                || retval.tealiumevent === \"PT_RetailConnectRetailLink_Click\") {\n                const retailConnectResolver = {};\n                retailConnectResolver.baretoolnumber = \"baretool_number\";\n                retailConnectResolver.batteryvoltage = \"battery_voltage\";\n                retailConnectResolver.masterordernumber = \"master_order_number\";\n                retailConnectResolver.productavailability = \"product_availability\";\n                retailConnectResolver.producttradecode = \"product_bi_trade_co
249de\";\n                retailConnectResolver.producttradename = \"product_bi_trade_name\";\n                retailConnectResolver.producttraderelevance = \"product_bi_trade_relevance\";\n                retailConnectResolver.productbrand = \"product_brand\";\n                retailConnectResolver.productcategory = \"product_category\";\n                retailConnectResolver.productcategoryid = \"product_category_id\";\n                retailConnectResolver.productid = \"product_id\";\n                retailConnectResolver.productname = \"product_name\";\n                retailConnectResolver.productprice = \"product_price\";\n                this.addParamsFromPDLWithGivenDecorator(retval, retailConnectResolver, this.localWindow.utag_data);\n            }\n        }\n        return retval;\n    }\n}\nexports.TealiumOptionsService = TealiumOptionsService;\n\n\n//# sourceURL=webpack://kits/./src/service/optionServices/TealiumOptionsService.ts?");
250
251/***/ }),
252
253/***/ "./src/tracker/AbstractTracker.ts":
254/*!****************************************!*\
255  !*** ./src/tracker/AbstractTracker.ts ***!
256  \****************************************/
257/***/ ((__unused_webpack_module, exports) => {
258
259"use strict";
260eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.AbstractTracker = void 0;\nclass AbstractTracker {\n    isDOM(obj) {\n        if (\"HTMLElement\" in this.localWindow) {\n            return (obj && obj instanceof this.localWindow.HTMLElement);\n        }\n        return !!(obj && typeof obj === \"object\" && obj.nodeType === 1 && obj.nodeName);\n    }\n    appendValueToOptions(options, key, value) {\n        if (key !== null && typeof key !== \"undefined\" && value !== null && typeof value !== \"undefined\") {\n            options[key] = value;\n        }\n    }\n    resolveParams(trackingParams) {\n        const options = {};\n        if (trackingParams !== null && typeof trackingParams === \"object\") {\n            for (const key of Object.keys(trackingParams)) {\n                const resolved = this.paramResolver.resolve(key);\n                if (resolved !== null && typeof resolved !== \"undefined\") {\n                    options[resolved] = trackingParams[key];\n                }\n            }\n        }\n        return options;\n    }\n    getTrackingParams(...args) {\n        let trackingElem = null;\n        let trackingParams = {};\n        let trackingOptions = {};\n        for (const entry of args) {\n            if (entry instanceof this._$) {\n                trackingElem = entry;\n            }\n            if (this.isDOM(entry)) {\n                trackingElem = this._$(entry);\n            }\n            if (typeof entry === \"object\" && (!(entry instanceof this._$) || !(this.isDOM(entry)))) {\n                trackingParams = entry;\n            }\n        }\n        if (trackingElem !== null && typeof trackingElem !== \"undefined\") {\n            trackingOptions = this.optionsService.createOptions(trackingElem);\n        }\n        for (const key of Object.keys(trackingParams)) {\n            this.appendValueToOptions(trackingOptions, key, trackingParams[key]);\n        }\n        const resolvedParams = {};\n        resolvedParams[this.trackerName] = this.resolveParams(trackingOptions);\n        return resolvedParams;\n    }\n    fetchTrackingOptions(args) {\n        let trackingElem = null;\n        let trackingParams = {};\n        let trackingOptions = {};\n        for (const entry of args) {\n            if (entry instanceof this._$) {\n                trackingElem = entry;\n            }\n            if (this.isDOM(entry)) {\n                trackingElem = this._$(entry);\n            }\n            if (typeof entry === \"object\" && (!(entry instanceof this._$) || !(this.isDOM(entry)))) {\n                trackingParams = entry;\n            }\n        }\n        if (trackingElem !== null && typeof trackingElem !== \"undefined\") {\n            trackingOptions = this.optionsService.createOptions(trackingElem);\n        }\n        for (const key of Object.keys(trackingParams)) {\n            this.appendValueToOptions(trackingOptions, key, trackingParams[key]);\n        }\n        return trackingOptions;\n    }\n}\nexports.AbstractTracker = AbstractTracker;\n\n\n//# sourceURL=webpack://kits/./src/tracker/AbstractTracker.ts?");
261
262/***/ }),
263
264/***/ "./src/tracker/GTMTracker.ts":
265/*!***********************************!*\
266  !*** ./src/tracker/GTMTracker.ts ***!
267  \***********************************/
268/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
269
270"use strict";
271eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.GTMTracker = void 0;\nconst GTMDataLayer_1 = __webpack_require__(/*! ../model/GTMDataLayer */ \"./src/model/GTMDataLayer.ts\");\nconst GTMRetailConnect_1 = __webpack_require__(/*! ../model/GTMRetailConnect */ \"./src/model/GTMRetailConnect.ts\");\nconst GTMEcommerceItem_1 = __webpack_require__(/*! ../model/GTMEcommerceItem */ \"./src/model/GTMEcommerceItem.ts\");\nconst GTMEcommerce_1 = __webpack_require__(/*! ../model/GTMEcommerce */ \"./src/model/GTMEcommerce.ts\");\nconst GtmEventBuffer_1 = __webpack_require__(/*! ../util/GtmEventBuffer */ \"./src/util/GtmEventBuffer.ts\");\nconst PageUtils_1 = __webpack_require__(/*! ../util/PageUtils */ \"./src/util/PageUtils.ts\");\nconst GTMFilterClick_1 = __webpack_require__(/*! ../model/GTMFilterClick */ \"./src/model/GTMFilterClick.ts\");\nconst GTMFormInitialized_1 = __webpack_require__(/*! ../model/GTMFormInitialized */ \"./src/model/GTMFormInitialized.ts\");\nconst GTMFormSubmit_1 = __webpack_require__(/*! ../model/GTMFormSubmit */ \"./src/model/GTMFormSubmit.ts\");\nconst DataUtils_1 = __webpack_require__(/*! ../util/DataUtils */ \"./src/util/DataUtils.ts\");\nconst PromotionTeaserTrackingObserver_1 = __webpack_require__(/*! ../observer/PromotionTeaserTrackingObserver */ \"./src/observer/PromotionTeaserTrackingObserver.ts\");\nconst AbstractTracker_1 = __webpack_require__(/*! ./AbstractTracker */ \"./src/tracker/AbstractTracker.ts\");\nconst ECOMMERCE_NULL_TRACKING_DATA = { ecommerce: null };\nclass GTMTracker extends AbstractTracker_1.AbstractTracker {\n    constructor(windowObject) {\n        super();\n        this.trackerName = \"GTM\";\n        this.localWindow = windowObject === undefined ? globalThis : windowObject;\n        this._$ = this.localWindow.$;\n        this.gtm = new GtmEventBuffer_1.GtmEventBuffer(this.localWindow);\n    }\n    track(...args) {\n        let actualArgs = args;\n        if (args.length === 1 && Array.isArray(args[0])) {\n            actualArgs = args[0];\n        }\n        if (actualArgs.length > 0) {\n            const trackingOptions = this.fetchTrackingOptions(actualArgs);\n            return this.trackInternal(trackingOptions);\n        }\n        return false;\n    }\n    shouldTrack() {\n        return PageUtils_1.PageUtils.isGTMTracking(this.localWindow);\n    }\n    registerAtService(trackingService) {\n        trackingService.registerTracker(this);\n    }\n    setParamResolver(resolver) {\n        this.paramResolver = resolver;\n    }\n    getParamResolver() {\n        return this.paramResolver;\n    }\n    setOptionsService(optionsService) {\n        this.optionsService = optionsService;\n    }\n    getTrackerName() {\n        return this.trackerName;\n    }\n    getTrackingParams(...args) {\n        const tName = this.trackerName;\n        const trackingParams = {};\n        let internalParams = {};\n        trackingParams[tName] = {};\n        if (\"undefined\" !== typeof args) {\n            for (const entry of args) {\n                if (typeof entry === \"object\" && !(entry instanceof this._$)) {\n                    internalParams = entry;\n                }\n            }\n            trackingParams[tName] = this.resolveParams(internalParams);\n        }\n        return trackingParams;\n    }\n    setTrackerName(trackerName) {\n        this.trackerName = trackerName;\n    }\n    onPageLoadEvents() {\n        if (!this.shouldTrack()) {\n            return false;\n        }\n        this.localWindow.document.addEventListener(\"DOMContentLoaded\", () => {\n            this.trackViewItemListEvent();\n            this.trackViewPromotionEvent();\n        });\n        this.localWindow.document.addEventListener(\"LoadMoreCompleted\", (event) => {\n            this.trackViewItemListEvent(event.detail || null);\n        });\n    }\n    trackInternal(params) {\n        if (params != null) {\n            let options = {};\n            let trackMe;\n            if (this.isTrackingParamsAlreadyResolved(params)) {\n                trackMe = params;\n            }\n            else {\n                options = this.resolveParams(params);\n                trackMe = this.convert(options);\n            }\n            if (trackMe === undefined || trackMe === null) {\n                return false;\n            }\n            this.trackGTM(ECOMMERCE_NULL_TRACKING_DATA);\n            return this.trackGTM(trackMe);\n        }\n        return false;\n    }\n    trackViewPromotionEvent() {\n        const promotionTeaserTrackingObserver = new PromotionTeaserTrackingObserver_1.PromotionTeaserTrackingObserver(this._$, this.localWindow.document, ($element) => {\n            const promotionId = $element.data(\"track_dyn_teaserid\");\n            const promotionName = $element.data(\"track_dyn_teasername\");\n            const promotionCreative = $element.data(\"track_dyn_creativename\");\n            const imageFilename = promotionCreative || DataUtils_1.DataUtils.findClosestImageFilename($element);\n            if (promotionId || promotionName) {\n                const gtmEcommerce = new GTMEcommerce_1.GTMEcommerce(false);\n                gtmEcommerce.promotion_id = promotionId || \"\";\n                gtmEcommerce.promotion_name = promotionName || \"\";\n                gtmEcommerce.creative_name = imageFilename || \"\";\n                this.trackGTM(ECOMMERCE_NULL_TRACKING_DATA);\n                this.trackGTM(new GTMDataLayer_1.GTMDataLayer(gtmEcommerce, \"view_promotion\"));\n            }\n        });\n        promotionTeaserTrackingObserver.start();\n    }\n    trackViewItemListEvent(productListElements = null) {\n        const jQ = this._$;\n        const gtmEcommerce = new GTMEcommerce_1.GTMEcommerce();\n        const productLists = productListElements !== null && productListElements !== void 0 ? productListElements : Array.from(this.localWindow.document.querySelectorAll(\"[data-track_gtm_list_name]\"));
271\n        productLists.forEach((value) => {\n            const listElements = value.querySelectorAll(\"[data-track_product_list_sku]\");\n            listElements.forEach((item) => {\n                const jqueryElement = jQ(item);\n                const options = this.optionsService.createOptions(jqueryElement);\n                const resolvedParams = this.resolveParams(options);\n                gtmEcommerce.currency = globalThis.gtm_data.currency || \"\";\n                gtmEcommerce.items.push(new GTMEcommerceItem_1.GTMEcommerceItem(resolvedParams));\n            });\n        });\n        if (gtmEcommerce.items.length > 0) {\n            this.trackGTM(ECOMMERCE_NULL_TRACKING_DATA);\n            this.trackGTM(new GTMDataLayer_1.GTMDataLayer(gtmEcommerce, \"view_item_list\"));\n        }\n    }\n    convert(options) {\n        if (options.tealium_event && options.tealium_event === \"PT_Form_Initialized\") {\n            return new GTMFormInitialized_1.GTMFormInitialized(options.form_name, options.form_type);\n        }\n        if (options.tealium_event && options.tealium_event === \"PT_FormSubmit_Click\") {\n            return new GTMFormSubmit_1.GTMFormSubmit(options.form_name, options.form_type, options.form_step_name, options.email);\n        }\n        if (options.tealium_event && options.tealium_event === \"PT_RetailConnectOpenLayer_Click\") {\n            return new GTMRetailConnect_1.GTMRetailConnect(options, \"retail_connect_open_layer\");\n        }\n        if (options.tealium_event && options.tealium_event === \"PT_RetailConnectRetailLink_Click\") {\n            return new GTMRetailConnect_1.GTMRetailConnect(options, \"retail_connect_link_click\");\n        }\n        if (options.tealium_event && options.tealium_event === \"PT_BasketAdd_Click\") {\n            const ecommerceItem = new GTMEcommerceItem_1.GTMEcommerceItem(options);\n            const gtmEcommerce = new GTMEcommerce_1.GTMEcommerce();\n            gtmEcommerce.currency = globalThis.gtm_data.currency || \"\";\n            gtmEcommerce.items.push(ecommerceItem);\n            return new GTMDataLayer_1.GTMDataLayer(gtmEcommerce, \"add_to_cart\");\n        }\n        if (options.event_type && options.event_type === \"product_click\") {\n            const ecommerceItem = new GTMEcommerceItem_1.GTMEcommerceItem(options);\n            const gtmEcommerce = new GTMEcommerce_1.GTMEcommerce();\n            gtmEcommerce.currency = globalThis.gtm_data.currency || \"\";\n            gtmEcommerce.items.push(ecommerceItem);\n            return new GTMDataLayer_1.GTMDataLayer(gtmEcommerce, \"select_item\");\n        }\n        if (options.promotion_id || options.promotion_name) {\n            const gtmEcommerce = new GTMEcommerce_1.GTMEcommerce(false);\n            gtmEcommerce.promotion_id = options.promotion_id || \"\";\n            gtmEcommerce.promotion_name = options.promotion_name || \"\";\n            gtmEcommerce.creative_name = options.creative_name || \"\";\n            return new GTMDataLayer_1.GTMDataLayer(gtmEcommerce, \"select_promotion\");\n        }\n        if (options.filter_action) {\n            const gtmFilterClick = new GTMFilterClick_1.GTMFilterClick();\n            gtmFilterClick.event = options.filter_action === \"Add\" ? \"add_filter\" : \"remove_filter\";\n            gtmFilterClick.filter_category = options.filter_category || \"\";\n            gtmFilterClick.filter_name = options.filter_name || \"\";\n            gtmFilterClick.filter_value = options.filter_value || \"\";\n            return gtmFilterClick;\n        }\n    }\n    isTrackingParamsAlreadyResolved(trackingParams) {\n        return trackingParams.event === \"view_item\"\n            || trackingParams.event === \"select_item\";\n    }\n    trackGTM(trackingObject) {\n        const stringify = JSON.stringify(trackingObject);\n        console.debug(\"gtm options:\", stringify);\n        if (stringify !== undefined) {\n            this.gtm.push(JSON.parse(stringify));\n            return true;\n        }\n        return false;\n    }\n}\nexports.GTMTracker = GTMTracker;\n\n\n//# sourceURL=webpack://kits/./src/tracker/GTMTracker.ts?");
272
273/***/ }),
274
275/***/ "./src/tracker/OfficeOnTracker.ts":
276/*!****************************************!*\
277  !*** ./src/tracker/OfficeOnTracker.ts ***!
278  \****************************************/
279/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
280
281"use strict";
282eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.OfficeOnTracker = void 0;\nconst PageUtils_1 = __webpack_require__(/*! ../util/PageUtils */ \"./src/util/PageUtils.ts\");\nconst AbstractTracker_1 = __webpack_require__(/*! ./AbstractTracker */ \"./src/tracker/AbstractTracker.ts\");\nclass OfficeOnTracker extends AbstractTracker_1.AbstractTracker {\n    constructor(windowObject) {\n        super();\n        this.trackerName = \"OfficeOn\";\n        this.localWindow = windowObject === undefined ? globalThis : windowObject;\n        this._$ = this.localWindow.$;\n    }\n    track(...args) {\n        let actualArgs = args;\n        if (args.length === 1 && Array.isArray(args[0])) {\n            actualArgs = args[0];\n        }\n        if (actualArgs.length > 0) {\n            const trackingOptions = this.fetchTrackingOptions(actualArgs);\n            return this.trackInternal(trackingOptions);\n        }\n        return false;\n    }\n    shouldTrack() {\n        return PageUtils_1.PageUtils.isBoschOfficeOn(this.localWindow);\n    }\n    registerAtService(trackingService) {\n        trackingService.registerTracker(this);\n    }\n    setParamResolver(resolver) {\n        this.paramResolver = resolver;\n    }\n    getParamResolver() {\n        return this.paramResolver;\n    }\n    getTrackerName() {\n        return this.trackerName;\n    }\n    getTrackingParams(...args) {\n        return super.getTrackingParams(args);\n    }\n    setTrackerName(trackerName) {\n        this.trackerName = trackerName;\n    }\n    setOptionsService(optionsService) {\n        this.optionsService = optionsService;\n    }\n    trackInternal(params) {\n        if (params != null) {\n            let options = {};\n            console.debug(\"Raw Options 'track':\", params);\n            options = this.resolveParams(params);\n            console.debug(this.trackerName + \" options:\", options);\n            if (this.localWindow.utag &&\n                this.localWindow.utag.link && typeof this.localWindow.utag.link === \"function\") {\n                this.localWindow.utag.link(options);\n                return true;\n            }\n            else {\n                return false;\n            }\n        }\n        return false;\n    }\n}\nexports.OfficeOnTracker = OfficeOnTracker;\n\n\n//# sourceURL=webpack://kits/./src/tracker/OfficeOnTracker.ts?");
283
284/***/ }),
285
286/***/ "./src/tracker/TealiumTracker.ts":
287/*!***************************************!*\
288  !*** ./src/tracker/TealiumTracker.ts ***!
289  \***************************************/
290/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
291
292"use strict";
293eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.TealiumTracker = void 0;\nconst AbstractTracker_1 = __webpack_require__(/*! ./AbstractTracker */ \"./src/tracker/AbstractTracker.ts\");\nconst PageUtils_1 = __webpack_require__(/*! ../util/PageUtils */ \"./src/util/PageUtils.ts\");\nconst DataUtils_1 = __webpack_require__(/*! ../util/DataUtils */ \"./src/util/DataUtils.ts\");\nconst ProductCartMapUtils_1 = __webpack_require__(/*! ../util/ProductCartMapUtils */ \"./src/util/ProductCartMapUtils.ts\");\nconst TealiumEventBuffer_1 = __webpack_require__(/*! ../util/TealiumEventBuffer */ \"./src/util/TealiumEventBuffer.ts\");\nconst PromotionTeaserTrackingObserver_1 = __webpack_require__(/*! ../observer/PromotionTeaserTrackingObserver */ \"./src/observer/PromotionTeaserTrackingObserver.ts\");\nclass TealiumTracker extends AbstractTracker_1.AbstractTracker {\n    constructor(windowObject) {\n        super();\n        this.trackerName = \"Tealium\";\n        this.localWindow = windowObject === undefined ? globalThis : windowObject;\n        this._$ = this.localWindow.$;\n        this.eventBuffer = new TealiumEventBuffer_1.TealiumEventBuffer(this.localWindow);\n    }\n    track(...args) {\n        let actualArgs = args;\n        if (args.length === 1 && Array.isArray(args[0])) {\n            actualArgs = args[0];\n        }\n        if (actualArgs.length > 0) {\n            const trackingOptions = this.fetchTrackingOptions(actualArgs);\n            return this.trackInternal(trackingOptions);\n        }\n        return false;\n    }\n    shouldTrack() {\n        return (!PageUtils_1.PageUtils.isBoschOfficeOn(this.localWindow) &&\n            !PageUtils_1.PageUtils.isGTMTracking(this.localWindow));\n    }\n    registerAtService(trackingService) {\n        trackingService.registerTracker(this);\n    }\n    setParamResolver(resolver) {\n        this.paramResolver = resolver;\n    }\n    getParamResolver() {\n        return this.paramResolver;\n    }\n    getTrackerName() {\n        return this.trackerName;\n    }\n    setOptionsService(optionsService) {\n        this.optionsService = optionsService;\n    }\n    getTrackingParams(...args) {\n        const tName = this.trackerName;\n        const trackingParams = {};\n        let internalParams = {};\n        trackingParams[tName] = {};\n        if (args.length > 0) {\n            for (const entry of args) {\n                if (typeof entry === \"object\" && !(entry instanceof this._$)) {\n                    internalParams = entry;\n                }\n            }\n            trackingParams[tName] = this.resolveParams(internalParams);\n        }\n        return trackingParams;\n    }\n    setTrackerName(trackerName) {\n        this.trackerName = trackerName;\n    }\n    trackViewPromotionEvent() {\n        const promotionTeaserTrackingObserver = new PromotionTeaserTrackingObserver_1.PromotionTeaserTrackingObserver(this._$, this.localWindow.document, ($element) => {\n            const promotionId = $element.data(\"track_dyn_teaserid\");\n            const promotionName = $element.data(\"track_dyn_teasername\");\n            const promotionCreative = $element.data(\"track_dyn_creativename\");\n            const creativeName = promotionCreative || DataUtils_1.DataUtils.findClosestImageFilename($element);\n            if (promotionId || promotionName) {\n                this.trackInternal({\n                    creativename: creativeName || \"\",\n                    tealiumevent: \"PT_Promotion_View\",\n                    teaserid: promotionId || \"\",\n                    teasername: promotionName || \"\",\n                });\n            }\n        });\n        promotionTeaserTrackingObserver.start();\n    }\n    trackInternal(params) {\n        if (params != null) {\n            let options = {};\n            console.debug(\"Raw Options 'track':\", params);\n            options = this.resolveParams(params);\n            console.debug(this.trackerName + \" options:\", options);\n            const utagFunction = this.isPageLoadEvent(options, params) ? \"view\" : \"link\";\n            return this.eventBuffer.push(utagFunction, options);\n        }\n        return false;\n    }\n    isPageLoadEvent(resolvedOptions, rawParams) {\n        var _a;\n        const event = (_a = resolvedOptions.tealium_event) !== null && _a !== void 0 ? _a : rawParams.tealiumevent;\n        return typeof event === \"string\" && event.trim().endsWith(\"_Pageload\");\n    }\n    onPageLoadEvents() {\n        if (!this.shouldTrack()) {\n            return false;\n        }\n        this.localWindow.document.addEventListener(\"DOMContentLoaded\", () => {\n            this.trackViewItemListEvent();\n            this.trackViewPromotionEvent();\n        });\n        this.localWindow.document.addEventListener(\"LoadMoreCompleted\", (event) => {\n            this.trackViewItemListEvent(event.detail || null);\n        });\n    }\n    trackViewItemListEvent(productListElements = null) {\n        const jQ = this._$;\n        const productCartMap = this.localWindow.productCartMap;\n        const listNames = [];\n        const listIds = [];\n        const indices = [];\n        const productIds = [];\n        const productNames = [];\n        const prices = [];\n        const brands = [];\n        const categories = [];\n        const categoryIds = [];\n        const availabilities = [];\n        const quantities = [];\n        const cordlessTools = [];\n        const baretoolNumbers = [];\n        const batteryVoltages = [];
293\n        const masterOrderNumbers = [];\n        const productLists = productListElements !== null && productListElements !== void 0 ? productListElements : Array.from(this.localWindow.document.querySelectorAll(\"[data-track_gtm_list_name]\"));\n        productLists.forEach((container) => {\n            const listItems = container.querySelectorAll(\"[data-track_product_list_sku]\");\n            listItems.forEach((item) => {\n                const jqItem = jQ(item);\n                const product = this.collectProductParams(jqItem, productCartMap);\n                const single = ProductCartMapUtils_1.ProductCartMapUtils.toSingleValue;\n                listNames.push(PageUtils_1.PageUtils.getClickedElementListNameForGTM(jqItem) || \"\");\n                listIds.push(PageUtils_1.PageUtils.getParentElementIdForGTM(jqItem) || \"\");\n                indices.push(PageUtils_1.PageUtils.getClickedElementIndexForGTM(jqItem) || \"\");\n                productIds.push(single(product.productid));\n                productNames.push(single(product.productname));\n                prices.push(DataUtils_1.DataUtils.convertEmptyPriceToZero(DataUtils_1.DataUtils.normalizePrice(single(product.productprice))));\n                brands.push(single(product.productbrand));\n                categories.push(single(product.productcategory));\n                categoryIds.push(single(product.productcategoryid));\n                availabilities.push(single(product.productavailability));\n                quantities.push(\"1\");\n                cordlessTools.push(single(product.cordlesstool));\n                baretoolNumbers.push(single(product.baretoolnumber));\n                batteryVoltages.push(single(product.batteryvoltage));\n                masterOrderNumbers.push(single(product.masterordernumber));\n            });\n        });\n        if (listNames.length === 0) {\n            return;\n        }\n        const options = {};\n        const linkDecoration = this.localWindow.linkDecoration;\n        const utagData = this.localWindow.utag_data;\n        if (linkDecoration && typeof linkDecoration === \"object\" && utagData) {\n            for (const key of Object.keys(linkDecoration)) {\n                const utagKey = linkDecoration[key];\n                if (utagData[utagKey] !== undefined) {\n                    options[key] = utagData[utagKey];\n                }\n            }\n        }\n        options.tealiumevent = \"PT_ProductList_Pageload\";\n        options.product_list_name = listNames;\n        options.product_list_id = listIds;\n        options.product_index = indices;\n        options.productid = productIds;\n        options.productname = productNames;\n        options.productprice = prices;\n        options.productbrand = brands;\n        options.productcategory = categories;\n        options.productcategoryid = categoryIds;\n        options.productavailability = availabilities;\n        options.productquantity = quantities;\n        options.cordlesstool = cordlessTools;\n        options.baretoolnumber = baretoolNumbers;\n        options.batteryvoltage = batteryVoltages;\n        options.masterordernumber = masterOrderNumbers;\n        this.trackInternal(options);\n    }\n    collectProductParams(jqItem, productCartMap) {\n        const params = {};\n        const dyndata = DataUtils_1.DataUtils.extractDyndata(jqItem.data());\n        for (const key of TealiumTracker.PRODUCT_ITEM_KEYS) {\n            if (typeof dyndata[key] !== \"undefined\") {\n                params[key] = dyndata[key];\n            }\n        }\n        const sku = PageUtils_1.PageUtils.getClickedElementSkuForGTM(jqItem);\n        const fromCartMap = ProductCartMapUtils_1.ProductCartMapUtils.collectProductParams(productCartMap, sku);\n        for (const key of Object.keys(fromCartMap)) {\n            params[key] = fromCartMap[key];\n        }\n        return params;\n    }\n}\nexports.TealiumTracker = TealiumTracker;\nTealiumTracker.PRODUCT_ITEM_KEYS = [\n    \"productid\",\n    \"productname\",\n    \"productprice\",\n    \"productbrand\",\n    \"productcategory\",\n    \"productcategoryid\",\n    \"productavailability\",\n    \"productquantity\",\n    \"cordlesstool\",\n    \"baretoolnumber\",\n    \"batteryvoltage\",\n    \"masterordernumber\",\n];\n\n\n//# sourceURL=webpack://kits/./src/tracker/TealiumTracker.ts?");
294
295/***/ }),
296
297/***/ "./src/util/DataUtils.ts":
298/*!*******************************!*\
299  !*** ./src/util/DataUtils.ts ***!
300  \*******************************/
301/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
302
303"use strict";
304eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.DataUtils = void 0;\nconst DataTuple_1 = __webpack_require__(/*! ../model/DataTuple */ \"./src/model/DataTuple.ts\");\nclass DataUtils {\n    static extractData(data, marker) {\n        if (typeof data !== \"undefined\") {\n            const extractedData = {};\n            const regExp = new RegExp(\"^track_\" + marker, \"g\");\n            for (const key of Object.keys(data)) {\n                const found = regExp.test(key);\n                if (found) {\n                    const strings = key.split(\"_\");\n                    if (strings.length === 4) {\n                        this.createDataTuple(extractedData, strings[3]);\n                        if (strings[2] === \"key\") {\n                            const usedTuple = extractedData[strings[3]];\n                            usedTuple.key = data[key];\n                            extractedData[strings[3]] = usedTuple;\n                        }\n                        if (strings[2] === \"value\") {\n                            const usedTuple = extractedData[strings[3]];\n                            usedTuple.value = data[key];\n                            extractedData[strings[3]] = usedTuple;\n                        }\n                    }\n                }\n            }\n            return extractedData;\n        }\n        return {};\n    }\n    static extractDyndata(data) {\n        if (typeof data !== \"undefined\") {\n            const extractedData = {};\n            for (const key of Object.keys(data)) {\n                const regExp = new RegExp(\"^track_dyn_\", \"g\");\n                const found = regExp.test(key);\n                if (found) {\n                    const strings = key.split(new RegExp(\"^track_dyn_\", \"g\"));\n                    extractedData[strings[1]] = data[key];\n                }\n            }\n            return extractedData;\n        }\n        return {};\n    }\n    static createDataTuple(resultObject, key) {\n        const testTuple = resultObject[key];\n        if (typeof testTuple === \"undefined\") {\n            resultObject[key] = new DataTuple_1.DataTuple();\n        }\n    }\n    static mapAvailability(availability) {\n        let mappedAvailability;\n        switch (availability) {\n            case \"in_stock\": {\n                mappedAvailability = \"in stock\";\n                break;\n            }\n            case \"limited_availability\": {\n                mappedAvailability = \"out of stock\";\n                break;\n            }\n            case \"low\": {\n                mappedAvailability = \"in stock\";\n                break;\n            }\n            default: {\n                mappedAvailability = \"out of stock\";\n                break;\n            }\n        }\n        return mappedAvailability;\n    }\n    static normalizePrice(price) {\n        if (price === undefined || price === null) {\n            return \"\";\n        }\n        const cleaned = String(price).replace(/[^\\d,.\\-]/g, \"\");\n        if (cleaned === \"\") {\n            return \"\";\n        }\n        const lastComma = cleaned.lastIndexOf(\",\");\n        const lastDot = cleaned.lastIndexOf(\".\");\n        if (lastComma > -1 && lastDot > -1) {\n            return lastComma > lastDot\n                ? cleaned.replace(/\\./g, \"\").replace(\",\", \".\")\n                : cleaned.replace(/,/g, \"\");\n        }\n        if (lastComma > -1) {\n            return /,\\d{1,2}$/.test(cleaned)\n                ? cleaned.replace(\",\", \".\")\n                : cleaned.replace(/,/g, \"\");\n        }\n        return cleaned;\n    }\n    static convertEmptyPriceToZero(price) {\n        if (price === \"\") {\n            return \"0.00\";\n        }\n        else {\n            return price;\n        }\n    }\n    static findClosestImageFilename(jqueryElement) {\n        if (!jqueryElement || jqueryElement.length === 0)\n            return null;\n        const extractFromStyle = (jqueryElement) => {\n            const style = jqueryElement.css(\"background-image\") || \"\";\n            const match = style.match(/url\\([\"']?(.*?)[\"']?\\)/i);\n            return match ? match[1] : null;\n        };\n        const findImageInDescendants = (jqueryElement) => {\n            const $img = jqueryElement.find(\"img\").first();\n            if ($img.length > 0)\n                return $img.attr(\"src\") || null;\n            const bg = extractFromStyle(jqueryElement);\n            if (bg)\n                return bg;\n            return null;\n        };\n        const extractFilename = (url) => {\n            try {\n                const cleanUrl = url.split(\"?\")[0].split(\"#\")[0];\n                return cleanUrl.substring(cleanUrl.lastIndexOf(\"/\") + 1);\n            }\n            catch (_a) {\n                return null;\n            }\n        };\n        let $current = jqueryElement;\n        while ($current && $current.length > 0 && $current[0] && $current[0].nodeType === 1) {\n            const foundUrl = findImageInDescendants($current);\n            if (foundUrl) {\n                const filename = extractFilename(foundUrl);\n                if (filename)\n                    return filename;\n            }\n            $current = $current.parent();\n        }\n        return null;\n    }\n}\nexports.DataUtils = DataUtils;\n\n\n//# sourceURL=webpack://kits/./src/util/DataUtils.ts?");
305
306/***/ }),
307
308/***/ "./src/util/GtmEventBuffer.ts":
309/*!************************************!*\
310  !*** ./src/util/GtmEventBuffer.ts ***!
311  \************************************/
312/***/ ((__unused_webpack_module, exports) => {
313
314"use strict";
315eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.GtmEventBuffer = void 0;\nclass GtmEventBuffer {\n    constructor(window) {\n        this.queue = [];\n        this.flushed = false;\n        this.window = window;\n        this.dataLayer = (window.dataLayer = window.dataLayer || []);\n        this.monitorGtmLoad();\n    }\n    push(event) {\n        if (this.flushed || this.hasGtmLoaded()) {\n            this.pushToDataLayer(event);\n        }\n        else {\n            this.queue.push(event);\n        }\n    }\n    monitorGtmLoad() {\n        const intervalId = this.window.setInterval(() => {\n            if (this.hasGtmLoaded()) {\n                this.window.clearInterval(intervalId);\n                this.flushQueue();\n            }\n        }, GtmEventBuffer.CHECK_INTERVAL);\n    }\n    flushQueue() {\n        this.queue.forEach(this.pushToDataLayer.bind(this));\n        this.queue = [];\n        this.flushed = true;\n        console.info('[GTM] Events erfolgreich übergeben nach gtm.load.');\n    }\n    hasGtmLoaded() {\n        return this.dataLayer.some(e => (e === null || e === void 0 ? void 0 : e.event) === 'bosch_privacy_update_analysis_on');\n    }\n    pushToDataLayer(event) {\n        this.dataLayer.push(event);\n        console.debug('[GTM] Event gepusht:', event);\n    }\n}\nexports.GtmEventBuffer = GtmEventBuffer;\nGtmEventBuffer.CHECK_INTERVAL = 200;\n\n\n//# sourceURL=webpack://kits/./src/util/GtmEventBuffer.ts?");
316
317/***/ }),
318
319/***/ "./src/util/PageUtils.ts":
320/*!*******************************!*\
321  !*** ./src/util/PageUtils.ts ***!
322  \*******************************/
323/***/ ((__unused_webpack_module, exports) => {
324
325"use strict";
326eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.PageUtils = void 0;\nclass PageUtils {\n    static getPageName(localWindow) {\n        const PAGENAME_ATTRIBUTE_NAME = \"track_pagename\";\n        const bodyElements = localWindow.document.getElementsByTagName(\"body\");\n        if (bodyElements.length === 1) {\n            const bodyElement = bodyElements[0];\n            const dataset = bodyElement.dataset;\n            if (PAGENAME_ATTRIBUTE_NAME in dataset) {\n                return dataset[PAGENAME_ATTRIBUTE_NAME];\n            }\n        }\n        return \"\";\n    }\n    static getTrackingModulePosition(jqueryElem, jquery) {\n        return this.findElemPos(this.TRACKING_MODULE_CSS_NAME, jqueryElem, jquery);\n    }\n    static getTrackingTeaserPosition(jqueryElem, jquery) {\n        let position = 0;\n        const moduleElem = jqueryElem.closest(\".\" + this.TRACKING_MODULE_CSS_NAME);\n        if (moduleElem.length > 0) {\n            moduleElem.find(\".\" + this.TRACKING_TEASER_CSS_NAME).each((index, elem) => {\n                const trackingElem = jquery(elem);\n                if (jqueryElem.is(trackingElem)) {\n                    position = index + 1;\n                    return false;\n                }\n                const found = trackingElem.find(jqueryElem);\n                if (found.length > 0) {\n                    position = index + 1;\n                    return false;\n                }\n            });\n        }\n        return position;\n    }\n    static getElementType(jqueryElem) {\n        return this.getElementData(this.TRACKING_ELEMENT_TYPE, jqueryElem);\n    }\n    static getElementInfo(jqueryElem) {\n        return this.getElementData(this.TRACKING_ELEMENT_INFO, jqueryElem);\n    }\n    static getLinkType(jqueryElem) {\n        let lType = this.getElementData(this.TRACKING_LINK_TYPE, jqueryElem);\n        if (!lType || lType.length === 0) {\n            lType = this.DEFAULT_LINK_TYPE;\n        }\n        return lType;\n    }\n    static getTeaserType(jqueryElem) {\n        const parentsElem = jqueryElem.closest(\".trackingTeaser\");\n        return parentsElem.data(\"track_teasertype\");\n    }\n    static getTeaserContent(jqueryElem) {\n        const parentsElem = jqueryElem.closest(\".trackingTeaser\");\n        return parentsElem.data(\"track_teasercontent\");\n    }\n    static getModuleType(jqueryElem) {\n        return jqueryElem.parents(\".trackingModule\").data(\"track_moduletype\");\n    }\n    static getFilterParams(jqueryElem, jquery) {\n        if (jqueryElem.hasClass(this.TRACKING_FILTER_ELEMENT_CSS_NAME)) {\n            const filterParams = {};\n            const filterAttr = this.getElementData(this.TRACKING_FILTER_ATTRIBUTE, jqueryElem);\n            if (filterAttr.length > 0) {\n                filterParams.filterattribute = filterAttr;\n            }\n            if (jqueryElem.prop(\"checked\") === true\n                || jqueryElem.find(\":selected\").length > 0\n                || (jqueryElem.prop(\"tagName\") === \"LABEL\" && !jqueryElem.hasClass(\"active\"))\n                || (jqueryElem.prop(\"tagName\") === \"A\" && jqueryElem.hasClass(\"active\"))\n                || (jqueryElem.prop(\"tagName\") === \"DIV\" && jqueryElem.hasClass(\"active\"))) {\n                filterParams.onoff = \"Add\";\n            }\n            else if (jqueryElem.prop(\"checked\") === false\n                || jqueryElem.find(\":selected\").length === 0\n                || (jqueryElem.prop(\"tagName\") === \"LABEL\" && jqueryElem.hasClass(\"active\"))\n                || (jqueryElem.prop(\"tagName\") === \"A\" && !jqueryElem.hasClass(\"active\"))\n                || (jqueryElem.prop(\"tagName\") === \"DIV\" && !jqueryElem.hasClass(\"active\"))) {\n                filterParams.onoff = \"Remove\";\n            }\n            filterParams.filtercategory = this.findFilterInformationByKey(jqueryElem, jquery, \"data-track-filter_category\");\n            filterParams.filtername = this.findFilterInformationByKey(jqueryElem, jquery, \"data-track-filter_name\");\n            const elVals = [];\n            const body = jqueryElem.parents(\"body\");\n            body.find(\"[data-track-filter_category]\").filter((index, elem) => {\n                const catElem = jquery(elem);\n                const checkedElems = catElem.find(\"input.\" + this.TRACKING_FILTER_ELEMENT_CSS_NAME + \":checked\");\n                if (checkedElems.length > 0) {\n                    const comboCat = catElem.data(this.TRACKING_FILTER_CATEGORY);\n                    elVals.push(comboCat);\n                }\n                else {\n                }\n                const selectedElems = catElem.find(\".\" + this.TRACKING_FILTER_ELEMENT_CSS_NAME + \":selected\");\n                if (selectedElems.length > 0) {\n                    selectedElems.each((i, el) => {\n                        const optionElem = jquery(el);\n                        elVals.push(optionElem.val());\n                    });\n                }\n                return false;\n            });\n            if (elVals.length > 0) {\n                filterParams.filtercomb = elVals.join(\"_\");\n            }\n            return filterParams;\n        }\n        return {};\n    }
326\n    static getClickTargetUrl(jQueryElmen, window) {\n        if (typeof jQueryElmen === \"undefined\") {\n            return null;\n        }\n        const href = jQueryElmen.attr(\"href\");\n        if (href === undefined) {\n            return null;\n        }\n        if (this.isAnchorLink(href)) {\n            return this.getCurrentUrl(window) + href;\n        }\n        if (this.isRelativeLink(href)) {\n            return window.location.protocol + href;\n        }\n        return href;\n    }\n    static getCurrentUrl(window) {\n        return window.location.href;\n    }\n    static getClickTargetUrlHost(jQueryElmen, window) {\n        if (typeof jQueryElmen === \"undefined\") {\n            return null;\n        }\n        const url = this.getClickTargetUrl(jQueryElmen, window);\n        if (url === null || !(url.startsWith(\"http\") && url.startsWith(\"https\"))) {\n            return null;\n        }\n        return this.getExtractProtocol(url) + \"://\" + this.getExtractHostname(url);\n    }\n    static isOtherHost(clickTargetUrlHost, window) {\n        if (clickTargetUrlHost == null) {\n            return false;\n        }\n        return !clickTargetUrlHost.includes(window.location.hostname);\n    }\n    static getClickElementClass(jQueryElmen) {\n        if (typeof jQueryElmen === \"undefined\") {\n            return null;\n        }\n        return jQueryElmen.attr(\"class\") || \"\";\n    }\n    static isAddToCart(jQueryElmen) {\n        const clickElementClass = this.getClickElementClass(jQueryElmen);\n        return clickElementClass.includes(\"addToCart\");\n    }\n    static isRetailConnectOpenLayerClick(jQueryElmen) {\n        const clickElementClass = PageUtils.getClickElementClass(jQueryElmen);\n        return clickElementClass.includes(\"o-dealer-bc__opener\");\n    }\n    static isBoschOfficeOn(window) {\n        return window.location.host.includes(\"bosch-officeon.com\") || window.location.host.includes(\"qa-officeon.kittelberger.net\");\n    }\n    static isContactLink(jQueryElmen, window) {\n        return this.isContactPhoneLink(jQueryElmen, window) || this.isContactEmailLink(jQueryElmen, window);\n    }\n    static isContactPhoneLink(jQueryElmen, window) {\n        const url = this.getClickTargetUrl(jQueryElmen, window);\n        return url === null\n            ? false\n            : url.startsWith(\"tel:\");\n    }\n    static isContactEmailLink(jQueryElmen, window) {\n        const url = this.getClickTargetUrl(jQueryElmen, window);\n        return url === null\n            ? false\n            : url.startsWith(\"mailto:\");\n    }\n    static isDownloadLink(jQueryElmen) {\n        if (typeof jQueryElmen === \"undefined\") {\n            return null;\n        }\n        const downloadAttribute = jQueryElmen.attr(\"download\");\n        const clickElementClass = this.getClickElementClass(jQueryElmen).includes(\"m-a-download_teaser__link\");\n        return (typeof downloadAttribute !== \"undefined\" && downloadAttribute !== false) || clickElementClass;\n    }\n    static isSocialExit(jQueryElmen) {\n        const clickElementClass = this.getClickElementClass(jQueryElmen);\n        return clickElementClass.includes(\"tracking_social_exit\");\n    }\n    static isSocialShare(jQueryElmen) {\n        const clickElementClass = this.getClickElementClass(jQueryElmen);\n        return clickElementClass.includes(\"tracking_social_share\");\n    }\n    static getClickElementId(jQueryElmen) {\n        if (typeof jQueryElmen === \"undefined\") {\n            return null;\n        }\n        return jQueryElmen.attr(\"id\") || null;\n    }\n    static getClickedElementSkuForGTM(jQueryElmen) {\n        const selectedSku = jQueryElmen.data(this.TRACKING_GTM_PRODUCT_LIST_SKU);\n        const selectedSkuInParent = jQueryElmen\n            .closest(this.TRACKING_GTM_PRODUCT_LIST_SKU_SELECTOR)\n            .data(this.TRACKING_GTM_PRODUCT_LIST_SKU);\n        if (selectedSku !== undefined) {\n            return selectedSku;\n        }\n        if (selectedSkuInParent !== undefined) {\n            return selectedSkuInParent;\n        }\n        return \"\";\n    }\n    static getClickedElementAddToCartSku(jQueryElmen) {\n        const selectedSku = jQueryElmen.data(this.TRACKING_GTM_ADD_TO_CART_SKU);\n        if (selectedSku !== undefined) {\n            return selectedSku;\n        }\n        return \"\";\n    }
326\n    static getClickedElementIndexForGTM(jQueryElmen) {\n        const selectedIndex = jQueryElmen.data(this.TRACKING_GTM_PRODUCT_LIST_ID);\n        const selectedIndexInParent = jQueryElmen\n            .closest(this.TRACKING_GTM_PRODUCT_LIST_ID_SELECTOR)\n            .data(this.TRACKING_GTM_PRODUCT_LIST_ID);\n        if (selectedIndex !== undefined) {\n            return selectedIndex;\n        }\n        if (selectedIndexInParent !== undefined) {\n            return selectedIndexInParent;\n        }\n        return null;\n    }\n    static getClickedElementListNameForGTM(jQueryElmen) {\n        const gtmListContainer = jQueryElmen.closest(this.TRACKING_GTM_PRODUCT_LIST_NAME_SELECTOR);\n        if (gtmListContainer !== undefined) {\n            return gtmListContainer.data(this.TRACKING_GTM_PRODUCT_LIST_NAME);\n        }\n        return \"\";\n    }\n    static getParentElementIdForGTM(jQueryElmen) {\n        let id = \"\";\n        const gtmListContainer = jQueryElmen.closest(this.TRACKING_GTM_PRODUCT_LIST_NAME_SELECTOR);\n        if (gtmListContainer !== undefined) {\n            id = gtmListContainer.attr(\"id\") || \"\";\n        }\n        if (!id && gtmListContainer.length > 0) {\n            const sectionElement = jQueryElmen.closest(\"section\");\n            if (sectionElement !== undefined) {\n                id = sectionElement.attr(\"id\") || \"\";\n            }\n        }\n        return id;\n    }\n    static isGTMTracking(localWindow) {\n        return localWindow.gtm_data !== undefined;\n    }\n    static getElementData(dataKey, jqueryElem) {\n        const data = jqueryElem.data(dataKey);\n        if (typeof data !== \"undefined\") {\n            return data.toString();\n        }\n        return \"\";\n    }\n    static findElemPos(containerCssName, jqueryElem, jquery) {\n        let position = 0;\n        jquery(\".\" + containerCssName).each((index, elem) => {\n            const find = jquery(elem).find(jqueryElem);\n            if (find.length > 0) {\n                position = index + 1;\n                return false;\n            }\n        });\n        return position;\n    }\n    static findFilterInformationByKey(parent, jquery, key) {\n        if (parent.prop(\"tagName\") === \"HTML\") {\n            return \"\";\n        }\n        if (parent.attr(key)) {\n            return parent.attr(key);\n        }\n        let cat = \"\";\n        parent.siblings().each((index, sibling) => {\n            const sblElem = jquery(sibling);\n            cat = sblElem.attr(key);\n            if (typeof cat !== \"undefined\" && cat.length > 0) {\n                return false;\n            }\n            sblElem.find(\"[\" + key + \"]\").each((innerIdx, child) => {\n                const childElem = jquery(child);\n                cat = childElem.attr(key);\n                if (typeof cat !== \"undefined\" && cat.length > 0) {\n                    return false;\n                }\n            });\n        });\n        if (typeof cat !== \"undefined\" && cat.length > 0) {\n            return cat;\n        }\n        return this.findFilterInformationByKey(parent.parent(), jquery, key);\n    }\n    static isAnchorLink(href) {\n        return href.startsWith(\"#\");\n    }\n    static isRelativeLink(href) {\n        return href.startsWith(\"//\");\n    }\n    static getExtractHostname(url) {\n        const match = url.match(/^(?:https?:\\/\\/)?(?:[^@\\n]+@)?([^:\\/\\n]+)/im);\n        return match ? match[1] : null;\n    }\n    static getExtractProtocol(url) {\n        const match = url.match(/^([a-z]+):\\/\\//i);\n        return match ? match[1] : null;\n    }\n}\nexports.PageUtils = PageUtils;\nPageUtils.TRACKING_MODULE_CSS_NAME = \"trackingModule\";\nPageUtils.TRACKING_TEASER_CSS_NAME = \"trackingTeaser\";\nPageUtils.TRACKING_ELEMENT_TYPE = \"track_elementtype\";\nPageUtils.TRACKING_ELEMENT_INFO = \"track_elementinfo\";\nPageUtils.TRACKING_LINK_TYPE = \"track_elementlinktype\";
326\nPageUtils.DEFAULT_LINK_TYPE = \"internal\";\nPageUtils.TRACKING_FILTER_ELEMENT_CSS_NAME = \"filterElement\";\nPageUtils.TRACKING_FILTER_ATTRIBUTE = \"track-filter-attribute\";\nPageUtils.TRACKING_FILTER_NAME = \"track-filter-name\";\nPageUtils.TRACKING_FILTER_CATEGORY = \"track-filter_category\";\nPageUtils.TRACKING_GTM_PRODUCT_LIST_SKU = \"track_product_list_sku\";\nPageUtils.TRACKING_GTM_ADD_TO_CART_SKU = \"sku\";\nPageUtils.TRACKING_GTM_PRODUCT_LIST_ID = \"track_product_list_id\";\nPageUtils.TRACKING_GTM_PRODUCT_LIST_NAME = \"track_gtm_list_name\";\nPageUtils.TRACKING_GTM_PRODUCT_LIST_SKU_SELECTOR = \"[data-track_product_list_sku]\";\nPageUtils.TRACKING_GTM_PRODUCT_LIST_ID_SELECTOR = \"[data-track_product_list_id]\";\nPageUtils.TRACKING_GTM_PRODUCT_LIST_NAME_SELECTOR = \"[data-track_gtm_list_name]\";\n\n\n//# sourceURL=webpack://kits/./src/util/PageUtils.ts?");
327
328/***/ }),
329
330/***/ "./src/util/ProductCartMapUtils.ts":
331/*!*****************************************!*\
332  !*** ./src/util/ProductCartMapUtils.ts ***!
333  \*****************************************/
334/***/ ((__unused_webpack_module, exports) => {
335
336"use strict";
337eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.ProductCartMapUtils = void 0;\nclass ProductCartMapUtils {\n    static collectProductParams(productCartMap, sku) {\n        const options = {};\n        if (productCartMap === undefined ||\n            productCartMap === null ||\n            sku === undefined) {\n            return options;\n        }\n        const product = productCartMap[sku] || {};\n        this.append(options, \"productid\", product.productSku);\n        this.append(options, \"productname\", product.productName);\n        this.append(options, \"productprice\", product.price);\n        this.append(options, \"productbrand\", \"Professional\");\n        this.append(options, \"productcategory\", product.productCategoryName);\n        this.append(options, \"productquantity\", product.quantity);\n        this.append(options, \"baretoolnumber\", product.baretoolNumber);\n        this.append(options, \"masterordernumber\", product.masterOrderNumber);\n        this.append(options, \"cordlesstool\", product.cordless_tool);\n        this.append(options, \"batteryvoltage\", product.battery_voltage);\n        this.append(options, \"productavailability\", product.product_availability);\n        this.append(options, \"productcategoryid\", product.product_category_id);\n        this.append(options, \"productmaincategory\", product.productMainCategoryName);\n        this.append(options, \"productbitradename\", product.product_trade_name);\n        this.append(options, \"productbitradecode\", product.product_trade_code);\n        this.append(options, \"productbitraderelevance\", product.product_trade_relevance);\n        return options;\n    }\n    static toSingleValue(value) {\n        if (value === undefined || value === null) {\n            return \"\";\n        }\n        if (Array.isArray(value)) {\n            return value.length > 0 ? value[0] : \"\";\n        }\n        return value;\n    }\n    static append(options, key, value) {\n        if (value !== null && typeof value !== \"undefined\") {\n            options[key] = value;\n        }\n    }\n}\nexports.ProductCartMapUtils = ProductCartMapUtils;\n\n\n//# sourceURL=webpack://kits/./src/util/ProductCartMapUtils.ts?");
338
339/***/ }),
340
341/***/ "./src/util/TealiumEventBuffer.ts":
342/*!****************************************!*\
343  !*** ./src/util/TealiumEventBuffer.ts ***!
344  \****************************************/
345/***/ ((__unused_webpack_module, exports) => {
346
347"use strict";
348eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.TealiumEventBuffer = void 0;\nclass TealiumEventBuffer {\n    constructor(window) {\n        this.queue = [];\n        this.intervalId = null;\n        this.waited = 0;\n        this.window = window;\n    }\n    push(utagFunction, payload) {\n        if (this.isReady(utagFunction)) {\n            return this.sendToUtag({ utagFunction, payload });\n        }\n        this.queue.push({ utagFunction, payload });\n        this.monitorUtagLoad();\n        return true;\n    }\n    monitorUtagLoad() {\n        if (this.intervalId !== null) {\n            return;\n        }\n        this.intervalId = this.window.setInterval(() => {\n            if (this.hasUtagLoaded()) {\n                this.stopMonitoring();\n                this.flushQueue();\n                return;\n            }\n            this.waited += TealiumEventBuffer.CHECK_INTERVAL;\n            if (this.waited >= TealiumEventBuffer.MAX_WAIT) {\n                this.stopMonitoring();\n                console.warn(\"[Tealium] utag.js wurde nicht geladen - \" + this.queue.length + \" Event(s) verworfen.\");\n                this.queue = [];\n            }\n        }, TealiumEventBuffer.CHECK_INTERVAL);\n    }\n    stopMonitoring() {\n        if (this.intervalId !== null) {\n            this.window.clearInterval(this.intervalId);\n            this.intervalId = null;\n        }\n    }\n    flushQueue() {\n        const pending = this.queue;\n        this.queue = [];\n        pending.forEach((call) => this.sendToUtag(call));\n        console.info(\"[Tealium] Events erfolgreich übergeben nach utag.js load.\");\n    }\n    isReady(utagFunction) {\n        const utag = this.window.utag;\n        return !!utag && typeof utag[utagFunction] === \"function\";\n    }\n    hasUtagLoaded() {\n        return this.queue.every((call) => this.isReady(call.utagFunction));\n    }\n    sendToUtag(call) {\n        const utag = this.window.utag;\n        if (utag && typeof utag[call.utagFunction] === \"function\") {\n            utag[call.utagFunction](call.payload);\n            console.debug(\"[Tealium] Event gesendet via utag.\" + call.utagFunction + \":\", call.payload);\n            return true;\n        }\n        return false;\n    }\n}\nexports.TealiumEventBuffer = TealiumEventBuffer;\nTealiumEventBuffer.CHECK_INTERVAL = 200;\nTealiumEventBuffer.MAX_WAIT = 30000;\n\n\n//# sourceURL=webpack://kits/./src/util/TealiumEventBuffer.ts?");
349
350/***/ })
350
351
352/******/ 	});
353/************************************************************************/
354/******/ 	// The module cache
355/******/ 	var __webpack_module_cache__ = {};
356/******/ 	
357/******/ 	// The require function
358/******/ 	function __webpack_require__(moduleId) {
359/******/ 		// Check if module is in cache
360/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
361/******/ 		if (cachedModule !== undefined) {
362/******/ 			return cachedModule.exports;
363/******/ 		}
364/******/ 		// Create a new module (and put it into the cache)
365/******/ 		var module = __webpack_module_cache__[moduleId] = {
366/******/ 			// no module.id needed
367/******/ 			// no module.loaded needed
368/******/ 			exports: {}
369/******/ 		};
370/******/ 	
371/******/ 		// Execute the module function
372/******/ 		__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
373/******/ 	
374/******/ 		// Return the exports of the module
375/******/ 		return module.exports;
376/******/ 	}
377/******/ 	
378/************************************************************************/
379/******/ 	
380/******/ 	// startup
381/******/ 	// Load entry module and return exports
382/******/ 	// This entry module can't be inlined because the eval devtool is used.
383/******/ 	var __webpack_exports__ = __webpack_require__("./src/kits.ts");
384/******/ 	
385/******/ })()
386;

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.