{"version":3,"file":"default/js/tabsLayout.js","mappings":"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","sources":["webpack://vodafoneziggo/webpack/runtime/chunk loaded","webpack://vodafoneziggo/./cartridges/app_vodafone_ziggo/cartridge/client/default/js/util/constants.js","webpack://vodafoneziggo/./cartridges/app_vodafone_ziggo/cartridge/client/default/js/tabsLayout.js","webpack://vodafoneziggo/./cartridges/app_vodafone_ziggo/cartridge/client/default/js/util/transitions.js","webpack://vodafoneziggo/webpack/bootstrap","webpack://vodafoneziggo/webpack/runtime/define property getters","webpack://vodafoneziggo/webpack/runtime/global","webpack://vodafoneziggo/webpack/runtime/hasOwnProperty shorthand","webpack://vodafoneziggo/webpack/runtime/runtimeId","webpack://vodafoneziggo/webpack/runtime/jsonp chunk loading","webpack://vodafoneziggo/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","'use strict';\n\nconst computedStyles = getComputedStyle(document.documentElement);\n\n/**\n * @constant {Object} events - All common events\n * @property {string} blur - Blur event\n * @property {string} change - Change event\n * @property {string} click - Click event\n * @property {string} keyUp - Keyup event\n * @property {string} load - Load event\n * @property {string} mousedown - Mouse down event\n * @property {string} mouseleave - Mouse leave event\n * @property {string} mouseover - Mouse over event\n * @property {string} popstate - Popstate event\n * @property {string} resize - Resize event\n * @property {string} scroll - Scroll event\n * @property {string} submit - Submit event\n * @property {string} update - Custom update event\n */\nconst events = {\n blur: 'blur',\n change: 'change',\n click: 'click',\n input: 'input',\n keyUp: 'keyup',\n load: 'load',\n mousedown: 'mousedown',\n mouseleave: 'mouseleave',\n mouseover: 'mouseover',\n paste: 'paste',\n popstate: 'popstate',\n resize: 'resize',\n responseError: 'responseError',\n scroll: 'scroll',\n submit: 'submit',\n transitionEnd: 'transitionend',\n update: 'update',\n invalid: 'invalid'\n};\n\n/**\n * @constant {Object} selectors - Common selectors\n * @property {string} body - body\n * @property {Object} form - form related selectors\n * @property {string} checkbox - checkbox\n * @property {string} form - form\n * @property {string} input - input\n * @property {string} inputFieldClear - .js-input-clear\n * @property {string} inputFieldFeedback - .js-invalid-feedback\n * @property {string} label - label\n * @property {string} radio - radio\n * @property {string} select - select\n * @property {string} submit - [type=\"submit\"]\n * @property {string} textarea - textarea\n * @property {string} html - html\n * @property {string} htmlBody - html, body\n * @property {string} img - img\n * @property {string} input - input\n */\nconst selectors = {\n body: 'body',\n form: {\n checkbox: 'input[type=\"checkbox\"]',\n file: 'input[type=\"file\"]',\n form: 'form',\n input: 'input',\n inputFieldClear: '.js-input-clear',\n inputFieldFeedback: '.js-invalid-feedback',\n label: 'label',\n radio: 'input[type=\"radio\"]',\n select: 'select',\n submit: '[type=\"submit\"]',\n textarea: 'textarea'\n },\n html: 'html',\n htmlBody: 'html, body',\n img: 'img',\n input: 'input',\n interactiveElements: 'input, button, select, textarea, a[href]'\n};\n\n/**\n * @constant {Object} classes - Common classes\n * @property {string} active - active\n * @property {Object} buttons - buttons\n * @property {string} next - next\n * @property {string} previous - previous\n * @property {string} warning - warning\n * @property {string} dBlock - d-block\n * @property {string} dFlex - d-flex\n * @property {string} dInlineBlock - d-inline-block\n * @property {string} dNone - d-none\n * @property {string} disabled - disabled\n * @property {string} empty - empty\n * @property {string} inactive - inactive\n * @property {string} invalid - invalid\n * @property {string} hidden - hidden\n * @property {string} last - last\n * @property {string} show - show\n * @property {string} valid - valid\n */\nconst classes = {\n active: 'active',\n buttons: {\n next: 'js-button-next',\n previous: 'js-button-previous',\n warning: 'js-button-warning'\n },\n dBlock: 'd-block',\n dFlex: 'd-flex',\n dInlineBlock: 'd-inline-block',\n dNone: 'd-none',\n disabled: 'disabled',\n empty: 'empty',\n inactive: 'inactive',\n invalid: 'invalid',\n hidden: 'hidden',\n last: 'last',\n show: 'show',\n valid: 'valid'\n};\n\n/**\n * @constant {Object} attributes - Common attributes\n * @property {string} action - action\n * @property {string} class - class\n * @property {string} csrfToken - data-csrf-token\n * @property {string} csrfName - data-csrf-name\n * @property {string} disabled - disabled\n * @property {string} exclude - data-exclude\n * @property {string} href - href\n * @property {string} id - id\n * @property {string} pattern - pattern\n * @property {string} url - url\n * @property {string} readonly - readonly\n * @property {string} target - data-bs-target\n * @property {string} value - value\n * @property {Object} validation - Validation related attributes\n * @property {string} patternMismatch - data-pattern-mismatch\n * @property {string} valueMissing - data-missing-error\n */\nconst attributes = {\n action: 'action',\n class: 'class',\n checked: 'checked',\n csrfToken: 'data-csrf-token',\n csrfName: 'data-csrf-name',\n disabled: 'disabled',\n exclude: 'data-exclude',\n href: 'href',\n id: 'id',\n pattern: 'pattern',\n placeholder: 'placeholder',\n required: 'required',\n readonly: 'readonly',\n selected: 'selected',\n target: 'data-bs-target',\n url: 'url',\n value: 'value',\n validation: {\n patternMismatch: 'data-pattern-mismatch',\n valueMissing: 'data-missing-error',\n tooShort: 'data-too-short'\n }\n};\n\n/**\n * @constant {Object} breakpoints - Common reusable breakpoints\n * @property {string} xxs - 0\n * @property {string} xs - 368\n * @property {string} sm - 576\n * @property {string} md - 768\n * @property {string} lg - 992\n * @property {string} xl - 1200\n * @property {string} xxl - 1400\n */\n\nconst breakpoints = {\n xxs: parseInt(computedStyles.getPropertyValue('--breakpoint-xxs'), 10),\n xs: parseInt(computedStyles.getPropertyValue('--breakpoint-xs'), 10),\n sm: parseInt(computedStyles.getPropertyValue('--breakpoint-sm'), 10),\n md: parseInt(computedStyles.getPropertyValue('--breakpoint-md'), 10),\n lg: parseInt(computedStyles.getPropertyValue('--breakpoint-lg'), 10),\n xl: parseInt(computedStyles.getPropertyValue('--breakpoint-xl'), 10),\n xxl: parseInt(computedStyles.getPropertyValue('--breakpoint-xxl'), 10)\n};\n\n/**\n * @constant {Object} localStorage - constants for local storage items\n * @property {string} preferredLayoutId - preferredLayoutId\n */\nconst localStorage = {\n preferredLayoutId: 'preferredLayoutId'\n};\n\n/**\n * @constant {Object} bscanSteps - constants for Business Scan Steps\n * @property {string} ADVICE - The advice Step\n * @property {string} INTRO - The intro Step\n * @property {string} GROUPED_QUESTIONS - The grouped questions Step\n * @property {string} THANKYOU - The thank you Step\n */\nconst bscanSteps = {\n INTRO: 'intro',\n STATEMENTS_DONE: 'bs-statements-done',\n GROUPED_QUESTIONS: 'js-bscan-question-group',\n ADVICE: 'bs-advice',\n THANKYOU: 'bs-thank-you'\n};\n\n/**\n * @constant {Object} vzLayoutToggle - Attributes used for VZLayoutToggle\n * @property {string} class - data-layout-class\n * @property {string} container - data-layout-container\n * @property {string} enabledBreakpoint - data-layout-enabled-breakpoint\n * @property {string} id - data-layout-id\n * @property {string} idDefault - data-layout-id-default\n * @property {string} localStorageKey - data-layout-key\n */\nconst vzLayoutToggle = {\n class: 'data-layout-class',\n container: 'data-layout-container',\n enabledBreakpoint: 'data-layout-enabled-breakpoint',\n id: 'data-layout-id',\n idDefault: 'data-layout-id-default',\n localStorageKey: 'data-layout-key'\n};\n\nexport default {\n bscanSteps,\n attributes,\n breakpoints,\n classes,\n events,\n selectors,\n localStorage,\n vzLayoutToggle\n};\n","import { handleTransition } from 'Util/transitions.js';\nimport { CONST } from 'app_vodafone_ziggo/util/util';\nimport * as debounce from 'lodash/debounce';\n\nconst activeCardIndexes = new Map();\nlet isScrolling = false;\n\nconst selectors = {\n tabsLayout: '.js-tabs-layout',\n tabs: '.js-tabs-layout-tabs',\n tabsContainer: '.js-tabs-layout-tabs-container',\n tabButton: '.js-tabs-layout-tab',\n tabContent: '.js-tabs-layout-content',\n card: '.js-tabs-layout-card'\n};\n\nconst classes = {\n active: 'active',\n hasOverflow: 'has-overflow'\n};\n\nconst attributes = {\n tabIndex: 'data-tab-index',\n cardIndex: 'data-card-index',\n transitionType: 'data-transition-type'\n};\n\nconst transitions = {\n carousel: 'carousel',\n dissolve: 'dissolve'\n};\n\n/**\n * Removes the 'active' class from all buttons and cards\n * @param {HTMLElement} tabsLayout - The container of the tab component.\n */\nfunction removeAllActiveClasses(tabsLayout) {\n const activeElements = tabsLayout.querySelectorAll(`.${classes.active}`);\n\n activeElements.forEach((element) => {\n element.classList.remove(classes.active);\n });\n}\n\n/**\n * Activates the specified card and its corresponding button.\n * @param {HTMLElement} tabsLayout - The container of the tab component.\n * @param {number} targetIndex - The index of the card to activate.\n */\nfunction activateCardAndButton(tabsLayout, targetIndex) {\n removeAllActiveClasses(tabsLayout);\n\n const cards = tabsLayout.querySelectorAll(selectors.card);\n const tabButtons = tabsLayout.querySelectorAll(selectors.tabButton);\n\n cards[targetIndex].classList.add(classes.active);\n tabButtons[targetIndex].classList.add(classes.active);\n}\n\n/**\n * @function onClickTab\n * @param {HTMLElement} tabs - All Tab Layout tab buttons\n * @param {HTMLElement} activeTab - The active tab button\n */\nfunction handleBtnTransition(tabs, activeTab) {\n const activeTabIndex = parseInt(activeTab.getAttribute(attributes.tabIndex), 10);\n const activeTabWidth = activeTab.offsetWidth;\n let activeTabOffset = 0;\n\n if (activeTabIndex !== 0) {\n const tabButtons = tabs.querySelectorAll(selectors.tabButton);\n\n tabButtons.forEach((tabBtn) => {\n const tabIndex = parseInt(tabBtn.getAttribute(attributes.tabIndex), 10);\n if (tabIndex < activeTabIndex) activeTabOffset += tabBtn.offsetWidth + 2;\n });\n }\n\n tabs.style.setProperty(`--tab-width`, `${activeTabWidth}px`);\n tabs.style.setProperty('--tab-offset', `${activeTabOffset}px`);\n}\n\n/**\n * @function handleTabsOverflow\n * @param {HTMLElement} tabsLayout - The container of the tab component.\n */\nfunction handleTabsOverflow(tabsLayout) {\n const tabsContainer = tabsLayout.querySelector(selectors.tabsContainer);\n const tabs = tabsLayout.querySelector(selectors.tabs);\n const tabsAreOverflowing = tabs.scrollWidth > tabs.clientWidth;\n let tabsWidth = '100%';\n\n if (tabsAreOverflowing) {\n const viewportWidth = document.documentElement.querySelector('body').clientWidth;\n\n tabsWidth = `${viewportWidth}px`;\n\n tabsContainer.classList.add(classes.hasOverflow);\n } else {\n tabsContainer.classList.remove(classes.hasOverflow);\n }\n\n tabs.style.setProperty('--tabs-width', tabsWidth);\n}\n\n/**\n * Scrolls to the card with the specified index inside the horizontal scrolling area.\n * @param {HTMLElement} tabsLayout - The container of the tab component.\n * @param {number} cardIndex - The index of the card to scroll to.\n */\nfunction scrollToCard(tabsLayout, cardIndex) {\n const tabs = tabsLayout.querySelector(selectors.tabs);\n const targetCard = tabsLayout.querySelector(`${selectors.card}[${attributes.cardIndex}=\"${cardIndex}\"]`);\n const tabContent = tabsLayout.querySelector(selectors.tabContent);\n const isCarousel = tabs.getAttribute(attributes.transitionType) === transitions.carousel;\n const scrollPosition = targetCard.offsetLeft - tabContent.offsetLeft;\n\n isScrolling = true;\n\n if (isCarousel) {\n // Carousel behaviour\n tabContent.scrollTo({\n left: scrollPosition,\n behavior: 'smooth'\n });\n } else {\n // Default (dissolve/fade) behaviour\n handleTransition(() => {\n tabContent.classList.toggle('scrolling');\n\n tabContent.scrollTo({\n left: scrollPosition,\n behavior: 'instant'\n });\n\n setTimeout(() => {\n tabContent.classList.toggle('scrolling');\n }, 150);\n });\n }\n\n setTimeout(() => {\n isScrolling = false;\n }, 500);\n\n activateCardAndButton(tabsLayout, cardIndex);\n}\n\n/**\n * Scrolls to the tab with the specified index inside the horizontal scrolling area.\n * @param {HTMLElement} tabsLayout - The container of the tab component.\n * @param {number} tabIndex - The index of the tab to scroll to.\n */\nfunction scrollToTab(tabsLayout, tabIndex) {\n const tabs = tabsLayout.querySelector(selectors.tabs);\n const tabsAreOverflowing = tabs.scrollWidth > tabs.clientWidth;\n const tabButtons = tabsLayout.querySelectorAll(selectors.tabButton);\n const tab = tabButtons[tabIndex];\n\n if (tabsAreOverflowing) {\n const scrollPosition = tabButtons[tabIndex].offsetLeft - tabs.offsetLeft - 20;\n\n tabs.scrollTo({\n left: scrollPosition,\n behavior: 'smooth'\n });\n }\n\n // Button transition\n handleBtnTransition(tabs, tab);\n}\n\n/**\n * Callback function for the Intersection Observer.\n * @param {IntersectionObserverEntry[]} entries - An array of IntersectionObserverEntry objects.\n */\nfunction onIntersection(entries) {\n entries.forEach((entry) => {\n if (entry.isIntersecting && !isScrolling) {\n const card = entry.target;\n const tabsLayout = card.closest(selectors.tabsLayout);\n const cardIndex = parseInt(card.getAttribute(attributes.cardIndex), 10);\n\n if (cardIndex !== activeCardIndexes.get(tabsLayout)) {\n activeCardIndexes.set(tabsLayout, cardIndex);\n\n activateCardAndButton(tabsLayout, cardIndex);\n scrollToTab(tabsLayout, cardIndex);\n }\n }\n });\n}\n\n/**\n * Sets up the Intersection Observer for the cards.\n * @param {HTMLElement} tabContent - The container of the cards.\n * @param {HTMLElement[]} cards - The cards.\n */\nfunction setupIntersectionObserver(tabContent, cards) {\n const observer = new IntersectionObserver(onIntersection, {\n root: tabContent,\n threshold: 0.5\n });\n\n cards.forEach((card) => observer.observe(card));\n}\n\n/**\n * @function onClickTab\n * @param {Event} event - The click event\n */\nfunction onClickTab(event) {\n const clickedTab = event.target;\n const tabsLayout = clickedTab.closest(selectors.tabsLayout);\n const clickedTabIndex = parseInt(clickedTab.getAttribute(attributes.tabIndex), 10);\n\n if (clickedTabIndex !== activeCardIndexes.get(tabsLayout)) {\n scrollToCard(tabsLayout, clickedTabIndex);\n scrollToTab(tabsLayout, clickedTabIndex);\n\n activeCardIndexes.set(tabsLayout, clickedTabIndex);\n }\n}\n\nexport default (function init() {\n const tabsLayout = document.querySelectorAll(selectors.tabsLayout);\n\n tabsLayout.forEach((tabLayout) => {\n // Tabs overflow handler\n handleTabsOverflow(tabLayout);\n window.addEventListener(\n 'resize',\n debounce(() => {\n handleTabsOverflow(tabLayout);\n }),\n 300\n );\n\n const tabs = tabLayout.querySelector(selectors.tabs);\n const tabButtons = tabLayout.querySelectorAll(selectors.tabButton);\n const cards = tabLayout.querySelectorAll(selectors.card);\n const tabContent = tabLayout.querySelector(selectors.tabContent);\n\n tabButtons.forEach((tabBtn) => {\n tabBtn.addEventListener(CONST.events.click, onClickTab);\n });\n\n // Set index for each card\n cards.forEach((card, index) => {\n card.setAttribute(attributes.cardIndex, index);\n });\n\n setupIntersectionObserver(tabContent, cards);\n\n // Button transition\n const activeTabBtn = tabLayout.querySelector(`${selectors.tabs} .${classes.active}`);\n const activeTabBtnWidth = activeTabBtn.offsetWidth + 1;\n\n tabs.style.setProperty(`--tab-width`, `${activeTabBtnWidth}px`);\n });\n})();\n","/**\n * Handles the transition for a given action.\n * If `document.startViewTransition` is available, it uses that for the transition.\n * Otherwise, it directly calls the action.\n *\n * @param {Function} action - The action to be performed during the transition.\n */\nexport function handleTransition(action) {\n if (document.startViewTransition) {\n document.startViewTransition(action);\n } else {\n action();\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","__webpack_require__.j = 525;","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t525: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = globalThis[\"webpackChunkvodafoneziggo\"] = globalThis[\"webpackChunkvodafoneziggo\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [395], () => (__webpack_require__(2782)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","computedStyles","getComputedStyle","document","documentElement","parseInt","getPropertyValue","blur","change","click","input","keyUp","load","mousedown","mouseleave","mouseover","paste","popstate","resize","responseError","scroll","submit","transitionEnd","update","invalid","activeCardIndexes","Map","isScrolling","selectors","tabsLayout","tabs","tabsContainer","tabButton","tabContent","card","classes","active","hasOverflow","attributes","tabIndex","cardIndex","transitionType","transitions","carousel","dissolve","activateCardAndButton","targetIndex","querySelectorAll","forEach","element","classList","remove","removeAllActiveClasses","cards","tabButtons","add","handleTabsOverflow","querySelector","tabsWidth","scrollWidth","clientWidth","style","setProperty","scrollToCard","targetCard","isCarousel","getAttribute","scrollPosition","offsetLeft","action","scrollTo","left","behavior","toggle","setTimeout","startViewTransition","scrollToTab","tabsAreOverflowing","tab","activeTab","activeTabIndex","activeTabWidth","offsetWidth","activeTabOffset","tabBtn","handleBtnTransition","onIntersection","entries","entry","isIntersecting","target","closest","get","set","onClickTab","event","clickedTab","clickedTabIndex","tabLayout","window","addEventListener","debounce","CONST","index","setAttribute","observer","IntersectionObserver","root","threshold","observe","setupIntersectionObserver","activeTabBtnWidth","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","__webpack_modules__","call","m","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","length","fulfilled","j","Object","keys","every","key","splice","r","d","definition","o","defineProperty","enumerable","g","globalThis","this","Function","e","obj","prop","prototype","hasOwnProperty","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","data","moreModules","runtime","some","id","chunkLoadingGlobal","bind","push","__webpack_exports__"],"sourceRoot":""}