\r\n ${(overlayTitle || getLayerTitleFromContent) ?\r\n ``\r\n : \"\"}\r\n
${node.innerHTML}
\r\n
`);\r\n}\r\n\r\nexport function isObjectLiteral(a) {\r\n return (!!a) && (a.constructor === Object);\r\n};\r\n\r\nexport function isObject(a) {\r\n return typeof a === 'object' && a !== null;\r\n}\r\n\r\nexport function isArray(a) {\r\n return (!!a) && (a.constructor === Array);\r\n};\r\n\r\nexport function objectToStyleString(styleObject): string {\r\n return Object.entries(styleObject).map(([k, v]) => `${k}: ${v}`).join(';');\r\n};","function calculateTopLeftAndBottomRightCoordinates (element) {\n var rect = element.getBoundingClientRect()\n var topX =\n rect.left + (window.pageXOffset || document.documentElement.scrollLeft)\n var topY =\n rect.top + (window.pageYOffset || document.documentElement.scrollTop)\n return {\n x: [topX, topX + element.offsetWidth],\n y: [topY, topY + element.offsetHeight]\n }\n}\n\nfunction calculateGradient (A, B) {\n return (B.y - A.y) / (B.x - A.x)\n}\n\nmodule.exports = function (menuElement, options) {\n var delay = options.delay || 200\n var menuItemSelector = options.menuItemSelector || '.menu-aim__item'\n var menuItemActiveClassName =\n options.menuItemActiveClassName || 'menu-aim__item--active'\n var menuItemSubMenuSelector =\n options.menuItemSubMenuSelector || '.menu-aim__item-submenu'\n var delayingClassName = options.delayingClassName || 'menu-aim--delaying'\n\n var previousMouseCoordinates = {}\n var currentMouseCoordinates = {}\n var timeoutId\n var activeMenuItem\n var activeSubMenuTopLeftCoordinates\n var activeSubMenuBottomLeftCoordinates\n\n var menuElementCoordinates = calculateTopLeftAndBottomRightCoordinates(\n menuElement\n )\n var extremeCoordinates\n\n function saveMouseCoordinates (x, y) {\n previousMouseCoordinates.x = currentMouseCoordinates.x\n previousMouseCoordinates.y = currentMouseCoordinates.y\n currentMouseCoordinates.x = x\n currentMouseCoordinates.y = y\n }\n\n // Return `true` if there currently isn't an active menu item, or if\n // `currentMouseCoordinates` is outside of the triangle drawn between\n // `previousMouseCoordinates`, `activeSubMenuTopLeftCoordinates` and\n // `activeSubMenuBottomLeftCoordinates`.\n function shouldChangeActiveMenuItem () {\n // prettier-ignore\n return (\n !activeMenuItem ||\n calculateGradient(previousMouseCoordinates, activeSubMenuTopLeftCoordinates) <\n calculateGradient(currentMouseCoordinates, activeSubMenuTopLeftCoordinates) ||\n calculateGradient(previousMouseCoordinates, activeSubMenuBottomLeftCoordinates) >\n calculateGradient(currentMouseCoordinates, activeSubMenuBottomLeftCoordinates)\n )\n }\n\n // Possibly activates the given `menuItem`. If so, returns true.\n function possiblyActivateMenuItem (menuItem) {\n cancelPendingMenuItemActivations()\n if (shouldChangeActiveMenuItem()) {\n deactivateActiveMenuItem()\n activateMenuItem(menuItem)\n return true\n }\n }\n\n function activateMenuItem (menuItem) {\n activeMenuItem = menuItem\n activeMenuItem.classList.add(menuItemActiveClassName)\n var activeSubMenu = activeMenuItem.querySelector(menuItemSubMenuSelector)\n var activeSubMenuCoordinates = calculateTopLeftAndBottomRightCoordinates(\n activeSubMenu\n )\n activeSubMenuTopLeftCoordinates = {\n x: activeSubMenuCoordinates.x[0],\n y: activeSubMenuCoordinates.y[0]\n }\n activeSubMenuBottomLeftCoordinates = {\n x: activeSubMenuCoordinates.x[0],\n y: activeSubMenuCoordinates.y[1]\n }\n // `extremeCoordinates` corresponds to the top-left coordinates (Ax, Ay) and\n // bottom-right coordinates (Bx, By) of the entire menu, encompassing both the\n // `menuElement` and `activeSubMenu`.\n extremeCoordinates = {\n x: [\n menuElementCoordinates.x[0],\n activeSubMenuTopLeftCoordinates.x + activeSubMenu.offsetWidth\n ],\n y: [\n menuElementCoordinates.y[0],\n activeSubMenuTopLeftCoordinates.y + activeSubMenu.offsetHeight\n ]\n }\n }\n\n function possiblyDeactivateActiveMenuItem () {\n if (\n currentMouseCoordinates.x < extremeCoordinates.x[0] ||\n currentMouseCoordinates.x > extremeCoordinates.x[1] ||\n currentMouseCoordinates.y < extremeCoordinates.y[0] ||\n currentMouseCoordinates.y > extremeCoordinates.y[1]\n ) {\n cancelPendingMenuItemActivations()\n deactivateActiveMenuItem()\n }\n }\n\n function deactivateActiveMenuItem () {\n if (activeMenuItem) {\n menuElement.classList.remove(delayingClassName)\n activeMenuItem.classList.remove(menuItemActiveClassName)\n activeMenuItem = null\n }\n }\n\n function cancelPendingMenuItemActivations () {\n if (timeoutId) {\n clearTimeout(timeoutId)\n }\n }\n\n function onMenuItemMouseEnter (event) {\n var menuItem = event.target\n if (!possiblyActivateMenuItem(menuItem)) {\n menuElement.classList.add(delayingClassName)\n timeoutId = setTimeout(function () {\n possiblyActivateMenuItem(menuItem)\n }, delay)\n }\n }\n var menuItems = menuElement.querySelectorAll(menuItemSelector)\n var i = menuItems.length\n while (i--) {\n menuItems[i].addEventListener('mouseenter', onMenuItemMouseEnter)\n }\n\n function onWindowMouseMove (event) {\n saveMouseCoordinates(event.pageX, event.pageY)\n if (activeMenuItem) {\n possiblyDeactivateActiveMenuItem()\n }\n }\n window.addEventListener('mousemove', onWindowMouseMove)\n\n return function () {\n i = menuItems.length\n while (i--) {\n menuItems[i].removeEventListener('mouseenter', onMenuItemMouseEnter)\n }\n window.removeEventListener('mousemove', onWindowMouseMove)\n }\n}\n"],"sourceRoot":""}