{"version":3,"file":"/dist/js/site/campervakantiesfriesland.js","mappings":"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","sources":["webpack://wp-soup/./assets/js/scripts/blocks.js","webpack://wp-soup/./assets/js/scripts/buddypress.js","webpack://wp-soup/./assets/js/scripts/cookies.js","webpack://wp-soup/./assets/js/scripts/ie11.js","webpack://wp-soup/./assets/js/scripts/resizes.js","webpack://wp-soup/./assets/js/scripts/scroll-to-top.js","webpack://wp-soup/./assets/js/vendors/clamp.js","webpack://wp-soup/./assets/js/vendors/mobile.js","webpack://wp-soup/./assets/js/vendors/parallax.js","webpack://wp-soup/./src/Core/Blocks/Content/common/featured_menu_items/script.js","webpack://wp-soup/./src/Core/Blocks/Content/common/pricing/script.js","webpack://wp-soup/./src/Core/Blocks/Content/common/reviews/script.js","webpack://wp-soup/../../themes/campervakantiesfriesland/resources/blocks/custom/related_boats_block/script.js","webpack://wp-soup/./node_modules/desandro-matches-selector/matches-selector.js","webpack://wp-soup/./node_modules/ev-emitter/ev-emitter.js","webpack://wp-soup/./node_modules/fizzy-ui-utils/utils.js","webpack://wp-soup/./node_modules/form-data/lib/browser.js","webpack://wp-soup/./node_modules/get-size/get-size.js","webpack://wp-soup/./node_modules/isotope-layout/js/isotope.js","webpack://wp-soup/./node_modules/isotope-layout/js/item.js","webpack://wp-soup/./node_modules/isotope-layout/js/layout-mode.js","webpack://wp-soup/./node_modules/isotope-layout/js/layout-modes/fit-rows.js","webpack://wp-soup/./node_modules/isotope-layout/js/layout-modes/masonry.js","webpack://wp-soup/./node_modules/isotope-layout/js/layout-modes/vertical.js","webpack://wp-soup/./node_modules/macy/dist/macy.js","webpack://wp-soup/./node_modules/masonry-layout/masonry.js","webpack://wp-soup/./node_modules/object-fit-images/dist/ofi.common-js.js","webpack://wp-soup/./node_modules/outlayer/item.js","webpack://wp-soup/./node_modules/outlayer/outlayer.js","webpack://wp-soup/./node_modules/what-input/dist/what-input.js","webpack://wp-soup/external var \"jQuery\"","webpack://wp-soup/webpack/bootstrap","webpack://wp-soup/webpack/runtime/compat get default export","webpack://wp-soup/webpack/runtime/define property getters","webpack://wp-soup/webpack/runtime/hasOwnProperty shorthand","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.core.utils.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.util.mediaQuery.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.core.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.core.plugin.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.util.keyboard.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.accordion.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.util.nest.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.accordionMenu.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.util.box.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.positionable.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.util.motion.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.util.triggers.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.util.touch.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.dropdown.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.dropdownMenu.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.util.imageLoader.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.equalizer.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.drilldown.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.responsiveMenu.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.responsiveToggle.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.reveal.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.slider.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.smoothScroll.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.sticky.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.tabs.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.toggler.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.tooltip.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.responsiveAccordionTabs.js","webpack://wp-soup/./assets/js/vendors/foundation.js","webpack://wp-soup/./assets/js/vendors/macy.js","webpack://wp-soup/./assets/js/vendors/object-fit-images.js","webpack://wp-soup/./node_modules/countup.js/dist/countUp.min.js","webpack://wp-soup/./assets/js/scripts/count-on-scroll.js","webpack://wp-soup/./node_modules/axios/lib/helpers/bind.js","webpack://wp-soup/./node_modules/axios/lib/utils.js","webpack://wp-soup/./node_modules/axios/lib/core/AxiosError.js","webpack://wp-soup/./node_modules/axios/lib/env/classes/FormData.js","webpack://wp-soup/./node_modules/axios/lib/helpers/toFormData.js","webpack://wp-soup/./node_modules/axios/lib/helpers/AxiosURLSearchParams.js","webpack://wp-soup/./node_modules/axios/lib/helpers/buildURL.js","webpack://wp-soup/./node_modules/axios/lib/core/InterceptorManager.js","webpack://wp-soup/./node_modules/axios/lib/defaults/transitional.js","webpack://wp-soup/./node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","webpack://wp-soup/./node_modules/axios/lib/platform/browser/classes/FormData.js","webpack://wp-soup/./node_modules/axios/lib/platform/browser/index.js","webpack://wp-soup/./node_modules/axios/lib/helpers/formDataToJSON.js","webpack://wp-soup/./node_modules/axios/lib/defaults/index.js","webpack://wp-soup/./node_modules/axios/lib/helpers/toURLEncodedForm.js","webpack://wp-soup/./node_modules/axios/lib/helpers/parseHeaders.js","webpack://wp-soup/./node_modules/axios/lib/core/AxiosHeaders.js","webpack://wp-soup/./node_modules/axios/lib/core/transformData.js","webpack://wp-soup/./node_modules/axios/lib/cancel/isCancel.js","webpack://wp-soup/./node_modules/axios/lib/cancel/CanceledError.js","webpack://wp-soup/./node_modules/axios/lib/helpers/cookies.js","webpack://wp-soup/./node_modules/axios/lib/core/buildFullPath.js","webpack://wp-soup/./node_modules/axios/lib/helpers/isAbsoluteURL.js","webpack://wp-soup/./node_modules/axios/lib/helpers/combineURLs.js","webpack://wp-soup/./node_modules/axios/lib/helpers/isURLSameOrigin.js","webpack://wp-soup/./node_modules/axios/lib/helpers/speedometer.js","webpack://wp-soup/./node_modules/axios/lib/adapters/xhr.js","webpack://wp-soup/./node_modules/axios/lib/adapters/adapters.js","webpack://wp-soup/./node_modules/axios/lib/helpers/null.js","webpack://wp-soup/./node_modules/axios/lib/core/settle.js","webpack://wp-soup/./node_modules/axios/lib/helpers/parseProtocol.js","webpack://wp-soup/./node_modules/axios/lib/core/dispatchRequest.js","webpack://wp-soup/./node_modules/axios/lib/core/mergeConfig.js","webpack://wp-soup/./node_modules/axios/lib/env/data.js","webpack://wp-soup/./node_modules/axios/lib/helpers/validator.js","webpack://wp-soup/./node_modules/axios/lib/core/Axios.js","webpack://wp-soup/./node_modules/axios/lib/cancel/CancelToken.js","webpack://wp-soup/./node_modules/axios/lib/axios.js","webpack://wp-soup/./node_modules/axios/lib/helpers/spread.js","webpack://wp-soup/./node_modules/axios/lib/helpers/isAxiosError.js","webpack://wp-soup/./assets/js/scripts/favorites.js","webpack://wp-soup/./assets/js/scripts/images.js","webpack://wp-soup/./assets/js/scripts/menu.js","webpack://wp-soup/./assets/js/scripts/woocommerce.js","webpack://wp-soup/./assets/js/scripts/wp-admin.js","webpack://wp-soup/./src/Core/Blocks/Content/common/related_pages/script.js","webpack://wp-soup/./src/Core/Blocks/Content/common/tag_filter/script.js","webpack://wp-soup/./src/Core/Blocks/Marginals/header/thin_topbar_menu/script.js","webpack://wp-soup/../../themes/campervakantiesfriesland/assets/js/script.js","webpack://wp-soup/../../themes/campervakantiesfriesland/resources/blocks/custom/boat_filter/script.js"],"sourcesContent":["// Add classes to blocks that normally don't have classes.\nconst addClassToBlock = (props, blockType, attributes) => {\n const notDefined = typeof props.className === \"undefined\" || !props.className ? true : false;\n\n if (blockType.name === \"core/list\") {\n return Object.assign(props, {\n className: notDefined ? `wp-block-list` : `wp-block-list ${props.className}`,\n });\n }\n\n // if (blockType.name === \"core/paragraph\") {\n // return Object.assign(props, {\n // className: notDefined\n // ? \"wp-block-paragraph\"\n // : `wp-block-paragraph ${props.className}`\n // });\n // }\n\n return props;\n};\n\nif (wp.hooks !== undefined) {\n wp.hooks.addFilter(\"blocks.getSaveContent.extraProps\", \"wp-soup/add-class-to-blocks\", addClassToBlock);\n}\n\n/**\n * returns blocks on page, all on same level (instead of innerblocks)\n * @returns [{}]\n */\nfunction wpSoupGetBlocksOnPage() {\n let blocks = [];\n // get all blocks, and call recursive function for it\n wp.data\n .select(\"core/block-editor\")\n .getBlocks()\n .forEach((block) => {\n blocks = [...blocks, ...wpSoupGetBlocksFromBlock(block)];\n });\n return blocks;\n}\n\n/**\n * recursive method for wpSoupGetBlocksOnPage()\n * @param block\n * @returns [{}]\n */\nfunction wpSoupGetBlocksFromBlock(block) {\n let blocks = [block];\n if (block.hasOwnProperty(\"innerBlocks\")) {\n block.innerBlocks.forEach((inner_block) => {\n blocks = [...blocks, ...wpSoupGetBlocksFromBlock(inner_block)];\n });\n }\n return blocks;\n}\n\nif (wp.domReady !== undefined) {\n wp.domReady(() => {\n /**\n * Deprecated blocks\n * `wp_soup_deprecated_blocks` gets shared from php, it's a constant array\n * of strings\n */\n if (typeof wp_soup_deprecated_blocks !== \"undefined\") {\n const available_blocks = wp.blocks.getBlockTypes();\n const blocks_in_page = wpSoupGetBlocksOnPage();\n\n wp_soup_deprecated_blocks.forEach((deprecated_block) => {\n // check if the deprecated block is used on this page\n const current_result = blocks_in_page.find((block) => {\n return block.name === deprecated_block;\n });\n\n // if it's on the page, set it in the deprecated blocks category\n // we do this because unregistering it would break the page.\n if (current_result !== undefined) {\n const result = available_blocks.find((block) => {\n return block.name === deprecated_block;\n });\n if (result !== undefined) {\n result.category = \"deprecated\";\n }\n }\n\n // if it's not used on the page, we can fully remove it instead\n else {\n wp.blocks.unregisterBlockType(deprecated_block);\n }\n });\n }\n });\n}\n\ndocument.addEventListener(\n \"DOMContentLoaded\",\n () => {\n for (let i = 1; i < 10; i++) {\n const clampTo = document.querySelectorAll(`.clamp-to-${i}`);\n for (c of clampTo) {\n window.$clamp(c, { clamp: i });\n }\n }\n },\n { passive: true }\n);\n","document.addEventListener(\n \"DOMContentLoaded\",\n () => {\n const changeOption = (selector, label) => {\n const field = document.querySelector(selector);\n if (field) {\n const option = field.querySelector(\"option:first-child\");\n if (option) {\n option.innerHTML = label;\n option.disabled = true;\n }\n }\n };\n\n changeOption('#buddypress select[name$=\"day\"]', \"Geboortedag\");\n changeOption('#buddypress select[name$=\"month\"]', \"Geboortemaand\");\n changeOption('#buddypress select[name$=\"year\"]', \"Geboortejaar\");\n },\n { passive: true }\n);\n","function setCookie(cname, cvalue, exdays) {\n const d = new Date();\n d.setTime(d.getTime() + exdays * 24 * 60 * 60 * 1000);\n const expires = \"expires=\" + d.toUTCString();\n document.cookie = cname + \"=\" + cvalue + \";\" + expires;\n}\n\nconst translationNotice = document.querySelector(\".automatic-translation-notice\");\nif (translationNotice) {\n translationNotice\n .querySelector(\"button\")\n .addEventListener(\"click\", (e) => setCookie(\"hide-automatic-translation-notice\", true, 7), { passive: true });\n}\n","window.addEventListener(\n \"load\",\n () => {\n // Do IE stuff\n if (window.document.documentMode) {\n if (Foundation.MediaQuery.current !== \"small\") {\n const columns = document.querySelectorAll(\".wp-block-column\");\n for (const column of columns) {\n const flexBasis = column.style.flexBasis;\n const isMargin = column.parentElement.classList.contains(\"margin\");\n if (flexBasis && !isMargin) {\n column.style.setAttribute(\"width\", flexBasis);\n column.style.setProperty(\"flex-basis\", \"auto\", \"important\");\n } else if (flexBasis && isMargin) {\n column.style.setAttribute(\"width\", `calc(${flexBasis} - 2rem)`);\n column.style.setProperty(\"flex-basis\", \"auto\", \"important\");\n }\n }\n }\n } else {\n if (Foundation.MediaQuery.current !== \"small\") {\n const columns = document.querySelectorAll(\".wp-block-column\");\n for (const column of columns) {\n const flexBasis = column.style.flexBasis;\n const isMargin = column.parentElement.classList.contains(\"margin\");\n if (flexBasis && isMargin) {\n column.style.setProperty(\"flex-basis\", `calc(${flexBasis} - 2rem)`, \"important\");\n }\n }\n }\n }\n },\n { passive: true }\n);\n","/**\n * Set scrollbar sizes\n */\ndocument.addEventListener(\n \"DOMContentLoaded\",\n () => {\n function setScrollbarSize() {\n // Add temporary box to wrapper.\n let scrollbox = document.createElement(\"div\");\n // Make box scrollable.\n scrollbox.style.overflow = \"scroll\";\n // Append box to document.\n document.body.appendChild(scrollbox);\n // Measure inner width of box.\n let scrollBarWidth = scrollbox.offsetWidth - scrollbox.clientWidth;\n // Remove box.\n document.body.removeChild(scrollbox);\n\n if (!(document.body.scrollHeight > window.innerHeight)) {\n scrollBarWidth = 0;\n }\n\n if (scrollBarWidth !== 0) {\n document.body.classList.add(\"has-scrollbar\");\n document.body.setAttribute(\"style\", `--scroll-bar: ${scrollBarWidth}px`);\n } else {\n document.body.classList.remove(\"has-scrollbar\");\n }\n }\n\n setScrollbarSize();\n window.addEventListener(\"resize\", setScrollbarSize, { passive: true });\n\n const epve = document.querySelector(\".edit-post-visual-editor\");\n if (epve !== null) {\n function getEditorWidth() {\n const width = epve.offsetWidth;\n document.body.setAttribute(\"style\", `--editor-width: ${width - 2}px`);\n }\n\n getEditorWidth();\n window.addEventListener(\"resize\", getEditorWidth, { passive: true });\n }\n\n // const adminToolbar = document.querySelector(\"#wpadminbar\");\n // if (adminToolbar !== null) {\n // const html = document.querySelector(\"html:not(.wp-toolbar)\");\n // if (html !== null) {\n // html.setAttribute(\"style\", \"margin-top: 50px !important;\");\n // }\n // }\n },\n { passive: true }\n);\n","(() => {\n const backTop = document.getElementsByClassName(\"js-back-to-top\")[0];\n if (backTop) {\n const dataElement = backTop.getAttribute(\"data-element\");\n const scrollElement = dataElement ? document.querySelector(dataElement) : window;\n\n const //scroll to top duration\n scrollDuration = parseInt(backTop.getAttribute(\"data-duration\")) || 300;\n\n const //show back-to-top if scrolling > scrollOffset\n scrollOffset = parseInt(backTop.getAttribute(\"data-offset\")) || 0;\n\n let scrolling = false;\n\n //detect click on back-to-top link\n backTop.addEventListener(\"click\", (event) => {\n event.preventDefault();\n if (!window.requestAnimationFrame) {\n scrollElement.scrollTo(0, 0);\n } else {\n dataElement ? scrollTo(0, scrollDuration, false, scrollElement) : scrollTo(0, scrollDuration);\n }\n //move the focus to the #top-element - don't break keyboard navigation\n moveFocus(document.getElementById(backTop.getAttribute(\"href\").replace(\"#\", \"\")));\n });\n\n //listen to the window scroll and update back-to-top visibility\n checkBackToTop();\n if (scrollOffset > 0) {\n scrollElement.addEventListener(\n \"scroll\",\n (event) => {\n if (!scrolling) {\n scrolling = true;\n !window.requestAnimationFrame\n ? setTimeout(() => {\n checkBackToTop();\n }, 250)\n : window.requestAnimationFrame(checkBackToTop);\n }\n },\n { passive: true }\n );\n }\n\n function checkBackToTop() {\n let windowTop = scrollElement.scrollTop || document.documentElement.scrollTop;\n if (!dataElement) {\n windowTop = window.scrollY || document.documentElement.scrollTop;\n }\n if (windowTop >= scrollOffset) {\n backTop.classList.add(\"back-to-top--is-visible\");\n } else {\n backTop.classList.remove(\"back-to-top--is-visible\");\n }\n scrolling = false;\n }\n\n function scrollTo(final, duration, cb, scrollEl) {\n const element = scrollEl || window;\n let start = element.scrollTop || document.documentElement.scrollTop;\n let currentTime = null;\n\n if (!scrollEl) start = window.scrollY || document.documentElement.scrollTop;\n\n const animateScroll = (timestamp) => {\n if (!currentTime) currentTime = timestamp;\n let progress = timestamp - currentTime;\n if (progress > duration) progress = duration;\n const val = Math.easeInOutQuad(progress, start, final - start, duration);\n element.scrollTo(0, val);\n if (progress < duration) {\n window.requestAnimationFrame(animateScroll);\n } else {\n cb && cb();\n }\n };\n\n window.requestAnimationFrame(animateScroll);\n }\n\n function moveFocus(element) {\n if (!element) element = document.getElementsByTagName(\"body\")[0];\n element.focus();\n if (document.activeElement !== element) {\n element.setAttribute(\"tabindex\", \"-1\");\n element.focus();\n }\n }\n\n Math.easeInOutQuad = function (t, b, c, d) {\n t /= d / 2;\n if (t < 1) return (c / 2) * t * t + b;\n t--;\n return (-c / 2) * (t * (t - 2) - 1) + b;\n };\n }\n})();\n","/*!\n * Clamp.js 0.5.1\n *\n * Copyright 2011-2013, Joseph Schmitt http://joe.sh\n * Released under the WTFPL license\n * http://sam.zoy.org/wtfpl/\n */\n\n(function() {\n /**\n * Clamps a text node.\n * @param {HTMLElement} element. Element containing the text node to clamp.\n * @param {Object} options. Options to pass to the clamper.\n */\n function clamp(element, options) {\n options = options || {};\n\n var self = this,\n win = window,\n opt = {\n clamp: options.clamp || 2,\n useNativeClamp:\n typeof options.useNativeClamp != \"undefined\"\n ? options.useNativeClamp\n : true,\n splitOnChars: options.splitOnChars || [\".\", \"-\", \"–\", \"—\", \" \"], //Split on sentences (periods), hypens, en-dashes, em-dashes, and words (spaces).\n animate: options.animate || false,\n truncationChar: options.truncationChar || \"…\",\n truncationHTML: options.truncationHTML\n },\n sty = element.style,\n originalText = element.innerHTML,\n supportsNativeClamp =\n typeof element.style.webkitLineClamp != \"undefined\",\n clampValue = opt.clamp,\n isCSSValue =\n clampValue.indexOf &&\n (clampValue.indexOf(\"px\") > -1 ||\n clampValue.indexOf(\"em\") > -1),\n truncationHTMLContainer;\n\n if (opt.truncationHTML) {\n truncationHTMLContainer = document.createElement(\"span\");\n truncationHTMLContainer.innerHTML = opt.truncationHTML;\n }\n\n // UTILITY FUNCTIONS __________________________________________________________\n\n /**\n * Return the current style for an element.\n * @param {HTMLElement} elem The element to compute.\n * @param {string} prop The style property.\n * @returns {number}\n */\n function computeStyle(elem, prop) {\n if (!win.getComputedStyle) {\n win.getComputedStyle = function(el, pseudo) {\n this.el = el;\n this.getPropertyValue = function(prop) {\n var re = /(\\-([a-z]){1})/g;\n if (prop == \"float\") prop = \"styleFloat\";\n if (re.test(prop)) {\n prop = prop.replace(re, function() {\n return arguments[2].toUpperCase();\n });\n }\n return el.currentStyle && el.currentStyle[prop]\n ? el.currentStyle[prop]\n : null;\n };\n return this;\n };\n }\n\n return win.getComputedStyle(elem, null).getPropertyValue(prop);\n }\n\n /**\n * Returns the maximum number of lines of text that should be rendered based\n * on the current height of the element and the line-height of the text.\n */\n function getMaxLines(height) {\n var availHeight = height || element.clientHeight,\n lineHeight = getLineHeight(element);\n\n return Math.max(Math.floor(availHeight / lineHeight), 0);\n }\n\n /**\n * Returns the maximum height a given element should have based on the line-\n * height of the text and the given clamp value.\n */\n function getMaxHeight(clmp) {\n var lineHeight = getLineHeight(element);\n return lineHeight * clmp;\n }\n\n /**\n * Returns the line-height of an element as an integer.\n */\n function getLineHeight(elem) {\n var lh = computeStyle(elem, \"line-height\");\n if (lh == \"normal\") {\n // Normal line heights vary from browser to browser. The spec recommends\n // a value between 1.0 and 1.2 of the font size. Using 1.1 to split the diff.\n lh = parseInt(computeStyle(elem, \"font-size\")) * 1.2;\n }\n return parseInt(lh);\n }\n\n // MEAT AND POTATOES (MMMM, POTATOES...) ______________________________________\n var splitOnChars = opt.splitOnChars.slice(0),\n splitChar = splitOnChars[0],\n chunks,\n lastChunk;\n\n /**\n * Gets an element's last child. That may be another node or a node's contents.\n */\n function getLastChild(elem) {\n //Current element has children, need to go deeper and get last child as a text node\n if (elem.lastChild.children && elem.lastChild.children.length > 0) {\n return getLastChild(\n Array.prototype.slice.call(elem.children).pop()\n );\n }\n //This is the absolute last child, a text node, but something's wrong with it. Remove it and keep trying\n else if (\n !elem.lastChild ||\n !elem.lastChild.nodeValue ||\n elem.lastChild.nodeValue == \"\" ||\n elem.lastChild.nodeValue == opt.truncationChar\n ) {\n elem.lastChild.parentNode.removeChild(elem.lastChild);\n return getLastChild(element);\n }\n //This is the last child we want, return it\n else {\n return elem.lastChild;\n }\n }\n\n /**\n * Removes one character at a time from the text until its width or\n * height is beneath the passed-in max param.\n */\n function truncate(target, maxHeight) {\n if (!maxHeight) {\n return;\n }\n\n /**\n * Resets global variables.\n */\n function reset() {\n splitOnChars = opt.splitOnChars.slice(0);\n splitChar = splitOnChars[0];\n chunks = null;\n lastChunk = null;\n }\n\n var nodeValue = target.nodeValue.replace(opt.truncationChar, \"\");\n\n //Grab the next chunks\n if (!chunks) {\n //If there are more characters to try, grab the next one\n if (splitOnChars.length > 0) {\n splitChar = splitOnChars.shift();\n }\n //No characters to chunk by. Go character-by-character\n else {\n splitChar = \"\";\n }\n\n chunks = nodeValue.split(splitChar);\n }\n\n //If there are chunks left to remove, remove the last one and see if\n // the nodeValue fits.\n if (chunks.length > 1) {\n // console.log('chunks', chunks);\n lastChunk = chunks.pop();\n // console.log('lastChunk', lastChunk);\n applyEllipsis(target, chunks.join(splitChar));\n }\n //No more chunks can be removed using this character\n else {\n chunks = null;\n }\n\n //Insert the custom HTML before the truncation character\n if (truncationHTMLContainer) {\n target.nodeValue = target.nodeValue.replace(\n opt.truncationChar,\n \"\"\n );\n element.innerHTML =\n target.nodeValue +\n \" \" +\n truncationHTMLContainer.innerHTML +\n opt.truncationChar;\n }\n\n //Search produced valid chunks\n if (chunks) {\n //It fits\n if (element.clientHeight <= maxHeight) {\n //There's still more characters to try splitting on, not quite done yet\n if (splitOnChars.length >= 0 && splitChar != \"\") {\n applyEllipsis(\n target,\n chunks.join(splitChar) + splitChar + lastChunk\n );\n chunks = null;\n }\n //Finished!\n else {\n return element.innerHTML;\n }\n }\n }\n //No valid chunks produced\n else {\n //No valid chunks even when splitting by letter, time to move\n //on to the next node\n if (splitChar == \"\") {\n applyEllipsis(target, \"\");\n target = getLastChild(element);\n\n reset();\n }\n }\n\n //If you get here it means still too big, let's keep truncating\n if (opt.animate) {\n setTimeout(\n function() {\n truncate(target, maxHeight);\n },\n opt.animate === true ? 10 : opt.animate\n );\n } else {\n return truncate(target, maxHeight);\n }\n }\n\n function applyEllipsis(elem, str) {\n elem.nodeValue = str + opt.truncationChar;\n }\n\n // CONSTRUCTOR ________________________________________________________________\n\n if (clampValue == \"auto\") {\n clampValue = getMaxLines();\n } else if (isCSSValue) {\n clampValue = getMaxLines(parseInt(clampValue));\n }\n\n var clampedText;\n if (supportsNativeClamp && opt.useNativeClamp) {\n sty.overflow = \"hidden\";\n sty.textOverflow = \"ellipsis\";\n sty.webkitBoxOrient = \"vertical\";\n sty.display = \"-webkit-box\";\n sty.webkitLineClamp = clampValue;\n\n if (isCSSValue) {\n sty.height = opt.clamp + \"px\";\n }\n } else {\n var height = getMaxHeight(clampValue);\n if (height <= element.clientHeight) {\n clampedText = truncate(getLastChild(element), height);\n }\n }\n\n return {\n original: originalText,\n clamped: clampedText\n };\n }\n\n window.$clamp = clamp;\n})();\n","function iOS() {\n return (\n (/iPad|iPhone|iPod/.test(navigator.platform) ||\n (navigator.platform === \"MacIntel\" && navigator.maxTouchPoints > 1)) &&\n !window.MSStream\n );\n}\n\nwindow.addEventListener(\"load\", () => {\n if (iOS()) {\n const containers = document.querySelectorAll(\".wp-block-ms-container\");\n if (containers.length) {\n [...containers].forEach((container) =>\n container.style.setProperty(\"background-attachment\", \"scroll\", \"important\")\n );\n }\n }\n});\n","/*!\n * parallax.js v1.5.0 (http://pixelcog.github.io/parallax.js/)\n * @copyright 2016 PixelCog, Inc.\n * @license MIT (https://github.com/pixelcog/parallax.js/blob/master/LICENSE)\n */\n\n(function ($, window, document, undefined) {\n // Polyfill for requestAnimationFrame\n // via: https://gist.github.com/paulirish/1579671\n\n (function () {\n var lastTime = 0;\n var vendors = [\"ms\", \"moz\", \"webkit\", \"o\"];\n for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {\n window.requestAnimationFrame = window[vendors[x] + \"RequestAnimationFrame\"];\n window.cancelAnimationFrame =\n window[vendors[x] + \"CancelAnimationFrame\"] || window[vendors[x] + \"CancelRequestAnimationFrame\"];\n }\n\n if (!window.requestAnimationFrame)\n window.requestAnimationFrame = function (callback) {\n var currTime = new Date().getTime();\n var timeToCall = Math.max(0, 16 - (currTime - lastTime));\n var id = window.setTimeout(function () {\n callback(currTime + timeToCall);\n }, timeToCall);\n lastTime = currTime + timeToCall;\n return id;\n };\n\n if (!window.cancelAnimationFrame)\n window.cancelAnimationFrame = function (id) {\n clearTimeout(id);\n };\n })();\n\n // Parallax Constructor\n\n function Parallax(element, options) {\n var self = this;\n\n if (typeof options == \"object\") {\n delete options.refresh;\n delete options.render;\n $.extend(this, options);\n }\n\n this.$element = $(element);\n\n if (!this.imageSrc && this.$element.is(\"img\")) {\n this.imageSrc = this.$element.attr(\"src\");\n }\n\n var positions = (this.position + \"\").toLowerCase().match(/\\S+/g) || [];\n\n if (positions.length < 1) {\n positions.push(\"center\");\n }\n if (positions.length == 1) {\n positions.push(positions[0]);\n }\n\n if (positions[0] == \"top\" || positions[0] == \"bottom\" || positions[1] == \"left\" || positions[1] == \"right\") {\n positions = [positions[1], positions[0]];\n }\n\n if (this.positionX !== undefined) positions[0] = this.positionX.toLowerCase();\n if (this.positionY !== undefined) positions[1] = this.positionY.toLowerCase();\n\n self.positionX = positions[0];\n self.positionY = positions[1];\n\n if (this.positionX != \"left\" && this.positionX != \"right\") {\n if (isNaN(parseInt(this.positionX))) {\n this.positionX = \"center\";\n } else {\n this.positionX = parseInt(this.positionX);\n }\n }\n\n if (this.positionY != \"top\" && this.positionY != \"bottom\") {\n if (isNaN(parseInt(this.positionY))) {\n this.positionY = \"center\";\n } else {\n this.positionY = parseInt(this.positionY);\n }\n }\n\n this.position =\n this.positionX +\n (isNaN(this.positionX) ? \"\" : \"px\") +\n \" \" +\n this.positionY +\n (isNaN(this.positionY) ? \"\" : \"px\");\n\n if (navigator.userAgent.match(/(iPod|iPhone|iPad)/)) {\n if (this.imageSrc && this.iosFix && !this.$element.is(\"img\")) {\n this.$element.css({\n backgroundImage: 'url(\"' + this.imageSrc + '\")',\n backgroundSize: \"cover\",\n backgroundPosition: this.position,\n });\n }\n return this;\n }\n\n if (navigator.userAgent.match(/(Android)/)) {\n if (this.imageSrc && this.androidFix && !this.$element.is(\"img\")) {\n this.$element.css({\n backgroundImage: 'url(\"' + this.imageSrc + '\")',\n backgroundSize: \"cover\",\n backgroundPosition: this.position,\n });\n }\n return this;\n }\n\n this.$mirror = $(\"
\").prependTo(this.mirrorContainer);\n\n var slider = this.$element.find(\">.parallax-slider\");\n var sliderExisted = false;\n\n if (slider.length == 0) this.$slider = $(\"\").prependTo(this.$mirror);\n else {\n this.$slider = slider.prependTo(this.$mirror);\n sliderExisted = true;\n }\n\n this.$mirror.addClass(\"parallax-mirror\").css({\n visibility: \"hidden\",\n zIndex: this.zIndex,\n position: \"fixed\",\n top: 0,\n left: 0,\n overflow: \"hidden\",\n });\n\n this.$slider.addClass(\"parallax-slider\").one(\"load\", function () {\n if (!self.naturalHeight || !self.naturalWidth) {\n self.naturalHeight = this.naturalHeight || this.height || 1;\n self.naturalWidth = this.naturalWidth || this.width || 1;\n }\n self.aspectRatio = self.naturalWidth / self.naturalHeight;\n\n Parallax.isSetup || Parallax.setup();\n Parallax.sliders.push(self);\n Parallax.isFresh = false;\n Parallax.requestRender();\n });\n\n if (!sliderExisted) this.$slider[0].src = this.imageSrc;\n\n if ((this.naturalHeight && this.naturalWidth) || this.$slider[0].complete || slider.length > 0) {\n this.$slider.trigger(\"load\");\n }\n }\n\n // Parallax Instance Methods\n\n $.extend(Parallax.prototype, {\n speed: 0.2,\n bleed: 0,\n zIndex: -100,\n iosFix: true,\n androidFix: true,\n position: \"center\",\n overScrollFix: false,\n mirrorContainer: \"body\",\n\n refresh: function () {\n this.boxWidth = this.$element.outerWidth();\n this.boxHeight = this.$element.outerHeight() + this.bleed * 2;\n this.boxOffsetTop = this.$element.offset().top - this.bleed;\n this.boxOffsetLeft = this.$element.offset().left;\n this.boxOffsetBottom = this.boxOffsetTop + this.boxHeight;\n\n var winHeight = Parallax.winHeight;\n var docHeight = Parallax.docHeight;\n var maxOffset = Math.min(this.boxOffsetTop, docHeight - winHeight);\n var minOffset = Math.max(this.boxOffsetTop + this.boxHeight - winHeight, 0);\n var imageHeightMin = (this.boxHeight + (maxOffset - minOffset) * (1 - this.speed)) | 0;\n var imageOffsetMin = ((this.boxOffsetTop - maxOffset) * (1 - this.speed)) | 0;\n var margin;\n\n if (imageHeightMin * this.aspectRatio >= this.boxWidth) {\n this.imageWidth = (imageHeightMin * this.aspectRatio) | 0;\n this.imageHeight = imageHeightMin;\n this.offsetBaseTop = imageOffsetMin;\n\n margin = this.imageWidth - this.boxWidth;\n\n if (this.positionX == \"left\") {\n this.offsetLeft = 0;\n } else if (this.positionX == \"right\") {\n this.offsetLeft = -margin;\n } else if (!isNaN(this.positionX)) {\n this.offsetLeft = Math.max(this.positionX, -margin);\n } else {\n this.offsetLeft = (-margin / 2) | 0;\n }\n } else {\n this.imageWidth = this.boxWidth;\n this.imageHeight = (this.boxWidth / this.aspectRatio) | 0;\n this.offsetLeft = 0;\n\n margin = this.imageHeight - imageHeightMin;\n\n if (this.positionY == \"top\") {\n this.offsetBaseTop = imageOffsetMin;\n } else if (this.positionY == \"bottom\") {\n this.offsetBaseTop = imageOffsetMin - margin;\n } else if (!isNaN(this.positionY)) {\n this.offsetBaseTop = imageOffsetMin + Math.max(this.positionY, -margin);\n } else {\n this.offsetBaseTop = (imageOffsetMin - margin / 2) | 0;\n }\n }\n },\n\n render: function () {\n var scrollTop = Parallax.scrollTop;\n var scrollLeft = Parallax.scrollLeft;\n var overScroll = this.overScrollFix ? Parallax.overScroll : 0;\n var scrollBottom = scrollTop + Parallax.winHeight;\n\n if (this.boxOffsetBottom > scrollTop && this.boxOffsetTop <= scrollBottom) {\n this.visibility = \"visible\";\n this.mirrorTop = this.boxOffsetTop - scrollTop;\n this.mirrorLeft = this.boxOffsetLeft - scrollLeft;\n this.offsetTop = this.offsetBaseTop - this.mirrorTop * (1 - this.speed);\n } else {\n this.visibility = \"hidden\";\n }\n\n this.$mirror.css({\n transform: \"translate3d(\" + this.mirrorLeft + \"px, \" + (this.mirrorTop - overScroll) + \"px, 0px)\",\n visibility: this.visibility,\n height: this.boxHeight,\n width: this.boxWidth,\n });\n\n this.$slider.css({\n transform: \"translate3d(\" + this.offsetLeft + \"px, \" + this.offsetTop + \"px, 0px)\",\n position: \"absolute\",\n height: this.imageHeight,\n width: this.imageWidth,\n maxWidth: \"none\",\n });\n },\n });\n\n // Parallax Static Methods\n\n $.extend(Parallax, {\n scrollTop: 0,\n scrollLeft: 0,\n winHeight: 0,\n winWidth: 0,\n docHeight: 1 << 30,\n docWidth: 1 << 30,\n sliders: [],\n isReady: false,\n isFresh: false,\n isBusy: false,\n\n setup: function () {\n if (this.isReady) return;\n\n var self = this;\n\n var $doc = $(document),\n $win = $(window);\n\n var loadDimensions = function () {\n Parallax.winHeight = $win.height();\n Parallax.winWidth = $win.width();\n Parallax.docHeight = $doc.height();\n Parallax.docWidth = $doc.width();\n };\n\n var loadScrollPosition = function () {\n var winScrollTop = $win.scrollTop();\n var scrollTopMax = Parallax.docHeight - Parallax.winHeight;\n var scrollLeftMax = Parallax.docWidth - Parallax.winWidth;\n Parallax.scrollTop = Math.max(0, Math.min(scrollTopMax, winScrollTop));\n Parallax.scrollLeft = Math.max(0, Math.min(scrollLeftMax, $win.scrollLeft()));\n Parallax.overScroll = Math.max(winScrollTop - scrollTopMax, Math.min(winScrollTop, 0));\n };\n\n $win.on(\"resize.px.parallax load.px.parallax\", function () {\n loadDimensions();\n self.refresh();\n Parallax.isFresh = false;\n Parallax.requestRender();\n }).on(\"scroll.px.parallax load.px.parallax\", function () {\n loadScrollPosition();\n Parallax.requestRender();\n });\n\n loadDimensions();\n loadScrollPosition();\n\n this.isReady = true;\n\n var lastPosition = -1;\n\n function frameLoop() {\n if (lastPosition == window.pageYOffset) {\n // Avoid overcalculations\n window.requestAnimationFrame(frameLoop);\n return false;\n } else lastPosition = window.pageYOffset;\n\n self.render();\n window.requestAnimationFrame(frameLoop);\n }\n\n frameLoop();\n },\n\n configure: function (options) {\n if (typeof options == \"object\") {\n delete options.refresh;\n delete options.render;\n $.extend(this.prototype, options);\n }\n },\n\n refresh: function () {\n $.each(this.sliders, function () {\n this.refresh();\n });\n this.isFresh = true;\n },\n\n render: function () {\n this.isFresh || this.refresh();\n $.each(this.sliders, function () {\n this.render();\n });\n },\n\n requestRender: function () {\n var self = this;\n self.render();\n self.isBusy = false;\n },\n destroy: function (el) {\n var i,\n parallaxElement = $(el).data(\"px.parallax\");\n parallaxElement.$mirror.remove();\n for (i = 0; i < this.sliders.length; i += 1) {\n if (this.sliders[i] == parallaxElement) {\n this.sliders.splice(i, 1);\n }\n }\n $(el).data(\"px.parallax\", false);\n if (this.sliders.length === 0) {\n $(window).off(\"scroll.px.parallax resize.px.parallax load.px.parallax\");\n this.isReady = false;\n Parallax.isSetup = false;\n }\n },\n });\n\n // Parallax Plugin Definition\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this);\n var options = typeof option == \"object\" && option;\n\n if (this == window || this == document || $this.is(\"body\")) {\n Parallax.configure(options);\n } else if (!$this.data(\"px.parallax\")) {\n options = $.extend({}, $this.data(), options);\n $this.data(\"px.parallax\", new Parallax(this, options));\n } else if (typeof option == \"object\") {\n $.extend($this.data(\"px.parallax\"), options);\n }\n if (typeof option == \"string\") {\n if (option == \"destroy\") {\n Parallax.destroy(this);\n } else {\n Parallax[option]();\n }\n }\n });\n }\n\n var old = $.fn.parallax;\n\n $.fn.parallax = Plugin;\n $.fn.parallax.Constructor = Parallax;\n\n // Parallax No Conflict\n\n $.fn.parallax.noConflict = function () {\n $.fn.parallax = old;\n return this;\n };\n\n // Parallax Data-API\n\n $(function () {\n $('[data-parallax=\"scroll\"]').parallax();\n });\n})(jQuery, window, document);\n","document.addEventListener(\n \"DOMContentLoaded\",\n () => {\n // Load all blocks on the page.\n const featuredMenuItems = document.querySelectorAll(\".ms_featured-menu-items\");\n for (menu of featuredMenuItems) {\n // Get all previews and menu links from current block.\n const previews = menu.querySelectorAll(\".preview\");\n const menuLinks = menu.querySelectorAll(\"a\");\n for (link of menuLinks) {\n // Get the target.\n const target = link.dataset?.target;\n link.addEventListener(\n \"mouseover\",\n (event) => {\n for (preview of previews) {\n if (preview.dataset?.content === target) {\n preview.classList.remove(\"hide\");\n } else {\n preview.classList.add(\"hide\");\n }\n }\n },\n { passive: true }\n );\n }\n }\n },\n { passive: true }\n);\n","document.addEventListener(\n `DOMContentLoaded`,\n () => {\n /**\n * Add change event to the price toggle switch to show/hide prices.\n */\n const priceToggle = document.querySelector(\".ms_pricing .js-time-period-switch input\");\n const priceContent = document.querySelectorAll(\".ms_pricing .price-content\");\n const extraPriceContent = document.querySelectorAll(\".ms_pricing .extra-price-content\");\n if (priceToggle) {\n priceToggle.addEventListener(\n \"change\",\n () => {\n if (priceContent) {\n for (const priceBlock of priceContent) {\n priceBlock.classList.toggle(\"hide\");\n }\n }\n if (extraPriceContent) {\n for (const priceBlock of extraPriceContent) {\n priceBlock.classList.toggle(\"hide\");\n }\n }\n Foundation.reInit(\"equalizer\");\n },\n { passive: true }\n );\n }\n\n const priceBlocks = document.querySelectorAll(\".ms_pricing .price-block\");\n if (priceBlocks) {\n for (const block of priceBlocks) {\n const title = block.querySelector(\".title\").textContent;\n const buttonWC = block.querySelector(\".cta-button.woocommerce a\");\n const buttonWCHref = buttonWC ? buttonWC.href : undefined;\n const button = block.querySelector(\".cta-button:not(.woocommerce) a\");\n const buttonHref = button ? button.href : undefined;\n const extraOptions = block.querySelectorAll(\".extra-options input\");\n let selectedOptionsID = [];\n let selectedOptions = [];\n if (extraOptions) {\n for (const [index, option] of extraOptions.entries()) {\n const optionName = option.parentElement.parentElement.textContent.trim();\n const optionID = option.parentElement.parentElement.dataset.id;\n const firstPriceNode = block.querySelector(\".price-content.first .price .number\");\n const secondPriceNode = block.querySelector(\".price-content.second .price .number\");\n option.addEventListener(\n \"change\",\n function () {\n const optionPrice = parseFloat(this.dataset.price);\n const optionPrice2 = parseFloat(this.dataset.secondPrice);\n // Apply first extra option price to \"left label price\".\n if (optionPrice) {\n // First price.\n if (firstPriceNode) {\n const firstPrice = parseFloat(\n firstPriceNode.textContent.replace(/(\\d),(?=\\d)/g, \"$1.\")\n );\n const newFirstPriceHTML = this.checked\n ? firstPrice + optionPrice\n : firstPrice - optionPrice;\n firstPriceNode.textContent = newFirstPriceHTML\n .toFixed(2)\n .replace(\".\", \",\")\n .replace(\",00\", \"\");\n }\n }\n // Apply second extra option price to \"right label price\".\n if (optionPrice2) {\n // Second price.\n if (secondPriceNode) {\n const secondPrice = parseFloat(\n secondPriceNode.textContent.replace(/(\\d),(?=\\d)/g, \"$1.\")\n );\n const secondPriceHTML = this.checked\n ? secondPrice + optionPrice2\n : secondPrice - optionPrice2;\n secondPriceNode.textContent = secondPriceHTML\n .toFixed(2)\n .replace(\".\", \",\")\n .replace(\",00\", \"\");\n }\n }\n\n // Add parameters to the URL if extra options have been selected.\n if (title && button) {\n // Add or remove selected extra option.\n this.checked\n ? selectedOptions.splice(index, 0, optionName)\n : (selectedOptions = selectedOptions.filter((value) => value !== optionName));\n // Create the query string for the button.\n const params = new URLSearchParams();\n const options = selectedOptions.join(\" & \");\n const newParams = {\n ...(options !== \"\" && { \"extra-options\": options }),\n };\n for (const [key, val] of Object.entries(newParams)) {\n params.append(key, val);\n }\n button.href = buttonHref + params.toString();\n }\n\n if (buttonWC && optionID) {\n // Add or remove selected extra option.\n this.checked\n ? selectedOptionsID.splice(index, 0, optionID)\n : (selectedOptionsID = selectedOptionsID.filter((value) => value !== optionID));\n const optionsString = selectedOptionsID.join(\",\");\n buttonWC.href =\n optionsString !== \"\" ? buttonWCHref + \",\" + optionsString : buttonWCHref;\n buttonWC.dataset.id = buttonWC.href.split(\"=\")[1];\n }\n },\n { passive: true }\n );\n }\n }\n }\n }\n },\n { passive: true }\n);\n","/**\n * Dynamically intialize the `.review-slider`'s.\n */\nfunction msInitializeReviewSlider() {\n const slider = document.querySelector(`.review-slider`);\n if (slider) {\n let options = slider.dataset.sliderOptions;\n options = JSON.parse(options);\n const reviewSlider = new Swiper(`.review-slider`, options);\n }\n}\n\ndocument.addEventListener(\n `DOMContentLoaded`,\n function () {\n msInitializeReviewSlider();\n },\n { passive: true }\n);\n\nif (typeof acf !== \"undefined\") {\n acf.addAction(`render_block_preview`, function ($el, attributes) {\n msInitializeReviewSlider();\n });\n}\n","/**\n * Dynamically intialize the `home-header-slider`'s.\n * It will use the options in the `data-slider-options`.\n */\nfunction msInitializeBoatSlider() {\n const lastMinuteBoatSlider = new Swiper(`.last-minute-boat-slider`, {\n loop: true,\n loopedSlides: 0,\n slidesPerView: 1,\n spaceBetween: 0,\n autoplay: { delay: 5000 },\n effect: 'fade',\n fadeEffect: {\n crossFade: true\n },\n navigation: {\n 'nextEl': '.swiper-button-next',\n 'prevEl': '.swiper-button-prev',\n },\n });\n}\n\ndocument.addEventListener(`DOMContentLoaded`, function() {\n msInitializeBoatSlider();\n});\n\nif (typeof acf !== \"undefined\") {\n acf.addAction(`render_block_preview`, function($el, attributes) {\n msInitializeBoatSlider();\n });\n}\n","/**\n * matchesSelector v2.0.2\n * matchesSelector( element, '.selector' )\n * MIT license\n */\n\n/*jshint browser: true, strict: true, undef: true, unused: true */\n\n( function( window, factory ) {\n /*global define: false, module: false */\n 'use strict';\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.matchesSelector = factory();\n }\n\n}( window, function factory() {\n 'use strict';\n\n var matchesMethod = ( function() {\n var ElemProto = window.Element.prototype;\n // check for the standard method name first\n if ( ElemProto.matches ) {\n return 'matches';\n }\n // check un-prefixed\n if ( ElemProto.matchesSelector ) {\n return 'matchesSelector';\n }\n // check vendor prefixes\n var prefixes = [ 'webkit', 'moz', 'ms', 'o' ];\n\n for ( var i=0; i < prefixes.length; i++ ) {\n var prefix = prefixes[i];\n var method = prefix + 'MatchesSelector';\n if ( ElemProto[ method ] ) {\n return method;\n }\n }\n })();\n\n return function matchesSelector( elem, selector ) {\n return elem[ matchesMethod ]( selector );\n };\n\n}));\n","/**\n * EvEmitter v1.1.0\n * Lil' event emitter\n * MIT License\n */\n\n/* jshint unused: true, undef: true, strict: true */\n\n( function( global, factory ) {\n // universal module definition\n /* jshint strict: false */ /* globals define, module, window */\n if ( typeof define == 'function' && define.amd ) {\n // AMD - RequireJS\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory();\n } else {\n // Browser globals\n global.EvEmitter = factory();\n }\n\n}( typeof window != 'undefined' ? window : this, function() {\n\n\"use strict\";\n\nfunction EvEmitter() {}\n\nvar proto = EvEmitter.prototype;\n\nproto.on = function( eventName, listener ) {\n if ( !eventName || !listener ) {\n return;\n }\n // set events hash\n var events = this._events = this._events || {};\n // set listeners array\n var listeners = events[ eventName ] = events[ eventName ] || [];\n // only add once\n if ( listeners.indexOf( listener ) == -1 ) {\n listeners.push( listener );\n }\n\n return this;\n};\n\nproto.once = function( eventName, listener ) {\n if ( !eventName || !listener ) {\n return;\n }\n // add event\n this.on( eventName, listener );\n // set once flag\n // set onceEvents hash\n var onceEvents = this._onceEvents = this._onceEvents || {};\n // set onceListeners object\n var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};\n // set flag\n onceListeners[ listener ] = true;\n\n return this;\n};\n\nproto.off = function( eventName, listener ) {\n var listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) {\n return;\n }\n var index = listeners.indexOf( listener );\n if ( index != -1 ) {\n listeners.splice( index, 1 );\n }\n\n return this;\n};\n\nproto.emitEvent = function( eventName, args ) {\n var listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) {\n return;\n }\n // copy over to avoid interference if .off() in listener\n listeners = listeners.slice(0);\n args = args || [];\n // once stuff\n var onceListeners = this._onceEvents && this._onceEvents[ eventName ];\n\n for ( var i=0; i < listeners.length; i++ ) {\n var listener = listeners[i]\n var isOnce = onceListeners && onceListeners[ listener ];\n if ( isOnce ) {\n // remove listener\n // remove before trigger to prevent recursion\n this.off( eventName, listener );\n // unset once flag\n delete onceListeners[ listener ];\n }\n // trigger listener\n listener.apply( this, args );\n }\n\n return this;\n};\n\nproto.allOff = function() {\n delete this._events;\n delete this._onceEvents;\n};\n\nreturn EvEmitter;\n\n}));\n","/**\n * Fizzy UI utils v2.0.7\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'desandro-matches-selector/matches-selector'\n ], function( matchesSelector ) {\n return factory( window, matchesSelector );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('desandro-matches-selector')\n );\n } else {\n // browser global\n window.fizzyUIUtils = factory(\n window,\n window.matchesSelector\n );\n }\n\n}( window, function factory( window, matchesSelector ) {\n\n'use strict';\n\nvar utils = {};\n\n// ----- extend ----- //\n\n// extends objects\nutils.extend = function( a, b ) {\n for ( var prop in b ) {\n a[ prop ] = b[ prop ];\n }\n return a;\n};\n\n// ----- modulo ----- //\n\nutils.modulo = function( num, div ) {\n return ( ( num % div ) + div ) % div;\n};\n\n// ----- makeArray ----- //\n\nvar arraySlice = Array.prototype.slice;\n\n// turn element or nodeList into an array\nutils.makeArray = function( obj ) {\n if ( Array.isArray( obj ) ) {\n // use object if already an array\n return obj;\n }\n // return empty array if undefined or null. #6\n if ( obj === null || obj === undefined ) {\n return [];\n }\n\n var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n if ( isArrayLike ) {\n // convert nodeList to array\n return arraySlice.call( obj );\n }\n\n // array of single index\n return [ obj ];\n};\n\n// ----- removeFrom ----- //\n\nutils.removeFrom = function( ary, obj ) {\n var index = ary.indexOf( obj );\n if ( index != -1 ) {\n ary.splice( index, 1 );\n }\n};\n\n// ----- getParent ----- //\n\nutils.getParent = function( elem, selector ) {\n while ( elem.parentNode && elem != document.body ) {\n elem = elem.parentNode;\n if ( matchesSelector( elem, selector ) ) {\n return elem;\n }\n }\n};\n\n// ----- getQueryElement ----- //\n\n// use element as selector string\nutils.getQueryElement = function( elem ) {\n if ( typeof elem == 'string' ) {\n return document.querySelector( elem );\n }\n return elem;\n};\n\n// ----- handleEvent ----- //\n\n// enable .ontype to trigger from .addEventListener( elem, 'type' )\nutils.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\n// ----- filterFindElements ----- //\n\nutils.filterFindElements = function( elems, selector ) {\n // make array of elems\n elems = utils.makeArray( elems );\n var ffElems = [];\n\n elems.forEach( function( elem ) {\n // check that elem is an actual element\n if ( !( elem instanceof HTMLElement ) ) {\n return;\n }\n // add elem if no selector\n if ( !selector ) {\n ffElems.push( elem );\n return;\n }\n // filter & find items if we have a selector\n // filter\n if ( matchesSelector( elem, selector ) ) {\n ffElems.push( elem );\n }\n // find children\n var childElems = elem.querySelectorAll( selector );\n // concat childElems to filterFound array\n for ( var i=0; i < childElems.length; i++ ) {\n ffElems.push( childElems[i] );\n }\n });\n\n return ffElems;\n};\n\n// ----- debounceMethod ----- //\n\nutils.debounceMethod = function( _class, methodName, threshold ) {\n threshold = threshold || 100;\n // original method\n var method = _class.prototype[ methodName ];\n var timeoutName = methodName + 'Timeout';\n\n _class.prototype[ methodName ] = function() {\n var timeout = this[ timeoutName ];\n clearTimeout( timeout );\n\n var args = arguments;\n var _this = this;\n this[ timeoutName ] = setTimeout( function() {\n method.apply( _this, args );\n delete _this[ timeoutName ];\n }, threshold );\n };\n};\n\n// ----- docReady ----- //\n\nutils.docReady = function( callback ) {\n var readyState = document.readyState;\n if ( readyState == 'complete' || readyState == 'interactive' ) {\n // do async to allow for other scripts to run. metafizzy/flickity#441\n setTimeout( callback );\n } else {\n document.addEventListener( 'DOMContentLoaded', callback );\n }\n};\n\n// ----- htmlInit ----- //\n\n// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/\nutils.toDashed = function( str ) {\n return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {\n return $1 + '-' + $2;\n }).toLowerCase();\n};\n\nvar console = window.console;\n/**\n * allow user to initialize classes via [data-namespace] or .js-namespace class\n * htmlInit( Widget, 'widgetName' )\n * options are parsed from data-namespace-options\n */\nutils.htmlInit = function( WidgetClass, namespace ) {\n utils.docReady( function() {\n var dashedNamespace = utils.toDashed( namespace );\n var dataAttr = 'data-' + dashedNamespace;\n var dataAttrElems = document.querySelectorAll( '[' + dataAttr + ']' );\n var jsDashElems = document.querySelectorAll( '.js-' + dashedNamespace );\n var elems = utils.makeArray( dataAttrElems )\n .concat( utils.makeArray( jsDashElems ) );\n var dataOptionsAttr = dataAttr + '-options';\n var jQuery = window.jQuery;\n\n elems.forEach( function( elem ) {\n var attr = elem.getAttribute( dataAttr ) ||\n elem.getAttribute( dataOptionsAttr );\n var options;\n try {\n options = attr && JSON.parse( attr );\n } catch ( error ) {\n // log error, do not initialize\n if ( console ) {\n console.error( 'Error parsing ' + dataAttr + ' on ' + elem.className +\n ': ' + error );\n }\n return;\n }\n // initialize\n var instance = new WidgetClass( elem, options );\n // make available via $().data('namespace')\n if ( jQuery ) {\n jQuery.data( elem, namespace, instance );\n }\n });\n\n });\n};\n\n// ----- ----- //\n\nreturn utils;\n\n}));\n","/* eslint-env browser */\nmodule.exports = typeof self == 'object' ? self.FormData : window.FormData;\n","/*!\n * getSize v2.0.3\n * measure size of elements\n * MIT license\n */\n\n/* jshint browser: true, strict: true, undef: true, unused: true */\n/* globals console: false */\n\n( function( window, factory ) {\n /* jshint strict: false */ /* globals define, module */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.getSize = factory();\n }\n\n})( window, function factory() {\n'use strict';\n\n// -------------------------- helpers -------------------------- //\n\n// get a number from a string, not a percentage\nfunction getStyleSize( value ) {\n var num = parseFloat( value );\n // not a percent like '100%', and a number\n var isValid = value.indexOf('%') == -1 && !isNaN( num );\n return isValid && num;\n}\n\nfunction noop() {}\n\nvar logError = typeof console == 'undefined' ? noop :\n function( message ) {\n console.error( message );\n };\n\n// -------------------------- measurements -------------------------- //\n\nvar measurements = [\n 'paddingLeft',\n 'paddingRight',\n 'paddingTop',\n 'paddingBottom',\n 'marginLeft',\n 'marginRight',\n 'marginTop',\n 'marginBottom',\n 'borderLeftWidth',\n 'borderRightWidth',\n 'borderTopWidth',\n 'borderBottomWidth'\n];\n\nvar measurementsLength = measurements.length;\n\nfunction getZeroSize() {\n var size = {\n width: 0,\n height: 0,\n innerWidth: 0,\n innerHeight: 0,\n outerWidth: 0,\n outerHeight: 0\n };\n for ( var i=0; i < measurementsLength; i++ ) {\n var measurement = measurements[i];\n size[ measurement ] = 0;\n }\n return size;\n}\n\n// -------------------------- getStyle -------------------------- //\n\n/**\n * getStyle, get style of element, check for Firefox bug\n * https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n */\nfunction getStyle( elem ) {\n var style = getComputedStyle( elem );\n if ( !style ) {\n logError( 'Style returned ' + style +\n '. Are you running this code in a hidden iframe on Firefox? ' +\n 'See https://bit.ly/getsizebug1' );\n }\n return style;\n}\n\n// -------------------------- setup -------------------------- //\n\nvar isSetup = false;\n\nvar isBoxSizeOuter;\n\n/**\n * setup\n * check isBoxSizerOuter\n * do on first getSize() rather than on page load for Firefox bug\n */\nfunction setup() {\n // setup once\n if ( isSetup ) {\n return;\n }\n isSetup = true;\n\n // -------------------------- box sizing -------------------------- //\n\n /**\n * Chrome & Safari measure the outer-width on style.width on border-box elems\n * IE11 & Firefox<29 measures the inner-width\n */\n var div = document.createElement('div');\n div.style.width = '200px';\n div.style.padding = '1px 2px 3px 4px';\n div.style.borderStyle = 'solid';\n div.style.borderWidth = '1px 2px 3px 4px';\n div.style.boxSizing = 'border-box';\n\n var body = document.body || document.documentElement;\n body.appendChild( div );\n var style = getStyle( div );\n // round value for browser zoom. desandro/masonry#928\n isBoxSizeOuter = Math.round( getStyleSize( style.width ) ) == 200;\n getSize.isBoxSizeOuter = isBoxSizeOuter;\n\n body.removeChild( div );\n}\n\n// -------------------------- getSize -------------------------- //\n\nfunction getSize( elem ) {\n setup();\n\n // use querySeletor if elem is string\n if ( typeof elem == 'string' ) {\n elem = document.querySelector( elem );\n }\n\n // do not proceed on non-objects\n if ( !elem || typeof elem != 'object' || !elem.nodeType ) {\n return;\n }\n\n var style = getStyle( elem );\n\n // if hidden, everything is 0\n if ( style.display == 'none' ) {\n return getZeroSize();\n }\n\n var size = {};\n size.width = elem.offsetWidth;\n size.height = elem.offsetHeight;\n\n var isBorderBox = size.isBorderBox = style.boxSizing == 'border-box';\n\n // get all measurements\n for ( var i=0; i < measurementsLength; i++ ) {\n var measurement = measurements[i];\n var value = style[ measurement ];\n var num = parseFloat( value );\n // any 'auto', 'medium' value will be 0\n size[ measurement ] = !isNaN( num ) ? num : 0;\n }\n\n var paddingWidth = size.paddingLeft + size.paddingRight;\n var paddingHeight = size.paddingTop + size.paddingBottom;\n var marginWidth = size.marginLeft + size.marginRight;\n var marginHeight = size.marginTop + size.marginBottom;\n var borderWidth = size.borderLeftWidth + size.borderRightWidth;\n var borderHeight = size.borderTopWidth + size.borderBottomWidth;\n\n var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter;\n\n // overwrite width and height if we can get it from style\n var styleWidth = getStyleSize( style.width );\n if ( styleWidth !== false ) {\n size.width = styleWidth +\n // add padding and border unless it's already including it\n ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth );\n }\n\n var styleHeight = getStyleSize( style.height );\n if ( styleHeight !== false ) {\n size.height = styleHeight +\n // add padding and border unless it's already including it\n ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight );\n }\n\n size.innerWidth = size.width - ( paddingWidth + borderWidth );\n size.innerHeight = size.height - ( paddingHeight + borderHeight );\n\n size.outerWidth = size.width + marginWidth;\n size.outerHeight = size.height + marginHeight;\n\n return size;\n}\n\nreturn getSize;\n\n});\n","/*!\n * Isotope v3.0.6\n *\n * Licensed GPLv3 for open source use\n * or Isotope Commercial License for commercial use\n *\n * https://isotope.metafizzy.co\n * Copyright 2010-2018 Metafizzy\n */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */ /*globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'outlayer/outlayer',\n 'get-size/get-size',\n 'desandro-matches-selector/matches-selector',\n 'fizzy-ui-utils/utils',\n './item',\n './layout-mode',\n // include default layout modes\n './layout-modes/masonry',\n './layout-modes/fit-rows',\n './layout-modes/vertical'\n ],\n function( Outlayer, getSize, matchesSelector, utils, Item, LayoutMode ) {\n return factory( window, Outlayer, getSize, matchesSelector, utils, Item, LayoutMode );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('outlayer'),\n require('get-size'),\n require('desandro-matches-selector'),\n require('fizzy-ui-utils'),\n require('./item'),\n require('./layout-mode'),\n // include default layout modes\n require('./layout-modes/masonry'),\n require('./layout-modes/fit-rows'),\n require('./layout-modes/vertical')\n );\n } else {\n // browser global\n window.Isotope = factory(\n window,\n window.Outlayer,\n window.getSize,\n window.matchesSelector,\n window.fizzyUIUtils,\n window.Isotope.Item,\n window.Isotope.LayoutMode\n );\n }\n\n}( window, function factory( window, Outlayer, getSize, matchesSelector, utils,\n Item, LayoutMode ) {\n\n'use strict';\n\n// -------------------------- vars -------------------------- //\n\nvar jQuery = window.jQuery;\n\n// -------------------------- helpers -------------------------- //\n\nvar trim = String.prototype.trim ?\n function( str ) {\n return str.trim();\n } :\n function( str ) {\n return str.replace( /^\\s+|\\s+$/g, '' );\n };\n\n// -------------------------- isotopeDefinition -------------------------- //\n\n // create an Outlayer layout class\n var Isotope = Outlayer.create( 'isotope', {\n layoutMode: 'masonry',\n isJQueryFiltering: true,\n sortAscending: true\n });\n\n Isotope.Item = Item;\n Isotope.LayoutMode = LayoutMode;\n\n var proto = Isotope.prototype;\n\n proto._create = function() {\n this.itemGUID = 0;\n // functions that sort items\n this._sorters = {};\n this._getSorters();\n // call super\n Outlayer.prototype._create.call( this );\n\n // create layout modes\n this.modes = {};\n // start filteredItems with all items\n this.filteredItems = this.items;\n // keep of track of sortBys\n this.sortHistory = [ 'original-order' ];\n // create from registered layout modes\n for ( var name in LayoutMode.modes ) {\n this._initLayoutMode( name );\n }\n };\n\n proto.reloadItems = function() {\n // reset item ID counter\n this.itemGUID = 0;\n // call super\n Outlayer.prototype.reloadItems.call( this );\n };\n\n proto._itemize = function() {\n var items = Outlayer.prototype._itemize.apply( this, arguments );\n // assign ID for original-order\n for ( var i=0; i < items.length; i++ ) {\n var item = items[i];\n item.id = this.itemGUID++;\n }\n this._updateItemsSortData( items );\n return items;\n };\n\n\n // -------------------------- layout -------------------------- //\n\n proto._initLayoutMode = function( name ) {\n var Mode = LayoutMode.modes[ name ];\n // set mode options\n // HACK extend initial options, back-fill in default options\n var initialOpts = this.options[ name ] || {};\n this.options[ name ] = Mode.options ?\n utils.extend( Mode.options, initialOpts ) : initialOpts;\n // init layout mode instance\n this.modes[ name ] = new Mode( this );\n };\n\n\n proto.layout = function() {\n // if first time doing layout, do all magic\n if ( !this._isLayoutInited && this._getOption('initLayout') ) {\n this.arrange();\n return;\n }\n this._layout();\n };\n\n // private method to be used in layout() & magic()\n proto._layout = function() {\n // don't animate first layout\n var isInstant = this._getIsInstant();\n // layout flow\n this._resetLayout();\n this._manageStamps();\n this.layoutItems( this.filteredItems, isInstant );\n\n // flag for initalized\n this._isLayoutInited = true;\n };\n\n // filter + sort + layout\n proto.arrange = function( opts ) {\n // set any options pass\n this.option( opts );\n this._getIsInstant();\n // filter, sort, and layout\n\n // filter\n var filtered = this._filter( this.items );\n this.filteredItems = filtered.matches;\n\n this._bindArrangeComplete();\n\n if ( this._isInstant ) {\n this._noTransition( this._hideReveal, [ filtered ] );\n } else {\n this._hideReveal( filtered );\n }\n\n this._sort();\n this._layout();\n };\n // alias to _init for main plugin method\n proto._init = proto.arrange;\n\n proto._hideReveal = function( filtered ) {\n this.reveal( filtered.needReveal );\n this.hide( filtered.needHide );\n };\n\n // HACK\n // Don't animate/transition first layout\n // Or don't animate/transition other layouts\n proto._getIsInstant = function() {\n var isLayoutInstant = this._getOption('layoutInstant');\n var isInstant = isLayoutInstant !== undefined ? isLayoutInstant :\n !this._isLayoutInited;\n this._isInstant = isInstant;\n return isInstant;\n };\n\n // listen for layoutComplete, hideComplete and revealComplete\n // to trigger arrangeComplete\n proto._bindArrangeComplete = function() {\n // listen for 3 events to trigger arrangeComplete\n var isLayoutComplete, isHideComplete, isRevealComplete;\n var _this = this;\n function arrangeParallelCallback() {\n if ( isLayoutComplete && isHideComplete && isRevealComplete ) {\n _this.dispatchEvent( 'arrangeComplete', null, [ _this.filteredItems ] );\n }\n }\n this.once( 'layoutComplete', function() {\n isLayoutComplete = true;\n arrangeParallelCallback();\n });\n this.once( 'hideComplete', function() {\n isHideComplete = true;\n arrangeParallelCallback();\n });\n this.once( 'revealComplete', function() {\n isRevealComplete = true;\n arrangeParallelCallback();\n });\n };\n\n // -------------------------- filter -------------------------- //\n\n proto._filter = function( items ) {\n var filter = this.options.filter;\n filter = filter || '*';\n var matches = [];\n var hiddenMatched = [];\n var visibleUnmatched = [];\n\n var test = this._getFilterTest( filter );\n\n // test each item\n for ( var i=0; i < items.length; i++ ) {\n var item = items[i];\n if ( item.isIgnored ) {\n continue;\n }\n // add item to either matched or unmatched group\n var isMatched = test( item );\n // item.isFilterMatched = isMatched;\n // add to matches if its a match\n if ( isMatched ) {\n matches.push( item );\n }\n // add to additional group if item needs to be hidden or revealed\n if ( isMatched && item.isHidden ) {\n hiddenMatched.push( item );\n } else if ( !isMatched && !item.isHidden ) {\n visibleUnmatched.push( item );\n }\n }\n\n // return collections of items to be manipulated\n return {\n matches: matches,\n needReveal: hiddenMatched,\n needHide: visibleUnmatched\n };\n };\n\n // get a jQuery, function, or a matchesSelector test given the filter\n proto._getFilterTest = function( filter ) {\n if ( jQuery && this.options.isJQueryFiltering ) {\n // use jQuery\n return function( item ) {\n return jQuery( item.element ).is( filter );\n };\n }\n if ( typeof filter == 'function' ) {\n // use filter as function\n return function( item ) {\n return filter( item.element );\n };\n }\n // default, use filter as selector string\n return function( item ) {\n return matchesSelector( item.element, filter );\n };\n };\n\n // -------------------------- sorting -------------------------- //\n\n /**\n * @params {Array} elems\n * @public\n */\n proto.updateSortData = function( elems ) {\n // get items\n var items;\n if ( elems ) {\n elems = utils.makeArray( elems );\n items = this.getItems( elems );\n } else {\n // update all items if no elems provided\n items = this.items;\n }\n\n this._getSorters();\n this._updateItemsSortData( items );\n };\n\n proto._getSorters = function() {\n var getSortData = this.options.getSortData;\n for ( var key in getSortData ) {\n var sorter = getSortData[ key ];\n this._sorters[ key ] = mungeSorter( sorter );\n }\n };\n\n /**\n * @params {Array} items - of Isotope.Items\n * @private\n */\n proto._updateItemsSortData = function( items ) {\n // do not update if no items\n var len = items && items.length;\n\n for ( var i=0; len && i < len; i++ ) {\n var item = items[i];\n item.updateSortData();\n }\n };\n\n // ----- munge sorter ----- //\n\n // encapsulate this, as we just need mungeSorter\n // other functions in here are just for munging\n var mungeSorter = ( function() {\n // add a magic layer to sorters for convienent shorthands\n // `.foo-bar` will use the text of .foo-bar querySelector\n // `[foo-bar]` will use attribute\n // you can also add parser\n // `.foo-bar parseInt` will parse that as a number\n function mungeSorter( sorter ) {\n // if not a string, return function or whatever it is\n if ( typeof sorter != 'string' ) {\n return sorter;\n }\n // parse the sorter string\n var args = trim( sorter ).split(' ');\n var query = args[0];\n // check if query looks like [an-attribute]\n var attrMatch = query.match( /^\\[(.+)\\]$/ );\n var attr = attrMatch && attrMatch[1];\n var getValue = getValueGetter( attr, query );\n // use second argument as a parser\n var parser = Isotope.sortDataParsers[ args[1] ];\n // parse the value, if there was a parser\n sorter = parser ? function( elem ) {\n return elem && parser( getValue( elem ) );\n } :\n // otherwise just return value\n function( elem ) {\n return elem && getValue( elem );\n };\n\n return sorter;\n }\n\n // get an attribute getter, or get text of the querySelector\n function getValueGetter( attr, query ) {\n // if query looks like [foo-bar], get attribute\n if ( attr ) {\n return function getAttribute( elem ) {\n return elem.getAttribute( attr );\n };\n }\n\n // otherwise, assume its a querySelector, and get its text\n return function getChildText( elem ) {\n var child = elem.querySelector( query );\n return child && child.textContent;\n };\n }\n\n return mungeSorter;\n })();\n\n // parsers used in getSortData shortcut strings\n Isotope.sortDataParsers = {\n 'parseInt': function( val ) {\n return parseInt( val, 10 );\n },\n 'parseFloat': function( val ) {\n return parseFloat( val );\n }\n };\n\n // ----- sort method ----- //\n\n // sort filteredItem order\n proto._sort = function() {\n if ( !this.options.sortBy ) {\n return;\n }\n // keep track of sortBy History\n var sortBys = utils.makeArray( this.options.sortBy );\n if ( !this._getIsSameSortBy( sortBys ) ) {\n // concat all sortBy and sortHistory, add to front, oldest goes in last\n this.sortHistory = sortBys.concat( this.sortHistory );\n }\n // sort magic\n var itemSorter = getItemSorter( this.sortHistory, this.options.sortAscending );\n this.filteredItems.sort( itemSorter );\n };\n\n // check if sortBys is same as start of sortHistory\n proto._getIsSameSortBy = function( sortBys ) {\n for ( var i=0; i < sortBys.length; i++ ) {\n if ( sortBys[i] != this.sortHistory[i] ) {\n return false;\n }\n }\n return true;\n };\n\n // returns a function used for sorting\n function getItemSorter( sortBys, sortAsc ) {\n return function sorter( itemA, itemB ) {\n // cycle through all sortKeys\n for ( var i = 0; i < sortBys.length; i++ ) {\n var sortBy = sortBys[i];\n var a = itemA.sortData[ sortBy ];\n var b = itemB.sortData[ sortBy ];\n if ( a > b || a < b ) {\n // if sortAsc is an object, use the value given the sortBy key\n var isAscending = sortAsc[ sortBy ] !== undefined ? sortAsc[ sortBy ] : sortAsc;\n var direction = isAscending ? 1 : -1;\n return ( a > b ? 1 : -1 ) * direction;\n }\n }\n return 0;\n };\n }\n\n // -------------------------- methods -------------------------- //\n\n // get layout mode\n proto._mode = function() {\n var layoutMode = this.options.layoutMode;\n var mode = this.modes[ layoutMode ];\n if ( !mode ) {\n // TODO console.error\n throw new Error( 'No layout mode: ' + layoutMode );\n }\n // HACK sync mode's options\n // any options set after init for layout mode need to be synced\n mode.options = this.options[ layoutMode ];\n return mode;\n };\n\n proto._resetLayout = function() {\n // trigger original reset layout\n Outlayer.prototype._resetLayout.call( this );\n this._mode()._resetLayout();\n };\n\n proto._getItemLayoutPosition = function( item ) {\n return this._mode()._getItemLayoutPosition( item );\n };\n\n proto._manageStamp = function( stamp ) {\n this._mode()._manageStamp( stamp );\n };\n\n proto._getContainerSize = function() {\n return this._mode()._getContainerSize();\n };\n\n proto.needsResizeLayout = function() {\n return this._mode().needsResizeLayout();\n };\n\n // -------------------------- adding & removing -------------------------- //\n\n // HEADS UP overwrites default Outlayer appended\n proto.appended = function( elems ) {\n var items = this.addItems( elems );\n if ( !items.length ) {\n return;\n }\n // filter, layout, reveal new items\n var filteredItems = this._filterRevealAdded( items );\n // add to filteredItems\n this.filteredItems = this.filteredItems.concat( filteredItems );\n };\n\n // HEADS UP overwrites default Outlayer prepended\n proto.prepended = function( elems ) {\n var items = this._itemize( elems );\n if ( !items.length ) {\n return;\n }\n // start new layout\n this._resetLayout();\n this._manageStamps();\n // filter, layout, reveal new items\n var filteredItems = this._filterRevealAdded( items );\n // layout previous items\n this.layoutItems( this.filteredItems );\n // add to items and filteredItems\n this.filteredItems = filteredItems.concat( this.filteredItems );\n this.items = items.concat( this.items );\n };\n\n proto._filterRevealAdded = function( items ) {\n var filtered = this._filter( items );\n this.hide( filtered.needHide );\n // reveal all new items\n this.reveal( filtered.matches );\n // layout new items, no transition\n this.layoutItems( filtered.matches, true );\n return filtered.matches;\n };\n\n /**\n * Filter, sort, and layout newly-appended item elements\n * @param {Array or NodeList or Element} elems\n */\n proto.insert = function( elems ) {\n var items = this.addItems( elems );\n if ( !items.length ) {\n return;\n }\n // append item elements\n var i, item;\n var len = items.length;\n for ( i=0; i < len; i++ ) {\n item = items[i];\n this.element.appendChild( item.element );\n }\n // filter new stuff\n var filteredInsertItems = this._filter( items ).matches;\n // set flag\n for ( i=0; i < len; i++ ) {\n items[i].isLayoutInstant = true;\n }\n this.arrange();\n // reset flag\n for ( i=0; i < len; i++ ) {\n delete items[i].isLayoutInstant;\n }\n this.reveal( filteredInsertItems );\n };\n\n var _remove = proto.remove;\n proto.remove = function( elems ) {\n elems = utils.makeArray( elems );\n var removeItems = this.getItems( elems );\n // do regular thing\n _remove.call( this, elems );\n // bail if no items to remove\n var len = removeItems && removeItems.length;\n // remove elems from filteredItems\n for ( var i=0; len && i < len; i++ ) {\n var item = removeItems[i];\n // remove item from collection\n utils.removeFrom( this.filteredItems, item );\n }\n };\n\n proto.shuffle = function() {\n // update random sortData\n for ( var i=0; i < this.items.length; i++ ) {\n var item = this.items[i];\n item.sortData.random = Math.random();\n }\n this.options.sortBy = 'random';\n this._sort();\n this._layout();\n };\n\n /**\n * trigger fn without transition\n * kind of hacky to have this in the first place\n * @param {Function} fn\n * @param {Array} args\n * @returns ret\n * @private\n */\n proto._noTransition = function( fn, args ) {\n // save transitionDuration before disabling\n var transitionDuration = this.options.transitionDuration;\n // disable transition\n this.options.transitionDuration = 0;\n // do it\n var returnValue = fn.apply( this, args );\n // re-enable transition for reveal\n this.options.transitionDuration = transitionDuration;\n return returnValue;\n };\n\n // ----- helper methods ----- //\n\n /**\n * getter method for getting filtered item elements\n * @returns {Array} elems - collection of item elements\n */\n proto.getFilteredItemElements = function() {\n return this.filteredItems.map( function( item ) {\n return item.element;\n });\n };\n\n // ----- ----- //\n\n return Isotope;\n\n}));\n","/**\n * Isotope Item\n**/\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */ /*globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'outlayer/outlayer'\n ],\n factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('outlayer')\n );\n } else {\n // browser global\n window.Isotope = window.Isotope || {};\n window.Isotope.Item = factory(\n window.Outlayer\n );\n }\n\n}( window, function factory( Outlayer ) {\n'use strict';\n\n// -------------------------- Item -------------------------- //\n\n// sub-class Outlayer Item\nfunction Item() {\n Outlayer.Item.apply( this, arguments );\n}\n\nvar proto = Item.prototype = Object.create( Outlayer.Item.prototype );\n\nvar _create = proto._create;\nproto._create = function() {\n // assign id, used for original-order sorting\n this.id = this.layout.itemGUID++;\n _create.call( this );\n this.sortData = {};\n};\n\nproto.updateSortData = function() {\n if ( this.isIgnored ) {\n return;\n }\n // default sorters\n this.sortData.id = this.id;\n // for backward compatibility\n this.sortData['original-order'] = this.id;\n this.sortData.random = Math.random();\n // go thru getSortData obj and apply the sorters\n var getSortData = this.layout.options.getSortData;\n var sorters = this.layout._sorters;\n for ( var key in getSortData ) {\n var sorter = sorters[ key ];\n this.sortData[ key ] = sorter( this.element, this );\n }\n};\n\nvar _destroy = proto.destroy;\nproto.destroy = function() {\n // call super\n _destroy.apply( this, arguments );\n // reset display, #741\n this.css({\n display: ''\n });\n};\n\nreturn Item;\n\n}));\n","/**\n * Isotope LayoutMode\n */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */ /*globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'get-size/get-size',\n 'outlayer/outlayer'\n ],\n factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('get-size'),\n require('outlayer')\n );\n } else {\n // browser global\n window.Isotope = window.Isotope || {};\n window.Isotope.LayoutMode = factory(\n window.getSize,\n window.Outlayer\n );\n }\n\n}( window, function factory( getSize, Outlayer ) {\n 'use strict';\n\n // layout mode class\n function LayoutMode( isotope ) {\n this.isotope = isotope;\n // link properties\n if ( isotope ) {\n this.options = isotope.options[ this.namespace ];\n this.element = isotope.element;\n this.items = isotope.filteredItems;\n this.size = isotope.size;\n }\n }\n\n var proto = LayoutMode.prototype;\n\n /**\n * some methods should just defer to default Outlayer method\n * and reference the Isotope instance as `this`\n **/\n var facadeMethods = [\n '_resetLayout',\n '_getItemLayoutPosition',\n '_manageStamp',\n '_getContainerSize',\n '_getElementOffset',\n 'needsResizeLayout',\n '_getOption'\n ];\n\n facadeMethods.forEach( function( methodName ) {\n proto[ methodName ] = function() {\n return Outlayer.prototype[ methodName ].apply( this.isotope, arguments );\n };\n });\n\n // ----- ----- //\n\n // for horizontal layout modes, check vertical size\n proto.needsVerticalResizeLayout = function() {\n // don't trigger if size did not change\n var size = getSize( this.isotope.element );\n // check that this.size and size are there\n // IE8 triggers resize on body size change, so they might not be\n var hasSizes = this.isotope.size && size;\n return hasSizes && size.innerHeight != this.isotope.size.innerHeight;\n };\n\n // ----- measurements ----- //\n\n proto._getMeasurement = function() {\n this.isotope._getMeasurement.apply( this, arguments );\n };\n\n proto.getColumnWidth = function() {\n this.getSegmentSize( 'column', 'Width' );\n };\n\n proto.getRowHeight = function() {\n this.getSegmentSize( 'row', 'Height' );\n };\n\n /**\n * get columnWidth or rowHeight\n * segment: 'column' or 'row'\n * size 'Width' or 'Height'\n **/\n proto.getSegmentSize = function( segment, size ) {\n var segmentName = segment + size;\n var outerSize = 'outer' + size;\n // columnWidth / outerWidth // rowHeight / outerHeight\n this._getMeasurement( segmentName, outerSize );\n // got rowHeight or columnWidth, we can chill\n if ( this[ segmentName ] ) {\n return;\n }\n // fall back to item of first element\n var firstItemSize = this.getFirstItemSize();\n this[ segmentName ] = firstItemSize && firstItemSize[ outerSize ] ||\n // or size of container\n this.isotope.size[ 'inner' + size ];\n };\n\n proto.getFirstItemSize = function() {\n var firstItem = this.isotope.filteredItems[0];\n return firstItem && firstItem.element && getSize( firstItem.element );\n };\n\n // ----- methods that should reference isotope ----- //\n\n proto.layout = function() {\n this.isotope.layout.apply( this.isotope, arguments );\n };\n\n proto.getSize = function() {\n this.isotope.getSize();\n this.size = this.isotope.size;\n };\n\n // -------------------------- create -------------------------- //\n\n LayoutMode.modes = {};\n\n LayoutMode.create = function( namespace, options ) {\n\n function Mode() {\n LayoutMode.apply( this, arguments );\n }\n\n Mode.prototype = Object.create( proto );\n Mode.prototype.constructor = Mode;\n\n // default options\n if ( options ) {\n Mode.options = options;\n }\n\n Mode.prototype.namespace = namespace;\n // register in Isotope\n LayoutMode.modes[ namespace ] = Mode;\n\n return Mode;\n };\n\n return LayoutMode;\n\n}));\n","/**\n * fitRows layout mode\n */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */ /*globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n '../layout-mode'\n ],\n factory );\n } else if ( typeof exports == 'object' ) {\n // CommonJS\n module.exports = factory(\n require('../layout-mode')\n );\n } else {\n // browser global\n factory(\n window.Isotope.LayoutMode\n );\n }\n\n}( window, function factory( LayoutMode ) {\n'use strict';\n\nvar FitRows = LayoutMode.create('fitRows');\n\nvar proto = FitRows.prototype;\n\nproto._resetLayout = function() {\n this.x = 0;\n this.y = 0;\n this.maxY = 0;\n this._getMeasurement( 'gutter', 'outerWidth' );\n};\n\nproto._getItemLayoutPosition = function( item ) {\n item.getSize();\n\n var itemWidth = item.size.outerWidth + this.gutter;\n // if this element cannot fit in the current row\n var containerWidth = this.isotope.size.innerWidth + this.gutter;\n if ( this.x !== 0 && itemWidth + this.x > containerWidth ) {\n this.x = 0;\n this.y = this.maxY;\n }\n\n var position = {\n x: this.x,\n y: this.y\n };\n\n this.maxY = Math.max( this.maxY, this.y + item.size.outerHeight );\n this.x += itemWidth;\n\n return position;\n};\n\nproto._getContainerSize = function() {\n return { height: this.maxY };\n};\n\nreturn FitRows;\n\n}));\n","/*!\n * Masonry layout mode\n * sub-classes Masonry\n * https://masonry.desandro.com\n */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */ /*globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n '../layout-mode',\n 'masonry-layout/masonry'\n ],\n factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('../layout-mode'),\n require('masonry-layout')\n );\n } else {\n // browser global\n factory(\n window.Isotope.LayoutMode,\n window.Masonry\n );\n }\n\n}( window, function factory( LayoutMode, Masonry ) {\n'use strict';\n\n// -------------------------- masonryDefinition -------------------------- //\n\n // create an Outlayer layout class\n var MasonryMode = LayoutMode.create('masonry');\n\n var proto = MasonryMode.prototype;\n\n var keepModeMethods = {\n _getElementOffset: true,\n layout: true,\n _getMeasurement: true\n };\n\n // inherit Masonry prototype\n for ( var method in Masonry.prototype ) {\n // do not inherit mode methods\n if ( !keepModeMethods[ method ] ) {\n proto[ method ] = Masonry.prototype[ method ];\n }\n }\n\n var measureColumns = proto.measureColumns;\n proto.measureColumns = function() {\n // set items, used if measuring first item\n this.items = this.isotope.filteredItems;\n measureColumns.call( this );\n };\n\n // point to mode options for fitWidth\n var _getOption = proto._getOption;\n proto._getOption = function( option ) {\n if ( option == 'fitWidth' ) {\n return this.options.isFitWidth !== undefined ?\n this.options.isFitWidth : this.options.fitWidth;\n }\n return _getOption.apply( this.isotope, arguments );\n };\n\n return MasonryMode;\n\n}));\n","/**\n * vertical layout mode\n */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */ /*globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n '../layout-mode'\n ],\n factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('../layout-mode')\n );\n } else {\n // browser global\n factory(\n window.Isotope.LayoutMode\n );\n }\n\n}( window, function factory( LayoutMode ) {\n'use strict';\n\nvar Vertical = LayoutMode.create( 'vertical', {\n horizontalAlignment: 0\n});\n\nvar proto = Vertical.prototype;\n\nproto._resetLayout = function() {\n this.y = 0;\n};\n\nproto._getItemLayoutPosition = function( item ) {\n item.getSize();\n var x = ( this.isotope.size.innerWidth - item.size.outerWidth ) *\n this.options.horizontalAlignment;\n var y = this.y;\n this.y += item.size.outerHeight;\n return { x: x, y: y };\n};\n\nproto._getContainerSize = function() {\n return { height: this.y };\n};\n\nreturn Vertical;\n\n}));\n","!function(t,n){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=n():\"function\"==typeof define&&define.amd?define(n):t.Macy=n()}(this,function(){\"use strict\";function t(t,n){var e=void 0;return function(){e&&clearTimeout(e),e=setTimeout(t,n)}}function n(t,n){for(var e=t.length,r=e,o=[];e--;)o.push(n(t[r-e-1]));return o}function e(t,n){var e=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(window.Promise)return A(t,n,e);t.recalculate(!0,!0)}function r(t){for(var n=t.options,e=t.responsiveOptions,r=t.keys,o=t.docWidth,i=void 0,s=0;s=a&&(i=n.breakAt[a],O(i,e))}return e}function o(t){for(var n=t.options,e=t.responsiveOptions,r=t.keys,o=t.docWidth,i=void 0,s=r.length-1;s>=0;s--){var a=parseInt(r[s],10);o<=a&&(i=n.breakAt[a],O(i,e))}return e}function i(t){var n=t.useContainerForBreakpoints?t.container.clientWidth:window.innerWidth,e={columns:t.columns};b(t.margin)?e.margin={x:t.margin.x,y:t.margin.y}:e.margin={x:t.margin,y:t.margin};var i=Object.keys(t.breakAt);return t.mobileFirst?r({options:t,responsiveOptions:e,keys:i,docWidth:n}):o({options:t,responsiveOptions:e,keys:i,docWidth:n})}function s(t){return i(t).columns}function a(t){return i(t).margin}function c(t){var n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],e=s(t),r=a(t).x,o=100/e;if(!n)return o;if(1===e)return\"100%\";var i=\"px\";if(\"string\"==typeof r){var c=parseFloat(r);i=r.replace(c,\"\"),r=c}return r=(e-1)*r/e,\"%\"===i?o-r+\"%\":\"calc(\"+o+\"% - \"+r+i+\")\"}function u(t,n){var e=s(t.options),r=0,o=void 0,i=void 0;if(1===++n)return 0;i=a(t.options).x;var u=\"px\";if(\"string\"==typeof i){var l=parseFloat(i,10);u=i.replace(l,\"\"),i=l}return o=(i-(e-1)*i/e)*(n-1),r+=c(t.options,!1)*(n-1),\"%\"===u?r+o+\"%\":\"calc(\"+r+\"% + \"+o+u+\")\"}function l(t){var n=0,e=t.container,r=t.rows;v(r,function(t){n=t>n?t:n}),e.style.height=n+\"px\"}function p(t,n){var e=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=s(t.options),i=a(t.options).y;M(t,o,e),v(n,function(n){var e=0,o=parseInt(n.offsetHeight,10);isNaN(o)||(t.rows.forEach(function(n,r){n2&&void 0!==arguments[2]&&arguments[2],r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=s(t.options),i=a(t.options).y;M(t,o,e),v(n,function(n){t.lastcol===o&&(t.lastcol=0);var e=C(n,\"height\");e=parseInt(n.offsetHeight,10),isNaN(e)||(n.style.position=\"absolute\",n.style.top=t.rows[t.lastcol]+\"px\",n.style.left=\"\"+t.cols[t.lastcol],t.rows[t.lastcol]+=isNaN(e)?0:e+i,t.lastcol+=1,r&&(n.dataset.macyComplete=1))}),r&&(t.tmpRows=null),l(t)}var h=function t(n,e){if(!(this instanceof t))return new t(n,e);if(n&&n.nodeName)return n;if(n=n.replace(/^\\s*/,\"\").replace(/\\s*$/,\"\"),e)return this.byCss(n,e);for(var r in this.selectors)if(e=r.split(\"/\"),new RegExp(e[1],e[2]).test(n))return this.selectors[r](n);return this.byCss(n)};h.prototype.byCss=function(t,n){return(n||document).querySelectorAll(t)},h.prototype.selectors={},h.prototype.selectors[/^\\.[\\w\\-]+$/]=function(t){return document.getElementsByClassName(t.substring(1))},h.prototype.selectors[/^\\w+$/]=function(t){return document.getElementsByTagName(t)},h.prototype.selectors[/^\\#[\\w\\-]+$/]=function(t){return document.getElementById(t.substring(1))};var v=function(t,n){for(var e=t.length,r=e;e--;)n(t[r-e-1])},m=function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.running=!1,this.events=[],this.add(t)};m.prototype.run=function(){if(!this.running&&this.events.length>0){var t=this.events.shift();this.running=!0,t(),this.running=!1,this.run()}},m.prototype.add=function(){var t=this,n=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return!!n&&(Array.isArray(n)?v(n,function(n){return t.add(n)}):(this.events.push(n),void this.run()))},m.prototype.clear=function(){this.events=[]};var d=function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.instance=t,this.data=n,this},y=function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.events={},this.instance=t};y.prototype.on=function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return!(!t||!n)&&(Array.isArray(this.events[t])||(this.events[t]=[]),this.events[t].push(n))},y.prototype.emit=function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t||!Array.isArray(this.events[t]))return!1;var e=new d(this.instance,n);v(this.events[t],function(t){return t(e)})};var g=function(t){return!(\"naturalHeight\"in t&&t.naturalHeight+t.naturalWidth===0)||t.width+t.height!==0},E=function(t,n){var e=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return new Promise(function(t,e){if(n.complete)return g(n)?t(n):e(n);n.addEventListener(\"load\",function(){return g(n)?t(n):e(n)}),n.addEventListener(\"error\",function(){return e(n)})}).then(function(n){e&&t.emit(t.constants.EVENT_IMAGE_LOAD,{img:n})}).catch(function(n){return t.emit(t.constants.EVENT_IMAGE_ERROR,{img:n})})},w=function(t,e){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return n(e,function(n){return E(t,n,r)})},A=function(t,n){var e=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return Promise.all(w(t,n,e)).then(function(){t.emit(t.constants.EVENT_IMAGE_COMPLETE)})},I=function(n){return t(function(){n.emit(n.constants.EVENT_RESIZE),n.queue.add(function(){return n.recalculate(!0,!0)})},100)},N=function(t){if(t.container=h(t.options.container),t.container instanceof h||!t.container)return!!t.options.debug&&console.error(\"Error: Container not found\");t.container.length&&(t.container=t.container[0]),t.options.container=t.container,t.container.style.position=\"relative\"},T=function(t){t.queue=new m,t.events=new y(t),t.rows=[],t.resizer=I(t)},L=function(t){var n=h(\"img\",t.container);window.addEventListener(\"resize\",t.resizer),t.on(t.constants.EVENT_IMAGE_LOAD,function(){return t.recalculate(!1,!1)}),t.on(t.constants.EVENT_IMAGE_COMPLETE,function(){return t.recalculate(!0,!0)}),t.options.useOwnImageLoader||e(t,n,!t.options.waitForImages),t.emit(t.constants.EVENT_INITIALIZED)},_=function(t){N(t),T(t),L(t)},b=function(t){return t===Object(t)&&\"[object Array]\"!==Object.prototype.toString.call(t)},O=function(t,n){b(t)||(n.columns=t),b(t)&&t.columns&&(n.columns=t.columns),b(t)&&t.margin&&!b(t.margin)&&(n.margin={x:t.margin,y:t.margin}),b(t)&&t.margin&&b(t.margin)&&t.margin.x&&(n.margin.x=t.margin.x),b(t)&&t.margin&&b(t.margin)&&t.margin.y&&(n.margin.y=t.margin.y)},C=function(t,n){return window.getComputedStyle(t,null).getPropertyValue(n)},M=function(t,n){var e=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(t.lastcol||(t.lastcol=0),t.rows.length<1&&(e=!0),e){t.rows=[],t.cols=[],t.lastcol=0;for(var r=n-1;r>=0;r--)t.rows[r]=0,t.cols[r]=u(t,r)}else if(t.tmpRows){t.rows=[];for(var r=n-1;r>=0;r--)t.rows[r]=t.tmpRows[r]}else{t.tmpRows=[];for(var r=n-1;r>=0;r--)t.tmpRows[r]=t.rows[r]}},V=function(t){var n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],e=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],r=n?t.container.children:h(':scope > *:not([data-macy-complete=\"1\"])',t.container);r=Array.from(r).filter(function(t){return null!==t.offsetParent});var o=c(t.options);return v(r,function(t){n&&(t.dataset.macyComplete=0),t.style.width=o}),t.options.trueOrder?(f(t,r,n,e),t.emit(t.constants.EVENT_RECALCULATED)):(p(t,r,n,e),t.emit(t.constants.EVENT_RECALCULATED))},R=function(){return!!window.Promise},x=Object.assign||function(t){for(var n=1;n0&&void 0!==arguments[0]?arguments[0]:k;if(!(this instanceof t))return new t(n);this.options={},x(this.options,k,n),this.options.cancelLegacy&&!R()||_(this)};return q.init=function(t){return console.warn(\"Depreciated: Macy.init will be removed in v3.0.0 opt to use Macy directly like so Macy({ /*options here*/ }) \"),new q(t)},q.prototype.recalculateOnImageLoad=function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return e(this,h(\"img\",this.container),!t)},q.prototype.runOnImageLoad=function(t){var n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=h(\"img\",this.container);return this.on(this.constants.EVENT_IMAGE_COMPLETE,t),n&&this.on(this.constants.EVENT_IMAGE_LOAD,t),e(this,r,n)},q.prototype.recalculate=function(){var t=this,n=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return e&&this.queue.clear(),this.queue.add(function(){return V(t,n,e)})},q.prototype.remove=function(){window.removeEventListener(\"resize\",this.resizer),v(this.container.children,function(t){t.removeAttribute(\"data-macy-complete\"),t.removeAttribute(\"style\")}),this.container.removeAttribute(\"style\")},q.prototype.reInit=function(){this.recalculate(!0,!0),this.emit(this.constants.EVENT_INITIALIZED),window.addEventListener(\"resize\",this.resizer),this.container.style.position=\"relative\"},q.prototype.on=function(t,n){this.events.on(t,n)},q.prototype.emit=function(t,n){this.events.emit(t,n)},q.constants={EVENT_INITIALIZED:\"macy.initialized\",EVENT_RECALCULATED:\"macy.recalculated\",EVENT_IMAGE_LOAD:\"macy.image.load\",EVENT_IMAGE_ERROR:\"macy.image.error\",EVENT_IMAGE_COMPLETE:\"macy.images.complete\",EVENT_RESIZE:\"macy.resize\"},q.prototype.constants=q.constants,q});\n","/*!\n * Masonry v4.2.2\n * Cascading grid layout library\n * https://masonry.desandro.com\n * MIT License\n * by David DeSandro\n */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */ /*globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'outlayer/outlayer',\n 'get-size/get-size'\n ],\n factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('outlayer'),\n require('get-size')\n );\n } else {\n // browser global\n window.Masonry = factory(\n window.Outlayer,\n window.getSize\n );\n }\n\n}( window, function factory( Outlayer, getSize ) {\n\n'use strict';\n\n// -------------------------- masonryDefinition -------------------------- //\n\n // create an Outlayer layout class\n var Masonry = Outlayer.create('masonry');\n // isFitWidth -> fitWidth\n Masonry.compatOptions.fitWidth = 'isFitWidth';\n\n var proto = Masonry.prototype;\n\n proto._resetLayout = function() {\n this.getSize();\n this._getMeasurement( 'columnWidth', 'outerWidth' );\n this._getMeasurement( 'gutter', 'outerWidth' );\n this.measureColumns();\n\n // reset column Y\n this.colYs = [];\n for ( var i=0; i < this.cols; i++ ) {\n this.colYs.push( 0 );\n }\n\n this.maxY = 0;\n this.horizontalColIndex = 0;\n };\n\n proto.measureColumns = function() {\n this.getContainerWidth();\n // if columnWidth is 0, default to outerWidth of first item\n if ( !this.columnWidth ) {\n var firstItem = this.items[0];\n var firstItemElem = firstItem && firstItem.element;\n // columnWidth fall back to item of first element\n this.columnWidth = firstItemElem && getSize( firstItemElem ).outerWidth ||\n // if first elem has no width, default to size of container\n this.containerWidth;\n }\n\n var columnWidth = this.columnWidth += this.gutter;\n\n // calculate columns\n var containerWidth = this.containerWidth + this.gutter;\n var cols = containerWidth / columnWidth;\n // fix rounding errors, typically with gutters\n var excess = columnWidth - containerWidth % columnWidth;\n // if overshoot is less than a pixel, round up, otherwise floor it\n var mathMethod = excess && excess < 1 ? 'round' : 'floor';\n cols = Math[ mathMethod ]( cols );\n this.cols = Math.max( cols, 1 );\n };\n\n proto.getContainerWidth = function() {\n // container is parent if fit width\n var isFitWidth = this._getOption('fitWidth');\n var container = isFitWidth ? this.element.parentNode : this.element;\n // check that this.size and size are there\n // IE8 triggers resize on body size change, so they might not be\n var size = getSize( container );\n this.containerWidth = size && size.innerWidth;\n };\n\n proto._getItemLayoutPosition = function( item ) {\n item.getSize();\n // how many columns does this brick span\n var remainder = item.size.outerWidth % this.columnWidth;\n var mathMethod = remainder && remainder < 1 ? 'round' : 'ceil';\n // round if off by 1 pixel, otherwise use ceil\n var colSpan = Math[ mathMethod ]( item.size.outerWidth / this.columnWidth );\n colSpan = Math.min( colSpan, this.cols );\n // use horizontal or top column position\n var colPosMethod = this.options.horizontalOrder ?\n '_getHorizontalColPosition' : '_getTopColPosition';\n var colPosition = this[ colPosMethod ]( colSpan, item );\n // position the brick\n var position = {\n x: this.columnWidth * colPosition.col,\n y: colPosition.y\n };\n // apply setHeight to necessary columns\n var setHeight = colPosition.y + item.size.outerHeight;\n var setMax = colSpan + colPosition.col;\n for ( var i = colPosition.col; i < setMax; i++ ) {\n this.colYs[i] = setHeight;\n }\n\n return position;\n };\n\n proto._getTopColPosition = function( colSpan ) {\n var colGroup = this._getTopColGroup( colSpan );\n // get the minimum Y value from the columns\n var minimumY = Math.min.apply( Math, colGroup );\n\n return {\n col: colGroup.indexOf( minimumY ),\n y: minimumY,\n };\n };\n\n /**\n * @param {Number} colSpan - number of columns the element spans\n * @returns {Array} colGroup\n */\n proto._getTopColGroup = function( colSpan ) {\n if ( colSpan < 2 ) {\n // if brick spans only one column, use all the column Ys\n return this.colYs;\n }\n\n var colGroup = [];\n // how many different places could this brick fit horizontally\n var groupCount = this.cols + 1 - colSpan;\n // for each group potential horizontal position\n for ( var i = 0; i < groupCount; i++ ) {\n colGroup[i] = this._getColGroupY( i, colSpan );\n }\n return colGroup;\n };\n\n proto._getColGroupY = function( col, colSpan ) {\n if ( colSpan < 2 ) {\n return this.colYs[ col ];\n }\n // make an array of colY values for that one group\n var groupColYs = this.colYs.slice( col, col + colSpan );\n // and get the max value of the array\n return Math.max.apply( Math, groupColYs );\n };\n\n // get column position based on horizontal index. #873\n proto._getHorizontalColPosition = function( colSpan, item ) {\n var col = this.horizontalColIndex % this.cols;\n var isOver = colSpan > 1 && col + colSpan > this.cols;\n // shift to next row if item can't fit on current row\n col = isOver ? 0 : col;\n // don't let zero-size items take up space\n var hasSize = item.size.outerWidth && item.size.outerHeight;\n this.horizontalColIndex = hasSize ? col + colSpan : this.horizontalColIndex;\n\n return {\n col: col,\n y: this._getColGroupY( col, colSpan ),\n };\n };\n\n proto._manageStamp = function( stamp ) {\n var stampSize = getSize( stamp );\n var offset = this._getElementOffset( stamp );\n // get the columns that this stamp affects\n var isOriginLeft = this._getOption('originLeft');\n var firstX = isOriginLeft ? offset.left : offset.right;\n var lastX = firstX + stampSize.outerWidth;\n var firstCol = Math.floor( firstX / this.columnWidth );\n firstCol = Math.max( 0, firstCol );\n var lastCol = Math.floor( lastX / this.columnWidth );\n // lastCol should not go over if multiple of columnWidth #425\n lastCol -= lastX % this.columnWidth ? 0 : 1;\n lastCol = Math.min( this.cols - 1, lastCol );\n // set colYs to bottom of the stamp\n\n var isOriginTop = this._getOption('originTop');\n var stampMaxY = ( isOriginTop ? offset.top : offset.bottom ) +\n stampSize.outerHeight;\n for ( var i = firstCol; i <= lastCol; i++ ) {\n this.colYs[i] = Math.max( stampMaxY, this.colYs[i] );\n }\n };\n\n proto._getContainerSize = function() {\n this.maxY = Math.max.apply( Math, this.colYs );\n var size = {\n height: this.maxY\n };\n\n if ( this._getOption('fitWidth') ) {\n size.width = this._getContainerFitWidth();\n }\n\n return size;\n };\n\n proto._getContainerFitWidth = function() {\n var unusedCols = 0;\n // count unused columns\n var i = this.cols;\n while ( --i ) {\n if ( this.colYs[i] !== 0 ) {\n break;\n }\n unusedCols++;\n }\n // fit container to columns that have been used\n return ( this.cols - unusedCols ) * this.columnWidth - this.gutter;\n };\n\n proto.needsResizeLayout = function() {\n var previousWidth = this.containerWidth;\n this.getContainerWidth();\n return previousWidth != this.containerWidth;\n };\n\n return Masonry;\n\n}));\n","/*! npm.im/object-fit-images 3.2.4 */\n'use strict';\n\nvar OFI = 'bfred-it:object-fit-images';\nvar propRegex = /(object-fit|object-position)\\s*:\\s*([-.\\w\\s%]+)/g;\nvar testImg = typeof Image === 'undefined' ? {style: {'object-position': 1}} : new Image();\nvar supportsObjectFit = 'object-fit' in testImg.style;\nvar supportsObjectPosition = 'object-position' in testImg.style;\nvar supportsOFI = 'background-size' in testImg.style;\nvar supportsCurrentSrc = typeof testImg.currentSrc === 'string';\nvar nativeGetAttribute = testImg.getAttribute;\nvar nativeSetAttribute = testImg.setAttribute;\nvar autoModeEnabled = false;\n\nfunction createPlaceholder(w, h) {\n\treturn (\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='\" + w + \"' height='\" + h + \"'%3E%3C/svg%3E\");\n}\n\nfunction polyfillCurrentSrc(el) {\n\tif (el.srcset && !supportsCurrentSrc && window.picturefill) {\n\t\tvar pf = window.picturefill._;\n\t\t// parse srcset with picturefill where currentSrc isn't available\n\t\tif (!el[pf.ns] || !el[pf.ns].evaled) {\n\t\t\t// force synchronous srcset parsing\n\t\t\tpf.fillImg(el, {reselect: true});\n\t\t}\n\n\t\tif (!el[pf.ns].curSrc) {\n\t\t\t// force picturefill to parse srcset\n\t\t\tel[pf.ns].supported = false;\n\t\t\tpf.fillImg(el, {reselect: true});\n\t\t}\n\n\t\t// retrieve parsed currentSrc, if any\n\t\tel.currentSrc = el[pf.ns].curSrc || el.src;\n\t}\n}\n\nfunction getStyle(el) {\n\tvar style = getComputedStyle(el).fontFamily;\n\tvar parsed;\n\tvar props = {};\n\twhile ((parsed = propRegex.exec(style)) !== null) {\n\t\tprops[parsed[1]] = parsed[2];\n\t}\n\treturn props;\n}\n\nfunction setPlaceholder(img, width, height) {\n\t// Default: fill width, no height\n\tvar placeholder = createPlaceholder(width || 1, height || 0);\n\n\t// Only set placeholder if it's different\n\tif (nativeGetAttribute.call(img, 'src') !== placeholder) {\n\t\tnativeSetAttribute.call(img, 'src', placeholder);\n\t}\n}\n\nfunction onImageReady(img, callback) {\n\t// naturalWidth is only available when the image headers are loaded,\n\t// this loop will poll it every 100ms.\n\tif (img.naturalWidth) {\n\t\tcallback(img);\n\t} else {\n\t\tsetTimeout(onImageReady, 100, img, callback);\n\t}\n}\n\nfunction fixOne(el) {\n\tvar style = getStyle(el);\n\tvar ofi = el[OFI];\n\tstyle['object-fit'] = style['object-fit'] || 'fill'; // default value\n\n\t// Avoid running where unnecessary, unless OFI had already done its deed\n\tif (!ofi.img) {\n\t\t// fill is the default behavior so no action is necessary\n\t\tif (style['object-fit'] === 'fill') {\n\t\t\treturn;\n\t\t}\n\n\t\t// Where object-fit is supported and object-position isn't (Safari < 10)\n\t\tif (\n\t\t\t!ofi.skipTest && // unless user wants to apply regardless of browser support\n\t\t\tsupportsObjectFit && // if browser already supports object-fit\n\t\t\t!style['object-position'] // unless object-position is used\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\t// keep a clone in memory while resetting the original to a blank\n\tif (!ofi.img) {\n\t\tofi.img = new Image(el.width, el.height);\n\t\tofi.img.srcset = nativeGetAttribute.call(el, \"data-ofi-srcset\") || el.srcset;\n\t\tofi.img.src = nativeGetAttribute.call(el, \"data-ofi-src\") || el.src;\n\n\t\t// preserve for any future cloneNode calls\n\t\t// https://github.com/bfred-it/object-fit-images/issues/53\n\t\tnativeSetAttribute.call(el, \"data-ofi-src\", el.src);\n\t\tif (el.srcset) {\n\t\t\tnativeSetAttribute.call(el, \"data-ofi-srcset\", el.srcset);\n\t\t}\n\n\t\tsetPlaceholder(el, el.naturalWidth || el.width, el.naturalHeight || el.height);\n\n\t\t// remove srcset because it overrides src\n\t\tif (el.srcset) {\n\t\t\tel.srcset = '';\n\t\t}\n\t\ttry {\n\t\t\tkeepSrcUsable(el);\n\t\t} catch (err) {\n\t\t\tif (window.console) {\n\t\t\t\tconsole.warn('https://bit.ly/ofi-old-browser');\n\t\t\t}\n\t\t}\n\t}\n\n\tpolyfillCurrentSrc(ofi.img);\n\n\tel.style.backgroundImage = \"url(\\\"\" + ((ofi.img.currentSrc || ofi.img.src).replace(/\"/g, '\\\\\"')) + \"\\\")\";\n\tel.style.backgroundPosition = style['object-position'] || 'center';\n\tel.style.backgroundRepeat = 'no-repeat';\n\tel.style.backgroundOrigin = 'content-box';\n\n\tif (/scale-down/.test(style['object-fit'])) {\n\t\tonImageReady(ofi.img, function () {\n\t\t\tif (ofi.img.naturalWidth > el.width || ofi.img.naturalHeight > el.height) {\n\t\t\t\tel.style.backgroundSize = 'contain';\n\t\t\t} else {\n\t\t\t\tel.style.backgroundSize = 'auto';\n\t\t\t}\n\t\t});\n\t} else {\n\t\tel.style.backgroundSize = style['object-fit'].replace('none', 'auto').replace('fill', '100% 100%');\n\t}\n\n\tonImageReady(ofi.img, function (img) {\n\t\tsetPlaceholder(el, img.naturalWidth, img.naturalHeight);\n\t});\n}\n\nfunction keepSrcUsable(el) {\n\tvar descriptors = {\n\t\tget: function get(prop) {\n\t\t\treturn el[OFI].img[prop ? prop : 'src'];\n\t\t},\n\t\tset: function set(value, prop) {\n\t\t\tel[OFI].img[prop ? prop : 'src'] = value;\n\t\t\tnativeSetAttribute.call(el, (\"data-ofi-\" + prop), value); // preserve for any future cloneNode\n\t\t\tfixOne(el);\n\t\t\treturn value;\n\t\t}\n\t};\n\tObject.defineProperty(el, 'src', descriptors);\n\tObject.defineProperty(el, 'currentSrc', {\n\t\tget: function () { return descriptors.get('currentSrc'); }\n\t});\n\tObject.defineProperty(el, 'srcset', {\n\t\tget: function () { return descriptors.get('srcset'); },\n\t\tset: function (ss) { return descriptors.set(ss, 'srcset'); }\n\t});\n}\n\nfunction hijackAttributes() {\n\tfunction getOfiImageMaybe(el, name) {\n\t\treturn el[OFI] && el[OFI].img && (name === 'src' || name === 'srcset') ? el[OFI].img : el;\n\t}\n\tif (!supportsObjectPosition) {\n\t\tHTMLImageElement.prototype.getAttribute = function (name) {\n\t\t\treturn nativeGetAttribute.call(getOfiImageMaybe(this, name), name);\n\t\t};\n\n\t\tHTMLImageElement.prototype.setAttribute = function (name, value) {\n\t\t\treturn nativeSetAttribute.call(getOfiImageMaybe(this, name), name, String(value));\n\t\t};\n\t}\n}\n\nfunction fix(imgs, opts) {\n\tvar startAutoMode = !autoModeEnabled && !imgs;\n\topts = opts || {};\n\timgs = imgs || 'img';\n\n\tif ((supportsObjectPosition && !opts.skipTest) || !supportsOFI) {\n\t\treturn false;\n\t}\n\n\t// use imgs as a selector or just select all images\n\tif (imgs === 'img') {\n\t\timgs = document.getElementsByTagName('img');\n\t} else if (typeof imgs === 'string') {\n\t\timgs = document.querySelectorAll(imgs);\n\t} else if (!('length' in imgs)) {\n\t\timgs = [imgs];\n\t}\n\n\t// apply fix to all\n\tfor (var i = 0; i < imgs.length; i++) {\n\t\timgs[i][OFI] = imgs[i][OFI] || {\n\t\t\tskipTest: opts.skipTest\n\t\t};\n\t\tfixOne(imgs[i]);\n\t}\n\n\tif (startAutoMode) {\n\t\tdocument.body.addEventListener('load', function (e) {\n\t\t\tif (e.target.tagName === 'IMG') {\n\t\t\t\tfix(e.target, {\n\t\t\t\t\tskipTest: opts.skipTest\n\t\t\t\t});\n\t\t\t}\n\t\t}, true);\n\t\tautoModeEnabled = true;\n\t\timgs = 'img'; // reset to a generic selector for watchMQ\n\t}\n\n\t// if requested, watch media queries for object-fit change\n\tif (opts.watchMQ) {\n\t\twindow.addEventListener('resize', fix.bind(null, imgs, {\n\t\t\tskipTest: opts.skipTest\n\t\t}));\n\t}\n}\n\nfix.supportsObjectFit = supportsObjectFit;\nfix.supportsObjectPosition = supportsObjectPosition;\n\nhijackAttributes();\n\nmodule.exports = fix;\n","/**\n * Outlayer Item\n */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */ /* globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD - RequireJS\n define( [\n 'ev-emitter/ev-emitter',\n 'get-size/get-size'\n ],\n factory\n );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory(\n require('ev-emitter'),\n require('get-size')\n );\n } else {\n // browser global\n window.Outlayer = {};\n window.Outlayer.Item = factory(\n window.EvEmitter,\n window.getSize\n );\n }\n\n}( window, function factory( EvEmitter, getSize ) {\n'use strict';\n\n// ----- helpers ----- //\n\nfunction isEmptyObj( obj ) {\n for ( var prop in obj ) {\n return false;\n }\n prop = null;\n return true;\n}\n\n// -------------------------- CSS3 support -------------------------- //\n\n\nvar docElemStyle = document.documentElement.style;\n\nvar transitionProperty = typeof docElemStyle.transition == 'string' ?\n 'transition' : 'WebkitTransition';\nvar transformProperty = typeof docElemStyle.transform == 'string' ?\n 'transform' : 'WebkitTransform';\n\nvar transitionEndEvent = {\n WebkitTransition: 'webkitTransitionEnd',\n transition: 'transitionend'\n}[ transitionProperty ];\n\n// cache all vendor properties that could have vendor prefix\nvar vendorProperties = {\n transform: transformProperty,\n transition: transitionProperty,\n transitionDuration: transitionProperty + 'Duration',\n transitionProperty: transitionProperty + 'Property',\n transitionDelay: transitionProperty + 'Delay'\n};\n\n// -------------------------- Item -------------------------- //\n\nfunction Item( element, layout ) {\n if ( !element ) {\n return;\n }\n\n this.element = element;\n // parent layout class, i.e. Masonry, Isotope, or Packery\n this.layout = layout;\n this.position = {\n x: 0,\n y: 0\n };\n\n this._create();\n}\n\n// inherit EvEmitter\nvar proto = Item.prototype = Object.create( EvEmitter.prototype );\nproto.constructor = Item;\n\nproto._create = function() {\n // transition objects\n this._transn = {\n ingProperties: {},\n clean: {},\n onEnd: {}\n };\n\n this.css({\n position: 'absolute'\n });\n};\n\n// trigger specified handler for event type\nproto.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n};\n\n/**\n * apply CSS styles to element\n * @param {Object} style\n */\nproto.css = function( style ) {\n var elemStyle = this.element.style;\n\n for ( var prop in style ) {\n // use vendor property if available\n var supportedProp = vendorProperties[ prop ] || prop;\n elemStyle[ supportedProp ] = style[ prop ];\n }\n};\n\n // measure position, and sets it\nproto.getPosition = function() {\n var style = getComputedStyle( this.element );\n var isOriginLeft = this.layout._getOption('originLeft');\n var isOriginTop = this.layout._getOption('originTop');\n var xValue = style[ isOriginLeft ? 'left' : 'right' ];\n var yValue = style[ isOriginTop ? 'top' : 'bottom' ];\n var x = parseFloat( xValue );\n var y = parseFloat( yValue );\n // convert percent to pixels\n var layoutSize = this.layout.size;\n if ( xValue.indexOf('%') != -1 ) {\n x = ( x / 100 ) * layoutSize.width;\n }\n if ( yValue.indexOf('%') != -1 ) {\n y = ( y / 100 ) * layoutSize.height;\n }\n // clean up 'auto' or other non-integer values\n x = isNaN( x ) ? 0 : x;\n y = isNaN( y ) ? 0 : y;\n // remove padding from measurement\n x -= isOriginLeft ? layoutSize.paddingLeft : layoutSize.paddingRight;\n y -= isOriginTop ? layoutSize.paddingTop : layoutSize.paddingBottom;\n\n this.position.x = x;\n this.position.y = y;\n};\n\n// set settled position, apply padding\nproto.layoutPosition = function() {\n var layoutSize = this.layout.size;\n var style = {};\n var isOriginLeft = this.layout._getOption('originLeft');\n var isOriginTop = this.layout._getOption('originTop');\n\n // x\n var xPadding = isOriginLeft ? 'paddingLeft' : 'paddingRight';\n var xProperty = isOriginLeft ? 'left' : 'right';\n var xResetProperty = isOriginLeft ? 'right' : 'left';\n\n var x = this.position.x + layoutSize[ xPadding ];\n // set in percentage or pixels\n style[ xProperty ] = this.getXValue( x );\n // reset other property\n style[ xResetProperty ] = '';\n\n // y\n var yPadding = isOriginTop ? 'paddingTop' : 'paddingBottom';\n var yProperty = isOriginTop ? 'top' : 'bottom';\n var yResetProperty = isOriginTop ? 'bottom' : 'top';\n\n var y = this.position.y + layoutSize[ yPadding ];\n // set in percentage or pixels\n style[ yProperty ] = this.getYValue( y );\n // reset other property\n style[ yResetProperty ] = '';\n\n this.css( style );\n this.emitEvent( 'layout', [ this ] );\n};\n\nproto.getXValue = function( x ) {\n var isHorizontal = this.layout._getOption('horizontal');\n return this.layout.options.percentPosition && !isHorizontal ?\n ( ( x / this.layout.size.width ) * 100 ) + '%' : x + 'px';\n};\n\nproto.getYValue = function( y ) {\n var isHorizontal = this.layout._getOption('horizontal');\n return this.layout.options.percentPosition && isHorizontal ?\n ( ( y / this.layout.size.height ) * 100 ) + '%' : y + 'px';\n};\n\nproto._transitionTo = function( x, y ) {\n this.getPosition();\n // get current x & y from top/left\n var curX = this.position.x;\n var curY = this.position.y;\n\n var didNotMove = x == this.position.x && y == this.position.y;\n\n // save end position\n this.setPosition( x, y );\n\n // if did not move and not transitioning, just go to layout\n if ( didNotMove && !this.isTransitioning ) {\n this.layoutPosition();\n return;\n }\n\n var transX = x - curX;\n var transY = y - curY;\n var transitionStyle = {};\n transitionStyle.transform = this.getTranslate( transX, transY );\n\n this.transition({\n to: transitionStyle,\n onTransitionEnd: {\n transform: this.layoutPosition\n },\n isCleaning: true\n });\n};\n\nproto.getTranslate = function( x, y ) {\n // flip cooridinates if origin on right or bottom\n var isOriginLeft = this.layout._getOption('originLeft');\n var isOriginTop = this.layout._getOption('originTop');\n x = isOriginLeft ? x : -x;\n y = isOriginTop ? y : -y;\n return 'translate3d(' + x + 'px, ' + y + 'px, 0)';\n};\n\n// non transition + transform support\nproto.goTo = function( x, y ) {\n this.setPosition( x, y );\n this.layoutPosition();\n};\n\nproto.moveTo = proto._transitionTo;\n\nproto.setPosition = function( x, y ) {\n this.position.x = parseFloat( x );\n this.position.y = parseFloat( y );\n};\n\n// ----- transition ----- //\n\n/**\n * @param {Object} style - CSS\n * @param {Function} onTransitionEnd\n */\n\n// non transition, just trigger callback\nproto._nonTransition = function( args ) {\n this.css( args.to );\n if ( args.isCleaning ) {\n this._removeStyles( args.to );\n }\n for ( var prop in args.onTransitionEnd ) {\n args.onTransitionEnd[ prop ].call( this );\n }\n};\n\n/**\n * proper transition\n * @param {Object} args - arguments\n * @param {Object} to - style to transition to\n * @param {Object} from - style to start transition from\n * @param {Boolean} isCleaning - removes transition styles after transition\n * @param {Function} onTransitionEnd - callback\n */\nproto.transition = function( args ) {\n // redirect to nonTransition if no transition duration\n if ( !parseFloat( this.layout.options.transitionDuration ) ) {\n this._nonTransition( args );\n return;\n }\n\n var _transition = this._transn;\n // keep track of onTransitionEnd callback by css property\n for ( var prop in args.onTransitionEnd ) {\n _transition.onEnd[ prop ] = args.onTransitionEnd[ prop ];\n }\n // keep track of properties that are transitioning\n for ( prop in args.to ) {\n _transition.ingProperties[ prop ] = true;\n // keep track of properties to clean up when transition is done\n if ( args.isCleaning ) {\n _transition.clean[ prop ] = true;\n }\n }\n\n // set from styles\n if ( args.from ) {\n this.css( args.from );\n // force redraw. http://blog.alexmaccaw.com/css-transitions\n var h = this.element.offsetHeight;\n // hack for JSHint to hush about unused var\n h = null;\n }\n // enable transition\n this.enableTransition( args.to );\n // set styles that are transitioning\n this.css( args.to );\n\n this.isTransitioning = true;\n\n};\n\n// dash before all cap letters, including first for\n// WebkitTransform => -webkit-transform\nfunction toDashedAll( str ) {\n return str.replace( /([A-Z])/g, function( $1 ) {\n return '-' + $1.toLowerCase();\n });\n}\n\nvar transitionProps = 'opacity,' + toDashedAll( transformProperty );\n\nproto.enableTransition = function(/* style */) {\n // HACK changing transitionProperty during a transition\n // will cause transition to jump\n if ( this.isTransitioning ) {\n return;\n }\n\n // make `transition: foo, bar, baz` from style object\n // HACK un-comment this when enableTransition can work\n // while a transition is happening\n // var transitionValues = [];\n // for ( var prop in style ) {\n // // dash-ify camelCased properties like WebkitTransition\n // prop = vendorProperties[ prop ] || prop;\n // transitionValues.push( toDashedAll( prop ) );\n // }\n // munge number to millisecond, to match stagger\n var duration = this.layout.options.transitionDuration;\n duration = typeof duration == 'number' ? duration + 'ms' : duration;\n // enable transition styles\n this.css({\n transitionProperty: transitionProps,\n transitionDuration: duration,\n transitionDelay: this.staggerDelay || 0\n });\n // listen for transition end event\n this.element.addEventListener( transitionEndEvent, this, false );\n};\n\n// ----- events ----- //\n\nproto.onwebkitTransitionEnd = function( event ) {\n this.ontransitionend( event );\n};\n\nproto.onotransitionend = function( event ) {\n this.ontransitionend( event );\n};\n\n// properties that I munge to make my life easier\nvar dashedVendorProperties = {\n '-webkit-transform': 'transform'\n};\n\nproto.ontransitionend = function( event ) {\n // disregard bubbled events from children\n if ( event.target !== this.element ) {\n return;\n }\n var _transition = this._transn;\n // get property name of transitioned property, convert to prefix-free\n var propertyName = dashedVendorProperties[ event.propertyName ] || event.propertyName;\n\n // remove property that has completed transitioning\n delete _transition.ingProperties[ propertyName ];\n // check if any properties are still transitioning\n if ( isEmptyObj( _transition.ingProperties ) ) {\n // all properties have completed transitioning\n this.disableTransition();\n }\n // clean style\n if ( propertyName in _transition.clean ) {\n // clean up style\n this.element.style[ event.propertyName ] = '';\n delete _transition.clean[ propertyName ];\n }\n // trigger onTransitionEnd callback\n if ( propertyName in _transition.onEnd ) {\n var onTransitionEnd = _transition.onEnd[ propertyName ];\n onTransitionEnd.call( this );\n delete _transition.onEnd[ propertyName ];\n }\n\n this.emitEvent( 'transitionEnd', [ this ] );\n};\n\nproto.disableTransition = function() {\n this.removeTransitionStyles();\n this.element.removeEventListener( transitionEndEvent, this, false );\n this.isTransitioning = false;\n};\n\n/**\n * removes style property from element\n * @param {Object} style\n**/\nproto._removeStyles = function( style ) {\n // clean up transition styles\n var cleanStyle = {};\n for ( var prop in style ) {\n cleanStyle[ prop ] = '';\n }\n this.css( cleanStyle );\n};\n\nvar cleanTransitionStyle = {\n transitionProperty: '',\n transitionDuration: '',\n transitionDelay: ''\n};\n\nproto.removeTransitionStyles = function() {\n // remove transition\n this.css( cleanTransitionStyle );\n};\n\n// ----- stagger ----- //\n\nproto.stagger = function( delay ) {\n delay = isNaN( delay ) ? 0 : delay;\n this.staggerDelay = delay + 'ms';\n};\n\n// ----- show/hide/remove ----- //\n\n// remove element from DOM\nproto.removeElem = function() {\n this.element.parentNode.removeChild( this.element );\n // remove display: none\n this.css({ display: '' });\n this.emitEvent( 'remove', [ this ] );\n};\n\nproto.remove = function() {\n // just remove element if no transition support or no transition\n if ( !transitionProperty || !parseFloat( this.layout.options.transitionDuration ) ) {\n this.removeElem();\n return;\n }\n\n // start transition\n this.once( 'transitionEnd', function() {\n this.removeElem();\n });\n this.hide();\n};\n\nproto.reveal = function() {\n delete this.isHidden;\n // remove display: none\n this.css({ display: '' });\n\n var options = this.layout.options;\n\n var onTransitionEnd = {};\n var transitionEndProperty = this.getHideRevealTransitionEndProperty('visibleStyle');\n onTransitionEnd[ transitionEndProperty ] = this.onRevealTransitionEnd;\n\n this.transition({\n from: options.hiddenStyle,\n to: options.visibleStyle,\n isCleaning: true,\n onTransitionEnd: onTransitionEnd\n });\n};\n\nproto.onRevealTransitionEnd = function() {\n // check if still visible\n // during transition, item may have been hidden\n if ( !this.isHidden ) {\n this.emitEvent('reveal');\n }\n};\n\n/**\n * get style property use for hide/reveal transition end\n * @param {String} styleProperty - hiddenStyle/visibleStyle\n * @returns {String}\n */\nproto.getHideRevealTransitionEndProperty = function( styleProperty ) {\n var optionStyle = this.layout.options[ styleProperty ];\n // use opacity\n if ( optionStyle.opacity ) {\n return 'opacity';\n }\n // get first property\n for ( var prop in optionStyle ) {\n return prop;\n }\n};\n\nproto.hide = function() {\n // set flag\n this.isHidden = true;\n // remove display: none\n this.css({ display: '' });\n\n var options = this.layout.options;\n\n var onTransitionEnd = {};\n var transitionEndProperty = this.getHideRevealTransitionEndProperty('hiddenStyle');\n onTransitionEnd[ transitionEndProperty ] = this.onHideTransitionEnd;\n\n this.transition({\n from: options.visibleStyle,\n to: options.hiddenStyle,\n // keep hidden stuff hidden\n isCleaning: true,\n onTransitionEnd: onTransitionEnd\n });\n};\n\nproto.onHideTransitionEnd = function() {\n // check if still hidden\n // during transition, item may have been un-hidden\n if ( this.isHidden ) {\n this.css({ display: 'none' });\n this.emitEvent('hide');\n }\n};\n\nproto.destroy = function() {\n this.css({\n position: '',\n left: '',\n right: '',\n top: '',\n bottom: '',\n transition: '',\n transform: ''\n });\n};\n\nreturn Item;\n\n}));\n","/*!\n * Outlayer v2.1.1\n * the brains and guts of a layout library\n * MIT license\n */\n\n( function( window, factory ) {\n 'use strict';\n // universal module definition\n /* jshint strict: false */ /* globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD - RequireJS\n define( [\n 'ev-emitter/ev-emitter',\n 'get-size/get-size',\n 'fizzy-ui-utils/utils',\n './item'\n ],\n function( EvEmitter, getSize, utils, Item ) {\n return factory( window, EvEmitter, getSize, utils, Item);\n }\n );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory(\n window,\n require('ev-emitter'),\n require('get-size'),\n require('fizzy-ui-utils'),\n require('./item')\n );\n } else {\n // browser global\n window.Outlayer = factory(\n window,\n window.EvEmitter,\n window.getSize,\n window.fizzyUIUtils,\n window.Outlayer.Item\n );\n }\n\n}( window, function factory( window, EvEmitter, getSize, utils, Item ) {\n'use strict';\n\n// ----- vars ----- //\n\nvar console = window.console;\nvar jQuery = window.jQuery;\nvar noop = function() {};\n\n// -------------------------- Outlayer -------------------------- //\n\n// globally unique identifiers\nvar GUID = 0;\n// internal store of all Outlayer intances\nvar instances = {};\n\n\n/**\n * @param {Element, String} element\n * @param {Object} options\n * @constructor\n */\nfunction Outlayer( element, options ) {\n var queryElement = utils.getQueryElement( element );\n if ( !queryElement ) {\n if ( console ) {\n console.error( 'Bad element for ' + this.constructor.namespace +\n ': ' + ( queryElement || element ) );\n }\n return;\n }\n this.element = queryElement;\n // add jQuery\n if ( jQuery ) {\n this.$element = jQuery( this.element );\n }\n\n // options\n this.options = utils.extend( {}, this.constructor.defaults );\n this.option( options );\n\n // add id for Outlayer.getFromElement\n var id = ++GUID;\n this.element.outlayerGUID = id; // expando\n instances[ id ] = this; // associate via id\n\n // kick it off\n this._create();\n\n var isInitLayout = this._getOption('initLayout');\n if ( isInitLayout ) {\n this.layout();\n }\n}\n\n// settings are for internal use only\nOutlayer.namespace = 'outlayer';\nOutlayer.Item = Item;\n\n// default options\nOutlayer.defaults = {\n containerStyle: {\n position: 'relative'\n },\n initLayout: true,\n originLeft: true,\n originTop: true,\n resize: true,\n resizeContainer: true,\n // item options\n transitionDuration: '0.4s',\n hiddenStyle: {\n opacity: 0,\n transform: 'scale(0.001)'\n },\n visibleStyle: {\n opacity: 1,\n transform: 'scale(1)'\n }\n};\n\nvar proto = Outlayer.prototype;\n// inherit EvEmitter\nutils.extend( proto, EvEmitter.prototype );\n\n/**\n * set options\n * @param {Object} opts\n */\nproto.option = function( opts ) {\n utils.extend( this.options, opts );\n};\n\n/**\n * get backwards compatible option value, check old name\n */\nproto._getOption = function( option ) {\n var oldOption = this.constructor.compatOptions[ option ];\n return oldOption && this.options[ oldOption ] !== undefined ?\n this.options[ oldOption ] : this.options[ option ];\n};\n\nOutlayer.compatOptions = {\n // currentName: oldName\n initLayout: 'isInitLayout',\n horizontal: 'isHorizontal',\n layoutInstant: 'isLayoutInstant',\n originLeft: 'isOriginLeft',\n originTop: 'isOriginTop',\n resize: 'isResizeBound',\n resizeContainer: 'isResizingContainer'\n};\n\nproto._create = function() {\n // get items from children\n this.reloadItems();\n // elements that affect layout, but are not laid out\n this.stamps = [];\n this.stamp( this.options.stamp );\n // set container style\n utils.extend( this.element.style, this.options.containerStyle );\n\n // bind resize method\n var canBindResize = this._getOption('resize');\n if ( canBindResize ) {\n this.bindResize();\n }\n};\n\n// goes through all children again and gets bricks in proper order\nproto.reloadItems = function() {\n // collection of item elements\n this.items = this._itemize( this.element.children );\n};\n\n\n/**\n * turn elements into Outlayer.Items to be used in layout\n * @param {Array or NodeList or HTMLElement} elems\n * @returns {Array} items - collection of new Outlayer Items\n */\nproto._itemize = function( elems ) {\n\n var itemElems = this._filterFindItemElements( elems );\n var Item = this.constructor.Item;\n\n // create new Outlayer Items for collection\n var items = [];\n for ( var i=0; i < itemElems.length; i++ ) {\n var elem = itemElems[i];\n var item = new Item( elem, this );\n items.push( item );\n }\n\n return items;\n};\n\n/**\n * get item elements to be used in layout\n * @param {Array or NodeList or HTMLElement} elems\n * @returns {Array} items - item elements\n */\nproto._filterFindItemElements = function( elems ) {\n return utils.filterFindElements( elems, this.options.itemSelector );\n};\n\n/**\n * getter method for getting item elements\n * @returns {Array} elems - collection of item elements\n */\nproto.getItemElements = function() {\n return this.items.map( function( item ) {\n return item.element;\n });\n};\n\n// ----- init & layout ----- //\n\n/**\n * lays out all items\n */\nproto.layout = function() {\n this._resetLayout();\n this._manageStamps();\n\n // don't animate first layout\n var layoutInstant = this._getOption('layoutInstant');\n var isInstant = layoutInstant !== undefined ?\n layoutInstant : !this._isLayoutInited;\n this.layoutItems( this.items, isInstant );\n\n // flag for initalized\n this._isLayoutInited = true;\n};\n\n// _init is alias for layout\nproto._init = proto.layout;\n\n/**\n * logic before any new layout\n */\nproto._resetLayout = function() {\n this.getSize();\n};\n\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n};\n\n/**\n * get measurement from option, for columnWidth, rowHeight, gutter\n * if option is String -> get element from selector string, & get size of element\n * if option is Element -> get size of element\n * else use option as a number\n *\n * @param {String} measurement\n * @param {String} size - width or height\n * @private\n */\nproto._getMeasurement = function( measurement, size ) {\n var option = this.options[ measurement ];\n var elem;\n if ( !option ) {\n // default to 0\n this[ measurement ] = 0;\n } else {\n // use option as an element\n if ( typeof option == 'string' ) {\n elem = this.element.querySelector( option );\n } else if ( option instanceof HTMLElement ) {\n elem = option;\n }\n // use size of element, if element\n this[ measurement ] = elem ? getSize( elem )[ size ] : option;\n }\n};\n\n/**\n * layout a collection of item elements\n * @api public\n */\nproto.layoutItems = function( items, isInstant ) {\n items = this._getItemsForLayout( items );\n\n this._layoutItems( items, isInstant );\n\n this._postLayout();\n};\n\n/**\n * get the items to be laid out\n * you may want to skip over some items\n * @param {Array} items\n * @returns {Array} items\n */\nproto._getItemsForLayout = function( items ) {\n return items.filter( function( item ) {\n return !item.isIgnored;\n });\n};\n\n/**\n * layout items\n * @param {Array} items\n * @param {Boolean} isInstant\n */\nproto._layoutItems = function( items, isInstant ) {\n this._emitCompleteOnItems( 'layout', items );\n\n if ( !items || !items.length ) {\n // no items, emit event with empty array\n return;\n }\n\n var queue = [];\n\n items.forEach( function( item ) {\n // get x/y object from method\n var position = this._getItemLayoutPosition( item );\n // enqueue\n position.item = item;\n position.isInstant = isInstant || item.isLayoutInstant;\n queue.push( position );\n }, this );\n\n this._processLayoutQueue( queue );\n};\n\n/**\n * get item layout position\n * @param {Outlayer.Item} item\n * @returns {Object} x and y position\n */\nproto._getItemLayoutPosition = function( /* item */ ) {\n return {\n x: 0,\n y: 0\n };\n};\n\n/**\n * iterate over array and position each item\n * Reason being - separating this logic prevents 'layout invalidation'\n * thx @paul_irish\n * @param {Array} queue\n */\nproto._processLayoutQueue = function( queue ) {\n this.updateStagger();\n queue.forEach( function( obj, i ) {\n this._positionItem( obj.item, obj.x, obj.y, obj.isInstant, i );\n }, this );\n};\n\n// set stagger from option in milliseconds number\nproto.updateStagger = function() {\n var stagger = this.options.stagger;\n if ( stagger === null || stagger === undefined ) {\n this.stagger = 0;\n return;\n }\n this.stagger = getMilliseconds( stagger );\n return this.stagger;\n};\n\n/**\n * Sets position of item in DOM\n * @param {Outlayer.Item} item\n * @param {Number} x - horizontal position\n * @param {Number} y - vertical position\n * @param {Boolean} isInstant - disables transitions\n */\nproto._positionItem = function( item, x, y, isInstant, i ) {\n if ( isInstant ) {\n // if not transition, just set CSS\n item.goTo( x, y );\n } else {\n item.stagger( i * this.stagger );\n item.moveTo( x, y );\n }\n};\n\n/**\n * Any logic you want to do after each layout,\n * i.e. size the container\n */\nproto._postLayout = function() {\n this.resizeContainer();\n};\n\nproto.resizeContainer = function() {\n var isResizingContainer = this._getOption('resizeContainer');\n if ( !isResizingContainer ) {\n return;\n }\n var size = this._getContainerSize();\n if ( size ) {\n this._setContainerMeasure( size.width, true );\n this._setContainerMeasure( size.height, false );\n }\n};\n\n/**\n * Sets width or height of container if returned\n * @returns {Object} size\n * @param {Number} width\n * @param {Number} height\n */\nproto._getContainerSize = noop;\n\n/**\n * @param {Number} measure - size of width or height\n * @param {Boolean} isWidth\n */\nproto._setContainerMeasure = function( measure, isWidth ) {\n if ( measure === undefined ) {\n return;\n }\n\n var elemSize = this.size;\n // add padding and border width if border box\n if ( elemSize.isBorderBox ) {\n measure += isWidth ? elemSize.paddingLeft + elemSize.paddingRight +\n elemSize.borderLeftWidth + elemSize.borderRightWidth :\n elemSize.paddingBottom + elemSize.paddingTop +\n elemSize.borderTopWidth + elemSize.borderBottomWidth;\n }\n\n measure = Math.max( measure, 0 );\n this.element.style[ isWidth ? 'width' : 'height' ] = measure + 'px';\n};\n\n/**\n * emit eventComplete on a collection of items events\n * @param {String} eventName\n * @param {Array} items - Outlayer.Items\n */\nproto._emitCompleteOnItems = function( eventName, items ) {\n var _this = this;\n function onComplete() {\n _this.dispatchEvent( eventName + 'Complete', null, [ items ] );\n }\n\n var count = items.length;\n if ( !items || !count ) {\n onComplete();\n return;\n }\n\n var doneCount = 0;\n function tick() {\n doneCount++;\n if ( doneCount == count ) {\n onComplete();\n }\n }\n\n // bind callback\n items.forEach( function( item ) {\n item.once( eventName, tick );\n });\n};\n\n/**\n * emits events via EvEmitter and jQuery events\n * @param {String} type - name of event\n * @param {Event} event - original event\n * @param {Array} args - extra arguments\n */\nproto.dispatchEvent = function( type, event, args ) {\n // add original event to arguments\n var emitArgs = event ? [ event ].concat( args ) : args;\n this.emitEvent( type, emitArgs );\n\n if ( jQuery ) {\n // set this.$element\n this.$element = this.$element || jQuery( this.element );\n if ( event ) {\n // create jQuery event\n var $event = jQuery.Event( event );\n $event.type = type;\n this.$element.trigger( $event, args );\n } else {\n // just trigger with type if no event available\n this.$element.trigger( type, args );\n }\n }\n};\n\n// -------------------------- ignore & stamps -------------------------- //\n\n\n/**\n * keep item in collection, but do not lay it out\n * ignored items do not get skipped in layout\n * @param {Element} elem\n */\nproto.ignore = function( elem ) {\n var item = this.getItem( elem );\n if ( item ) {\n item.isIgnored = true;\n }\n};\n\n/**\n * return item to layout collection\n * @param {Element} elem\n */\nproto.unignore = function( elem ) {\n var item = this.getItem( elem );\n if ( item ) {\n delete item.isIgnored;\n }\n};\n\n/**\n * adds elements to stamps\n * @param {NodeList, Array, Element, or String} elems\n */\nproto.stamp = function( elems ) {\n elems = this._find( elems );\n if ( !elems ) {\n return;\n }\n\n this.stamps = this.stamps.concat( elems );\n // ignore\n elems.forEach( this.ignore, this );\n};\n\n/**\n * removes elements to stamps\n * @param {NodeList, Array, or Element} elems\n */\nproto.unstamp = function( elems ) {\n elems = this._find( elems );\n if ( !elems ){\n return;\n }\n\n elems.forEach( function( elem ) {\n // filter out removed stamp elements\n utils.removeFrom( this.stamps, elem );\n this.unignore( elem );\n }, this );\n};\n\n/**\n * finds child elements\n * @param {NodeList, Array, Element, or String} elems\n * @returns {Array} elems\n */\nproto._find = function( elems ) {\n if ( !elems ) {\n return;\n }\n // if string, use argument as selector string\n if ( typeof elems == 'string' ) {\n elems = this.element.querySelectorAll( elems );\n }\n elems = utils.makeArray( elems );\n return elems;\n};\n\nproto._manageStamps = function() {\n if ( !this.stamps || !this.stamps.length ) {\n return;\n }\n\n this._getBoundingRect();\n\n this.stamps.forEach( this._manageStamp, this );\n};\n\n// update boundingLeft / Top\nproto._getBoundingRect = function() {\n // get bounding rect for container element\n var boundingRect = this.element.getBoundingClientRect();\n var size = this.size;\n this._boundingRect = {\n left: boundingRect.left + size.paddingLeft + size.borderLeftWidth,\n top: boundingRect.top + size.paddingTop + size.borderTopWidth,\n right: boundingRect.right - ( size.paddingRight + size.borderRightWidth ),\n bottom: boundingRect.bottom - ( size.paddingBottom + size.borderBottomWidth )\n };\n};\n\n/**\n * @param {Element} stamp\n**/\nproto._manageStamp = noop;\n\n/**\n * get x/y position of element relative to container element\n * @param {Element} elem\n * @returns {Object} offset - has left, top, right, bottom\n */\nproto._getElementOffset = function( elem ) {\n var boundingRect = elem.getBoundingClientRect();\n var thisRect = this._boundingRect;\n var size = getSize( elem );\n var offset = {\n left: boundingRect.left - thisRect.left - size.marginLeft,\n top: boundingRect.top - thisRect.top - size.marginTop,\n right: thisRect.right - boundingRect.right - size.marginRight,\n bottom: thisRect.bottom - boundingRect.bottom - size.marginBottom\n };\n return offset;\n};\n\n// -------------------------- resize -------------------------- //\n\n// enable event handlers for listeners\n// i.e. resize -> onresize\nproto.handleEvent = utils.handleEvent;\n\n/**\n * Bind layout to window resizing\n */\nproto.bindResize = function() {\n window.addEventListener( 'resize', this );\n this.isResizeBound = true;\n};\n\n/**\n * Unbind layout to window resizing\n */\nproto.unbindResize = function() {\n window.removeEventListener( 'resize', this );\n this.isResizeBound = false;\n};\n\nproto.onresize = function() {\n this.resize();\n};\n\nutils.debounceMethod( Outlayer, 'onresize', 100 );\n\nproto.resize = function() {\n // don't trigger if size did not change\n // or if resize was unbound. See #9\n if ( !this.isResizeBound || !this.needsResizeLayout() ) {\n return;\n }\n\n this.layout();\n};\n\n/**\n * check if layout is needed post layout\n * @returns Boolean\n */\nproto.needsResizeLayout = function() {\n var size = getSize( this.element );\n // check that this.size and size are there\n // IE8 triggers resize on body size change, so they might not be\n var hasSizes = this.size && size;\n return hasSizes && size.innerWidth !== this.size.innerWidth;\n};\n\n// -------------------------- methods -------------------------- //\n\n/**\n * add items to Outlayer instance\n * @param {Array or NodeList or Element} elems\n * @returns {Array} items - Outlayer.Items\n**/\nproto.addItems = function( elems ) {\n var items = this._itemize( elems );\n // add items to collection\n if ( items.length ) {\n this.items = this.items.concat( items );\n }\n return items;\n};\n\n/**\n * Layout newly-appended item elements\n * @param {Array or NodeList or Element} elems\n */\nproto.appended = function( elems ) {\n var items = this.addItems( elems );\n if ( !items.length ) {\n return;\n }\n // layout and reveal just the new items\n this.layoutItems( items, true );\n this.reveal( items );\n};\n\n/**\n * Layout prepended elements\n * @param {Array or NodeList or Element} elems\n */\nproto.prepended = function( elems ) {\n var items = this._itemize( elems );\n if ( !items.length ) {\n return;\n }\n // add items to beginning of collection\n var previousItems = this.items.slice(0);\n this.items = items.concat( previousItems );\n // start new layout\n this._resetLayout();\n this._manageStamps();\n // layout new stuff without transition\n this.layoutItems( items, true );\n this.reveal( items );\n // layout previous items\n this.layoutItems( previousItems );\n};\n\n/**\n * reveal a collection of items\n * @param {Array of Outlayer.Items} items\n */\nproto.reveal = function( items ) {\n this._emitCompleteOnItems( 'reveal', items );\n if ( !items || !items.length ) {\n return;\n }\n var stagger = this.updateStagger();\n items.forEach( function( item, i ) {\n item.stagger( i * stagger );\n item.reveal();\n });\n};\n\n/**\n * hide a collection of items\n * @param {Array of Outlayer.Items} items\n */\nproto.hide = function( items ) {\n this._emitCompleteOnItems( 'hide', items );\n if ( !items || !items.length ) {\n return;\n }\n var stagger = this.updateStagger();\n items.forEach( function( item, i ) {\n item.stagger( i * stagger );\n item.hide();\n });\n};\n\n/**\n * reveal item elements\n * @param {Array}, {Element}, {NodeList} items\n */\nproto.revealItemElements = function( elems ) {\n var items = this.getItems( elems );\n this.reveal( items );\n};\n\n/**\n * hide item elements\n * @param {Array}, {Element}, {NodeList} items\n */\nproto.hideItemElements = function( elems ) {\n var items = this.getItems( elems );\n this.hide( items );\n};\n\n/**\n * get Outlayer.Item, given an Element\n * @param {Element} elem\n * @param {Function} callback\n * @returns {Outlayer.Item} item\n */\nproto.getItem = function( elem ) {\n // loop through items to get the one that matches\n for ( var i=0; i < this.items.length; i++ ) {\n var item = this.items[i];\n if ( item.element == elem ) {\n // return item\n return item;\n }\n }\n};\n\n/**\n * get collection of Outlayer.Items, given Elements\n * @param {Array} elems\n * @returns {Array} items - Outlayer.Items\n */\nproto.getItems = function( elems ) {\n elems = utils.makeArray( elems );\n var items = [];\n elems.forEach( function( elem ) {\n var item = this.getItem( elem );\n if ( item ) {\n items.push( item );\n }\n }, this );\n\n return items;\n};\n\n/**\n * remove element(s) from instance and DOM\n * @param {Array or NodeList or Element} elems\n */\nproto.remove = function( elems ) {\n var removeItems = this.getItems( elems );\n\n this._emitCompleteOnItems( 'remove', removeItems );\n\n // bail if no items to remove\n if ( !removeItems || !removeItems.length ) {\n return;\n }\n\n removeItems.forEach( function( item ) {\n item.remove();\n // remove item from collection\n utils.removeFrom( this.items, item );\n }, this );\n};\n\n// ----- destroy ----- //\n\n// remove and disable Outlayer instance\nproto.destroy = function() {\n // clean up dynamic styles\n var style = this.element.style;\n style.height = '';\n style.position = '';\n style.width = '';\n // destroy items\n this.items.forEach( function( item ) {\n item.destroy();\n });\n\n this.unbindResize();\n\n var id = this.element.outlayerGUID;\n delete instances[ id ]; // remove reference to instance by id\n delete this.element.outlayerGUID;\n // remove data for jQuery\n if ( jQuery ) {\n jQuery.removeData( this.element, this.constructor.namespace );\n }\n\n};\n\n// -------------------------- data -------------------------- //\n\n/**\n * get Outlayer instance from element\n * @param {Element} elem\n * @returns {Outlayer}\n */\nOutlayer.data = function( elem ) {\n elem = utils.getQueryElement( elem );\n var id = elem && elem.outlayerGUID;\n return id && instances[ id ];\n};\n\n\n// -------------------------- create Outlayer class -------------------------- //\n\n/**\n * create a layout class\n * @param {String} namespace\n */\nOutlayer.create = function( namespace, options ) {\n // sub-class Outlayer\n var Layout = subclass( Outlayer );\n // apply new options and compatOptions\n Layout.defaults = utils.extend( {}, Outlayer.defaults );\n utils.extend( Layout.defaults, options );\n Layout.compatOptions = utils.extend( {}, Outlayer.compatOptions );\n\n Layout.namespace = namespace;\n\n Layout.data = Outlayer.data;\n\n // sub-class Item\n Layout.Item = subclass( Item );\n\n // -------------------------- declarative -------------------------- //\n\n utils.htmlInit( Layout, namespace );\n\n // -------------------------- jQuery bridge -------------------------- //\n\n // make into jQuery plugin\n if ( jQuery && jQuery.bridget ) {\n jQuery.bridget( namespace, Layout );\n }\n\n return Layout;\n};\n\nfunction subclass( Parent ) {\n function SubClass() {\n Parent.apply( this, arguments );\n }\n\n SubClass.prototype = Object.create( Parent.prototype );\n SubClass.prototype.constructor = SubClass;\n\n return SubClass;\n}\n\n// ----- helpers ----- //\n\n// how many milliseconds are in each unit\nvar msUnits = {\n ms: 1,\n s: 1000\n};\n\n// munge time-like parameter into millisecond number\n// '0.4s' -> 40\nfunction getMilliseconds( time ) {\n if ( typeof time == 'number' ) {\n return time;\n }\n var matches = time.match( /(^\\d*\\.?\\d*)(\\w*)/ );\n var num = matches && matches[1];\n var unit = matches && matches[2];\n if ( !num.length ) {\n return 0;\n }\n num = parseFloat( num );\n var mult = msUnits[ unit ] || 1;\n return num * mult;\n}\n\n// ----- fin ----- //\n\n// back in global\nOutlayer.Item = Item;\n\nreturn Outlayer;\n\n}));\n","/**\n * what-input - A global utility for tracking the current input method (mouse, keyboard or touch).\n * @version v5.2.12\n * @link https://github.com/ten1seven/what-input\n * @license MIT\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"whatInput\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"whatInput\"] = factory();\n\telse\n\t\troot[\"whatInput\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\n\tmodule.exports = function () {\n\t /*\n\t * bail out if there is no document or window\n\t * (i.e. in a node/non-DOM environment)\n\t *\n\t * Return a stubbed API instead\n\t */\n\t if (typeof document === 'undefined' || typeof window === 'undefined') {\n\t return {\n\t // always return \"initial\" because no interaction will ever be detected\n\t ask: function ask() {\n\t return 'initial';\n\t },\n\n\t // always return null\n\t element: function element() {\n\t return null;\n\t },\n\n\t // no-op\n\t ignoreKeys: function ignoreKeys() {},\n\n\t // no-op\n\t specificKeys: function specificKeys() {},\n\n\t // no-op\n\t registerOnChange: function registerOnChange() {},\n\n\t // no-op\n\t unRegisterOnChange: function unRegisterOnChange() {}\n\t };\n\t }\n\n\t /*\n\t * variables\n\t */\n\n\t // cache document.documentElement\n\t var docElem = document.documentElement;\n\n\t // currently focused dom element\n\t var currentElement = null;\n\n\t // last used input type\n\t var currentInput = 'initial';\n\n\t // last used input intent\n\t var currentIntent = currentInput;\n\n\t // UNIX timestamp of current event\n\t var currentTimestamp = Date.now();\n\n\t // check for a `data-whatpersist` attribute on either the `html` or `body` elements, defaults to `true`\n\t var shouldPersist = false;\n\n\t // form input types\n\t var formInputs = ['button', 'input', 'select', 'textarea'];\n\n\t // empty array for holding callback functions\n\t var functionList = [];\n\n\t // list of modifier keys commonly used with the mouse and\n\t // can be safely ignored to prevent false keyboard detection\n\t var ignoreMap = [16, // shift\n\t 17, // control\n\t 18, // alt\n\t 91, // Windows key / left Apple cmd\n\t 93 // Windows menu / right Apple cmd\n\t ];\n\n\t var specificMap = [];\n\n\t // mapping of events to input types\n\t var inputMap = {\n\t keydown: 'keyboard',\n\t keyup: 'keyboard',\n\t mousedown: 'mouse',\n\t mousemove: 'mouse',\n\t MSPointerDown: 'pointer',\n\t MSPointerMove: 'pointer',\n\t pointerdown: 'pointer',\n\t pointermove: 'pointer',\n\t touchstart: 'touch',\n\t touchend: 'touch'\n\n\t // boolean: true if the page is being scrolled\n\t };var isScrolling = false;\n\n\t // store current mouse position\n\t var mousePos = {\n\t x: null,\n\t y: null\n\n\t // map of IE 10 pointer events\n\t };var pointerMap = {\n\t 2: 'touch',\n\t 3: 'touch', // treat pen like touch\n\t 4: 'mouse'\n\n\t // check support for passive event listeners\n\t };var supportsPassive = false;\n\n\t try {\n\t var opts = Object.defineProperty({}, 'passive', {\n\t get: function get() {\n\t supportsPassive = true;\n\t }\n\t });\n\n\t window.addEventListener('test', null, opts);\n\t } catch (e) {}\n\t // fail silently\n\n\n\t /*\n\t * set up\n\t */\n\n\t var setUp = function setUp() {\n\t // add correct mouse wheel event mapping to `inputMap`\n\t inputMap[detectWheel()] = 'mouse';\n\n\t addListeners();\n\t };\n\n\t /*\n\t * events\n\t */\n\n\t var addListeners = function addListeners() {\n\t // `pointermove`, `MSPointerMove`, `mousemove` and mouse wheel event binding\n\t // can only demonstrate potential, but not actual, interaction\n\t // and are treated separately\n\t var options = supportsPassive ? { passive: true, capture: true } : true;\n\n\t document.addEventListener('DOMContentLoaded', setPersist, true);\n\n\t // pointer events (mouse, pen, touch)\n\t if (window.PointerEvent) {\n\t window.addEventListener('pointerdown', setInput, true);\n\t window.addEventListener('pointermove', setIntent, true);\n\t } else if (window.MSPointerEvent) {\n\t window.addEventListener('MSPointerDown', setInput, true);\n\t window.addEventListener('MSPointerMove', setIntent, true);\n\t } else {\n\t // mouse events\n\t window.addEventListener('mousedown', setInput, true);\n\t window.addEventListener('mousemove', setIntent, true);\n\n\t // touch events\n\t if ('ontouchstart' in window) {\n\t window.addEventListener('touchstart', setInput, options);\n\t window.addEventListener('touchend', setInput, true);\n\t }\n\t }\n\n\t // mouse wheel\n\t window.addEventListener(detectWheel(), setIntent, options);\n\n\t // keyboard events\n\t window.addEventListener('keydown', setInput, true);\n\t window.addEventListener('keyup', setInput, true);\n\n\t // focus events\n\t window.addEventListener('focusin', setElement, true);\n\t window.addEventListener('focusout', clearElement, true);\n\t };\n\n\t // checks if input persistence should happen and\n\t // get saved state from session storage if true (defaults to `false`)\n\t var setPersist = function setPersist() {\n\t shouldPersist = !(docElem.getAttribute('data-whatpersist') === 'false' || document.body.getAttribute('data-whatpersist') === 'false');\n\n\t if (shouldPersist) {\n\t // check for session variables and use if available\n\t try {\n\t if (window.sessionStorage.getItem('what-input')) {\n\t currentInput = window.sessionStorage.getItem('what-input');\n\t }\n\n\t if (window.sessionStorage.getItem('what-intent')) {\n\t currentIntent = window.sessionStorage.getItem('what-intent');\n\t }\n\t } catch (e) {\n\t // fail silently\n\t }\n\t }\n\n\t // always run these so at least `initial` state is set\n\t doUpdate('input');\n\t doUpdate('intent');\n\t };\n\n\t // checks conditions before updating new input\n\t var setInput = function setInput(event) {\n\t var eventKey = event.which;\n\t var value = inputMap[event.type];\n\n\t if (value === 'pointer') {\n\t value = pointerType(event);\n\t }\n\n\t var ignoreMatch = !specificMap.length && ignoreMap.indexOf(eventKey) === -1;\n\n\t var specificMatch = specificMap.length && specificMap.indexOf(eventKey) !== -1;\n\n\t var shouldUpdate = value === 'keyboard' && eventKey && (ignoreMatch || specificMatch) || value === 'mouse' || value === 'touch';\n\n\t // prevent touch detection from being overridden by event execution order\n\t if (validateTouch(value)) {\n\t shouldUpdate = false;\n\t }\n\n\t if (shouldUpdate && currentInput !== value) {\n\t currentInput = value;\n\n\t persistInput('input', currentInput);\n\t doUpdate('input');\n\t }\n\n\t if (shouldUpdate && currentIntent !== value) {\n\t // preserve intent for keyboard interaction with form fields\n\t var activeElem = document.activeElement;\n\t var notFormInput = activeElem && activeElem.nodeName && (formInputs.indexOf(activeElem.nodeName.toLowerCase()) === -1 || activeElem.nodeName.toLowerCase() === 'button' && !checkClosest(activeElem, 'form'));\n\n\t if (notFormInput) {\n\t currentIntent = value;\n\n\t persistInput('intent', currentIntent);\n\t doUpdate('intent');\n\t }\n\t }\n\t };\n\n\t // updates the doc and `inputTypes` array with new input\n\t var doUpdate = function doUpdate(which) {\n\t docElem.setAttribute('data-what' + which, which === 'input' ? currentInput : currentIntent);\n\n\t fireFunctions(which);\n\t };\n\n\t // updates input intent for `mousemove` and `pointermove`\n\t var setIntent = function setIntent(event) {\n\t var value = inputMap[event.type];\n\n\t if (value === 'pointer') {\n\t value = pointerType(event);\n\t }\n\n\t // test to see if `mousemove` happened relative to the screen to detect scrolling versus mousemove\n\t detectScrolling(event);\n\n\t // only execute if scrolling isn't happening\n\t if ((!isScrolling && !validateTouch(value) || isScrolling && event.type === 'wheel' || event.type === 'mousewheel' || event.type === 'DOMMouseScroll') && currentIntent !== value) {\n\t currentIntent = value;\n\n\t persistInput('intent', currentIntent);\n\t doUpdate('intent');\n\t }\n\t };\n\n\t var setElement = function setElement(event) {\n\t if (!event.target.nodeName) {\n\t // If nodeName is undefined, clear the element\n\t // This can happen if click inside an element.\n\t clearElement();\n\t return;\n\t }\n\n\t currentElement = event.target.nodeName.toLowerCase();\n\t docElem.setAttribute('data-whatelement', currentElement);\n\n\t if (event.target.classList && event.target.classList.length) {\n\t docElem.setAttribute('data-whatclasses', event.target.classList.toString().replace(' ', ','));\n\t }\n\t };\n\n\t var clearElement = function clearElement() {\n\t currentElement = null;\n\n\t docElem.removeAttribute('data-whatelement');\n\t docElem.removeAttribute('data-whatclasses');\n\t };\n\n\t var persistInput = function persistInput(which, value) {\n\t if (shouldPersist) {\n\t try {\n\t window.sessionStorage.setItem('what-' + which, value);\n\t } catch (e) {\n\t // fail silently\n\t }\n\t }\n\t };\n\n\t /*\n\t * utilities\n\t */\n\n\t var pointerType = function pointerType(event) {\n\t if (typeof event.pointerType === 'number') {\n\t return pointerMap[event.pointerType];\n\t } else {\n\t // treat pen like touch\n\t return event.pointerType === 'pen' ? 'touch' : event.pointerType;\n\t }\n\t };\n\n\t // prevent touch detection from being overridden by event execution order\n\t var validateTouch = function validateTouch(value) {\n\t var timestamp = Date.now();\n\n\t var touchIsValid = value === 'mouse' && currentInput === 'touch' && timestamp - currentTimestamp < 200;\n\n\t currentTimestamp = timestamp;\n\n\t return touchIsValid;\n\t };\n\n\t // detect version of mouse wheel event to use\n\t // via https://developer.mozilla.org/en-US/docs/Web/API/Element/wheel_event\n\t var detectWheel = function detectWheel() {\n\t var wheelType = null;\n\n\t // Modern browsers support \"wheel\"\n\t if ('onwheel' in document.createElement('div')) {\n\t wheelType = 'wheel';\n\t } else {\n\t // Webkit and IE support at least \"mousewheel\"\n\t // or assume that remaining browsers are older Firefox\n\t wheelType = document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\n\t }\n\n\t return wheelType;\n\t };\n\n\t // runs callback functions\n\t var fireFunctions = function fireFunctions(type) {\n\t for (var i = 0, len = functionList.length; i < len; i++) {\n\t if (functionList[i].type === type) {\n\t functionList[i].fn.call(undefined, type === 'input' ? currentInput : currentIntent);\n\t }\n\t }\n\t };\n\n\t // finds matching element in an object\n\t var objPos = function objPos(match) {\n\t for (var i = 0, len = functionList.length; i < len; i++) {\n\t if (functionList[i].fn === match) {\n\t return i;\n\t }\n\t }\n\t };\n\n\t var detectScrolling = function detectScrolling(event) {\n\t if (mousePos.x !== event.screenX || mousePos.y !== event.screenY) {\n\t isScrolling = false;\n\n\t mousePos.x = event.screenX;\n\t mousePos.y = event.screenY;\n\t } else {\n\t isScrolling = true;\n\t }\n\t };\n\n\t // manual version of `closest()`\n\t var checkClosest = function checkClosest(elem, tag) {\n\t var ElementPrototype = window.Element.prototype;\n\n\t if (!ElementPrototype.matches) {\n\t ElementPrototype.matches = ElementPrototype.msMatchesSelector || ElementPrototype.webkitMatchesSelector;\n\t }\n\n\t if (!ElementPrototype.closest) {\n\t do {\n\t if (elem.matches(tag)) {\n\t return elem;\n\t }\n\n\t elem = elem.parentElement || elem.parentNode;\n\t } while (elem !== null && elem.nodeType === 1);\n\n\t return null;\n\t } else {\n\t return elem.closest(tag);\n\t }\n\t };\n\n\t /*\n\t * init\n\t */\n\n\t // don't start script unless browser cuts the mustard\n\t // (also passes if polyfills are used)\n\t if ('addEventListener' in window && Array.prototype.indexOf) {\n\t setUp();\n\t }\n\n\t /*\n\t * api\n\t */\n\n\t return {\n\t // returns string: the current input type\n\t // opt: 'intent'|'input'\n\t // 'input' (default): returns the same value as the `data-whatinput` attribute\n\t // 'intent': includes `data-whatintent` value if it's different than `data-whatinput`\n\t ask: function ask(opt) {\n\t return opt === 'intent' ? currentIntent : currentInput;\n\t },\n\n\t // returns string: the currently focused element or null\n\t element: function element() {\n\t return currentElement;\n\t },\n\n\t // overwrites ignored keys with provided array\n\t ignoreKeys: function ignoreKeys(arr) {\n\t ignoreMap = arr;\n\t },\n\n\t // overwrites specific char keys to update on\n\t specificKeys: function specificKeys(arr) {\n\t specificMap = arr;\n\t },\n\n\t // attach functions to input and intent \"events\"\n\t // funct: function to fire on change\n\t // eventType: 'input'|'intent'\n\t registerOnChange: function registerOnChange(fn, eventType) {\n\t functionList.push({\n\t fn: fn,\n\t type: eventType || 'input'\n\t });\n\t },\n\n\t unRegisterOnChange: function unRegisterOnChange(fn) {\n\t var position = objPos(fn);\n\n\t if (position || position === 0) {\n\t functionList.splice(position, 1);\n\t }\n\t },\n\n\t clearStorage: function clearStorage() {\n\t window.sessionStorage.clear();\n\t }\n\t };\n\t}();\n\n/***/ })\n/******/ ])\n});\n;","module.exports = jQuery;","// 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","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\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__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","import $ from 'jquery';\n\n// Core Foundation Utilities, utilized in a number of places.\n\n /**\n * Returns a boolean for RTL support\n */\nfunction rtl() {\n return $('html').attr('dir') === 'rtl';\n}\n\n/**\n * returns a random base-36 uid with namespacing\n * @function\n * @param {Number} length - number of random base-36 digits desired. Increase for more random strings.\n * @param {String} namespace - name of plugin to be incorporated in uid, optional.\n * @default {String} '' - if no plugin name is provided, nothing is appended to the uid.\n * @returns {String} - unique id\n */\nfunction GetYoDigits(length = 6, namespace){\n let str = '';\n const chars = '0123456789abcdefghijklmnopqrstuvwxyz';\n const charsLength = chars.length;\n for (let i = 0; i < length; i++) {\n str += chars[Math.floor(Math.random() * charsLength)];\n }\n return namespace ? `${str}-${namespace}` : str;\n}\n\n/**\n * Escape a string so it can be used as a regexp pattern\n * @function\n * @see https://stackoverflow.com/a/9310752/4317384\n *\n * @param {String} str - string to escape.\n * @returns {String} - escaped string\n */\nfunction RegExpEscape(str){\n return str.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n}\n\nfunction transitionend($elem){\n var transitions = {\n 'transition': 'transitionend',\n 'WebkitTransition': 'webkitTransitionEnd',\n 'MozTransition': 'transitionend',\n 'OTransition': 'otransitionend'\n };\n var elem = document.createElement('div'),\n end;\n\n for (let transition in transitions){\n if (typeof elem.style[transition] !== 'undefined'){\n end = transitions[transition];\n }\n }\n if (end) {\n return end;\n } else {\n setTimeout(function(){\n $elem.triggerHandler('transitionend', [$elem]);\n }, 1);\n return 'transitionend';\n }\n}\n\n/**\n * Return an event type to listen for window load.\n *\n * If `$elem` is passed, an event will be triggered on `$elem`. If window is already loaded, the event will still be triggered.\n * If `handler` is passed, attach it to the event on `$elem`.\n * Calling `onLoad` without handler allows you to get the event type that will be triggered before attaching the handler by yourself.\n * @function\n *\n * @param {Object} [] $elem - jQuery element on which the event will be triggered if passed.\n * @param {Function} [] handler - function to attach to the event.\n * @returns {String} - event type that should or will be triggered.\n */\nfunction onLoad($elem, handler) {\n const didLoad = document.readyState === 'complete';\n const eventType = (didLoad ? '_didLoad' : 'load') + '.zf.util.onLoad';\n const cb = () => $elem.triggerHandler(eventType);\n\n if ($elem) {\n if (handler) $elem.one(eventType, handler);\n\n if (didLoad)\n setTimeout(cb);\n else\n $(window).one('load', cb);\n }\n\n return eventType;\n}\n\n/**\n * Retuns an handler for the `mouseleave` that ignore disappeared mouses.\n *\n * If the mouse \"disappeared\" from the document (like when going on a browser UI element, See https://git.io/zf-11410),\n * the event is ignored.\n * - If the `ignoreLeaveWindow` is `true`, the event is ignored when the user actually left the window\n * (like by switching to an other window with [Alt]+[Tab]).\n * - If the `ignoreReappear` is `true`, the event will be ignored when the mouse will reappear later on the document\n * outside of the element it left.\n *\n * @function\n *\n * @param {Function} [] handler - handler for the filtered `mouseleave` event to watch.\n * @param {Object} [] options - object of options:\n * - {Boolean} [false] ignoreLeaveWindow - also ignore when the user switched windows.\n * - {Boolean} [false] ignoreReappear - also ignore when the mouse reappeared outside of the element it left.\n * @returns {Function} - filtered handler to use to listen on the `mouseleave` event.\n */\nfunction ignoreMousedisappear(handler, { ignoreLeaveWindow = false, ignoreReappear = false } = {}) {\n return function leaveEventHandler(eLeave, ...rest) {\n const callback = handler.bind(this, eLeave, ...rest);\n\n // The mouse left: call the given callback if the mouse entered elsewhere\n if (eLeave.relatedTarget !== null) {\n return callback();\n }\n\n // Otherwise, check if the mouse actually left the window.\n // In firefox if the user switched between windows, the window sill have the focus by the time\n // the event is triggered. We have to debounce the event to test this case.\n setTimeout(function leaveEventDebouncer() {\n if (!ignoreLeaveWindow && document.hasFocus && !document.hasFocus()) {\n return callback();\n }\n\n // Otherwise, wait for the mouse to reeapear outside of the element,\n if (!ignoreReappear) {\n $(document).one('mouseenter', function reenterEventHandler(eReenter) {\n if (!$(eLeave.currentTarget).has(eReenter.target).length) {\n // Fill where the mouse finally entered.\n eLeave.relatedTarget = eReenter.target;\n callback();\n }\n });\n }\n\n }, 0);\n };\n}\n\n\nexport { rtl, GetYoDigits, RegExpEscape, transitionend, onLoad, ignoreMousedisappear };\n","import $ from 'jquery';\n\n// Default set of media queries\n// const defaultQueries = {\n// 'default' : 'only screen',\n// landscape : 'only screen and (orientation: landscape)',\n// portrait : 'only screen and (orientation: portrait)',\n// retina : 'only screen and (-webkit-min-device-pixel-ratio: 2),' +\n// 'only screen and (min--moz-device-pixel-ratio: 2),' +\n// 'only screen and (-o-min-device-pixel-ratio: 2/1),' +\n// 'only screen and (min-device-pixel-ratio: 2),' +\n// 'only screen and (min-resolution: 192dpi),' +\n// 'only screen and (min-resolution: 2dppx)'\n// };\n\n\n// matchMedia() polyfill - Test a CSS media type/query in JS.\n// Authors & copyright © 2012: Scott Jehl, Paul Irish, Nicholas Zakas, David Knight. MIT license\n/* eslint-disable */\nwindow.matchMedia || (window.matchMedia = (function () {\n \"use strict\";\n\n // For browsers that support matchMedium api such as IE 9 and webkit\n var styleMedia = (window.styleMedia || window.media);\n\n // For those that don't support matchMedium\n if (!styleMedia) {\n var style = document.createElement('style'),\n script = document.getElementsByTagName('script')[0],\n info = null;\n\n style.type = 'text/css';\n style.id = 'matchmediajs-test';\n\n if (!script) {\n document.head.appendChild(style);\n } else {\n script.parentNode.insertBefore(style, script);\n }\n\n // 'style.currentStyle' is used by IE <= 8 and 'window.getComputedStyle' for all other browsers\n info = ('getComputedStyle' in window) && window.getComputedStyle(style, null) || style.currentStyle;\n\n styleMedia = {\n matchMedium: function (media) {\n var text = '@media ' + media + '{ #matchmediajs-test { width: 1px; } }';\n\n // 'style.styleSheet' is used by IE <= 8 and 'style.textContent' for all other browsers\n if (style.styleSheet) {\n style.styleSheet.cssText = text;\n } else {\n style.textContent = text;\n }\n\n // Test if media query is true or false\n return info.width === '1px';\n }\n };\n }\n\n return function(media) {\n return {\n matches: styleMedia.matchMedium(media || 'all'),\n media: media || 'all'\n };\n };\n})());\n/* eslint-enable */\n\nvar MediaQuery = {\n queries: [],\n\n current: '',\n\n /**\n * Initializes the media query helper, by extracting the breakpoint list from the CSS and activating the breakpoint watcher.\n * @function\n * @private\n */\n _init() {\n\n // make sure the initialization is only done once when calling _init() several times\n if (this.isInitialized === true) {\n return this;\n } else {\n this.isInitialized = true;\n }\n\n var self = this;\n var $meta = $('meta.foundation-mq');\n if(!$meta.length){\n $('').appendTo(document.head);\n }\n\n var extractedStyles = $('.foundation-mq').css('font-family');\n var namedQueries;\n\n namedQueries = parseStyleToObject(extractedStyles);\n\n self.queries = []; // reset\n\n for (var key in namedQueries) {\n if(namedQueries.hasOwnProperty(key)) {\n self.queries.push({\n name: key,\n value: `only screen and (min-width: ${namedQueries[key]})`\n });\n }\n }\n\n this.current = this._getCurrentSize();\n\n this._watcher();\n },\n\n /**\n * Reinitializes the media query helper.\n * Useful if your CSS breakpoint configuration has just been loaded or has changed since the initialization.\n * @function\n * @private\n */\n _reInit() {\n this.isInitialized = false;\n this._init();\n },\n\n /**\n * Checks if the screen is at least as wide as a breakpoint.\n * @function\n * @param {String} size - Name of the breakpoint to check.\n * @returns {Boolean} `true` if the breakpoint matches, `false` if it's smaller.\n */\n atLeast(size) {\n var query = this.get(size);\n\n if (query) {\n return window.matchMedia(query).matches;\n }\n\n return false;\n },\n\n /**\n * Checks if the screen is within the given breakpoint.\n * If smaller than the breakpoint of larger than its upper limit it returns false.\n * @function\n * @param {String} size - Name of the breakpoint to check.\n * @returns {Boolean} `true` if the breakpoint matches, `false` otherwise.\n */\n only(size) {\n return size === this._getCurrentSize();\n },\n\n /**\n * Checks if the screen is within a breakpoint or smaller.\n * @function\n * @param {String} size - Name of the breakpoint to check.\n * @returns {Boolean} `true` if the breakpoint matches, `false` if it's larger.\n */\n upTo(size) {\n const nextSize = this.next(size);\n\n // If the next breakpoint does not match, the screen is smaller than\n // the upper limit of this breakpoint.\n if (nextSize) {\n return !this.atLeast(nextSize);\n }\n\n // If there is no next breakpoint, the \"size\" breakpoint does not have\n // an upper limit and the screen will always be within it or smaller.\n return true;\n },\n\n /**\n * Checks if the screen matches to a breakpoint.\n * @function\n * @param {String} size - Name of the breakpoint to check, either 'small only' or 'small'. Omitting 'only' falls back to using atLeast() method.\n * @returns {Boolean} `true` if the breakpoint matches, `false` if it does not.\n */\n is(size) {\n const parts = size.trim().split(' ').filter(p => !!p.length);\n const [bpSize, bpModifier = ''] = parts;\n\n // Only the breakpont\n if (bpModifier === 'only') {\n return this.only(bpSize);\n }\n // At least the breakpoint (included)\n if (!bpModifier || bpModifier === 'up') {\n return this.atLeast(bpSize);\n }\n // Up to the breakpoint (included)\n if (bpModifier === 'down') {\n return this.upTo(bpSize);\n }\n\n throw new Error(`\n Invalid breakpoint passed to MediaQuery.is().\n Expected a breakpoint name formatted like \" \", got \"${size}\".\n `);\n },\n\n /**\n * Gets the media query of a breakpoint.\n * @function\n * @param {String} size - Name of the breakpoint to get.\n * @returns {String|null} - The media query of the breakpoint, or `null` if the breakpoint doesn't exist.\n */\n get(size) {\n for (var i in this.queries) {\n if(this.queries.hasOwnProperty(i)) {\n var query = this.queries[i];\n if (size === query.name) return query.value;\n }\n }\n\n return null;\n },\n\n /**\n * Get the breakpoint following the given breakpoint.\n * @function\n * @param {String} size - Name of the breakpoint.\n * @returns {String|null} - The name of the following breakpoint, or `null` if the passed breakpoint was the last one.\n */\n next(size) {\n const queryIndex = this.queries.findIndex((q) => this._getQueryName(q) === size);\n if (queryIndex === -1) {\n throw new Error(`\n Unknown breakpoint \"${size}\" passed to MediaQuery.next().\n Ensure it is present in your Sass \"$breakpoints\" setting.\n `);\n }\n\n const nextQuery = this.queries[queryIndex + 1];\n return nextQuery ? nextQuery.name : null;\n },\n\n /**\n * Returns the name of the breakpoint related to the given value.\n * @function\n * @private\n * @param {String|Object} value - Breakpoint name or query object.\n * @returns {String} Name of the breakpoint.\n */\n _getQueryName(value) {\n if (typeof value === 'string')\n return value;\n if (typeof value === 'object')\n return value.name;\n throw new TypeError(`\n Invalid value passed to MediaQuery._getQueryName().\n Expected a breakpoint name (String) or a breakpoint query (Object), got \"${value}\" (${typeof value})\n `);\n },\n\n /**\n * Gets the current breakpoint name by testing every breakpoint and returning the last one to match (the biggest one).\n * @function\n * @private\n * @returns {String} Name of the current breakpoint.\n */\n _getCurrentSize() {\n var matched;\n\n for (var i = 0; i < this.queries.length; i++) {\n var query = this.queries[i];\n\n if (window.matchMedia(query.value).matches) {\n matched = query;\n }\n }\n\n return matched && this._getQueryName(matched);\n },\n\n /**\n * Activates the breakpoint watcher, which fires an event on the window whenever the breakpoint changes.\n * @function\n * @private\n */\n _watcher() {\n $(window).on('resize.zf.trigger', () => {\n var newSize = this._getCurrentSize(), currentSize = this.current;\n\n if (newSize !== currentSize) {\n // Change the current media query\n this.current = newSize;\n\n // Broadcast the media query change on the window\n $(window).trigger('changed.zf.mediaquery', [newSize, currentSize]);\n }\n });\n }\n};\n\n\n\n// Thank you: https://github.com/sindresorhus/query-string\nfunction parseStyleToObject(str) {\n var styleObject = {};\n\n if (typeof str !== 'string') {\n return styleObject;\n }\n\n str = str.trim().slice(1, -1); // browsers re-quote string style values\n\n if (!str) {\n return styleObject;\n }\n\n styleObject = str.split('&').reduce(function(ret, param) {\n var parts = param.replace(/\\+/g, ' ').split('=');\n var key = parts[0];\n var val = parts[1];\n key = decodeURIComponent(key);\n\n // missing `=` should be `null`:\n // http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters\n val = typeof val === 'undefined' ? null : decodeURIComponent(val);\n\n if (!ret.hasOwnProperty(key)) {\n ret[key] = val;\n } else if (Array.isArray(ret[key])) {\n ret[key].push(val);\n } else {\n ret[key] = [ret[key], val];\n }\n return ret;\n }, {});\n\n return styleObject;\n}\n\nexport {MediaQuery};\n","import $ from 'jquery';\nimport { GetYoDigits } from './foundation.core.utils';\nimport { MediaQuery } from './foundation.util.mediaQuery';\n\nvar FOUNDATION_VERSION = '6.7.5';\n\n// Global Foundation object\n// This is attached to the window, or used as a module for AMD/Browserify\nvar Foundation = {\n version: FOUNDATION_VERSION,\n\n /**\n * Stores initialized plugins.\n */\n _plugins: {},\n\n /**\n * Stores generated unique ids for plugin instances\n */\n _uuids: [],\n\n /**\n * Defines a Foundation plugin, adding it to the `Foundation` namespace and the list of plugins to initialize when reflowing.\n * @param {Object} plugin - The constructor of the plugin.\n */\n plugin: function(plugin, name) {\n // Object key to use when adding to global Foundation object\n // Examples: Foundation.Reveal, Foundation.OffCanvas\n var className = (name || functionName(plugin));\n // Object key to use when storing the plugin, also used to create the identifying data attribute for the plugin\n // Examples: data-reveal, data-off-canvas\n var attrName = hyphenate(className);\n\n // Add to the Foundation object and the plugins list (for reflowing)\n this._plugins[attrName] = this[className] = plugin;\n },\n /**\n * @function\n * Populates the _uuids array with pointers to each individual plugin instance.\n * Adds the `zfPlugin` data-attribute to programmatically created plugins to allow use of $(selector).foundation(method) calls.\n * Also fires the initialization event for each plugin, consolidating repetitive code.\n * @param {Object} plugin - an instance of a plugin, usually `this` in context.\n * @param {String} name - the name of the plugin, passed as a camelCased string.\n * @fires Plugin#init\n */\n registerPlugin: function(plugin, name){\n var pluginName = name ? hyphenate(name) : functionName(plugin.constructor).toLowerCase();\n plugin.uuid = GetYoDigits(6, pluginName);\n\n if(!plugin.$element.attr(`data-${pluginName}`)){ plugin.$element.attr(`data-${pluginName}`, plugin.uuid); }\n if(!plugin.$element.data('zfPlugin')){ plugin.$element.data('zfPlugin', plugin); }\n /**\n * Fires when the plugin has initialized.\n * @event Plugin#init\n */\n plugin.$element.trigger(`init.zf.${pluginName}`);\n\n this._uuids.push(plugin.uuid);\n\n return;\n },\n /**\n * @function\n * Removes the plugins uuid from the _uuids array.\n * Removes the zfPlugin data attribute, as well as the data-plugin-name attribute.\n * Also fires the destroyed event for the plugin, consolidating repetitive code.\n * @param {Object} plugin - an instance of a plugin, usually `this` in context.\n * @fires Plugin#destroyed\n */\n unregisterPlugin: function(plugin){\n var pluginName = hyphenate(functionName(plugin.$element.data('zfPlugin').constructor));\n\n this._uuids.splice(this._uuids.indexOf(plugin.uuid), 1);\n plugin.$element.removeAttr(`data-${pluginName}`).removeData('zfPlugin')\n /**\n * Fires when the plugin has been destroyed.\n * @event Plugin#destroyed\n */\n .trigger(`destroyed.zf.${pluginName}`);\n for(var prop in plugin){\n if(typeof plugin[prop] === 'function'){\n plugin[prop] = null; //clean up script to prep for garbage collection.\n }\n }\n return;\n },\n\n /**\n * @function\n * Causes one or more active plugins to re-initialize, resetting event listeners, recalculating positions, etc.\n * @param {String} plugins - optional string of an individual plugin key, attained by calling `$(element).data('pluginName')`, or string of a plugin class i.e. `'dropdown'`\n * @default If no argument is passed, reflow all currently active plugins.\n */\n reInit: function(plugins){\n var isJQ = plugins instanceof $;\n try{\n if(isJQ){\n plugins.each(function(){\n $(this).data('zfPlugin')._init();\n });\n }else{\n var type = typeof plugins,\n _this = this,\n fns = {\n 'object': function(plgs){\n plgs.forEach(function(p){\n p = hyphenate(p);\n $('[data-'+ p +']').foundation('_init');\n });\n },\n 'string': function(){\n plugins = hyphenate(plugins);\n $('[data-'+ plugins +']').foundation('_init');\n },\n 'undefined': function(){\n this.object(Object.keys(_this._plugins));\n }\n };\n fns[type](plugins);\n }\n }catch(err){\n console.error(err);\n }finally{\n return plugins;\n }\n },\n\n /**\n * Initialize plugins on any elements within `elem` (and `elem` itself) that aren't already initialized.\n * @param {Object} elem - jQuery object containing the element to check inside. Also checks the element itself, unless it's the `document` object.\n * @param {String|Array} plugins - A list of plugins to initialize. Leave this out to initialize everything.\n */\n reflow: function(elem, plugins) {\n\n // If plugins is undefined, just grab everything\n if (typeof plugins === 'undefined') {\n plugins = Object.keys(this._plugins);\n }\n // If plugins is a string, convert it to an array with one item\n else if (typeof plugins === 'string') {\n plugins = [plugins];\n }\n\n var _this = this;\n\n // Iterate through each plugin\n $.each(plugins, function(i, name) {\n // Get the current plugin\n var plugin = _this._plugins[name];\n\n // Localize the search to all elements inside elem, as well as elem itself, unless elem === document\n var $elem = $(elem).find('[data-'+name+']').addBack('[data-'+name+']').filter(function () {\n return typeof $(this).data(\"zfPlugin\") === 'undefined';\n });\n\n // For each plugin found, initialize it\n $elem.each(function() {\n var $el = $(this),\n opts = { reflow: true };\n\n if($el.attr('data-options')){\n $el.attr('data-options').split(';').forEach(function(option){\n var opt = option.split(':').map(function(el){ return el.trim(); });\n if(opt[0]) opts[opt[0]] = parseValue(opt[1]);\n });\n }\n try{\n $el.data('zfPlugin', new plugin($(this), opts));\n }catch(er){\n console.error(er);\n }finally{\n return;\n }\n });\n });\n },\n getFnName: functionName,\n\n addToJquery: function() {\n // TODO: consider not making this a jQuery function\n // TODO: need way to reflow vs. re-initialize\n /**\n * The Foundation jQuery method.\n * @param {String|Array} method - An action to perform on the current jQuery object.\n */\n var foundation = function(method) {\n var type = typeof method,\n $noJS = $('.no-js');\n\n if($noJS.length){\n $noJS.removeClass('no-js');\n }\n\n if(type === 'undefined'){//needs to initialize the Foundation object, or an individual plugin.\n MediaQuery._init();\n Foundation.reflow(this);\n }else if(type === 'string'){//an individual method to invoke on a plugin or group of plugins\n var args = Array.prototype.slice.call(arguments, 1);//collect all the arguments, if necessary\n var plugClass = this.data('zfPlugin');//determine the class of plugin\n\n if(typeof plugClass !== 'undefined' && typeof plugClass[method] !== 'undefined'){//make sure both the class and method exist\n if(this.length === 1){//if there's only one, call it directly.\n plugClass[method].apply(plugClass, args);\n }else{\n this.each(function(i, el){//otherwise loop through the jQuery collection and invoke the method on each\n plugClass[method].apply($(el).data('zfPlugin'), args);\n });\n }\n }else{//error for no class or no method\n throw new ReferenceError(\"We're sorry, '\" + method + \"' is not an available method for \" + (plugClass ? functionName(plugClass) : 'this element') + '.');\n }\n }else{//error for invalid argument type\n throw new TypeError(`We're sorry, ${type} is not a valid parameter. You must use a string representing the method you wish to invoke.`);\n }\n return this;\n };\n $.fn.foundation = foundation;\n return $;\n }\n};\n\nFoundation.util = {\n /**\n * Function for applying a debounce effect to a function call.\n * @function\n * @param {Function} func - Function to be called at end of timeout.\n * @param {Number} delay - Time in ms to delay the call of `func`.\n * @returns function\n */\n throttle: function (func, delay) {\n var timer = null;\n\n return function () {\n var context = this, args = arguments;\n\n if (timer === null) {\n timer = setTimeout(function () {\n func.apply(context, args);\n timer = null;\n }, delay);\n }\n };\n }\n};\n\nwindow.Foundation = Foundation;\n\n// Polyfill for requestAnimationFrame\n(function() {\n if (!Date.now || !window.Date.now)\n window.Date.now = Date.now = function() { return new Date().getTime(); };\n\n var vendors = ['webkit', 'moz'];\n for (var i = 0; i < vendors.length && !window.requestAnimationFrame; ++i) {\n var vp = vendors[i];\n window.requestAnimationFrame = window[vp+'RequestAnimationFrame'];\n window.cancelAnimationFrame = (window[vp+'CancelAnimationFrame']\n || window[vp+'CancelRequestAnimationFrame']);\n }\n if (/iP(ad|hone|od).*OS 6/.test(window.navigator.userAgent)\n || !window.requestAnimationFrame || !window.cancelAnimationFrame) {\n var lastTime = 0;\n window.requestAnimationFrame = function(callback) {\n var now = Date.now();\n var nextTime = Math.max(lastTime + 16, now);\n return setTimeout(function() { callback(lastTime = nextTime); },\n nextTime - now);\n };\n window.cancelAnimationFrame = clearTimeout;\n }\n /**\n * Polyfill for performance.now, required by rAF\n */\n if(!window.performance || !window.performance.now){\n window.performance = {\n start: Date.now(),\n now: function(){ return Date.now() - this.start; }\n };\n }\n})();\nif (!Function.prototype.bind) {\n /* eslint-disable no-extend-native */\n Function.prototype.bind = function(oThis) {\n if (typeof this !== 'function') {\n // closest thing possible to the ECMAScript 5\n // internal IsCallable function\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n\n var aArgs = Array.prototype.slice.call(arguments, 1),\n fToBind = this,\n fNOP = function() {},\n fBound = function() {\n return fToBind.apply(this instanceof fNOP\n ? this\n : oThis,\n aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n if (this.prototype) {\n // native functions don't have a prototype\n fNOP.prototype = this.prototype;\n }\n fBound.prototype = new fNOP();\n\n return fBound;\n };\n}\n// Polyfill to get the name of a function in IE9\nfunction functionName(fn) {\n if (typeof Function.prototype.name === 'undefined') {\n var funcNameRegex = /function\\s([^(]{1,})\\(/;\n var results = (funcNameRegex).exec((fn).toString());\n return (results && results.length > 1) ? results[1].trim() : \"\";\n }\n else if (typeof fn.prototype === 'undefined') {\n return fn.constructor.name;\n }\n else {\n return fn.prototype.constructor.name;\n }\n}\nfunction parseValue(str){\n if ('true' === str) return true;\n else if ('false' === str) return false;\n else if (!isNaN(str * 1)) return parseFloat(str);\n return str;\n}\n// Convert PascalCase to kebab-case\n// Thank you: http://stackoverflow.com/a/8955580\nfunction hyphenate(str) {\n return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n}\n\nexport {Foundation};\n","import { GetYoDigits } from './foundation.core.utils';\n\n// Abstract class for providing lifecycle hooks. Expect plugins to define AT LEAST\n// {function} _setup (replaces previous constructor),\n// {function} _destroy (replaces previous destroy)\nclass Plugin {\n\n constructor(element, options) {\n this._setup(element, options);\n var pluginName = getPluginName(this);\n this.uuid = GetYoDigits(6, pluginName);\n\n if(!this.$element.attr(`data-${pluginName}`)){ this.$element.attr(`data-${pluginName}`, this.uuid); }\n if(!this.$element.data('zfPlugin')){ this.$element.data('zfPlugin', this); }\n /**\n * Fires when the plugin has initialized.\n * @event Plugin#init\n */\n this.$element.trigger(`init.zf.${pluginName}`);\n }\n\n destroy() {\n this._destroy();\n var pluginName = getPluginName(this);\n this.$element.removeAttr(`data-${pluginName}`).removeData('zfPlugin')\n /**\n * Fires when the plugin has been destroyed.\n * @event Plugin#destroyed\n */\n .trigger(`destroyed.zf.${pluginName}`);\n for(var prop in this){\n if (this.hasOwnProperty(prop)) {\n this[prop] = null; //clean up script to prep for garbage collection.\n }\n }\n }\n}\n\n// Convert PascalCase to kebab-case\n// Thank you: http://stackoverflow.com/a/8955580\nfunction hyphenate(str) {\n return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n}\n\nfunction getPluginName(obj) {\n return hyphenate(obj.className);\n}\n\nexport {Plugin};\n","/*******************************************\n * *\n * This util was created by Marius Olbertz *\n * Please thank Marius on GitHub /owlbertz *\n * or the web http://www.mariusolbertz.de/ *\n * *\n ******************************************/\n\nimport $ from 'jquery';\nimport { rtl as Rtl } from './foundation.core.utils';\n\nconst keyCodes = {\n 9: 'TAB',\n 13: 'ENTER',\n 27: 'ESCAPE',\n 32: 'SPACE',\n 35: 'END',\n 36: 'HOME',\n 37: 'ARROW_LEFT',\n 38: 'ARROW_UP',\n 39: 'ARROW_RIGHT',\n 40: 'ARROW_DOWN'\n}\n\nvar commands = {}\n\n// Functions pulled out to be referenceable from internals\nfunction findFocusable($element) {\n if(!$element) {return false; }\n return $element.find('a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]').filter(function() {\n if (!$(this).is(':visible') || $(this).attr('tabindex') < 0) { return false; } //only have visible elements and those that have a tabindex greater or equal 0\n return true;\n })\n .sort( function( a, b ) {\n if ($(a).attr('tabindex') === $(b).attr('tabindex')) {\n return 0;\n }\n let aTabIndex = parseInt($(a).attr('tabindex'), 10),\n bTabIndex = parseInt($(b).attr('tabindex'), 10);\n // Undefined is treated the same as 0\n if (typeof $(a).attr('tabindex') === 'undefined' && bTabIndex > 0) {\n return 1;\n }\n if (typeof $(b).attr('tabindex') === 'undefined' && aTabIndex > 0) {\n return -1;\n }\n if (aTabIndex === 0 && bTabIndex > 0) {\n return 1;\n }\n if (bTabIndex === 0 && aTabIndex > 0) {\n return -1;\n }\n if (aTabIndex < bTabIndex) {\n return -1;\n }\n if (aTabIndex > bTabIndex) {\n return 1;\n }\n });\n}\n\nfunction parseKey(event) {\n var key = keyCodes[event.which || event.keyCode] || String.fromCharCode(event.which).toUpperCase();\n\n // Remove un-printable characters, e.g. for `fromCharCode` calls for CTRL only events\n key = key.replace(/\\W+/, '');\n\n if (event.shiftKey) key = `SHIFT_${key}`;\n if (event.ctrlKey) key = `CTRL_${key}`;\n if (event.altKey) key = `ALT_${key}`;\n\n // Remove trailing underscore, in case only modifiers were used (e.g. only `CTRL_ALT`)\n key = key.replace(/_$/, '');\n\n return key;\n}\n\nvar Keyboard = {\n keys: getKeyCodes(keyCodes),\n\n /**\n * Parses the (keyboard) event and returns a String that represents its key\n * Can be used like Foundation.parseKey(event) === Foundation.keys.SPACE\n * @param {Event} event - the event generated by the event handler\n * @return String key - String that represents the key pressed\n */\n parseKey: parseKey,\n\n /**\n * Handles the given (keyboard) event\n * @param {Event} event - the event generated by the event handler\n * @param {String} component - Foundation component's name, e.g. Slider or Reveal\n * @param {Objects} functions - collection of functions that are to be executed\n */\n handleKey(event, component, functions) {\n var commandList = commands[component],\n keyCode = this.parseKey(event),\n cmds,\n command,\n fn;\n\n if (!commandList) return console.warn('Component not defined!');\n\n // Ignore the event if it was already handled\n if (event.zfIsKeyHandled === true) return;\n\n // This component does not differentiate between ltr and rtl\n if (typeof commandList.ltr === 'undefined') {\n cmds = commandList; // use plain list\n } else { // merge ltr and rtl: if document is rtl, rtl overwrites ltr and vice versa\n if (Rtl()) cmds = $.extend({}, commandList.ltr, commandList.rtl);\n\n else cmds = $.extend({}, commandList.rtl, commandList.ltr);\n }\n command = cmds[keyCode];\n\n fn = functions[command];\n // Execute the handler if found\n if (fn && typeof fn === 'function') {\n var returnValue = fn.apply();\n\n // Mark the event as \"handled\" to prevent future handlings\n event.zfIsKeyHandled = true;\n\n // Execute function when event was handled\n if (functions.handled || typeof functions.handled === 'function') {\n functions.handled(returnValue);\n }\n } else {\n // Execute function when event was not handled\n if (functions.unhandled || typeof functions.unhandled === 'function') {\n functions.unhandled();\n }\n }\n },\n\n /**\n * Finds all focusable elements within the given `$element`\n * @param {jQuery} $element - jQuery object to search within\n * @return {jQuery} $focusable - all focusable elements within `$element`\n */\n\n findFocusable: findFocusable,\n\n /**\n * Returns the component name name\n * @param {Object} component - Foundation component, e.g. Slider or Reveal\n * @return String componentName\n */\n\n register(componentName, cmds) {\n commands[componentName] = cmds;\n },\n\n\n // TODO9438: These references to Keyboard need to not require global. Will 'this' work in this context?\n //\n /**\n * Traps the focus in the given element.\n * @param {jQuery} $element jQuery object to trap the foucs into.\n */\n trapFocus($element) {\n var $focusable = findFocusable($element),\n $firstFocusable = $focusable.eq(0),\n $lastFocusable = $focusable.eq(-1);\n\n $element.on('keydown.zf.trapfocus', function(event) {\n if (event.target === $lastFocusable[0] && parseKey(event) === 'TAB') {\n event.preventDefault();\n $firstFocusable.focus();\n }\n else if (event.target === $firstFocusable[0] && parseKey(event) === 'SHIFT_TAB') {\n event.preventDefault();\n $lastFocusable.focus();\n }\n });\n },\n /**\n * Releases the trapped focus from the given element.\n * @param {jQuery} $element jQuery object to release the focus for.\n */\n releaseFocus($element) {\n $element.off('keydown.zf.trapfocus');\n }\n}\n\n/*\n * Constants for easier comparing.\n * Can be used like Foundation.parseKey(event) === Foundation.keys.SPACE\n */\nfunction getKeyCodes(kcs) {\n var k = {};\n for (var kc in kcs) {\n if (kcs.hasOwnProperty(kc)) k[kcs[kc]] = kcs[kc];\n }\n return k;\n}\n\nexport {Keyboard};\n","import $ from 'jquery';\nimport { Plugin } from './foundation.core.plugin';\nimport { onLoad, GetYoDigits } from './foundation.core.utils';\nimport { Keyboard } from './foundation.util.keyboard';\n\n/**\n * Accordion module.\n * @module foundation.accordion\n * @requires foundation.util.keyboard\n */\n\nclass Accordion extends Plugin {\n /**\n * Creates a new instance of an accordion.\n * @class\n * @name Accordion\n * @fires Accordion#init\n * @param {jQuery} element - jQuery object to make into an accordion.\n * @param {Object} options - a plain object with settings to override the default options.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, Accordion.defaults, this.$element.data(), options);\n\n this.className = 'Accordion'; // ie9 back compat\n this._init();\n\n Keyboard.register('Accordion', {\n 'ENTER': 'toggle',\n 'SPACE': 'toggle',\n 'ARROW_DOWN': 'next',\n 'ARROW_UP': 'previous',\n 'HOME': 'first',\n 'END': 'last',\n });\n }\n\n /**\n * Initializes the accordion by animating the preset active pane(s).\n * @private\n */\n _init() {\n this._isInitializing = true;\n\n this.$tabs = this.$element.children('[data-accordion-item]');\n\n\n this.$tabs.each(function(idx, el) {\n var $el = $(el),\n $content = $el.children('[data-tab-content]'),\n id = $content[0].id || GetYoDigits(6, 'accordion'),\n linkId = (el.id) ? `${el.id}-label` : `${id}-label`;\n\n $el.find('a:first').attr({\n 'aria-controls': id,\n 'id': linkId,\n 'aria-expanded': false\n });\n\n $content.attr({'role': 'region', 'aria-labelledby': linkId, 'aria-hidden': true, 'id': id});\n });\n\n var $initActive = this.$element.find('.is-active').children('[data-tab-content]');\n if ($initActive.length) {\n // Save up the initial hash to return to it later when going back in history\n this._initialAnchor = $initActive.prev('a').attr('href');\n this._openSingleTab($initActive);\n }\n\n this._checkDeepLink = () => {\n var anchor = window.location.hash;\n\n if (!anchor.length) {\n // If we are still initializing and there is no anchor, then there is nothing to do\n if (this._isInitializing) return;\n // Otherwise, move to the initial anchor\n if (this._initialAnchor) anchor = this._initialAnchor;\n }\n\n var $anchor = anchor && $(anchor);\n var $link = anchor && this.$element.find(`[href$=\"${anchor}\"]`);\n // Whether the anchor element that has been found is part of this element\n var isOwnAnchor = !!($anchor.length && $link.length);\n\n if (isOwnAnchor) {\n // If there is an anchor for the hash, open it (if not already active)\n if ($anchor && $link && $link.length) {\n if (!$link.parent('[data-accordion-item]').hasClass('is-active')) {\n this._openSingleTab($anchor);\n }\n }\n // Otherwise, close everything\n else {\n this._closeAllTabs();\n }\n\n // Roll up a little to show the titles\n if (this.options.deepLinkSmudge) {\n onLoad($(window), () => {\n var offset = this.$element.offset();\n $('html, body').animate({ scrollTop: offset.top - this.options.deepLinkSmudgeOffset }, this.options.deepLinkSmudgeDelay);\n });\n }\n\n /**\n * Fires when the plugin has deeplinked at pageload\n * @event Accordion#deeplink\n */\n this.$element.trigger('deeplink.zf.accordion', [$link, $anchor]);\n }\n }\n\n //use browser to open a tab, if it exists in this tabset\n if (this.options.deepLink) {\n this._checkDeepLink();\n }\n\n this._events();\n\n this._isInitializing = false;\n }\n\n /**\n * Adds event handlers for items within the accordion.\n * @private\n */\n _events() {\n var _this = this;\n\n this.$tabs.each(function() {\n var $elem = $(this);\n var $tabContent = $elem.children('[data-tab-content]');\n if ($tabContent.length) {\n $elem.children('a').off('click.zf.accordion keydown.zf.accordion')\n .on('click.zf.accordion', function(e) {\n e.preventDefault();\n _this.toggle($tabContent);\n }).on('keydown.zf.accordion', function(e) {\n Keyboard.handleKey(e, 'Accordion', {\n toggle: function() {\n _this.toggle($tabContent);\n },\n next: function() {\n var $a = $elem.next().find('a').focus();\n if (!_this.options.multiExpand) {\n $a.trigger('click.zf.accordion')\n }\n },\n previous: function() {\n var $a = $elem.prev().find('a').focus();\n if (!_this.options.multiExpand) {\n $a.trigger('click.zf.accordion')\n }\n },\n first: function() {\n var $a = _this.$tabs.first().find('.accordion-title').focus();\n if (!_this.options.multiExpand) {\n $a.trigger('click.zf.accordion');\n }\n },\n last: function() {\n var $a = _this.$tabs.last().find('.accordion-title').focus();\n if (!_this.options.multiExpand) {\n $a.trigger('click.zf.accordion');\n }\n },\n handled: function() {\n e.preventDefault();\n }\n });\n });\n }\n });\n if (this.options.deepLink) {\n $(window).on('hashchange', this._checkDeepLink);\n }\n }\n\n /**\n * Toggles the selected content pane's open/close state.\n * @param {jQuery} $target - jQuery object of the pane to toggle (`.accordion-content`).\n * @function\n */\n toggle($target) {\n if ($target.closest('[data-accordion]').is('[disabled]')) {\n console.info('Cannot toggle an accordion that is disabled.');\n return;\n }\n if ($target.parent().hasClass('is-active')) {\n this.up($target);\n } else {\n this.down($target);\n }\n //either replace or update browser history\n if (this.options.deepLink) {\n var anchor = $target.prev('a').attr('href');\n\n if (this.options.updateHistory) {\n history.pushState({}, '', anchor);\n } else {\n history.replaceState({}, '', anchor);\n }\n }\n }\n\n /**\n * Opens the accordion tab defined by `$target`.\n * @param {jQuery} $target - Accordion pane to open (`.accordion-content`).\n * @fires Accordion#down\n * @function\n */\n down($target) {\n if ($target.closest('[data-accordion]').is('[disabled]')) {\n console.info('Cannot call down on an accordion that is disabled.');\n return;\n }\n\n if (this.options.multiExpand)\n this._openTab($target);\n else\n this._openSingleTab($target);\n }\n\n /**\n * Closes the tab defined by `$target`.\n * It may be ignored if the Accordion options don't allow it.\n *\n * @param {jQuery} $target - Accordion tab to close (`.accordion-content`).\n * @fires Accordion#up\n * @function\n */\n up($target) {\n if (this.$element.is('[disabled]')) {\n console.info('Cannot call up on an accordion that is disabled.');\n return;\n }\n\n // Don't close the item if it is already closed\n const $targetItem = $target.parent();\n if (!$targetItem.hasClass('is-active')) return;\n\n // Don't close the item if there is no other active item (unless with `allowAllClosed`)\n const $othersItems = $targetItem.siblings();\n if (!this.options.allowAllClosed && !$othersItems.hasClass('is-active')) return;\n\n this._closeTab($target);\n }\n\n /**\n * Make the tab defined by `$target` the only opened tab, closing all others tabs.\n * @param {jQuery} $target - Accordion tab to open (`.accordion-content`).\n * @function\n * @private\n */\n _openSingleTab($target) {\n // Close all the others active tabs.\n const $activeContents = this.$element.children('.is-active').children('[data-tab-content]');\n if ($activeContents.length) {\n this._closeTab($activeContents.not($target));\n }\n\n // Then open the target.\n this._openTab($target);\n }\n\n /**\n * Opens the tab defined by `$target`.\n * @param {jQuery} $target - Accordion tab to open (`.accordion-content`).\n * @fires Accordion#down\n * @function\n * @private\n */\n _openTab($target) {\n const $targetItem = $target.parent();\n const targetContentId = $target.attr('aria-labelledby');\n\n $target.attr('aria-hidden', false);\n $targetItem.addClass('is-active');\n\n $(`#${targetContentId}`).attr({\n 'aria-expanded': true\n });\n\n $target.finish().slideDown(this.options.slideSpeed, () => {\n /**\n * Fires when the tab is done opening.\n * @event Accordion#down\n */\n this.$element.trigger('down.zf.accordion', [$target]);\n });\n }\n\n /**\n * Closes the tab defined by `$target`.\n * @param {jQuery} $target - Accordion tab to close (`.accordion-content`).\n * @fires Accordion#up\n * @function\n * @private\n */\n _closeTab($target) {\n const $targetItem = $target.parent();\n const targetContentId = $target.attr('aria-labelledby');\n\n $target.attr('aria-hidden', true)\n $targetItem.removeClass('is-active');\n\n $(`#${targetContentId}`).attr({\n 'aria-expanded': false\n });\n\n $target.finish().slideUp(this.options.slideSpeed, () => {\n /**\n * Fires when the tab is done collapsing up.\n * @event Accordion#up\n */\n this.$element.trigger('up.zf.accordion', [$target]);\n });\n }\n\n /**\n * Closes all active tabs\n * @fires Accordion#up\n * @function\n * @private\n */\n _closeAllTabs() {\n var $activeTabs = this.$element.children('.is-active').children('[data-tab-content]');\n if ($activeTabs.length) {\n this._closeTab($activeTabs);\n }\n }\n\n /**\n * Destroys an instance of an accordion.\n * @fires Accordion#destroyed\n * @function\n */\n _destroy() {\n this.$element.find('[data-tab-content]').stop(true).slideUp(0).css('display', '');\n this.$element.find('a').off('.zf.accordion');\n if (this.options.deepLink) {\n $(window).off('hashchange', this._checkDeepLink);\n }\n\n }\n}\n\nAccordion.defaults = {\n /**\n * Amount of time to animate the opening of an accordion pane.\n * @option\n * @type {number}\n * @default 250\n */\n slideSpeed: 250,\n /**\n * Allow the accordion to have multiple open panes.\n * @option\n * @type {boolean}\n * @default false\n */\n multiExpand: false,\n /**\n * Allow the accordion to close all panes.\n * @option\n * @type {boolean}\n * @default false\n */\n allowAllClosed: false,\n /**\n * Link the location hash to the open pane.\n * Set the location hash when the opened pane changes, and open and scroll to the corresponding pane when the location changes.\n * @option\n * @type {boolean}\n * @default false\n */\n deepLink: false,\n /**\n * If `deepLink` is enabled, adjust the deep link scroll to make sure the top of the accordion panel is visible\n * @option\n * @type {boolean}\n * @default false\n */\n deepLinkSmudge: false,\n /**\n * If `deepLinkSmudge` is enabled, animation time (ms) for the deep link adjustment\n * @option\n * @type {number}\n * @default 300\n */\n deepLinkSmudgeDelay: 300,\n /**\n * If `deepLinkSmudge` is enabled, the offset for scrollToTtop to prevent overlap by a sticky element at the top of the page\n * @option\n * @type {number}\n * @default 0\n */\n deepLinkSmudgeOffset: 0,\n /**\n * If `deepLink` is enabled, update the browser history with the open accordion\n * @option\n * @type {boolean}\n * @default false\n */\n updateHistory: false\n};\n\nexport { Accordion };\n","import $ from 'jquery';\n\nconst Nest = {\n Feather(menu, type = 'zf') {\n menu.attr('role', 'menubar');\n menu.find('a').attr({'role': 'menuitem'});\n\n var items = menu.find('li').attr({'role': 'none'}),\n subMenuClass = `is-${type}-submenu`,\n subItemClass = `${subMenuClass}-item`,\n hasSubClass = `is-${type}-submenu-parent`,\n applyAria = (type !== 'accordion'); // Accordions handle their own ARIA attriutes.\n\n items.each(function() {\n var $item = $(this),\n $sub = $item.children('ul');\n\n if ($sub.length) {\n $item.addClass(hasSubClass);\n if(applyAria) {\n const firstItem = $item.children('a:first');\n firstItem.attr({\n 'aria-haspopup': true,\n 'aria-label': firstItem.attr('aria-label') || firstItem.text()\n });\n // Note: Drilldowns behave differently in how they hide, and so need\n // additional attributes. We should look if this possibly over-generalized\n // utility (Nest) is appropriate when we rework menus in 6.4\n if(type === 'drilldown') {\n $item.attr({'aria-expanded': false});\n }\n }\n $sub\n .addClass(`submenu ${subMenuClass}`)\n .attr({\n 'data-submenu': '',\n 'role': 'menubar'\n });\n if(type === 'drilldown') {\n $sub.attr({'aria-hidden': true});\n }\n }\n\n if ($item.parent('[data-submenu]').length) {\n $item.addClass(`is-submenu-item ${subItemClass}`);\n }\n });\n\n return;\n },\n\n Burn(menu, type) {\n var //items = menu.find('li'),\n subMenuClass = `is-${type}-submenu`,\n subItemClass = `${subMenuClass}-item`,\n hasSubClass = `is-${type}-submenu-parent`;\n\n menu\n .find('>li, > li > ul, .menu, .menu > li, [data-submenu] > li')\n .removeClass(`${subMenuClass} ${subItemClass} ${hasSubClass} is-submenu-item submenu is-active`)\n .removeAttr('data-submenu').css('display', '');\n\n }\n}\n\nexport {Nest};\n","import $ from 'jquery';\nimport { Keyboard } from './foundation.util.keyboard';\nimport { Nest } from './foundation.util.nest';\nimport { GetYoDigits } from './foundation.core.utils';\nimport { Plugin } from './foundation.core.plugin';\n\n/**\n * AccordionMenu module.\n * @module foundation.accordionMenu\n * @requires foundation.util.keyboard\n * @requires foundation.util.nest\n */\n\nclass AccordionMenu extends Plugin {\n /**\n * Creates a new instance of an accordion menu.\n * @class\n * @name AccordionMenu\n * @fires AccordionMenu#init\n * @param {jQuery} element - jQuery object to make into an accordion menu.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, AccordionMenu.defaults, this.$element.data(), options);\n this.className = 'AccordionMenu'; // ie9 back compat\n\n this._init();\n\n Keyboard.register('AccordionMenu', {\n 'ENTER': 'toggle',\n 'SPACE': 'toggle',\n 'ARROW_RIGHT': 'open',\n 'ARROW_UP': 'up',\n 'ARROW_DOWN': 'down',\n 'ARROW_LEFT': 'close',\n 'ESCAPE': 'closeAll'\n });\n }\n\n\n\n /**\n * Initializes the accordion menu by hiding all nested menus.\n * @private\n */\n _init() {\n Nest.Feather(this.$element, 'accordion');\n\n var _this = this;\n\n this.$element.find('[data-submenu]').not('.is-active').slideUp(0);//.find('a').css('padding-left', '1rem');\n this.$element.attr({\n 'aria-multiselectable': this.options.multiOpen\n });\n\n this.$menuLinks = this.$element.find('.is-accordion-submenu-parent');\n this.$menuLinks.each(function() {\n var linkId = this.id || GetYoDigits(6, 'acc-menu-link'),\n $elem = $(this),\n $sub = $elem.children('[data-submenu]'),\n subId = $sub[0].id || GetYoDigits(6, 'acc-menu'),\n isActive = $sub.hasClass('is-active');\n\n if (_this.options.parentLink) {\n let $anchor = $elem.children('a');\n $anchor.clone().prependTo($sub).wrap('
  • ');\n }\n\n if (_this.options.submenuToggle) {\n $elem.addClass('has-submenu-toggle');\n $elem.children('a').after('');\n } else {\n $elem.attr({\n 'aria-controls': subId,\n 'aria-expanded': isActive,\n 'id': linkId\n });\n }\n $sub.attr({\n 'aria-labelledby': linkId,\n 'aria-hidden': !isActive,\n 'role': 'group',\n 'id': subId\n });\n });\n var initPanes = this.$element.find('.is-active');\n if (initPanes.length) {\n initPanes.each(function() {\n _this.down($(this));\n });\n }\n this._events();\n }\n\n /**\n * Adds event handlers for items within the menu.\n * @private\n */\n _events() {\n var _this = this;\n\n this.$element.find('li').each(function() {\n var $submenu = $(this).children('[data-submenu]');\n\n if ($submenu.length) {\n if (_this.options.submenuToggle) {\n $(this).children('.submenu-toggle').off('click.zf.accordionMenu').on('click.zf.accordionMenu', function() {\n _this.toggle($submenu);\n });\n } else {\n $(this).children('a').off('click.zf.accordionMenu').on('click.zf.accordionMenu', function(e) {\n e.preventDefault();\n _this.toggle($submenu);\n });\n }\n }\n }).on('keydown.zf.accordionMenu', function(e) {\n var $element = $(this),\n $elements = $element.parent('ul').children('li'),\n $prevElement,\n $nextElement,\n $target = $element.children('[data-submenu]');\n\n $elements.each(function(i) {\n if ($(this).is($element)) {\n $prevElement = $elements.eq(Math.max(0, i-1)).find('a').first();\n $nextElement = $elements.eq(Math.min(i+1, $elements.length-1)).find('a').first();\n\n if ($(this).children('[data-submenu]:visible').length) { // has open sub menu\n $nextElement = $element.find('li:first-child').find('a').first();\n }\n if ($(this).is(':first-child')) { // is first element of sub menu\n $prevElement = $element.parents('li').first().find('a').first();\n } else if ($prevElement.parents('li').first().children('[data-submenu]:visible').length) { // if previous element has open sub menu\n $prevElement = $prevElement.parents('li').find('li:last-child').find('a').first();\n }\n if ($(this).is(':last-child')) { // is last element of sub menu\n $nextElement = $element.parents('li').first().next('li').find('a').first();\n }\n\n return;\n }\n });\n\n Keyboard.handleKey(e, 'AccordionMenu', {\n open: function() {\n if ($target.is(':hidden')) {\n _this.down($target);\n $target.find('li').first().find('a').first().focus();\n }\n },\n close: function() {\n if ($target.length && !$target.is(':hidden')) { // close active sub of this item\n _this.up($target);\n } else if ($element.parent('[data-submenu]').length) { // close currently open sub\n _this.up($element.parent('[data-submenu]'));\n $element.parents('li').first().find('a').first().focus();\n }\n },\n up: function() {\n $prevElement.focus();\n return true;\n },\n down: function() {\n $nextElement.focus();\n return true;\n },\n toggle: function() {\n if (_this.options.submenuToggle) {\n return false;\n }\n if ($element.children('[data-submenu]').length) {\n _this.toggle($element.children('[data-submenu]'));\n return true;\n }\n },\n closeAll: function() {\n _this.hideAll();\n },\n handled: function(preventDefault) {\n if (preventDefault) {\n e.preventDefault();\n }\n }\n });\n });//.attr('tabindex', 0);\n }\n\n /**\n * Closes all panes of the menu.\n * @function\n */\n hideAll() {\n this.up(this.$element.find('[data-submenu]'));\n }\n\n /**\n * Opens all panes of the menu.\n * @function\n */\n showAll() {\n this.down(this.$element.find('[data-submenu]'));\n }\n\n /**\n * Toggles the open/close state of a submenu.\n * @function\n * @param {jQuery} $target - the submenu to toggle\n */\n toggle($target) {\n if (!$target.is(':animated')) {\n if (!$target.is(':hidden')) {\n this.up($target);\n }\n else {\n this.down($target);\n }\n }\n }\n\n /**\n * Opens the sub-menu defined by `$target`.\n * @param {jQuery} $target - Sub-menu to open.\n * @fires AccordionMenu#down\n */\n down($target) {\n // If having multiple submenus active is disabled, close all the submenus\n // that are not parents or children of the targeted submenu.\n if (!this.options.multiOpen) {\n // The \"branch\" of the targetted submenu, from the component root to\n // the active submenus nested in it.\n const $targetBranch = $target.parentsUntil(this.$element)\n .add($target)\n .add($target.find('.is-active'));\n // All the active submenus that are not in the branch.\n const $othersActiveSubmenus = this.$element.find('.is-active').not($targetBranch);\n\n this.up($othersActiveSubmenus);\n }\n\n $target\n .addClass('is-active')\n .attr({ 'aria-hidden': false });\n\n if (this.options.submenuToggle) {\n $target.prev('.submenu-toggle').attr({'aria-expanded': true});\n }\n else {\n $target.parent('.is-accordion-submenu-parent').attr({'aria-expanded': true});\n }\n\n $target.slideDown(this.options.slideSpeed, () => {\n /**\n * Fires when the menu is done opening.\n * @event AccordionMenu#down\n */\n this.$element.trigger('down.zf.accordionMenu', [$target]);\n });\n }\n\n /**\n * Closes the sub-menu defined by `$target`. All sub-menus inside the target will be closed as well.\n * @param {jQuery} $target - Sub-menu to close.\n * @fires AccordionMenu#up\n */\n up($target) {\n const $submenus = $target.find('[data-submenu]');\n const $allmenus = $target.add($submenus);\n\n $submenus.slideUp(0);\n $allmenus\n .removeClass('is-active')\n .attr('aria-hidden', true);\n\n if (this.options.submenuToggle) {\n $allmenus.prev('.submenu-toggle').attr('aria-expanded', false);\n }\n else {\n $allmenus.parent('.is-accordion-submenu-parent').attr('aria-expanded', false);\n }\n\n $target.slideUp(this.options.slideSpeed, () => {\n /**\n * Fires when the menu is done collapsing up.\n * @event AccordionMenu#up\n */\n this.$element.trigger('up.zf.accordionMenu', [$target]);\n });\n }\n\n /**\n * Destroys an instance of accordion menu.\n * @fires AccordionMenu#destroyed\n */\n _destroy() {\n this.$element.find('[data-submenu]').slideDown(0).css('display', '');\n this.$element.find('a').off('click.zf.accordionMenu');\n this.$element.find('[data-is-parent-link]').detach();\n\n if (this.options.submenuToggle) {\n this.$element.find('.has-submenu-toggle').removeClass('has-submenu-toggle');\n this.$element.find('.submenu-toggle').remove();\n }\n\n Nest.Burn(this.$element, 'accordion');\n }\n}\n\nAccordionMenu.defaults = {\n /**\n * Adds the parent link to the submenu.\n * @option\n * @type {boolean}\n * @default false\n */\n parentLink: false,\n /**\n * Amount of time to animate the opening of a submenu in ms.\n * @option\n * @type {number}\n * @default 250\n */\n slideSpeed: 250,\n /**\n * Adds a separate submenu toggle button. This allows the parent item to have a link.\n * @option\n * @example true\n */\n submenuToggle: false,\n /**\n * The text used for the submenu toggle if enabled. This is used for screen readers only.\n * @option\n * @example true\n */\n submenuToggleText: 'Toggle menu',\n /**\n * Allow the menu to have multiple open panes.\n * @option\n * @type {boolean}\n * @default true\n */\n multiOpen: true\n};\n\nexport { AccordionMenu };\n","var Box = {\n ImNotTouchingYou: ImNotTouchingYou,\n OverlapArea: OverlapArea,\n GetDimensions: GetDimensions,\n GetExplicitOffsets: GetExplicitOffsets\n}\n\n/**\n * Compares the dimensions of an element to a container and determines collision events with container.\n * @function\n * @param {jQuery} element - jQuery object to test for collisions.\n * @param {jQuery} parent - jQuery object to use as bounding container.\n * @param {Boolean} lrOnly - set to true to check left and right values only.\n * @param {Boolean} tbOnly - set to true to check top and bottom values only.\n * @default if no parent object passed, detects collisions with `window`.\n * @returns {Boolean} - true if collision free, false if a collision in any direction.\n */\nfunction ImNotTouchingYou(element, parent, lrOnly, tbOnly, ignoreBottom) {\n return OverlapArea(element, parent, lrOnly, tbOnly, ignoreBottom) === 0;\n}\n\nfunction OverlapArea(element, parent, lrOnly, tbOnly, ignoreBottom) {\n var eleDims = GetDimensions(element),\n topOver, bottomOver, leftOver, rightOver;\n if (parent) {\n var parDims = GetDimensions(parent);\n\n bottomOver = (parDims.height + parDims.offset.top) - (eleDims.offset.top + eleDims.height);\n topOver = eleDims.offset.top - parDims.offset.top;\n leftOver = eleDims.offset.left - parDims.offset.left;\n rightOver = (parDims.width + parDims.offset.left) - (eleDims.offset.left + eleDims.width);\n }\n else {\n bottomOver = (eleDims.windowDims.height + eleDims.windowDims.offset.top) - (eleDims.offset.top + eleDims.height);\n topOver = eleDims.offset.top - eleDims.windowDims.offset.top;\n leftOver = eleDims.offset.left - eleDims.windowDims.offset.left;\n rightOver = eleDims.windowDims.width - (eleDims.offset.left + eleDims.width);\n }\n\n bottomOver = ignoreBottom ? 0 : Math.min(bottomOver, 0);\n topOver = Math.min(topOver, 0);\n leftOver = Math.min(leftOver, 0);\n rightOver = Math.min(rightOver, 0);\n\n if (lrOnly) {\n return leftOver + rightOver;\n }\n if (tbOnly) {\n return topOver + bottomOver;\n }\n\n // use sum of squares b/c we care about overlap area.\n return Math.sqrt((topOver * topOver) + (bottomOver * bottomOver) + (leftOver * leftOver) + (rightOver * rightOver));\n}\n\n/**\n * Uses native methods to return an object of dimension values.\n * @function\n * @param {jQuery || HTML} element - jQuery object or DOM element for which to get the dimensions. Can be any element other that document or window.\n * @returns {Object} - nested object of integer pixel values\n * TODO - if element is window, return only those values.\n */\nfunction GetDimensions(elem){\n elem = elem.length ? elem[0] : elem;\n\n if (elem === window || elem === document) {\n throw new Error(\"I'm sorry, Dave. I'm afraid I can't do that.\");\n }\n\n var rect = elem.getBoundingClientRect(),\n parRect = elem.parentNode.getBoundingClientRect(),\n winRect = document.body.getBoundingClientRect(),\n winY = window.pageYOffset,\n winX = window.pageXOffset;\n\n return {\n width: rect.width,\n height: rect.height,\n offset: {\n top: rect.top + winY,\n left: rect.left + winX\n },\n parentDims: {\n width: parRect.width,\n height: parRect.height,\n offset: {\n top: parRect.top + winY,\n left: parRect.left + winX\n }\n },\n windowDims: {\n width: winRect.width,\n height: winRect.height,\n offset: {\n top: winY,\n left: winX\n }\n }\n }\n}\n\n/**\n * Returns an object of top and left integer pixel values for dynamically rendered elements,\n * such as: Tooltip, Reveal, and Dropdown. Maintained for backwards compatibility, and where\n * you don't know alignment, but generally from\n * 6.4 forward you should use GetExplicitOffsets, as GetOffsets conflates position and alignment.\n * @function\n * @param {jQuery} element - jQuery object for the element being positioned.\n * @param {jQuery} anchor - jQuery object for the element's anchor point.\n * @param {String} position - a string relating to the desired position of the element, relative to it's anchor\n * @param {Number} vOffset - integer pixel value of desired vertical separation between anchor and element.\n * @param {Number} hOffset - integer pixel value of desired horizontal separation between anchor and element.\n * @param {Boolean} isOverflow - if a collision event is detected, sets to true to default the element to full width - any desired offset.\n * TODO alter/rewrite to work with `em` values as well/instead of pixels\n */\nfunction GetExplicitOffsets(element, anchor, position, alignment, vOffset, hOffset, isOverflow) {\n var $eleDims = GetDimensions(element),\n $anchorDims = anchor ? GetDimensions(anchor) : null;\n\n var topVal, leftVal;\n\n if ($anchorDims !== null) {\n // set position related attribute\n switch (position) {\n case 'top':\n topVal = $anchorDims.offset.top - ($eleDims.height + vOffset);\n break;\n case 'bottom':\n topVal = $anchorDims.offset.top + $anchorDims.height + vOffset;\n break;\n case 'left':\n leftVal = $anchorDims.offset.left - ($eleDims.width + hOffset);\n break;\n case 'right':\n leftVal = $anchorDims.offset.left + $anchorDims.width + hOffset;\n break;\n }\n\n // set alignment related attribute\n switch (position) {\n case 'top':\n case 'bottom':\n switch (alignment) {\n case 'left':\n leftVal = $anchorDims.offset.left + hOffset;\n break;\n case 'right':\n leftVal = $anchorDims.offset.left - $eleDims.width + $anchorDims.width - hOffset;\n break;\n case 'center':\n leftVal = isOverflow ? hOffset : (($anchorDims.offset.left + ($anchorDims.width / 2)) - ($eleDims.width / 2)) + hOffset;\n break;\n }\n break;\n case 'right':\n case 'left':\n switch (alignment) {\n case 'bottom':\n topVal = $anchorDims.offset.top - vOffset + $anchorDims.height - $eleDims.height;\n break;\n case 'top':\n topVal = $anchorDims.offset.top + vOffset\n break;\n case 'center':\n topVal = ($anchorDims.offset.top + vOffset + ($anchorDims.height / 2)) - ($eleDims.height / 2)\n break;\n }\n break;\n }\n }\n\n return {top: topVal, left: leftVal};\n}\n\nexport {Box};\n","import { Box } from './foundation.util.box';\nimport { Plugin } from './foundation.core.plugin';\nimport { rtl as Rtl } from './foundation.core.utils';\n\nconst POSITIONS = ['left', 'right', 'top', 'bottom'];\nconst VERTICAL_ALIGNMENTS = ['top', 'bottom', 'center'];\nconst HORIZONTAL_ALIGNMENTS = ['left', 'right', 'center'];\n\nconst ALIGNMENTS = {\n 'left': VERTICAL_ALIGNMENTS,\n 'right': VERTICAL_ALIGNMENTS,\n 'top': HORIZONTAL_ALIGNMENTS,\n 'bottom': HORIZONTAL_ALIGNMENTS\n}\n\nfunction nextItem(item, array) {\n var currentIdx = array.indexOf(item);\n if(currentIdx === array.length - 1) {\n return array[0];\n } else {\n return array[currentIdx + 1];\n }\n}\n\n\nclass Positionable extends Plugin {\n /**\n * Abstract class encapsulating the tether-like explicit positioning logic\n * including repositioning based on overlap.\n * Expects classes to define defaults for vOffset, hOffset, position,\n * alignment, allowOverlap, and allowBottomOverlap. They can do this by\n * extending the defaults, or (for now recommended due to the way docs are\n * generated) by explicitly declaring them.\n *\n **/\n\n _init() {\n this.triedPositions = {};\n this.position = this.options.position === 'auto' ? this._getDefaultPosition() : this.options.position;\n this.alignment = this.options.alignment === 'auto' ? this._getDefaultAlignment() : this.options.alignment;\n this.originalPosition = this.position;\n this.originalAlignment = this.alignment;\n }\n\n _getDefaultPosition () {\n return 'bottom';\n }\n\n _getDefaultAlignment() {\n switch(this.position) {\n case 'bottom':\n case 'top':\n return Rtl() ? 'right' : 'left';\n case 'left':\n case 'right':\n return 'bottom';\n }\n }\n\n /**\n * Adjusts the positionable possible positions by iterating through alignments\n * and positions.\n * @function\n * @private\n */\n _reposition() {\n if(this._alignmentsExhausted(this.position)) {\n this.position = nextItem(this.position, POSITIONS);\n this.alignment = ALIGNMENTS[this.position][0];\n } else {\n this._realign();\n }\n }\n\n /**\n * Adjusts the dropdown pane possible positions by iterating through alignments\n * on the current position.\n * @function\n * @private\n */\n _realign() {\n this._addTriedPosition(this.position, this.alignment)\n this.alignment = nextItem(this.alignment, ALIGNMENTS[this.position])\n }\n\n _addTriedPosition(position, alignment) {\n this.triedPositions[position] = this.triedPositions[position] || []\n this.triedPositions[position].push(alignment);\n }\n\n _positionsExhausted() {\n var isExhausted = true;\n for(var i = 0; i < POSITIONS.length; i++) {\n isExhausted = isExhausted && this._alignmentsExhausted(POSITIONS[i]);\n }\n return isExhausted;\n }\n\n _alignmentsExhausted(position) {\n return this.triedPositions[position] && this.triedPositions[position].length === ALIGNMENTS[position].length;\n }\n\n\n // When we're trying to center, we don't want to apply offset that's going to\n // take us just off center, so wrap around to return 0 for the appropriate\n // offset in those alignments. TODO: Figure out if we want to make this\n // configurable behavior... it feels more intuitive, especially for tooltips, but\n // it's possible someone might actually want to start from center and then nudge\n // slightly off.\n _getVOffset() {\n return this.options.vOffset;\n }\n\n _getHOffset() {\n return this.options.hOffset;\n }\n\n _setPosition($anchor, $element, $parent) {\n if($anchor.attr('aria-expanded') === 'false'){ return false; }\n\n if (!this.options.allowOverlap) {\n // restore original position & alignment before checking overlap\n this.position = this.originalPosition;\n this.alignment = this.originalAlignment;\n }\n\n $element.offset(Box.GetExplicitOffsets($element, $anchor, this.position, this.alignment, this._getVOffset(), this._getHOffset()));\n\n if(!this.options.allowOverlap) {\n var minOverlap = 100000000;\n // default coordinates to how we start, in case we can't figure out better\n var minCoordinates = {position: this.position, alignment: this.alignment};\n while(!this._positionsExhausted()) {\n let overlap = Box.OverlapArea($element, $parent, false, false, this.options.allowBottomOverlap);\n if(overlap === 0) {\n return;\n }\n\n if(overlap < minOverlap) {\n minOverlap = overlap;\n minCoordinates = {position: this.position, alignment: this.alignment};\n }\n\n this._reposition();\n\n $element.offset(Box.GetExplicitOffsets($element, $anchor, this.position, this.alignment, this._getVOffset(), this._getHOffset()));\n }\n // If we get through the entire loop, there was no non-overlapping\n // position available. Pick the version with least overlap.\n this.position = minCoordinates.position;\n this.alignment = minCoordinates.alignment;\n $element.offset(Box.GetExplicitOffsets($element, $anchor, this.position, this.alignment, this._getVOffset(), this._getHOffset()));\n }\n }\n\n}\n\nPositionable.defaults = {\n /**\n * Position of positionable relative to anchor. Can be left, right, bottom, top, or auto.\n * @option\n * @type {string}\n * @default 'auto'\n */\n position: 'auto',\n /**\n * Alignment of positionable relative to anchor. Can be left, right, bottom, top, center, or auto.\n * @option\n * @type {string}\n * @default 'auto'\n */\n alignment: 'auto',\n /**\n * Allow overlap of container/window. If false, dropdown positionable first\n * try to position as defined by data-position and data-alignment, but\n * reposition if it would cause an overflow.\n * @option\n * @type {boolean}\n * @default false\n */\n allowOverlap: false,\n /**\n * Allow overlap of only the bottom of the container. This is the most common\n * behavior for dropdowns, allowing the dropdown to extend the bottom of the\n * screen but not otherwise influence or break out of the container.\n * @option\n * @type {boolean}\n * @default true\n */\n allowBottomOverlap: true,\n /**\n * Number of pixels the positionable should be separated vertically from anchor\n * @option\n * @type {number}\n * @default 0\n */\n vOffset: 0,\n /**\n * Number of pixels the positionable should be separated horizontally from anchor\n * @option\n * @type {number}\n * @default 0\n */\n hOffset: 0,\n}\n\nexport {Positionable};\n","import $ from 'jquery';\nimport { transitionend } from './foundation.core.utils';\n\n/**\n * Motion module.\n * @module foundation.motion\n */\n\nconst initClasses = ['mui-enter', 'mui-leave'];\nconst activeClasses = ['mui-enter-active', 'mui-leave-active'];\n\nconst Motion = {\n animateIn: function(element, animation, cb) {\n animate(true, element, animation, cb);\n },\n\n animateOut: function(element, animation, cb) {\n animate(false, element, animation, cb);\n }\n}\n\nfunction Move(duration, elem, fn){\n var anim, prog, start = null;\n\n if (duration === 0) {\n fn.apply(elem);\n elem.trigger('finished.zf.animate', [elem]).triggerHandler('finished.zf.animate', [elem]);\n return;\n }\n\n function move(ts){\n if(!start) start = ts;\n prog = ts - start;\n fn.apply(elem);\n\n if(prog < duration){ anim = window.requestAnimationFrame(move, elem); }\n else{\n window.cancelAnimationFrame(anim);\n elem.trigger('finished.zf.animate', [elem]).triggerHandler('finished.zf.animate', [elem]);\n }\n }\n anim = window.requestAnimationFrame(move);\n}\n\n/**\n * Animates an element in or out using a CSS transition class.\n * @function\n * @private\n * @param {Boolean} isIn - Defines if the animation is in or out.\n * @param {Object} element - jQuery or HTML object to animate.\n * @param {String} animation - CSS class to use.\n * @param {Function} cb - Callback to run when animation is finished.\n */\nfunction animate(isIn, element, animation, cb) {\n element = $(element).eq(0);\n\n if (!element.length) return;\n\n var initClass = isIn ? initClasses[0] : initClasses[1];\n var activeClass = isIn ? activeClasses[0] : activeClasses[1];\n\n // Set up the animation\n reset();\n\n element\n .addClass(animation)\n .css('transition', 'none');\n\n requestAnimationFrame(() => {\n element.addClass(initClass);\n if (isIn) element.show();\n });\n\n // Start the animation\n requestAnimationFrame(() => {\n // will trigger the browser to synchronously calculate the style and layout\n // also called reflow or layout thrashing\n // see https://gist.github.com/paulirish/5d52fb081b3570c81e3a\n element[0].offsetWidth;\n element\n .css('transition', '')\n .addClass(activeClass);\n });\n\n // Clean up the animation when it finishes\n element.one(transitionend(element), finish);\n\n // Hides the element (for out animations), resets the element, and runs a callback\n function finish() {\n if (!isIn) element.hide();\n reset();\n if (cb) cb.apply(element);\n }\n\n // Resets transitions and removes motion-specific classes\n function reset() {\n element[0].style.transitionDuration = 0;\n element.removeClass(`${initClass} ${activeClass} ${animation}`);\n }\n}\n\nexport { Move, Motion };\n\n","import $ from 'jquery';\nimport { onLoad } from './foundation.core.utils';\nimport { Motion } from './foundation.util.motion';\n\nconst MutationObserver = (function () {\n var prefixes = ['WebKit', 'Moz', 'O', 'Ms', ''];\n for (var i=0; i < prefixes.length; i++) {\n if (`${prefixes[i]}MutationObserver` in window) {\n return window[`${prefixes[i]}MutationObserver`];\n }\n }\n return false;\n})();\n\nconst triggers = (el, type) => {\n el.data(type).split(' ').forEach(id => {\n $(`#${id}`)[ type === 'close' ? 'trigger' : 'triggerHandler'](`${type}.zf.trigger`, [el]);\n });\n};\n\nvar Triggers = {\n Listeners: {\n Basic: {},\n Global: {}\n },\n Initializers: {}\n}\n\nTriggers.Listeners.Basic = {\n openListener: function() {\n triggers($(this), 'open');\n },\n closeListener: function() {\n let id = $(this).data('close');\n if (id) {\n triggers($(this), 'close');\n }\n else {\n $(this).trigger('close.zf.trigger');\n }\n },\n toggleListener: function() {\n let id = $(this).data('toggle');\n if (id) {\n triggers($(this), 'toggle');\n } else {\n $(this).trigger('toggle.zf.trigger');\n }\n },\n closeableListener: function(e) {\n let animation = $(this).data('closable');\n\n // Only close the first closable element. See https://git.io/zf-7833\n e.stopPropagation();\n\n if(animation !== ''){\n Motion.animateOut($(this), animation, function() {\n $(this).trigger('closed.zf');\n });\n }else{\n $(this).fadeOut().trigger('closed.zf');\n }\n },\n toggleFocusListener: function() {\n let id = $(this).data('toggle-focus');\n $(`#${id}`).triggerHandler('toggle.zf.trigger', [$(this)]);\n }\n};\n\n// Elements with [data-open] will reveal a plugin that supports it when clicked.\nTriggers.Initializers.addOpenListener = ($elem) => {\n $elem.off('click.zf.trigger', Triggers.Listeners.Basic.openListener);\n $elem.on('click.zf.trigger', '[data-open]', Triggers.Listeners.Basic.openListener);\n}\n\n// Elements with [data-close] will close a plugin that supports it when clicked.\n// If used without a value on [data-close], the event will bubble, allowing it to close a parent component.\nTriggers.Initializers.addCloseListener = ($elem) => {\n $elem.off('click.zf.trigger', Triggers.Listeners.Basic.closeListener);\n $elem.on('click.zf.trigger', '[data-close]', Triggers.Listeners.Basic.closeListener);\n}\n\n// Elements with [data-toggle] will toggle a plugin that supports it when clicked.\nTriggers.Initializers.addToggleListener = ($elem) => {\n $elem.off('click.zf.trigger', Triggers.Listeners.Basic.toggleListener);\n $elem.on('click.zf.trigger', '[data-toggle]', Triggers.Listeners.Basic.toggleListener);\n}\n\n// Elements with [data-closable] will respond to close.zf.trigger events.\nTriggers.Initializers.addCloseableListener = ($elem) => {\n $elem.off('close.zf.trigger', Triggers.Listeners.Basic.closeableListener);\n $elem.on('close.zf.trigger', '[data-closeable], [data-closable]', Triggers.Listeners.Basic.closeableListener);\n}\n\n// Elements with [data-toggle-focus] will respond to coming in and out of focus\nTriggers.Initializers.addToggleFocusListener = ($elem) => {\n $elem.off('focus.zf.trigger blur.zf.trigger', Triggers.Listeners.Basic.toggleFocusListener);\n $elem.on('focus.zf.trigger blur.zf.trigger', '[data-toggle-focus]', Triggers.Listeners.Basic.toggleFocusListener);\n}\n\n\n\n// More Global/complex listeners and triggers\nTriggers.Listeners.Global = {\n resizeListener: function($nodes) {\n if(!MutationObserver){//fallback for IE 9\n $nodes.each(function(){\n $(this).triggerHandler('resizeme.zf.trigger');\n });\n }\n //trigger all listening elements and signal a resize event\n $nodes.attr('data-events', \"resize\");\n },\n scrollListener: function($nodes) {\n if(!MutationObserver){//fallback for IE 9\n $nodes.each(function(){\n $(this).triggerHandler('scrollme.zf.trigger');\n });\n }\n //trigger all listening elements and signal a scroll event\n $nodes.attr('data-events', \"scroll\");\n },\n closeMeListener: function(e, pluginId){\n let plugin = e.namespace.split('.')[0];\n let plugins = $(`[data-${plugin}]`).not(`[data-yeti-box=\"${pluginId}\"]`);\n\n plugins.each(function(){\n let _this = $(this);\n _this.triggerHandler('close.zf.trigger', [_this]);\n });\n }\n}\n\n// Global, parses whole document.\nTriggers.Initializers.addClosemeListener = function(pluginName) {\n var yetiBoxes = $('[data-yeti-box]'),\n plugNames = ['dropdown', 'tooltip', 'reveal'];\n\n if(pluginName){\n if(typeof pluginName === 'string'){\n plugNames.push(pluginName);\n }else if(typeof pluginName === 'object' && typeof pluginName[0] === 'string'){\n plugNames = plugNames.concat(pluginName);\n }else{\n console.error('Plugin names must be strings');\n }\n }\n if(yetiBoxes.length){\n let listeners = plugNames.map((name) => {\n return `closeme.zf.${name}`;\n }).join(' ');\n\n $(window).off(listeners).on(listeners, Triggers.Listeners.Global.closeMeListener);\n }\n}\n\nfunction debounceGlobalListener(debounce, trigger, listener) {\n let timer, args = Array.prototype.slice.call(arguments, 3);\n $(window).on(trigger, function() {\n if (timer) { clearTimeout(timer); }\n timer = setTimeout(function(){\n listener.apply(null, args);\n }, debounce || 10); //default time to emit scroll event\n });\n}\n\nTriggers.Initializers.addResizeListener = function(debounce){\n let $nodes = $('[data-resize]');\n if($nodes.length){\n debounceGlobalListener(debounce, 'resize.zf.trigger', Triggers.Listeners.Global.resizeListener, $nodes);\n }\n}\n\nTriggers.Initializers.addScrollListener = function(debounce){\n let $nodes = $('[data-scroll]');\n if($nodes.length){\n debounceGlobalListener(debounce, 'scroll.zf.trigger', Triggers.Listeners.Global.scrollListener, $nodes);\n }\n}\n\nTriggers.Initializers.addMutationEventsListener = function($elem) {\n if(!MutationObserver){ return false; }\n let $nodes = $elem.find('[data-resize], [data-scroll], [data-mutate]');\n\n //element callback\n var listeningElementsMutation = function (mutationRecordsList) {\n var $target = $(mutationRecordsList[0].target);\n\n //trigger the event handler for the element depending on type\n switch (mutationRecordsList[0].type) {\n case \"attributes\":\n if ($target.attr(\"data-events\") === \"scroll\" && mutationRecordsList[0].attributeName === \"data-events\") {\n $target.triggerHandler('scrollme.zf.trigger', [$target, window.pageYOffset]);\n }\n if ($target.attr(\"data-events\") === \"resize\" && mutationRecordsList[0].attributeName === \"data-events\") {\n $target.triggerHandler('resizeme.zf.trigger', [$target]);\n }\n if (mutationRecordsList[0].attributeName === \"style\") {\n $target.closest(\"[data-mutate]\").attr(\"data-events\",\"mutate\");\n $target.closest(\"[data-mutate]\").triggerHandler('mutateme.zf.trigger', [$target.closest(\"[data-mutate]\")]);\n }\n break;\n\n case \"childList\":\n $target.closest(\"[data-mutate]\").attr(\"data-events\",\"mutate\");\n $target.closest(\"[data-mutate]\").triggerHandler('mutateme.zf.trigger', [$target.closest(\"[data-mutate]\")]);\n break;\n\n default:\n return false;\n //nothing\n }\n };\n\n if ($nodes.length) {\n //for each element that needs to listen for resizing, scrolling, or mutation add a single observer\n for (var i = 0; i <= $nodes.length - 1; i++) {\n var elementObserver = new MutationObserver(listeningElementsMutation);\n elementObserver.observe($nodes[i], { attributes: true, childList: true, characterData: false, subtree: true, attributeFilter: [\"data-events\", \"style\"] });\n }\n }\n}\n\nTriggers.Initializers.addSimpleListeners = function() {\n let $document = $(document);\n\n Triggers.Initializers.addOpenListener($document);\n Triggers.Initializers.addCloseListener($document);\n Triggers.Initializers.addToggleListener($document);\n Triggers.Initializers.addCloseableListener($document);\n Triggers.Initializers.addToggleFocusListener($document);\n\n}\n\nTriggers.Initializers.addGlobalListeners = function() {\n let $document = $(document);\n Triggers.Initializers.addMutationEventsListener($document);\n Triggers.Initializers.addResizeListener(250);\n Triggers.Initializers.addScrollListener();\n Triggers.Initializers.addClosemeListener();\n}\n\n\nTriggers.init = function (__, Foundation) {\n onLoad($(window), function () {\n if ($.triggersInitialized !== true) {\n Triggers.Initializers.addSimpleListeners();\n Triggers.Initializers.addGlobalListeners();\n $.triggersInitialized = true;\n }\n });\n\n if(Foundation) {\n Foundation.Triggers = Triggers;\n // Legacy included to be backwards compatible for now.\n Foundation.IHearYou = Triggers.Initializers.addGlobalListeners\n }\n}\n\nexport {Triggers};\n","//**************************************************\n//**Work inspired by multiple jquery swipe plugins**\n//**Done by Yohai Ararat ***************************\n//**************************************************\n\nimport $ from 'jquery';\n\nvar Touch = {};\n\nvar startPosX,\n startTime,\n elapsedTime,\n startEvent,\n isMoving = false,\n didMoved = false;\n\nfunction onTouchEnd(e) {\n this.removeEventListener('touchmove', onTouchMove);\n this.removeEventListener('touchend', onTouchEnd);\n\n // If the touch did not move, consider it as a \"tap\"\n if (!didMoved) {\n var tapEvent = $.Event('tap', startEvent || e);\n $(this).trigger(tapEvent);\n }\n\n startEvent = null;\n isMoving = false;\n didMoved = false;\n}\n\nfunction onTouchMove(e) {\n if (true === $.spotSwipe.preventDefault) { e.preventDefault(); }\n\n if(isMoving) {\n var x = e.touches[0].pageX;\n // var y = e.touches[0].pageY;\n var dx = startPosX - x;\n // var dy = startPosY - y;\n var dir;\n didMoved = true;\n elapsedTime = new Date().getTime() - startTime;\n if(Math.abs(dx) >= $.spotSwipe.moveThreshold && elapsedTime <= $.spotSwipe.timeThreshold) {\n dir = dx > 0 ? 'left' : 'right';\n }\n // else if(Math.abs(dy) >= $.spotSwipe.moveThreshold && elapsedTime <= $.spotSwipe.timeThreshold) {\n // dir = dy > 0 ? 'down' : 'up';\n // }\n if(dir) {\n e.preventDefault();\n onTouchEnd.apply(this, arguments);\n $(this)\n .trigger($.Event('swipe', Object.assign({}, e)), dir)\n .trigger($.Event(`swipe${dir}`, Object.assign({}, e)));\n }\n }\n\n}\n\nfunction onTouchStart(e) {\n\n if (e.touches.length === 1) {\n startPosX = e.touches[0].pageX;\n startEvent = e;\n isMoving = true;\n didMoved = false;\n startTime = new Date().getTime();\n this.addEventListener('touchmove', onTouchMove, { passive : true === $.spotSwipe.preventDefault });\n this.addEventListener('touchend', onTouchEnd, false);\n }\n}\n\nfunction init() {\n this.addEventListener && this.addEventListener('touchstart', onTouchStart, { passive : true });\n}\n\n// function teardown() {\n// this.removeEventListener('touchstart', onTouchStart);\n// }\n\nclass SpotSwipe {\n constructor() {\n this.version = '1.0.0';\n this.enabled = 'ontouchstart' in document.documentElement;\n this.preventDefault = false;\n this.moveThreshold = 75;\n this.timeThreshold = 200;\n this._init();\n }\n\n _init() {\n $.event.special.swipe = { setup: init };\n $.event.special.tap = { setup: init };\n\n $.each(['left', 'up', 'down', 'right'], function () {\n $.event.special[`swipe${this}`] = { setup: function(){\n $(this).on('swipe', $.noop);\n } };\n });\n }\n}\n\n/****************************************************\n * As far as I can tell, both setupSpotSwipe and *\n * setupTouchHandler should be idempotent, *\n * because they directly replace functions & *\n * values, and do not add event handlers directly. *\n ****************************************************/\n\nTouch.setupSpotSwipe = function() {\n $.spotSwipe = new SpotSwipe($);\n};\n\n/****************************************************\n * Method for adding pseudo drag events to elements *\n ***************************************************/\nTouch.setupTouchHandler = function() {\n $.fn.addTouch = function(){\n this.each(function(i, el){\n $(el).bind('touchstart touchmove touchend touchcancel', function(event) {\n //we pass the original event object because the jQuery event\n //object is normalized to w3c specs and does not provide the TouchList\n handleTouch(event);\n });\n });\n\n var handleTouch = function(event) {\n var touches = event.changedTouches,\n first = touches[0],\n eventTypes = {\n touchstart: 'mousedown',\n touchmove: 'mousemove',\n touchend: 'mouseup'\n },\n type = eventTypes[event.type],\n simulatedEvent\n ;\n\n if('MouseEvent' in window && typeof window.MouseEvent === 'function') {\n simulatedEvent = new window.MouseEvent(type, {\n 'bubbles': true,\n 'cancelable': true,\n 'screenX': first.screenX,\n 'screenY': first.screenY,\n 'clientX': first.clientX,\n 'clientY': first.clientY\n });\n } else {\n simulatedEvent = document.createEvent('MouseEvent');\n simulatedEvent.initMouseEvent(type, true, true, window, 1, first.screenX, first.screenY, first.clientX, first.clientY, false, false, false, false, 0/*left*/, null);\n }\n first.target.dispatchEvent(simulatedEvent);\n };\n };\n};\n\nTouch.init = function () {\n if(typeof($.spotSwipe) === 'undefined') {\n Touch.setupSpotSwipe($);\n Touch.setupTouchHandler($);\n }\n};\n\nexport {Touch};\n","import $ from 'jquery';\nimport { Keyboard } from './foundation.util.keyboard';\nimport { GetYoDigits, ignoreMousedisappear } from './foundation.core.utils';\nimport { Positionable } from './foundation.positionable';\n\nimport { Triggers } from './foundation.util.triggers';\nimport { Touch } from './foundation.util.touch'\n\n/**\n * Dropdown module.\n * @module foundation.dropdown\n * @requires foundation.util.keyboard\n * @requires foundation.util.box\n * @requires foundation.util.touch\n * @requires foundation.util.triggers\n */\nclass Dropdown extends Positionable {\n /**\n * Creates a new instance of a dropdown.\n * @class\n * @name Dropdown\n * @param {jQuery} element - jQuery object to make into a dropdown.\n * Object should be of the dropdown panel, rather than its anchor.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, Dropdown.defaults, this.$element.data(), options);\n this.className = 'Dropdown'; // ie9 back compat\n\n // Touch and Triggers init are idempotent, just need to make sure they are initialized\n Touch.init($);\n Triggers.init($);\n\n this._init();\n\n Keyboard.register('Dropdown', {\n 'ENTER': 'toggle',\n 'SPACE': 'toggle',\n 'ESCAPE': 'close'\n });\n }\n\n /**\n * Initializes the plugin by setting/checking options and attributes, adding helper variables, and saving the anchor.\n * @function\n * @private\n */\n _init() {\n var $id = this.$element.attr('id');\n\n this.$anchors = $(`[data-toggle=\"${$id}\"]`).length ? $(`[data-toggle=\"${$id}\"]`) : $(`[data-open=\"${$id}\"]`);\n this.$anchors.attr({\n 'aria-controls': $id,\n 'data-is-focus': false,\n 'data-yeti-box': $id,\n 'aria-haspopup': true,\n 'aria-expanded': false\n });\n\n this._setCurrentAnchor(this.$anchors.first());\n\n if(this.options.parentClass){\n this.$parent = this.$element.parents('.' + this.options.parentClass);\n }else{\n this.$parent = null;\n }\n\n // Set [aria-labelledby] on the Dropdown if it is not set\n if (typeof this.$element.attr('aria-labelledby') === 'undefined') {\n // Get the anchor ID or create one\n if (typeof this.$currentAnchor.attr('id') === 'undefined') {\n this.$currentAnchor.attr('id', GetYoDigits(6, 'dd-anchor'));\n }\n\n this.$element.attr('aria-labelledby', this.$currentAnchor.attr('id'));\n }\n\n this.$element.attr({\n 'aria-hidden': 'true',\n 'data-yeti-box': $id,\n 'data-resize': $id,\n });\n\n super._init();\n this._events();\n }\n\n _getDefaultPosition() {\n // handle legacy classnames\n var position = this.$element[0].className.match(/(top|left|right|bottom)/g);\n if(position) {\n return position[0];\n } else {\n return 'bottom'\n }\n }\n\n _getDefaultAlignment() {\n // handle legacy float approach\n var horizontalPosition = /float-(\\S+)/.exec(this.$currentAnchor.attr('class'));\n if(horizontalPosition) {\n return horizontalPosition[1];\n }\n\n return super._getDefaultAlignment();\n }\n\n\n\n /**\n * Sets the position and orientation of the dropdown pane, checks for collisions if allow-overlap is not true.\n * Recursively calls itself if a collision is detected, with a new position class.\n * @function\n * @private\n */\n _setPosition() {\n this.$element.removeClass(`has-position-${this.position} has-alignment-${this.alignment}`);\n super._setPosition(this.$currentAnchor, this.$element, this.$parent);\n this.$element.addClass(`has-position-${this.position} has-alignment-${this.alignment}`);\n }\n\n /**\n * Make it a current anchor.\n * Current anchor as the reference for the position of Dropdown panes.\n * @param {HTML} el - DOM element of the anchor.\n * @function\n * @private\n */\n _setCurrentAnchor(el) {\n this.$currentAnchor = $(el);\n }\n\n /**\n * Adds event listeners to the element utilizing the triggers utility library.\n * @function\n * @private\n */\n _events() {\n var _this = this,\n hasTouch = 'ontouchstart' in window || (typeof window.ontouchstart !== 'undefined');\n\n this.$element.on({\n 'open.zf.trigger': this.open.bind(this),\n 'close.zf.trigger': this.close.bind(this),\n 'toggle.zf.trigger': this.toggle.bind(this),\n 'resizeme.zf.trigger': this._setPosition.bind(this)\n });\n\n this.$anchors.off('click.zf.trigger')\n .on('click.zf.trigger', function(e) {\n _this._setCurrentAnchor(this);\n\n if (\n // if forceFollow false, always prevent default action\n (_this.options.forceFollow === false) ||\n // if forceFollow true and hover option true, only prevent default action on 1st click\n // on 2nd click (dropown opened) the default action (e.g. follow a href) gets executed\n (hasTouch && _this.options.hover && _this.$element.hasClass('is-open') === false)\n ) {\n e.preventDefault();\n }\n });\n\n if(this.options.hover){\n this.$anchors.off('mouseenter.zf.dropdown mouseleave.zf.dropdown')\n .on('mouseenter.zf.dropdown', function(){\n _this._setCurrentAnchor(this);\n\n var bodyData = $('body').data();\n if(typeof(bodyData.whatinput) === 'undefined' || bodyData.whatinput === 'mouse') {\n clearTimeout(_this.timeout);\n _this.timeout = setTimeout(function(){\n _this.open();\n _this.$anchors.data('hover', true);\n }, _this.options.hoverDelay);\n }\n }).on('mouseleave.zf.dropdown', ignoreMousedisappear(function(){\n clearTimeout(_this.timeout);\n _this.timeout = setTimeout(function(){\n _this.close();\n _this.$anchors.data('hover', false);\n }, _this.options.hoverDelay);\n }));\n if(this.options.hoverPane){\n this.$element.off('mouseenter.zf.dropdown mouseleave.zf.dropdown')\n .on('mouseenter.zf.dropdown', function(){\n clearTimeout(_this.timeout);\n }).on('mouseleave.zf.dropdown', ignoreMousedisappear(function(){\n clearTimeout(_this.timeout);\n _this.timeout = setTimeout(function(){\n _this.close();\n _this.$anchors.data('hover', false);\n }, _this.options.hoverDelay);\n }));\n }\n }\n this.$anchors.add(this.$element).on('keydown.zf.dropdown', function(e) {\n\n var $target = $(this);\n\n Keyboard.handleKey(e, 'Dropdown', {\n open: function() {\n if ($target.is(_this.$anchors) && !$target.is('input, textarea')) {\n _this.open();\n _this.$element.attr('tabindex', -1).focus();\n e.preventDefault();\n }\n },\n close: function() {\n _this.close();\n _this.$anchors.focus();\n }\n });\n });\n }\n\n /**\n * Adds an event handler to the body to close any dropdowns on a click.\n * @function\n * @private\n */\n _addBodyHandler() {\n var $body = $(document.body).not(this.$element),\n _this = this;\n $body.off('click.zf.dropdown tap.zf.dropdown')\n .on('click.zf.dropdown tap.zf.dropdown', function (e) {\n if(_this.$anchors.is(e.target) || _this.$anchors.find(e.target).length) {\n return;\n }\n if(_this.$element.is(e.target) || _this.$element.find(e.target).length) {\n return;\n }\n _this.close();\n $body.off('click.zf.dropdown tap.zf.dropdown');\n });\n }\n\n /**\n * Opens the dropdown pane, and fires a bubbling event to close other dropdowns.\n * @function\n * @fires Dropdown#closeme\n * @fires Dropdown#show\n */\n open() {\n // var _this = this;\n /**\n * Fires to close other open dropdowns, typically when dropdown is opening\n * @event Dropdown#closeme\n */\n this.$element.trigger('closeme.zf.dropdown', this.$element.attr('id'));\n this.$anchors.addClass('hover')\n .attr({'aria-expanded': true});\n // this.$element/*.show()*/;\n\n this.$element.addClass('is-opening');\n this._setPosition();\n this.$element.removeClass('is-opening').addClass('is-open')\n .attr({'aria-hidden': false});\n\n if(this.options.autoFocus){\n var $focusable = Keyboard.findFocusable(this.$element);\n if($focusable.length){\n $focusable.eq(0).focus();\n }\n }\n\n if(this.options.closeOnClick){ this._addBodyHandler(); }\n\n if (this.options.trapFocus) {\n Keyboard.trapFocus(this.$element);\n }\n\n /**\n * Fires once the dropdown is visible.\n * @event Dropdown#show\n */\n this.$element.trigger('show.zf.dropdown', [this.$element]);\n }\n\n /**\n * Closes the open dropdown pane.\n * @function\n * @fires Dropdown#hide\n */\n close() {\n if(!this.$element.hasClass('is-open')){\n return false;\n }\n this.$element.removeClass('is-open')\n .attr({'aria-hidden': true});\n\n this.$anchors.removeClass('hover')\n .attr('aria-expanded', false);\n\n /**\n * Fires once the dropdown is no longer visible.\n * @event Dropdown#hide\n */\n this.$element.trigger('hide.zf.dropdown', [this.$element]);\n\n if (this.options.trapFocus) {\n Keyboard.releaseFocus(this.$element);\n }\n }\n\n /**\n * Toggles the dropdown pane's visibility.\n * @function\n */\n toggle() {\n if(this.$element.hasClass('is-open')){\n if(this.$anchors.data('hover')) return;\n this.close();\n }else{\n this.open();\n }\n }\n\n /**\n * Destroys the dropdown.\n * @function\n */\n _destroy() {\n this.$element.off('.zf.trigger').hide();\n this.$anchors.off('.zf.dropdown');\n $(document.body).off('click.zf.dropdown tap.zf.dropdown');\n\n }\n}\n\nDropdown.defaults = {\n /**\n * Class that designates bounding container of Dropdown (default: window)\n * @option\n * @type {?string}\n * @default null\n */\n parentClass: null,\n /**\n * Amount of time to delay opening a submenu on hover event.\n * @option\n * @type {number}\n * @default 250\n */\n hoverDelay: 250,\n /**\n * Allow submenus to open on hover events\n * @option\n * @type {boolean}\n * @default false\n */\n hover: false,\n /**\n * Don't close dropdown when hovering over dropdown pane\n * @option\n * @type {boolean}\n * @default false\n */\n hoverPane: false,\n /**\n * Number of pixels between the dropdown pane and the triggering element on open.\n * @option\n * @type {number}\n * @default 0\n */\n vOffset: 0,\n /**\n * Number of pixels between the dropdown pane and the triggering element on open.\n * @option\n * @type {number}\n * @default 0\n */\n hOffset: 0,\n /**\n * Position of dropdown. Can be left, right, bottom, top, or auto.\n * @option\n * @type {string}\n * @default 'auto'\n */\n position: 'auto',\n /**\n * Alignment of dropdown relative to anchor. Can be left, right, bottom, top, center, or auto.\n * @option\n * @type {string}\n * @default 'auto'\n */\n alignment: 'auto',\n /**\n * Allow overlap of container/window. If false, dropdown will first try to position as defined by data-position and data-alignment, but reposition if it would cause an overflow.\n * @option\n * @type {boolean}\n * @default false\n */\n allowOverlap: false,\n /**\n * Allow overlap of only the bottom of the container. This is the most common\n * behavior for dropdowns, allowing the dropdown to extend the bottom of the\n * screen but not otherwise influence or break out of the container.\n * @option\n * @type {boolean}\n * @default true\n */\n allowBottomOverlap: true,\n /**\n * Allow the plugin to trap focus to the dropdown pane if opened with keyboard commands.\n * @option\n * @type {boolean}\n * @default false\n */\n trapFocus: false,\n /**\n * Allow the plugin to set focus to the first focusable element within the pane, regardless of method of opening.\n * @option\n * @type {boolean}\n * @default false\n */\n autoFocus: false,\n /**\n * Allows a click on the body to close the dropdown.\n * @option\n * @type {boolean}\n * @default false\n */\n closeOnClick: false,\n /**\n * If true the default action of the toggle (e.g. follow a link with href) gets executed on click. If hover option is also true the default action gets prevented on first click for mobile / touch devices and executed on second click.\n * @option\n * @type {boolean}\n * @default true\n */\n forceFollow: true\n};\n\nexport {Dropdown};\n","import $ from 'jquery';\nimport { Plugin } from './foundation.core.plugin';\nimport { rtl as Rtl, ignoreMousedisappear } from './foundation.core.utils';\nimport { Keyboard } from './foundation.util.keyboard';\nimport { Nest } from './foundation.util.nest';\nimport { Box } from './foundation.util.box';\nimport { Touch } from './foundation.util.touch'\n\n\n/**\n * DropdownMenu module.\n * @module foundation.dropdownMenu\n * @requires foundation.util.keyboard\n * @requires foundation.util.box\n * @requires foundation.util.nest\n * @requires foundation.util.touch\n */\n\nclass DropdownMenu extends Plugin {\n /**\n * Creates a new instance of DropdownMenu.\n * @class\n * @name DropdownMenu\n * @fires DropdownMenu#init\n * @param {jQuery} element - jQuery object to make into a dropdown menu.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, DropdownMenu.defaults, this.$element.data(), options);\n this.className = 'DropdownMenu'; // ie9 back compat\n\n Touch.init($); // Touch init is idempotent, we just need to make sure it's initialied.\n\n this._init();\n\n Keyboard.register('DropdownMenu', {\n 'ENTER': 'open',\n 'SPACE': 'open',\n 'ARROW_RIGHT': 'next',\n 'ARROW_UP': 'up',\n 'ARROW_DOWN': 'down',\n 'ARROW_LEFT': 'previous',\n 'ESCAPE': 'close'\n });\n }\n\n /**\n * Initializes the plugin, and calls _prepareMenu\n * @private\n * @function\n */\n _init() {\n Nest.Feather(this.$element, 'dropdown');\n\n var subs = this.$element.find('li.is-dropdown-submenu-parent');\n this.$element.children('.is-dropdown-submenu-parent').children('.is-dropdown-submenu').addClass('first-sub');\n\n this.$menuItems = this.$element.find('li[role=\"none\"]');\n this.$tabs = this.$element.children('li[role=\"none\"]');\n this.$tabs.find('ul.is-dropdown-submenu').addClass(this.options.verticalClass);\n\n if (this.options.alignment === 'auto') {\n if (this.$element.hasClass(this.options.rightClass) || Rtl() || this.$element.parents('.top-bar-right').is('*')) {\n this.options.alignment = 'right';\n subs.addClass('opens-left');\n } else {\n this.options.alignment = 'left';\n subs.addClass('opens-right');\n }\n } else {\n if (this.options.alignment === 'right') {\n subs.addClass('opens-left');\n } else {\n subs.addClass('opens-right');\n }\n }\n this.changed = false;\n this._events();\n };\n\n _isVertical() {\n return this.$tabs.css('display') === 'block' || this.$element.css('flex-direction') === 'column';\n }\n\n _isRtl() {\n return this.$element.hasClass('align-right') || (Rtl() && !this.$element.hasClass('align-left'));\n }\n\n /**\n * Adds event listeners to elements within the menu\n * @private\n * @function\n */\n _events() {\n var _this = this,\n hasTouch = 'ontouchstart' in window || (typeof window.ontouchstart !== 'undefined'),\n parClass = 'is-dropdown-submenu-parent';\n\n // used for onClick and in the keyboard handlers\n var handleClickFn = function(e) {\n var $elem = $(e.target).parentsUntil('ul', `.${parClass}`),\n hasSub = $elem.hasClass(parClass),\n hasClicked = $elem.attr('data-is-click') === 'true',\n $sub = $elem.children('.is-dropdown-submenu');\n\n if (hasSub) {\n if (hasClicked) {\n if (!_this.options.closeOnClick\n || (!_this.options.clickOpen && !hasTouch)\n || (_this.options.forceFollow && hasTouch)) {\n return;\n }\n e.stopImmediatePropagation();\n e.preventDefault();\n _this._hide($elem);\n }\n else {\n e.stopImmediatePropagation();\n e.preventDefault();\n _this._show($sub);\n $elem.add($elem.parentsUntil(_this.$element, `.${parClass}`)).attr('data-is-click', true);\n }\n }\n };\n\n if (this.options.clickOpen || hasTouch) {\n this.$menuItems.on('click.zf.dropdownMenu touchstart.zf.dropdownMenu', handleClickFn);\n }\n\n // Handle Leaf element Clicks\n if(_this.options.closeOnClickInside){\n this.$menuItems.on('click.zf.dropdownMenu', function() {\n var $elem = $(this),\n hasSub = $elem.hasClass(parClass);\n if(!hasSub){\n _this._hide();\n }\n });\n }\n\n if (hasTouch && this.options.disableHoverOnTouch) this.options.disableHover = true;\n\n if (!this.options.disableHover) {\n this.$menuItems.on('mouseenter.zf.dropdownMenu', function () {\n var $elem = $(this),\n hasSub = $elem.hasClass(parClass);\n\n if (hasSub) {\n clearTimeout($elem.data('_delay'));\n $elem.data('_delay', setTimeout(function () {\n _this._show($elem.children('.is-dropdown-submenu'));\n }, _this.options.hoverDelay));\n }\n }).on('mouseleave.zf.dropdownMenu', ignoreMousedisappear(function () {\n var $elem = $(this),\n hasSub = $elem.hasClass(parClass);\n if (hasSub && _this.options.autoclose) {\n if ($elem.attr('data-is-click') === 'true' && _this.options.clickOpen) { return false; }\n\n clearTimeout($elem.data('_delay'));\n $elem.data('_delay', setTimeout(function () {\n _this._hide($elem);\n }, _this.options.closingTime));\n }\n }));\n }\n this.$menuItems.on('keydown.zf.dropdownMenu', function(e) {\n var $element = $(e.target).parentsUntil('ul', '[role=\"none\"]'),\n isTab = _this.$tabs.index($element) > -1,\n $elements = isTab ? _this.$tabs : $element.siblings('li').add($element),\n $prevElement,\n $nextElement;\n\n $elements.each(function(i) {\n if ($(this).is($element)) {\n $prevElement = $elements.eq(i-1);\n $nextElement = $elements.eq(i+1);\n return;\n }\n });\n\n var nextSibling = function() {\n $nextElement.children('a:first').focus();\n e.preventDefault();\n }, prevSibling = function() {\n $prevElement.children('a:first').focus();\n e.preventDefault();\n }, openSub = function() {\n var $sub = $element.children('ul.is-dropdown-submenu');\n if ($sub.length) {\n _this._show($sub);\n $element.find('li > a:first').focus();\n e.preventDefault();\n } else { return; }\n }, closeSub = function() {\n //if ($element.is(':first-child')) {\n var close = $element.parent('ul').parent('li');\n close.children('a:first').focus();\n _this._hide(close);\n e.preventDefault();\n //}\n };\n var functions = {\n open: openSub,\n close: function() {\n _this._hide(_this.$element);\n _this.$menuItems.eq(0).children('a').focus(); // focus to first element\n e.preventDefault();\n }\n };\n\n if (isTab) {\n if (_this._isVertical()) { // vertical menu\n if (_this._isRtl()) { // right aligned\n $.extend(functions, {\n down: nextSibling,\n up: prevSibling,\n next: closeSub,\n previous: openSub\n });\n } else { // left aligned\n $.extend(functions, {\n down: nextSibling,\n up: prevSibling,\n next: openSub,\n previous: closeSub\n });\n }\n } else { // horizontal menu\n if (_this._isRtl()) { // right aligned\n $.extend(functions, {\n next: prevSibling,\n previous: nextSibling,\n down: openSub,\n up: closeSub\n });\n } else { // left aligned\n $.extend(functions, {\n next: nextSibling,\n previous: prevSibling,\n down: openSub,\n up: closeSub\n });\n }\n }\n } else { // not tabs -> one sub\n if (_this._isRtl()) { // right aligned\n $.extend(functions, {\n next: closeSub,\n previous: openSub,\n down: nextSibling,\n up: prevSibling\n });\n } else { // left aligned\n $.extend(functions, {\n next: openSub,\n previous: closeSub,\n down: nextSibling,\n up: prevSibling\n });\n }\n }\n Keyboard.handleKey(e, 'DropdownMenu', functions);\n\n });\n }\n\n /**\n * Adds an event handler to the body to close any dropdowns on a click.\n * @function\n * @private\n */\n _addBodyHandler() {\n const $body = $(document.body);\n this._removeBodyHandler();\n $body.on('click.zf.dropdownMenu tap.zf.dropdownMenu', (e) => {\n var isItself = !!$(e.target).closest(this.$element).length;\n if (isItself) return;\n\n this._hide();\n this._removeBodyHandler();\n });\n }\n\n /**\n * Remove the body event handler. See `_addBodyHandler`.\n * @function\n * @private\n */\n _removeBodyHandler() {\n $(document.body).off('click.zf.dropdownMenu tap.zf.dropdownMenu');\n }\n\n /**\n * Opens a dropdown pane, and checks for collisions first.\n * @param {jQuery} $sub - ul element that is a submenu to show\n * @function\n * @private\n * @fires DropdownMenu#show\n */\n _show($sub) {\n var idx = this.$tabs.index(this.$tabs.filter(function(i, el) {\n return $(el).find($sub).length > 0;\n }));\n var $sibs = $sub.parent('li.is-dropdown-submenu-parent').siblings('li.is-dropdown-submenu-parent');\n this._hide($sibs, idx);\n $sub.css('visibility', 'hidden').addClass('js-dropdown-active')\n .parent('li.is-dropdown-submenu-parent').addClass('is-active');\n var clear = Box.ImNotTouchingYou($sub, null, true);\n if (!clear) {\n var oldClass = this.options.alignment === 'left' ? '-right' : '-left',\n $parentLi = $sub.parent('.is-dropdown-submenu-parent');\n $parentLi.removeClass(`opens${oldClass}`).addClass(`opens-${this.options.alignment}`);\n clear = Box.ImNotTouchingYou($sub, null, true);\n if (!clear) {\n $parentLi.removeClass(`opens-${this.options.alignment}`).addClass('opens-inner');\n }\n this.changed = true;\n }\n $sub.css('visibility', '');\n if (this.options.closeOnClick) { this._addBodyHandler(); }\n /**\n * Fires when the new dropdown pane is visible.\n * @event DropdownMenu#show\n */\n this.$element.trigger('show.zf.dropdownMenu', [$sub]);\n }\n\n /**\n * Hides a single, currently open dropdown pane, if passed a parameter, otherwise, hides everything.\n * @function\n * @param {jQuery} $elem - element with a submenu to hide\n * @param {Number} idx - index of the $tabs collection to hide\n * @fires DropdownMenu#hide\n * @private\n */\n _hide($elem, idx) {\n var $toClose;\n if ($elem && $elem.length) {\n $toClose = $elem;\n } else if (typeof idx !== 'undefined') {\n $toClose = this.$tabs.not(function(i) {\n return i === idx;\n });\n }\n else {\n $toClose = this.$element;\n }\n var somethingToClose = $toClose.hasClass('is-active') || $toClose.find('.is-active').length > 0;\n\n if (somethingToClose) {\n var $activeItem = $toClose.find('li.is-active');\n $activeItem.add($toClose).attr({\n 'data-is-click': false\n }).removeClass('is-active');\n\n $toClose.find('ul.js-dropdown-active').removeClass('js-dropdown-active');\n\n if (this.changed || $toClose.find('opens-inner').length) {\n var oldClass = this.options.alignment === 'left' ? 'right' : 'left';\n $toClose.find('li.is-dropdown-submenu-parent').add($toClose)\n .removeClass(`opens-inner opens-${this.options.alignment}`)\n .addClass(`opens-${oldClass}`);\n this.changed = false;\n }\n\n clearTimeout($activeItem.data('_delay'));\n this._removeBodyHandler();\n\n /**\n * Fires when the open menus are closed.\n * @event DropdownMenu#hide\n */\n this.$element.trigger('hide.zf.dropdownMenu', [$toClose]);\n }\n }\n\n /**\n * Destroys the plugin.\n * @function\n */\n _destroy() {\n this.$menuItems.off('.zf.dropdownMenu').removeAttr('data-is-click')\n .removeClass('is-right-arrow is-left-arrow is-down-arrow opens-right opens-left opens-inner');\n $(document.body).off('.zf.dropdownMenu');\n Nest.Burn(this.$element, 'dropdown');\n }\n}\n\n/**\n * Default settings for plugin\n */\nDropdownMenu.defaults = {\n /**\n * Disallows hover events from opening submenus\n * @option\n * @type {boolean}\n * @default false\n */\n disableHover: false,\n /**\n * Disallows hover on touch devices\n * @option\n * @type {boolean}\n * @default true\n */\n disableHoverOnTouch: true,\n /**\n * Allow a submenu to automatically close on a mouseleave event, if not clicked open.\n * @option\n * @type {boolean}\n * @default true\n */\n autoclose: true,\n /**\n * Amount of time to delay opening a submenu on hover event.\n * @option\n * @type {number}\n * @default 50\n */\n hoverDelay: 50,\n /**\n * Allow a submenu to open/remain open on parent click event. Allows cursor to move away from menu.\n * @option\n * @type {boolean}\n * @default false\n */\n clickOpen: false,\n /**\n * Amount of time to delay closing a submenu on a mouseleave event.\n * @option\n * @type {number}\n * @default 500\n */\n\n closingTime: 500,\n /**\n * Position of the menu relative to what direction the submenus should open. Handled by JS. Can be `'auto'`, `'left'` or `'right'`.\n * @option\n * @type {string}\n * @default 'auto'\n */\n alignment: 'auto',\n /**\n * Allow clicks on the body to close any open submenus.\n * @option\n * @type {boolean}\n * @default true\n */\n closeOnClick: true,\n /**\n * Allow clicks on leaf anchor links to close any open submenus.\n * @option\n * @type {boolean}\n * @default true\n */\n closeOnClickInside: true,\n /**\n * Class applied to vertical oriented menus, Foundation default is `vertical`. Update this if using your own class.\n * @option\n * @type {string}\n * @default 'vertical'\n */\n verticalClass: 'vertical',\n /**\n * Class applied to right-side oriented menus, Foundation default is `align-right`. Update this if using your own class.\n * @option\n * @type {string}\n * @default 'align-right'\n */\n rightClass: 'align-right',\n /**\n * Boolean to force overide the clicking of links to perform default action, on second touch event for mobile.\n * @option\n * @type {boolean}\n * @default true\n */\n forceFollow: true\n};\n\nexport {DropdownMenu};\n","import $ from 'jquery';\n\n/**\n * Runs a callback function when images are fully loaded.\n * @param {Object} images - Image(s) to check if loaded.\n * @param {Func} callback - Function to execute when image is fully loaded.\n */\nfunction onImagesLoaded(images, callback){\n var unloaded = images.length;\n\n if (unloaded === 0) {\n callback();\n }\n\n images.each(function(){\n // Check if image is loaded\n if (this.complete && typeof this.naturalWidth !== 'undefined') {\n singleImageLoaded();\n }\n else {\n // If the above check failed, simulate loading on detached element.\n var image = new Image();\n // Still count image as loaded if it finalizes with an error.\n var events = \"load.zf.images error.zf.images\";\n $(image).one(events, function me(){\n // Unbind the event listeners. We're using 'one' but only one of the two events will have fired.\n $(this).off(events, me);\n singleImageLoaded();\n });\n image.src = $(this).attr('src');\n }\n });\n\n function singleImageLoaded() {\n unloaded--;\n if (unloaded === 0) {\n callback();\n }\n }\n}\n\nexport { onImagesLoaded };\n","import $ from 'jquery';\nimport { MediaQuery } from './foundation.util.mediaQuery';\nimport { onImagesLoaded } from './foundation.util.imageLoader';\nimport { GetYoDigits } from './foundation.core.utils';\nimport { Plugin } from './foundation.core.plugin';\n\n/**\n * Equalizer module.\n * @module foundation.equalizer\n * @requires foundation.util.mediaQuery\n * @requires foundation.util.imageLoader if equalizer contains images\n */\n\nclass Equalizer extends Plugin {\n /**\n * Creates a new instance of Equalizer.\n * @class\n * @name Equalizer\n * @fires Equalizer#init\n * @param {Object} element - jQuery object to add the trigger to.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options){\n this.$element = element;\n this.options = $.extend({}, Equalizer.defaults, this.$element.data(), options);\n this.className = 'Equalizer'; // ie9 back compat\n\n this._init();\n }\n\n /**\n * Initializes the Equalizer plugin and calls functions to get equalizer functioning on load.\n * @private\n */\n _init() {\n var eqId = this.$element.attr('data-equalizer') || '';\n var $watched = this.$element.find(`[data-equalizer-watch=\"${eqId}\"]`);\n\n MediaQuery._init();\n\n this.$watched = $watched.length ? $watched : this.$element.find('[data-equalizer-watch]');\n this.$element.attr('data-resize', (eqId || GetYoDigits(6, 'eq')));\n this.$element.attr('data-mutate', (eqId || GetYoDigits(6, 'eq')));\n\n this.hasNested = this.$element.find('[data-equalizer]').length > 0;\n this.isNested = this.$element.parentsUntil(document.body, '[data-equalizer]').length > 0;\n this.isOn = false;\n this._bindHandler = {\n onResizeMeBound: this._onResizeMe.bind(this),\n onPostEqualizedBound: this._onPostEqualized.bind(this)\n };\n\n var imgs = this.$element.find('img');\n var tooSmall;\n if(this.options.equalizeOn){\n tooSmall = this._checkMQ();\n $(window).on('changed.zf.mediaquery', this._checkMQ.bind(this));\n }else{\n this._events();\n }\n if((typeof tooSmall !== 'undefined' && tooSmall === false) || typeof tooSmall === 'undefined'){\n if(imgs.length){\n onImagesLoaded(imgs, this._reflow.bind(this));\n }else{\n this._reflow();\n }\n }\n }\n\n /**\n * Removes event listeners if the breakpoint is too small.\n * @private\n */\n _pauseEvents() {\n this.isOn = false;\n this.$element.off({\n '.zf.equalizer': this._bindHandler.onPostEqualizedBound,\n 'resizeme.zf.trigger': this._bindHandler.onResizeMeBound,\n\t 'mutateme.zf.trigger': this._bindHandler.onResizeMeBound\n });\n }\n\n /**\n * function to handle $elements resizeme.zf.trigger, with bound this on _bindHandler.onResizeMeBound\n * @private\n */\n _onResizeMe() {\n this._reflow();\n }\n\n /**\n * function to handle $elements postequalized.zf.equalizer, with bound this on _bindHandler.onPostEqualizedBound\n * @private\n */\n _onPostEqualized(e) {\n if(e.target !== this.$element[0]){ this._reflow(); }\n }\n\n /**\n * Initializes events for Equalizer.\n * @private\n */\n _events() {\n this._pauseEvents();\n if(this.hasNested){\n this.$element.on('postequalized.zf.equalizer', this._bindHandler.onPostEqualizedBound);\n }else{\n this.$element.on('resizeme.zf.trigger', this._bindHandler.onResizeMeBound);\n\t this.$element.on('mutateme.zf.trigger', this._bindHandler.onResizeMeBound);\n }\n this.isOn = true;\n }\n\n /**\n * Checks the current breakpoint to the minimum required size.\n * @private\n */\n _checkMQ() {\n var tooSmall = !MediaQuery.is(this.options.equalizeOn);\n if(tooSmall){\n if(this.isOn){\n this._pauseEvents();\n this.$watched.css('height', 'auto');\n }\n }else{\n if(!this.isOn){\n this._events();\n }\n }\n return tooSmall;\n }\n\n /**\n * A noop version for the plugin\n * @private\n */\n _killswitch() {\n return;\n }\n\n /**\n * Calls necessary functions to update Equalizer upon DOM change\n * @private\n */\n _reflow() {\n if(!this.options.equalizeOnStack){\n if(this._isStacked()){\n this.$watched.css('height', 'auto');\n return false;\n }\n }\n if (this.options.equalizeByRow) {\n this.getHeightsByRow(this.applyHeightByRow.bind(this));\n }else{\n this.getHeights(this.applyHeight.bind(this));\n }\n }\n\n /**\n * Manually determines if the first 2 elements are *NOT* stacked.\n * @private\n */\n _isStacked() {\n if (!this.$watched[0] || !this.$watched[1]) {\n return true;\n }\n return this.$watched[0].getBoundingClientRect().top !== this.$watched[1].getBoundingClientRect().top;\n }\n\n /**\n * Finds the outer heights of children contained within an Equalizer parent and returns them in an array\n * @param {Function} cb - A non-optional callback to return the heights array to.\n * @returns {Array} heights - An array of heights of children within Equalizer container\n */\n getHeights(cb) {\n var heights = [];\n for(var i = 0, len = this.$watched.length; i < len; i++){\n this.$watched[i].style.height = 'auto';\n heights.push(this.$watched[i].offsetHeight);\n }\n cb(heights);\n }\n\n /**\n * Finds the outer heights of children contained within an Equalizer parent and returns them in an array\n * @param {Function} cb - A non-optional callback to return the heights array to.\n * @returns {Array} groups - An array of heights of children within Equalizer container grouped by row with element,height and max as last child\n */\n getHeightsByRow(cb) {\n var lastElTopOffset = (this.$watched.length ? this.$watched.first().offset().top : 0),\n groups = [],\n group = 0;\n //group by Row\n groups[group] = [];\n for(var i = 0, len = this.$watched.length; i < len; i++){\n this.$watched[i].style.height = 'auto';\n //maybe could use this.$watched[i].offsetTop\n var elOffsetTop = $(this.$watched[i]).offset().top;\n if (elOffsetTop !== lastElTopOffset) {\n group++;\n groups[group] = [];\n lastElTopOffset=elOffsetTop;\n }\n groups[group].push([this.$watched[i],this.$watched[i].offsetHeight]);\n }\n\n for (var j = 0, ln = groups.length; j < ln; j++) {\n var heights = $(groups[j]).map(function(){ return this[1]; }).get();\n var max = Math.max.apply(null, heights);\n groups[j].push(max);\n }\n cb(groups);\n }\n\n /**\n * Changes the CSS height property of each child in an Equalizer parent to match the tallest\n * @param {array} heights - An array of heights of children within Equalizer container\n * @fires Equalizer#preequalized\n * @fires Equalizer#postequalized\n */\n applyHeight(heights) {\n var max = Math.max.apply(null, heights);\n /**\n * Fires before the heights are applied\n * @event Equalizer#preequalized\n */\n this.$element.trigger('preequalized.zf.equalizer');\n\n this.$watched.css('height', max);\n\n /**\n * Fires when the heights have been applied\n * @event Equalizer#postequalized\n */\n this.$element.trigger('postequalized.zf.equalizer');\n }\n\n /**\n * Changes the CSS height property of each child in an Equalizer parent to match the tallest by row\n * @param {array} groups - An array of heights of children within Equalizer container grouped by row with element,height and max as last child\n * @fires Equalizer#preequalized\n * @fires Equalizer#preequalizedrow\n * @fires Equalizer#postequalizedrow\n * @fires Equalizer#postequalized\n */\n applyHeightByRow(groups) {\n /**\n * Fires before the heights are applied\n */\n this.$element.trigger('preequalized.zf.equalizer');\n for (var i = 0, len = groups.length; i < len ; i++) {\n var groupsILength = groups[i].length,\n max = groups[i][groupsILength - 1];\n if (groupsILength<=2) {\n $(groups[i][0][0]).css({'height':'auto'});\n continue;\n }\n /**\n * Fires before the heights per row are applied\n * @event Equalizer#preequalizedrow\n */\n this.$element.trigger('preequalizedrow.zf.equalizer');\n for (var j = 0, lenJ = (groupsILength-1); j < lenJ ; j++) {\n $(groups[i][j][0]).css({'height':max});\n }\n /**\n * Fires when the heights per row have been applied\n * @event Equalizer#postequalizedrow\n */\n this.$element.trigger('postequalizedrow.zf.equalizer');\n }\n /**\n * Fires when the heights have been applied\n */\n this.$element.trigger('postequalized.zf.equalizer');\n }\n\n /**\n * Destroys an instance of Equalizer.\n * @function\n */\n _destroy() {\n this._pauseEvents();\n this.$watched.css('height', 'auto');\n }\n}\n\n/**\n * Default settings for plugin\n */\nEqualizer.defaults = {\n /**\n * Enable height equalization when stacked on smaller screens.\n * @option\n * @type {boolean}\n * @default false\n */\n equalizeOnStack: false,\n /**\n * Enable height equalization row by row.\n * @option\n * @type {boolean}\n * @default false\n */\n equalizeByRow: false,\n /**\n * String representing the minimum breakpoint size the plugin should equalize heights on.\n * @option\n * @type {string}\n * @default ''\n */\n equalizeOn: ''\n};\n\nexport {Equalizer};\n","import $ from 'jquery';\nimport { Keyboard } from './foundation.util.keyboard';\nimport { Nest } from './foundation.util.nest';\nimport { GetYoDigits, transitionend } from './foundation.core.utils';\nimport { Box } from './foundation.util.box';\nimport { Plugin } from './foundation.core.plugin';\n\n/**\n * Drilldown module.\n * @module foundation.drilldown\n * @requires foundation.util.keyboard\n * @requires foundation.util.nest\n * @requires foundation.util.box\n */\n\nclass Drilldown extends Plugin {\n /**\n * Creates a new instance of a drilldown menu.\n * @class\n * @name Drilldown\n * @param {jQuery} element - jQuery object to make into an accordion menu.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, Drilldown.defaults, this.$element.data(), options);\n this.className = 'Drilldown'; // ie9 back compat\n\n this._init();\n\n Keyboard.register('Drilldown', {\n 'ENTER': 'open',\n 'SPACE': 'open',\n 'ARROW_RIGHT': 'next',\n 'ARROW_UP': 'up',\n 'ARROW_DOWN': 'down',\n 'ARROW_LEFT': 'previous',\n 'ESCAPE': 'close',\n });\n }\n\n /**\n * Initializes the drilldown by creating jQuery collections of elements\n * @private\n */\n _init() {\n Nest.Feather(this.$element, 'drilldown');\n\n if(this.options.autoApplyClass) {\n this.$element.addClass('drilldown');\n }\n\n this.$element.attr({\n 'aria-multiselectable': false\n });\n this.$submenuAnchors = this.$element.find('li.is-drilldown-submenu-parent').children('a');\n this.$submenus = this.$submenuAnchors.parent('li').children('[data-submenu]').attr('role', 'group');\n this.$menuItems = this.$element.find('li').not('.js-drilldown-back').find('a');\n\n // Set the main menu as current by default (unless a submenu is selected)\n // Used to set the wrapper height when the drilldown is closed/reopened from any (sub)menu\n this.$currentMenu = this.$element;\n\n this.$element.attr('data-mutate', (this.$element.attr('data-drilldown') || GetYoDigits(6, 'drilldown')));\n\n this._prepareMenu();\n this._registerEvents();\n\n this._keyboardEvents();\n }\n\n /**\n * prepares drilldown menu by setting attributes to links and elements\n * sets a min height to prevent content jumping\n * wraps the element if not already wrapped\n * @private\n * @function\n */\n _prepareMenu() {\n var _this = this;\n // if(!this.options.holdOpen){\n // this._menuLinkEvents();\n // }\n this.$submenuAnchors.each(function(){\n var $link = $(this);\n var $sub = $link.parent();\n if(_this.options.parentLink){\n $link.clone().prependTo($sub.children('[data-submenu]')).wrap('
  • ');\n }\n $link.data('savedHref', $link.attr('href')).removeAttr('href').attr('tabindex', 0);\n $link.children('[data-submenu]')\n .attr({\n 'aria-hidden': true,\n 'tabindex': 0,\n 'role': 'group'\n });\n _this._events($link);\n });\n this.$submenus.each(function(){\n var $menu = $(this),\n $back = $menu.find('.js-drilldown-back');\n if(!$back.length) {\n switch (_this.options.backButtonPosition) {\n case \"bottom\":\n $menu.append(_this.options.backButton);\n break;\n case \"top\":\n $menu.prepend(_this.options.backButton);\n break;\n default:\n console.error(\"Unsupported backButtonPosition value '\" + _this.options.backButtonPosition + \"'\");\n }\n }\n _this._back($menu);\n });\n\n this.$submenus.addClass('invisible');\n if(!this.options.autoHeight) {\n this.$submenus.addClass('drilldown-submenu-cover-previous');\n }\n\n // create a wrapper on element if it doesn't exist.\n if(!this.$element.parent().hasClass('is-drilldown')){\n this.$wrapper = $(this.options.wrapper).addClass('is-drilldown');\n if(this.options.animateHeight) this.$wrapper.addClass('animate-height');\n this.$element.wrap(this.$wrapper);\n }\n // set wrapper\n this.$wrapper = this.$element.parent();\n this.$wrapper.css(this._getMaxDims());\n }\n\n _resize() {\n this.$wrapper.css({'max-width': 'none', 'min-height': 'none'});\n // _getMaxDims has side effects (boo) but calling it should update all other necessary heights & widths\n this.$wrapper.css(this._getMaxDims());\n }\n\n /**\n * Adds event handlers to elements in the menu.\n * @function\n * @private\n * @param {jQuery} $elem - the current menu item to add handlers to.\n */\n _events($elem) {\n var _this = this;\n\n $elem.off('click.zf.drilldown')\n .on('click.zf.drilldown', function(e) {\n if($(e.target).parentsUntil('ul', 'li').hasClass('is-drilldown-submenu-parent')){\n e.preventDefault();\n }\n\n // if(e.target !== e.currentTarget.firstElementChild){\n // return false;\n // }\n _this._show($elem.parent('li'));\n\n if(_this.options.closeOnClick){\n var $body = $('body');\n $body.off('.zf.drilldown').on('click.zf.drilldown', function(ev) {\n if (ev.target === _this.$element[0] || $.contains(_this.$element[0], ev.target)) { return; }\n ev.preventDefault();\n _this._hideAll();\n $body.off('.zf.drilldown');\n });\n }\n });\n }\n\n /**\n * Adds event handlers to the menu element.\n * @function\n * @private\n */\n _registerEvents() {\n if(this.options.scrollTop){\n this._bindHandler = this._scrollTop.bind(this);\n this.$element.on('open.zf.drilldown hide.zf.drilldown close.zf.drilldown closed.zf.drilldown',this._bindHandler);\n }\n this.$element.on('mutateme.zf.trigger', this._resize.bind(this));\n }\n\n /**\n * Scroll to Top of Element or data-scroll-top-element\n * @function\n * @fires Drilldown#scrollme\n */\n _scrollTop() {\n var _this = this;\n var $scrollTopElement = _this.options.scrollTopElement !== ''?$(_this.options.scrollTopElement):_this.$element,\n scrollPos = parseInt($scrollTopElement.offset().top+_this.options.scrollTopOffset, 10);\n $('html, body').stop(true).animate({ scrollTop: scrollPos }, _this.options.animationDuration, _this.options.animationEasing,function(){\n /**\n * Fires after the menu has scrolled\n * @event Drilldown#scrollme\n */\n if(this===$('html')[0])_this.$element.trigger('scrollme.zf.drilldown');\n });\n }\n\n /**\n * Adds keydown event listener to `li`'s in the menu.\n * @private\n */\n _keyboardEvents() {\n var _this = this;\n\n this.$menuItems.add(this.$element.find('.js-drilldown-back > a, .is-submenu-parent-item > a')).on('keydown.zf.drilldown', function(e){\n var $element = $(this),\n $elements = $element.parent('li').parent('ul').children('li').children('a'),\n $prevElement,\n $nextElement;\n\n $elements.each(function(i) {\n if ($(this).is($element)) {\n $prevElement = $elements.eq(Math.max(0, i-1));\n $nextElement = $elements.eq(Math.min(i+1, $elements.length-1));\n return;\n }\n });\n\n Keyboard.handleKey(e, 'Drilldown', {\n next: function() {\n if ($element.is(_this.$submenuAnchors)) {\n _this._show($element.parent('li'));\n $element.parent('li').one(transitionend($element), function(){\n $element.parent('li').find('ul li a').not('.js-drilldown-back a').first().focus();\n });\n return true;\n }\n },\n previous: function() {\n _this._hide($element.parent('li').parent('ul'));\n $element.parent('li').parent('ul').one(transitionend($element), function(){\n setTimeout(function() {\n $element.parent('li').parent('ul').parent('li').children('a').first().focus();\n }, 1);\n });\n return true;\n },\n up: function() {\n $prevElement.focus();\n // Don't tap focus on first element in root ul\n return !$element.is(_this.$element.find('> li:first-child > a'));\n },\n down: function() {\n $nextElement.focus();\n // Don't tap focus on last element in root ul\n return !$element.is(_this.$element.find('> li:last-child > a'));\n },\n close: function() {\n // Don't close on element in root ul\n if (!$element.is(_this.$element.find('> li > a'))) {\n _this._hide($element.parent().parent());\n $element.parent().parent().siblings('a').focus();\n }\n },\n open: function() {\n if (_this.options.parentLink && $element.attr('href')) { // Link with href\n return false;\n } else if (!$element.is(_this.$menuItems)) { // not menu item means back button\n _this._hide($element.parent('li').parent('ul'));\n $element.parent('li').parent('ul').one(transitionend($element), function(){\n setTimeout(function() {\n $element.parent('li').parent('ul').parent('li').children('a').first().focus();\n }, 1);\n });\n return true;\n } else if ($element.is(_this.$submenuAnchors)) { // Sub menu item\n _this._show($element.parent('li'));\n $element.parent('li').one(transitionend($element), function(){\n $element.parent('li').find('ul li a').not('.js-drilldown-back a').first().focus();\n });\n return true;\n }\n },\n handled: function(preventDefault) {\n if (preventDefault) {\n e.preventDefault();\n }\n }\n });\n }); // end keyboardAccess\n }\n\n /**\n * Closes all open elements, and returns to root menu.\n * @function\n * @fires Drilldown#close\n * @fires Drilldown#closed\n */\n _hideAll() {\n var $elem = this.$element.find('.is-drilldown-submenu.is-active')\n $elem.addClass('is-closing');\n $elem.parent().closest('ul').removeClass('invisible');\n\n if (this.options.autoHeight) {\n const calcHeight = $elem.parent().closest('ul').data('calcHeight');\n this.$wrapper.css({ height: calcHeight });\n }\n\n /**\n * Fires when the menu is closing.\n * @event Drilldown#close\n */\n this.$element.trigger('close.zf.drilldown');\n\n $elem.one(transitionend($elem), () => {\n $elem.removeClass('is-active is-closing');\n\n /**\n * Fires when the menu is fully closed.\n * @event Drilldown#closed\n */\n this.$element.trigger('closed.zf.drilldown');\n });\n }\n\n /**\n * Adds event listener for each `back` button, and closes open menus.\n * @function\n * @fires Drilldown#back\n * @param {jQuery} $elem - the current sub-menu to add `back` event.\n */\n _back($elem) {\n var _this = this;\n $elem.off('click.zf.drilldown');\n $elem.children('.js-drilldown-back')\n .on('click.zf.drilldown', function() {\n _this._hide($elem);\n\n // If there is a parent submenu, call show\n let parentSubMenu = $elem.parent('li').parent('ul').parent('li');\n if (parentSubMenu.length) {\n _this._show(parentSubMenu);\n }\n else {\n _this.$currentMenu = _this.$element;\n }\n });\n }\n\n /**\n * Adds event listener to menu items w/o submenus to close open menus on click.\n * @function\n * @private\n */\n _menuLinkEvents() {\n var _this = this;\n this.$menuItems.not('.is-drilldown-submenu-parent')\n .off('click.zf.drilldown')\n .on('click.zf.drilldown', function() {\n setTimeout(function() {\n _this._hideAll();\n }, 0);\n });\n }\n\n /**\n * Sets the CSS classes for submenu to show it.\n * @function\n * @private\n * @param {jQuery} $elem - the target submenu (`ul` tag)\n * @param {boolean} trigger - trigger drilldown event\n */\n _setShowSubMenuClasses($elem, trigger) {\n $elem.addClass('is-active').removeClass('invisible').attr('aria-hidden', false);\n $elem.parent('li').attr('aria-expanded', true);\n if (trigger === true) {\n this.$element.trigger('open.zf.drilldown', [$elem]);\n }\n }\n\n /**\n * Sets the CSS classes for submenu to hide it.\n * @function\n * @private\n * @param {jQuery} $elem - the target submenu (`ul` tag)\n * @param {boolean} trigger - trigger drilldown event\n */\n _setHideSubMenuClasses($elem, trigger) {\n $elem.removeClass('is-active').addClass('invisible').attr('aria-hidden', true);\n $elem.parent('li').attr('aria-expanded', false);\n if (trigger === true) {\n $elem.trigger('hide.zf.drilldown', [$elem]);\n }\n }\n\n /**\n * Opens a specific drilldown (sub)menu no matter which (sub)menu in it is currently visible.\n * Compared to _show() this lets you jump into any submenu without clicking through every submenu on the way to it.\n * @function\n * @fires Drilldown#open\n * @param {jQuery} $elem - the target (sub)menu (`ul` tag)\n * @param {boolean} autoFocus - if true the first link in the target (sub)menu gets auto focused\n */\n _showMenu($elem, autoFocus) {\n\n var _this = this;\n\n // Reset drilldown\n var $expandedSubmenus = this.$element.find('li[aria-expanded=\"true\"] > ul[data-submenu]');\n $expandedSubmenus.each(function() {\n _this._setHideSubMenuClasses($(this));\n });\n\n // Save the menu as the currently displayed one.\n this.$currentMenu = $elem;\n\n // If target menu is root, focus first link & exit\n if ($elem.is('[data-drilldown]')) {\n if (autoFocus === true) $elem.find('li > a').first().focus();\n if (this.options.autoHeight) this.$wrapper.css('height', $elem.data('calcHeight'));\n return;\n }\n\n // Find all submenus on way to root incl. the element itself\n var $submenus = $elem.children().first().parentsUntil('[data-drilldown]', '[data-submenu]');\n\n // Open target menu and all submenus on its way to root\n $submenus.each(function(index) {\n\n // Update height of first child (target menu) if autoHeight option true\n if (index === 0 && _this.options.autoHeight) {\n _this.$wrapper.css('height', $(this).data('calcHeight'));\n }\n\n var isLastChild = index === $submenus.length - 1;\n\n // Add transitionsend listener to last child (root due to reverse order) to open target menu's first link\n // Last child makes sure the event gets always triggered even if going through several menus\n if (isLastChild === true) {\n $(this).one(transitionend($(this)), () => {\n if (autoFocus === true) {\n $elem.find('li > a').first().focus();\n }\n });\n }\n\n _this._setShowSubMenuClasses($(this), isLastChild);\n });\n }\n\n /**\n * Opens a submenu.\n * @function\n * @fires Drilldown#open\n * @param {jQuery} $elem - the current element with a submenu to open, i.e. the `li` tag.\n */\n _show($elem) {\n const $submenu = $elem.children('[data-submenu]');\n\n $elem.attr('aria-expanded', true);\n\n this.$currentMenu = $submenu;\n\n //hide drilldown parent menu when submenu is open\n // this removes it from the dom so that the tab key will take the user to the next visible element\n $elem.parent().closest('ul').addClass('invisible');\n\n // add visible class to submenu to override invisible class above\n $submenu.addClass('is-active visible').removeClass('invisible').attr('aria-hidden', false);\n\n if (this.options.autoHeight) {\n this.$wrapper.css({ height: $submenu.data('calcHeight') });\n }\n\n /**\n * Fires when the submenu has opened.\n * @event Drilldown#open\n */\n this.$element.trigger('open.zf.drilldown', [$elem]);\n }\n\n /**\n * Hides a submenu\n * @function\n * @fires Drilldown#hide\n * @param {jQuery} $elem - the current sub-menu to hide, i.e. the `ul` tag.\n */\n _hide($elem) {\n if(this.options.autoHeight) this.$wrapper.css({height:$elem.parent().closest('ul').data('calcHeight')});\n $elem.parent().closest('ul').removeClass('invisible');\n $elem.parent('li').attr('aria-expanded', false);\n $elem.attr('aria-hidden', true);\n $elem.addClass('is-closing')\n .one(transitionend($elem), function(){\n $elem.removeClass('is-active is-closing visible');\n $elem.blur().addClass('invisible');\n });\n /**\n * Fires when the submenu has closed.\n * @event Drilldown#hide\n */\n $elem.trigger('hide.zf.drilldown', [$elem]);\n }\n\n /**\n * Iterates through the nested menus to calculate the min-height, and max-width for the menu.\n * Prevents content jumping.\n * @function\n * @private\n */\n _getMaxDims() {\n var maxHeight = 0, result = {}, _this = this;\n\n // Recalculate menu heights and total max height\n this.$submenus.add(this.$element).each(function(){\n var height = Box.GetDimensions(this).height;\n\n maxHeight = height > maxHeight ? height : maxHeight;\n\n if(_this.options.autoHeight) {\n $(this).data('calcHeight',height);\n }\n });\n\n if (this.options.autoHeight)\n result.height = this.$currentMenu.data('calcHeight');\n else\n result['min-height'] = `${maxHeight}px`;\n\n result['max-width'] = `${this.$element[0].getBoundingClientRect().width}px`;\n\n return result;\n }\n\n /**\n * Destroys the Drilldown Menu\n * @function\n */\n _destroy() {\n $('body').off('.zf.drilldown');\n if(this.options.scrollTop) this.$element.off('.zf.drilldown',this._bindHandler);\n this._hideAll();\n\t this.$element.off('mutateme.zf.trigger');\n Nest.Burn(this.$element, 'drilldown');\n this.$element.unwrap()\n .find('.js-drilldown-back, .is-submenu-parent-item').remove()\n .end().find('.is-active, .is-closing, .is-drilldown-submenu').removeClass('is-active is-closing is-drilldown-submenu').off('transitionend otransitionend webkitTransitionEnd')\n .end().find('[data-submenu]').removeAttr('aria-hidden tabindex role');\n this.$submenuAnchors.each(function() {\n $(this).off('.zf.drilldown');\n });\n\n this.$element.find('[data-is-parent-link]').detach();\n this.$submenus.removeClass('drilldown-submenu-cover-previous invisible');\n\n this.$element.find('a').each(function(){\n var $link = $(this);\n $link.removeAttr('tabindex');\n if($link.data('savedHref')){\n $link.attr('href', $link.data('savedHref')).removeData('savedHref');\n }else{ return; }\n });\n };\n}\n\nDrilldown.defaults = {\n /**\n * Drilldowns depend on styles in order to function properly; in the default build of Foundation these are\n * on the `drilldown` class. This option auto-applies this class to the drilldown upon initialization.\n * @option\n * @type {boolean}\n * @default true\n */\n autoApplyClass: true,\n /**\n * Markup used for JS generated back button. Prepended or appended (see backButtonPosition) to submenu lists and deleted on `destroy` method, 'js-drilldown-back' class required. Remove the backslash (`\\`) if copy and pasting.\n * @option\n * @type {string}\n * @default '
  • Back
  • '\n */\n backButton: '
  • Back
  • ',\n /**\n * Position the back button either at the top or bottom of drilldown submenus. Can be `'left'` or `'bottom'`.\n * @option\n * @type {string}\n * @default top\n */\n backButtonPosition: 'top',\n /**\n * Markup used to wrap drilldown menu. Use a class name for independent styling; the JS applied class: `is-drilldown` is required. Remove the backslash (`\\`) if copy and pasting.\n * @option\n * @type {string}\n * @default '
    '\n */\n wrapper: '
    ',\n /**\n * Adds the parent link to the submenu.\n * @option\n * @type {boolean}\n * @default false\n */\n parentLink: false,\n /**\n * Allow the menu to return to root list on body click.\n * @option\n * @type {boolean}\n * @default false\n */\n closeOnClick: false,\n /**\n * Allow the menu to auto adjust height.\n * @option\n * @type {boolean}\n * @default false\n */\n autoHeight: false,\n /**\n * Animate the auto adjust height.\n * @option\n * @type {boolean}\n * @default false\n */\n animateHeight: false,\n /**\n * Scroll to the top of the menu after opening a submenu or navigating back using the menu back button\n * @option\n * @type {boolean}\n * @default false\n */\n scrollTop: false,\n /**\n * String jquery selector (for example 'body') of element to take offset().top from, if empty string the drilldown menu offset().top is taken\n * @option\n * @type {string}\n * @default ''\n */\n scrollTopElement: '',\n /**\n * ScrollTop offset\n * @option\n * @type {number}\n * @default 0\n */\n scrollTopOffset: 0,\n /**\n * Scroll animation duration\n * @option\n * @type {number}\n * @default 500\n */\n animationDuration: 500,\n /**\n * Scroll animation easing. Can be `'swing'` or `'linear'`.\n * @option\n * @type {string}\n * @see {@link https://api.jquery.com/animate|JQuery animate}\n * @default 'swing'\n */\n animationEasing: 'swing'\n // holdOpen: false\n};\n\nexport {Drilldown};\n","import $ from 'jquery';\n\nimport { MediaQuery } from './foundation.util.mediaQuery';\nimport { GetYoDigits } from './foundation.core.utils';\nimport { Plugin } from './foundation.core.plugin';\n\nimport { DropdownMenu } from './foundation.dropdownMenu';\nimport { Drilldown } from './foundation.drilldown';\nimport { AccordionMenu } from './foundation.accordionMenu';\n\nlet MenuPlugins = {\n dropdown: {\n cssClass: 'dropdown',\n plugin: DropdownMenu\n },\n drilldown: {\n cssClass: 'drilldown',\n plugin: Drilldown\n },\n accordion: {\n cssClass: 'accordion-menu',\n plugin: AccordionMenu\n }\n};\n\n // import \"foundation.util.triggers.js\";\n\n\n/**\n * ResponsiveMenu module.\n * @module foundation.responsiveMenu\n * @requires foundation.util.triggers\n * @requires foundation.util.mediaQuery\n */\n\nclass ResponsiveMenu extends Plugin {\n /**\n * Creates a new instance of a responsive menu.\n * @class\n * @name ResponsiveMenu\n * @fires ResponsiveMenu#init\n * @param {jQuery} element - jQuery object to make into a dropdown menu.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element) {\n this.$element = $(element);\n this.rules = this.$element.data('responsive-menu');\n this.currentMq = null;\n this.currentPlugin = null;\n this.className = 'ResponsiveMenu'; // ie9 back compat\n\n this._init();\n this._events();\n }\n\n /**\n * Initializes the Menu by parsing the classes from the 'data-ResponsiveMenu' attribute on the element.\n * @function\n * @private\n */\n _init() {\n\n MediaQuery._init();\n // The first time an Interchange plugin is initialized, this.rules is converted from a string of \"classes\" to an object of rules\n if (typeof this.rules === 'string') {\n let rulesTree = {};\n\n // Parse rules from \"classes\" pulled from data attribute\n let rules = this.rules.split(' ');\n\n // Iterate through every rule found\n for (let i = 0; i < rules.length; i++) {\n let rule = rules[i].split('-');\n let ruleSize = rule.length > 1 ? rule[0] : 'small';\n let rulePlugin = rule.length > 1 ? rule[1] : rule[0];\n\n if (MenuPlugins[rulePlugin] !== null) {\n rulesTree[ruleSize] = MenuPlugins[rulePlugin];\n }\n }\n\n this.rules = rulesTree;\n }\n\n if (!$.isEmptyObject(this.rules)) {\n this._checkMediaQueries();\n }\n // Add data-mutate since children may need it.\n this.$element.attr('data-mutate', (this.$element.attr('data-mutate') || GetYoDigits(6, 'responsive-menu')));\n }\n\n /**\n * Initializes events for the Menu.\n * @function\n * @private\n */\n _events() {\n var _this = this;\n\n $(window).on('changed.zf.mediaquery', function() {\n _this._checkMediaQueries();\n });\n // $(window).on('resize.zf.ResponsiveMenu', function() {\n // _this._checkMediaQueries();\n // });\n }\n\n /**\n * Checks the current screen width against available media queries. If the media query has changed, and the plugin needed has changed, the plugins will swap out.\n * @function\n * @private\n */\n _checkMediaQueries() {\n var matchedMq, _this = this;\n // Iterate through each rule and find the last matching rule\n $.each(this.rules, function(key) {\n if (MediaQuery.atLeast(key)) {\n matchedMq = key;\n }\n });\n\n // No match? No dice\n if (!matchedMq) return;\n\n // Plugin already initialized? We good\n if (this.currentPlugin instanceof this.rules[matchedMq].plugin) return;\n\n // Remove existing plugin-specific CSS classes\n $.each(MenuPlugins, function(key, value) {\n _this.$element.removeClass(value.cssClass);\n });\n\n // Add the CSS class for the new plugin\n this.$element.addClass(this.rules[matchedMq].cssClass);\n\n // Create an instance of the new plugin\n if (this.currentPlugin) this.currentPlugin.destroy();\n this.currentPlugin = new this.rules[matchedMq].plugin(this.$element, {});\n }\n\n /**\n * Destroys the instance of the current plugin on this element, as well as the window resize handler that switches the plugins out.\n * @function\n */\n _destroy() {\n this.currentPlugin.destroy();\n $(window).off('.zf.ResponsiveMenu');\n }\n}\n\nResponsiveMenu.defaults = {};\n\nexport {ResponsiveMenu};\n","import $ from 'jquery';\n\nimport { MediaQuery } from './foundation.util.mediaQuery';\nimport { Motion } from './foundation.util.motion';\nimport { Plugin } from './foundation.core.plugin';\n\n/**\n * ResponsiveToggle module.\n * @module foundation.responsiveToggle\n * @requires foundation.util.mediaQuery\n * @requires foundation.util.motion\n */\n\nclass ResponsiveToggle extends Plugin {\n /**\n * Creates a new instance of Tab Bar.\n * @class\n * @name ResponsiveToggle\n * @fires ResponsiveToggle#init\n * @param {jQuery} element - jQuery object to attach tab bar functionality to.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options) {\n this.$element = $(element);\n this.options = $.extend({}, ResponsiveToggle.defaults, this.$element.data(), options);\n this.className = 'ResponsiveToggle'; // ie9 back compat\n\n this._init();\n this._events();\n }\n\n /**\n * Initializes the tab bar by finding the target element, toggling element, and running update().\n * @function\n * @private\n */\n _init() {\n MediaQuery._init();\n var targetID = this.$element.data('responsive-toggle');\n if (!targetID) {\n console.error('Your tab bar needs an ID of a Menu as the value of data-tab-bar.');\n }\n\n this.$targetMenu = $(`#${targetID}`);\n this.$toggler = this.$element.find('[data-toggle]').filter(function() {\n var target = $(this).data('toggle');\n return (target === targetID || target === \"\");\n });\n this.options = $.extend({}, this.options, this.$targetMenu.data());\n\n // If they were set, parse the animation classes\n if(this.options.animate) {\n let input = this.options.animate.split(' ');\n\n this.animationIn = input[0];\n this.animationOut = input[1] || null;\n }\n\n this._update();\n }\n\n /**\n * Adds necessary event handlers for the tab bar to work.\n * @function\n * @private\n */\n _events() {\n this._updateMqHandler = this._update.bind(this);\n\n $(window).on('changed.zf.mediaquery', this._updateMqHandler);\n\n this.$toggler.on('click.zf.responsiveToggle', this.toggleMenu.bind(this));\n }\n\n /**\n * Checks the current media query to determine if the tab bar should be visible or hidden.\n * @function\n * @private\n */\n _update() {\n // Mobile\n if (!MediaQuery.atLeast(this.options.hideFor)) {\n this.$element.show();\n this.$targetMenu.hide();\n }\n\n // Desktop\n else {\n this.$element.hide();\n this.$targetMenu.show();\n }\n }\n\n /**\n * Toggles the element attached to the tab bar. The toggle only happens if the screen is small enough to allow it.\n * @function\n * @fires ResponsiveToggle#toggled\n */\n toggleMenu() {\n if (!MediaQuery.atLeast(this.options.hideFor)) {\n /**\n * Fires when the element attached to the tab bar toggles.\n * @event ResponsiveToggle#toggled\n */\n if(this.options.animate) {\n if (this.$targetMenu.is(':hidden')) {\n Motion.animateIn(this.$targetMenu, this.animationIn, () => {\n this.$element.trigger('toggled.zf.responsiveToggle');\n this.$targetMenu.find('[data-mutate]').triggerHandler('mutateme.zf.trigger');\n });\n }\n else {\n Motion.animateOut(this.$targetMenu, this.animationOut, () => {\n this.$element.trigger('toggled.zf.responsiveToggle');\n });\n }\n }\n else {\n this.$targetMenu.toggle(0);\n this.$targetMenu.find('[data-mutate]').trigger('mutateme.zf.trigger');\n this.$element.trigger('toggled.zf.responsiveToggle');\n }\n }\n };\n\n _destroy() {\n this.$element.off('.zf.responsiveToggle');\n this.$toggler.off('.zf.responsiveToggle');\n\n $(window).off('changed.zf.mediaquery', this._updateMqHandler);\n }\n}\n\nResponsiveToggle.defaults = {\n /**\n * The breakpoint after which the menu is always shown, and the tab bar is hidden.\n * @option\n * @type {string}\n * @default 'medium'\n */\n hideFor: 'medium',\n\n /**\n * To decide if the toggle should be animated or not.\n * @option\n * @type {boolean}\n * @default false\n */\n animate: false\n};\n\nexport { ResponsiveToggle };\n","import $ from 'jquery';\nimport { Plugin } from './foundation.core.plugin';\nimport { onLoad } from './foundation.core.utils';\nimport { Keyboard } from './foundation.util.keyboard';\nimport { MediaQuery } from './foundation.util.mediaQuery';\nimport { Motion } from './foundation.util.motion';\nimport { Triggers } from './foundation.util.triggers';\nimport { Touch } from './foundation.util.touch'\n\n/**\n * Reveal module.\n * @module foundation.reveal\n * @requires foundation.util.keyboard\n * @requires foundation.util.touch\n * @requires foundation.util.triggers\n * @requires foundation.util.mediaQuery\n * @requires foundation.util.motion if using animations\n */\n\nclass Reveal extends Plugin {\n /**\n * Creates a new instance of Reveal.\n * @class\n * @name Reveal\n * @param {jQuery} element - jQuery object to use for the modal.\n * @param {Object} options - optional parameters.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, Reveal.defaults, this.$element.data(), options);\n this.className = 'Reveal'; // ie9 back compat\n this._init();\n\n // Touch and Triggers init are idempotent, just need to make sure they are initialized\n Touch.init($);\n Triggers.init($);\n\n Keyboard.register('Reveal', {\n 'ESCAPE': 'close',\n });\n }\n\n /**\n * Initializes the modal by adding the overlay and close buttons, (if selected).\n * @private\n */\n _init() {\n MediaQuery._init();\n this.id = this.$element.attr('id');\n this.isActive = false;\n this.cached = {mq: MediaQuery.current};\n\n this.$anchor = $(`[data-open=\"${this.id}\"]`).length ? $(`[data-open=\"${this.id}\"]`) : $(`[data-toggle=\"${this.id}\"]`);\n this.$anchor.attr({\n 'aria-controls': this.id,\n 'aria-haspopup': 'dialog',\n 'tabindex': 0\n });\n\n if (this.options.fullScreen || this.$element.hasClass('full')) {\n this.options.fullScreen = true;\n this.options.overlay = false;\n }\n if (this.options.overlay && !this.$overlay) {\n this.$overlay = this._makeOverlay(this.id);\n }\n\n this.$element.attr({\n 'role': 'dialog',\n 'aria-hidden': true,\n 'data-yeti-box': this.id,\n 'data-resize': this.id\n });\n\n if(this.$overlay) {\n this.$element.detach().appendTo(this.$overlay);\n } else {\n this.$element.detach().appendTo($(this.options.appendTo));\n this.$element.addClass('without-overlay');\n }\n this._events();\n if (this.options.deepLink && window.location.hash === ( `#${this.id}`)) {\n this.onLoadListener = onLoad($(window), () => this.open());\n }\n }\n\n /**\n * Creates an overlay div to display behind the modal.\n * @private\n */\n _makeOverlay() {\n var additionalOverlayClasses = '';\n\n if (this.options.additionalOverlayClasses) {\n additionalOverlayClasses = ' ' + this.options.additionalOverlayClasses;\n }\n\n return $('
    ')\n .addClass('reveal-overlay' + additionalOverlayClasses)\n .appendTo(this.options.appendTo);\n }\n\n /**\n * Updates position of modal\n * TODO: Figure out if we actually need to cache these values or if it doesn't matter\n * @private\n */\n _updatePosition() {\n var width = this.$element.outerWidth();\n var outerWidth = $(window).width();\n var height = this.$element.outerHeight();\n var outerHeight = $(window).height();\n var left, top = null;\n if (this.options.hOffset === 'auto') {\n left = parseInt((outerWidth - width) / 2, 10);\n } else {\n left = parseInt(this.options.hOffset, 10);\n }\n if (this.options.vOffset === 'auto') {\n if (height > outerHeight) {\n top = parseInt(Math.min(100, outerHeight / 10), 10);\n } else {\n top = parseInt((outerHeight - height) / 4, 10);\n }\n } else if (this.options.vOffset !== null) {\n top = parseInt(this.options.vOffset, 10);\n }\n\n if (top !== null) {\n this.$element.css({top: top + 'px'});\n }\n\n // only worry about left if we don't have an overlay or we have a horizontal offset,\n // otherwise we're perfectly in the middle\n if (!this.$overlay || (this.options.hOffset !== 'auto')) {\n this.$element.css({left: left + 'px'});\n this.$element.css({margin: '0px'});\n }\n\n }\n\n /**\n * Adds event handlers for the modal.\n * @private\n */\n _events() {\n var _this = this;\n\n this.$element.on({\n 'open.zf.trigger': this.open.bind(this),\n 'close.zf.trigger': (event, $element) => {\n if ((event.target === _this.$element[0]) ||\n ($(event.target).parents('[data-closable]')[0] === $element)) { // only close reveal when it's explicitly called\n return this.close.apply(this);\n }\n },\n 'toggle.zf.trigger': this.toggle.bind(this),\n 'resizeme.zf.trigger': function() {\n _this._updatePosition();\n }\n });\n\n if (this.options.closeOnClick && this.options.overlay) {\n this.$overlay.off('.zf.reveal').on('click.zf.dropdown tap.zf.dropdown', function(e) {\n if (e.target === _this.$element[0] ||\n $.contains(_this.$element[0], e.target) ||\n !$.contains(document, e.target)) {\n return;\n }\n _this.close();\n });\n }\n if (this.options.deepLink) {\n $(window).on(`hashchange.zf.reveal:${this.id}`, this._handleState.bind(this));\n }\n }\n\n /**\n * Handles modal methods on back/forward button clicks or any other event that triggers hashchange.\n * @private\n */\n _handleState() {\n if(window.location.hash === ( '#' + this.id) && !this.isActive){ this.open(); }\n else{ this.close(); }\n }\n\n /**\n * Disables the scroll when Reveal is shown to prevent the background from shifting\n * @param {number} scrollTop - Scroll to visually apply, window current scroll by default\n */\n _disableScroll(scrollTop) {\n scrollTop = scrollTop || $(window).scrollTop();\n if ($(document).height() > $(window).height()) {\n $(\"html\")\n .css(\"top\", -scrollTop);\n }\n }\n\n /**\n * Reenables the scroll when Reveal closes\n * @param {number} scrollTop - Scroll to restore, html \"top\" property by default (as set by `_disableScroll`)\n */\n _enableScroll(scrollTop) {\n scrollTop = scrollTop || parseInt($(\"html\").css(\"top\"), 10);\n if ($(document).height() > $(window).height()) {\n $(\"html\")\n .css(\"top\", \"\");\n $(window).scrollTop(-scrollTop);\n }\n }\n\n\n /**\n * Opens the modal controlled by `this.$anchor`, and closes all others by default.\n * @function\n * @fires Reveal#closeme\n * @fires Reveal#open\n */\n open() {\n // either update or replace browser history\n const hash = `#${this.id}`;\n if (this.options.deepLink && window.location.hash !== hash) {\n\n if (window.history.pushState) {\n if (this.options.updateHistory) {\n window.history.pushState({}, '', hash);\n } else {\n window.history.replaceState({}, '', hash);\n }\n } else {\n window.location.hash = hash;\n }\n }\n\n // Remember anchor that opened it to set focus back later, have general anchors as fallback\n this.$activeAnchor = $(document.activeElement).is(this.$anchor) ? $(document.activeElement) : this.$anchor;\n\n this.isActive = true;\n\n // Make elements invisible, but remove display: none so we can get size and positioning\n this.$element\n .css({ 'visibility': 'hidden' })\n .show()\n .scrollTop(0);\n if (this.options.overlay) {\n this.$overlay.css({'visibility': 'hidden'}).show();\n }\n\n this._updatePosition();\n\n this.$element\n .hide()\n .css({ 'visibility': '' });\n\n if(this.$overlay) {\n this.$overlay.css({'visibility': ''}).hide();\n if(this.$element.hasClass('fast')) {\n this.$overlay.addClass('fast');\n } else if (this.$element.hasClass('slow')) {\n this.$overlay.addClass('slow');\n }\n }\n\n\n if (!this.options.multipleOpened) {\n /**\n * Fires immediately before the modal opens.\n * Closes any other modals that are currently open\n * @event Reveal#closeme\n */\n this.$element.trigger('closeme.zf.reveal', this.id);\n }\n\n if ($('.reveal:visible').length === 0) {\n this._disableScroll();\n }\n\n var _this = this;\n\n // Motion UI method of reveal\n if (this.options.animationIn) {\n function afterAnimation(){\n _this.$element\n .attr({\n 'aria-hidden': false,\n 'tabindex': -1\n })\n .focus();\n _this._addGlobalClasses();\n Keyboard.trapFocus(_this.$element);\n }\n if (this.options.overlay) {\n Motion.animateIn(this.$overlay, 'fade-in');\n }\n Motion.animateIn(this.$element, this.options.animationIn, () => {\n if(this.$element) { // protect against object having been removed\n this.focusableElements = Keyboard.findFocusable(this.$element);\n afterAnimation();\n }\n });\n }\n // jQuery method of reveal\n else {\n if (this.options.overlay) {\n this.$overlay.show(0);\n }\n this.$element.show(this.options.showDelay);\n }\n\n // handle accessibility\n this.$element\n .attr({\n 'aria-hidden': false,\n 'tabindex': -1\n })\n .focus();\n Keyboard.trapFocus(this.$element);\n\n this._addGlobalClasses();\n\n this._addGlobalListeners();\n\n /**\n * Fires when the modal has successfully opened.\n * @event Reveal#open\n */\n this.$element.trigger('open.zf.reveal');\n }\n\n /**\n * Adds classes and listeners on document required by open modals.\n *\n * The following classes are added and updated:\n * - `.is-reveal-open` - Prevents the scroll on document\n * - `.zf-has-scroll` - Displays a disabled scrollbar on document if required like if the\n * scroll was not disabled. This prevent a \"shift\" of the page content due\n * the scrollbar disappearing when the modal opens.\n *\n * @private\n */\n _addGlobalClasses() {\n const updateScrollbarClass = () => {\n $('html').toggleClass('zf-has-scroll', !!($(document).height() > $(window).height()));\n };\n\n this.$element.on('resizeme.zf.trigger.revealScrollbarListener', () => updateScrollbarClass());\n updateScrollbarClass();\n $('html').addClass('is-reveal-open');\n }\n\n /**\n * Removes classes and listeners on document that were required by open modals.\n * @private\n */\n _removeGlobalClasses() {\n this.$element.off('resizeme.zf.trigger.revealScrollbarListener');\n $('html').removeClass('is-reveal-open');\n $('html').removeClass('zf-has-scroll');\n }\n\n /**\n * Adds extra event handlers for the body and window if necessary.\n * @private\n */\n _addGlobalListeners() {\n var _this = this;\n if(!this.$element) { return; } // If we're in the middle of cleanup, don't freak out\n this.focusableElements = Keyboard.findFocusable(this.$element);\n\n if (!this.options.overlay && this.options.closeOnClick && !this.options.fullScreen) {\n $('body').on('click.zf.dropdown tap.zf.dropdown', function(e) {\n if (e.target === _this.$element[0] ||\n $.contains(_this.$element[0], e.target) ||\n !$.contains(document, e.target)) { return; }\n _this.close();\n });\n }\n\n if (this.options.closeOnEsc) {\n $(window).on('keydown.zf.reveal', function(e) {\n Keyboard.handleKey(e, 'Reveal', {\n close: function() {\n if (_this.options.closeOnEsc) {\n _this.close();\n }\n }\n });\n });\n }\n }\n\n /**\n * Closes the modal.\n * @function\n * @fires Reveal#closed\n */\n close() {\n if (!this.isActive || !this.$element.is(':visible')) {\n return false;\n }\n var _this = this;\n\n // Motion UI method of hiding\n if (this.options.animationOut) {\n if (this.options.overlay) {\n Motion.animateOut(this.$overlay, 'fade-out');\n }\n\n Motion.animateOut(this.$element, this.options.animationOut, finishUp);\n }\n // jQuery method of hiding\n else {\n this.$element.hide(this.options.hideDelay);\n\n if (this.options.overlay) {\n this.$overlay.hide(0, finishUp);\n }\n else {\n finishUp();\n }\n }\n\n // Conditionals to remove extra event listeners added on open\n if (this.options.closeOnEsc) {\n $(window).off('keydown.zf.reveal');\n }\n\n if (!this.options.overlay && this.options.closeOnClick) {\n $('body').off('click.zf.dropdown tap.zf.dropdown');\n }\n\n this.$element.off('keydown.zf.reveal');\n\n function finishUp() {\n\n // Get the current top before the modal is closed and restore the scroll after.\n // TODO: use component properties instead of HTML properties\n // See https://github.com/foundation/foundation-sites/pull/10786\n var scrollTop = parseInt($(\"html\").css(\"top\"), 10);\n\n if ($('.reveal:visible').length === 0) {\n _this._removeGlobalClasses(); // also remove .is-reveal-open from the html element when there is no opened reveal\n }\n\n Keyboard.releaseFocus(_this.$element);\n\n _this.$element.attr('aria-hidden', true);\n\n if ($('.reveal:visible').length === 0) {\n _this._enableScroll(scrollTop);\n }\n\n /**\n * Fires when the modal is done closing.\n * @event Reveal#closed\n */\n _this.$element.trigger('closed.zf.reveal');\n }\n\n /**\n * Resets the modal content\n * This prevents a running video to keep going in the background\n */\n if (this.options.resetOnClose) {\n this.$element.html(this.$element.html());\n }\n\n this.isActive = false;\n // If deepLink and we did not switched to an other modal...\n if (_this.options.deepLink && window.location.hash === `#${this.id}`) {\n // Remove the history hash\n if (window.history.replaceState) {\n const urlWithoutHash = window.location.pathname + window.location.search;\n if (this.options.updateHistory) {\n window.history.pushState({}, '', urlWithoutHash); // remove the hash\n } else {\n window.history.replaceState('', document.title, urlWithoutHash);\n }\n } else {\n window.location.hash = '';\n }\n }\n\n this.$activeAnchor.focus();\n }\n\n /**\n * Toggles the open/closed state of a modal.\n * @function\n */\n toggle() {\n if (this.isActive) {\n this.close();\n } else {\n this.open();\n }\n };\n\n /**\n * Destroys an instance of a modal.\n * @function\n */\n _destroy() {\n if (this.options.overlay) {\n this.$element.appendTo($(this.options.appendTo)); // move $element outside of $overlay to prevent error unregisterPlugin()\n this.$overlay.hide().off().remove();\n }\n this.$element.hide().off();\n this.$anchor.off('.zf');\n $(window).off(`.zf.reveal:${this.id}`)\n if (this.onLoadListener) $(window).off(this.onLoadListener);\n\n if ($('.reveal:visible').length === 0) {\n this._removeGlobalClasses(); // also remove .is-reveal-open from the html element when there is no opened reveal\n }\n };\n}\n\nReveal.defaults = {\n /**\n * Motion-UI class to use for animated elements. If none used, defaults to simple show/hide.\n * @option\n * @type {string}\n * @default ''\n */\n animationIn: '',\n /**\n * Motion-UI class to use for animated elements. If none used, defaults to simple show/hide.\n * @option\n * @type {string}\n * @default ''\n */\n animationOut: '',\n /**\n * Time, in ms, to delay the opening of a modal after a click if no animation used.\n * @option\n * @type {number}\n * @default 0\n */\n showDelay: 0,\n /**\n * Time, in ms, to delay the closing of a modal after a click if no animation used.\n * @option\n * @type {number}\n * @default 0\n */\n hideDelay: 0,\n /**\n * Allows a click on the body/overlay to close the modal.\n * @option\n * @type {boolean}\n * @default true\n */\n closeOnClick: true,\n /**\n * Allows the modal to close if the user presses the `ESCAPE` key.\n * @option\n * @type {boolean}\n * @default true\n */\n closeOnEsc: true,\n /**\n * If true, allows multiple modals to be displayed at once.\n * @option\n * @type {boolean}\n * @default false\n */\n multipleOpened: false,\n /**\n * Distance, in pixels, the modal should push down from the top of the screen.\n * @option\n * @type {number|string}\n * @default auto\n */\n vOffset: 'auto',\n /**\n * Distance, in pixels, the modal should push in from the side of the screen.\n * @option\n * @type {number|string}\n * @default auto\n */\n hOffset: 'auto',\n /**\n * Allows the modal to be fullscreen, completely blocking out the rest of the view. JS checks for this as well.\n * @option\n * @type {boolean}\n * @default false\n */\n fullScreen: false,\n /**\n * Allows the modal to generate an overlay div, which will cover the view when modal opens.\n * @option\n * @type {boolean}\n * @default true\n */\n overlay: true,\n /**\n * Allows the modal to remove and reinject markup on close. Should be true if using video elements w/o using provider's api, otherwise, videos will continue to play in the background.\n * @option\n * @type {boolean}\n * @default false\n */\n resetOnClose: false,\n /**\n * Link the location hash to the modal.\n * Set the location hash when the modal is opened/closed, and open/close the modal when the location changes.\n * @option\n * @type {boolean}\n * @default false\n */\n deepLink: false,\n /**\n * If `deepLink` is enabled, update the browser history with the open modal\n * @option\n * @default false\n */\n updateHistory: false,\n /**\n * Allows the modal to append to custom div.\n * @option\n * @type {string}\n * @default \"body\"\n */\n appendTo: \"body\",\n /**\n * Allows adding additional class names to the reveal overlay.\n * @option\n * @type {string}\n * @default ''\n */\n additionalOverlayClasses: ''\n};\n\nexport {Reveal};\n","import $ from 'jquery';\nimport { Keyboard } from './foundation.util.keyboard';\nimport { Move } from './foundation.util.motion';\nimport { GetYoDigits, rtl as Rtl } from './foundation.core.utils';\n\nimport { Plugin } from './foundation.core.plugin';\n\nimport { Touch } from './foundation.util.touch';\n\nimport { Triggers } from './foundation.util.triggers';\n/**\n * Slider module.\n * @module foundation.slider\n * @requires foundation.util.motion\n * @requires foundation.util.triggers\n * @requires foundation.util.keyboard\n * @requires foundation.util.touch\n */\n\nclass Slider extends Plugin {\n /**\n * Creates a new instance of a slider control.\n * @class\n * @name Slider\n * @param {jQuery} element - jQuery object to make into a slider control.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, Slider.defaults, this.$element.data(), options);\n this.className = 'Slider'; // ie9 back compat\n this.initialized = false;\n\n // Touch and Triggers inits are idempotent, we just need to make sure it's initialied.\n Touch.init($);\n Triggers.init($);\n\n this._init();\n\n Keyboard.register('Slider', {\n 'ltr': {\n 'ARROW_RIGHT': 'increase',\n 'ARROW_UP': 'increase',\n 'ARROW_DOWN': 'decrease',\n 'ARROW_LEFT': 'decrease',\n 'SHIFT_ARROW_RIGHT': 'increaseFast',\n 'SHIFT_ARROW_UP': 'increaseFast',\n 'SHIFT_ARROW_DOWN': 'decreaseFast',\n 'SHIFT_ARROW_LEFT': 'decreaseFast',\n 'HOME': 'min',\n 'END': 'max'\n },\n 'rtl': {\n 'ARROW_LEFT': 'increase',\n 'ARROW_RIGHT': 'decrease',\n 'SHIFT_ARROW_LEFT': 'increaseFast',\n 'SHIFT_ARROW_RIGHT': 'decreaseFast'\n }\n });\n }\n\n /**\n * Initilizes the plugin by reading/setting attributes, creating collections and setting the initial position of the handle(s).\n * @function\n * @private\n */\n _init() {\n this.inputs = this.$element.find('input');\n this.handles = this.$element.find('[data-slider-handle]');\n\n this.$handle = this.handles.eq(0);\n this.$input = this.inputs.length ? this.inputs.eq(0) : $(`#${this.$handle.attr('aria-controls')}`);\n this.$fill = this.$element.find('[data-slider-fill]').css(this.options.vertical ? 'height' : 'width', 0);\n\n if (this.options.disabled || this.$element.hasClass(this.options.disabledClass)) {\n this.options.disabled = true;\n this.$element.addClass(this.options.disabledClass);\n }\n if (!this.inputs.length) {\n this.inputs = $().add(this.$input);\n this.options.binding = true;\n }\n\n this._setInitAttr(0);\n\n if (this.handles[1]) {\n this.options.doubleSided = true;\n this.$handle2 = this.handles.eq(1);\n this.$input2 = this.inputs.length > 1 ? this.inputs.eq(1) : $(`#${this.$handle2.attr('aria-controls')}`);\n\n if (!this.inputs[1]) {\n this.inputs = this.inputs.add(this.$input2);\n }\n\n // this.$handle.triggerHandler('click.zf.slider');\n this._setInitAttr(1);\n }\n\n // Set handle positions\n this.setHandles();\n\n this._events();\n this.initialized = true;\n }\n\n setHandles() {\n if(this.handles[1]) {\n this._setHandlePos(this.$handle, this.inputs.eq(0).val(), () => {\n this._setHandlePos(this.$handle2, this.inputs.eq(1).val());\n });\n } else {\n this._setHandlePos(this.$handle, this.inputs.eq(0).val());\n }\n }\n\n _reflow() {\n this.setHandles();\n }\n /**\n * @function\n * @private\n * @param {Number} value - floating point (the value) to be transformed using to a relative position on the slider (the inverse of _value)\n */\n _pctOfBar(value) {\n var pctOfBar = percent(value - this.options.start, this.options.end - this.options.start)\n\n switch(this.options.positionValueFunction) {\n case \"pow\":\n pctOfBar = this._logTransform(pctOfBar);\n break;\n case \"log\":\n pctOfBar = this._powTransform(pctOfBar);\n break;\n }\n\n return pctOfBar.toFixed(2)\n }\n\n /**\n * @function\n * @private\n * @param {Number} pctOfBar - floating point, the relative position of the slider (typically between 0-1) to be transformed to a value\n */\n _value(pctOfBar) {\n switch(this.options.positionValueFunction) {\n case \"pow\":\n pctOfBar = this._powTransform(pctOfBar);\n break;\n case \"log\":\n pctOfBar = this._logTransform(pctOfBar);\n break;\n }\n\n var value\n if (this.options.vertical) {\n // linear interpolation which is working with negative values for start\n // https://math.stackexchange.com/a/1019084\n value = parseFloat(this.options.end) + pctOfBar * (this.options.start - this.options.end)\n } else {\n value = (this.options.end - this.options.start) * pctOfBar + parseFloat(this.options.start);\n }\n\n return value\n }\n\n /**\n * @function\n * @private\n * @param {Number} value - floating point (typically between 0-1) to be transformed using the log function\n */\n _logTransform(value) {\n return baseLog(this.options.nonLinearBase, ((value*(this.options.nonLinearBase-1))+1))\n }\n\n /**\n * @function\n * @private\n * @param {Number} value - floating point (typically between 0-1) to be transformed using the power function\n */\n _powTransform(value) {\n return (Math.pow(this.options.nonLinearBase, value) - 1) / (this.options.nonLinearBase - 1)\n }\n\n /**\n * Sets the position of the selected handle and fill bar.\n * @function\n * @private\n * @param {jQuery} $hndl - the selected handle to move.\n * @param {Number} location - floating point between the start and end values of the slider bar.\n * @param {Function} cb - callback function to fire on completion.\n * @fires Slider#moved\n * @fires Slider#changed\n */\n _setHandlePos($hndl, location, cb) {\n // don't move if the slider has been disabled since its initialization\n if (this.$element.hasClass(this.options.disabledClass)) {\n return;\n }\n //might need to alter that slightly for bars that will have odd number selections.\n location = parseFloat(location);//on input change events, convert string to number...grumble.\n\n // prevent slider from running out of bounds, if value exceeds the limits set through options, override the value to min/max\n if (location < this.options.start) { location = this.options.start; }\n else if (location > this.options.end) { location = this.options.end; }\n\n var isDbl = this.options.doubleSided;\n\n if (isDbl) { //this block is to prevent 2 handles from crossing eachother. Could/should be improved.\n if (this.handles.index($hndl) === 0) {\n var h2Val = parseFloat(this.$handle2.attr('aria-valuenow'));\n location = location >= h2Val ? h2Val - this.options.step : location;\n } else {\n var h1Val = parseFloat(this.$handle.attr('aria-valuenow'));\n location = location <= h1Val ? h1Val + this.options.step : location;\n }\n }\n\n var _this = this,\n vert = this.options.vertical,\n hOrW = vert ? 'height' : 'width',\n lOrT = vert ? 'top' : 'left',\n handleDim = $hndl[0].getBoundingClientRect()[hOrW],\n elemDim = this.$element[0].getBoundingClientRect()[hOrW],\n //percentage of bar min/max value based on click or drag point\n pctOfBar = this._pctOfBar(location),\n //number of actual pixels to shift the handle, based on the percentage obtained above\n pxToMove = (elemDim - handleDim) * pctOfBar,\n //percentage of bar to shift the handle\n movement = (percent(pxToMove, elemDim) * 100).toFixed(this.options.decimal);\n //fixing the decimal value for the location number, is passed to other methods as a fixed floating-point value\n location = parseFloat(location.toFixed(this.options.decimal));\n // declare empty object for css adjustments, only used with 2 handled-sliders\n var css = {};\n\n this._setValues($hndl, location);\n\n // TODO update to calculate based on values set to respective inputs??\n if (isDbl) {\n var isLeftHndl = this.handles.index($hndl) === 0,\n //empty variable, will be used for min-height/width for fill bar\n dim,\n //percentage w/h of the handle compared to the slider bar\n handlePct = Math.floor(percent(handleDim, elemDim) * 100);\n //if left handle, the math is slightly different than if it's the right handle, and the left/top property needs to be changed for the fill bar\n if (isLeftHndl) {\n //left or top percentage value to apply to the fill bar.\n css[lOrT] = `${movement}%`;\n //calculate the new min-height/width for the fill bar.\n dim = parseFloat(this.$handle2[0].style[lOrT]) - movement + handlePct;\n //this callback is necessary to prevent errors and allow the proper placement and initialization of a 2-handled slider\n //plus, it means we don't care if 'dim' isNaN on init, it won't be in the future.\n if (cb && typeof cb === 'function') { cb(); }//this is only needed for the initialization of 2 handled sliders\n } else {\n //just caching the value of the left/bottom handle's left/top property\n var handlePos = parseFloat(this.$handle[0].style[lOrT]);\n //calculate the new min-height/width for the fill bar. Use isNaN to prevent false positives for numbers <= 0\n //based on the percentage of movement of the handle being manipulated, less the opposing handle's left/top position, plus the percentage w/h of the handle itself\n dim = movement - (isNaN(handlePos) ? (this.options.initialStart - this.options.start)/((this.options.end-this.options.start)/100) : handlePos) + handlePct;\n }\n // assign the min-height/width to our css object\n css[`min-${hOrW}`] = `${dim}%`;\n }\n\n //because we don't know exactly how the handle will be moved, check the amount of time it should take to move.\n var moveTime = this.$element.data('dragging') ? 1000/60 : this.options.moveTime;\n\n Move(moveTime, $hndl, function() {\n // adjusting the left/top property of the handle, based on the percentage calculated above\n // if movement isNaN, that is because the slider is hidden and we cannot determine handle width,\n // fall back to next best guess.\n if (isNaN(movement)) {\n $hndl.css(lOrT, `${pctOfBar * 100}%`);\n }\n else {\n $hndl.css(lOrT, `${movement}%`);\n }\n\n if (!_this.options.doubleSided) {\n //if single-handled, a simple method to expand the fill bar\n _this.$fill.css(hOrW, `${pctOfBar * 100}%`);\n } else {\n //otherwise, use the css object we created above\n _this.$fill.css(css);\n }\n });\n\n if (this.initialized) {\n this.$element.one('finished.zf.animate', function() {\n /**\n * Fires when the handle is done moving.\n * @event Slider#moved\n */\n _this.$element.trigger('moved.zf.slider', [$hndl]);\n });\n /**\n * Fires when the value has not been change for a given time.\n * @event Slider#changed\n */\n clearTimeout(_this.timeout);\n _this.timeout = setTimeout(function(){\n _this.$element.trigger('changed.zf.slider', [$hndl]);\n }, _this.options.changedDelay);\n }\n }\n\n /**\n * Sets the initial attribute for the slider element.\n * @function\n * @private\n * @param {Number} idx - index of the current handle/input to use.\n */\n _setInitAttr(idx) {\n var initVal = (idx === 0 ? this.options.initialStart : this.options.initialEnd)\n var id = this.inputs.eq(idx).attr('id') || GetYoDigits(6, 'slider');\n this.inputs.eq(idx).attr({\n 'id': id,\n 'max': this.options.end,\n 'min': this.options.start,\n 'step': this.options.step\n });\n this.inputs.eq(idx).val(initVal);\n this.handles.eq(idx).attr({\n 'role': 'slider',\n 'aria-controls': id,\n 'aria-valuemax': this.options.end,\n 'aria-valuemin': this.options.start,\n 'aria-valuenow': initVal,\n 'aria-orientation': this.options.vertical ? 'vertical' : 'horizontal',\n 'tabindex': 0\n });\n }\n\n /**\n * Sets the input and `aria-valuenow` values for the slider element.\n * @function\n * @private\n * @param {jQuery} $handle - the currently selected handle.\n * @param {Number} val - floating point of the new value.\n */\n _setValues($handle, val) {\n var idx = this.options.doubleSided ? this.handles.index($handle) : 0;\n this.inputs.eq(idx).val(val);\n $handle.attr('aria-valuenow', val);\n }\n\n /**\n * Handles events on the slider element.\n * Calculates the new location of the current handle.\n * If there are two handles and the bar was clicked, it determines which handle to move.\n * @function\n * @private\n * @param {Object} e - the `event` object passed from the listener.\n * @param {jQuery} $handle - the current handle to calculate for, if selected.\n * @param {Number} val - floating point number for the new value of the slider.\n * TODO clean this up, there's a lot of repeated code between this and the _setHandlePos fn.\n */\n _handleEvent(e, $handle, val) {\n var value;\n if (!val) {//click or drag events\n e.preventDefault();\n var _this = this,\n vertical = this.options.vertical,\n param = vertical ? 'height' : 'width',\n direction = vertical ? 'top' : 'left',\n eventOffset = vertical ? e.pageY : e.pageX,\n barDim = this.$element[0].getBoundingClientRect()[param],\n windowScroll = vertical ? $(window).scrollTop() : $(window).scrollLeft();\n\n var elemOffset = this.$element.offset()[direction];\n\n // touch events emulated by the touch util give position relative to screen, add window.scroll to event coordinates...\n // best way to guess this is simulated is if clientY == pageY\n if (e.clientY === e.pageY) { eventOffset = eventOffset + windowScroll; }\n var eventFromBar = eventOffset - elemOffset;\n var barXY;\n if (eventFromBar < 0) {\n barXY = 0;\n } else if (eventFromBar > barDim) {\n barXY = barDim;\n } else {\n barXY = eventFromBar;\n }\n var offsetPct = percent(barXY, barDim);\n\n value = this._value(offsetPct);\n\n // turn everything around for RTL, yay math!\n if (Rtl() && !this.options.vertical) {value = this.options.end - value;}\n\n value = _this._adjustValue(null, value);\n\n if (!$handle) {//figure out which handle it is, pass it to the next function.\n var firstHndlPos = absPosition(this.$handle, direction, barXY, param),\n secndHndlPos = absPosition(this.$handle2, direction, barXY, param);\n $handle = firstHndlPos <= secndHndlPos ? this.$handle : this.$handle2;\n }\n\n } else {//change event on input\n value = this._adjustValue(null, val);\n }\n\n this._setHandlePos($handle, value);\n }\n\n /**\n * Adjustes value for handle in regard to step value. returns adjusted value\n * @function\n * @private\n * @param {jQuery} $handle - the selected handle.\n * @param {Number} value - value to adjust. used if $handle is falsy\n */\n _adjustValue($handle, value) {\n var val,\n step = this.options.step,\n div = parseFloat(step/2),\n left, previousVal, nextVal;\n if (!!$handle) {\n val = parseFloat($handle.attr('aria-valuenow'));\n }\n else {\n val = value;\n }\n if (val >= 0) {\n left = val % step;\n } else {\n left = step + (val % step);\n }\n previousVal = val - left;\n nextVal = previousVal + step;\n if (left === 0) {\n return val;\n }\n val = val >= previousVal + div ? nextVal : previousVal;\n return val;\n }\n\n /**\n * Adds event listeners to the slider elements.\n * @function\n * @private\n */\n _events() {\n this._eventsForHandle(this.$handle);\n if(this.handles[1]) {\n this._eventsForHandle(this.$handle2);\n }\n }\n\n\n /**\n * Adds event listeners a particular handle\n * @function\n * @private\n * @param {jQuery} $handle - the current handle to apply listeners to.\n */\n _eventsForHandle($handle) {\n var _this = this,\n curHandle;\n\n const handleChangeEvent = function(e) {\n const idx = _this.inputs.index($(this));\n _this._handleEvent(e, _this.handles.eq(idx), $(this).val());\n };\n\n // IE only triggers the change event when the input loses focus which strictly follows the HTML specification\n // listen for the enter key and trigger a change\n // @see https://html.spec.whatwg.org/multipage/input.html#common-input-element-events\n this.inputs.off('keyup.zf.slider').on('keyup.zf.slider', function (e) {\n if(e.keyCode === 13) handleChangeEvent.call(this, e);\n });\n\n this.inputs.off('change.zf.slider').on('change.zf.slider', handleChangeEvent);\n\n if (this.options.clickSelect) {\n this.$element.off('click.zf.slider').on('click.zf.slider', function(e) {\n if (_this.$element.data('dragging')) { return false; }\n\n if (!$(e.target).is('[data-slider-handle]')) {\n if (_this.options.doubleSided) {\n _this._handleEvent(e);\n } else {\n _this._handleEvent(e, _this.$handle);\n }\n }\n });\n }\n\n if (this.options.draggable) {\n this.handles.addTouch();\n\n var $body = $('body');\n $handle\n .off('mousedown.zf.slider')\n .on('mousedown.zf.slider', function(e) {\n $handle.addClass('is-dragging');\n _this.$fill.addClass('is-dragging');//\n _this.$element.data('dragging', true);\n\n curHandle = $(e.currentTarget);\n\n $body.on('mousemove.zf.slider', function(ev) {\n ev.preventDefault();\n _this._handleEvent(ev, curHandle);\n\n }).on('mouseup.zf.slider', function(ev) {\n _this._handleEvent(ev, curHandle);\n\n $handle.removeClass('is-dragging');\n _this.$fill.removeClass('is-dragging');\n _this.$element.data('dragging', false);\n\n $body.off('mousemove.zf.slider mouseup.zf.slider');\n });\n })\n // prevent events triggered by touch\n .on('selectstart.zf.slider touchmove.zf.slider', function(e) {\n e.preventDefault();\n });\n }\n\n $handle.off('keydown.zf.slider').on('keydown.zf.slider', function(e) {\n var _$handle = $(this),\n idx = _this.options.doubleSided ? _this.handles.index(_$handle) : 0,\n oldValue = parseFloat($handle.attr('aria-valuenow')),\n newValue;\n\n // handle keyboard event with keyboard util\n Keyboard.handleKey(e, 'Slider', {\n decrease: function() {\n newValue = oldValue - _this.options.step;\n },\n increase: function() {\n newValue = oldValue + _this.options.step;\n },\n decreaseFast: function() {\n newValue = oldValue - _this.options.step * 10;\n },\n increaseFast: function() {\n newValue = oldValue + _this.options.step * 10;\n },\n min: function() {\n newValue = _this.options.start;\n },\n max: function() {\n newValue = _this.options.end;\n },\n handled: function() { // only set handle pos when event was handled specially\n e.preventDefault();\n _this._setHandlePos(_$handle, newValue);\n }\n });\n /*if (newValue) { // if pressed key has special function, update value\n e.preventDefault();\n _this._setHandlePos(_$handle, newValue);\n }*/\n });\n }\n\n /**\n * Destroys the slider plugin.\n */\n _destroy() {\n this.handles.off('.zf.slider');\n this.inputs.off('.zf.slider');\n this.$element.off('.zf.slider');\n\n clearTimeout(this.timeout);\n }\n}\n\nSlider.defaults = {\n /**\n * Minimum value for the slider scale.\n * @option\n * @type {number}\n * @default 0\n */\n start: 0,\n /**\n * Maximum value for the slider scale.\n * @option\n * @type {number}\n * @default 100\n */\n end: 100,\n /**\n * Minimum value change per change event.\n * @option\n * @type {number}\n * @default 1\n */\n step: 1,\n /**\n * Value at which the handle/input *(left handle/first input)* should be set to on initialization.\n * @option\n * @type {number}\n * @default 0\n */\n initialStart: 0,\n /**\n * Value at which the right handle/second input should be set to on initialization.\n * @option\n * @type {number}\n * @default 100\n */\n initialEnd: 100,\n /**\n * Allows the input to be located outside the container and visible. Set to by the JS\n * @option\n * @type {boolean}\n * @default false\n */\n binding: false,\n /**\n * Allows the user to click/tap on the slider bar to select a value.\n * @option\n * @type {boolean}\n * @default true\n */\n clickSelect: true,\n /**\n * Set to true and use the `vertical` class to change alignment to vertical.\n * @option\n * @type {boolean}\n * @default false\n */\n vertical: false,\n /**\n * Allows the user to drag the slider handle(s) to select a value.\n * @option\n * @type {boolean}\n * @default true\n */\n draggable: true,\n /**\n * Disables the slider and prevents event listeners from being applied. Double checked by JS with `disabledClass`.\n * @option\n * @type {boolean}\n * @default false\n */\n disabled: false,\n /**\n * Allows the use of two handles. Double checked by the JS. Changes some logic handling.\n * @option\n * @type {boolean}\n * @default false\n */\n doubleSided: false,\n /**\n * Potential future feature.\n */\n // steps: 100,\n /**\n * Number of decimal places the plugin should go to for floating point precision.\n * @option\n * @type {number}\n * @default 2\n */\n decimal: 2,\n /**\n * Time delay for dragged elements.\n */\n // dragDelay: 0,\n /**\n * Time, in ms, to animate the movement of a slider handle if user clicks/taps on the bar. Needs to be manually set if updating the transition time in the Sass settings.\n * @option\n * @type {number}\n * @default 200\n */\n moveTime: 200,//update this if changing the transition time in the sass\n /**\n * Class applied to disabled sliders.\n * @option\n * @type {string}\n * @default 'disabled'\n */\n disabledClass: 'disabled',\n /**\n * Will invert the default layout for a vertical slider.\n * @option\n * @type {boolean}\n * @default false\n */\n invertVertical: false,\n /**\n * Milliseconds before the `changed.zf-slider` event is triggered after value change.\n * @option\n * @type {number}\n * @default 500\n */\n changedDelay: 500,\n /**\n * Basevalue for non-linear sliders\n * @option\n * @type {number}\n * @default 5\n */\n nonLinearBase: 5,\n /**\n * Basevalue for non-linear sliders, possible values are: `'linear'`, `'pow'` & `'log'`. Pow and Log use the nonLinearBase setting.\n * @option\n * @type {string}\n * @default 'linear'\n */\n positionValueFunction: 'linear',\n};\n\nfunction percent(frac, num) {\n return (frac / num);\n}\nfunction absPosition($handle, dir, clickPos, param) {\n return Math.abs(($handle.position()[dir] + ($handle[param]() / 2)) - clickPos);\n}\nfunction baseLog(base, value) {\n return Math.log(value)/Math.log(base)\n}\n\nexport {Slider};\n","import $ from 'jquery';\nimport { GetYoDigits } from './foundation.core.utils';\nimport { Plugin } from './foundation.core.plugin';\n\n/**\n * SmoothScroll module.\n * @module foundation.smoothScroll\n */\nclass SmoothScroll extends Plugin {\n /**\n * Creates a new instance of SmoothScroll.\n * @class\n * @name SmoothScroll\n * @fires SmoothScroll#init\n * @param {Object} element - jQuery object to add the trigger to.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, SmoothScroll.defaults, this.$element.data(), options);\n this.className = 'SmoothScroll'; // ie9 back compat\n\n this._init();\n }\n\n /**\n * Initialize the SmoothScroll plugin\n * @private\n */\n _init() {\n const id = this.$element[0].id || GetYoDigits(6, 'smooth-scroll');\n this.$element.attr({ id });\n\n this._events();\n }\n\n /**\n * Initializes events for SmoothScroll.\n * @private\n */\n _events() {\n this._linkClickListener = this._handleLinkClick.bind(this);\n this.$element.on('click.zf.smoothScroll', this._linkClickListener);\n this.$element.on('click.zf.smoothScroll', 'a[href^=\"#\"]', this._linkClickListener);\n }\n\n /**\n * Handle the given event to smoothly scroll to the anchor pointed by the event target.\n * @param {*} e - event\n * @function\n * @private\n */\n _handleLinkClick(e) {\n // Follow the link if it does not point to an anchor.\n if (!$(e.currentTarget).is('a[href^=\"#\"]')) return;\n\n const arrival = e.currentTarget.getAttribute('href');\n\n this._inTransition = true;\n\n SmoothScroll.scrollToLoc(arrival, this.options, () => {\n this._inTransition = false;\n });\n\n e.preventDefault();\n };\n\n /**\n * Function to scroll to a given location on the page.\n * @param {String} loc - A properly formatted jQuery id selector. Example: '#foo'\n * @param {Object} options - The options to use.\n * @param {Function} callback - The callback function.\n * @static\n * @function\n */\n static scrollToLoc(loc, options = SmoothScroll.defaults, callback) {\n const $loc = $(loc);\n\n // Do nothing if target does not exist to prevent errors\n if (!$loc.length) return false;\n\n var scrollPos = Math.round($loc.offset().top - options.threshold / 2 - options.offset);\n\n $('html, body').stop(true).animate(\n { scrollTop: scrollPos },\n options.animationDuration,\n options.animationEasing,\n () => {\n if (typeof callback === 'function'){\n callback();\n }\n }\n );\n }\n\n /**\n * Destroys the SmoothScroll instance.\n * @function\n */\n _destroy() {\n this.$element.off('click.zf.smoothScroll', this._linkClickListener)\n this.$element.off('click.zf.smoothScroll', 'a[href^=\"#\"]', this._linkClickListener);\n }\n}\n\n/**\n * Default settings for plugin.\n */\nSmoothScroll.defaults = {\n /**\n * Amount of time, in ms, the animated scrolling should take between locations.\n * @option\n * @type {number}\n * @default 500\n */\n animationDuration: 500,\n /**\n * Animation style to use when scrolling between locations. Can be `'swing'` or `'linear'`.\n * @option\n * @type {string}\n * @default 'linear'\n * @see {@link https://api.jquery.com/animate|Jquery animate}\n */\n animationEasing: 'linear',\n /**\n * Number of pixels to use as a marker for location changes.\n * @option\n * @type {number}\n * @default 50\n */\n threshold: 50,\n /**\n * Number of pixels to offset the scroll of the page on item click if using a sticky nav bar.\n * @option\n * @type {number}\n * @default 0\n */\n offset: 0\n}\n\nexport {SmoothScroll}\n","import $ from 'jquery';\nimport { Plugin } from './foundation.core.plugin';\nimport { onLoad, GetYoDigits } from './foundation.core.utils';\nimport { MediaQuery } from './foundation.util.mediaQuery';\nimport { Triggers } from './foundation.util.triggers';\n\n/**\n * Sticky module.\n * @module foundation.sticky\n * @requires foundation.util.triggers\n * @requires foundation.util.mediaQuery\n */\n\nclass Sticky extends Plugin {\n /**\n * Creates a new instance of a sticky thing.\n * @class\n * @name Sticky\n * @param {jQuery} element - jQuery object to make sticky.\n * @param {Object} options - options object passed when creating the element programmatically.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, Sticky.defaults, this.$element.data(), options);\n this.className = 'Sticky'; // ie9 back compat\n\n // Triggers init is idempotent, just need to make sure it is initialized\n Triggers.init($);\n\n this._init();\n }\n\n /**\n * Initializes the sticky element by adding classes, getting/setting dimensions, breakpoints and attributes\n * @function\n * @private\n */\n _init() {\n MediaQuery._init();\n\n var $parent = this.$element.parent('[data-sticky-container]'),\n id = this.$element[0].id || GetYoDigits(6, 'sticky'),\n _this = this;\n\n if($parent.length){\n this.$container = $parent;\n } else {\n this.wasWrapped = true;\n this.$element.wrap(this.options.container);\n this.$container = this.$element.parent();\n }\n this.$container.addClass(this.options.containerClass);\n\n this.$element.addClass(this.options.stickyClass).attr({ 'data-resize': id, 'data-mutate': id });\n if (this.options.anchor !== '') {\n $('#' + _this.options.anchor).attr({ 'data-mutate': id });\n }\n\n this.scrollCount = this.options.checkEvery;\n this.isStuck = false;\n this.onLoadListener = onLoad($(window), function () {\n //We calculate the container height to have correct values for anchor points offset calculation.\n _this.containerHeight = _this.$element.css(\"display\") === \"none\" ? 0 : _this.$element[0].getBoundingClientRect().height;\n _this.$container.css('height', _this.containerHeight);\n _this.elemHeight = _this.containerHeight;\n if (_this.options.anchor !== '') {\n _this.$anchor = $('#' + _this.options.anchor);\n } else {\n _this._parsePoints();\n }\n\n _this._setSizes(function () {\n var scroll = window.pageYOffset;\n _this._calc(false, scroll);\n //Unstick the element will ensure that proper classes are set.\n if (!_this.isStuck) {\n _this._removeSticky((scroll >= _this.topPoint) ? false : true);\n }\n });\n _this._events(id.split('-').reverse().join('-'));\n });\n }\n\n /**\n * If using multiple elements as anchors, calculates the top and bottom pixel values the sticky thing should stick and unstick on.\n * @function\n * @private\n */\n _parsePoints() {\n var top = this.options.topAnchor === \"\" ? 1 : this.options.topAnchor,\n btm = this.options.btmAnchor === \"\" ? document.documentElement.scrollHeight : this.options.btmAnchor,\n pts = [top, btm],\n breaks = {};\n for (var i = 0, len = pts.length; i < len && pts[i]; i++) {\n var pt;\n if (typeof pts[i] === 'number') {\n pt = pts[i];\n } else {\n var place = pts[i].split(':'),\n anchor = $(`#${place[0]}`);\n\n pt = anchor.offset().top;\n if (place[1] && place[1].toLowerCase() === 'bottom') {\n pt += anchor[0].getBoundingClientRect().height;\n }\n }\n breaks[i] = pt;\n }\n\n\n this.points = breaks;\n return;\n }\n\n /**\n * Adds event handlers for the scrolling element.\n * @private\n * @param {String} id - pseudo-random id for unique scroll event listener.\n */\n _events(id) {\n var _this = this,\n scrollListener = this.scrollListener = `scroll.zf.${id}`;\n if (this.isOn) { return; }\n if (this.canStick) {\n this.isOn = true;\n $(window).off(scrollListener)\n .on(scrollListener, function() {\n if (_this.scrollCount === 0) {\n _this.scrollCount = _this.options.checkEvery;\n _this._setSizes(function() {\n _this._calc(false, window.pageYOffset);\n });\n } else {\n _this.scrollCount--;\n _this._calc(false, window.pageYOffset);\n }\n });\n }\n\n this.$element.off('resizeme.zf.trigger')\n .on('resizeme.zf.trigger', function() {\n _this._eventsHandler(id);\n });\n\n this.$element.on('mutateme.zf.trigger', function () {\n _this._eventsHandler(id);\n });\n\n if(this.$anchor) {\n this.$anchor.on('mutateme.zf.trigger', function () {\n _this._eventsHandler(id);\n });\n }\n }\n\n /**\n * Handler for events.\n * @private\n * @param {String} id - pseudo-random id for unique scroll event listener.\n */\n _eventsHandler(id) {\n var _this = this,\n scrollListener = this.scrollListener = `scroll.zf.${id}`;\n\n _this._setSizes(function() {\n _this._calc(false);\n if (_this.canStick) {\n if (!_this.isOn) {\n _this._events(id);\n }\n } else if (_this.isOn) {\n _this._pauseListeners(scrollListener);\n }\n });\n }\n\n /**\n * Removes event handlers for scroll and change events on anchor.\n * @fires Sticky#pause\n * @param {String} scrollListener - unique, namespaced scroll listener attached to `window`\n */\n _pauseListeners(scrollListener) {\n this.isOn = false;\n $(window).off(scrollListener);\n\n /**\n * Fires when the plugin is paused due to resize event shrinking the view.\n * @event Sticky#pause\n * @private\n */\n this.$element.trigger('pause.zf.sticky');\n }\n\n /**\n * Called on every `scroll` event and on `_init`\n * fires functions based on booleans and cached values\n * @param {Boolean} checkSizes - true if plugin should recalculate sizes and breakpoints.\n * @param {Number} scroll - current scroll position passed from scroll event cb function. If not passed, defaults to `window.pageYOffset`.\n */\n _calc(checkSizes, scroll) {\n if (checkSizes) { this._setSizes(); }\n\n if (!this.canStick) {\n if (this.isStuck) {\n this._removeSticky(true);\n }\n return false;\n }\n\n if (!scroll) { scroll = window.pageYOffset; }\n\n if (scroll >= this.topPoint) {\n if (scroll <= this.bottomPoint) {\n if (!this.isStuck) {\n this._setSticky();\n }\n } else {\n if (this.isStuck) {\n this._removeSticky(false);\n }\n }\n } else {\n if (this.isStuck) {\n this._removeSticky(true);\n }\n }\n }\n\n /**\n * Causes the $element to become stuck.\n * Adds `position: fixed;`, and helper classes.\n * @fires Sticky#stuckto\n * @function\n * @private\n */\n _setSticky() {\n var _this = this,\n stickTo = this.options.stickTo,\n mrgn = stickTo === 'top' ? 'marginTop' : 'marginBottom',\n notStuckTo = stickTo === 'top' ? 'bottom' : 'top',\n css = {};\n\n css[mrgn] = `${this.options[mrgn]}em`;\n css[stickTo] = 0;\n css[notStuckTo] = 'auto';\n this.isStuck = true;\n this.$element.removeClass(`is-anchored is-at-${notStuckTo}`)\n .addClass(`is-stuck is-at-${stickTo}`)\n .css(css)\n /**\n * Fires when the $element has become `position: fixed;`\n * Namespaced to `top` or `bottom`, e.g. `sticky.zf.stuckto:top`\n * @event Sticky#stuckto\n */\n .trigger(`sticky.zf.stuckto:${stickTo}`);\n this.$element.on(\"transitionend webkitTransitionEnd oTransitionEnd otransitionend MSTransitionEnd\", function() {\n _this._setSizes();\n });\n }\n\n /**\n * Causes the $element to become unstuck.\n * Removes `position: fixed;`, and helper classes.\n * Adds other helper classes.\n * @param {Boolean} isTop - tells the function if the $element should anchor to the top or bottom of its $anchor element.\n * @fires Sticky#unstuckfrom\n * @private\n */\n _removeSticky(isTop) {\n var stickTo = this.options.stickTo,\n stickToTop = stickTo === 'top',\n css = {},\n anchorPt = (this.points ? this.points[1] - this.points[0] : this.anchorHeight) - this.elemHeight,\n mrgn = stickToTop ? 'marginTop' : 'marginBottom',\n topOrBottom = isTop ? 'top' : 'bottom';\n\n css[mrgn] = 0;\n\n css.bottom = 'auto';\n if(isTop) {\n css.top = 0;\n } else {\n css.top = anchorPt;\n }\n\n this.isStuck = false;\n this.$element.removeClass(`is-stuck is-at-${stickTo}`)\n .addClass(`is-anchored is-at-${topOrBottom}`)\n .css(css)\n /**\n * Fires when the $element has become anchored.\n * Namespaced to `top` or `bottom`, e.g. `sticky.zf.unstuckfrom:bottom`\n * @event Sticky#unstuckfrom\n */\n .trigger(`sticky.zf.unstuckfrom:${topOrBottom}`);\n }\n\n /**\n * Sets the $element and $container sizes for plugin.\n * Calls `_setBreakPoints`.\n * @param {Function} cb - optional callback function to fire on completion of `_setBreakPoints`.\n * @private\n */\n _setSizes(cb) {\n this.canStick = MediaQuery.is(this.options.stickyOn);\n if (!this.canStick) {\n if (cb && typeof cb === 'function') { cb(); }\n }\n\n var newElemWidth = this.$container[0].getBoundingClientRect().width,\n comp = window.getComputedStyle(this.$container[0]),\n pdngl = parseInt(comp['padding-left'], 10),\n pdngr = parseInt(comp['padding-right'], 10);\n\n if (this.$anchor && this.$anchor.length) {\n this.anchorHeight = this.$anchor[0].getBoundingClientRect().height;\n } else {\n this._parsePoints();\n }\n\n this.$element.css({\n 'max-width': `${newElemWidth - pdngl - pdngr}px`\n });\n\n // Recalculate the height only if it is \"dynamic\"\n if (this.options.dynamicHeight || !this.containerHeight) {\n // Get the sticked element height and apply it to the container to \"hold the place\"\n var newContainerHeight = this.$element[0].getBoundingClientRect().height || this.containerHeight;\n newContainerHeight = this.$element.css(\"display\") === \"none\" ? 0 : newContainerHeight;\n this.$container.css('height', newContainerHeight);\n this.containerHeight = newContainerHeight;\n }\n this.elemHeight = this.containerHeight;\n\n if (!this.isStuck) {\n if (this.$element.hasClass('is-at-bottom')) {\n var anchorPt = (this.points ? this.points[1] - this.$container.offset().top : this.anchorHeight) - this.elemHeight;\n this.$element.css('top', anchorPt);\n }\n }\n\n this._setBreakPoints(this.containerHeight, function() {\n if (cb && typeof cb === 'function') { cb(); }\n });\n }\n\n /**\n * Sets the upper and lower breakpoints for the element to become sticky/unsticky.\n * @param {Number} elemHeight - px value for sticky.$element height, calculated by `_setSizes`.\n * @param {Function} cb - optional callback function to be called on completion.\n * @private\n */\n _setBreakPoints(elemHeight, cb) {\n if (!this.canStick) {\n if (cb && typeof cb === 'function') { cb(); }\n else { return false; }\n }\n var mTop = emCalc(this.options.marginTop),\n mBtm = emCalc(this.options.marginBottom),\n topPoint = this.points ? this.points[0] : this.$anchor.offset().top,\n bottomPoint = this.points ? this.points[1] : topPoint + this.anchorHeight,\n // topPoint = this.$anchor.offset().top || this.points[0],\n // bottomPoint = topPoint + this.anchorHeight || this.points[1],\n winHeight = window.innerHeight;\n\n if (this.options.stickTo === 'top') {\n topPoint -= mTop;\n bottomPoint -= (elemHeight + mTop);\n } else if (this.options.stickTo === 'bottom') {\n topPoint -= (winHeight - (elemHeight + mBtm));\n bottomPoint -= (winHeight - mBtm);\n } else {\n //this would be the stickTo: both option... tricky\n }\n\n this.topPoint = topPoint;\n this.bottomPoint = bottomPoint;\n\n if (cb && typeof cb === 'function') { cb(); }\n }\n\n /**\n * Destroys the current sticky element.\n * Resets the element to the top position first.\n * Removes event listeners, JS-added css properties and classes, and unwraps the $element if the JS added the $container.\n * @function\n */\n _destroy() {\n this._removeSticky(true);\n\n this.$element.removeClass(`${this.options.stickyClass} is-anchored is-at-top`)\n .css({\n height: '',\n top: '',\n bottom: '',\n 'max-width': ''\n })\n .off('resizeme.zf.trigger')\n .off('mutateme.zf.trigger');\n if (this.$anchor && this.$anchor.length) {\n this.$anchor.off('change.zf.sticky');\n }\n if (this.scrollListener) $(window).off(this.scrollListener)\n if (this.onLoadListener) $(window).off(this.onLoadListener)\n\n if (this.wasWrapped) {\n this.$element.unwrap();\n } else {\n this.$container.removeClass(this.options.containerClass)\n .css({\n height: ''\n });\n }\n }\n}\n\nSticky.defaults = {\n /**\n * Customizable container template. Add your own classes for styling and sizing.\n * @option\n * @type {string}\n * @default '<div data-sticky-container></div>'\n */\n container: '
    ',\n /**\n * Location in the view the element sticks to. Can be `'top'` or `'bottom'`.\n * @option\n * @type {string}\n * @default 'top'\n */\n stickTo: 'top',\n /**\n * If anchored to a single element, the id of that element.\n * @option\n * @type {string}\n * @default ''\n */\n anchor: '',\n /**\n * If using more than one element as anchor points, the id of the top anchor.\n * @option\n * @type {string}\n * @default ''\n */\n topAnchor: '',\n /**\n * If using more than one element as anchor points, the id of the bottom anchor.\n * @option\n * @type {string}\n * @default ''\n */\n btmAnchor: '',\n /**\n * Margin, in `em`'s to apply to the top of the element when it becomes sticky.\n * @option\n * @type {number}\n * @default 1\n */\n marginTop: 1,\n /**\n * Margin, in `em`'s to apply to the bottom of the element when it becomes sticky.\n * @option\n * @type {number}\n * @default 1\n */\n marginBottom: 1,\n /**\n * Breakpoint string that is the minimum screen size an element should become sticky.\n * @option\n * @type {string}\n * @default 'medium'\n */\n stickyOn: 'medium',\n /**\n * Class applied to sticky element, and removed on destruction. Foundation defaults to `sticky`.\n * @option\n * @type {string}\n * @default 'sticky'\n */\n stickyClass: 'sticky',\n /**\n * Class applied to sticky container. Foundation defaults to `sticky-container`.\n * @option\n * @type {string}\n * @default 'sticky-container'\n */\n containerClass: 'sticky-container',\n /**\n * If true (by default), keep the sticky container the same height as the element. Otherwise, the container height is set once and does not change.\n * @option\n * @type {boolean}\n * @default true\n */\n dynamicHeight: true,\n /**\n * Number of scroll events between the plugin's recalculating sticky points. Setting it to `0` will cause it to recalc every scroll event, setting it to `-1` will prevent recalc on scroll.\n * @option\n * @type {number}\n * @default -1\n */\n checkEvery: -1\n};\n\n/**\n * Helper function to calculate em values\n * @param Number {em} - number of em's to calculate into pixels\n */\nfunction emCalc(em) {\n return parseInt(window.getComputedStyle(document.body, null).fontSize, 10) * em;\n}\n\nexport {Sticky};\n","import $ from 'jquery';\nimport { Plugin } from './foundation.core.plugin';\nimport { onLoad } from './foundation.core.utils';\nimport { Keyboard } from './foundation.util.keyboard';\nimport { onImagesLoaded } from './foundation.util.imageLoader';\n/**\n * Tabs module.\n * @module foundation.tabs\n * @requires foundation.util.keyboard\n * @requires foundation.util.imageLoader if tabs contain images\n */\n\nclass Tabs extends Plugin {\n /**\n * Creates a new instance of tabs.\n * @class\n * @name Tabs\n * @fires Tabs#init\n * @param {jQuery} element - jQuery object to make into tabs.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, Tabs.defaults, this.$element.data(), options);\n this.className = 'Tabs'; // ie9 back compat\n\n this._init();\n Keyboard.register('Tabs', {\n 'ENTER': 'open',\n 'SPACE': 'open',\n 'ARROW_RIGHT': 'next',\n 'ARROW_UP': 'previous',\n 'ARROW_DOWN': 'next',\n 'ARROW_LEFT': 'previous'\n // 'TAB': 'next',\n // 'SHIFT_TAB': 'previous'\n });\n }\n\n /**\n * Initializes the tabs by showing and focusing (if autoFocus=true) the preset active tab.\n * @private\n */\n _init() {\n var _this = this;\n this._isInitializing = true;\n\n this.$element.attr({'role': 'tablist'});\n this.$tabTitles = this.$element.find(`.${this.options.linkClass}`);\n this.$tabContent = $(`[data-tabs-content=\"${this.$element[0].id}\"]`);\n\n this.$tabTitles.each(function(){\n var $elem = $(this),\n $link = $elem.find('a'),\n isActive = $elem.hasClass(`${_this.options.linkActiveClass}`),\n hash = $link.attr('data-tabs-target') || $link[0].hash.slice(1),\n linkId = $link[0].id ? $link[0].id : `${hash}-label`,\n $tabContent = $(`#${hash}`);\n\n $elem.attr({'role': 'presentation'});\n\n $link.attr({\n 'role': 'tab',\n 'aria-controls': hash,\n 'aria-selected': isActive,\n 'id': linkId,\n 'tabindex': isActive ? '0' : '-1'\n });\n\n $tabContent.attr({\n 'role': 'tabpanel',\n 'aria-labelledby': linkId\n });\n\n // Save up the initial hash to return to it later when going back in history\n if (isActive) {\n _this._initialAnchor = `#${hash}`;\n }\n\n if(!isActive) {\n $tabContent.attr('aria-hidden', 'true');\n }\n\n if(isActive && _this.options.autoFocus){\n _this.onLoadListener = onLoad($(window), function() {\n $('html, body').animate({ scrollTop: $elem.offset().top }, _this.options.deepLinkSmudgeDelay, () => {\n $link.focus();\n });\n });\n }\n });\n\n if(this.options.matchHeight) {\n var $images = this.$tabContent.find('img');\n\n if ($images.length) {\n onImagesLoaded($images, this._setHeight.bind(this));\n } else {\n this._setHeight();\n }\n }\n\n // Current context-bound function to open tabs on page load or history hashchange\n this._checkDeepLink = () => {\n var anchor = window.location.hash;\n\n if (!anchor.length) {\n // If we are still initializing and there is no anchor, then there is nothing to do\n if (this._isInitializing) return;\n // Otherwise, move to the initial anchor\n if (this._initialAnchor) anchor = this._initialAnchor;\n }\n\n var anchorNoHash = anchor.indexOf('#') >= 0 ? anchor.slice(1) : anchor;\n var $anchor = anchorNoHash && $(`#${anchorNoHash}`);\n var $link = anchor && this.$element.find(`[href$=\"${anchor}\"],[data-tabs-target=\"${anchorNoHash}\"]`).first();\n // Whether the anchor element that has been found is part of this element\n var isOwnAnchor = !!($anchor.length && $link.length);\n\n if (isOwnAnchor) {\n // If there is an anchor for the hash, select it\n if ($anchor && $anchor.length && $link && $link.length) {\n this.selectTab($anchor, true);\n }\n // Otherwise, collapse everything\n else {\n this._collapse();\n }\n\n // Roll up a little to show the titles\n if (this.options.deepLinkSmudge) {\n var offset = this.$element.offset();\n $('html, body').animate({ scrollTop: offset.top - this.options.deepLinkSmudgeOffset}, this.options.deepLinkSmudgeDelay);\n }\n\n /**\n * Fires when the plugin has deeplinked at pageload\n * @event Tabs#deeplink\n */\n this.$element.trigger('deeplink.zf.tabs', [$link, $anchor]);\n }\n }\n\n //use browser to open a tab, if it exists in this tabset\n if (this.options.deepLink) {\n this._checkDeepLink();\n }\n\n this._events();\n\n this._isInitializing = false;\n }\n\n /**\n * Adds event handlers for items within the tabs.\n * @private\n */\n _events() {\n this._addKeyHandler();\n this._addClickHandler();\n this._setHeightMqHandler = null;\n\n if (this.options.matchHeight) {\n this._setHeightMqHandler = this._setHeight.bind(this);\n\n $(window).on('changed.zf.mediaquery', this._setHeightMqHandler);\n }\n\n if(this.options.deepLink) {\n $(window).on('hashchange', this._checkDeepLink);\n }\n }\n\n /**\n * Adds click handlers for items within the tabs.\n * @private\n */\n _addClickHandler() {\n var _this = this;\n\n this.$element\n .off('click.zf.tabs')\n .on('click.zf.tabs', `.${this.options.linkClass}`, function(e){\n e.preventDefault();\n _this._handleTabChange($(this));\n });\n }\n\n /**\n * Adds keyboard event handlers for items within the tabs.\n * @private\n */\n _addKeyHandler() {\n var _this = this;\n\n this.$tabTitles.off('keydown.zf.tabs').on('keydown.zf.tabs', function(e){\n if (e.which === 9) return;\n\n\n var $element = $(this),\n $elements = $element.parent('ul').children('li'),\n $prevElement,\n $nextElement;\n\n $elements.each(function(i) {\n if ($(this).is($element)) {\n if (_this.options.wrapOnKeys) {\n $prevElement = i === 0 ? $elements.last() : $elements.eq(i-1);\n $nextElement = i === $elements.length -1 ? $elements.first() : $elements.eq(i+1);\n } else {\n $prevElement = $elements.eq(Math.max(0, i-1));\n $nextElement = $elements.eq(Math.min(i+1, $elements.length-1));\n }\n return;\n }\n });\n\n // handle keyboard event with keyboard util\n Keyboard.handleKey(e, 'Tabs', {\n open: function() {\n $element.find('[role=\"tab\"]').focus();\n _this._handleTabChange($element);\n },\n previous: function() {\n $prevElement.find('[role=\"tab\"]').focus();\n _this._handleTabChange($prevElement);\n },\n next: function() {\n $nextElement.find('[role=\"tab\"]').focus();\n _this._handleTabChange($nextElement);\n },\n handled: function() {\n e.preventDefault();\n }\n });\n });\n }\n\n /**\n * Opens the tab `$targetContent` defined by `$target`. Collapses active tab.\n * @param {jQuery} $target - Tab to open.\n * @param {boolean} historyHandled - browser has already handled a history update\n * @fires Tabs#change\n * @function\n */\n _handleTabChange($target, historyHandled) {\n\n // With `activeCollapse`, if the target is the active Tab, collapse it.\n if ($target.hasClass(`${this.options.linkActiveClass}`)) {\n if(this.options.activeCollapse) {\n this._collapse();\n }\n return;\n }\n\n var $oldTab = this.$element.\n find(`.${this.options.linkClass}.${this.options.linkActiveClass}`),\n $tabLink = $target.find('[role=\"tab\"]'),\n target = $tabLink.attr('data-tabs-target'),\n anchor = target && target.length ? `#${target}` : $tabLink[0].hash,\n $targetContent = this.$tabContent.find(anchor);\n\n //close old tab\n this._collapseTab($oldTab);\n\n //open new tab\n this._openTab($target);\n\n //either replace or update browser history\n if (this.options.deepLink && !historyHandled) {\n if (this.options.updateHistory) {\n history.pushState({}, '', anchor);\n } else {\n history.replaceState({}, '', anchor);\n }\n }\n\n /**\n * Fires when the plugin has successfully changed tabs.\n * @event Tabs#change\n */\n this.$element.trigger('change.zf.tabs', [$target, $targetContent]);\n\n //fire to children a mutation event\n $targetContent.find(\"[data-mutate]\").trigger(\"mutateme.zf.trigger\");\n }\n\n /**\n * Opens the tab `$targetContent` defined by `$target`.\n * @param {jQuery} $target - Tab to open.\n * @function\n */\n _openTab($target) {\n var $tabLink = $target.find('[role=\"tab\"]'),\n hash = $tabLink.attr('data-tabs-target') || $tabLink[0].hash.slice(1),\n $targetContent = this.$tabContent.find(`#${hash}`);\n\n $target.addClass(`${this.options.linkActiveClass}`);\n\n $tabLink.attr({\n 'aria-selected': 'true',\n 'tabindex': '0'\n });\n\n $targetContent\n .addClass(`${this.options.panelActiveClass}`).removeAttr('aria-hidden');\n }\n\n /**\n * Collapses `$targetContent` defined by `$target`.\n * @param {jQuery} $target - Tab to collapse.\n * @function\n */\n _collapseTab($target) {\n var $targetAnchor = $target\n .removeClass(`${this.options.linkActiveClass}`)\n .find('[role=\"tab\"]')\n .attr({\n 'aria-selected': 'false',\n 'tabindex': -1\n });\n\n $(`#${$targetAnchor.attr('aria-controls')}`)\n .removeClass(`${this.options.panelActiveClass}`)\n .attr({ 'aria-hidden': 'true' })\n }\n\n /**\n * Collapses the active Tab.\n * @fires Tabs#collapse\n * @function\n */\n _collapse() {\n var $activeTab = this.$element.find(`.${this.options.linkClass}.${this.options.linkActiveClass}`);\n\n if ($activeTab.length) {\n this._collapseTab($activeTab);\n\n /**\n * Fires when the plugin has successfully collapsed tabs.\n * @event Tabs#collapse\n */\n this.$element.trigger('collapse.zf.tabs', [$activeTab]);\n }\n }\n\n /**\n * Public method for selecting a content pane to display.\n * @param {jQuery | String} elem - jQuery object or string of the id of the pane to display.\n * @param {boolean} historyHandled - browser has already handled a history update\n * @function\n */\n selectTab(elem, historyHandled) {\n var idStr, hashIdStr;\n\n if (typeof elem === 'object') {\n idStr = elem[0].id;\n } else {\n idStr = elem;\n }\n\n if (idStr.indexOf('#') < 0) {\n hashIdStr = `#${idStr}`;\n } else {\n hashIdStr = idStr;\n idStr = idStr.slice(1);\n }\n\n var $target = this.$tabTitles.has(`[href$=\"${hashIdStr}\"],[data-tabs-target=\"${idStr}\"]`).first();\n\n this._handleTabChange($target, historyHandled);\n };\n\n /**\n * Sets the height of each panel to the height of the tallest panel.\n * If enabled in options, gets called on media query change.\n * If loading content via external source, can be called directly or with _reflow.\n * If enabled with `data-match-height=\"true\"`, tabs sets to equal height\n * @function\n * @private\n */\n _setHeight() {\n var max = 0,\n _this = this; // Lock down the `this` value for the root tabs object\n\n if (!this.$tabContent) {\n return;\n }\n\n this.$tabContent\n .find(`.${this.options.panelClass}`)\n .css('min-height', '')\n .each(function() {\n\n var panel = $(this),\n isActive = panel.hasClass(`${_this.options.panelActiveClass}`); // get the options from the parent instead of trying to get them from the child\n\n if (!isActive) {\n panel.css({'visibility': 'hidden', 'display': 'block'});\n }\n\n var temp = this.getBoundingClientRect().height;\n\n if (!isActive) {\n panel.css({\n 'visibility': '',\n 'display': ''\n });\n }\n\n max = temp > max ? temp : max;\n })\n .css('min-height', `${max}px`);\n }\n\n /**\n * Destroys an instance of tabs.\n * @fires Tabs#destroyed\n */\n _destroy() {\n this.$element\n .find(`.${this.options.linkClass}`)\n .off('.zf.tabs').hide().end()\n .find(`.${this.options.panelClass}`)\n .hide();\n\n if (this.options.matchHeight) {\n if (this._setHeightMqHandler != null) {\n $(window).off('changed.zf.mediaquery', this._setHeightMqHandler);\n }\n }\n\n if (this.options.deepLink) {\n $(window).off('hashchange', this._checkDeepLink);\n }\n\n if (this.onLoadListener) {\n $(window).off(this.onLoadListener);\n }\n }\n}\n\nTabs.defaults = {\n /**\n * Link the location hash to the active pane.\n * Set the location hash when the active pane changes, and open the corresponding pane when the location changes.\n * @option\n * @type {boolean}\n * @default false\n */\n deepLink: false,\n\n /**\n * If `deepLink` is enabled, adjust the deep link scroll to make sure the top of the tab panel is visible\n * @option\n * @type {boolean}\n * @default false\n */\n deepLinkSmudge: false,\n\n /**\n * If `deepLinkSmudge` is enabled, animation time (ms) for the deep link adjustment\n * @option\n * @type {number}\n * @default 300\n */\n deepLinkSmudgeDelay: 300,\n\n /**\n * If `deepLinkSmudge` is enabled, animation offset from the top for the deep link adjustment\n * @option\n * @type {number}\n * @default 0\n */\n deepLinkSmudgeOffset: 0,\n\n /**\n * If `deepLink` is enabled, update the browser history with the open tab\n * @option\n * @type {boolean}\n * @default false\n */\n updateHistory: false,\n\n /**\n * Allows the window to scroll to content of active pane on load.\n * Not recommended if more than one tab panel per page.\n * @option\n * @type {boolean}\n * @default false\n */\n autoFocus: false,\n\n /**\n * Allows keyboard input to 'wrap' around the tab links.\n * @option\n * @type {boolean}\n * @default true\n */\n wrapOnKeys: true,\n\n /**\n * Allows the tab content panes to match heights if set to true.\n * @option\n * @type {boolean}\n * @default false\n */\n matchHeight: false,\n\n /**\n * Allows active tabs to collapse when clicked.\n * @option\n * @type {boolean}\n * @default false\n */\n activeCollapse: false,\n\n /**\n * Class applied to `li`'s in tab link list.\n * @option\n * @type {string}\n * @default 'tabs-title'\n */\n linkClass: 'tabs-title',\n\n /**\n * Class applied to the active `li` in tab link list.\n * @option\n * @type {string}\n * @default 'is-active'\n */\n linkActiveClass: 'is-active',\n\n /**\n * Class applied to the content containers.\n * @option\n * @type {string}\n * @default 'tabs-panel'\n */\n panelClass: 'tabs-panel',\n\n /**\n * Class applied to the active content container.\n * @option\n * @type {string}\n * @default 'is-active'\n */\n panelActiveClass: 'is-active'\n};\n\nexport {Tabs};\n","import $ from 'jquery';\nimport { Motion } from './foundation.util.motion';\nimport { Plugin } from './foundation.core.plugin';\nimport { RegExpEscape } from './foundation.core.utils';\nimport { Triggers } from './foundation.util.triggers';\n\n/**\n * Toggler module.\n * @module foundation.toggler\n * @requires foundation.util.motion\n * @requires foundation.util.triggers\n */\n\nclass Toggler extends Plugin {\n /**\n * Creates a new instance of Toggler.\n * @class\n * @name Toggler\n * @fires Toggler#init\n * @param {Object} element - jQuery object to add the trigger to.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, Toggler.defaults, element.data(), options);\n this.className = '';\n this.className = 'Toggler'; // ie9 back compat\n\n // Triggers init is idempotent, just need to make sure it is initialized\n Triggers.init($);\n\n this._init();\n this._events();\n }\n\n /**\n * Initializes the Toggler plugin by parsing the toggle class from data-toggler, or animation classes from data-animate.\n * @function\n * @private\n */\n _init() {\n // Collect triggers to set ARIA attributes to\n var id = this.$element[0].id,\n $triggers = $(`[data-open~=\"${id}\"], [data-close~=\"${id}\"], [data-toggle~=\"${id}\"]`);\n\n var input;\n // Parse animation classes if they were set\n if (this.options.animate) {\n input = this.options.animate.split(' ');\n\n this.animationIn = input[0];\n this.animationOut = input[1] || null;\n\n // - aria-expanded: according to the element visibility.\n $triggers.attr('aria-expanded', !this.$element.is(':hidden'));\n }\n // Otherwise, parse toggle class\n else {\n input = this.options.toggler;\n if (typeof input !== 'string' || !input.length) {\n throw new Error(`The 'toggler' option containing the target class is required, got \"${input}\"`);\n }\n // Allow for a . at the beginning of the string\n this.className = input[0] === '.' ? input.slice(1) : input;\n\n // - aria-expanded: according to the elements class set.\n $triggers.attr('aria-expanded', this.$element.hasClass(this.className));\n }\n\n // - aria-controls: adding the element id to it if not already in it.\n $triggers.each((index, trigger) => {\n const $trigger = $(trigger);\n const controls = $trigger.attr('aria-controls') || '';\n\n const containsId = new RegExp(`\\\\b${RegExpEscape(id)}\\\\b`).test(controls);\n if (!containsId) $trigger.attr('aria-controls', controls ? `${controls} ${id}` : id);\n });\n }\n\n /**\n * Initializes events for the toggle trigger.\n * @function\n * @private\n */\n _events() {\n this.$element.off('toggle.zf.trigger').on('toggle.zf.trigger', this.toggle.bind(this));\n }\n\n /**\n * Toggles the target class on the target element. An event is fired from the original trigger depending on if the resultant state was \"on\" or \"off\".\n * @function\n * @fires Toggler#on\n * @fires Toggler#off\n */\n toggle() {\n this[ this.options.animate ? '_toggleAnimate' : '_toggleClass']();\n }\n\n _toggleClass() {\n this.$element.toggleClass(this.className);\n\n var isOn = this.$element.hasClass(this.className);\n if (isOn) {\n /**\n * Fires if the target element has the class after a toggle.\n * @event Toggler#on\n */\n this.$element.trigger('on.zf.toggler');\n }\n else {\n /**\n * Fires if the target element does not have the class after a toggle.\n * @event Toggler#off\n */\n this.$element.trigger('off.zf.toggler');\n }\n\n this._updateARIA(isOn);\n this.$element.find('[data-mutate]').trigger('mutateme.zf.trigger');\n }\n\n _toggleAnimate() {\n var _this = this;\n\n if (this.$element.is(':hidden')) {\n Motion.animateIn(this.$element, this.animationIn, function() {\n _this._updateARIA(true);\n this.trigger('on.zf.toggler');\n this.find('[data-mutate]').trigger('mutateme.zf.trigger');\n });\n }\n else {\n Motion.animateOut(this.$element, this.animationOut, function() {\n _this._updateARIA(false);\n this.trigger('off.zf.toggler');\n this.find('[data-mutate]').trigger('mutateme.zf.trigger');\n });\n }\n }\n\n _updateARIA(isOn) {\n var id = this.$element[0].id;\n $(`[data-open=\"${id}\"], [data-close=\"${id}\"], [data-toggle=\"${id}\"]`)\n .attr({\n 'aria-expanded': isOn ? true : false\n });\n }\n\n /**\n * Destroys the instance of Toggler on the element.\n * @function\n */\n _destroy() {\n this.$element.off('.zf.toggler');\n }\n}\n\nToggler.defaults = {\n /**\n * Class of the element to toggle. It can be provided with or without \".\"\n * @option\n * @type {string}\n */\n toggler: undefined,\n /**\n * Tells the plugin if the element should animated when toggled.\n * @option\n * @type {boolean}\n * @default false\n */\n animate: false\n};\n\nexport {Toggler};\n","import $ from 'jquery';\nimport { GetYoDigits, ignoreMousedisappear } from './foundation.core.utils';\nimport { MediaQuery } from './foundation.util.mediaQuery';\nimport { Triggers } from './foundation.util.triggers';\nimport { Positionable } from './foundation.positionable';\n\n/**\n * Tooltip module.\n * @module foundation.tooltip\n * @requires foundation.util.box\n * @requires foundation.util.mediaQuery\n * @requires foundation.util.triggers\n */\n\nclass Tooltip extends Positionable {\n /**\n * Creates a new instance of a Tooltip.\n * @class\n * @name Tooltip\n * @fires Tooltip#init\n * @param {jQuery} element - jQuery object to attach a tooltip to.\n * @param {Object} options - object to extend the default configuration.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, Tooltip.defaults, this.$element.data(), options);\n this.className = 'Tooltip'; // ie9 back compat\n\n this.isActive = false;\n this.isClick = false;\n\n // Triggers init is idempotent, just need to make sure it is initialized\n Triggers.init($);\n\n this._init();\n }\n\n /**\n * Initializes the tooltip by setting the creating the tip element, adding it's text, setting private variables and setting attributes on the anchor.\n * @private\n */\n _init() {\n MediaQuery._init();\n var elemId = this.$element.attr('aria-describedby') || GetYoDigits(6, 'tooltip');\n\n this.options.tipText = this.options.tipText || this.$element.attr('title');\n this.template = this.options.template ? $(this.options.template) : this._buildTemplate(elemId);\n\n if (this.options.allowHtml) {\n this.template.appendTo(document.body)\n .html(this.options.tipText)\n .hide();\n } else {\n this.template.appendTo(document.body)\n .text(this.options.tipText)\n .hide();\n }\n\n this.$element.attr({\n 'title': '',\n 'aria-describedby': elemId,\n 'data-yeti-box': elemId,\n 'data-toggle': elemId,\n 'data-resize': elemId\n }).addClass(this.options.triggerClass);\n\n super._init();\n this._events();\n }\n\n _getDefaultPosition() {\n // handle legacy classnames\n var elementClassName = this.$element[0].className;\n if (this.$element[0] instanceof SVGElement) {\n elementClassName = elementClassName.baseVal;\n }\n var position = elementClassName.match(/\\b(top|left|right|bottom)\\b/g);\n return position ? position[0] : 'top';\n }\n\n _getDefaultAlignment() {\n return 'center';\n }\n\n _getHOffset() {\n if(this.position === 'left' || this.position === 'right') {\n return this.options.hOffset + this.options.tooltipWidth;\n } else {\n return this.options.hOffset\n }\n }\n\n _getVOffset() {\n if(this.position === 'top' || this.position === 'bottom') {\n return this.options.vOffset + this.options.tooltipHeight;\n } else {\n return this.options.vOffset\n }\n }\n\n /**\n * builds the tooltip element, adds attributes, and returns the template.\n * @private\n */\n _buildTemplate(id) {\n var templateClasses = (`${this.options.tooltipClass} ${this.options.templateClasses}`).trim();\n var $template = $('
    ').addClass(templateClasses).attr({\n 'role': 'tooltip',\n 'aria-hidden': true,\n 'data-is-active': false,\n 'data-is-focus': false,\n 'id': id\n });\n return $template;\n }\n\n /**\n * sets the position class of an element and recursively calls itself until there are no more possible positions to attempt, or the tooltip element is no longer colliding.\n * if the tooltip is larger than the screen width, default to full width - any user selected margin\n * @private\n */\n _setPosition() {\n super._setPosition(this.$element, this.template);\n }\n\n /**\n * reveals the tooltip, and fires an event to close any other open tooltips on the page\n * @fires Tooltip#closeme\n * @fires Tooltip#show\n * @function\n */\n show() {\n if (this.options.showOn !== 'all' && !MediaQuery.is(this.options.showOn)) {\n // console.error('The screen is too small to display this tooltip');\n return false;\n }\n\n var _this = this;\n this.template.css('visibility', 'hidden').show();\n this._setPosition();\n this.template.removeClass('top bottom left right').addClass(this.position)\n this.template.removeClass('align-top align-bottom align-left align-right align-center').addClass('align-' + this.alignment);\n\n /**\n * Fires to close all other open tooltips on the page\n * @event Closeme#tooltip\n */\n this.$element.trigger('closeme.zf.tooltip', this.template.attr('id'));\n\n\n this.template.attr({\n 'data-is-active': true,\n 'aria-hidden': false\n });\n _this.isActive = true;\n this.template.stop().hide().css('visibility', '').fadeIn(this.options.fadeInDuration, function() {\n //maybe do stuff?\n });\n /**\n * Fires when the tooltip is shown\n * @event Tooltip#show\n */\n this.$element.trigger('show.zf.tooltip');\n }\n\n /**\n * Hides the current tooltip, and resets the positioning class if it was changed due to collision\n * @fires Tooltip#hide\n * @function\n */\n hide() {\n var _this = this;\n this.template.stop().attr({\n 'aria-hidden': true,\n 'data-is-active': false\n }).fadeOut(this.options.fadeOutDuration, function() {\n _this.isActive = false;\n _this.isClick = false;\n });\n /**\n * fires when the tooltip is hidden\n * @event Tooltip#hide\n */\n this.$element.trigger('hide.zf.tooltip');\n }\n\n /**\n * adds event listeners for the tooltip and its anchor\n * TODO combine some of the listeners like focus and mouseenter, etc.\n * @private\n */\n _events() {\n const _this = this;\n const hasTouch = 'ontouchstart' in window || (typeof window.ontouchstart !== 'undefined');\n var isFocus = false;\n\n // `disableForTouch: Fully disable the tooltip on touch devices\n if (hasTouch && this.options.disableForTouch) return;\n\n if (!this.options.disableHover) {\n this.$element\n .on('mouseenter.zf.tooltip', function() {\n if (!_this.isActive) {\n _this.timeout = setTimeout(function() {\n _this.show();\n }, _this.options.hoverDelay);\n }\n })\n .on('mouseleave.zf.tooltip', ignoreMousedisappear(function() {\n clearTimeout(_this.timeout);\n if (!isFocus || (_this.isClick && !_this.options.clickOpen)) {\n _this.hide();\n }\n }));\n }\n\n if (hasTouch) {\n this.$element\n .on('tap.zf.tooltip touchend.zf.tooltip', function () {\n _this.isActive ? _this.hide() : _this.show();\n });\n }\n\n if (this.options.clickOpen) {\n this.$element.on('mousedown.zf.tooltip', function() {\n if (_this.isClick) {\n //_this.hide();\n // _this.isClick = false;\n } else {\n _this.isClick = true;\n if ((_this.options.disableHover || !_this.$element.attr('tabindex')) && !_this.isActive) {\n _this.show();\n }\n }\n });\n } else {\n this.$element.on('mousedown.zf.tooltip', function() {\n _this.isClick = true;\n });\n }\n\n this.$element.on({\n // 'toggle.zf.trigger': this.toggle.bind(this),\n // 'close.zf.trigger': this.hide.bind(this)\n 'close.zf.trigger': this.hide.bind(this)\n });\n\n this.$element\n .on('focus.zf.tooltip', function() {\n isFocus = true;\n if (_this.isClick) {\n // If we're not showing open on clicks, we need to pretend a click-launched focus isn't\n // a real focus, otherwise on hover and come back we get bad behavior\n if(!_this.options.clickOpen) { isFocus = false; }\n return false;\n } else {\n _this.show();\n }\n })\n\n .on('focusout.zf.tooltip', function() {\n isFocus = false;\n _this.isClick = false;\n _this.hide();\n })\n\n .on('resizeme.zf.trigger', function() {\n if (_this.isActive) {\n _this._setPosition();\n }\n });\n }\n\n /**\n * adds a toggle method, in addition to the static show() & hide() functions\n * @function\n */\n toggle() {\n if (this.isActive) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n /**\n * Destroys an instance of tooltip, removes template element from the view.\n * @function\n */\n _destroy() {\n this.$element.attr('title', this.template.text())\n .off('.zf.trigger .zf.tooltip')\n .removeClass(this.options.triggerClass)\n .removeClass('top right left bottom')\n .removeAttr('aria-describedby data-disable-hover data-resize data-toggle data-tooltip data-yeti-box');\n\n this.template.remove();\n }\n}\n\nTooltip.defaults = {\n /**\n * Time, in ms, before a tooltip should open on hover.\n * @option\n * @type {number}\n * @default 200\n */\n hoverDelay: 200,\n /**\n * Time, in ms, a tooltip should take to fade into view.\n * @option\n * @type {number}\n * @default 150\n */\n fadeInDuration: 150,\n /**\n * Time, in ms, a tooltip should take to fade out of view.\n * @option\n * @type {number}\n * @default 150\n */\n fadeOutDuration: 150,\n /**\n * Disables hover events from opening the tooltip if set to true\n * @option\n * @type {boolean}\n * @default false\n */\n disableHover: false,\n /**\n * Disable the tooltip for touch devices.\n * This can be useful to make elements with a tooltip on it trigger their\n * action on the first tap instead of displaying the tooltip.\n * @option\n * @type {booelan}\n * @default false\n */\n disableForTouch: false,\n /**\n * Optional addtional classes to apply to the tooltip template on init.\n * @option\n * @type {string}\n * @default ''\n */\n templateClasses: '',\n /**\n * Non-optional class added to tooltip templates. Foundation default is 'tooltip'.\n * @option\n * @type {string}\n * @default 'tooltip'\n */\n tooltipClass: 'tooltip',\n /**\n * Class applied to the tooltip anchor element.\n * @option\n * @type {string}\n * @default 'has-tip'\n */\n triggerClass: 'has-tip',\n /**\n * Minimum breakpoint size at which to open the tooltip.\n * @option\n * @type {string}\n * @default 'small'\n */\n showOn: 'small',\n /**\n * Custom template to be used to generate markup for tooltip.\n * @option\n * @type {string}\n * @default ''\n */\n template: '',\n /**\n * Text displayed in the tooltip template on open.\n * @option\n * @type {string}\n * @default ''\n */\n tipText: '',\n touchCloseText: 'Tap to close.',\n /**\n * Allows the tooltip to remain open if triggered with a click or touch event.\n * @option\n * @type {boolean}\n * @default true\n */\n clickOpen: true,\n /**\n * Position of tooltip. Can be left, right, bottom, top, or auto.\n * @option\n * @type {string}\n * @default 'auto'\n */\n position: 'auto',\n /**\n * Alignment of tooltip relative to anchor. Can be left, right, bottom, top, center, or auto.\n * @option\n * @type {string}\n * @default 'auto'\n */\n alignment: 'auto',\n /**\n * Allow overlap of container/window. If false, tooltip will first try to\n * position as defined by data-position and data-alignment, but reposition if\n * it would cause an overflow. @option\n * @type {boolean}\n * @default false\n */\n allowOverlap: false,\n /**\n * Allow overlap of only the bottom of the container. This is the most common\n * behavior for dropdowns, allowing the dropdown to extend the bottom of the\n * screen but not otherwise influence or break out of the container.\n * Less common for tooltips.\n * @option\n * @type {boolean}\n * @default false\n */\n allowBottomOverlap: false,\n /**\n * Distance, in pixels, the template should push away from the anchor on the Y axis.\n * @option\n * @type {number}\n * @default 0\n */\n vOffset: 0,\n /**\n * Distance, in pixels, the template should push away from the anchor on the X axis\n * @option\n * @type {number}\n * @default 0\n */\n hOffset: 0,\n /**\n * Distance, in pixels, the template spacing auto-adjust for a vertical tooltip\n * @option\n * @type {number}\n * @default 14\n */\n tooltipHeight: 14,\n /**\n * Distance, in pixels, the template spacing auto-adjust for a horizontal tooltip\n * @option\n * @type {number}\n * @default 12\n */\n tooltipWidth: 12,\n /**\n * Allow HTML in tooltip. Warning: If you are loading user-generated content into tooltips,\n * allowing HTML may open yourself up to XSS attacks.\n * @option\n * @type {boolean}\n * @default false\n */\n allowHtml: false\n};\n\n/**\n * TODO utilize resize event trigger\n */\n\nexport {Tooltip};\n","import $ from 'jquery';\nimport { MediaQuery } from './foundation.util.mediaQuery';\nimport { GetYoDigits } from './foundation.core.utils';\nimport { Plugin }from './foundation.core.plugin';\n\nimport { Accordion } from './foundation.accordion';\nimport { Tabs } from './foundation.tabs';\n\n// The plugin matches the plugin classes with these plugin instances.\nvar MenuPlugins = {\n tabs: {\n cssClass: 'tabs',\n plugin: Tabs,\n open: (plugin, target) => plugin.selectTab(target),\n close: null /* not supported */,\n toggle: null /* not supported */,\n },\n accordion: {\n cssClass: 'accordion',\n plugin: Accordion,\n open: (plugin, target) => plugin.down($(target)),\n close: (plugin, target) => plugin.up($(target)),\n toggle: (plugin, target) => plugin.toggle($(target)),\n }\n};\n\n\n/**\n * ResponsiveAccordionTabs module.\n * @module foundation.responsiveAccordionTabs\n * @requires foundation.util.motion\n * @requires foundation.accordion\n * @requires foundation.tabs\n */\n\nclass ResponsiveAccordionTabs extends Plugin{\n constructor(element, options) {\n super(element, options);\n return this.options.reflow && this.storezfData || this;\n }\n\n /**\n * Creates a new instance of a responsive accordion tabs.\n * @class\n * @name ResponsiveAccordionTabs\n * @fires ResponsiveAccordionTabs#init\n * @param {jQuery} element - jQuery object to make into Responsive Accordion Tabs.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options) {\n this.$element = $(element);\n this.$element.data('zfPluginBase', this);\n this.options = $.extend({}, ResponsiveAccordionTabs.defaults, this.$element.data(), options);\n\n this.rules = this.$element.data('responsive-accordion-tabs');\n this.currentMq = null;\n this.currentRule = null;\n this.currentPlugin = null;\n this.className = 'ResponsiveAccordionTabs'; // ie9 back compat\n if (!this.$element.attr('id')) {\n this.$element.attr('id',GetYoDigits(6, 'responsiveaccordiontabs'));\n }\n\n this._init();\n this._events();\n }\n\n /**\n * Initializes the Menu by parsing the classes from the 'data-responsive-accordion-tabs' attribute on the element.\n * @function\n * @private\n */\n _init() {\n MediaQuery._init();\n\n // The first time an Interchange plugin is initialized, this.rules is converted from a string of \"classes\" to an object of rules\n if (typeof this.rules === 'string') {\n let rulesTree = {};\n\n // Parse rules from \"classes\" pulled from data attribute\n let rules = this.rules.split(' ');\n\n // Iterate through every rule found\n for (let i = 0; i < rules.length; i++) {\n let rule = rules[i].split('-');\n let ruleSize = rule.length > 1 ? rule[0] : 'small';\n let rulePlugin = rule.length > 1 ? rule[1] : rule[0];\n\n if (MenuPlugins[rulePlugin] !== null) {\n rulesTree[ruleSize] = MenuPlugins[rulePlugin];\n }\n }\n\n this.rules = rulesTree;\n }\n\n this._getAllOptions();\n\n if (!$.isEmptyObject(this.rules)) {\n this._checkMediaQueries();\n }\n }\n\n _getAllOptions() {\n //get all defaults and options\n var _this = this;\n _this.allOptions = {};\n for (var key in MenuPlugins) {\n if (MenuPlugins.hasOwnProperty(key)) {\n var obj = MenuPlugins[key];\n try {\n var dummyPlugin = $('
      ');\n var tmpPlugin = new obj.plugin(dummyPlugin,_this.options);\n for (var keyKey in tmpPlugin.options) {\n if (tmpPlugin.options.hasOwnProperty(keyKey) && keyKey !== 'zfPlugin') {\n var objObj = tmpPlugin.options[keyKey];\n _this.allOptions[keyKey] = objObj;\n }\n }\n tmpPlugin.destroy();\n }\n catch(e) {\n console.warn(`Warning: Problems getting Accordion/Tab options: ${e}`);\n }\n }\n }\n }\n\n /**\n * Initializes events for the Menu.\n * @function\n * @private\n */\n _events() {\n this._changedZfMediaQueryHandler = this._checkMediaQueries.bind(this);\n $(window).on('changed.zf.mediaquery', this._changedZfMediaQueryHandler);\n }\n\n /**\n * Checks the current screen width against available media queries. If the media query has changed, and the plugin needed has changed, the plugins will swap out.\n * @function\n * @private\n */\n _checkMediaQueries() {\n var matchedMq, _this = this;\n // Iterate through each rule and find the last matching rule\n $.each(this.rules, function(key) {\n if (MediaQuery.atLeast(key)) {\n matchedMq = key;\n }\n });\n\n // No match? No dice\n if (!matchedMq) return;\n\n // Plugin already initialized? We good\n if (this.currentPlugin instanceof this.rules[matchedMq].plugin) return;\n\n // Remove existing plugin-specific CSS classes\n $.each(MenuPlugins, function(key, value) {\n _this.$element.removeClass(value.cssClass);\n });\n\n // Add the CSS class for the new plugin\n this.$element.addClass(this.rules[matchedMq].cssClass);\n\n // Create an instance of the new plugin\n if (this.currentPlugin) {\n //don't know why but on nested elements data zfPlugin get's lost\n if (!this.currentPlugin.$element.data('zfPlugin') && this.storezfData) this.currentPlugin.$element.data('zfPlugin',this.storezfData);\n this.currentPlugin.destroy();\n }\n this._handleMarkup(this.rules[matchedMq].cssClass);\n this.currentRule = this.rules[matchedMq];\n this.currentPlugin = new this.currentRule.plugin(this.$element, this.options);\n this.storezfData = this.currentPlugin.$element.data('zfPlugin');\n\n }\n\n _handleMarkup(toSet){\n var _this = this, fromString = 'accordion';\n var $panels = $('[data-tabs-content='+this.$element.attr('id')+']');\n if ($panels.length) fromString = 'tabs';\n if (fromString === toSet) {\n return;\n }\n\n var tabsTitle = _this.allOptions.linkClass?_this.allOptions.linkClass:'tabs-title';\n var tabsPanel = _this.allOptions.panelClass?_this.allOptions.panelClass:'tabs-panel';\n\n this.$element.removeAttr('role');\n var $liHeads = this.$element.children('.'+tabsTitle+',[data-accordion-item]').removeClass(tabsTitle).removeClass('accordion-item').removeAttr('data-accordion-item');\n var $liHeadsA = $liHeads.children('a').removeClass('accordion-title');\n\n if (fromString === 'tabs') {\n $panels = $panels.children('.'+tabsPanel).removeClass(tabsPanel).removeAttr('role').removeAttr('aria-hidden').removeAttr('aria-labelledby');\n $panels.children('a').removeAttr('role').removeAttr('aria-controls').removeAttr('aria-selected');\n } else {\n $panels = $liHeads.children('[data-tab-content]').removeClass('accordion-content');\n }\n\n $panels.css({display:'',visibility:''});\n $liHeads.css({display:'',visibility:''});\n if (toSet === 'accordion') {\n $panels.each(function(key,value){\n $(value).appendTo($liHeads.get(key)).addClass('accordion-content').attr('data-tab-content','').removeClass('is-active').css({height:''});\n $('[data-tabs-content='+_this.$element.attr('id')+']').after('
      ').detach();\n $liHeads.addClass('accordion-item').attr('data-accordion-item','');\n $liHeadsA.addClass('accordion-title');\n });\n } else if (toSet === 'tabs') {\n var $tabsContent = $('[data-tabs-content='+_this.$element.attr('id')+']');\n var $placeholder = $('#tabs-placeholder-'+_this.$element.attr('id'));\n if ($placeholder.length) {\n $tabsContent = $('
      ').insertAfter($placeholder).attr('data-tabs-content',_this.$element.attr('id'));\n $placeholder.remove();\n } else {\n $tabsContent = $('
      ').insertAfter(_this.$element).attr('data-tabs-content',_this.$element.attr('id'));\n }\n $panels.each(function(key,value){\n var tempValue = $(value).appendTo($tabsContent).addClass(tabsPanel);\n var hash = $liHeadsA.get(key).hash.slice(1);\n var id = $(value).attr('id') || GetYoDigits(6, 'accordion');\n if (hash !== id) {\n if (hash !== '') {\n $(value).attr('id',hash);\n } else {\n hash = id;\n $(value).attr('id',hash);\n $($liHeadsA.get(key)).attr('href',$($liHeadsA.get(key)).attr('href').replace('#','')+'#'+hash);\n }\n }\n var isActive = $($liHeads.get(key)).hasClass('is-active');\n if (isActive) {\n tempValue.addClass('is-active');\n }\n });\n $liHeads.addClass(tabsTitle);\n };\n }\n\n /**\n * Opens the plugin pane defined by `target`.\n * @param {jQuery | String} target - jQuery object or string of the id of the pane to open.\n * @see Accordion.down\n * @see Tabs.selectTab\n * @function\n */\n open() {\n if (this.currentRule && typeof this.currentRule.open === 'function') {\n return this.currentRule.open(this.currentPlugin, ...arguments);\n }\n }\n\n /**\n * Closes the plugin pane defined by `target`. Not availaible for Tabs.\n * @param {jQuery | String} target - jQuery object or string of the id of the pane to close.\n * @see Accordion.up\n * @function\n */\n close() {\n if (this.currentRule && typeof this.currentRule.close === 'function') {\n return this.currentRule.close(this.currentPlugin, ...arguments);\n }\n }\n\n /**\n * Toggles the plugin pane defined by `target`. Not availaible for Tabs.\n * @param {jQuery | String} target - jQuery object or string of the id of the pane to toggle.\n * @see Accordion.toggle\n * @function\n */\n toggle() {\n if (this.currentRule && typeof this.currentRule.toggle === 'function') {\n return this.currentRule.toggle(this.currentPlugin, ...arguments);\n }\n }\n\n /**\n * Destroys the instance of the current plugin on this element, as well as the window resize handler that switches the plugins out.\n * @function\n */\n _destroy() {\n if (this.currentPlugin) this.currentPlugin.destroy();\n $(window).off('changed.zf.mediaquery', this._changedZfMediaQueryHandler);\n }\n}\n\nResponsiveAccordionTabs.defaults = {};\n\nexport {ResponsiveAccordionTabs};\n","// Import jQuery and bind it.\nimport $ from \"jquery\";\nwindow.$ = $;\n\n// Import WhatInput.\nimport whatInput from \"what-input\";\n\n// Import Foundation and utilities. DO NOT REMOVE.\nimport { Foundation } from \"foundation-sites/js/foundation.core\";\nFoundation.addToJquery($);\nimport { MediaQuery } from \"foundation-sites/js/foundation.util.mediaQuery\";\nFoundation.MediaQuery = MediaQuery;\n\n// Uncomment 'import' AND 'Foundation.plugin' for each plugin you do not want to use.\n// import { Abide } from 'foundation-sites/js/foundation.abide'\n// Foundation.plugin(Abide, 'Abide')\n\nimport { Accordion } from \"foundation-sites/js/foundation.accordion\";\nFoundation.plugin(Accordion, \"Accordion\");\n\nimport { AccordionMenu } from \"foundation-sites/js/foundation.accordionMenu\";\nFoundation.plugin(AccordionMenu, \"AccordionMenu\");\n\n// import { Drilldown } from 'foundation-sites/js/foundation.drilldown'\n// Foundation.plugin(Drilldown, 'Drilldown')\n\nimport { Dropdown } from \"foundation-sites/js/foundation.dropdown\";\nFoundation.plugin(Dropdown, \"Dropdown\");\n\nimport { DropdownMenu } from \"foundation-sites/js/foundation.dropdownMenu\";\nFoundation.plugin(DropdownMenu, \"DropdownMenu\");\n\nimport { Equalizer } from \"foundation-sites/js/foundation.equalizer\";\nFoundation.plugin(Equalizer, \"Equalizer\");\n\n// import { Interchange } from 'foundation-sites/js/foundation.interchange'\n// Foundation.plugin(Interchange, 'Interchange')\n\n// import { Magellan } from 'foundation-sites/js/foundation.magellan'\n// Foundation.plugin(Magellan, 'Magellan')\n\n// import { OffCanvas } from 'foundation-sites/js/foundation.offcanvas'\n// Foundation.plugin(OffCanvas, 'OffCanvas')\n\n// import { Orbit } from 'foundation-sites/js/foundation.orbit'\n// Foundation.plugin(Orbit, 'Orbit')\n\nimport { ResponsiveMenu } from \"foundation-sites/js/foundation.responsiveMenu\";\nFoundation.plugin(ResponsiveMenu, \"ResponsiveMenu\");\n\nimport { ResponsiveToggle } from \"foundation-sites/js/foundation.responsiveToggle\";\nFoundation.plugin(ResponsiveToggle, \"ResponsiveToggle\");\n\nimport { Reveal } from \"foundation-sites/js/foundation.reveal\";\nFoundation.plugin(Reveal, \"Reveal\");\n\nimport { Slider } from \"foundation-sites/js/foundation.slider\";\nFoundation.plugin(Slider, \"Slider\");\n\nimport { SmoothScroll } from \"foundation-sites/js/foundation.smoothScroll\";\nFoundation.plugin(SmoothScroll, \"SmoothScroll\");\n\nimport { Sticky } from \"foundation-sites/js/foundation.sticky\";\nFoundation.plugin(Sticky, \"Sticky\");\n\nimport { Tabs } from \"foundation-sites/js/foundation.tabs\";\nFoundation.plugin(Tabs, \"Tabs\");\n\nimport { Toggler } from \"foundation-sites/js/foundation.toggler\";\nFoundation.plugin(Toggler, \"Toggler\");\n\nimport { Tooltip } from \"foundation-sites/js/foundation.tooltip\";\nFoundation.plugin(Tooltip, \"Tooltip\");\n\nimport { ResponsiveAccordionTabs } from \"foundation-sites/js/foundation.responsiveAccordionTabs\";\nFoundation.plugin(ResponsiveAccordionTabs, \"ResponsiveAccordionTabs\");\n\n// Init.\nwindow.addEventListener(\n \"load\",\n () => {\n $(document).foundation();\n },\n { passive: true }\n);\n\n$(document).on(\"closed.zf.reveal\", function () {\n Foundation.reInit(\"sticky\");\n});\n","// Masonry layout.\nimport Macy from \"macy\";\n\ndocument.addEventListener(\n \"DOMContentLoaded\",\n () => {\n if (typeof masonryGrids !== \"undefined\") {\n // Loop through each registered masonry grids and initialize them.\n masonryGrids = masonryGrids.map(({ container, id }) => {\n const instance = Macy({\n container,\n columns: 1,\n trueOrder: true,\n waitForImages: true,\n mobileFirst: true,\n breakAt: {\n 640: 2,\n 1024: 3,\n },\n });\n instance.recalculate();\n\n // Return instance for usage with AJAX content.\n return {\n id,\n container,\n instance,\n };\n });\n }\n },\n { passive: true }\n);\n","import $ from \"jquery\";\nimport objectFitImages from \"object-fit-images\";\n\n$(function () {\n // Adds support for 'object-fit: cover;'.\n objectFitImages();\n});\n","var __assign=this&&this.__assign||function(){return(__assign=Object.assign||function(t){for(var i,n=1,s=arguments.length;ns.endVal;s.frameVal=n?s.endVal:s.frameVal,s.frameVal=Number(s.frameVal.toFixed(s.options.decimalPlaces)),s.printValue(s.frameVal),i1?s.options.decimal+o[1]:\"\",s.options.useGrouping){e=\"\";for(var l=0,h=n.length;lwindow.scrollY&&t.paused?(t.paused=!1,setTimeout(function(){return t.start()},t.options.scrollSpyDelay),t.options.scrollSpyOnce&&(t.once=!0)):window.scrollY>s&&!t.paused&&t.reset()}},t.prototype.determineDirectionAndSmartEasing=function(){var t=this.finalEndVal?this.finalEndVal:this.endVal;this.countDown=this.startVal>t;var i=t-this.startVal;if(Math.abs(i)>this.options.smartEasingThreshold&&this.options.useEasing){this.finalEndVal=t;var n=this.countDown?1:-1;this.endVal=t+n*this.options.smartEasingAmount,this.duration=this.duration/2}else this.endVal=t,this.finalEndVal=null;null!==this.finalEndVal?this.useEasing=!1:this.useEasing=this.options.useEasing},t.prototype.start=function(t){this.error||(this.callback=t,this.duration>0?(this.determineDirectionAndSmartEasing(),this.paused=!1,this.rAF=requestAnimationFrame(this.count)):this.printValue(this.endVal))},t.prototype.pauseResume=function(){this.paused?(this.startTime=null,this.duration=this.remaining,this.startVal=this.frameVal,this.determineDirectionAndSmartEasing(),this.rAF=requestAnimationFrame(this.count)):cancelAnimationFrame(this.rAF),this.paused=!this.paused},t.prototype.reset=function(){cancelAnimationFrame(this.rAF),this.paused=!0,this.resetDuration(),this.startVal=this.validateValue(this.options.startVal),this.frameVal=this.startVal,this.printValue(this.startVal)},t.prototype.update=function(t){cancelAnimationFrame(this.rAF),this.startTime=null,this.endVal=this.validateValue(t),this.endVal!==this.frameVal&&(this.startVal=this.frameVal,null==this.finalEndVal&&this.resetDuration(),this.finalEndVal=null,this.determineDirectionAndSmartEasing(),this.rAF=requestAnimationFrame(this.count))},t.prototype.printValue=function(t){var i=this.formattingFn(t);\"INPUT\"===this.el.tagName?this.el.value=i:\"text\"===this.el.tagName||\"tspan\"===this.el.tagName?this.el.textContent=i:this.el.innerHTML=i},t.prototype.ensureNumber=function(t){return\"number\"==typeof t&&!isNaN(t)},t.prototype.validateValue=function(t){var i=Number(t);return this.ensureNumber(i)?i:(this.error=\"[CountUp] invalid start or end value: \".concat(t),null)},t.prototype.resetDuration=function(){this.startTime=null,this.duration=1e3*Number(this.options.duration),this.remaining=this.duration},t}();export{CountUp};","import { CountUp } from \"countup.js\";\n\nconst event = new Event(\"wpsoup.counter.completed\", {\n bubbles: true,\n cancelable: true,\n composed: false,\n});\n\nfunction registerEventListeners() {\n const elements = document.querySelectorAll(\".counter\");\n const intersectionSupported = intersectionListenerSupported();\n\n if (intersectionSupported) {\n const intersectionObserver = new IntersectionObserver(animateModern, {\n root: null,\n rootMargin: \"20px\",\n threshold: 0.5,\n });\n\n for (let i = 0; i < elements.length; i++) {\n intersectionObserver.observe(elements[i]);\n }\n } else {\n if (window.addEventListener) {\n animateLegacy(elements);\n\n window.addEventListener(\n \"scroll\",\n (e) => {\n animateLegacy(elements);\n },\n { passive: true }\n );\n }\n }\n}\n\nfunction animateLegacy(elements) {\n elements.forEach((element) => {\n if (elementIsInView(element)) {\n animateElement(element);\n }\n });\n}\n\nfunction animateModern(elements) {\n elements.forEach((element) => {\n if (element.isIntersecting) {\n animateElement(element);\n }\n });\n}\n\nfunction animateElement(element) {\n const target = element.target ? element.target : element;\n const dataset = target.dataset;\n\n const countUp = new CountUp(target, dataset.counterEnd, {\n duration: dataset.counterDuration,\n useGrouping: dataset.counterGrouping ? true : false,\n separator: dataset.counterSeparator,\n decimal: dataset.counterDecimal,\n });\n target.counter = countUp;\n countUp.start(() => {\n // Create event listener.\n target.dispatchEvent(event);\n });\n}\n\nfunction elementIsInView(element) {\n let top = element.offsetTop;\n let left = element.offsetLeft;\n const width = element.offsetWidth;\n const height = element.offsetHeight;\n\n while (element.offsetParent) {\n element = element.offsetParent;\n top += element.offsetTop;\n left += element.offsetLeft;\n }\n\n return (\n top >= window.pageYOffset &&\n left >= window.pageXOffset &&\n top + height <= window.pageYOffset + window.innerHeight &&\n left + width <= window.pageXOffset + window.innerWidth\n );\n}\n\nfunction intersectionListenerSupported() {\n return (\n \"IntersectionObserver\" in window &&\n \"IntersectionObserverEntry\" in window &&\n \"intersectionRatio\" in window.IntersectionObserverEntry.prototype\n );\n}\n\n(() => {\n registerEventListeners();\n})();\n","'use strict';\n\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n","'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in val) && !(Symbol.iterator in val);\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n const pattern = '[object FormData]';\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) ||\n toString.call(thing) === pattern ||\n (isFunction(thing.toString) && thing.toString() === pattern)\n );\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = typeof self === \"undefined\" ? typeof global === \"undefined\" ? this : global : self;\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else {\n result[targetKey] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[Symbol.iterator];\n\n const iterator = generator.call(obj);\n\n let result;\n\n while ((result = iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[_-\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n if (reducer(descriptor, name, obj) !== false) {\n reducedDescriptors[name] = descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n value = +value;\n return Number.isFinite(value) ? value : defaultValue;\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n toJSONObject\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n response && (this.response = response);\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.response && this.response.status ? this.response.status : null\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.cause = error;\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nexport default AxiosError;\n","import FormData from 'form-data';\nexport default FormData;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport envFormData from '../env/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliant(thing) {\n return thing && utils.isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator];\n}\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (envFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && isSpecCompliant(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n (utils.isFileList(value) || utils.endsWith(key, '[]') && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object} params - The parameters to be converted to a FormData object.\n * @param {Object} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?object} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default FormData;\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst isStandardBrowserEnv = (() => {\n let product;\n if (typeof navigator !== 'undefined' && (\n (product = navigator.product) === 'ReactNative' ||\n product === 'NativeScript' ||\n product === 'NS')\n ) {\n return false;\n }\n\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n})();\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\n const isStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n isStandardBrowserEnv,\n isStandardBrowserWebWorkerEnv,\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\nconst DEFAULT_CONTENT_TYPE = {\n 'Content-Type': undefined\n};\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n if (!hasJSONContentType) {\n return data;\n }\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n }\n }, options));\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nfunction isValidHeaderName(str) {\n return /^[-_a-zA-Z]+$/.test(str.trim());\n}\n\nfunction matchHeaderValue(context, value, header, filter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear() {\n return Object.keys(this).forEach(this.delete.bind(this));\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent']);\n\nutils.freezeMethods(AxiosHeaders.prototype);\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nexport default CanceledError;\n","'use strict';\n\nimport utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.isStandardBrowserEnv ?\n\n// Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n const cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n// Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })();\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n","'use strict';\n\nimport utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.isStandardBrowserEnv ?\n\n// Standard browser envs have full support of the APIs needed to test\n// whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n const msie = /(msie|trident)/i.test(navigator.userAgent);\n const urlParsingNode = document.createElement('a');\n let originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n let href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n const parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })();\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","'use strict';\n\nimport utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport cookies from './../helpers/cookies.js';\nimport buildURL from './../helpers/buildURL.js';\nimport buildFullPath from '../core/buildFullPath.js';\nimport isURLSameOrigin from './../helpers/isURLSameOrigin.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport speedometer from '../helpers/speedometer.js';\n\nfunction progressEventReducer(listener, isDownloadStream) {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e\n };\n\n data[isDownloadStream ? 'download' : 'upload'] = true;\n\n listener(data);\n };\n}\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n let requestData = config.data;\n const requestHeaders = AxiosHeaders.from(config.headers).normalize();\n const responseType = config.responseType;\n let onCanceled;\n function done() {\n if (config.cancelToken) {\n config.cancelToken.unsubscribe(onCanceled);\n }\n\n if (config.signal) {\n config.signal.removeEventListener('abort', onCanceled);\n }\n }\n\n if (utils.isFormData(requestData) && (platform.isStandardBrowserEnv || platform.isStandardBrowserWebWorkerEnv)) {\n requestHeaders.setContentType(false); // Let the browser set it\n }\n\n let request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n const username = config.auth.username || '';\n const password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.set('Authorization', 'Basic ' + btoa(username + ':' + password));\n }\n\n const fullPath = buildFullPath(config.baseURL, config.url);\n\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = config.transitional || transitionalDefaults;\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (platform.isStandardBrowserEnv) {\n // Add xsrf header\n const xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath))\n && config.xsrfCookieName && cookies.read(config.xsrfCookieName);\n\n if (xsrfValue) {\n requestHeaders.set(config.xsrfHeaderName, xsrfValue);\n }\n }\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = config.responseType;\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', progressEventReducer(config.onDownloadProgress, true));\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', progressEventReducer(config.onUploadProgress));\n }\n\n if (config.cancelToken || config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n config.cancelToken && config.cancelToken.subscribe(onCanceled);\n if (config.signal) {\n config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(fullPath);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter\n}\n\nutils.forEach(knownAdapters, (fn, value) => {\n if(fn) {\n try {\n Object.defineProperty(fn, 'name', {value});\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {value});\n }\n});\n\nexport default {\n getAdapter: (adapters) => {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const {length} = adapters;\n let nameOrAdapter;\n let adapter;\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n if((adapter = utils.isString(nameOrAdapter) ? knownAdapters[nameOrAdapter.toLowerCase()] : nameOrAdapter)) {\n break;\n }\n }\n\n if (!adapter) {\n if (adapter === false) {\n throw new AxiosError(\n `Adapter ${nameOrAdapter} is not supported by the environment`,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n throw new Error(\n utils.hasOwnProp(knownAdapters, nameOrAdapter) ?\n `Adapter '${nameOrAdapter}' is not available in the build` :\n `Unknown adapter '${nameOrAdapter}'`\n );\n }\n\n if (!utils.isFunction(adapter)) {\n throw new TypeError('adapter is not a function');\n }\n\n return adapter;\n },\n adapters: knownAdapters\n}\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? thing.toJSON() : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b) => mergeDeepProperties(headersToObject(a), headersToObject(b), true)\n };\n\n utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n","export const VERSION = \"1.2.1\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n","'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer !== undefined) {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n let contextHeaders;\n\n // Flatten headers\n contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n contextHeaders && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift.apply(chain, requestInterceptorChain);\n chain.push.apply(chain, responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n i = 0;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","import axios from \"/srv/www/f/friesland-boating.nl/vhosts/www/htdocs/wp-content/plugins/wp-soup-framework/node_modules/axios\";\n\ndocument.addEventListener(\n `DOMContentLoaded`,\n () => {\n const favoriteButtons = document.querySelectorAll(\".favorite-button\");\n for (const button of favoriteButtons) {\n button.addEventListener(\n \"click\",\n function (event) {\n const postID = this.dataset.postId;\n if (!postID) {\n return;\n }\n\n const action = this.dataset.action;\n if (action === \"add\") {\n addToFavorites(postID, button);\n } else if (action === \"remove\") {\n removeFromFavorites(postID, button);\n }\n },\n { passive: true }\n );\n }\n\n function addToFavorites(postID, button) {\n let formData = new FormData();\n formData.append(\"action\", \"add_to_favorites\");\n formData.append(\"security\", themosis.nonce);\n formData.append(\"post_id\", postID);\n\n axios.post(themosis.ajaxurl, formData).then((response) => {\n if (response.data.success) {\n button.classList.add(\"is-favorited\");\n button.querySelector(\"iconify-icon\").outerHTML = themosis.wpsoup.favorites.button_icon_favorited;\n button.dataset.action = \"remove\";\n }\n });\n }\n\n function removeFromFavorites(postID, button) {\n let formData = new FormData();\n formData.append(\"action\", \"remove_from_favorites\");\n formData.append(\"security\", themosis.nonce);\n formData.append(\"post_id\", postID);\n\n axios.post(themosis.ajaxurl, formData).then((response) => {\n if (response.data.success) {\n button.classList.remove(\"is-favorited\");\n button.querySelector(\"iconify-icon\").outerHTML = themosis.wpsoup.favorites.button_icon;\n button.dataset.action = \"add\";\n }\n });\n }\n },\n { passive: true }\n);\n","import $ from \"jquery\";\n\nwindow.addEventListener(\n \"load\",\n () => {\n if (Foundation.MediaQuery.atLeast(\"large\")) {\n const directions = [\"left\", \"right\"];\n directions.forEach((direction) => {\n const columns = $(`.wp-block-column.half-width-image-${direction}`);\n if (columns.length) {\n columns.each(function () {\n const column = $(this);\n const container = $(this).closest(\".wp-block-ms-container\");\n const containerId = container.attr(\"id\");\n const img = $(this).find(\"img\");\n let src = img.attr(\"src\");\n if (typeof src === \"undefined\") {\n return;\n }\n\n if (typeof LazyLoad === \"function\") {\n if (!src.includes(\"data:image/svg+xml\")) {\n img.parent().css(\"display\", \"none\");\n column.append(\n ``\n );\n }\n\n img.on(\"load\", function () {\n src = img.attr(\"src\");\n img.parent().css(\"display\", \"none\");\n column.append(\n ``\n );\n });\n } else {\n if (!src.includes(\"data:image/svg+xml\")) {\n img.parent().css(\"display\", \"none\");\n column.append(\n ``\n );\n }\n }\n });\n }\n });\n }\n },\n { passive: true }\n);\n","import $ from \"jquery\";\n\ndocument.addEventListener(\n `DOMContentLoaded`,\n () => {\n /**\n * Add submenu toggle functionality.\n */\n const menus = document.querySelectorAll(\".js-ms-has-submenu\");\n let i = 0;\n // For every menu item with a submenu.\n for (const menu of menus) {\n // Apply id for toggling purposes.\n const randomID = \"id-\" + i++;\n const submenu = menu.querySelector(\".submenu\");\n if (submenu) {\n submenu.setAttribute(\"id\", randomID);\n }\n const toggle = menu.querySelector(\".toggle\");\n if (toggle) {\n toggle.setAttribute(\"data-toggle\", randomID);\n }\n\n // On toggling.\n $(`#${randomID}`).on(\"on.zf.toggler off.zf.toggler\", function (event) {\n if (event.target !== this) return;\n\n switch (event.type) {\n case \"on\":\n $(this).slideDown({\n start: function () {\n $(this).css({\n display: \"flex\",\n });\n },\n });\n break;\n case \"off\":\n $(this).slideUp();\n break;\n }\n\n // Recalculate sticky height if sticky exists.\n if ($(\".ms-menu .sticky\").length) {\n $(\".ms-menu .sticky\").foundation(\"_calc\", true);\n }\n });\n }\n\n // Recalculate sticky height on toggling submenu.\n $(\".menu-mobile\").on(\"on.zf.toggler off.zf.toggler\", function (event) {\n if (event.target !== this) return;\n\n switch (event.type) {\n case \"on\":\n $(this).slideDown();\n break;\n case \"off\":\n $(this).slideUp();\n break;\n }\n\n // Recalculate sticky height if sticky exists.\n if ($(\".ms-menu .sticky\").length) {\n $(\".ms-menu .sticky\").foundation(\"_calc\", true);\n }\n });\n\n // Properly update the ARIA states on focus (keyboard) and mouse over events.\n $('[role=\"menubar\"]').on(\"focus.aria mouseenter.aria\", '[aria-haspopup=\"true\"]', (event) => {\n $(event.currentTarget).attr(\"aria-expanded\", true);\n });\n\n // Properly update the ARIA states on blur (keyboard) and mouse out events.\n $('[role=\"menubar\"]').on(\"blur.aria mouseleave.aria\", '[aria-haspopup=\"true\"]', (event) => {\n $(event.currentTarget).attr(\"aria-expanded\", false);\n });\n\n const overlayToggles = document.querySelectorAll(\".trigger-overlay\");\n for (const toggle of overlayToggles) {\n toggle.addEventListener(\n \"click\",\n () => {\n const body = document.querySelector(\"body\");\n const logo = document.querySelector(\".logo-image-overlay\");\n const logoMobile = document.querySelector(\".logo-mobile-image-overlay\");\n const language = document.querySelector(\".language-block\");\n const overlay = document.querySelector(\".top-bar-overlay\");\n const overlayItems = overlay.querySelectorAll(\"li\");\n if (overlay.classList.contains(\"visible\")) {\n body.classList.remove(\"overlay-visible\");\n overlay.classList.remove(\"visible\");\n if (logo) {\n logo.classList.remove(\"fadeInUp\");\n }\n if (logoMobile) {\n logoMobile.classList.remove(\"fadeInUp\");\n }\n if (language) {\n language.classList.remove(\"fadeInUp\");\n }\n for (const li of overlayItems) {\n li.classList.remove(\"fadeInUp\");\n }\n } else {\n body.classList.add(\"overlay-visible\");\n overlay.classList.add(\"visible\");\n if (logo) {\n logo.classList.add(\"fadeInUp\");\n }\n if (logoMobile) {\n logoMobile.classList.add(\"fadeInUp\");\n }\n if (language) {\n language.classList.add(\"fadeInUp\");\n }\n for (const li of overlayItems) {\n li.classList.add(\"fadeInUp\");\n }\n }\n },\n { passive: true }\n );\n }\n\n const toggleArrow = document.querySelector(\".hide.icon-arrow\");\n if (toggleArrow) {\n const submenuTogglesCheckInterval = setInterval(function () {\n const submenuToggles = document.getElementsByClassName(\"submenu-toggle\");\n\n if (submenuToggles.length !== 0) {\n for (let toggle of submenuToggles) {\n if (toggle.getElementsByTagName(\"svg\").length === 0) {\n toggle.innerHTML += toggleArrow.innerHTML;\n }\n }\n\n clearInterval(submenuTogglesCheckInterval);\n }\n });\n }\n\n const searchBlockButton = document.querySelector(\".search-block-button\");\n const searchFormBlock = document.querySelector(\".search-form-block\");\n if (searchBlockButton) {\n searchBlockButton.addEventListener(\n \"click\",\n () => {\n searchBlockButton.classList.toggle(\"visible\");\n if (searchFormBlock) {\n searchFormBlock.classList.toggle(\"visible\");\n }\n },\n { passive: true }\n );\n }\n },\n { passive: true }\n);\n","import $ from \"jquery\";\n\n$(function () {\n if ($(\".woocommerce .product-image-slider\").length) {\n const galleryThumbs = new window.Swiper(\".woocommerce .product-thumbnail-slider\", {\n slidesPerView: 5,\n freeMode: true,\n watchSlidesVisibility: true,\n watchSlidesProgress: true,\n scrollbar: {\n el: \".swiper-scrollbar\",\n hide: true,\n },\n });\n\n if ($(\".woocommerce .product-thumbnail-slider\").length) {\n const galleryTop = new window.Swiper(\".woocommerce .product-image-slider\", {\n autoHeight: true,\n navigation: {\n nextEl: \".swiper-button-next\",\n prevEl: \".swiper-button-prev\",\n },\n thumbs: {\n swiper: galleryThumbs,\n },\n });\n }\n }\n});\n\n$(document).on(\"change input\", \".woocommerce-cart-form .cart_item :input\", function (e) {\n $('.woocommerce-cart-form :input[name=\"update_cart\"]').prop(\"disabled\", false);\n});\n\n$(document.body).on(\"change blur\", \"form.woocommerce-cart-form .qty-field select\", function (e) {\n const select = $(this);\n const value = select.val();\n const parent = select.parent();\n parent.find(\"input\").val(value);\n});\n","import $ from \"jquery\";\n\nif (wp && wp.data) {\n if ($(window).width() > 600 && $(\"body\").hasClass(\"custom-admin-styling\")) {\n $(\"html\").css(\"padding-top\", \"50px\");\n }\n\n $(window).on(\"resize\", () => {\n if ($(\"body\").hasClass(\"custom-admin-styling\")) {\n if ($(window).width() > 600) {\n if ($(\"html\").css(\"padding-top\") != \"50px\") {\n $(\"html\").css(\"padding-top\", \"50px\");\n }\n } else {\n $(\"html\").css(\"padding-top\", \"\");\n }\n }\n });\n\n document.addEventListener(\"DOMContentLoaded\", () => {\n const gutenbergLoadCheck = setInterval(() => {\n const anchors = $(\"[data-block] a\");\n if (anchors.length > 0) {\n anchors.on(\"click\", (e) => {\n e.preventDefault();\n });\n\n clearInterval(gutenbergLoadCheck);\n }\n }, 100);\n\n const editPost = wp.data.select(\"core/edit-post\");\n if (editPost) {\n editPost.isFeatureActive(\"fullscreenMode\") &&\n wp.data.dispatch(\"core/edit-post\").toggleFeature(\"fullscreenMode\");\n }\n });\n}\n\nif (typeof acf !== \"undefined\") {\n acf.addFilter(\"acf_blocks_parse_node_attr\", function (shortcut, nodeAttr) {\n if (nodeAttr.name === \"class\" && nodeAttr.value.indexOf(\"iconify\") !== -1) {\n return {\n name: nodeAttr.name,\n value: nodeAttr.value,\n };\n }\n\n return shortcut;\n });\n}\n","import $ from \"jquery\";\nimport axios from \"axios\";\n\n$(() => {\n $(\".load-more\").on(\"click\", function () {\n const id = $(this).data(\"id\");\n const fields = $(this).data(\"fields\");\n if (!fields) {\n return;\n }\n\n const initialOffset = $(this).data(\"initial-offset\") ?? 0;\n const offset = $(`#${id} .related-pages .related-page-card:not([class$=\"included\"])`).length ?? 0;\n const masonry = $(this).data(\"is-masonry\") ?? 0;\n const slider = $(this).data(\"is-slider\") ?? 0;\n const textLoadMore = $(this).data(\"text-load-more\");\n const textLoading = $(this).data(\"text-loading\");\n const textLoadFailed = $(this).data(\"text-load-failed\");\n\n // Data to send back to WordPress.\n const formData = new FormData();\n formData.append(\"action\", \"load_posts_by_ajax\");\n formData.append(\"security\", themosis.nonce);\n formData.append(\"offset\", initialOffset + offset);\n formData.append(\"fields\", JSON.stringify(fields));\n\n // Change button text to loading text.\n $(`#${id} .load-more`).html(textLoading);\n\n // Do request.\n axios\n .post(themosis.ajaxurl, formData)\n .then(({ data }) => {\n // Create a placeholder div to store retrieved posts.\n const cards = document.createElement(\"div\");\n cards.innerHTML = data;\n\n // If retrieved posts length is smaller than the amount to load,\n // hide the button, else replace text with initial text.\n if (cards.children.length < fields.ajax_amount_to_load) {\n $(`#${id} .load-more`).remove();\n } else {\n $(`#${id} .load-more`).html(textLoadMore);\n }\n\n // Append loaded posts to the end.\n $(`#${id} .related-pages`).append(data);\n\n // Reinit masonry or equalizer.\n if (slider) {\n const instance = cardSliders.find((x) => x.id === id).instance;\n instance.update();\n }\n\n // Reinit masonry or equalizer.\n if (masonry) {\n const instance = masonryGrids.find((x) => x.id === id).instance;\n instance.runOnImageLoad(function () {\n instance.recalculate(true);\n }, true);\n } else {\n Foundation.reInit(\"equalizer\");\n }\n })\n .catch((error) => {\n $(`#${id} .load-more`).html(textLoadFailed);\n });\n });\n});\n","import $ from \"jquery\";\n\ndocument.addEventListener(\n `DOMContentLoaded`,\n function () {\n $(\".ms_tag-filter .smart-tags\").change(function () {\n const $hiddenInput = $(\".ms_tag-filter .hidden-input\");\n const $emptyInput = $(\".ms_tag-filter .empty-input\");\n const $smartTag = $(this).val();\n\n $.ajax({\n url: themosis.ajaxurl,\n type: \"POST\",\n cache: false,\n data: {\n action: \"populate_posts_with_tag\",\n smart_tag: $smartTag,\n },\n success: function (data) {\n const $select = $(\".ms_tag-filter .posts-with-tag\");\n if (!data || data.length === 0) {\n $select.html(``);\n } else {\n $select.html(`${data}`);\n }\n },\n });\n });\n\n $(\".ms_tag-filter .posts-with-tag\").change(function () {\n const options = this.options;\n const selectedOption = this.options[this.selectedIndex];\n const selectedSmartTagLabel =\n document.querySelector(\".ms_tag-filter .smart-tags\").options[\n document.querySelector(\".ms_tag-filter .smart-tags\").selectedIndex\n ].label;\n\n if (options && selectedOption.value !== \"\") {\n if (typeof ga !== \"undefined\" && typeof ga.getAll === \"function\") {\n new Promise((resolve, _) => {\n const analyticsGTMID = ga.getAll()[0].get(\"trackingId\");\n ga(\n `gtag_${analyticsGTMID}.send`,\n \"event\",\n \"Tag filter\",\n \"redirect\",\n selectedSmartTagLabel + \" -> \" + selectedOption.label\n );\n resolve();\n }).then(() => {\n // Redirect to the selected option.\n window.location = this.options[this.selectedIndex].value;\n });\n } else {\n // Redirect to the selected option.\n window.location = this.options[this.selectedIndex].value;\n }\n }\n });\n },\n { passive: true }\n);\n","import $ from \"jquery\";\n\nwindow.addEventListener(\n \"load\",\n () => {\n if ($(\".scrollhide-nav\").length > 0 && Foundation.MediaQuery.only(\"small\")) {\n let prev = 0;\n const height = $(\".ms_thintopbar\").outerHeight();\n\n $(window).on(\"scroll\", () => {\n const scrollTop = $(window).scrollTop();\n $(\".scrollhide-nav\").toggleClass(\"hidden\", scrollTop > prev);\n\n let offset = 0;\n if (scrollTop > prev) {\n offset = 0;\n } else {\n offset = height - 1;\n }\n\n $(\".ms-menu .sticky\").attr(\"style\", `top: ${offset}px !important`);\n\n prev = scrollTop;\n });\n\n $(\".ms-menu .sticky\").on(\"sticky.zf.unstuckfrom:top\", function () {\n $(\".ms-menu .sticky\").attr(\"style\", `margin-top: ${height - 1}px !important`);\n });\n $(\".ms-menu .sticky\").on(\"sticky.zf.stuckto:top\", function () {\n $(\".ms-menu .sticky\").attr(\"style\", `margin-top: 0px !important`);\n });\n }\n },\n { passive: true }\n);\n","import $ from \"/srv/www/f/friesland-boating.nl/vhosts/www/htdocs/wp-content/plugins/wp-soup-framework/node_modules/jquery\";\n\n$(document).ready(function () {\n $(\".article-date\").insertAfter(\".wp-block-acf-breadcrumbs\");\n\n $(\".exclusive-price\").click(function () {\n $(\".panels\").removeClass(\"is-active\");\n $(\".ms-tabs\").removeClass(\"is-active\");\n $(\".exclusive-tab\").addClass(\"is-active\");\n $(\".ms-tabs-sevice\").addClass(\"is-active\");\n });\n var galleryThumbs = new Swiper(\".ms_boat-gallery-thumbs\", {\n spaceBetween: 10,\n slidesPerView: 4,\n loop: true,\n freeMode: true,\n loopedSlides: 5, // looped slides should be the same\n navigation: {\n nextEl: \".ms_boat-thumbnail-swiper-button-next\",\n prevEl: \".ms_boat-thumbnail-swiper-button-prev\",\n },\n watchSlidesVisibility: true,\n watchSlidesProgress: true,\n });\n var galleryTop = new Swiper(\".ms_boat-gallery-top\", {\n spaceBetween: 10,\n loop: true,\n loopedSlides: 5, // looped slides should be the same\n navigation: {\n nextEl: \".ms_boat-swiper-button-next\",\n prevEl: \".ms_boat-swiper-button-prev\",\n },\n thumbs: {\n swiper: galleryThumbs,\n },\n });\n\n /**\n * Register click events for all calendar links\n */\n function registerCalendarLinks() {\n registerScrollOnClick(\"addlink\", \"addperiodes\", registerBoekenLinks);\n }\n registerCalendarLinks();\n\n /**\n *\n *\n * register click events in boeken links\n */\n function registerBoekenLinks() {\n registerScrollOnClick(\"xaddlink\", \"rental\", registerCustomerInfo);\n }\n\n /**\n * register click events in customer info\n */\n function registerCustomerInfo() {\n registerScrollOnClick(\"button_verder\", \"rental\");\n }\n\n /**\n * Register a click event that will scroll to a given element\n * @param string from_class which classes can be clicked\n * @param string to_id where to scroll to\n * @param function|null on_finish optional what to do on finish besides scrolling\n */\n function registerScrollOnClick(from_class, to_id, on_finish = null) {\n const elements = document.getElementsByClassName(from_class);\n // if not empty\n if (elements.length > 0) {\n Array.from(elements).forEach((element) => {\n element.addEventListener(\"click\", () => {\n scrollToSmooth(to_id);\n if (on_finish) {\n on_finish();\n }\n });\n });\n } else {\n window.setTimeout(() => {\n registerScrollOnClick(from_class, to_id, on_finish);\n }, 100);\n }\n }\n\n /**\n * Scroll to id, smoothly\n * @param string id\n */\n function scrollToSmooth(id) {\n const element = document.getElementById(id);\n if (element) {\n // how far extra it has to scroll up:\n const offset = 80;\n const body_pos = document.body.getBoundingClientRect().top;\n const element_pos = element.getBoundingClientRect().top;\n\n window.scrollTo({\n top: element_pos - body_pos - offset,\n behavior: \"smooth\",\n });\n } else {\n window.setTimeout(() => {\n scrollToSmooth(id);\n }, 100);\n }\n }\n\n if (document.getElementById(\"boeken_wrapper\")) {\n $(\"#boeken_wrapper .stappen ul li\").wrapInner(\"\");\n\n document\n .getElementById(\"boeken_wrapper\")\n .addEventListener(\"DOMSubtreeModified\", LocalMain, false);\n function LocalMain() {\n document\n .getElementById(\"boeken_wrapper\")\n .removeEventListener(\"DOMSubtreeModified\", LocalMain);\n\n if ($(\"#boeken_wrapper .stappen ul li\").children(\"span\").length === 0) {\n $(\"#boeken_wrapper .stappen ul li\").wrapInner(\"\");\n }\n\n document\n .getElementById(\"boeken_wrapper\")\n .addEventListener(\"DOMSubtreeModified\", LocalMain, false);\n }\n }\n});\n","import $ from \"/srv/www/f/friesland-boating.nl/vhosts/www/htdocs/wp-content/plugins/wp-soup-framework/node_modules/jquery\";\nimport Isotope from \"/srv/www/f/friesland-boating.nl/vhosts/www/htdocs/wp-content/plugins/wp-soup-framework/node_modules/isotope-layout\";\n\n$(document).ready(() => {\n const $container = $(\".ms_boat-filter .boats\");\n const filters = {};\n let totalAmountOfPersons = 2;\n let comboFilter;\n let i = 0;\n\n if ($container.length) {\n new Isotope('.ms_boat-filter .boats', {\n itemSelector: \".filter-boat-card\",\n filter: multipleFilter\n });\n\n // Create filters when checkboxes change.\n $(\".ms_boat-filter [data-slider]\").on(\"moved.zf.slider\", () => {\n // Change the comparator for the range slider.\n totalAmountOfPersons = +$(\"#selectedValue\").val();\n // Increase value so we can check if the user has checked a checkbox.\n i++;\n new Isotope('.ms_boat-filter .boats', {\n filter: multipleFilter\n });\n });\n\n // Create filters when checkboxes change.\n const $checkboxes = $(\".filter .checkboxes input\");\n $checkboxes.on(\"change\", ({ target }) => {\n // Increase value so we can check if the user has moved the range slider.\n i++;\n const $checkbox = $(target);\n manageCheckbox($checkbox);\n comboFilter = getComboFilter(filters);\n new Isotope('.ms_boat-filter .boats', {\n filter: multipleFilter\n });\n });\n\n function multipleFilter() {\n const item = $(this);\n // Check if selected range value is between min and max of an item.\n function checkValue() {\n const min = item.attr(\"data-min-persons\");\n const max = item.attr(\"data-max-persons\");\n const isInPersonsRange =\n totalAmountOfPersons >= min && totalAmountOfPersons <= max;\n return isInPersonsRange;\n }\n\n // Show all items when totalAmountOfPersons is 2.\n if (totalAmountOfPersons === 2) {\n console.log(totalAmountOfPersons, comboFilter || \"*\");\n return item.is(comboFilter || \"*\");\n }\n\n console.log('normal ', checkValue(), item.is(comboFilter || \"*\"));\n\n // Show or do not show item based on conditions.\n return checkValue() && item.is(comboFilter || \"*\");\n }\n\n function getComboFilter(filters) {\n let combo = [];\n for (const prop in filters) {\n const group = filters[prop];\n if (!group.length) {\n // No filters in the group, so continue.\n continue;\n }\n // Add first group.\n if (!combo.length) {\n combo = group.slice(0);\n continue;\n }\n // Add additional groups.\n const nextCombo = [];\n // Split group into combo: [ A, B ] & [ 1, 2 ] => [ A1, A2, B1, B2 ]\n for (let i = 0; i < combo.length; i++) {\n for (let j = 0; j < group.length; j++) {\n const item = combo[i] + group[j];\n nextCombo.push(item);\n }\n }\n combo = nextCombo;\n }\n const comboFilter = combo.join(\", \");\n return comboFilter;\n }\n\n function manageCheckbox($checkbox) {\n const checkbox = $checkbox[0];\n const group = $checkbox.parents(\".options\").attr(\"data-group\");\n // Create array for filter group, if not there yet.\n let filterGroup = filters[group];\n if (!filterGroup) {\n filterGroup = filters[group] = [];\n }\n\n const index = $.inArray(checkbox.value, filterGroup);\n if (checkbox.checked) {\n // Check if index is not yet in group.\n if (index === -1) {\n // Add filter to group.\n filters[group].push(checkbox.value);\n }\n } else {\n // Remove filter from group.\n filters[group].splice(index, 1);\n }\n }\n }\n});\n"],"names":["wpSoupGetBlocksOnPage","blocks","wp","data","select","getBlocks","forEach","block","wpSoupGetBlocksFromBlock","hasOwnProperty","innerBlocks","inner_block","undefined","hooks","addFilter","props","blockType","attributes","notDefined","className","name","Object","assign","domReady","wp_soup_deprecated_blocks","available_blocks","getBlockTypes","blocks_in_page","deprecated_block","find","result","category","unregisterBlockType","document","addEventListener","i","_step","querySelectorAll","c","window","$clamp","clamp","_iterator","passive","changeOption","selector","label","field","querySelector","option","innerHTML","disabled","translationNotice","e","cname","cvalue","exdays","d","Date","setTime","getTime","expires","toUTCString","cookie","setCookie","documentMode","Foundation","MediaQuery","current","column","flexBasis","style","isMargin","parentElement","classList","contains","setAttribute","setProperty","_step2","_iterator2","setScrollbarSize","scrollbox","createElement","overflow","body","appendChild","scrollBarWidth","offsetWidth","clientWidth","removeChild","scrollHeight","innerHeight","add","remove","epve","getEditorWidth","width","backTop","getElementsByClassName","checkBackToTop","windowTop","scrollElement","scrollTop","documentElement","dataElement","scrollY","scrollOffset","scrolling","scrollTo","final","duration","cb","scrollEl","element","start","currentTime","requestAnimationFrame","animateScroll","timestamp","progress","val","Math","easeInOutQuad","getAttribute","scrollDuration","parseInt","event","preventDefault","getElementById","replace","getElementsByTagName","focus","activeElement","setTimeout","t","b","options","truncationHTMLContainer","win","opt","useNativeClamp","splitOnChars","animate","truncationChar","truncationHTML","sty","originalText","supportsNativeClamp","webkitLineClamp","clampValue","isCSSValue","indexOf","computeStyle","elem","prop","getComputedStyle","el","pseudo","this","getPropertyValue","re","test","arguments","toUpperCase","currentStyle","getMaxLines","height","availHeight","clientHeight","lineHeight","getLineHeight","max","floor","lh","chunks","lastChunk","clampedText","clmp","slice","splitChar","getLastChild","lastChild","children","length","Array","prototype","call","pop","nodeValue","parentNode","applyEllipsis","str","textOverflow","webkitBoxOrient","display","truncate","target","maxHeight","shift","split","join","original","clamped","navigator","platform","maxTouchPoints","MSStream","containers","_toConsumableArray","container","$","Parallax","self","_typeof","refresh","render","extend","$element","imageSrc","is","attr","positions","position","toLowerCase","match","push","positionX","positionY","isNaN","userAgent","iosFix","css","backgroundImage","backgroundSize","backgroundPosition","androidFix","$mirror","prependTo","mirrorContainer","slider","sliderExisted","$slider","addClass","visibility","zIndex","top","left","one","naturalHeight","naturalWidth","aspectRatio","isSetup","setup","sliders","isFresh","requestRender","src","complete","trigger","lastTime","vendors","x","cancelAnimationFrame","callback","currTime","timeToCall","id","clearTimeout","speed","bleed","overScrollFix","boxWidth","outerWidth","boxHeight","outerHeight","boxOffsetTop","offset","boxOffsetLeft","boxOffsetBottom","margin","winHeight","docHeight","maxOffset","min","minOffset","imageHeightMin","imageOffsetMin","imageWidth","imageHeight","offsetBaseTop","offsetLeft","scrollLeft","overScroll","scrollBottom","mirrorTop","mirrorLeft","offsetTop","transform","maxWidth","winWidth","docWidth","isReady","isBusy","$doc","$win","loadDimensions","loadScrollPosition","winScrollTop","scrollTopMax","scrollLeftMax","on","lastPosition","frameLoop","pageYOffset","configure","each","destroy","parallaxElement","splice","off","old","fn","parallax","$this","Constructor","noConflict","menu","previews","link","dataset","_link$dataset","_step3","preview","_preview$dataset","content","_iterator3","_loop2","_loop","priceToggle","priceContent","extraPriceContent","toggle","reInit","priceBlocks","title","textContent","buttonWC","buttonWCHref","href","button","buttonHref","extraOptions","selectedOptionsID","selectedOptions","_step4","entries","index","optionName","trim","optionID","firstPriceNode","secondPriceNode","optionPrice","parseFloat","price","optionPrice2","secondPrice","firstPrice","newFirstPriceHTML","checked","toFixed","secondPriceHTML","filter","value","params","URLSearchParams","newParams","key","append","toString","optionsString","_iterator4","msInitializeReviewSlider","sliderOptions","JSON","parse","Swiper","acf","addAction","$el","msInitializeBoatSlider","loop","loopedSlides","slidesPerView","spaceBetween","autoplay","delay","effect","fadeEffect","crossFade","navigation","factory","matchesMethod","ElemProto","Element","matches","matchesSelector","prefixes","method","EvEmitter","proto","eventName","listener","events","_events","listeners","once","onceEvents","_onceEvents","emitEvent","args","onceListeners","apply","allOff","utils","a","num","div","arraySlice","makeArray","obj","isArray","removeFrom","ary","getParent","getQueryElement","handleEvent","type","filterFindElements","elems","ffElems","HTMLElement","childElems","debounceMethod","_class","methodName","threshold","timeoutName","timeout","_this","docReady","readyState","toDashed","$1","$2","console","htmlInit","WidgetClass","namespace","dashedNamespace","dataAttr","dataAttrElems","jsDashElems","concat","dataOptionsAttr","jQuery","error","instance","module","exports","FormData","getStyleSize","noop","logError","message","measurements","measurementsLength","getZeroSize","size","innerWidth","getStyle","isBoxSizeOuter","padding","borderStyle","borderWidth","boxSizing","round","getSize","nodeType","offsetHeight","isBorderBox","measurement","paddingWidth","paddingLeft","paddingRight","paddingHeight","paddingTop","paddingBottom","marginWidth","marginLeft","marginRight","marginHeight","marginTop","marginBottom","borderLeftWidth","borderRightWidth","borderHeight","borderTopWidth","borderBottomWidth","isBorderBoxSizeOuter","styleWidth","styleHeight","Outlayer","Item","LayoutMode","String","Isotope","create","layoutMode","isJQueryFiltering","sortAscending","_create","itemGUID","_sorters","_getSorters","modes","filteredItems","items","sortHistory","_initLayoutMode","reloadItems","_itemize","_updateItemsSortData","Mode","initialOpts","layout","_isLayoutInited","_getOption","_layout","arrange","isInstant","_getIsInstant","_resetLayout","_manageStamps","layoutItems","opts","filtered","_filter","_bindArrangeComplete","_isInstant","_noTransition","_hideReveal","_sort","_init","reveal","needReveal","hide","needHide","isLayoutInstant","isLayoutComplete","isHideComplete","isRevealComplete","arrangeParallelCallback","dispatchEvent","hiddenMatched","visibleUnmatched","_getFilterTest","item","isIgnored","isMatched","isHidden","updateSortData","getItems","getSortData","sorter","mungeSorter","len","query","attrMatch","getValue","getValueGetter","parser","sortDataParsers","child","getItemSorter","sortBys","sortAsc","itemA","itemB","sortBy","sortData","_getIsSameSortBy","itemSorter","sort","_mode","mode","Error","_getItemLayoutPosition","_manageStamp","stamp","_getContainerSize","needsResizeLayout","appended","addItems","_filterRevealAdded","prepended","insert","filteredInsertItems","_remove","removeItems","shuffle","random","transitionDuration","returnValue","getFilteredItemElements","map","sorters","_destroy","isotope","needsVerticalResizeLayout","_getMeasurement","getColumnWidth","getSegmentSize","getRowHeight","segment","segmentName","outerSize","firstItemSize","getFirstItemSize","firstItem","constructor","FitRows","y","maxY","itemWidth","gutter","containerWidth","Masonry","MasonryMode","keepModeMethods","_getElementOffset","measureColumns","isFitWidth","fitWidth","Vertical","horizontalAlignment","n","r","o","Promise","A","recalculate","responsiveOptions","keys","s","breakAt","O","useContainerForBreakpoints","columns","mobileFirst","u","l","rows","v","p","M","cols","macyComplete","tmpRows","f","lastcol","C","h","nodeName","byCss","selectors","RegExp","substring","m","running","run","clear","emit","g","E","then","constants","EVENT_IMAGE_LOAD","img","catch","EVENT_IMAGE_ERROR","w","all","EVENT_IMAGE_COMPLETE","I","EVENT_RESIZE","queue","N","debug","T","resizer","L","useOwnImageLoader","waitForImages","EVENT_INITIALIZED","_","V","from","offsetParent","trueOrder","EVENT_RECALCULATED","R","k","useImageLoader","onInit","cancelLegacy","removeAttribute","q","init","warn","recalculateOnImageLoad","runOnImageLoad","removeEventListener","compatOptions","colYs","horizontalColIndex","getContainerWidth","columnWidth","firstItemElem","excess","remainder","colSpan","colPosition","horizontalOrder","col","setHeight","setMax","_getTopColPosition","colGroup","_getTopColGroup","minimumY","groupCount","_getColGroupY","groupColYs","_getHorizontalColPosition","hasSize","stampSize","firstX","right","lastX","firstCol","lastCol","stampMaxY","bottom","_getContainerFitWidth","unusedCols","previousWidth","OFI","propRegex","testImg","Image","supportsObjectFit","supportsObjectPosition","supportsOFI","supportsCurrentSrc","currentSrc","nativeGetAttribute","nativeSetAttribute","autoModeEnabled","setPlaceholder","placeholder","onImageReady","fixOne","parsed","fontFamily","exec","ofi","skipTest","srcset","descriptors","get","set","defineProperty","ss","keepSrcUsable","err","picturefill","pf","ns","evaled","fillImg","reselect","curSrc","supported","polyfillCurrentSrc","backgroundRepeat","backgroundOrigin","fix","imgs","startAutoMode","tagName","watchMQ","bind","getOfiImageMaybe","HTMLImageElement","hijackAttributes","isEmptyObj","docElemStyle","transitionProperty","transition","transformProperty","transitionEndEvent","WebkitTransition","vendorProperties","transitionDelay","toDashedAll","_transn","ingProperties","clean","onEnd","elemStyle","getPosition","isOriginLeft","isOriginTop","xValue","yValue","layoutSize","layoutPosition","xPadding","xProperty","xResetProperty","getXValue","yPadding","yProperty","yResetProperty","getYValue","isHorizontal","percentPosition","_transitionTo","curX","curY","didNotMove","setPosition","isTransitioning","transX","transY","transitionStyle","getTranslate","to","onTransitionEnd","isCleaning","goTo","moveTo","_nonTransition","_removeStyles","_transition","enableTransition","transitionProps","staggerDelay","onwebkitTransitionEnd","ontransitionend","onotransitionend","dashedVendorProperties","propertyName","disableTransition","removeTransitionStyles","cleanStyle","cleanTransitionStyle","stagger","removeElem","getHideRevealTransitionEndProperty","onRevealTransitionEnd","hiddenStyle","visibleStyle","styleProperty","optionStyle","opacity","onHideTransitionEnd","GUID","instances","queryElement","defaults","outlayerGUID","containerStyle","initLayout","originLeft","originTop","resize","resizeContainer","subclass","Parent","SubClass","oldOption","horizontal","layoutInstant","stamps","bindResize","itemElems","_filterFindItemElements","itemSelector","getItemElements","_getItemsForLayout","_layoutItems","_postLayout","_emitCompleteOnItems","_processLayoutQueue","updateStagger","_positionItem","getMilliseconds","_setContainerMeasure","measure","isWidth","elemSize","onComplete","count","doneCount","tick","emitArgs","$event","Event","ignore","getItem","unignore","_find","unstamp","_getBoundingRect","boundingRect","getBoundingClientRect","_boundingRect","thisRect","isResizeBound","unbindResize","onresize","previousItems","revealItemElements","hideItemElements","removeData","Layout","bridget","msUnits","ms","time","unit","modules","installedModules","moduleId","loaded","ask","ignoreKeys","specificKeys","registerOnChange","unRegisterOnChange","docElem","currentElement","currentInput","currentIntent","currentTimestamp","now","shouldPersist","formInputs","functionList","ignoreMap","specificMap","inputMap","keydown","keyup","mousedown","mousemove","MSPointerDown","MSPointerMove","pointerdown","pointermove","touchstart","touchend","isScrolling","mousePos","pointerMap","supportsPassive","addListeners","capture","setPersist","PointerEvent","setInput","setIntent","MSPointerEvent","detectWheel","setElement","clearElement","sessionStorage","doUpdate","eventKey","which","pointerType","ignoreMatch","specificMatch","shouldUpdate","validateTouch","persistInput","activeElem","checkClosest","fireFunctions","detectScrolling","setItem","touchIsValid","onmousewheel","screenX","screenY","tag","ElementPrototype","msMatchesSelector","webkitMatchesSelector","closest","arr","eventType","objPos","clearStorage","__webpack_module_cache__","__webpack_require__","cachedModule","__webpack_modules__","getter","__esModule","definition","enumerable","rtl","GetYoDigits","chars","charsLength","transitionend","$elem","end","transitions","triggerHandler","onLoad","handler","didLoad","ignoreMousedisappear","ignoreLeaveWindow","ignoreReappear","eLeave","rest","relatedTarget","hasFocus","eReenter","currentTarget","has","matchMedia","styleMedia","media","info","script","insertBefore","head","matchMedium","text","styleSheet","cssText","queries","isInitialized","appendTo","namedQueries","extractedStyles","styleObject","reduce","ret","param","parts","decodeURIComponent","parseStyleToObject","_getCurrentSize","_watcher","_reInit","atLeast","only","upTo","nextSize","next","bpSize","bpModifier","queryIndex","findIndex","_getQueryName","nextQuery","TypeError","matched","newSize","currentSize","version","_plugins","_uuids","plugin","functionName","attrName","hyphenate","registerPlugin","pluginName","uuid","unregisterPlugin","removeAttr","plugins","isJQ","plgs","foundation","object","reflow","addBack","parseValue","er","getFnName","addToJquery","$noJS","removeClass","plugClass","ReferenceError","Function","results","util","throttle","func","timer","context","vp","nextTime","performance","oThis","aArgs","fToBind","fNOP","fBound","Plugin","_setup","getPluginName","keyCodes","commands","findFocusable","aTabIndex","bTabIndex","parseKey","keyCode","fromCharCode","shiftKey","ctrlKey","altKey","Keyboard","kcs","kc","getKeyCodes","handleKey","component","functions","commandList","zfIsKeyHandled","ltr","handled","unhandled","register","componentName","cmds","trapFocus","$focusable","$firstFocusable","eq","$lastFocusable","releaseFocus","Accordion","_isInitializing","$tabs","idx","$content","linkId","$initActive","_initialAnchor","prev","_openSingleTab","_checkDeepLink","anchor","location","hash","$anchor","$link","parent","hasClass","_closeAllTabs","deepLinkSmudge","deepLinkSmudgeOffset","deepLinkSmudgeDelay","deepLink","$tabContent","$a","multiExpand","previous","first","last","$target","up","down","updateHistory","history","pushState","replaceState","_openTab","$targetItem","$othersItems","siblings","allowAllClosed","_closeTab","$activeContents","not","targetContentId","finish","slideDown","slideSpeed","slideUp","$activeTabs","stop","Nest","Feather","subMenuClass","subItemClass","hasSubClass","applyAria","$item","$sub","Burn","AccordionMenu","multiOpen","$menuLinks","subId","isActive","parentLink","clone","wrap","submenuToggle","after","submenuToggleText","initPanes","$submenu","$prevElement","$nextElement","$elements","parents","open","close","closeAll","hideAll","showAll","$targetBranch","parentsUntil","$othersActiveSubmenus","$submenus","$allmenus","detach","Box","ImNotTouchingYou","lrOnly","tbOnly","ignoreBottom","OverlapArea","GetDimensions","GetExplicitOffsets","alignment","vOffset","hOffset","isOverflow","topVal","leftVal","$eleDims","$anchorDims","topOver","bottomOver","leftOver","rightOver","eleDims","parDims","windowDims","sqrt","rect","parRect","winRect","winY","winX","pageXOffset","parentDims","POSITIONS","VERTICAL_ALIGNMENTS","HORIZONTAL_ALIGNMENTS","ALIGNMENTS","nextItem","array","currentIdx","Positionable","triedPositions","_getDefaultPosition","_getDefaultAlignment","originalPosition","originalAlignment","_reposition","_alignmentsExhausted","_realign","_addTriedPosition","_positionsExhausted","isExhausted","_getVOffset","_getHOffset","_setPosition","$parent","allowOverlap","minOverlap","minCoordinates","overlap","allowBottomOverlap","initClasses","activeClasses","Motion","animation","isIn","initClass","activeClass","reset","show","MutationObserver","triggers","Triggers","Listeners","Basic","Global","Initializers","debounceGlobalListener","debounce","openListener","closeListener","toggleListener","closeableListener","stopPropagation","fadeOut","toggleFocusListener","addOpenListener","addCloseListener","addToggleListener","addCloseableListener","addToggleFocusListener","resizeListener","$nodes","scrollListener","closeMeListener","pluginId","addClosemeListener","yetiBoxes","plugNames","addResizeListener","addScrollListener","addMutationEventsListener","listeningElementsMutation","mutationRecordsList","attributeName","observe","childList","characterData","subtree","attributeFilter","addSimpleListeners","$document","addGlobalListeners","__","IHearYou","startPosX","startTime","elapsedTime","startEvent","Touch","isMoving","didMoved","onTouchEnd","onTouchMove","tapEvent","dir","touches","pageX","dx","abs","onTouchStart","SpotSwipe","enabled","moveThreshold","timeThreshold","setupSpotSwipe","setupTouchHandler","handleTouch","simulatedEvent","changedTouches","touchmove","MouseEvent","clientX","clientY","createEvent","initMouseEvent","Dropdown","$id","$anchors","_setCurrentAnchor","parentClass","$currentAnchor","super","horizontalPosition","hasTouch","ontouchstart","forceFollow","hover","bodyData","whatinput","hoverDelay","hoverPane","_addBodyHandler","$body","autoFocus","closeOnClick","DropdownMenu","subs","$menuItems","verticalClass","rightClass","changed","_isVertical","_isRtl","parClass","clickOpen","hasSub","hasClicked","stopImmediatePropagation","_hide","_show","closeOnClickInside","disableHoverOnTouch","disableHover","autoclose","closingTime","isTab","nextSibling","prevSibling","openSub","closeSub","_removeBodyHandler","$sibs","oldClass","$parentLi","$toClose","$activeItem","onImagesLoaded","images","unloaded","singleImageLoaded","image","me","Equalizer","eqId","$watched","hasNested","isNested","isOn","_bindHandler","onResizeMeBound","_onResizeMe","onPostEqualizedBound","_onPostEqualized","tooSmall","equalizeOn","_checkMQ","_reflow","_pauseEvents","_killswitch","equalizeOnStack","_isStacked","equalizeByRow","getHeightsByRow","applyHeightByRow","getHeights","applyHeight","heights","lastElTopOffset","groups","group","elOffsetTop","j","ln","groupsILength","lenJ","Drilldown","autoApplyClass","$submenuAnchors","$currentMenu","_prepareMenu","_registerEvents","_keyboardEvents","$menu","backButtonPosition","backButton","prepend","_back","autoHeight","$wrapper","wrapper","animateHeight","_getMaxDims","_resize","ev","_hideAll","_scrollTop","$scrollTopElement","scrollTopElement","scrollPos","scrollTopOffset","animationDuration","animationEasing","calcHeight","parentSubMenu","_menuLinkEvents","_setShowSubMenuClasses","_setHideSubMenuClasses","_showMenu","isLastChild","blur","unwrap","MenuPlugins","dropdown","cssClass","drilldown","accordion","ResponsiveMenu","rules","currentMq","currentPlugin","rulesTree","rule","ruleSize","rulePlugin","_checkMediaQueries","matchedMq","ResponsiveToggle","targetID","$targetMenu","$toggler","input","animationIn","animationOut","_update","_updateMqHandler","toggleMenu","hideFor","Reveal","cached","mq","fullScreen","overlay","$overlay","_makeOverlay","onLoadListener","additionalOverlayClasses","_updatePosition","_handleState","_disableScroll","_enableScroll","$activeAnchor","multipleOpened","focusableElements","_addGlobalClasses","showDelay","_addGlobalListeners","updateScrollbarClass","toggleClass","_removeGlobalClasses","closeOnEsc","finishUp","hideDelay","resetOnClose","html","urlWithoutHash","pathname","search","Slider","initialized","inputs","handles","$handle","$input","$fill","vertical","disabledClass","binding","_setInitAttr","doubleSided","$handle2","$input2","setHandles","_setHandlePos","_pctOfBar","pctOfBar","percent","positionValueFunction","_logTransform","_powTransform","_value","base","log","baseLog","nonLinearBase","pow","$hndl","isDbl","h2Val","step","h1Val","vert","hOrW","lOrT","handleDim","elemDim","movement","decimal","_setValues","dim","isLeftHndl","handlePct","handlePos","initialStart","anim","prog","move","ts","Move","moveTime","changedDelay","initVal","initialEnd","_handleEvent","_adjustValue","direction","eventOffset","pageY","barDim","windowScroll","elemOffset","barXY","eventFromBar","offsetPct","absPosition","previousVal","_eventsForHandle","curHandle","handleChangeEvent","clickSelect","draggable","addTouch","newValue","_$handle","oldValue","decrease","increase","decreaseFast","increaseFast","frac","clickPos","invertVertical","SmoothScroll","_linkClickListener","_handleLinkClick","arrival","_inTransition","scrollToLoc","static","loc","$loc","Sticky","$container","wasWrapped","containerClass","stickyClass","scrollCount","checkEvery","isStuck","containerHeight","elemHeight","_parsePoints","_setSizes","scroll","_calc","_removeSticky","topPoint","reverse","pts","topAnchor","btmAnchor","breaks","pt","place","points","canStick","_eventsHandler","_pauseListeners","checkSizes","bottomPoint","_setSticky","stickTo","mrgn","notStuckTo","isTop","stickToTop","anchorPt","anchorHeight","topOrBottom","stickyOn","newElemWidth","comp","pdngl","pdngr","dynamicHeight","newContainerHeight","_setBreakPoints","mTop","emCalc","mBtm","em","fontSize","Tabs","$tabTitles","linkClass","linkActiveClass","matchHeight","$images","_setHeight","anchorNoHash","selectTab","_collapse","_addKeyHandler","_addClickHandler","_setHeightMqHandler","_handleTabChange","wrapOnKeys","historyHandled","activeCollapse","$oldTab","$tabLink","$targetContent","_collapseTab","panelActiveClass","$targetAnchor","$activeTab","idStr","hashIdStr","panelClass","panel","temp","Toggler","$triggers","toggler","$trigger","controls","_toggleClass","_updateARIA","_toggleAnimate","Tooltip","isClick","elemId","tipText","template","_buildTemplate","allowHtml","triggerClass","elementClassName","SVGElement","baseVal","tooltipWidth","tooltipHeight","templateClasses","tooltipClass","showOn","fadeIn","fadeInDuration","fadeOutDuration","isFocus","disableForTouch","touchCloseText","tabs","ResponsiveAccordionTabs","storezfData","currentRule","_getAllOptions","allOptions","dummyPlugin","tmpPlugin","keyKey","objObj","_changedZfMediaQueryHandler","_handleMarkup","toSet","fromString","$panels","tabsTitle","tabsPanel","$liHeads","$liHeadsA","$tabsContent","$placeholder","insertAfter","tempValue","masonryGrids","Macy","objectFitImages","__assign","CountUp","endVal","startVal","decimalPlaces","useEasing","useGrouping","smartEasingThreshold","smartEasingAmount","separator","prefix","suffix","enableScrollSpy","scrollSpyDelay","scrollSpyOnce","finalEndVal","countDown","paused","remaining","frameVal","easingFn","Number","printValue","rAF","update","formatNumber","numerals","easeOutExpo","formattingFn","validateValue","resetDuration","onScrollFns","handleScroll","onscroll","determineDirectionAndSmartEasing","pauseResume","ensureNumber","bubbles","cancelable","composed","registerEventListeners","elements","IntersectionObserverEntry","intersectionObserver","IntersectionObserver","animateModern","root","rootMargin","animateLegacy","elementIsInView","animateElement","isIntersecting","countUp","counterEnd","counterDuration","counterGrouping","counterSeparator","counterDecimal","counter","thisArg","getPrototypeOf","kindOf","cache","thing","kindOfTest","typeOfTest","isUndefined","isArrayBuffer","isString","isFunction","isNumber","isObject","isPlainObject","Symbol","toStringTag","iterator","isDate","isFile","isBlob","isFileList","isURLSearchParams","allOwnKeys","getOwnPropertyNames","findKey","_key","_global","global","isContextDefined","isTypedArray","TypedArray","Uint8Array","isHTMLForm","isRegExp","reduceDescriptors","reducer","getOwnPropertyDescriptors","reducedDescriptors","descriptor","defineProperties","isBuffer","isFormData","pattern","isArrayBufferView","ArrayBuffer","isView","buffer","isBoolean","isStream","pipe","merge","caseless","assignValue","targetKey","stripBOM","charCodeAt","inherits","superConstructor","toFlatObject","sourceObj","destObj","propFilter","merged","endsWith","searchString","lastIndex","toArray","forEachEntry","done","pair","matchAll","regExp","hasOwnProp","freezeMethods","writable","toObjectSet","arrayOrString","delimiter","define","toCamelCase","p1","p2","toFiniteNumber","defaultValue","isFinite","toJSONObject","stack","visit","source","reducedValue","AxiosError","code","config","request","response","captureStackTrace","toJSON","description","number","fileName","lineNumber","columnNumber","status","customProps","axiosError","cause","isVisitable","removeBrackets","renderKey","path","dots","token","predicates","formData","metaTokens","indexes","visitor","defaultVisitor","useBlob","Blob","convertValue","toISOString","Buffer","stringify","some","isFlatArray","exposedHelpers","build","encode","charMap","encodeURIComponent","AxiosURLSearchParams","_pairs","encoder","_encode","buildURL","url","serializeFn","serialize","serializedParams","hashmarkIndex","handlers","use","fulfilled","rejected","synchronous","runWhen","eject","silentJSONParsing","forcedJSONParsing","clarifyTimeoutError","isStandardBrowserEnv","product","isStandardBrowserWebWorkerEnv","WorkerGlobalScope","importScripts","isBrowser","classes","protocols","buildPath","isNumericKey","isLast","arrayToObject","parsePropPath","DEFAULT_CONTENT_TYPE","transitional","adapter","transformRequest","headers","contentType","getContentType","hasJSONContentType","isObjectPayload","setContentType","helpers","toURLEncodedForm","formSerializer","_FormData","env","rawValue","stringifySafely","transformResponse","JSONRequested","responseType","strictJSONParsing","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","common","ignoreDuplicateOf","$internals","normalizeHeader","header","normalizeValue","matchHeaderValue","AxiosHeaders","valueOrRewrite","rewrite","setHeader","_header","_rewrite","lHeader","setHeaders","rawHeaders","line","parseHeaders","tokens","tokensRE","parseTokens","matcher","delete","deleted","deleteHeader","normalize","format","normalized","char","formatHeader","targets","asStrings","computed","accessors","defineAccessor","accessorName","arg1","arg2","arg3","configurable","buildAccessors","accessor","transformData","fns","isCancel","__CANCEL__","CanceledError","write","domain","secure","toGMTString","read","buildFullPath","baseURL","requestedURL","relativeURL","combineURLs","msie","urlParsingNode","originURL","resolveURL","protocol","host","hostname","port","charAt","requestURL","samplesCount","bytes","timestamps","firstSampleTS","tail","chunkLength","startedAt","bytesCount","passed","progressEventReducer","isDownloadStream","bytesNotified","_speedometer","total","lengthComputable","progressBytes","rate","estimated","knownAdapters","http","xhr","XMLHttpRequest","resolve","reject","requestData","requestHeaders","onCanceled","cancelToken","unsubscribe","signal","auth","username","password","unescape","btoa","fullPath","onloadend","responseHeaders","getAllResponseHeaders","settle","responseText","statusText","paramsSerializer","onreadystatechange","responseURL","onabort","onerror","ontimeout","timeoutErrorMessage","xsrfValue","withCredentials","isURLSameOrigin","setRequestHeader","onDownloadProgress","onUploadProgress","upload","cancel","abort","subscribe","aborted","parseProtocol","send","adapters","nameOrAdapter","throwIfCancellationRequested","throwIfRequested","dispatchRequest","reason","headersToObject","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","timeoutMessage","decompress","beforeRedirect","transport","httpAgent","httpsAgent","socketPath","responseEncoding","configValue","VERSION","validators","deprecatedWarnings","validator","formatMessage","desc","assertOptions","schema","allowUnknown","Axios","instanceConfig","interceptors","configOrUrl","contextHeaders","boolean","function","requestInterceptorChain","synchronousRequestInterceptors","interceptor","unshift","responseInterceptorChain","promise","chain","newConfig","onFulfilled","onRejected","getUri","generateHTTPMethod","isForm","CancelToken","executor","resolvePromise","_listeners","onfulfilled","_resolve","axios","createInstance","defaultConfig","toFormData","Cancel","promises","spread","isAxiosError","payload","formToJSON","default","postID","postId","action","themosis","nonce","ajaxurl","success","outerHTML","wpsoup","favorites","button_icon_favorited","addToFavorites","button_icon","removeFromFavorites","containerId","LazyLoad","includes","randomID","submenu","logo","logoMobile","language","overlayItems","_step5","_iterator5","toggleArrow","submenuTogglesCheckInterval","setInterval","submenuToggles","clearInterval","searchBlockButton","searchFormBlock","galleryThumbs","freeMode","watchSlidesVisibility","watchSlidesProgress","scrollbar","nextEl","prevEl","thumbs","swiper","gutenbergLoadCheck","anchors","editPost","isFeatureActive","dispatch","toggleFeature","shortcut","nodeAttr","fields","initialOffset","masonry","textLoadMore","textLoading","textLoadFailed","cards","ajax_amount_to_load","cardSliders","change","$hiddenInput","$emptyInput","$smartTag","smart_tag","$select","selectedOption","selectedIndex","selectedSmartTagLabel","ga","getAll","analyticsGTMID","ready","click","registerBoekenLinks","registerScrollOnClick","registerCustomerInfo","from_class","to_id","on_finish","scrollToSmooth","body_pos","element_pos","behavior","wrapInner","LocalMain","comboFilter","filters","totalAmountOfPersons","multipleFilter","checkValue","$checkbox","checkbox","filterGroup","manageCheckbox","combo","nextCombo","getComboFilter"],"sourceRoot":""}