{"version":3,"file":"./modules/Tooltip.xxxxxxxx.js","mappings":"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","sources":["webpack:///./modules/Tooltip.ts"],"sourcesContent":["const moduleSelector = '[data-module=\"Tooltip\"]';\r\n\r\nexport default class Tooltip {\r\n static setup(selector: string = moduleSelector): void {\r\n Array.from(document.querySelectorAll(selector)).filter((node: HTMLElement) => !node.dataset.moduleInitialized).forEach((element: HTMLElement) => {\r\n new Tooltip(element);\r\n element.dataset.moduleInitialized = 'true';\r\n });\r\n }\r\n\r\n constructor(public element: HTMLElement) {\r\n this.element = element;\r\n this.init(element);\r\n }\r\n\r\n init(element): void {\r\n this.listenTouchDevice(element);\r\n this.eventListeners(element);\r\n this.setPositionOfTooltip();\r\n this.mobileDesktopChangeEventListener();\r\n }\r\n\r\n eventListeners(element) {\r\n element.addEventListener('click', (event) => this.toggleTooltip(event), false);\r\n document.addEventListener('close-tooltips', (event: CustomEvent) => this.checkToCloseTooltip(event.detail), false)\r\n document.addEventListener('click', (event) => this.checkOutsideClick(event, element), false);\r\n }\r\n\r\n mobileDesktopChangeEventListener(): Tooltip {\r\n document.addEventListener('niveax:breakpointchange', (e) => {\r\n this.changePositionOfTooltip((e).detail.deviceType == 'isMobile');\r\n });\r\n return this;\r\n }\r\n\r\n setPositionOfTooltip(): void {\r\n this.changePositionOfTooltip(window.NiveaX.deviceType.isMobile);\r\n }\r\n\r\n changePositionOfTooltip(queryToCheck: any): void {\r\n let parent = this.element.parentElement.parentElement;\r\n\r\n if (queryToCheck) {\r\n let mobileElement = parent.querySelector('[data-tooltip-mobile]');\r\n let tooltip = parent.querySelector('.nx-tooltip');\r\n if (mobileElement) {\r\n mobileElement.insertBefore(tooltip, mobileElement.children[0]);\r\n this.setPosition(queryToCheck);\r\n }\r\n }\r\n else {\r\n let desktopElement = parent.querySelector('[data-tooltip-desktop]');\r\n if (desktopElement) {\r\n desktopElement.appendChild(this.element);\r\n this.setPosition();\r\n this.onResize(queryToCheck);\r\n }\r\n }\r\n }\r\n\r\n listenTouchDevice(element): void {\r\n document.addEventListener('touchstart', function onFirstTouch() {\r\n element.classList.add('nx-u-is-touch');\r\n document.removeEventListener('touchstart', onFirstTouch);\r\n }, { passive: true });\r\n }\r\n\r\n toggleTooltip(event: Event): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n if (this.element.closest('.nx-product-teaser__eshop-info') || this.element.closest('.nx-product-bottom-bar'))\r\n this.setPositionOfTooltip()\r\n\r\n this.closeOtherTooltips(this.element);\r\n this.element.classList.toggle('nx-u-over');\r\n }\r\n\r\n closeOtherTooltips(element: Element) {\r\n document.dispatchEvent(new CustomEvent('close-tooltips', { detail: element }));\r\n }\r\n\r\n checkToCloseTooltip(element: Element): void {\r\n let closeThisTooltip = element !== this.element;\r\n if (closeThisTooltip) {\r\n this.element.classList.remove('nx-u-over');\r\n }\r\n }\r\n\r\n findPosition(isMobile?: boolean) {\r\n let windowWidth = window.innerWidth,\r\n rectTooltip = this.element.getBoundingClientRect(),\r\n rectTooltipContent = this.element.querySelector('.nx-tooltip__content').getBoundingClientRect(),\r\n viewportMiddle = (window.innerWidth / 2),\r\n tolerance = 100,\r\n tooltipLeft = rectTooltip.left,\r\n tooltipRight = rectTooltip.right,\r\n lessSpaceRight = tooltipRight >= viewportMiddle && (tooltipRight <= (viewportMiddle + tolerance)),\r\n lessSpaceLeft = tooltipLeft <= viewportMiddle && (tooltipLeft >= (viewportMiddle - tolerance));\r\n const tooltipContent = this.element.querySelector('.nx-tooltip__content') as HTMLElement;\r\n\r\n if (isMobile && (lessSpaceRight || lessSpaceLeft)) {\r\n tooltipContent.setAttribute('style', `left :calc(50% + (${viewportMiddle - tooltipLeft}px))`);\r\n\r\n return \"middle\";\r\n } else if (windowWidth - rectTooltip.left - rectTooltipContent.width < 0) {\r\n tooltipContent.removeAttribute('style');\r\n return \"left\";\r\n } else {\r\n tooltipContent.removeAttribute('style');\r\n return \"right\";\r\n }\r\n }\r\n\r\n setPosition(isMobile?: boolean) {\r\n if (!this.element) {\r\n return;\r\n }\r\n if (!this.element.classList.contains(`nx-u-tooltip-${this.findPosition(isMobile)}`)) {\r\n this.element.classList.remove(\"nx-u-tooltip-left\");\r\n this.element.classList.remove(\"nx-u-tooltip-right\");\r\n this.element.classList.remove(\"nx-u-tooltip-middle\");\r\n this.element.classList.toggle(`nx-u-tooltip-${this.findPosition(isMobile)}`);\r\n }\r\n }\r\n\r\n private onResize(isMobile?: boolean): void {\r\n NiveaX.addToEventStore('resize', this.setPosition.bind([this, isMobile]), window);\r\n }\r\n\r\n checkOutsideClick(event, element) {\r\n let isClickInside = element.contains(event.target);\r\n if (!isClickInside) {\r\n this.element.classList.remove('nx-u-over');\r\n }\r\n }\r\n\r\n};\r\n\r\n// Hot Module Replacement\r\nif (module.hot) {\r\n let nodesCache: HMRNodes[] = Array.from(document.querySelectorAll(moduleSelector)).map((element: Node) => ({ nodeToReplace: element, nodeOrigin: element.cloneNode(true) }));\r\n\r\n Tooltip.setup(moduleSelector);\r\n\r\n module.hot.accept(() => {\r\n Tooltip.setup(moduleSelector);\r\n });\r\n module.hot.dispose(() => {\r\n nodesCache.forEach(({ nodeToReplace, nodeOrigin }) => { nodeToReplace = nodeToReplace.parentElement.replaceChild(nodeOrigin.cloneNode(true), nodeToReplace) });\r\n });\r\n} else {\r\n Tooltip.setup(moduleSelector);\r\n}"],"names":["moduleSelector","Tooltip","setup","selector","Array","from","document","querySelectorAll","filter","node","dataset","moduleInitialized","forEach","element","constructor","this","init","listenTouchDevice","eventListeners","setPositionOfTooltip","mobileDesktopChangeEventListener","addEventListener","event","toggleTooltip","checkToCloseTooltip","detail","checkOutsideClick","e","changePositionOfTooltip","deviceType","window","NiveaX","isMobile","queryToCheck","parent","parentElement","mobileElement","querySelector","tooltip","insertBefore","children","setPosition","desktopElement","appendChild","onResize","onFirstTouch","classList","add","removeEventListener","passive","preventDefault","stopPropagation","closest","closeOtherTooltips","toggle","dispatchEvent","CustomEvent","remove","findPosition","windowWidth","innerWidth","rectTooltip","getBoundingClientRect","rectTooltipContent","viewportMiddle","tooltipLeft","left","tooltipRight","right","lessSpaceRight","lessSpaceLeft","tooltipContent","setAttribute","width","removeAttribute","contains","addToEventStore","bind","target"],"sourceRoot":""}