{ "version": 3, "sources": ["../../../../../../node_modules/bootstrap/js/src/dom/data.js", "../../../../../../node_modules/bootstrap/js/src/util/index.js", "../../../../../../node_modules/bootstrap/js/src/dom/event-handler.js", "../../../../../../node_modules/bootstrap/js/src/dom/manipulator.js", "../../../../../../node_modules/bootstrap/js/src/util/config.js", "../../../../../../node_modules/bootstrap/js/src/base-component.js", "../../../../../../node_modules/bootstrap/js/src/dom/selector-engine.js", "../../../../../../node_modules/bootstrap/js/src/util/component-functions.js", "../../../../../../node_modules/bootstrap/js/src/alert.js", "../../../../../../node_modules/bootstrap/js/src/collapse.js", "../../../../../../node_modules/lodash/isArray.js", "../../../../../../node_modules/lodash/_freeGlobal.js", "../../../../../../node_modules/lodash/_root.js", "../../../../../../node_modules/lodash/_Symbol.js", "../../../../../../node_modules/lodash/_getRawTag.js", "../../../../../../node_modules/lodash/_objectToString.js", "../../../../../../node_modules/lodash/_baseGetTag.js", "../../../../../../node_modules/lodash/isObjectLike.js", "../../../../../../node_modules/lodash/isSymbol.js", "../../../../../../node_modules/lodash/_isKey.js", "../../../../../../node_modules/lodash/isObject.js", "../../../../../../node_modules/lodash/isFunction.js", "../../../../../../node_modules/lodash/_coreJsData.js", "../../../../../../node_modules/lodash/_isMasked.js", "../../../../../../node_modules/lodash/_toSource.js", "../../../../../../node_modules/lodash/_baseIsNative.js", "../../../../../../node_modules/lodash/_getValue.js", "../../../../../../node_modules/lodash/_getNative.js", "../../../../../../node_modules/lodash/_nativeCreate.js", "../../../../../../node_modules/lodash/_hashClear.js", "../../../../../../node_modules/lodash/_hashDelete.js", "../../../../../../node_modules/lodash/_hashGet.js", "../../../../../../node_modules/lodash/_hashHas.js", "../../../../../../node_modules/lodash/_hashSet.js", "../../../../../../node_modules/lodash/_Hash.js", "../../../../../../node_modules/lodash/_listCacheClear.js", "../../../../../../node_modules/lodash/eq.js", "../../../../../../node_modules/lodash/_assocIndexOf.js", "../../../../../../node_modules/lodash/_listCacheDelete.js", "../../../../../../node_modules/lodash/_listCacheGet.js", "../../../../../../node_modules/lodash/_listCacheHas.js", "../../../../../../node_modules/lodash/_listCacheSet.js", "../../../../../../node_modules/lodash/_ListCache.js", "../../../../../../node_modules/lodash/_Map.js", "../../../../../../node_modules/lodash/_mapCacheClear.js", "../../../../../../node_modules/lodash/_isKeyable.js", "../../../../../../node_modules/lodash/_getMapData.js", "../../../../../../node_modules/lodash/_mapCacheDelete.js", "../../../../../../node_modules/lodash/_mapCacheGet.js", "../../../../../../node_modules/lodash/_mapCacheHas.js", "../../../../../../node_modules/lodash/_mapCacheSet.js", "../../../../../../node_modules/lodash/_MapCache.js", "../../../../../../node_modules/lodash/memoize.js", "../../../../../../node_modules/lodash/_memoizeCapped.js", "../../../../../../node_modules/lodash/_stringToPath.js", "../../../../../../node_modules/lodash/_arrayMap.js", "../../../../../../node_modules/lodash/_baseToString.js", "../../../../../../node_modules/lodash/toString.js", "../../../../../../node_modules/lodash/_castPath.js", "../../../../../../node_modules/lodash/_toKey.js", "../../../../../../node_modules/lodash/_baseGet.js", "../../../../../../node_modules/lodash/get.js", "../../../../../../node_modules/FitText-UMD/fittext.js", "../../../../../../node_modules/dom-confetti/lib/main.js", "../../../../../../node_modules/@popperjs/core/src/dom-utils/getWindow.js", "../../../../../../node_modules/@popperjs/core/src/dom-utils/instanceOf.js", "../../../../../../node_modules/@popperjs/core/src/utils/math.js", "../../../../../../node_modules/@popperjs/core/src/utils/userAgent.js", "../../../../../../node_modules/@popperjs/core/src/dom-utils/isLayoutViewport.js", "../../../../../../node_modules/@popperjs/core/src/dom-utils/getBoundingClientRect.js", "../../../../../../node_modules/@popperjs/core/src/dom-utils/getWindowScroll.js", "../../../../../../node_modules/@popperjs/core/src/dom-utils/getHTMLElementScroll.js", "../../../../../../node_modules/@popperjs/core/src/dom-utils/getNodeScroll.js", "../../../../../../node_modules/@popperjs/core/src/dom-utils/getNodeName.js", "../../../../../../node_modules/@popperjs/core/src/dom-utils/getDocumentElement.js", "../../../../../../node_modules/@popperjs/core/src/dom-utils/getWindowScrollBarX.js", "../../../../../../node_modules/@popperjs/core/src/dom-utils/getComputedStyle.js", "../../../../../../node_modules/@popperjs/core/src/dom-utils/isScrollParent.js", "../../../../../../node_modules/@popperjs/core/src/dom-utils/getCompositeRect.js", "../../../../../../node_modules/@popperjs/core/src/dom-utils/getLayoutRect.js", "../../../../../../node_modules/@popperjs/core/src/dom-utils/getParentNode.js", "../../../../../../node_modules/@popperjs/core/src/dom-utils/getScrollParent.js", "../../../../../../node_modules/@popperjs/core/src/dom-utils/listScrollParents.js", "../../../../../../node_modules/@popperjs/core/src/dom-utils/isTableElement.js", "../../../../../../node_modules/@popperjs/core/src/dom-utils/getOffsetParent.js", "../../../../../../node_modules/@popperjs/core/src/enums.js", "../../../../../../node_modules/@popperjs/core/src/utils/orderModifiers.js", "../../../../../../node_modules/@popperjs/core/src/utils/debounce.js", "../../../../../../node_modules/@popperjs/core/src/utils/mergeByName.js", "../../../../../../node_modules/@popperjs/core/src/dom-utils/getViewportRect.js", "../../../../../../node_modules/@popperjs/core/src/dom-utils/getDocumentRect.js", "../../../../../../node_modules/@popperjs/core/src/dom-utils/contains.js", "../../../../../../node_modules/@popperjs/core/src/utils/rectToClientRect.js", "../../../../../../node_modules/@popperjs/core/src/dom-utils/getClippingRect.js", "../../../../../../node_modules/@popperjs/core/src/utils/getBasePlacement.js", "../../../../../../node_modules/@popperjs/core/src/utils/getVariation.js", "../../../../../../node_modules/@popperjs/core/src/utils/getMainAxisFromPlacement.js", "../../../../../../node_modules/@popperjs/core/src/utils/computeOffsets.js", "../../../../../../node_modules/@popperjs/core/src/utils/getFreshSideObject.js", "../../../../../../node_modules/@popperjs/core/src/utils/mergePaddingObject.js", "../../../../../../node_modules/@popperjs/core/src/utils/expandToHashMap.js", "../../../../../../node_modules/@popperjs/core/src/utils/detectOverflow.js", "../../../../../../node_modules/@popperjs/core/src/createPopper.js", "../../../../../../node_modules/@popperjs/core/src/modifiers/eventListeners.js", "../../../../../../node_modules/@popperjs/core/src/modifiers/popperOffsets.js", "../../../../../../node_modules/@popperjs/core/src/modifiers/computeStyles.js", "../../../../../../node_modules/@popperjs/core/src/modifiers/applyStyles.js", "../../../../../../node_modules/@popperjs/core/src/modifiers/offset.js", "../../../../../../node_modules/@popperjs/core/src/utils/getOppositePlacement.js", "../../../../../../node_modules/@popperjs/core/src/utils/getOppositeVariationPlacement.js", "../../../../../../node_modules/@popperjs/core/src/utils/computeAutoPlacement.js", "../../../../../../node_modules/@popperjs/core/src/modifiers/flip.js", "../../../../../../node_modules/@popperjs/core/src/utils/getAltAxis.js", "../../../../../../node_modules/@popperjs/core/src/utils/within.js", "../../../../../../node_modules/@popperjs/core/src/modifiers/preventOverflow.js", "../../../../../../node_modules/@popperjs/core/src/modifiers/arrow.js", "../../../../../../node_modules/@popperjs/core/src/modifiers/hide.js", "../../../../../../node_modules/@popperjs/core/src/popper-lite.js", "../../../../../../node_modules/@popperjs/core/src/popper.js", "../../../../../../node_modules/bootstrap/js/src/util/sanitizer.js", "../../../../../../node_modules/bootstrap/js/src/util/template-factory.js", "../../../../../../node_modules/bootstrap/js/src/tooltip.js", "../../../../../../node_modules/bootstrap/js/src/popover.js", "../../../../../javascript/client_templates/template0/home.js", "../../../../../../node_modules/@hotwired/stimulus/dist/stimulus.js", "../../../../../javascript/view_components/application_controller.js", "../../../../../../node_modules/stimulus-use/dist/index.js", "../../../../../javascript/mixins/useI18n.js", "../../../../../javascript/mixins/useDecoder.js", "../../../../../javascript/mixins/useAssetLoader.js", "../../../../../javascript/mixins/useViewportSize.js", "../../../../../../node_modules/wcag-contrast/node_modules/relative-luminance/dist/index.m.js", "../../../../../../node_modules/wcag-contrast/index.js", "../../../../../javascript/mixins/useColorHelper.js", "../../../../../javascript/view_components/hero_gallery/bootstrap/index.js", "../../../../../../node_modules/animejs/lib/anime.es.js", "../../../../../javascript/view_components/moving_letters/index.js", "../../../../../javascript/view_components/fit_text/index.js", "../../../../../../node_modules/jarallax/src/defaults.js", "../../../../../../node_modules/jarallax/src/utils/global.js", "../../../../../../node_modules/jarallax/src/utils/css.js", "../../../../../../node_modules/jarallax/src/utils/extend.js", "../../../../../../node_modules/jarallax/src/utils/getParents.js", "../../../../../../node_modules/jarallax/src/utils/ready.js", "../../../../../../node_modules/jarallax/src/utils/isMobile.js", "../../../../../../node_modules/jarallax/src/utils/getWindowSize.js", "../../../../../../node_modules/jarallax/src/utils/observer.js", "../../../../../../node_modules/jarallax/src/core.js", "../../../../../../node_modules/jarallax/node_modules/video-worker/dist/video-worker.esm.js", "../../../../../../node_modules/jarallax/src/ext-video.js", "../../../../../../node_modules/jarallax/src/deprecated/ext-element.js", "../../../../../../node_modules/jarallax/src/core.esm.js", "../../../../../javascript/view_components/parallax_divider/index.js", "../../../../../../node_modules/src/lg-events.ts", "../../../../../../node_modules/src/lg-settings.ts", "../../../../../../node_modules/src/lgQuery.ts", "../../../../../../node_modules/src/lg-utils.ts", "../../../../../../node_modules/src/lightgallery.ts", "../../../../../../node_modules/src/index.ts", "../../../../../../node_modules/src/lg-events.ts", "../../../../../../node_modules/src/plugins/hash/lg-hash-settings.ts", "../../../../../../node_modules/src/plugins/hash/lg-hash.ts", "../../../../../../node_modules/src/plugins/video/lg-video-settings.ts", "../../../../../../node_modules/src/lg-events.ts", "../../../../../../node_modules/src/plugins/video/lg-video-utils.ts", "../../../../../../node_modules/src/plugins/video/lg-video.ts", "../../../../../javascript/view_components/gallery/index.js", "../../../../../javascript/mapbox/index.js", "../../../../../javascript/locales/view_components/map.json", "../../../../../javascript/view_components/map/index.js", "../../../../../javascript/view_components/confetti/index.js", "../../../../../javascript/view_components/show_more/index.js", "../../../../../javascript/view_components/copyable_input/index.js", "../../../../../javascript/view_components/image_preview/index.js", "../../../../../javascript/view_components/content_animator/index.js", "../../../../../javascript/view_components/visibility/index.js", "../../../../../javascript/view_components/espa_banner/index.js", "../../../../../javascript/view_components/widget/index.js"], "sourcesContent": ["/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map()\n\nexport default {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map())\n }\n\n const instanceMap = elementMap.get(element)\n\n // make it clear we only want one instance per element\n // can be removed later when multiple key/instances are fine to be used\n if (!instanceMap.has(key) && instanceMap.size !== 0) {\n // eslint-disable-next-line no-console\n console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`)\n return\n }\n\n instanceMap.set(key, instance)\n },\n\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null\n }\n\n return null\n },\n\n remove(element, key) {\n if (!elementMap.has(element)) {\n return\n }\n\n const instanceMap = elementMap.get(element)\n\n instanceMap.delete(key)\n\n // free up element references if there are no instances left for an element\n if (instanceMap.size === 0) {\n elementMap.delete(element)\n }\n }\n}\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1_000_000\nconst MILLISECONDS_MULTIPLIER = 1000\nconst TRANSITION_END = 'transitionend'\n\n/**\n * Properly escape IDs selectors to handle weird IDs\n * @param {string} selector\n * @returns {string}\n */\nconst parseSelector = selector => {\n if (selector && window.CSS && window.CSS.escape) {\n // document.querySelector needs escaping to handle IDs (html5+) containing for instance /\n selector = selector.replace(/#([^\\s\"#']+)/g, (match, id) => `#${CSS.escape(id)}`)\n }\n\n return selector\n}\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = object => {\n if (object === null || object === undefined) {\n return `${object}`\n }\n\n return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\n/**\n * Public Util API\n */\n\nconst getUID = prefix => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID)\n } while (document.getElementById(prefix))\n\n return prefix\n}\n\nconst getTransitionDurationFromElement = element => {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let { transitionDuration, transitionDelay } = window.getComputedStyle(element)\n\n const floatTransitionDuration = Number.parseFloat(transitionDuration)\n const floatTransitionDelay = Number.parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n}\n\nconst triggerTransitionEnd = element => {\n element.dispatchEvent(new Event(TRANSITION_END))\n}\n\nconst isElement = object => {\n if (!object || typeof object !== 'object') {\n return false\n }\n\n if (typeof object.jquery !== 'undefined') {\n object = object[0]\n }\n\n return typeof object.nodeType !== 'undefined'\n}\n\nconst getElement = object => {\n // it's a jQuery object or a node element\n if (isElement(object)) {\n return object.jquery ? object[0] : object\n }\n\n if (typeof object === 'string' && object.length > 0) {\n return document.querySelector(parseSelector(object))\n }\n\n return null\n}\n\nconst isVisible = element => {\n if (!isElement(element) || element.getClientRects().length === 0) {\n return false\n }\n\n const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'\n // Handle `details` element as its content may falsie appear visible when it is closed\n const closedDetails = element.closest('details:not([open])')\n\n if (!closedDetails) {\n return elementIsVisible\n }\n\n if (closedDetails !== element) {\n const summary = element.closest('summary')\n if (summary && summary.parentNode !== closedDetails) {\n return false\n }\n\n if (summary === null) {\n return false\n }\n }\n\n return elementIsVisible\n}\n\nconst isDisabled = element => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true\n }\n\n if (element.classList.contains('disabled')) {\n return true\n }\n\n if (typeof element.disabled !== 'undefined') {\n return element.disabled\n }\n\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'\n}\n\nconst findShadowRoot = element => {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return findShadowRoot(element.parentNode)\n}\n\nconst noop = () => {}\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n element.offsetHeight // eslint-disable-line no-unused-expressions\n}\n\nconst getjQuery = () => {\n if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n return window.jQuery\n }\n\n return null\n}\n\nconst DOMContentLoadedCallbacks = []\n\nconst onDOMContentLoaded = callback => {\n if (document.readyState === 'loading') {\n // add listener on the first call when the document is in loading state\n if (!DOMContentLoadedCallbacks.length) {\n document.addEventListener('DOMContentLoaded', () => {\n for (const callback of DOMContentLoadedCallbacks) {\n callback()\n }\n })\n }\n\n DOMContentLoadedCallbacks.push(callback)\n } else {\n callback()\n }\n}\n\nconst isRTL = () => document.documentElement.dir === 'rtl'\n\nconst defineJQueryPlugin = plugin => {\n onDOMContentLoaded(() => {\n const $ = getjQuery()\n /* istanbul ignore if */\n if ($) {\n const name = plugin.NAME\n const JQUERY_NO_CONFLICT = $.fn[name]\n $.fn[name] = plugin.jQueryInterface\n $.fn[name].Constructor = plugin\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT\n return plugin.jQueryInterface\n }\n }\n })\n}\n\nconst execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {\n return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue\n}\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n if (!waitForTransition) {\n execute(callback)\n return\n }\n\n const durationPadding = 5\n const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding\n\n let called = false\n\n const handler = ({ target }) => {\n if (target !== transitionElement) {\n return\n }\n\n called = true\n transitionElement.removeEventListener(TRANSITION_END, handler)\n execute(callback)\n }\n\n transitionElement.addEventListener(TRANSITION_END, handler)\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(transitionElement)\n }\n }, emulatedDuration)\n}\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list The list of elements\n * @param activeElement The active element\n * @param shouldGetNext Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n const listLength = list.length\n let index = list.indexOf(activeElement)\n\n // if the element does not exist in the list return an element\n // depending on the direction and if cycle is allowed\n if (index === -1) {\n return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0]\n }\n\n index += shouldGetNext ? 1 : -1\n\n if (isCycleAllowed) {\n index = (index + listLength) % listLength\n }\n\n return list[Math.max(0, Math.min(index, listLength - 1))]\n}\n\nexport {\n defineJQueryPlugin,\n execute,\n executeAfterTransition,\n findShadowRoot,\n getElement,\n getjQuery,\n getNextActiveElement,\n getTransitionDurationFromElement,\n getUID,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop,\n onDOMContentLoaded,\n parseSelector,\n reflow,\n triggerTransitionEnd,\n toType\n}\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getjQuery } from '../util/index.js'\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/\nconst stripNameRegex = /\\..*/\nconst stripUidRegex = /::\\d+$/\nconst eventRegistry = {} // Events storage\nlet uidEvent = 1\nconst customEvents = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout'\n}\n\nconst nativeEvents = new Set([\n 'click',\n 'dblclick',\n 'mouseup',\n 'mousedown',\n 'contextmenu',\n 'mousewheel',\n 'DOMMouseScroll',\n 'mouseover',\n 'mouseout',\n 'mousemove',\n 'selectstart',\n 'selectend',\n 'keydown',\n 'keypress',\n 'keyup',\n 'orientationchange',\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel',\n 'pointerdown',\n 'pointermove',\n 'pointerup',\n 'pointerleave',\n 'pointercancel',\n 'gesturestart',\n 'gesturechange',\n 'gestureend',\n 'focus',\n 'blur',\n 'change',\n 'reset',\n 'select',\n 'submit',\n 'focusin',\n 'focusout',\n 'load',\n 'unload',\n 'beforeunload',\n 'resize',\n 'move',\n 'DOMContentLoaded',\n 'readystatechange',\n 'error',\n 'abort',\n 'scroll'\n])\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++\n}\n\nfunction getElementEvents(element) {\n const uid = makeEventUid(element)\n\n element.uidEvent = uid\n eventRegistry[uid] = eventRegistry[uid] || {}\n\n return eventRegistry[uid]\n}\n\nfunction bootstrapHandler(element, fn) {\n return function handler(event) {\n hydrateObj(event, { delegateTarget: element })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, fn)\n }\n\n return fn.apply(element, [event])\n }\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n return function handler(event) {\n const domElements = element.querySelectorAll(selector)\n\n for (let { target } = event; target && target !== this; target = target.parentNode) {\n for (const domElement of domElements) {\n if (domElement !== target) {\n continue\n }\n\n hydrateObj(event, { delegateTarget: target })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, selector, fn)\n }\n\n return fn.apply(target, [event])\n }\n }\n }\n}\n\nfunction findHandler(events, callable, delegationSelector = null) {\n return Object.values(events)\n .find(event => event.callable === callable && event.delegationSelector === delegationSelector)\n}\n\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n const isDelegated = typeof handler === 'string'\n // TODO: tooltip passes `false` instead of selector, so we need to check\n const callable = isDelegated ? delegationFunction : (handler || delegationFunction)\n let typeEvent = getTypeEvent(originalTypeEvent)\n\n if (!nativeEvents.has(typeEvent)) {\n typeEvent = originalTypeEvent\n }\n\n return [isDelegated, callable, typeEvent]\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n\n // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n if (originalTypeEvent in customEvents) {\n const wrapFunction = fn => {\n return function (event) {\n if (!event.relatedTarget || (event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget))) {\n return fn.call(this, event)\n }\n }\n }\n\n callable = wrapFunction(callable)\n }\n\n const events = getElementEvents(element)\n const handlers = events[typeEvent] || (events[typeEvent] = {})\n const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null)\n\n if (previousFunction) {\n previousFunction.oneOff = previousFunction.oneOff && oneOff\n\n return\n }\n\n const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''))\n const fn = isDelegated ?\n bootstrapDelegationHandler(element, handler, callable) :\n bootstrapHandler(element, callable)\n\n fn.delegationSelector = isDelegated ? handler : null\n fn.callable = callable\n fn.oneOff = oneOff\n fn.uidEvent = uid\n handlers[uid] = fn\n\n element.addEventListener(typeEvent, fn, isDelegated)\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n const fn = findHandler(events[typeEvent], handler, delegationSelector)\n\n if (!fn) {\n return\n }\n\n element.removeEventListener(typeEvent, fn, Boolean(delegationSelector))\n delete events[typeEvent][fn.uidEvent]\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n const storeElementEvent = events[typeEvent] || {}\n\n for (const [handlerKey, event] of Object.entries(storeElementEvent)) {\n if (handlerKey.includes(namespace)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n}\n\nfunction getTypeEvent(event) {\n // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n event = event.replace(stripNameRegex, '')\n return customEvents[event] || event\n}\n\nconst EventHandler = {\n on(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, false)\n },\n\n one(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, true)\n },\n\n off(element, originalTypeEvent, handler, delegationFunction) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n const inNamespace = typeEvent !== originalTypeEvent\n const events = getElementEvents(element)\n const storeElementEvent = events[typeEvent] || {}\n const isNamespace = originalTypeEvent.startsWith('.')\n\n if (typeof callable !== 'undefined') {\n // Simplest case: handler is passed, remove that listener ONLY.\n if (!Object.keys(storeElementEvent).length) {\n return\n }\n\n removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null)\n return\n }\n\n if (isNamespace) {\n for (const elementEvent of Object.keys(events)) {\n removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1))\n }\n }\n\n for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {\n const handlerKey = keyHandlers.replace(stripUidRegex, '')\n\n if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n },\n\n trigger(element, event, args) {\n if (typeof event !== 'string' || !element) {\n return null\n }\n\n const $ = getjQuery()\n const typeEvent = getTypeEvent(event)\n const inNamespace = event !== typeEvent\n\n let jQueryEvent = null\n let bubbles = true\n let nativeDispatch = true\n let defaultPrevented = false\n\n if (inNamespace && $) {\n jQueryEvent = $.Event(event, args)\n\n $(element).trigger(jQueryEvent)\n bubbles = !jQueryEvent.isPropagationStopped()\n nativeDispatch = !jQueryEvent.isImmediatePropagationStopped()\n defaultPrevented = jQueryEvent.isDefaultPrevented()\n }\n\n const evt = hydrateObj(new Event(event, { bubbles, cancelable: true }), args)\n\n if (defaultPrevented) {\n evt.preventDefault()\n }\n\n if (nativeDispatch) {\n element.dispatchEvent(evt)\n }\n\n if (evt.defaultPrevented && jQueryEvent) {\n jQueryEvent.preventDefault()\n }\n\n return evt\n }\n}\n\nfunction hydrateObj(obj, meta = {}) {\n for (const [key, value] of Object.entries(meta)) {\n try {\n obj[key] = value\n } catch {\n Object.defineProperty(obj, key, {\n configurable: true,\n get() {\n return value\n }\n })\n }\n }\n\n return obj\n}\n\nexport default EventHandler\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n if (value === 'true') {\n return true\n }\n\n if (value === 'false') {\n return false\n }\n\n if (value === Number(value).toString()) {\n return Number(value)\n }\n\n if (value === '' || value === 'null') {\n return null\n }\n\n if (typeof value !== 'string') {\n return value\n }\n\n try {\n return JSON.parse(decodeURIComponent(value))\n } catch {\n return value\n }\n}\n\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`)\n}\n\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value)\n },\n\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-bs-${normalizeDataKey(key)}`)\n },\n\n getDataAttributes(element) {\n if (!element) {\n return {}\n }\n\n const attributes = {}\n const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'))\n\n for (const key of bsKeys) {\n let pureKey = key.replace(/^bs/, '')\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length)\n attributes[pureKey] = normalizeData(element.dataset[key])\n }\n\n return attributes\n },\n\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`))\n }\n}\n\nexport default Manipulator\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Manipulator from '../dom/manipulator.js'\nimport { isElement, toType } from './index.js'\n\n/**\n * Class definition\n */\n\nclass Config {\n // Getters\n static get Default() {\n return {}\n }\n\n static get DefaultType() {\n return {}\n }\n\n static get NAME() {\n throw new Error('You have to implement the static method \"NAME\", for each component!')\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n return config\n }\n\n _mergeConfigObj(config, element) {\n const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {} // try to parse\n\n return {\n ...this.constructor.Default,\n ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n ...(typeof config === 'object' ? config : {})\n }\n }\n\n _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n for (const [property, expectedTypes] of Object.entries(configTypes)) {\n const value = config[property]\n const valueType = isElement(value) ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(\n `${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`\n )\n }\n }\n }\n}\n\nexport default Config\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from './dom/data.js'\nimport EventHandler from './dom/event-handler.js'\nimport Config from './util/config.js'\nimport { executeAfterTransition, getElement } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst VERSION = '5.3.3'\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n constructor(element, config) {\n super()\n\n element = getElement(element)\n if (!element) {\n return\n }\n\n this._element = element\n this._config = this._getConfig(config)\n\n Data.set(this._element, this.constructor.DATA_KEY, this)\n }\n\n // Public\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY)\n EventHandler.off(this._element, this.constructor.EVENT_KEY)\n\n for (const propertyName of Object.getOwnPropertyNames(this)) {\n this[propertyName] = null\n }\n }\n\n _queueCallback(callback, element, isAnimated = true) {\n executeAfterTransition(callback, element, isAnimated)\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config, this._element)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n // Static\n static getInstance(element) {\n return Data.get(getElement(element), this.DATA_KEY)\n }\n\n static getOrCreateInstance(element, config = {}) {\n return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n }\n\n static get VERSION() {\n return VERSION\n }\n\n static get DATA_KEY() {\n return `bs.${this.NAME}`\n }\n\n static get EVENT_KEY() {\n return `.${this.DATA_KEY}`\n }\n\n static eventName(name) {\n return `${name}${this.EVENT_KEY}`\n }\n}\n\nexport default BaseComponent\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isDisabled, isVisible, parseSelector } from '../util/index.js'\n\nconst getSelector = element => {\n let selector = element.getAttribute('data-bs-target')\n\n if (!selector || selector === '#') {\n let hrefAttribute = element.getAttribute('href')\n\n // The only valid content that could double as a selector are IDs or classes,\n // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n // `document.querySelector` will rightfully complain it is invalid.\n // See https://github.com/twbs/bootstrap/issues/32273\n if (!hrefAttribute || (!hrefAttribute.includes('#') && !hrefAttribute.startsWith('.'))) {\n return null\n }\n\n // Just in case some CMS puts out a full URL with the anchor appended\n if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n hrefAttribute = `#${hrefAttribute.split('#')[1]}`\n }\n\n selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null\n }\n\n return selector ? selector.split(',').map(sel => parseSelector(sel)).join(',') : null\n}\n\nconst SelectorEngine = {\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector))\n },\n\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector)\n },\n\n children(element, selector) {\n return [].concat(...element.children).filter(child => child.matches(selector))\n },\n\n parents(element, selector) {\n const parents = []\n let ancestor = element.parentNode.closest(selector)\n\n while (ancestor) {\n parents.push(ancestor)\n ancestor = ancestor.parentNode.closest(selector)\n }\n\n return parents\n },\n\n prev(element, selector) {\n let previous = element.previousElementSibling\n\n while (previous) {\n if (previous.matches(selector)) {\n return [previous]\n }\n\n previous = previous.previousElementSibling\n }\n\n return []\n },\n // TODO: this is now unused; remove later along with prev()\n next(element, selector) {\n let next = element.nextElementSibling\n\n while (next) {\n if (next.matches(selector)) {\n return [next]\n }\n\n next = next.nextElementSibling\n }\n\n return []\n },\n\n focusableChildren(element) {\n const focusables = [\n 'a',\n 'button',\n 'input',\n 'textarea',\n 'select',\n 'details',\n '[tabindex]',\n '[contenteditable=\"true\"]'\n ].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',')\n\n return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el))\n },\n\n getSelectorFromElement(element) {\n const selector = getSelector(element)\n\n if (selector) {\n return SelectorEngine.findOne(selector) ? selector : null\n }\n\n return null\n },\n\n getElementFromSelector(element) {\n const selector = getSelector(element)\n\n return selector ? SelectorEngine.findOne(selector) : null\n },\n\n getMultipleElementsFromSelector(element) {\n const selector = getSelector(element)\n\n return selector ? SelectorEngine.find(selector) : []\n }\n}\n\nexport default SelectorEngine\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport { isDisabled } from './index.js'\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n const clickEvent = `click.dismiss${component.EVENT_KEY}`\n const name = component.NAME\n\n EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`)\n const instance = component.getOrCreateInstance(target)\n\n // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n instance[method]()\n })\n}\n\nexport {\n enableDismissTrigger\n}\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport { defineJQueryPlugin } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'alert'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE)\n\n if (closeEvent.defaultPrevented) {\n return\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n const isAnimated = this._element.classList.contains(CLASS_NAME_FADE)\n this._queueCallback(() => this._destroyElement(), this._element, isAnimated)\n }\n\n // Private\n _destroyElement() {\n this._element.remove()\n EventHandler.trigger(this._element, EVENT_CLOSED)\n this.dispose()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Alert.getOrCreateInstance(this)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close')\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert)\n\nexport default Alert\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n defineJQueryPlugin,\n getElement,\n reflow\n} from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'collapse'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal'\n\nconst WIDTH = 'width'\nconst HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"collapse\"]'\n\nconst Default = {\n parent: null,\n toggle: true\n}\n\nconst DefaultType = {\n parent: '(null|element)',\n toggle: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._isTransitioning = false\n this._triggerArray = []\n\n const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n\n for (const elem of toggleList) {\n const selector = SelectorEngine.getSelectorFromElement(elem)\n const filterElement = SelectorEngine.find(selector)\n .filter(foundElement => foundElement === this._element)\n\n if (selector !== null && filterElement.length) {\n this._triggerArray.push(elem)\n }\n }\n\n this._initializeChildren()\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._triggerArray, this._isShown())\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n if (this._isShown()) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning || this._isShown()) {\n return\n }\n\n let activeChildren = []\n\n // find active children\n if (this._config.parent) {\n activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES)\n .filter(element => element !== this._element)\n .map(element => Collapse.getOrCreateInstance(element, { toggle: false }))\n }\n\n if (activeChildren.length && activeChildren[0]._isTransitioning) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n if (startEvent.defaultPrevented) {\n return\n }\n\n for (const activeInstance of activeChildren) {\n activeInstance.hide()\n }\n\n const dimension = this._getDimension()\n\n this._element.classList.remove(CLASS_NAME_COLLAPSE)\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n\n this._element.style[dimension] = 0\n\n this._addAriaAndCollapsedClass(this._triggerArray, true)\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n this._element.style[dimension] = ''\n\n EventHandler.trigger(this._element, EVENT_SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n\n this._queueCallback(complete, this._element, true)\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning || !this._isShown()) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n if (startEvent.defaultPrevented) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n for (const trigger of this._triggerArray) {\n const element = SelectorEngine.getElementFromSelector(trigger)\n\n if (element && !this._isShown(element)) {\n this._addAriaAndCollapsedClass([trigger], false)\n }\n }\n\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.style[dimension] = ''\n\n this._queueCallback(complete, this._element, true)\n }\n\n _isShown(element = this._element) {\n return element.classList.contains(CLASS_NAME_SHOW)\n }\n\n // Private\n _configAfterMerge(config) {\n config.toggle = Boolean(config.toggle) // Coerce string values\n config.parent = getElement(config.parent)\n return config\n }\n\n _getDimension() {\n return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT\n }\n\n _initializeChildren() {\n if (!this._config.parent) {\n return\n }\n\n const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE)\n\n for (const element of children) {\n const selected = SelectorEngine.getElementFromSelector(element)\n\n if (selected) {\n this._addAriaAndCollapsedClass([element], this._isShown(selected))\n }\n }\n }\n\n _getFirstLevelChildren(selector) {\n const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent)\n // remove children if greater depth\n return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element))\n }\n\n _addAriaAndCollapsedClass(triggerArray, isOpen) {\n if (!triggerArray.length) {\n return\n }\n\n for (const element of triggerArray) {\n element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen)\n element.setAttribute('aria-expanded', isOpen)\n }\n }\n\n // Static\n static jQueryInterface(config) {\n const _config = {}\n if (typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n return this.each(function () {\n const data = Collapse.getOrCreateInstance(this, _config)\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n // preventDefault only for elements (which change the URL) not inside the collapsible element\n if (event.target.tagName === 'A' || (event.delegateTarget && event.delegateTarget.tagName === 'A')) {\n event.preventDefault()\n }\n\n for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {\n Collapse.getOrCreateInstance(element, { toggle: false }).toggle()\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse)\n\nexport default Collapse\n", "/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n", "/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n", "var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n", "var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n", "var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n", "var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n", "/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n", "var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n", "var isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n", "/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n", "var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n", "var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n", "var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n", "/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n", "var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n", "/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n", "var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n", "var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n", "var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;\n", "/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;\n", "var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n", "var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n", "var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;\n", "var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n", "/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n", "/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n", "var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nmodule.exports = assocIndexOf;\n", "var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;\n", "var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n", "var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n", "var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n", "var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n", "var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n", "var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n", "/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nmodule.exports = isKeyable;\n", "var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n", "var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n", "var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n", "var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n", "var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n", "var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n", "var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n", "var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nmodule.exports = memoizeCapped;\n", "var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nmodule.exports = stringToPath;\n", "/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nmodule.exports = arrayMap;\n", "var Symbol = require('./_Symbol'),\n arrayMap = require('./_arrayMap'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n", "var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n", "var isArray = require('./isArray'),\n isKey = require('./_isKey'),\n stringToPath = require('./_stringToPath'),\n toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n", "var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n", "var castPath = require('./_castPath'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n", "var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n", "/*!\r\n * FitText-UMD\r\n *\r\n * Copyright 2011, Dave Rupert http://daverupert.com\r\n * Released under the WTFPL license\r\n * http://sam.zoy.org/wtfpl/\r\n * Modified by Slawomir Kolodziej http://slawekk.info\r\n * Modified by Peace Chen to support modules\r\n *\r\n * Date: Tue Jan 12 2016 10:03:36 GMT-0600 (CST)\r\n */\r\n\r\n(function(root, factory) {\r\n\tif (typeof define === 'function' && define.amd) {\r\n\t\t// AMD. Register as an anonymous module.\r\n\t\tdefine([], factory);\r\n\t} else if (typeof module === 'object' && module.exports) {\r\n\t\t// Node. Does not work with strict CommonJS, but\r\n\t\t// only CommonJS-like environments that support module.exports,\r\n\t\t// like Node.\r\n\t\tmodule.exports = factory();\r\n\t} else {\r\n\t\t// Browser globals (root is window)\r\n\t\troot.fitText = factory();\r\n\t}\r\n}(this, function() {\r\n\r\n\tvar css = function(el, prop) {\r\n\t\treturn getComputedStyle ? getComputedStyle(el).getPropertyValue(prop) : el.currentStyle[prop];\r\n\t};\r\n\r\n\tvar addEvent = function(el, type, fn) {\r\n\t\tif (el.addEventListener)\r\n\t\t\tel.addEventListener(type, fn, false);\r\n\t\telse\r\n\t\t\tel.attachEvent('on' + type, fn);\r\n\t};\r\n\r\n\tvar extend = function(obj, ext) {\r\n\t\tfor (var key in ext)\r\n\t\t\tif (ext.hasOwnProperty(key))\r\n\t\t\t\tobj[key] = ext[key];\r\n\t\treturn obj;\r\n\t};\r\n\r\n\tvar fitText = function(el, kompressor, options) {\r\n\r\n\t\tvar settings = extend({\r\n\t\t\t'minFontSize': -1 / 0,\r\n\t\t\t'maxFontSize': 1 / 0\r\n\t\t}, options);\r\n\r\n\t\tvar fit = function(el) {\r\n\t\t\tvar compressor = kompressor || 1;\r\n\r\n\t\t\tvar resizer = function() {\r\n\t\t\t\tel.style.fontSize = Math.max(Math.min(el.clientWidth / (compressor * 10), parseFloat(settings.maxFontSize)), parseFloat(settings.minFontSize)) + 'px';\r\n\t\t\t};\r\n\r\n\t\t\t// Call once to set.\r\n\t\t\tresizer();\r\n\r\n\t\t\t// Bind events\r\n\t\t\t// If you have any js library which support Events, replace this part\r\n\t\t\t// and remove addEvent function (or use original jQuery version)\r\n // Candidate: http://marcj.github.io/css-element-queries/\r\n\t\t\taddEvent(window, 'resize', resizer);\r\n\t\t};\r\n\r\n\t\tif (el.length)\r\n\t\t\tfor (var i = 0; i < el.length; i++)\r\n\t\t\t\tfit(el[i]);\r\n\t\telse\r\n\t\t\tfit(el);\r\n\r\n\t\t// return set of elements\r\n\t\treturn el;\r\n\t};\r\n\r\n\treturn fitText;\r\n}));\r\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.confetti = confetti;\nvar defaultColors = [\"#a864fd\", \"#29cdff\", \"#78ff44\", \"#ff718d\", \"#fdff6a\"];\n\nfunction createElements(root, elementCount, colors, width, height) {\n return Array.from({ length: elementCount }).map(function (_, index) {\n var element = document.createElement(\"div\");\n var color = colors[index % colors.length];\n element.style[\"background-color\"] = color; // eslint-disable-line space-infix-ops\n element.style.width = width;\n element.style.height = height;\n element.style.position = \"absolute\";\n element.style.willChange = \"transform, opacity\";\n element.style.visibility = \"hidden\";\n root.appendChild(element);\n return element;\n });\n}\n\nfunction randomPhysics(angle, spread, startVelocity, random) {\n var radAngle = angle * (Math.PI / 180);\n var radSpread = spread * (Math.PI / 180);\n return {\n x: 0,\n y: 0,\n z: 0,\n wobble: random() * 10,\n wobbleSpeed: 0.1 + random() * 0.1,\n velocity: startVelocity * 0.5 + random() * startVelocity,\n angle2D: -radAngle + (0.5 * radSpread - random() * radSpread),\n angle3D: -(Math.PI / 4) + random() * (Math.PI / 2),\n tiltAngle: random() * Math.PI,\n tiltAngleSpeed: 0.1 + random() * 0.3\n };\n}\n\nfunction updateFetti(fetti, progress, dragFriction, decay) {\n /* eslint-disable no-param-reassign */\n fetti.physics.x += Math.cos(fetti.physics.angle2D) * fetti.physics.velocity;\n fetti.physics.y += Math.sin(fetti.physics.angle2D) * fetti.physics.velocity;\n fetti.physics.z += Math.sin(fetti.physics.angle3D) * fetti.physics.velocity;\n fetti.physics.wobble += fetti.physics.wobbleSpeed;\n // Backward compatibility\n if (decay) {\n fetti.physics.velocity *= decay;\n } else {\n fetti.physics.velocity -= fetti.physics.velocity * dragFriction;\n }\n fetti.physics.y += 3;\n fetti.physics.tiltAngle += fetti.physics.tiltAngleSpeed;\n\n var _fetti$physics = fetti.physics,\n x = _fetti$physics.x,\n y = _fetti$physics.y,\n z = _fetti$physics.z,\n tiltAngle = _fetti$physics.tiltAngle,\n wobble = _fetti$physics.wobble;\n\n var wobbleX = x + 10 * Math.cos(wobble);\n var wobbleY = y + 10 * Math.sin(wobble);\n var transform = \"translate3d(\" + wobbleX + \"px, \" + wobbleY + \"px, \" + z + \"px) rotate3d(1, 1, 1, \" + tiltAngle + \"rad)\";\n\n fetti.element.style.visibility = \"visible\";\n fetti.element.style.transform = transform;\n fetti.element.style.opacity = 1 - progress;\n\n /* eslint-enable */\n}\n\nfunction animate(root, fettis, dragFriction, decay, duration, stagger) {\n var startTime = void 0;\n\n return new Promise(function (resolve) {\n function update(time) {\n if (!startTime) startTime = time;\n var elapsed = time - startTime;\n var progress = startTime === time ? 0 : (time - startTime) / duration;\n fettis.slice(0, Math.ceil(elapsed / stagger)).forEach(function (fetti) {\n updateFetti(fetti, progress, dragFriction, decay);\n });\n\n if (time - startTime < duration) {\n requestAnimationFrame(update);\n } else {\n fettis.forEach(function (fetti) {\n if (fetti.element.parentNode === root) {\n return root.removeChild(fetti.element);\n }\n });\n resolve();\n }\n }\n\n requestAnimationFrame(update);\n });\n}\n\nvar defaults = {\n angle: 90,\n spread: 45,\n startVelocity: 45,\n elementCount: 50,\n width: \"10px\",\n height: \"10px\",\n perspective: \"\",\n colors: defaultColors,\n duration: 3000,\n stagger: 0,\n dragFriction: 0.1,\n random: Math.random\n};\n\nfunction backwardPatch(config) {\n if (!config.stagger && config.delay) {\n config.stagger = config.delay;\n }\n return config;\n}\n\nfunction confetti(root) {\n var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var _Object$assign = Object.assign({}, defaults, backwardPatch(config)),\n elementCount = _Object$assign.elementCount,\n colors = _Object$assign.colors,\n width = _Object$assign.width,\n height = _Object$assign.height,\n perspective = _Object$assign.perspective,\n angle = _Object$assign.angle,\n spread = _Object$assign.spread,\n startVelocity = _Object$assign.startVelocity,\n decay = _Object$assign.decay,\n dragFriction = _Object$assign.dragFriction,\n duration = _Object$assign.duration,\n stagger = _Object$assign.stagger,\n random = _Object$assign.random;\n\n root.style.perspective = perspective;\n var elements = createElements(root, elementCount, colors, width, height);\n var fettis = elements.map(function (element) {\n return {\n element: element,\n physics: randomPhysics(angle, spread, startVelocity, random)\n };\n });\n\n return animate(root, fettis, dragFriction, decay, duration, stagger);\n}", "// @flow\nimport type { Window } from '../types';\ndeclare function getWindow(node: Node | Window): Window;\n\nexport default function getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n const ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}\n", "// @flow\nimport getWindow from './getWindow';\n\ndeclare function isElement(node: mixed): boolean %checks(node instanceof\n Element);\nfunction isElement(node) {\n const OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\ndeclare function isHTMLElement(node: mixed): boolean %checks(node instanceof\n HTMLElement);\nfunction isHTMLElement(node) {\n const OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\ndeclare function isShadowRoot(node: mixed): boolean %checks(node instanceof\n ShadowRoot);\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n const OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };\n", "// @flow\nexport const max = Math.max;\nexport const min = Math.min;\nexport const round = Math.round;\n", "// @flow\ntype Navigator = Navigator & { userAgentData?: NavigatorUAData };\n\ninterface NavigatorUAData {\n brands: Array<{ brand: string, version: string }>;\n mobile: boolean;\n platform: string;\n}\n\nexport default function getUAString(): string {\n const uaData = (navigator: Navigator).userAgentData;\n\n if (uaData?.brands && Array.isArray(uaData.brands)) {\n return uaData.brands\n .map((item) => `${item.brand}/${item.version}`)\n .join(' ');\n }\n\n return navigator.userAgent;\n}\n", "// @flow\nimport getUAString from '../utils/userAgent';\n\nexport default function isLayoutViewport() {\n return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}\n", "// @flow\nimport type { ClientRectObject, VirtualElement } from '../types';\nimport { isElement, isHTMLElement } from './instanceOf';\nimport { round } from '../utils/math';\nimport getWindow from './getWindow';\nimport isLayoutViewport from './isLayoutViewport';\n\nexport default function getBoundingClientRect(\n element: Element | VirtualElement,\n includeScale: boolean = false,\n isFixedStrategy: boolean = false\n): ClientRectObject {\n const clientRect = element.getBoundingClientRect();\n let scaleX = 1;\n let scaleY = 1;\n\n if (includeScale && isHTMLElement(element)) {\n scaleX =\n (element: HTMLElement).offsetWidth > 0\n ? round(clientRect.width) / (element: HTMLElement).offsetWidth || 1\n : 1;\n scaleY =\n (element: HTMLElement).offsetHeight > 0\n ? round(clientRect.height) / (element: HTMLElement).offsetHeight || 1\n : 1;\n }\n\n const { visualViewport } = isElement(element) ? getWindow(element) : window;\n const addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n\n const x =\n (clientRect.left +\n (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) /\n scaleX;\n const y =\n (clientRect.top +\n (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) /\n scaleY;\n const width = clientRect.width / scaleX;\n const height = clientRect.height / scaleY;\n\n return {\n width,\n height,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x,\n x,\n y,\n };\n}\n", "// @flow\nimport getWindow from './getWindow';\nimport type { Window } from '../types';\n\nexport default function getWindowScroll(node: Node | Window) {\n const win = getWindow(node);\n const scrollLeft = win.pageXOffset;\n const scrollTop = win.pageYOffset;\n\n return {\n scrollLeft,\n scrollTop,\n };\n}\n", "// @flow\n\nexport default function getHTMLElementScroll(element: HTMLElement) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop,\n };\n}\n", "// @flow\nimport getWindowScroll from './getWindowScroll';\nimport getWindow from './getWindow';\nimport { isHTMLElement } from './instanceOf';\nimport getHTMLElementScroll from './getHTMLElementScroll';\nimport type { Window } from '../types';\n\nexport default function getNodeScroll(node: Node | Window) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}\n", "// @flow\nimport type { Window } from '../types';\n\nexport default function getNodeName(element: ?Node | Window): ?string {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}\n", "// @flow\nimport { isElement } from './instanceOf';\nimport type { Window } from '../types';\n\nexport default function getDocumentElement(\n element: Element | Window\n): HTMLElement {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return (\n (isElement(element)\n ? element.ownerDocument\n : // $FlowFixMe[prop-missing]\n element.document) || window.document\n ).documentElement;\n}\n", "// @flow\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getDocumentElement from './getDocumentElement';\nimport getWindowScroll from './getWindowScroll';\n\nexport default function getWindowScrollBarX(element: Element): number {\n // If has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on \n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return (\n getBoundingClientRect(getDocumentElement(element)).left +\n getWindowScroll(element).scrollLeft\n );\n}\n", "// @flow\nimport getWindow from './getWindow';\n\nexport default function getComputedStyle(\n element: Element\n): CSSStyleDeclaration {\n return getWindow(element).getComputedStyle(element);\n}\n", "// @flow\nimport getComputedStyle from './getComputedStyle';\n\nexport default function isScrollParent(element: HTMLElement): boolean {\n // Firefox wants us to check `-x` and `-y` variations as well\n const { overflow, overflowX, overflowY } = getComputedStyle(element);\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}\n", "// @flow\nimport type { Rect, VirtualElement, Window } from '../types';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getNodeScroll from './getNodeScroll';\nimport getNodeName from './getNodeName';\nimport { isHTMLElement } from './instanceOf';\nimport getWindowScrollBarX from './getWindowScrollBarX';\nimport getDocumentElement from './getDocumentElement';\nimport isScrollParent from './isScrollParent';\nimport { round } from '../utils/math';\n\nfunction isElementScaled(element: HTMLElement) {\n const rect = element.getBoundingClientRect();\n const scaleX = round(rect.width) / element.offsetWidth || 1;\n const scaleY = round(rect.height) / element.offsetHeight || 1;\n\n return scaleX !== 1 || scaleY !== 1;\n}\n\n// Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\nexport default function getCompositeRect(\n elementOrVirtualElement: Element | VirtualElement,\n offsetParent: Element | Window,\n isFixed: boolean = false\n): Rect {\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n const offsetParentIsScaled =\n isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n const documentElement = getDocumentElement(offsetParent);\n const rect = getBoundingClientRect(\n elementOrVirtualElement,\n offsetParentIsScaled,\n isFixed\n );\n\n let scroll = { scrollLeft: 0, scrollTop: 0 };\n let offsets = { x: 0, y: 0 };\n\n if (isOffsetParentAnElement || (!isOffsetParentAnElement && !isFixed)) {\n if (\n getNodeName(offsetParent) !== 'body' ||\n // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)\n ) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height,\n };\n}\n", "// @flow\nimport type { Rect } from '../types';\nimport getBoundingClientRect from './getBoundingClientRect';\n\n// Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\nexport default function getLayoutRect(element: HTMLElement): Rect {\n const clientRect = getBoundingClientRect(element);\n\n // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n let width = element.offsetWidth;\n let height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width,\n height,\n };\n}\n", "// @flow\nimport getNodeName from './getNodeName';\nimport getDocumentElement from './getDocumentElement';\nimport { isShadowRoot } from './instanceOf';\n\nexport default function getParentNode(element: Node | ShadowRoot): Node {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (\n // this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || // DOM Element detected\n (isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n getDocumentElement(element) // fallback\n );\n}\n", "// @flow\nimport getParentNode from './getParentNode';\nimport isScrollParent from './isScrollParent';\nimport getNodeName from './getNodeName';\nimport { isHTMLElement } from './instanceOf';\n\nexport default function getScrollParent(node: Node): HTMLElement {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}\n", "// @flow\nimport getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport getWindow from './getWindow';\nimport type { Window, VisualViewport } from '../types';\nimport isScrollParent from './isScrollParent';\n\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\nexport default function listScrollParents(\n element: Node,\n list: Array = []\n): Array {\n const scrollParent = getScrollParent(element);\n const isBody = scrollParent === element.ownerDocument?.body;\n const win = getWindow(scrollParent);\n const target = isBody\n ? [win].concat(\n win.visualViewport || [],\n isScrollParent(scrollParent) ? scrollParent : []\n )\n : scrollParent;\n const updatedList = list.concat(target);\n\n return isBody\n ? updatedList\n : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}\n", "// @flow\nimport getNodeName from './getNodeName';\n\nexport default function isTableElement(element: Element): boolean {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}\n", "// @flow\nimport getWindow from './getWindow';\nimport getNodeName from './getNodeName';\nimport getComputedStyle from './getComputedStyle';\nimport { isHTMLElement, isShadowRoot } from './instanceOf';\nimport isTableElement from './isTableElement';\nimport getParentNode from './getParentNode';\nimport getUAString from '../utils/userAgent';\n\nfunction getTrueOffsetParent(element: Element): ?Element {\n if (\n !isHTMLElement(element) ||\n // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed'\n ) {\n return null;\n }\n\n return element.offsetParent;\n}\n\n// `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\nfunction getContainingBlock(element: Element) {\n const isFirefox = /firefox/i.test(getUAString());\n const isIE = /Trident/i.test(getUAString());\n\n if (isIE && isHTMLElement(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n const elementCss = getComputedStyle(element);\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n let currentNode = getParentNode(element);\n\n if (isShadowRoot(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while (\n isHTMLElement(currentNode) &&\n ['html', 'body'].indexOf(getNodeName(currentNode)) < 0\n ) {\n const css = getComputedStyle(currentNode);\n\n // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n if (\n css.transform !== 'none' ||\n css.perspective !== 'none' ||\n css.contain === 'paint' ||\n ['transform', 'perspective'].indexOf(css.willChange) !== -1 ||\n (isFirefox && css.willChange === 'filter') ||\n (isFirefox && css.filter && css.filter !== 'none')\n ) {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nexport default function getOffsetParent(element: Element) {\n const window = getWindow(element);\n\n let offsetParent = getTrueOffsetParent(element);\n\n while (\n offsetParent &&\n isTableElement(offsetParent) &&\n getComputedStyle(offsetParent).position === 'static'\n ) {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (\n offsetParent &&\n (getNodeName(offsetParent) === 'html' ||\n (getNodeName(offsetParent) === 'body' &&\n getComputedStyle(offsetParent).position === 'static'))\n ) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}\n", "// @flow\nexport const top: 'top' = 'top';\nexport const bottom: 'bottom' = 'bottom';\nexport const right: 'right' = 'right';\nexport const left: 'left' = 'left';\nexport const auto: 'auto' = 'auto';\nexport type BasePlacement =\n | typeof top\n | typeof bottom\n | typeof right\n | typeof left;\nexport const basePlacements: Array = [top, bottom, right, left];\n\nexport const start: 'start' = 'start';\nexport const end: 'end' = 'end';\nexport type Variation = typeof start | typeof end;\n\nexport const clippingParents: 'clippingParents' = 'clippingParents';\nexport const viewport: 'viewport' = 'viewport';\nexport type Boundary = Element | Array | typeof clippingParents;\nexport type RootBoundary = typeof viewport | 'document';\n\nexport const popper: 'popper' = 'popper';\nexport const reference: 'reference' = 'reference';\nexport type Context = typeof popper | typeof reference;\n\nexport type VariationPlacement =\n | 'top-start'\n | 'top-end'\n | 'bottom-start'\n | 'bottom-end'\n | 'right-start'\n | 'right-end'\n | 'left-start'\n | 'left-end';\nexport type AutoPlacement = 'auto' | 'auto-start' | 'auto-end';\nexport type ComputedPlacement = VariationPlacement | BasePlacement;\nexport type Placement = AutoPlacement | BasePlacement | VariationPlacement;\n\nexport const variationPlacements: Array = basePlacements.reduce(\n (acc: Array, placement: BasePlacement) =>\n acc.concat([(`${placement}-${start}`: any), (`${placement}-${end}`: any)]),\n []\n);\nexport const placements: Array = [...basePlacements, auto].reduce(\n (\n acc: Array,\n placement: BasePlacement | typeof auto\n ): Array =>\n acc.concat([\n placement,\n (`${placement}-${start}`: any),\n (`${placement}-${end}`: any),\n ]),\n []\n);\n\n// modifiers that need to read the DOM\nexport const beforeRead: 'beforeRead' = 'beforeRead';\nexport const read: 'read' = 'read';\nexport const afterRead: 'afterRead' = 'afterRead';\n// pure-logic modifiers\nexport const beforeMain: 'beforeMain' = 'beforeMain';\nexport const main: 'main' = 'main';\nexport const afterMain: 'afterMain' = 'afterMain';\n// modifier with the purpose to write to the DOM (or write into a framework state)\nexport const beforeWrite: 'beforeWrite' = 'beforeWrite';\nexport const write: 'write' = 'write';\nexport const afterWrite: 'afterWrite' = 'afterWrite';\nexport const modifierPhases: Array = [\n beforeRead,\n read,\n afterRead,\n beforeMain,\n main,\n afterMain,\n beforeWrite,\n write,\n afterWrite,\n];\n\nexport type ModifierPhases =\n | typeof beforeRead\n | typeof read\n | typeof afterRead\n | typeof beforeMain\n | typeof main\n | typeof afterMain\n | typeof beforeWrite\n | typeof write\n | typeof afterWrite;\n", "// @flow\nimport type { Modifier } from '../types';\nimport { modifierPhases } from '../enums';\n\n// source: https://stackoverflow.com/questions/49875255\nfunction order(modifiers) {\n const map = new Map();\n const visited = new Set();\n const result = [];\n\n modifiers.forEach(modifier => {\n map.set(modifier.name, modifier);\n });\n\n // On visiting object, check for its dependencies and visit them recursively\n function sort(modifier: Modifier) {\n visited.add(modifier.name);\n\n const requires = [\n ...(modifier.requires || []),\n ...(modifier.requiresIfExists || []),\n ];\n\n requires.forEach(dep => {\n if (!visited.has(dep)) {\n const depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n\n result.push(modifier);\n }\n\n modifiers.forEach(modifier => {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n\n return result;\n}\n\nexport default function orderModifiers(\n modifiers: Array>\n): Array> {\n // order based on dependencies\n const orderedModifiers = order(modifiers);\n\n // order based on phase\n return modifierPhases.reduce((acc, phase) => {\n return acc.concat(\n orderedModifiers.filter(modifier => modifier.phase === phase)\n );\n }, []);\n}\n", "// @flow\n\nexport default function debounce(fn: Function): () => Promise {\n let pending;\n return () => {\n if (!pending) {\n pending = new Promise(resolve => {\n Promise.resolve().then(() => {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}\n", "// @flow\nimport type { Modifier } from '../types';\n\nexport default function mergeByName(\n modifiers: Array<$Shape>>\n): Array<$Shape>> {\n const merged = modifiers.reduce((merged, current) => {\n const existing = merged[current.name];\n merged[current.name] = existing\n ? {\n ...existing,\n ...current,\n options: { ...existing.options, ...current.options },\n data: { ...existing.data, ...current.data },\n }\n : current;\n return merged;\n }, {});\n\n // IE11 does not support Object.values\n return Object.keys(merged).map(key => merged[key]);\n}\n", "// @flow\nimport getWindow from './getWindow';\nimport getDocumentElement from './getDocumentElement';\nimport getWindowScrollBarX from './getWindowScrollBarX';\nimport isLayoutViewport from './isLayoutViewport';\nimport type { PositioningStrategy } from '../types';\n\nexport default function getViewportRect(\n element: Element,\n strategy: PositioningStrategy\n) {\n const win = getWindow(element);\n const html = getDocumentElement(element);\n const visualViewport = win.visualViewport;\n\n let width = html.clientWidth;\n let height = html.clientHeight;\n let x = 0;\n let y = 0;\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n\n const layoutViewport = isLayoutViewport();\n\n if (layoutViewport || (!layoutViewport && strategy === 'fixed')) {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width,\n height,\n x: x + getWindowScrollBarX(element),\n y,\n };\n}\n", "// @flow\nimport type { Rect } from '../types';\nimport getDocumentElement from './getDocumentElement';\nimport getComputedStyle from './getComputedStyle';\nimport getWindowScrollBarX from './getWindowScrollBarX';\nimport getWindowScroll from './getWindowScroll';\nimport { max } from '../utils/math';\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `` and `` rect bounds if horizontally scrollable\nexport default function getDocumentRect(element: HTMLElement): Rect {\n const html = getDocumentElement(element);\n const winScroll = getWindowScroll(element);\n const body = element.ownerDocument?.body;\n\n const width = max(\n html.scrollWidth,\n html.clientWidth,\n body ? body.scrollWidth : 0,\n body ? body.clientWidth : 0\n );\n const height = max(\n html.scrollHeight,\n html.clientHeight,\n body ? body.scrollHeight : 0,\n body ? body.clientHeight : 0\n );\n\n let x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n const y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return { width, height, x, y };\n}\n", "// @flow\nimport { isShadowRoot } from './instanceOf';\n\nexport default function contains(parent: Element, child: Element) {\n const rootNode = child.getRootNode && child.getRootNode();\n\n // First, attempt with faster native method\n if (parent.contains(child)) {\n return true;\n }\n // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n let next = child;\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n }\n // $FlowFixMe[prop-missing]: need a better way to handle this...\n next = next.parentNode || next.host;\n } while (next);\n }\n\n // Give up, the result is false\n return false;\n}\n", "// @flow\nimport type { Rect, ClientRectObject } from '../types';\n\nexport default function rectToClientRect(rect: Rect): ClientRectObject {\n return {\n ...rect,\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height,\n };\n}\n", "// @flow\nimport type { ClientRectObject, PositioningStrategy } from '../types';\nimport type { Boundary, RootBoundary } from '../enums';\nimport { viewport } from '../enums';\nimport getViewportRect from './getViewportRect';\nimport getDocumentRect from './getDocumentRect';\nimport listScrollParents from './listScrollParents';\nimport getOffsetParent from './getOffsetParent';\nimport getDocumentElement from './getDocumentElement';\nimport getComputedStyle from './getComputedStyle';\nimport { isElement, isHTMLElement } from './instanceOf';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getParentNode from './getParentNode';\nimport contains from './contains';\nimport getNodeName from './getNodeName';\nimport rectToClientRect from '../utils/rectToClientRect';\nimport { max, min } from '../utils/math';\n\nfunction getInnerBoundingClientRect(\n element: Element,\n strategy: PositioningStrategy\n) {\n const rect = getBoundingClientRect(element, false, strategy === 'fixed');\n\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n\n return rect;\n}\n\nfunction getClientRectFromMixedType(\n element: Element,\n clippingParent: Element | RootBoundary,\n strategy: PositioningStrategy\n): ClientRectObject {\n return clippingParent === viewport\n ? rectToClientRect(getViewportRect(element, strategy))\n : isElement(clippingParent)\n ? getInnerBoundingClientRect(clippingParent, strategy)\n : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n}\n\n// A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\nfunction getClippingParents(element: Element): Array {\n const clippingParents = listScrollParents(getParentNode(element));\n const canEscapeClipping =\n ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n const clipperElement =\n canEscapeClipping && isHTMLElement(element)\n ? getOffsetParent(element)\n : element;\n\n if (!isElement(clipperElement)) {\n return [];\n }\n\n // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n return clippingParents.filter(\n (clippingParent) =>\n isElement(clippingParent) &&\n contains(clippingParent, clipperElement) &&\n getNodeName(clippingParent) !== 'body'\n );\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping parents\nexport default function getClippingRect(\n element: Element,\n boundary: Boundary,\n rootBoundary: RootBoundary,\n strategy: PositioningStrategy\n): ClientRectObject {\n const mainClippingParents =\n boundary === 'clippingParents'\n ? getClippingParents(element)\n : [].concat(boundary);\n const clippingParents = [...mainClippingParents, rootBoundary];\n const firstClippingParent = clippingParents[0];\n\n const clippingRect = clippingParents.reduce((accRect, clippingParent) => {\n const rect = getClientRectFromMixedType(element, clippingParent, strategy);\n\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n\n return clippingRect;\n}\n", "// @flow\nimport { type BasePlacement, type Placement, auto } from '../enums';\n\nexport default function getBasePlacement(\n placement: Placement | typeof auto\n): BasePlacement {\n return (placement.split('-')[0]: any);\n}\n", "// @flow\nimport { type Variation, type Placement } from '../enums';\n\nexport default function getVariation(placement: Placement): ?Variation {\n return (placement.split('-')[1]: any);\n}\n", "// @flow\nimport type { Placement } from '../enums';\n\nexport default function getMainAxisFromPlacement(\n placement: Placement\n): 'x' | 'y' {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}\n", "// @flow\nimport getBasePlacement from './getBasePlacement';\nimport getVariation from './getVariation';\nimport getMainAxisFromPlacement from './getMainAxisFromPlacement';\nimport type {\n Rect,\n PositioningStrategy,\n Offsets,\n ClientRectObject,\n} from '../types';\nimport { top, right, bottom, left, start, end, type Placement } from '../enums';\n\nexport default function computeOffsets({\n reference,\n element,\n placement,\n}: {\n reference: Rect | ClientRectObject,\n element: Rect | ClientRectObject,\n strategy: PositioningStrategy,\n placement?: Placement,\n}): Offsets {\n const basePlacement = placement ? getBasePlacement(placement) : null;\n const variation = placement ? getVariation(placement) : null;\n const commonX = reference.x + reference.width / 2 - element.width / 2;\n const commonY = reference.y + reference.height / 2 - element.height / 2;\n\n let offsets;\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height,\n };\n break;\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height,\n };\n break;\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY,\n };\n break;\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY,\n };\n break;\n default:\n offsets = {\n x: reference.x,\n y: reference.y,\n };\n }\n\n const mainAxis = basePlacement\n ? getMainAxisFromPlacement(basePlacement)\n : null;\n\n if (mainAxis != null) {\n const len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] =\n offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n case end:\n offsets[mainAxis] =\n offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n default:\n }\n }\n\n return offsets;\n}\n", "// @flow\nimport type { SideObject } from '../types';\n\nexport default function getFreshSideObject(): SideObject {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n };\n}\n", "// @flow\nimport type { SideObject } from '../types';\nimport getFreshSideObject from './getFreshSideObject';\n\nexport default function mergePaddingObject(\n paddingObject: $Shape\n): SideObject {\n return {\n ...getFreshSideObject(),\n ...paddingObject,\n };\n}\n", "// @flow\n\nexport default function expandToHashMap<\n T: number | string | boolean,\n K: string\n>(value: T, keys: Array): { [key: string]: T } {\n return keys.reduce((hashMap, key) => {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}\n", "// @flow\nimport type { State, SideObject, Padding, PositioningStrategy } from '../types';\nimport type { Placement, Boundary, RootBoundary, Context } from '../enums';\nimport getClippingRect from '../dom-utils/getClippingRect';\nimport getDocumentElement from '../dom-utils/getDocumentElement';\nimport getBoundingClientRect from '../dom-utils/getBoundingClientRect';\nimport computeOffsets from './computeOffsets';\nimport rectToClientRect from './rectToClientRect';\nimport {\n clippingParents,\n reference,\n popper,\n bottom,\n top,\n right,\n basePlacements,\n viewport,\n} from '../enums';\nimport { isElement } from '../dom-utils/instanceOf';\nimport mergePaddingObject from './mergePaddingObject';\nimport expandToHashMap from './expandToHashMap';\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n placement: Placement,\n strategy: PositioningStrategy,\n boundary: Boundary,\n rootBoundary: RootBoundary,\n elementContext: Context,\n altBoundary: boolean,\n padding: Padding,\n};\n\nexport default function detectOverflow(\n state: State,\n options: $Shape = {}\n): SideObject {\n const {\n placement = state.placement,\n strategy = state.strategy,\n boundary = clippingParents,\n rootBoundary = viewport,\n elementContext = popper,\n altBoundary = false,\n padding = 0,\n } = options;\n\n const paddingObject = mergePaddingObject(\n typeof padding !== 'number'\n ? padding\n : expandToHashMap(padding, basePlacements)\n );\n\n const altContext = elementContext === popper ? reference : popper;\n\n const popperRect = state.rects.popper;\n const element = state.elements[altBoundary ? altContext : elementContext];\n\n const clippingClientRect = getClippingRect(\n isElement(element)\n ? element\n : element.contextElement || getDocumentElement(state.elements.popper),\n boundary,\n rootBoundary,\n strategy\n );\n\n const referenceClientRect = getBoundingClientRect(state.elements.reference);\n\n const popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement,\n });\n\n const popperClientRect = rectToClientRect({\n ...popperRect,\n ...popperOffsets,\n });\n\n const elementClientRect =\n elementContext === popper ? popperClientRect : referenceClientRect;\n\n // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n const overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom:\n elementClientRect.bottom -\n clippingClientRect.bottom +\n paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right:\n elementClientRect.right - clippingClientRect.right + paddingObject.right,\n };\n\n const offsetData = state.modifiersData.offset;\n\n // Offsets can be applied only to the popper element\n if (elementContext === popper && offsetData) {\n const offset = offsetData[placement];\n\n Object.keys(overflowOffsets).forEach((key) => {\n const multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n const axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}\n", "// @flow\nimport type {\n State,\n OptionsGeneric,\n Modifier,\n Instance,\n VirtualElement,\n} from './types';\nimport getCompositeRect from './dom-utils/getCompositeRect';\nimport getLayoutRect from './dom-utils/getLayoutRect';\nimport listScrollParents from './dom-utils/listScrollParents';\nimport getOffsetParent from './dom-utils/getOffsetParent';\nimport orderModifiers from './utils/orderModifiers';\nimport debounce from './utils/debounce';\nimport mergeByName from './utils/mergeByName';\nimport detectOverflow from './utils/detectOverflow';\nimport { isElement } from './dom-utils/instanceOf';\n\nconst DEFAULT_OPTIONS: OptionsGeneric = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute',\n};\n\ntype PopperGeneratorArgs = {\n defaultModifiers?: Array>,\n defaultOptions?: $Shape>,\n};\n\nfunction areValidElements(...args: Array): boolean {\n return !args.some(\n (element) =>\n !(element && typeof element.getBoundingClientRect === 'function')\n );\n}\n\nexport function popperGenerator(generatorOptions: PopperGeneratorArgs = {}) {\n const { defaultModifiers = [], defaultOptions = DEFAULT_OPTIONS } =\n generatorOptions;\n\n return function createPopper>>(\n reference: Element | VirtualElement,\n popper: HTMLElement,\n options: $Shape> = defaultOptions\n ): Instance {\n let state: $Shape = {\n placement: 'bottom',\n orderedModifiers: [],\n options: { ...DEFAULT_OPTIONS, ...defaultOptions },\n modifiersData: {},\n elements: {\n reference,\n popper,\n },\n attributes: {},\n styles: {},\n };\n\n let effectCleanupFns: Array<() => void> = [];\n let isDestroyed = false;\n\n const instance = {\n state,\n setOptions(setOptionsAction) {\n const options =\n typeof setOptionsAction === 'function'\n ? setOptionsAction(state.options)\n : setOptionsAction;\n\n cleanupModifierEffects();\n\n state.options = {\n // $FlowFixMe[exponential-spread]\n ...defaultOptions,\n ...state.options,\n ...options,\n };\n\n state.scrollParents = {\n reference: isElement(reference)\n ? listScrollParents(reference)\n : reference.contextElement\n ? listScrollParents(reference.contextElement)\n : [],\n popper: listScrollParents(popper),\n };\n\n // Orders the modifiers based on their dependencies and `phase`\n // properties\n const orderedModifiers = orderModifiers(\n mergeByName([...defaultModifiers, ...state.options.modifiers])\n );\n\n // Strip out disabled modifiers\n state.orderedModifiers = orderedModifiers.filter((m) => m.enabled);\n\n runModifierEffects();\n\n return instance.update();\n },\n\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n const { reference, popper } = state.elements;\n\n // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n if (!areValidElements(reference, popper)) {\n return;\n }\n\n // Store the reference and popper rects to be read by modifiers\n state.rects = {\n reference: getCompositeRect(\n reference,\n getOffsetParent(popper),\n state.options.strategy === 'fixed'\n ),\n popper: getLayoutRect(popper),\n };\n\n // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n state.reset = false;\n\n state.placement = state.options.placement;\n\n // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n state.orderedModifiers.forEach(\n (modifier) =>\n (state.modifiersData[modifier.name] = {\n ...modifier.data,\n })\n );\n\n for (let index = 0; index < state.orderedModifiers.length; index++) {\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n const { fn, options = {}, name } = state.orderedModifiers[index];\n\n if (typeof fn === 'function') {\n state = fn({ state, options, name, instance }) || state;\n }\n }\n },\n\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce<$Shape>(\n () =>\n new Promise<$Shape>((resolve) => {\n instance.forceUpdate();\n resolve(state);\n })\n ),\n\n destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n },\n };\n\n if (!areValidElements(reference, popper)) {\n return instance;\n }\n\n instance.setOptions(options).then((state) => {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n });\n\n // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n function runModifierEffects() {\n state.orderedModifiers.forEach(({ name, options = {}, effect }) => {\n if (typeof effect === 'function') {\n const cleanupFn = effect({ state, name, instance, options });\n const noopFn = () => {};\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach((fn) => fn());\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\n\nexport const createPopper = popperGenerator();\n\n// eslint-disable-next-line import/no-unused-modules\nexport { detectOverflow };\n", "// @flow\nimport type { ModifierArguments, Modifier } from '../types';\nimport getWindow from '../dom-utils/getWindow';\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n scroll: boolean,\n resize: boolean,\n};\n\nconst passive = { passive: true };\n\nfunction effect({ state, instance, options }: ModifierArguments) {\n const { scroll = true, resize = true } = options;\n\n const window = getWindow(state.elements.popper);\n const scrollParents = [\n ...state.scrollParents.reference,\n ...state.scrollParents.popper,\n ];\n\n if (scroll) {\n scrollParents.forEach(scrollParent => {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return () => {\n if (scroll) {\n scrollParents.forEach(scrollParent => {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type EventListenersModifier = Modifier<'eventListeners', Options>;\nexport default ({\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: () => {},\n effect,\n data: {},\n}: EventListenersModifier);\n", "// @flow\nimport type { ModifierArguments, Modifier } from '../types';\nimport computeOffsets from '../utils/computeOffsets';\n\nfunction popperOffsets({ state, name }: ModifierArguments<{||}>) {\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement,\n });\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type PopperOffsetsModifier = Modifier<'popperOffsets', {||}>;\nexport default ({\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {},\n}: PopperOffsetsModifier);\n", "// @flow\nimport type {\n PositioningStrategy,\n Offsets,\n Modifier,\n ModifierArguments,\n Rect,\n Window,\n} from '../types';\nimport {\n type BasePlacement,\n type Variation,\n top,\n left,\n right,\n bottom,\n end,\n} from '../enums';\nimport getOffsetParent from '../dom-utils/getOffsetParent';\nimport getWindow from '../dom-utils/getWindow';\nimport getDocumentElement from '../dom-utils/getDocumentElement';\nimport getComputedStyle from '../dom-utils/getComputedStyle';\nimport getBasePlacement from '../utils/getBasePlacement';\nimport getVariation from '../utils/getVariation';\nimport { round } from '../utils/math';\n\n// eslint-disable-next-line import/no-unused-modules\nexport type RoundOffsets = (\n offsets: $Shape<{ x: number, y: number, centerOffset: number }>\n) => Offsets;\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n gpuAcceleration: boolean,\n adaptive: boolean,\n roundOffsets?: boolean | RoundOffsets,\n};\n\nconst unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto',\n};\n\n// Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\nfunction roundOffsetsByDPR({ x, y }, win: Window): Offsets {\n const dpr = win.devicePixelRatio || 1;\n\n return {\n x: round(x * dpr) / dpr || 0,\n y: round(y * dpr) / dpr || 0,\n };\n}\n\nexport function mapToStyles({\n popper,\n popperRect,\n placement,\n variation,\n offsets,\n position,\n gpuAcceleration,\n adaptive,\n roundOffsets,\n isFixed,\n}: {\n popper: HTMLElement,\n popperRect: Rect,\n placement: BasePlacement,\n variation: ?Variation,\n offsets: $Shape<{ x: number, y: number, centerOffset: number }>,\n position: PositioningStrategy,\n gpuAcceleration: boolean,\n adaptive: boolean,\n roundOffsets: boolean | RoundOffsets,\n isFixed: boolean,\n}) {\n let { x = 0, y = 0 } = offsets;\n\n ({ x, y } =\n typeof roundOffsets === 'function' ? roundOffsets({ x, y }) : { x, y });\n\n const hasX = offsets.hasOwnProperty('x');\n const hasY = offsets.hasOwnProperty('y');\n\n let sideX: string = left;\n let sideY: string = top;\n\n const win: Window = window;\n\n if (adaptive) {\n let offsetParent = getOffsetParent(popper);\n let heightProp = 'clientHeight';\n let widthProp = 'clientWidth';\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n\n if (\n getComputedStyle(offsetParent).position !== 'static' &&\n position === 'absolute'\n ) {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n }\n\n // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n offsetParent = (offsetParent: Element);\n\n if (\n placement === top ||\n ((placement === left || placement === right) && variation === end)\n ) {\n sideY = bottom;\n const offsetY =\n isFixed && offsetParent === win && win.visualViewport\n ? win.visualViewport.height\n : // $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -= offsetY - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (\n placement === left ||\n ((placement === top || placement === bottom) && variation === end)\n ) {\n sideX = right;\n const offsetX =\n isFixed && offsetParent === win && win.visualViewport\n ? win.visualViewport.width\n : // $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -= offsetX - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n const commonStyles = {\n position,\n ...(adaptive && unsetSides),\n };\n\n ({ x, y } =\n roundOffsets === true\n ? roundOffsetsByDPR({ x, y }, getWindow(popper))\n : { x, y });\n\n if (gpuAcceleration) {\n return {\n ...commonStyles,\n [sideY]: hasY ? '0' : '',\n [sideX]: hasX ? '0' : '',\n // Layer acceleration can disable subpixel rendering which causes slightly\n // blurry text on low PPI displays, so we want to use 2D transforms\n // instead\n transform:\n (win.devicePixelRatio || 1) <= 1\n ? `translate(${x}px, ${y}px)`\n : `translate3d(${x}px, ${y}px, 0)`,\n };\n }\n\n return {\n ...commonStyles,\n [sideY]: hasY ? `${y}px` : '',\n [sideX]: hasX ? `${x}px` : '',\n transform: '',\n };\n}\n\nfunction computeStyles({ state, options }: ModifierArguments) {\n const {\n gpuAcceleration = true,\n adaptive = true,\n // defaults to use builtin `roundOffsetsByDPR`\n roundOffsets = true,\n } = options;\n\n const commonStyles = {\n placement: getBasePlacement(state.placement),\n variation: getVariation(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration,\n isFixed: state.options.strategy === 'fixed',\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = {\n ...state.styles.popper,\n ...mapToStyles({\n ...commonStyles,\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive,\n roundOffsets,\n }),\n };\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = {\n ...state.styles.arrow,\n ...mapToStyles({\n ...commonStyles,\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets,\n }),\n };\n }\n\n state.attributes.popper = {\n ...state.attributes.popper,\n 'data-popper-placement': state.placement,\n };\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type ComputeStylesModifier = Modifier<'computeStyles', Options>;\nexport default ({\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {},\n}: ComputeStylesModifier);\n", "// @flow\nimport type { Modifier, ModifierArguments } from '../types';\nimport getNodeName from '../dom-utils/getNodeName';\nimport { isHTMLElement } from '../dom-utils/instanceOf';\n\n// This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles({ state }: ModifierArguments<{||}>) {\n Object.keys(state.elements).forEach((name) => {\n const style = state.styles[name] || {};\n\n const attributes = state.attributes[name] || {};\n const element = state.elements[name];\n\n // arrow is optional + virtual elements\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n Object.assign(element.style, style);\n\n Object.keys(attributes).forEach((name) => {\n const value = attributes[name];\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect({ state }: ModifierArguments<{||}>) {\n const initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0',\n },\n arrow: {\n position: 'absolute',\n },\n reference: {},\n };\n\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return () => {\n Object.keys(state.elements).forEach((name) => {\n const element = state.elements[name];\n const attributes = state.attributes[name] || {};\n\n const styleProperties = Object.keys(\n state.styles.hasOwnProperty(name)\n ? state.styles[name]\n : initialStyles[name]\n );\n\n // Set all values to an empty string to unset them\n const style = styleProperties.reduce((style, property) => {\n style[property] = '';\n return style;\n }, {});\n\n // arrow is optional + virtual elements\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n\n Object.keys(attributes).forEach((attribute) => {\n element.removeAttribute(attribute);\n });\n });\n };\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type ApplyStylesModifier = Modifier<'applyStyles', {||}>;\nexport default ({\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect,\n requires: ['computeStyles'],\n}: ApplyStylesModifier);\n", "// @flow\nimport type { Placement } from '../enums';\nimport type { ModifierArguments, Modifier, Rect, Offsets } from '../types';\nimport getBasePlacement from '../utils/getBasePlacement';\nimport { top, left, right, placements } from '../enums';\n\n// eslint-disable-next-line import/no-unused-modules\nexport type OffsetsFunction = ({\n popper: Rect,\n reference: Rect,\n placement: Placement,\n}) => [?number, ?number];\n\ntype Offset = OffsetsFunction | [?number, ?number];\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n offset: Offset,\n};\n\nexport function distanceAndSkiddingToXY(\n placement: Placement,\n rects: { popper: Rect, reference: Rect },\n offset: Offset\n): Offsets {\n const basePlacement = getBasePlacement(placement);\n const invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n let [skidding, distance] =\n typeof offset === 'function'\n ? offset({\n ...rects,\n placement,\n })\n : offset;\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n\n return [left, right].indexOf(basePlacement) >= 0\n ? { x: distance, y: skidding }\n : { x: skidding, y: distance };\n}\n\nfunction offset({ state, options, name }: ModifierArguments) {\n const { offset = [0, 0] } = options;\n\n const data = placements.reduce((acc, placement) => {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n\n const { x, y } = data[state.placement];\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type OffsetModifier = Modifier<'offset', Options>;\nexport default ({\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset,\n}: OffsetModifier);\n", "// @flow\nimport type { Placement } from '../enums';\n\nconst hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n\nexport default function getOppositePlacement(placement: Placement): Placement {\n return (placement.replace(\n /left|right|bottom|top/g,\n matched => hash[matched]\n ): any);\n}\n", "// @flow\nimport type { Placement } from '../enums';\n\nconst hash = { start: 'end', end: 'start' };\n\nexport default function getOppositeVariationPlacement(\n placement: Placement\n): Placement {\n return (placement.replace(/start|end/g, matched => hash[matched]): any);\n}\n", "// @flow\nimport type { State, Padding } from '../types';\nimport type {\n Placement,\n ComputedPlacement,\n Boundary,\n RootBoundary,\n} from '../enums';\nimport getVariation from './getVariation';\nimport {\n variationPlacements,\n basePlacements,\n placements as allPlacements,\n} from '../enums';\nimport detectOverflow from './detectOverflow';\nimport getBasePlacement from './getBasePlacement';\n\ntype Options = {\n placement: Placement,\n padding: Padding,\n boundary: Boundary,\n rootBoundary: RootBoundary,\n flipVariations: boolean,\n allowedAutoPlacements?: Array,\n};\n\ntype OverflowsMap = { [ComputedPlacement]: number };\n\nexport default function computeAutoPlacement(\n state: $Shape,\n options: Options = {}\n): Array {\n const {\n placement,\n boundary,\n rootBoundary,\n padding,\n flipVariations,\n allowedAutoPlacements = allPlacements,\n } = options;\n\n const variation = getVariation(placement);\n\n const placements = variation\n ? flipVariations\n ? variationPlacements\n : variationPlacements.filter(\n (placement) => getVariation(placement) === variation\n )\n : basePlacements;\n\n let allowedPlacements = placements.filter(\n (placement) => allowedAutoPlacements.indexOf(placement) >= 0\n );\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n }\n\n // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n const overflows: OverflowsMap = allowedPlacements.reduce((acc, placement) => {\n acc[placement] = detectOverflow(state, {\n placement,\n boundary,\n rootBoundary,\n padding,\n })[getBasePlacement(placement)];\n\n return acc;\n }, {});\n\n return Object.keys(overflows).sort((a, b) => overflows[a] - overflows[b]);\n}\n", "// @flow\nimport type { Placement, Boundary, RootBoundary } from '../enums';\nimport type { ModifierArguments, Modifier, Padding } from '../types';\nimport getOppositePlacement from '../utils/getOppositePlacement';\nimport getBasePlacement from '../utils/getBasePlacement';\nimport getOppositeVariationPlacement from '../utils/getOppositeVariationPlacement';\nimport detectOverflow from '../utils/detectOverflow';\nimport computeAutoPlacement from '../utils/computeAutoPlacement';\nimport { bottom, top, start, right, left, auto } from '../enums';\nimport getVariation from '../utils/getVariation';\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n mainAxis: boolean,\n altAxis: boolean,\n fallbackPlacements: Array,\n padding: Padding,\n boundary: Boundary,\n rootBoundary: RootBoundary,\n altBoundary: boolean,\n flipVariations: boolean,\n allowedAutoPlacements: Array,\n};\n\nfunction getExpandedFallbackPlacements(placement: Placement): Array {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n const oppositePlacement = getOppositePlacement(placement);\n\n return [\n getOppositeVariationPlacement(placement),\n oppositePlacement,\n getOppositeVariationPlacement(oppositePlacement),\n ];\n}\n\nfunction flip({ state, options, name }: ModifierArguments) {\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n const {\n mainAxis: checkMainAxis = true,\n altAxis: checkAltAxis = true,\n fallbackPlacements: specifiedFallbackPlacements,\n padding,\n boundary,\n rootBoundary,\n altBoundary,\n flipVariations = true,\n allowedAutoPlacements,\n } = options;\n\n const preferredPlacement = state.options.placement;\n const basePlacement = getBasePlacement(preferredPlacement);\n const isBasePlacement = basePlacement === preferredPlacement;\n\n const fallbackPlacements =\n specifiedFallbackPlacements ||\n (isBasePlacement || !flipVariations\n ? [getOppositePlacement(preferredPlacement)]\n : getExpandedFallbackPlacements(preferredPlacement));\n\n const placements = [preferredPlacement, ...fallbackPlacements].reduce(\n (acc, placement) => {\n return acc.concat(\n getBasePlacement(placement) === auto\n ? computeAutoPlacement(state, {\n placement,\n boundary,\n rootBoundary,\n padding,\n flipVariations,\n allowedAutoPlacements,\n })\n : placement\n );\n },\n []\n );\n\n const referenceRect = state.rects.reference;\n const popperRect = state.rects.popper;\n\n const checksMap = new Map();\n let makeFallbackChecks = true;\n let firstFittingPlacement = placements[0];\n\n for (let i = 0; i < placements.length; i++) {\n const placement = placements[i];\n const basePlacement = getBasePlacement(placement);\n const isStartVariation = getVariation(placement) === start;\n const isVertical = [top, bottom].indexOf(basePlacement) >= 0;\n const len = isVertical ? 'width' : 'height';\n\n const overflow = detectOverflow(state, {\n placement,\n boundary,\n rootBoundary,\n altBoundary,\n padding,\n });\n\n let mainVariationSide: any = isVertical\n ? isStartVariation\n ? right\n : left\n : isStartVariation\n ? bottom\n : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n const altVariationSide: any = getOppositePlacement(mainVariationSide);\n\n const checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(\n overflow[mainVariationSide] <= 0,\n overflow[altVariationSide] <= 0\n );\n }\n\n if (checks.every((check) => check)) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n const numberOfChecks = flipVariations ? 3 : 1;\n\n for (let i = numberOfChecks; i > 0; i--) {\n const fittingPlacement = placements.find((placement) => {\n const checks = checksMap.get(placement);\n if (checks) {\n return checks.slice(0, i).every((check) => check);\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n break;\n }\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type FlipModifier = Modifier<'flip', Options>;\nexport default ({\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: { _skip: false },\n}: FlipModifier);\n", "// @flow\n\nexport default function getAltAxis(axis: 'x' | 'y'): 'x' | 'y' {\n return axis === 'x' ? 'y' : 'x';\n}\n", "// @flow\nimport { max as mathMax, min as mathMin } from './math';\n\nexport function within(min: number, value: number, max: number): number {\n return mathMax(min, mathMin(value, max));\n}\n\nexport function withinMaxClamp(min: number, value: number, max: number) {\n const v = within(min, value, max);\n return v > max ? max : v;\n}\n", "// @flow\nimport { top, left, right, bottom, start } from '../enums';\nimport type { Placement, Boundary, RootBoundary } from '../enums';\nimport type { Rect, ModifierArguments, Modifier, Padding } from '../types';\nimport getBasePlacement from '../utils/getBasePlacement';\nimport getMainAxisFromPlacement from '../utils/getMainAxisFromPlacement';\nimport getAltAxis from '../utils/getAltAxis';\nimport { within, withinMaxClamp } from '../utils/within';\nimport getLayoutRect from '../dom-utils/getLayoutRect';\nimport getOffsetParent from '../dom-utils/getOffsetParent';\nimport detectOverflow from '../utils/detectOverflow';\nimport getVariation from '../utils/getVariation';\nimport getFreshSideObject from '../utils/getFreshSideObject';\nimport { min as mathMin, max as mathMax } from '../utils/math';\n\ntype TetherOffset =\n | (({\n popper: Rect,\n reference: Rect,\n placement: Placement,\n }) => number | { mainAxis: number, altAxis: number })\n | number\n | { mainAxis: number, altAxis: number };\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n /* Prevents boundaries overflow on the main axis */\n mainAxis: boolean,\n /* Prevents boundaries overflow on the alternate axis */\n altAxis: boolean,\n /* The area to check the popper is overflowing in */\n boundary: Boundary,\n /* If the popper is not overflowing the main area, fallback to this one */\n rootBoundary: RootBoundary,\n /* Use the reference's \"clippingParents\" boundary context */\n altBoundary: boolean,\n /**\n * Allows the popper to overflow from its boundaries to keep it near its\n * reference element\n */\n tether: boolean,\n /* Offsets when the `tether` option should activate */\n tetherOffset: TetherOffset,\n /* Sets a padding to the provided boundary */\n padding: Padding,\n};\n\nfunction preventOverflow({ state, options, name }: ModifierArguments) {\n const {\n mainAxis: checkMainAxis = true,\n altAxis: checkAltAxis = false,\n boundary,\n rootBoundary,\n altBoundary,\n padding,\n tether = true,\n tetherOffset = 0,\n } = options;\n\n const overflow = detectOverflow(state, {\n boundary,\n rootBoundary,\n padding,\n altBoundary,\n });\n const basePlacement = getBasePlacement(state.placement);\n const variation = getVariation(state.placement);\n const isBasePlacement = !variation;\n const mainAxis = getMainAxisFromPlacement(basePlacement);\n const altAxis = getAltAxis(mainAxis);\n const popperOffsets = state.modifiersData.popperOffsets;\n const referenceRect = state.rects.reference;\n const popperRect = state.rects.popper;\n const tetherOffsetValue =\n typeof tetherOffset === 'function'\n ? tetherOffset({\n ...state.rects,\n placement: state.placement,\n })\n : tetherOffset;\n const normalizedTetherOffsetValue =\n typeof tetherOffsetValue === 'number'\n ? { mainAxis: tetherOffsetValue, altAxis: tetherOffsetValue }\n : { mainAxis: 0, altAxis: 0, ...tetherOffsetValue };\n const offsetModifierState = state.modifiersData.offset\n ? state.modifiersData.offset[state.placement]\n : null;\n\n const data = { x: 0, y: 0 };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n const mainSide = mainAxis === 'y' ? top : left;\n const altSide = mainAxis === 'y' ? bottom : right;\n const len = mainAxis === 'y' ? 'height' : 'width';\n const offset = popperOffsets[mainAxis];\n\n const min = offset + overflow[mainSide];\n const max = offset - overflow[altSide];\n\n const additive = tether ? -popperRect[len] / 2 : 0;\n\n const minLen = variation === start ? referenceRect[len] : popperRect[len];\n const maxLen = variation === start ? -popperRect[len] : -referenceRect[len];\n\n // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n const arrowElement = state.elements.arrow;\n const arrowRect =\n tether && arrowElement\n ? getLayoutRect(arrowElement)\n : { width: 0, height: 0 };\n const arrowPaddingObject = state.modifiersData['arrow#persistent']\n ? state.modifiersData['arrow#persistent'].padding\n : getFreshSideObject();\n const arrowPaddingMin = arrowPaddingObject[mainSide];\n const arrowPaddingMax = arrowPaddingObject[altSide];\n\n // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n const arrowLen = within(0, referenceRect[len], arrowRect[len]);\n\n const minOffset = isBasePlacement\n ? referenceRect[len] / 2 -\n additive -\n arrowLen -\n arrowPaddingMin -\n normalizedTetherOffsetValue.mainAxis\n : minLen -\n arrowLen -\n arrowPaddingMin -\n normalizedTetherOffsetValue.mainAxis;\n const maxOffset = isBasePlacement\n ? -referenceRect[len] / 2 +\n additive +\n arrowLen +\n arrowPaddingMax +\n normalizedTetherOffsetValue.mainAxis\n : maxLen +\n arrowLen +\n arrowPaddingMax +\n normalizedTetherOffsetValue.mainAxis;\n\n const arrowOffsetParent =\n state.elements.arrow && getOffsetParent(state.elements.arrow);\n const clientOffset = arrowOffsetParent\n ? mainAxis === 'y'\n ? arrowOffsetParent.clientTop || 0\n : arrowOffsetParent.clientLeft || 0\n : 0;\n\n const offsetModifierValue = offsetModifierState?.[mainAxis] ?? 0;\n const tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n const tetherMax = offset + maxOffset - offsetModifierValue;\n\n const preventedOffset = within(\n tether ? mathMin(min, tetherMin) : min,\n offset,\n tether ? mathMax(max, tetherMax) : max\n );\n\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n const mainSide = mainAxis === 'x' ? top : left;\n const altSide = mainAxis === 'x' ? bottom : right;\n const offset = popperOffsets[altAxis];\n\n const len = altAxis === 'y' ? 'height' : 'width';\n\n const min = offset + overflow[mainSide];\n const max = offset - overflow[altSide];\n\n const isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n const offsetModifierValue = offsetModifierState?.[altAxis] ?? 0;\n const tetherMin = isOriginSide\n ? min\n : offset -\n referenceRect[len] -\n popperRect[len] -\n offsetModifierValue +\n normalizedTetherOffsetValue.altAxis;\n const tetherMax = isOriginSide\n ? offset +\n referenceRect[len] +\n popperRect[len] -\n offsetModifierValue -\n normalizedTetherOffsetValue.altAxis\n : max;\n\n const preventedOffset =\n tether && isOriginSide\n ? withinMaxClamp(tetherMin, offset, tetherMax)\n : within(tether ? tetherMin : min, offset, tether ? tetherMax : max);\n\n popperOffsets[altAxis] = preventedOffset;\n data[altAxis] = preventedOffset - offset;\n }\n\n state.modifiersData[name] = data;\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type PreventOverflowModifier = Modifier<'preventOverflow', Options>;\nexport default ({\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset'],\n}: PreventOverflowModifier);\n", "// @flow\nimport type { Modifier, ModifierArguments, Padding, Rect } from '../types';\nimport type { Placement } from '../enums';\nimport getBasePlacement from '../utils/getBasePlacement';\nimport getLayoutRect from '../dom-utils/getLayoutRect';\nimport contains from '../dom-utils/contains';\nimport getOffsetParent from '../dom-utils/getOffsetParent';\nimport getMainAxisFromPlacement from '../utils/getMainAxisFromPlacement';\nimport { within } from '../utils/within';\nimport mergePaddingObject from '../utils/mergePaddingObject';\nimport expandToHashMap from '../utils/expandToHashMap';\nimport { left, right, basePlacements, top, bottom } from '../enums';\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n element: HTMLElement | string | null,\n padding:\n | Padding\n | (({|\n popper: Rect,\n reference: Rect,\n placement: Placement,\n |}) => Padding),\n};\n\nconst toPaddingObject = (padding, state) => {\n padding =\n typeof padding === 'function'\n ? padding({ ...state.rects, placement: state.placement })\n : padding;\n\n return mergePaddingObject(\n typeof padding !== 'number'\n ? padding\n : expandToHashMap(padding, basePlacements)\n );\n};\n\nfunction arrow({ state, name, options }: ModifierArguments) {\n const arrowElement = state.elements.arrow;\n const popperOffsets = state.modifiersData.popperOffsets;\n const basePlacement = getBasePlacement(state.placement);\n const axis = getMainAxisFromPlacement(basePlacement);\n const isVertical = [left, right].indexOf(basePlacement) >= 0;\n const len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n const paddingObject = toPaddingObject(options.padding, state);\n const arrowRect = getLayoutRect(arrowElement);\n const minProp = axis === 'y' ? top : left;\n const maxProp = axis === 'y' ? bottom : right;\n\n const endDiff =\n state.rects.reference[len] +\n state.rects.reference[axis] -\n popperOffsets[axis] -\n state.rects.popper[len];\n const startDiff = popperOffsets[axis] - state.rects.reference[axis];\n\n const arrowOffsetParent = getOffsetParent(arrowElement);\n const clientSize = arrowOffsetParent\n ? axis === 'y'\n ? arrowOffsetParent.clientHeight || 0\n : arrowOffsetParent.clientWidth || 0\n : 0;\n\n const centerToReference = endDiff / 2 - startDiff / 2;\n\n // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n const min = paddingObject[minProp];\n const max = clientSize - arrowRect[len] - paddingObject[maxProp];\n const center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n const offset = within(min, center, max);\n\n // Prevents breaking syntax highlighting...\n const axisProp: string = axis;\n state.modifiersData[name] = {\n [axisProp]: offset,\n centerOffset: offset - center,\n };\n}\n\nfunction effect({ state, options }: ModifierArguments) {\n let { element: arrowElement = '[data-popper-arrow]' } = options;\n\n if (arrowElement == null) {\n return;\n }\n\n // CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n return;\n }\n\n state.elements.arrow = arrowElement;\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type ArrowModifier = Modifier<'arrow', Options>;\nexport default ({\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow'],\n}: ArrowModifier);\n", "// @flow\nimport type {\n ModifierArguments,\n Modifier,\n Rect,\n SideObject,\n Offsets,\n} from '../types';\nimport { top, bottom, left, right } from '../enums';\nimport detectOverflow from '../utils/detectOverflow';\n\nfunction getSideOffsets(\n overflow: SideObject,\n rect: Rect,\n preventedOffsets: Offsets = { x: 0, y: 0 }\n): SideObject {\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x,\n };\n}\n\nfunction isAnySideFullyClipped(overflow: SideObject): boolean {\n return [top, right, bottom, left].some((side) => overflow[side] >= 0);\n}\n\nfunction hide({ state, name }: ModifierArguments<{||}>) {\n const referenceRect = state.rects.reference;\n const popperRect = state.rects.popper;\n const preventedOffsets = state.modifiersData.preventOverflow;\n\n const referenceOverflow = detectOverflow(state, {\n elementContext: 'reference',\n });\n const popperAltOverflow = detectOverflow(state, {\n altBoundary: true,\n });\n\n const referenceClippingOffsets = getSideOffsets(\n referenceOverflow,\n referenceRect\n );\n const popperEscapeOffsets = getSideOffsets(\n popperAltOverflow,\n popperRect,\n preventedOffsets\n );\n\n const isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n const hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n\n state.modifiersData[name] = {\n referenceClippingOffsets,\n popperEscapeOffsets,\n isReferenceHidden,\n hasPopperEscaped,\n };\n\n state.attributes.popper = {\n ...state.attributes.popper,\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped,\n };\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type HideModifier = Modifier<'hide', {||}>;\nexport default ({\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide,\n}: HideModifier);\n", "// @flow\nimport { popperGenerator, detectOverflow } from './createPopper';\n\nimport eventListeners from './modifiers/eventListeners';\nimport popperOffsets from './modifiers/popperOffsets';\nimport computeStyles from './modifiers/computeStyles';\nimport applyStyles from './modifiers/applyStyles';\n\nexport type * from './types';\n\nconst defaultModifiers = [\n eventListeners,\n popperOffsets,\n computeStyles,\n applyStyles,\n];\n\nconst createPopper = popperGenerator({ defaultModifiers });\n\n// eslint-disable-next-line import/no-unused-modules\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };\n", "// @flow\nimport { popperGenerator, detectOverflow } from './createPopper';\n\nimport eventListeners from './modifiers/eventListeners';\nimport popperOffsets from './modifiers/popperOffsets';\nimport computeStyles from './modifiers/computeStyles';\nimport applyStyles from './modifiers/applyStyles';\nimport offset from './modifiers/offset';\nimport flip from './modifiers/flip';\nimport preventOverflow from './modifiers/preventOverflow';\nimport arrow from './modifiers/arrow';\nimport hide from './modifiers/hide';\n\nexport type * from './types';\n\nconst defaultModifiers = [\n eventListeners,\n popperOffsets,\n computeStyles,\n applyStyles,\n offset,\n flip,\n preventOverflow,\n arrow,\n hide,\n];\n\nconst createPopper = popperGenerator({ defaultModifiers });\n\n// eslint-disable-next-line import/no-unused-modules\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };\n// eslint-disable-next-line import/no-unused-modules\nexport { createPopper as createPopperLite } from './popper-lite';\n// eslint-disable-next-line import/no-unused-modules\nexport * from './modifiers';\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n// js-docs-start allow-list\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\nexport const DefaultAllowlist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n dd: [],\n div: [],\n dl: [],\n dt: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n}\n// js-docs-end allow-list\n\nconst uriAttributes = new Set([\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n])\n\n/**\n * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation\n * contexts.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38\n */\n// eslint-disable-next-line unicorn/better-regex\nconst SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i\n\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n const attributeName = attribute.nodeName.toLowerCase()\n\n if (allowedAttributeList.includes(attributeName)) {\n if (uriAttributes.has(attributeName)) {\n return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue))\n }\n\n return true\n }\n\n // Check if a regular expression validates the attribute.\n return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp)\n .some(regex => regex.test(attributeName))\n}\n\nexport function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n if (!unsafeHtml.length) {\n return unsafeHtml\n }\n\n if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n return sanitizeFunction(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const elements = [].concat(...createdDocument.body.querySelectorAll('*'))\n\n for (const element of elements) {\n const elementName = element.nodeName.toLowerCase()\n\n if (!Object.keys(allowList).includes(elementName)) {\n element.remove()\n continue\n }\n\n const attributeList = [].concat(...element.attributes)\n const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || [])\n\n for (const attribute of attributeList) {\n if (!allowedAttribute(attribute, allowedAttributes)) {\n element.removeAttribute(attribute.nodeName)\n }\n }\n }\n\n return createdDocument.body.innerHTML\n}\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Config from './config.js'\nimport { DefaultAllowlist, sanitizeHtml } from './sanitizer.js'\nimport { execute, getElement, isElement } from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'TemplateFactory'\n\nconst Default = {\n allowList: DefaultAllowlist,\n content: {}, // { selector : text , selector2 : text2 , }\n extraClass: '',\n html: false,\n sanitize: true,\n sanitizeFn: null,\n template: '
'\n}\n\nconst DefaultType = {\n allowList: 'object',\n content: 'object',\n extraClass: '(string|function)',\n html: 'boolean',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n template: 'string'\n}\n\nconst DefaultContentType = {\n entry: '(string|element|function|null)',\n selector: '(string|element)'\n}\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n getContent() {\n return Object.values(this._config.content)\n .map(config => this._resolvePossibleFunction(config))\n .filter(Boolean)\n }\n\n hasContent() {\n return this.getContent().length > 0\n }\n\n changeContent(content) {\n this._checkContent(content)\n this._config.content = { ...this._config.content, ...content }\n return this\n }\n\n toHtml() {\n const templateWrapper = document.createElement('div')\n templateWrapper.innerHTML = this._maybeSanitize(this._config.template)\n\n for (const [selector, text] of Object.entries(this._config.content)) {\n this._setContent(templateWrapper, text, selector)\n }\n\n const template = templateWrapper.children[0]\n const extraClass = this._resolvePossibleFunction(this._config.extraClass)\n\n if (extraClass) {\n template.classList.add(...extraClass.split(' '))\n }\n\n return template\n }\n\n // Private\n _typeCheckConfig(config) {\n super._typeCheckConfig(config)\n this._checkContent(config.content)\n }\n\n _checkContent(arg) {\n for (const [selector, content] of Object.entries(arg)) {\n super._typeCheckConfig({ selector, entry: content }, DefaultContentType)\n }\n }\n\n _setContent(template, content, selector) {\n const templateElement = SelectorEngine.findOne(selector, template)\n\n if (!templateElement) {\n return\n }\n\n content = this._resolvePossibleFunction(content)\n\n if (!content) {\n templateElement.remove()\n return\n }\n\n if (isElement(content)) {\n this._putElementInTemplate(getElement(content), templateElement)\n return\n }\n\n if (this._config.html) {\n templateElement.innerHTML = this._maybeSanitize(content)\n return\n }\n\n templateElement.textContent = content\n }\n\n _maybeSanitize(arg) {\n return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg\n }\n\n _resolvePossibleFunction(arg) {\n return execute(arg, [this])\n }\n\n _putElementInTemplate(element, templateElement) {\n if (this._config.html) {\n templateElement.innerHTML = ''\n templateElement.append(element)\n return\n }\n\n templateElement.textContent = element.textContent\n }\n}\n\nexport default TemplateFactory\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport {\n defineJQueryPlugin, execute, findShadowRoot, getElement, getUID, isRTL, noop\n} from './util/index.js'\nimport { DefaultAllowlist } from './util/sanitizer.js'\nimport TemplateFactory from './util/template-factory.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'tooltip'\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn'])\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_MODAL = 'modal'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`\n\nconst EVENT_MODAL_HIDE = 'hide.bs.modal'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\nconst EVENT_HIDE = 'hide'\nconst EVENT_HIDDEN = 'hidden'\nconst EVENT_SHOW = 'show'\nconst EVENT_SHOWN = 'shown'\nconst EVENT_INSERTED = 'inserted'\nconst EVENT_CLICK = 'click'\nconst EVENT_FOCUSIN = 'focusin'\nconst EVENT_FOCUSOUT = 'focusout'\nconst EVENT_MOUSEENTER = 'mouseenter'\nconst EVENT_MOUSELEAVE = 'mouseleave'\n\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: isRTL() ? 'left' : 'right',\n BOTTOM: 'bottom',\n LEFT: isRTL() ? 'right' : 'left'\n}\n\nconst Default = {\n allowList: DefaultAllowlist,\n animation: true,\n boundary: 'clippingParents',\n container: false,\n customClass: '',\n delay: 0,\n fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n html: false,\n offset: [0, 6],\n placement: 'top',\n popperConfig: null,\n sanitize: true,\n sanitizeFn: null,\n selector: false,\n template: '
' +\n '
' +\n '
' +\n '
',\n title: '',\n trigger: 'hover focus'\n}\n\nconst DefaultType = {\n allowList: 'object',\n animation: 'boolean',\n boundary: '(string|element)',\n container: '(string|element|boolean)',\n customClass: '(string|function)',\n delay: '(number|object)',\n fallbackPlacements: 'array',\n html: 'boolean',\n offset: '(array|string|function)',\n placement: '(string|function)',\n popperConfig: '(null|object|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n selector: '(string|boolean)',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string'\n}\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)')\n }\n\n super(element, config)\n\n // Private\n this._isEnabled = true\n this._timeout = 0\n this._isHovered = null\n this._activeTrigger = {}\n this._popper = null\n this._templateFactory = null\n this._newContent = null\n\n // Protected\n this.tip = null\n\n this._setListeners()\n\n if (!this._config.selector) {\n this._fixTitle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle() {\n if (!this._isEnabled) {\n return\n }\n\n this._activeTrigger.click = !this._activeTrigger.click\n if (this._isShown()) {\n this._leave()\n return\n }\n\n this._enter()\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n\n if (this._element.getAttribute('data-bs-original-title')) {\n this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'))\n }\n\n this._disposePopper()\n super.dispose()\n }\n\n show() {\n if (this._element.style.display === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n if (!(this._isWithContent() && this._isEnabled)) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW))\n const shadowRoot = findShadowRoot(this._element)\n const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element)\n\n if (showEvent.defaultPrevented || !isInTheDom) {\n return\n }\n\n // TODO: v6 remove this or make it optional\n this._disposePopper()\n\n const tip = this._getTipElement()\n\n this._element.setAttribute('aria-describedby', tip.getAttribute('id'))\n\n const { container } = this._config\n\n if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n container.append(tip)\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED))\n }\n\n this._popper = this._createPopper(tip)\n\n tip.classList.add(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n const complete = () => {\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN))\n\n if (this._isHovered === false) {\n this._leave()\n }\n\n this._isHovered = false\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n hide() {\n if (!this._isShown()) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE))\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const tip = this._getTipElement()\n tip.classList.remove(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false\n this._activeTrigger[TRIGGER_FOCUS] = false\n this._activeTrigger[TRIGGER_HOVER] = false\n this._isHovered = null // it is a trick to support manual triggering\n\n const complete = () => {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n if (!this._isHovered) {\n this._disposePopper()\n }\n\n this._element.removeAttribute('aria-describedby')\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN))\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n update() {\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Protected\n _isWithContent() {\n return Boolean(this._getTitle())\n }\n\n _getTipElement() {\n if (!this.tip) {\n this.tip = this._createTipElement(this._newContent || this._getContentForTemplate())\n }\n\n return this.tip\n }\n\n _createTipElement(content) {\n const tip = this._getTemplateFactory(content).toHtml()\n\n // TODO: remove this check in v6\n if (!tip) {\n return null\n }\n\n tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW)\n // TODO: v6 the following can be achieved with CSS only\n tip.classList.add(`bs-${this.constructor.NAME}-auto`)\n\n const tipId = getUID(this.constructor.NAME).toString()\n\n tip.setAttribute('id', tipId)\n\n if (this._isAnimated()) {\n tip.classList.add(CLASS_NAME_FADE)\n }\n\n return tip\n }\n\n setContent(content) {\n this._newContent = content\n if (this._isShown()) {\n this._disposePopper()\n this.show()\n }\n }\n\n _getTemplateFactory(content) {\n if (this._templateFactory) {\n this._templateFactory.changeContent(content)\n } else {\n this._templateFactory = new TemplateFactory({\n ...this._config,\n // the `content` var has to be after `this._config`\n // to override config.content in case of popover\n content,\n extraClass: this._resolvePossibleFunction(this._config.customClass)\n })\n }\n\n return this._templateFactory\n }\n\n _getContentForTemplate() {\n return {\n [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n }\n }\n\n _getTitle() {\n return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title')\n }\n\n // Private\n _initializeOnDelegatedTarget(event) {\n return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig())\n }\n\n _isAnimated() {\n return this._config.animation || (this.tip && this.tip.classList.contains(CLASS_NAME_FADE))\n }\n\n _isShown() {\n return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW)\n }\n\n _createPopper(tip) {\n const placement = execute(this._config.placement, [this, tip, this._element])\n const attachment = AttachmentMap[placement.toUpperCase()]\n return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment))\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _resolvePossibleFunction(arg) {\n return execute(arg, [this._element])\n }\n\n _getPopperConfig(attachment) {\n const defaultBsPopperConfig = {\n placement: attachment,\n modifiers: [\n {\n name: 'flip',\n options: {\n fallbackPlacements: this._config.fallbackPlacements\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n },\n {\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'arrow',\n options: {\n element: `.${this.constructor.NAME}-arrow`\n }\n },\n {\n name: 'preSetPlacement',\n enabled: true,\n phase: 'beforeMain',\n fn: data => {\n // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n this._getTipElement().setAttribute('data-popper-placement', data.state.placement)\n }\n }\n ]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n }\n }\n\n _setListeners() {\n const triggers = this._config.trigger.split(' ')\n\n for (const trigger of triggers) {\n if (trigger === 'click') {\n EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK), this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context.toggle()\n })\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ?\n this.constructor.eventName(EVENT_MOUSEENTER) :\n this.constructor.eventName(EVENT_FOCUSIN)\n const eventOut = trigger === TRIGGER_HOVER ?\n this.constructor.eventName(EVENT_MOUSELEAVE) :\n this.constructor.eventName(EVENT_FOCUSOUT)\n\n EventHandler.on(this._element, eventIn, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true\n context._enter()\n })\n EventHandler.on(this._element, eventOut, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] =\n context._element.contains(event.relatedTarget)\n\n context._leave()\n })\n }\n }\n\n this._hideModalHandler = () => {\n if (this._element) {\n this.hide()\n }\n }\n\n EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n }\n\n _fixTitle() {\n const title = this._element.getAttribute('title')\n\n if (!title) {\n return\n }\n\n if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n this._element.setAttribute('aria-label', title)\n }\n\n this._element.setAttribute('data-bs-original-title', title) // DO NOT USE IT. Is only for backwards compatibility\n this._element.removeAttribute('title')\n }\n\n _enter() {\n if (this._isShown() || this._isHovered) {\n this._isHovered = true\n return\n }\n\n this._isHovered = true\n\n this._setTimeout(() => {\n if (this._isHovered) {\n this.show()\n }\n }, this._config.delay.show)\n }\n\n _leave() {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n this._isHovered = false\n\n this._setTimeout(() => {\n if (!this._isHovered) {\n this.hide()\n }\n }, this._config.delay.hide)\n }\n\n _setTimeout(handler, timeout) {\n clearTimeout(this._timeout)\n this._timeout = setTimeout(handler, timeout)\n }\n\n _isWithActiveTrigger() {\n return Object.values(this._activeTrigger).includes(true)\n }\n\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element)\n\n for (const dataAttribute of Object.keys(dataAttributes)) {\n if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n delete dataAttributes[dataAttribute]\n }\n }\n\n config = {\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n }\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n config.container = config.container === false ? document.body : getElement(config.container)\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n for (const [key, value] of Object.entries(this._config)) {\n if (this.constructor.Default[key] !== value) {\n config[key] = value\n }\n }\n\n config.selector = false\n config.trigger = 'manual'\n\n // In the future can be replaced with:\n // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n // `Object.fromEntries(keysWithDifferentValues)`\n return config\n }\n\n _disposePopper() {\n if (this._popper) {\n this._popper.destroy()\n this._popper = null\n }\n\n if (this.tip) {\n this.tip.remove()\n this.tip = null\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tooltip.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tooltip)\n\nexport default Tooltip\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Tooltip from './tooltip.js'\nimport { defineJQueryPlugin } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'popover'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Default = {\n ...Tooltip.Default,\n content: '',\n offset: [0, 8],\n placement: 'right',\n template: '
' +\n '
' +\n '

' +\n '
' +\n '
',\n trigger: 'click'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(null|string|element|function)'\n}\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Overrides\n _isWithContent() {\n return this._getTitle() || this._getContent()\n }\n\n // Private\n _getContentForTemplate() {\n return {\n [SELECTOR_TITLE]: this._getTitle(),\n [SELECTOR_CONTENT]: this._getContent()\n }\n }\n\n _getContent() {\n return this._resolvePossibleFunction(this._config.content)\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Popover.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover)\n\nexport default Popover\n", "/* global Stimulus */\nconsole.log(\"template0/home.js Loaded\");\n\n//* Bootstrap\nimport \"bootstrap/js/dist/alert\"; //* For the adult friendly\nimport \"bootstrap/js/dist/collapse\"; //* For the adult friendly\n\n//* Third Party Libraries\n\n//* Stimulus\nimport hero_gallery_bootstrap from \"../../view_components/hero_gallery/bootstrap/index.js\";\nStimulus.register(\"hero-gallery--bootstrap\", hero_gallery_bootstrap);\n\nimport moving_letters from \"../../view_components/moving_letters/index.js\";\nStimulus.register(\"moving-letters\", moving_letters);\n\nimport fit_text from \"../../view_components/fit_text/index.js\";\nStimulus.register(\"fit-text\", fit_text);\n\nimport parallax_divider from \"../../view_components/parallax_divider/index.js\";\nStimulus.register(\"parallax-divider\", parallax_divider);\n\nimport gallery from \"../../view_components/gallery/index.js\";\nStimulus.register(\"gallery\", gallery);\n\nimport map from \"../../view_components/map/index.js\";\nStimulus.register(\"map\", map);\n\nimport confetti from \"../../view_components/confetti/index.js\"; //* confetti required for Area51 easter egg on the map\nStimulus.register(\"confetti\", confetti);\n\nimport show_more from \"../../view_components/show_more/index.js\";\nStimulus.register(\"show-more\", show_more);\n\nimport copyable_input from \"../../view_components/copyable_input/index.js\";\nStimulus.register(\"copyable-input\", copyable_input);\n\nimport image_preview from \"../../view_components/image_preview/index.js\";\nStimulus.register(\"image-preview\", image_preview);\n\nimport content_animator from \"../../view_components/content_animator/index.js\";\nStimulus.register(\"content-animator\", content_animator);\n\nimport visibility from \"../../view_components/visibility/index.js\";\nStimulus.register(\"visibility\", visibility);\n\nimport espa_banner from \"../../view_components/espa_banner/index.js\";\nStimulus.register(\"espa-banner\", espa_banner);\n\nimport widget from \"../../view_components/widget/index.js\";\nStimulus.register(\"widget\", widget);\n", "/*\nStimulus 3.2.1\nCopyright \u00A9 2023 Basecamp, LLC\n */\nclass EventListener {\n constructor(eventTarget, eventName, eventOptions) {\n this.eventTarget = eventTarget;\n this.eventName = eventName;\n this.eventOptions = eventOptions;\n this.unorderedBindings = new Set();\n }\n connect() {\n this.eventTarget.addEventListener(this.eventName, this, this.eventOptions);\n }\n disconnect() {\n this.eventTarget.removeEventListener(this.eventName, this, this.eventOptions);\n }\n bindingConnected(binding) {\n this.unorderedBindings.add(binding);\n }\n bindingDisconnected(binding) {\n this.unorderedBindings.delete(binding);\n }\n handleEvent(event) {\n const extendedEvent = extendEvent(event);\n for (const binding of this.bindings) {\n if (extendedEvent.immediatePropagationStopped) {\n break;\n }\n else {\n binding.handleEvent(extendedEvent);\n }\n }\n }\n hasBindings() {\n return this.unorderedBindings.size > 0;\n }\n get bindings() {\n return Array.from(this.unorderedBindings).sort((left, right) => {\n const leftIndex = left.index, rightIndex = right.index;\n return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n });\n }\n}\nfunction extendEvent(event) {\n if (\"immediatePropagationStopped\" in event) {\n return event;\n }\n else {\n const { stopImmediatePropagation } = event;\n return Object.assign(event, {\n immediatePropagationStopped: false,\n stopImmediatePropagation() {\n this.immediatePropagationStopped = true;\n stopImmediatePropagation.call(this);\n },\n });\n }\n}\n\nclass Dispatcher {\n constructor(application) {\n this.application = application;\n this.eventListenerMaps = new Map();\n this.started = false;\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.eventListeners.forEach((eventListener) => eventListener.connect());\n }\n }\n stop() {\n if (this.started) {\n this.started = false;\n this.eventListeners.forEach((eventListener) => eventListener.disconnect());\n }\n }\n get eventListeners() {\n return Array.from(this.eventListenerMaps.values()).reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);\n }\n bindingConnected(binding) {\n this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n }\n bindingDisconnected(binding, clearEventListeners = false) {\n this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n if (clearEventListeners)\n this.clearEventListenersForBinding(binding);\n }\n handleError(error, message, detail = {}) {\n this.application.handleError(error, `Error ${message}`, detail);\n }\n clearEventListenersForBinding(binding) {\n const eventListener = this.fetchEventListenerForBinding(binding);\n if (!eventListener.hasBindings()) {\n eventListener.disconnect();\n this.removeMappedEventListenerFor(binding);\n }\n }\n removeMappedEventListenerFor(binding) {\n const { eventTarget, eventName, eventOptions } = binding;\n const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n const cacheKey = this.cacheKey(eventName, eventOptions);\n eventListenerMap.delete(cacheKey);\n if (eventListenerMap.size == 0)\n this.eventListenerMaps.delete(eventTarget);\n }\n fetchEventListenerForBinding(binding) {\n const { eventTarget, eventName, eventOptions } = binding;\n return this.fetchEventListener(eventTarget, eventName, eventOptions);\n }\n fetchEventListener(eventTarget, eventName, eventOptions) {\n const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n const cacheKey = this.cacheKey(eventName, eventOptions);\n let eventListener = eventListenerMap.get(cacheKey);\n if (!eventListener) {\n eventListener = this.createEventListener(eventTarget, eventName, eventOptions);\n eventListenerMap.set(cacheKey, eventListener);\n }\n return eventListener;\n }\n createEventListener(eventTarget, eventName, eventOptions) {\n const eventListener = new EventListener(eventTarget, eventName, eventOptions);\n if (this.started) {\n eventListener.connect();\n }\n return eventListener;\n }\n fetchEventListenerMapForEventTarget(eventTarget) {\n let eventListenerMap = this.eventListenerMaps.get(eventTarget);\n if (!eventListenerMap) {\n eventListenerMap = new Map();\n this.eventListenerMaps.set(eventTarget, eventListenerMap);\n }\n return eventListenerMap;\n }\n cacheKey(eventName, eventOptions) {\n const parts = [eventName];\n Object.keys(eventOptions)\n .sort()\n .forEach((key) => {\n parts.push(`${eventOptions[key] ? \"\" : \"!\"}${key}`);\n });\n return parts.join(\":\");\n }\n}\n\nconst defaultActionDescriptorFilters = {\n stop({ event, value }) {\n if (value)\n event.stopPropagation();\n return true;\n },\n prevent({ event, value }) {\n if (value)\n event.preventDefault();\n return true;\n },\n self({ event, value, element }) {\n if (value) {\n return element === event.target;\n }\n else {\n return true;\n }\n },\n};\nconst descriptorPattern = /^(?:(?:([^.]+?)\\+)?(.+?)(?:\\.(.+?))?(?:@(window|document))?->)?(.+?)(?:#([^:]+?))(?::(.+))?$/;\nfunction parseActionDescriptorString(descriptorString) {\n const source = descriptorString.trim();\n const matches = source.match(descriptorPattern) || [];\n let eventName = matches[2];\n let keyFilter = matches[3];\n if (keyFilter && ![\"keydown\", \"keyup\", \"keypress\"].includes(eventName)) {\n eventName += `.${keyFilter}`;\n keyFilter = \"\";\n }\n return {\n eventTarget: parseEventTarget(matches[4]),\n eventName,\n eventOptions: matches[7] ? parseEventOptions(matches[7]) : {},\n identifier: matches[5],\n methodName: matches[6],\n keyFilter: matches[1] || keyFilter,\n };\n}\nfunction parseEventTarget(eventTargetName) {\n if (eventTargetName == \"window\") {\n return window;\n }\n else if (eventTargetName == \"document\") {\n return document;\n }\n}\nfunction parseEventOptions(eventOptions) {\n return eventOptions\n .split(\":\")\n .reduce((options, token) => Object.assign(options, { [token.replace(/^!/, \"\")]: !/^!/.test(token) }), {});\n}\nfunction stringifyEventTarget(eventTarget) {\n if (eventTarget == window) {\n return \"window\";\n }\n else if (eventTarget == document) {\n return \"document\";\n }\n}\n\nfunction camelize(value) {\n return value.replace(/(?:[_-])([a-z0-9])/g, (_, char) => char.toUpperCase());\n}\nfunction namespaceCamelize(value) {\n return camelize(value.replace(/--/g, \"-\").replace(/__/g, \"_\"));\n}\nfunction capitalize(value) {\n return value.charAt(0).toUpperCase() + value.slice(1);\n}\nfunction dasherize(value) {\n return value.replace(/([A-Z])/g, (_, char) => `-${char.toLowerCase()}`);\n}\nfunction tokenize(value) {\n return value.match(/[^\\s]+/g) || [];\n}\n\nfunction isSomething(object) {\n return object !== null && object !== undefined;\n}\nfunction hasProperty(object, property) {\n return Object.prototype.hasOwnProperty.call(object, property);\n}\n\nconst allModifiers = [\"meta\", \"ctrl\", \"alt\", \"shift\"];\nclass Action {\n constructor(element, index, descriptor, schema) {\n this.element = element;\n this.index = index;\n this.eventTarget = descriptor.eventTarget || element;\n this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error(\"missing event name\");\n this.eventOptions = descriptor.eventOptions || {};\n this.identifier = descriptor.identifier || error(\"missing identifier\");\n this.methodName = descriptor.methodName || error(\"missing method name\");\n this.keyFilter = descriptor.keyFilter || \"\";\n this.schema = schema;\n }\n static forToken(token, schema) {\n return new this(token.element, token.index, parseActionDescriptorString(token.content), schema);\n }\n toString() {\n const eventFilter = this.keyFilter ? `.${this.keyFilter}` : \"\";\n const eventTarget = this.eventTargetName ? `@${this.eventTargetName}` : \"\";\n return `${this.eventName}${eventFilter}${eventTarget}->${this.identifier}#${this.methodName}`;\n }\n shouldIgnoreKeyboardEvent(event) {\n if (!this.keyFilter) {\n return false;\n }\n const filters = this.keyFilter.split(\"+\");\n if (this.keyFilterDissatisfied(event, filters)) {\n return true;\n }\n const standardFilter = filters.filter((key) => !allModifiers.includes(key))[0];\n if (!standardFilter) {\n return false;\n }\n if (!hasProperty(this.keyMappings, standardFilter)) {\n error(`contains unknown key filter: ${this.keyFilter}`);\n }\n return this.keyMappings[standardFilter].toLowerCase() !== event.key.toLowerCase();\n }\n shouldIgnoreMouseEvent(event) {\n if (!this.keyFilter) {\n return false;\n }\n const filters = [this.keyFilter];\n if (this.keyFilterDissatisfied(event, filters)) {\n return true;\n }\n return false;\n }\n get params() {\n const params = {};\n const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`, \"i\");\n for (const { name, value } of Array.from(this.element.attributes)) {\n const match = name.match(pattern);\n const key = match && match[1];\n if (key) {\n params[camelize(key)] = typecast(value);\n }\n }\n return params;\n }\n get eventTargetName() {\n return stringifyEventTarget(this.eventTarget);\n }\n get keyMappings() {\n return this.schema.keyMappings;\n }\n keyFilterDissatisfied(event, filters) {\n const [meta, ctrl, alt, shift] = allModifiers.map((modifier) => filters.includes(modifier));\n return event.metaKey !== meta || event.ctrlKey !== ctrl || event.altKey !== alt || event.shiftKey !== shift;\n }\n}\nconst defaultEventNames = {\n a: () => \"click\",\n button: () => \"click\",\n form: () => \"submit\",\n details: () => \"toggle\",\n input: (e) => (e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\"),\n select: () => \"change\",\n textarea: () => \"input\",\n};\nfunction getDefaultEventNameForElement(element) {\n const tagName = element.tagName.toLowerCase();\n if (tagName in defaultEventNames) {\n return defaultEventNames[tagName](element);\n }\n}\nfunction error(message) {\n throw new Error(message);\n}\nfunction typecast(value) {\n try {\n return JSON.parse(value);\n }\n catch (o_O) {\n return value;\n }\n}\n\nclass Binding {\n constructor(context, action) {\n this.context = context;\n this.action = action;\n }\n get index() {\n return this.action.index;\n }\n get eventTarget() {\n return this.action.eventTarget;\n }\n get eventOptions() {\n return this.action.eventOptions;\n }\n get identifier() {\n return this.context.identifier;\n }\n handleEvent(event) {\n const actionEvent = this.prepareActionEvent(event);\n if (this.willBeInvokedByEvent(event) && this.applyEventModifiers(actionEvent)) {\n this.invokeWithEvent(actionEvent);\n }\n }\n get eventName() {\n return this.action.eventName;\n }\n get method() {\n const method = this.controller[this.methodName];\n if (typeof method == \"function\") {\n return method;\n }\n throw new Error(`Action \"${this.action}\" references undefined method \"${this.methodName}\"`);\n }\n applyEventModifiers(event) {\n const { element } = this.action;\n const { actionDescriptorFilters } = this.context.application;\n const { controller } = this.context;\n let passes = true;\n for (const [name, value] of Object.entries(this.eventOptions)) {\n if (name in actionDescriptorFilters) {\n const filter = actionDescriptorFilters[name];\n passes = passes && filter({ name, value, event, element, controller });\n }\n else {\n continue;\n }\n }\n return passes;\n }\n prepareActionEvent(event) {\n return Object.assign(event, { params: this.action.params });\n }\n invokeWithEvent(event) {\n const { target, currentTarget } = event;\n try {\n this.method.call(this.controller, event);\n this.context.logDebugActivity(this.methodName, { event, target, currentTarget, action: this.methodName });\n }\n catch (error) {\n const { identifier, controller, element, index } = this;\n const detail = { identifier, controller, element, index, event };\n this.context.handleError(error, `invoking action \"${this.action}\"`, detail);\n }\n }\n willBeInvokedByEvent(event) {\n const eventTarget = event.target;\n if (event instanceof KeyboardEvent && this.action.shouldIgnoreKeyboardEvent(event)) {\n return false;\n }\n if (event instanceof MouseEvent && this.action.shouldIgnoreMouseEvent(event)) {\n return false;\n }\n if (this.element === eventTarget) {\n return true;\n }\n else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n return this.scope.containsElement(eventTarget);\n }\n else {\n return this.scope.containsElement(this.action.element);\n }\n }\n get controller() {\n return this.context.controller;\n }\n get methodName() {\n return this.action.methodName;\n }\n get element() {\n return this.scope.element;\n }\n get scope() {\n return this.context.scope;\n }\n}\n\nclass ElementObserver {\n constructor(element, delegate) {\n this.mutationObserverInit = { attributes: true, childList: true, subtree: true };\n this.element = element;\n this.started = false;\n this.delegate = delegate;\n this.elements = new Set();\n this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, this.mutationObserverInit);\n this.refresh();\n }\n }\n pause(callback) {\n if (this.started) {\n this.mutationObserver.disconnect();\n this.started = false;\n }\n callback();\n if (!this.started) {\n this.mutationObserver.observe(this.element, this.mutationObserverInit);\n this.started = true;\n }\n }\n stop() {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n }\n refresh() {\n if (this.started) {\n const matches = new Set(this.matchElementsInTree());\n for (const element of Array.from(this.elements)) {\n if (!matches.has(element)) {\n this.removeElement(element);\n }\n }\n for (const element of Array.from(matches)) {\n this.addElement(element);\n }\n }\n }\n processMutations(mutations) {\n if (this.started) {\n for (const mutation of mutations) {\n this.processMutation(mutation);\n }\n }\n }\n processMutation(mutation) {\n if (mutation.type == \"attributes\") {\n this.processAttributeChange(mutation.target, mutation.attributeName);\n }\n else if (mutation.type == \"childList\") {\n this.processRemovedNodes(mutation.removedNodes);\n this.processAddedNodes(mutation.addedNodes);\n }\n }\n processAttributeChange(element, attributeName) {\n if (this.elements.has(element)) {\n if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n this.delegate.elementAttributeChanged(element, attributeName);\n }\n else {\n this.removeElement(element);\n }\n }\n else if (this.matchElement(element)) {\n this.addElement(element);\n }\n }\n processRemovedNodes(nodes) {\n for (const node of Array.from(nodes)) {\n const element = this.elementFromNode(node);\n if (element) {\n this.processTree(element, this.removeElement);\n }\n }\n }\n processAddedNodes(nodes) {\n for (const node of Array.from(nodes)) {\n const element = this.elementFromNode(node);\n if (element && this.elementIsActive(element)) {\n this.processTree(element, this.addElement);\n }\n }\n }\n matchElement(element) {\n return this.delegate.matchElement(element);\n }\n matchElementsInTree(tree = this.element) {\n return this.delegate.matchElementsInTree(tree);\n }\n processTree(tree, processor) {\n for (const element of this.matchElementsInTree(tree)) {\n processor.call(this, element);\n }\n }\n elementFromNode(node) {\n if (node.nodeType == Node.ELEMENT_NODE) {\n return node;\n }\n }\n elementIsActive(element) {\n if (element.isConnected != this.element.isConnected) {\n return false;\n }\n else {\n return this.element.contains(element);\n }\n }\n addElement(element) {\n if (!this.elements.has(element)) {\n if (this.elementIsActive(element)) {\n this.elements.add(element);\n if (this.delegate.elementMatched) {\n this.delegate.elementMatched(element);\n }\n }\n }\n }\n removeElement(element) {\n if (this.elements.has(element)) {\n this.elements.delete(element);\n if (this.delegate.elementUnmatched) {\n this.delegate.elementUnmatched(element);\n }\n }\n }\n}\n\nclass AttributeObserver {\n constructor(element, attributeName, delegate) {\n this.attributeName = attributeName;\n this.delegate = delegate;\n this.elementObserver = new ElementObserver(element, this);\n }\n get element() {\n return this.elementObserver.element;\n }\n get selector() {\n return `[${this.attributeName}]`;\n }\n start() {\n this.elementObserver.start();\n }\n pause(callback) {\n this.elementObserver.pause(callback);\n }\n stop() {\n this.elementObserver.stop();\n }\n refresh() {\n this.elementObserver.refresh();\n }\n get started() {\n return this.elementObserver.started;\n }\n matchElement(element) {\n return element.hasAttribute(this.attributeName);\n }\n matchElementsInTree(tree) {\n const match = this.matchElement(tree) ? [tree] : [];\n const matches = Array.from(tree.querySelectorAll(this.selector));\n return match.concat(matches);\n }\n elementMatched(element) {\n if (this.delegate.elementMatchedAttribute) {\n this.delegate.elementMatchedAttribute(element, this.attributeName);\n }\n }\n elementUnmatched(element) {\n if (this.delegate.elementUnmatchedAttribute) {\n this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n }\n }\n elementAttributeChanged(element, attributeName) {\n if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n this.delegate.elementAttributeValueChanged(element, attributeName);\n }\n }\n}\n\nfunction add(map, key, value) {\n fetch(map, key).add(value);\n}\nfunction del(map, key, value) {\n fetch(map, key).delete(value);\n prune(map, key);\n}\nfunction fetch(map, key) {\n let values = map.get(key);\n if (!values) {\n values = new Set();\n map.set(key, values);\n }\n return values;\n}\nfunction prune(map, key) {\n const values = map.get(key);\n if (values != null && values.size == 0) {\n map.delete(key);\n }\n}\n\nclass Multimap {\n constructor() {\n this.valuesByKey = new Map();\n }\n get keys() {\n return Array.from(this.valuesByKey.keys());\n }\n get values() {\n const sets = Array.from(this.valuesByKey.values());\n return sets.reduce((values, set) => values.concat(Array.from(set)), []);\n }\n get size() {\n const sets = Array.from(this.valuesByKey.values());\n return sets.reduce((size, set) => size + set.size, 0);\n }\n add(key, value) {\n add(this.valuesByKey, key, value);\n }\n delete(key, value) {\n del(this.valuesByKey, key, value);\n }\n has(key, value) {\n const values = this.valuesByKey.get(key);\n return values != null && values.has(value);\n }\n hasKey(key) {\n return this.valuesByKey.has(key);\n }\n hasValue(value) {\n const sets = Array.from(this.valuesByKey.values());\n return sets.some((set) => set.has(value));\n }\n getValuesForKey(key) {\n const values = this.valuesByKey.get(key);\n return values ? Array.from(values) : [];\n }\n getKeysForValue(value) {\n return Array.from(this.valuesByKey)\n .filter(([_key, values]) => values.has(value))\n .map(([key, _values]) => key);\n }\n}\n\nclass IndexedMultimap extends Multimap {\n constructor() {\n super();\n this.keysByValue = new Map();\n }\n get values() {\n return Array.from(this.keysByValue.keys());\n }\n add(key, value) {\n super.add(key, value);\n add(this.keysByValue, value, key);\n }\n delete(key, value) {\n super.delete(key, value);\n del(this.keysByValue, value, key);\n }\n hasValue(value) {\n return this.keysByValue.has(value);\n }\n getKeysForValue(value) {\n const set = this.keysByValue.get(value);\n return set ? Array.from(set) : [];\n }\n}\n\nclass SelectorObserver {\n constructor(element, selector, delegate, details) {\n this._selector = selector;\n this.details = details;\n this.elementObserver = new ElementObserver(element, this);\n this.delegate = delegate;\n this.matchesByElement = new Multimap();\n }\n get started() {\n return this.elementObserver.started;\n }\n get selector() {\n return this._selector;\n }\n set selector(selector) {\n this._selector = selector;\n this.refresh();\n }\n start() {\n this.elementObserver.start();\n }\n pause(callback) {\n this.elementObserver.pause(callback);\n }\n stop() {\n this.elementObserver.stop();\n }\n refresh() {\n this.elementObserver.refresh();\n }\n get element() {\n return this.elementObserver.element;\n }\n matchElement(element) {\n const { selector } = this;\n if (selector) {\n const matches = element.matches(selector);\n if (this.delegate.selectorMatchElement) {\n return matches && this.delegate.selectorMatchElement(element, this.details);\n }\n return matches;\n }\n else {\n return false;\n }\n }\n matchElementsInTree(tree) {\n const { selector } = this;\n if (selector) {\n const match = this.matchElement(tree) ? [tree] : [];\n const matches = Array.from(tree.querySelectorAll(selector)).filter((match) => this.matchElement(match));\n return match.concat(matches);\n }\n else {\n return [];\n }\n }\n elementMatched(element) {\n const { selector } = this;\n if (selector) {\n this.selectorMatched(element, selector);\n }\n }\n elementUnmatched(element) {\n const selectors = this.matchesByElement.getKeysForValue(element);\n for (const selector of selectors) {\n this.selectorUnmatched(element, selector);\n }\n }\n elementAttributeChanged(element, _attributeName) {\n const { selector } = this;\n if (selector) {\n const matches = this.matchElement(element);\n const matchedBefore = this.matchesByElement.has(selector, element);\n if (matches && !matchedBefore) {\n this.selectorMatched(element, selector);\n }\n else if (!matches && matchedBefore) {\n this.selectorUnmatched(element, selector);\n }\n }\n }\n selectorMatched(element, selector) {\n this.delegate.selectorMatched(element, selector, this.details);\n this.matchesByElement.add(selector, element);\n }\n selectorUnmatched(element, selector) {\n this.delegate.selectorUnmatched(element, selector, this.details);\n this.matchesByElement.delete(selector, element);\n }\n}\n\nclass StringMapObserver {\n constructor(element, delegate) {\n this.element = element;\n this.delegate = delegate;\n this.started = false;\n this.stringMap = new Map();\n this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, { attributes: true, attributeOldValue: true });\n this.refresh();\n }\n }\n stop() {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n }\n refresh() {\n if (this.started) {\n for (const attributeName of this.knownAttributeNames) {\n this.refreshAttribute(attributeName, null);\n }\n }\n }\n processMutations(mutations) {\n if (this.started) {\n for (const mutation of mutations) {\n this.processMutation(mutation);\n }\n }\n }\n processMutation(mutation) {\n const attributeName = mutation.attributeName;\n if (attributeName) {\n this.refreshAttribute(attributeName, mutation.oldValue);\n }\n }\n refreshAttribute(attributeName, oldValue) {\n const key = this.delegate.getStringMapKeyForAttribute(attributeName);\n if (key != null) {\n if (!this.stringMap.has(attributeName)) {\n this.stringMapKeyAdded(key, attributeName);\n }\n const value = this.element.getAttribute(attributeName);\n if (this.stringMap.get(attributeName) != value) {\n this.stringMapValueChanged(value, key, oldValue);\n }\n if (value == null) {\n const oldValue = this.stringMap.get(attributeName);\n this.stringMap.delete(attributeName);\n if (oldValue)\n this.stringMapKeyRemoved(key, attributeName, oldValue);\n }\n else {\n this.stringMap.set(attributeName, value);\n }\n }\n }\n stringMapKeyAdded(key, attributeName) {\n if (this.delegate.stringMapKeyAdded) {\n this.delegate.stringMapKeyAdded(key, attributeName);\n }\n }\n stringMapValueChanged(value, key, oldValue) {\n if (this.delegate.stringMapValueChanged) {\n this.delegate.stringMapValueChanged(value, key, oldValue);\n }\n }\n stringMapKeyRemoved(key, attributeName, oldValue) {\n if (this.delegate.stringMapKeyRemoved) {\n this.delegate.stringMapKeyRemoved(key, attributeName, oldValue);\n }\n }\n get knownAttributeNames() {\n return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)));\n }\n get currentAttributeNames() {\n return Array.from(this.element.attributes).map((attribute) => attribute.name);\n }\n get recordedAttributeNames() {\n return Array.from(this.stringMap.keys());\n }\n}\n\nclass TokenListObserver {\n constructor(element, attributeName, delegate) {\n this.attributeObserver = new AttributeObserver(element, attributeName, this);\n this.delegate = delegate;\n this.tokensByElement = new Multimap();\n }\n get started() {\n return this.attributeObserver.started;\n }\n start() {\n this.attributeObserver.start();\n }\n pause(callback) {\n this.attributeObserver.pause(callback);\n }\n stop() {\n this.attributeObserver.stop();\n }\n refresh() {\n this.attributeObserver.refresh();\n }\n get element() {\n return this.attributeObserver.element;\n }\n get attributeName() {\n return this.attributeObserver.attributeName;\n }\n elementMatchedAttribute(element) {\n this.tokensMatched(this.readTokensForElement(element));\n }\n elementAttributeValueChanged(element) {\n const [unmatchedTokens, matchedTokens] = this.refreshTokensForElement(element);\n this.tokensUnmatched(unmatchedTokens);\n this.tokensMatched(matchedTokens);\n }\n elementUnmatchedAttribute(element) {\n this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n }\n tokensMatched(tokens) {\n tokens.forEach((token) => this.tokenMatched(token));\n }\n tokensUnmatched(tokens) {\n tokens.forEach((token) => this.tokenUnmatched(token));\n }\n tokenMatched(token) {\n this.delegate.tokenMatched(token);\n this.tokensByElement.add(token.element, token);\n }\n tokenUnmatched(token) {\n this.delegate.tokenUnmatched(token);\n this.tokensByElement.delete(token.element, token);\n }\n refreshTokensForElement(element) {\n const previousTokens = this.tokensByElement.getValuesForKey(element);\n const currentTokens = this.readTokensForElement(element);\n const firstDifferingIndex = zip(previousTokens, currentTokens).findIndex(([previousToken, currentToken]) => !tokensAreEqual(previousToken, currentToken));\n if (firstDifferingIndex == -1) {\n return [[], []];\n }\n else {\n return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n }\n }\n readTokensForElement(element) {\n const attributeName = this.attributeName;\n const tokenString = element.getAttribute(attributeName) || \"\";\n return parseTokenString(tokenString, element, attributeName);\n }\n}\nfunction parseTokenString(tokenString, element, attributeName) {\n return tokenString\n .trim()\n .split(/\\s+/)\n .filter((content) => content.length)\n .map((content, index) => ({ element, attributeName, content, index }));\n}\nfunction zip(left, right) {\n const length = Math.max(left.length, right.length);\n return Array.from({ length }, (_, index) => [left[index], right[index]]);\n}\nfunction tokensAreEqual(left, right) {\n return left && right && left.index == right.index && left.content == right.content;\n}\n\nclass ValueListObserver {\n constructor(element, attributeName, delegate) {\n this.tokenListObserver = new TokenListObserver(element, attributeName, this);\n this.delegate = delegate;\n this.parseResultsByToken = new WeakMap();\n this.valuesByTokenByElement = new WeakMap();\n }\n get started() {\n return this.tokenListObserver.started;\n }\n start() {\n this.tokenListObserver.start();\n }\n stop() {\n this.tokenListObserver.stop();\n }\n refresh() {\n this.tokenListObserver.refresh();\n }\n get element() {\n return this.tokenListObserver.element;\n }\n get attributeName() {\n return this.tokenListObserver.attributeName;\n }\n tokenMatched(token) {\n const { element } = token;\n const { value } = this.fetchParseResultForToken(token);\n if (value) {\n this.fetchValuesByTokenForElement(element).set(token, value);\n this.delegate.elementMatchedValue(element, value);\n }\n }\n tokenUnmatched(token) {\n const { element } = token;\n const { value } = this.fetchParseResultForToken(token);\n if (value) {\n this.fetchValuesByTokenForElement(element).delete(token);\n this.delegate.elementUnmatchedValue(element, value);\n }\n }\n fetchParseResultForToken(token) {\n let parseResult = this.parseResultsByToken.get(token);\n if (!parseResult) {\n parseResult = this.parseToken(token);\n this.parseResultsByToken.set(token, parseResult);\n }\n return parseResult;\n }\n fetchValuesByTokenForElement(element) {\n let valuesByToken = this.valuesByTokenByElement.get(element);\n if (!valuesByToken) {\n valuesByToken = new Map();\n this.valuesByTokenByElement.set(element, valuesByToken);\n }\n return valuesByToken;\n }\n parseToken(token) {\n try {\n const value = this.delegate.parseValueForToken(token);\n return { value };\n }\n catch (error) {\n return { error };\n }\n }\n}\n\nclass BindingObserver {\n constructor(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.bindingsByAction = new Map();\n }\n start() {\n if (!this.valueListObserver) {\n this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);\n this.valueListObserver.start();\n }\n }\n stop() {\n if (this.valueListObserver) {\n this.valueListObserver.stop();\n delete this.valueListObserver;\n this.disconnectAllActions();\n }\n }\n get element() {\n return this.context.element;\n }\n get identifier() {\n return this.context.identifier;\n }\n get actionAttribute() {\n return this.schema.actionAttribute;\n }\n get schema() {\n return this.context.schema;\n }\n get bindings() {\n return Array.from(this.bindingsByAction.values());\n }\n connectAction(action) {\n const binding = new Binding(this.context, action);\n this.bindingsByAction.set(action, binding);\n this.delegate.bindingConnected(binding);\n }\n disconnectAction(action) {\n const binding = this.bindingsByAction.get(action);\n if (binding) {\n this.bindingsByAction.delete(action);\n this.delegate.bindingDisconnected(binding);\n }\n }\n disconnectAllActions() {\n this.bindings.forEach((binding) => this.delegate.bindingDisconnected(binding, true));\n this.bindingsByAction.clear();\n }\n parseValueForToken(token) {\n const action = Action.forToken(token, this.schema);\n if (action.identifier == this.identifier) {\n return action;\n }\n }\n elementMatchedValue(element, action) {\n this.connectAction(action);\n }\n elementUnmatchedValue(element, action) {\n this.disconnectAction(action);\n }\n}\n\nclass ValueObserver {\n constructor(context, receiver) {\n this.context = context;\n this.receiver = receiver;\n this.stringMapObserver = new StringMapObserver(this.element, this);\n this.valueDescriptorMap = this.controller.valueDescriptorMap;\n }\n start() {\n this.stringMapObserver.start();\n this.invokeChangedCallbacksForDefaultValues();\n }\n stop() {\n this.stringMapObserver.stop();\n }\n get element() {\n return this.context.element;\n }\n get controller() {\n return this.context.controller;\n }\n getStringMapKeyForAttribute(attributeName) {\n if (attributeName in this.valueDescriptorMap) {\n return this.valueDescriptorMap[attributeName].name;\n }\n }\n stringMapKeyAdded(key, attributeName) {\n const descriptor = this.valueDescriptorMap[attributeName];\n if (!this.hasValue(key)) {\n this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), descriptor.writer(descriptor.defaultValue));\n }\n }\n stringMapValueChanged(value, name, oldValue) {\n const descriptor = this.valueDescriptorNameMap[name];\n if (value === null)\n return;\n if (oldValue === null) {\n oldValue = descriptor.writer(descriptor.defaultValue);\n }\n this.invokeChangedCallback(name, value, oldValue);\n }\n stringMapKeyRemoved(key, attributeName, oldValue) {\n const descriptor = this.valueDescriptorNameMap[key];\n if (this.hasValue(key)) {\n this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), oldValue);\n }\n else {\n this.invokeChangedCallback(key, descriptor.writer(descriptor.defaultValue), oldValue);\n }\n }\n invokeChangedCallbacksForDefaultValues() {\n for (const { key, name, defaultValue, writer } of this.valueDescriptors) {\n if (defaultValue != undefined && !this.controller.data.has(key)) {\n this.invokeChangedCallback(name, writer(defaultValue), undefined);\n }\n }\n }\n invokeChangedCallback(name, rawValue, rawOldValue) {\n const changedMethodName = `${name}Changed`;\n const changedMethod = this.receiver[changedMethodName];\n if (typeof changedMethod == \"function\") {\n const descriptor = this.valueDescriptorNameMap[name];\n try {\n const value = descriptor.reader(rawValue);\n let oldValue = rawOldValue;\n if (rawOldValue) {\n oldValue = descriptor.reader(rawOldValue);\n }\n changedMethod.call(this.receiver, value, oldValue);\n }\n catch (error) {\n if (error instanceof TypeError) {\n error.message = `Stimulus Value \"${this.context.identifier}.${descriptor.name}\" - ${error.message}`;\n }\n throw error;\n }\n }\n }\n get valueDescriptors() {\n const { valueDescriptorMap } = this;\n return Object.keys(valueDescriptorMap).map((key) => valueDescriptorMap[key]);\n }\n get valueDescriptorNameMap() {\n const descriptors = {};\n Object.keys(this.valueDescriptorMap).forEach((key) => {\n const descriptor = this.valueDescriptorMap[key];\n descriptors[descriptor.name] = descriptor;\n });\n return descriptors;\n }\n hasValue(attributeName) {\n const descriptor = this.valueDescriptorNameMap[attributeName];\n const hasMethodName = `has${capitalize(descriptor.name)}`;\n return this.receiver[hasMethodName];\n }\n}\n\nclass TargetObserver {\n constructor(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.targetsByName = new Multimap();\n }\n start() {\n if (!this.tokenListObserver) {\n this.tokenListObserver = new TokenListObserver(this.element, this.attributeName, this);\n this.tokenListObserver.start();\n }\n }\n stop() {\n if (this.tokenListObserver) {\n this.disconnectAllTargets();\n this.tokenListObserver.stop();\n delete this.tokenListObserver;\n }\n }\n tokenMatched({ element, content: name }) {\n if (this.scope.containsElement(element)) {\n this.connectTarget(element, name);\n }\n }\n tokenUnmatched({ element, content: name }) {\n this.disconnectTarget(element, name);\n }\n connectTarget(element, name) {\n var _a;\n if (!this.targetsByName.has(name, element)) {\n this.targetsByName.add(name, element);\n (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetConnected(element, name));\n }\n }\n disconnectTarget(element, name) {\n var _a;\n if (this.targetsByName.has(name, element)) {\n this.targetsByName.delete(name, element);\n (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetDisconnected(element, name));\n }\n }\n disconnectAllTargets() {\n for (const name of this.targetsByName.keys) {\n for (const element of this.targetsByName.getValuesForKey(name)) {\n this.disconnectTarget(element, name);\n }\n }\n }\n get attributeName() {\n return `data-${this.context.identifier}-target`;\n }\n get element() {\n return this.context.element;\n }\n get scope() {\n return this.context.scope;\n }\n}\n\nfunction readInheritableStaticArrayValues(constructor, propertyName) {\n const ancestors = getAncestorsForConstructor(constructor);\n return Array.from(ancestors.reduce((values, constructor) => {\n getOwnStaticArrayValues(constructor, propertyName).forEach((name) => values.add(name));\n return values;\n }, new Set()));\n}\nfunction readInheritableStaticObjectPairs(constructor, propertyName) {\n const ancestors = getAncestorsForConstructor(constructor);\n return ancestors.reduce((pairs, constructor) => {\n pairs.push(...getOwnStaticObjectPairs(constructor, propertyName));\n return pairs;\n }, []);\n}\nfunction getAncestorsForConstructor(constructor) {\n const ancestors = [];\n while (constructor) {\n ancestors.push(constructor);\n constructor = Object.getPrototypeOf(constructor);\n }\n return ancestors.reverse();\n}\nfunction getOwnStaticArrayValues(constructor, propertyName) {\n const definition = constructor[propertyName];\n return Array.isArray(definition) ? definition : [];\n}\nfunction getOwnStaticObjectPairs(constructor, propertyName) {\n const definition = constructor[propertyName];\n return definition ? Object.keys(definition).map((key) => [key, definition[key]]) : [];\n}\n\nclass OutletObserver {\n constructor(context, delegate) {\n this.started = false;\n this.context = context;\n this.delegate = delegate;\n this.outletsByName = new Multimap();\n this.outletElementsByName = new Multimap();\n this.selectorObserverMap = new Map();\n this.attributeObserverMap = new Map();\n }\n start() {\n if (!this.started) {\n this.outletDefinitions.forEach((outletName) => {\n this.setupSelectorObserverForOutlet(outletName);\n this.setupAttributeObserverForOutlet(outletName);\n });\n this.started = true;\n this.dependentContexts.forEach((context) => context.refresh());\n }\n }\n refresh() {\n this.selectorObserverMap.forEach((observer) => observer.refresh());\n this.attributeObserverMap.forEach((observer) => observer.refresh());\n }\n stop() {\n if (this.started) {\n this.started = false;\n this.disconnectAllOutlets();\n this.stopSelectorObservers();\n this.stopAttributeObservers();\n }\n }\n stopSelectorObservers() {\n if (this.selectorObserverMap.size > 0) {\n this.selectorObserverMap.forEach((observer) => observer.stop());\n this.selectorObserverMap.clear();\n }\n }\n stopAttributeObservers() {\n if (this.attributeObserverMap.size > 0) {\n this.attributeObserverMap.forEach((observer) => observer.stop());\n this.attributeObserverMap.clear();\n }\n }\n selectorMatched(element, _selector, { outletName }) {\n const outlet = this.getOutlet(element, outletName);\n if (outlet) {\n this.connectOutlet(outlet, element, outletName);\n }\n }\n selectorUnmatched(element, _selector, { outletName }) {\n const outlet = this.getOutletFromMap(element, outletName);\n if (outlet) {\n this.disconnectOutlet(outlet, element, outletName);\n }\n }\n selectorMatchElement(element, { outletName }) {\n const selector = this.selector(outletName);\n const hasOutlet = this.hasOutlet(element, outletName);\n const hasOutletController = element.matches(`[${this.schema.controllerAttribute}~=${outletName}]`);\n if (selector) {\n return hasOutlet && hasOutletController && element.matches(selector);\n }\n else {\n return false;\n }\n }\n elementMatchedAttribute(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n elementAttributeValueChanged(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n elementUnmatchedAttribute(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n connectOutlet(outlet, element, outletName) {\n var _a;\n if (!this.outletElementsByName.has(outletName, element)) {\n this.outletsByName.add(outletName, outlet);\n this.outletElementsByName.add(outletName, element);\n (_a = this.selectorObserverMap.get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletConnected(outlet, element, outletName));\n }\n }\n disconnectOutlet(outlet, element, outletName) {\n var _a;\n if (this.outletElementsByName.has(outletName, element)) {\n this.outletsByName.delete(outletName, outlet);\n this.outletElementsByName.delete(outletName, element);\n (_a = this.selectorObserverMap\n .get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletDisconnected(outlet, element, outletName));\n }\n }\n disconnectAllOutlets() {\n for (const outletName of this.outletElementsByName.keys) {\n for (const element of this.outletElementsByName.getValuesForKey(outletName)) {\n for (const outlet of this.outletsByName.getValuesForKey(outletName)) {\n this.disconnectOutlet(outlet, element, outletName);\n }\n }\n }\n }\n updateSelectorObserverForOutlet(outletName) {\n const observer = this.selectorObserverMap.get(outletName);\n if (observer) {\n observer.selector = this.selector(outletName);\n }\n }\n setupSelectorObserverForOutlet(outletName) {\n const selector = this.selector(outletName);\n const selectorObserver = new SelectorObserver(document.body, selector, this, { outletName });\n this.selectorObserverMap.set(outletName, selectorObserver);\n selectorObserver.start();\n }\n setupAttributeObserverForOutlet(outletName) {\n const attributeName = this.attributeNameForOutletName(outletName);\n const attributeObserver = new AttributeObserver(this.scope.element, attributeName, this);\n this.attributeObserverMap.set(outletName, attributeObserver);\n attributeObserver.start();\n }\n selector(outletName) {\n return this.scope.outlets.getSelectorForOutletName(outletName);\n }\n attributeNameForOutletName(outletName) {\n return this.scope.schema.outletAttributeForScope(this.identifier, outletName);\n }\n getOutletNameFromOutletAttributeName(attributeName) {\n return this.outletDefinitions.find((outletName) => this.attributeNameForOutletName(outletName) === attributeName);\n }\n get outletDependencies() {\n const dependencies = new Multimap();\n this.router.modules.forEach((module) => {\n const constructor = module.definition.controllerConstructor;\n const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n outlets.forEach((outlet) => dependencies.add(outlet, module.identifier));\n });\n return dependencies;\n }\n get outletDefinitions() {\n return this.outletDependencies.getKeysForValue(this.identifier);\n }\n get dependentControllerIdentifiers() {\n return this.outletDependencies.getValuesForKey(this.identifier);\n }\n get dependentContexts() {\n const identifiers = this.dependentControllerIdentifiers;\n return this.router.contexts.filter((context) => identifiers.includes(context.identifier));\n }\n hasOutlet(element, outletName) {\n return !!this.getOutlet(element, outletName) || !!this.getOutletFromMap(element, outletName);\n }\n getOutlet(element, outletName) {\n return this.application.getControllerForElementAndIdentifier(element, outletName);\n }\n getOutletFromMap(element, outletName) {\n return this.outletsByName.getValuesForKey(outletName).find((outlet) => outlet.element === element);\n }\n get scope() {\n return this.context.scope;\n }\n get schema() {\n return this.context.schema;\n }\n get identifier() {\n return this.context.identifier;\n }\n get application() {\n return this.context.application;\n }\n get router() {\n return this.application.router;\n }\n}\n\nclass Context {\n constructor(module, scope) {\n this.logDebugActivity = (functionName, detail = {}) => {\n const { identifier, controller, element } = this;\n detail = Object.assign({ identifier, controller, element }, detail);\n this.application.logDebugActivity(this.identifier, functionName, detail);\n };\n this.module = module;\n this.scope = scope;\n this.controller = new module.controllerConstructor(this);\n this.bindingObserver = new BindingObserver(this, this.dispatcher);\n this.valueObserver = new ValueObserver(this, this.controller);\n this.targetObserver = new TargetObserver(this, this);\n this.outletObserver = new OutletObserver(this, this);\n try {\n this.controller.initialize();\n this.logDebugActivity(\"initialize\");\n }\n catch (error) {\n this.handleError(error, \"initializing controller\");\n }\n }\n connect() {\n this.bindingObserver.start();\n this.valueObserver.start();\n this.targetObserver.start();\n this.outletObserver.start();\n try {\n this.controller.connect();\n this.logDebugActivity(\"connect\");\n }\n catch (error) {\n this.handleError(error, \"connecting controller\");\n }\n }\n refresh() {\n this.outletObserver.refresh();\n }\n disconnect() {\n try {\n this.controller.disconnect();\n this.logDebugActivity(\"disconnect\");\n }\n catch (error) {\n this.handleError(error, \"disconnecting controller\");\n }\n this.outletObserver.stop();\n this.targetObserver.stop();\n this.valueObserver.stop();\n this.bindingObserver.stop();\n }\n get application() {\n return this.module.application;\n }\n get identifier() {\n return this.module.identifier;\n }\n get schema() {\n return this.application.schema;\n }\n get dispatcher() {\n return this.application.dispatcher;\n }\n get element() {\n return this.scope.element;\n }\n get parentElement() {\n return this.element.parentElement;\n }\n handleError(error, message, detail = {}) {\n const { identifier, controller, element } = this;\n detail = Object.assign({ identifier, controller, element }, detail);\n this.application.handleError(error, `Error ${message}`, detail);\n }\n targetConnected(element, name) {\n this.invokeControllerMethod(`${name}TargetConnected`, element);\n }\n targetDisconnected(element, name) {\n this.invokeControllerMethod(`${name}TargetDisconnected`, element);\n }\n outletConnected(outlet, element, name) {\n this.invokeControllerMethod(`${namespaceCamelize(name)}OutletConnected`, outlet, element);\n }\n outletDisconnected(outlet, element, name) {\n this.invokeControllerMethod(`${namespaceCamelize(name)}OutletDisconnected`, outlet, element);\n }\n invokeControllerMethod(methodName, ...args) {\n const controller = this.controller;\n if (typeof controller[methodName] == \"function\") {\n controller[methodName](...args);\n }\n }\n}\n\nfunction bless(constructor) {\n return shadow(constructor, getBlessedProperties(constructor));\n}\nfunction shadow(constructor, properties) {\n const shadowConstructor = extend(constructor);\n const shadowProperties = getShadowProperties(constructor.prototype, properties);\n Object.defineProperties(shadowConstructor.prototype, shadowProperties);\n return shadowConstructor;\n}\nfunction getBlessedProperties(constructor) {\n const blessings = readInheritableStaticArrayValues(constructor, \"blessings\");\n return blessings.reduce((blessedProperties, blessing) => {\n const properties = blessing(constructor);\n for (const key in properties) {\n const descriptor = blessedProperties[key] || {};\n blessedProperties[key] = Object.assign(descriptor, properties[key]);\n }\n return blessedProperties;\n }, {});\n}\nfunction getShadowProperties(prototype, properties) {\n return getOwnKeys(properties).reduce((shadowProperties, key) => {\n const descriptor = getShadowedDescriptor(prototype, properties, key);\n if (descriptor) {\n Object.assign(shadowProperties, { [key]: descriptor });\n }\n return shadowProperties;\n }, {});\n}\nfunction getShadowedDescriptor(prototype, properties, key) {\n const shadowingDescriptor = Object.getOwnPropertyDescriptor(prototype, key);\n const shadowedByValue = shadowingDescriptor && \"value\" in shadowingDescriptor;\n if (!shadowedByValue) {\n const descriptor = Object.getOwnPropertyDescriptor(properties, key).value;\n if (shadowingDescriptor) {\n descriptor.get = shadowingDescriptor.get || descriptor.get;\n descriptor.set = shadowingDescriptor.set || descriptor.set;\n }\n return descriptor;\n }\n}\nconst getOwnKeys = (() => {\n if (typeof Object.getOwnPropertySymbols == \"function\") {\n return (object) => [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)];\n }\n else {\n return Object.getOwnPropertyNames;\n }\n})();\nconst extend = (() => {\n function extendWithReflect(constructor) {\n function extended() {\n return Reflect.construct(constructor, arguments, new.target);\n }\n extended.prototype = Object.create(constructor.prototype, {\n constructor: { value: extended },\n });\n Reflect.setPrototypeOf(extended, constructor);\n return extended;\n }\n function testReflectExtension() {\n const a = function () {\n this.a.call(this);\n };\n const b = extendWithReflect(a);\n b.prototype.a = function () { };\n return new b();\n }\n try {\n testReflectExtension();\n return extendWithReflect;\n }\n catch (error) {\n return (constructor) => class extended extends constructor {\n };\n }\n})();\n\nfunction blessDefinition(definition) {\n return {\n identifier: definition.identifier,\n controllerConstructor: bless(definition.controllerConstructor),\n };\n}\n\nclass Module {\n constructor(application, definition) {\n this.application = application;\n this.definition = blessDefinition(definition);\n this.contextsByScope = new WeakMap();\n this.connectedContexts = new Set();\n }\n get identifier() {\n return this.definition.identifier;\n }\n get controllerConstructor() {\n return this.definition.controllerConstructor;\n }\n get contexts() {\n return Array.from(this.connectedContexts);\n }\n connectContextForScope(scope) {\n const context = this.fetchContextForScope(scope);\n this.connectedContexts.add(context);\n context.connect();\n }\n disconnectContextForScope(scope) {\n const context = this.contextsByScope.get(scope);\n if (context) {\n this.connectedContexts.delete(context);\n context.disconnect();\n }\n }\n fetchContextForScope(scope) {\n let context = this.contextsByScope.get(scope);\n if (!context) {\n context = new Context(this, scope);\n this.contextsByScope.set(scope, context);\n }\n return context;\n }\n}\n\nclass ClassMap {\n constructor(scope) {\n this.scope = scope;\n }\n has(name) {\n return this.data.has(this.getDataKey(name));\n }\n get(name) {\n return this.getAll(name)[0];\n }\n getAll(name) {\n const tokenString = this.data.get(this.getDataKey(name)) || \"\";\n return tokenize(tokenString);\n }\n getAttributeName(name) {\n return this.data.getAttributeNameForKey(this.getDataKey(name));\n }\n getDataKey(name) {\n return `${name}-class`;\n }\n get data() {\n return this.scope.data;\n }\n}\n\nclass DataMap {\n constructor(scope) {\n this.scope = scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get(key) {\n const name = this.getAttributeNameForKey(key);\n return this.element.getAttribute(name);\n }\n set(key, value) {\n const name = this.getAttributeNameForKey(key);\n this.element.setAttribute(name, value);\n return this.get(key);\n }\n has(key) {\n const name = this.getAttributeNameForKey(key);\n return this.element.hasAttribute(name);\n }\n delete(key) {\n if (this.has(key)) {\n const name = this.getAttributeNameForKey(key);\n this.element.removeAttribute(name);\n return true;\n }\n else {\n return false;\n }\n }\n getAttributeNameForKey(key) {\n return `data-${this.identifier}-${dasherize(key)}`;\n }\n}\n\nclass Guide {\n constructor(logger) {\n this.warnedKeysByObject = new WeakMap();\n this.logger = logger;\n }\n warn(object, key, message) {\n let warnedKeys = this.warnedKeysByObject.get(object);\n if (!warnedKeys) {\n warnedKeys = new Set();\n this.warnedKeysByObject.set(object, warnedKeys);\n }\n if (!warnedKeys.has(key)) {\n warnedKeys.add(key);\n this.logger.warn(message, object);\n }\n }\n}\n\nfunction attributeValueContainsToken(attributeName, token) {\n return `[${attributeName}~=\"${token}\"]`;\n}\n\nclass TargetSet {\n constructor(scope) {\n this.scope = scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get schema() {\n return this.scope.schema;\n }\n has(targetName) {\n return this.find(targetName) != null;\n }\n find(...targetNames) {\n return targetNames.reduce((target, targetName) => target || this.findTarget(targetName) || this.findLegacyTarget(targetName), undefined);\n }\n findAll(...targetNames) {\n return targetNames.reduce((targets, targetName) => [\n ...targets,\n ...this.findAllTargets(targetName),\n ...this.findAllLegacyTargets(targetName),\n ], []);\n }\n findTarget(targetName) {\n const selector = this.getSelectorForTargetName(targetName);\n return this.scope.findElement(selector);\n }\n findAllTargets(targetName) {\n const selector = this.getSelectorForTargetName(targetName);\n return this.scope.findAllElements(selector);\n }\n getSelectorForTargetName(targetName) {\n const attributeName = this.schema.targetAttributeForScope(this.identifier);\n return attributeValueContainsToken(attributeName, targetName);\n }\n findLegacyTarget(targetName) {\n const selector = this.getLegacySelectorForTargetName(targetName);\n return this.deprecate(this.scope.findElement(selector), targetName);\n }\n findAllLegacyTargets(targetName) {\n const selector = this.getLegacySelectorForTargetName(targetName);\n return this.scope.findAllElements(selector).map((element) => this.deprecate(element, targetName));\n }\n getLegacySelectorForTargetName(targetName) {\n const targetDescriptor = `${this.identifier}.${targetName}`;\n return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n }\n deprecate(element, targetName) {\n if (element) {\n const { identifier } = this;\n const attributeName = this.schema.targetAttribute;\n const revisedAttributeName = this.schema.targetAttributeForScope(identifier);\n this.guide.warn(element, `target:${targetName}`, `Please replace ${attributeName}=\"${identifier}.${targetName}\" with ${revisedAttributeName}=\"${targetName}\". ` +\n `The ${attributeName} attribute is deprecated and will be removed in a future version of Stimulus.`);\n }\n return element;\n }\n get guide() {\n return this.scope.guide;\n }\n}\n\nclass OutletSet {\n constructor(scope, controllerElement) {\n this.scope = scope;\n this.controllerElement = controllerElement;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get schema() {\n return this.scope.schema;\n }\n has(outletName) {\n return this.find(outletName) != null;\n }\n find(...outletNames) {\n return outletNames.reduce((outlet, outletName) => outlet || this.findOutlet(outletName), undefined);\n }\n findAll(...outletNames) {\n return outletNames.reduce((outlets, outletName) => [...outlets, ...this.findAllOutlets(outletName)], []);\n }\n getSelectorForOutletName(outletName) {\n const attributeName = this.schema.outletAttributeForScope(this.identifier, outletName);\n return this.controllerElement.getAttribute(attributeName);\n }\n findOutlet(outletName) {\n const selector = this.getSelectorForOutletName(outletName);\n if (selector)\n return this.findElement(selector, outletName);\n }\n findAllOutlets(outletName) {\n const selector = this.getSelectorForOutletName(outletName);\n return selector ? this.findAllElements(selector, outletName) : [];\n }\n findElement(selector, outletName) {\n const elements = this.scope.queryElements(selector);\n return elements.filter((element) => this.matchesElement(element, selector, outletName))[0];\n }\n findAllElements(selector, outletName) {\n const elements = this.scope.queryElements(selector);\n return elements.filter((element) => this.matchesElement(element, selector, outletName));\n }\n matchesElement(element, selector, outletName) {\n const controllerAttribute = element.getAttribute(this.scope.schema.controllerAttribute) || \"\";\n return element.matches(selector) && controllerAttribute.split(\" \").includes(outletName);\n }\n}\n\nclass Scope {\n constructor(schema, element, identifier, logger) {\n this.targets = new TargetSet(this);\n this.classes = new ClassMap(this);\n this.data = new DataMap(this);\n this.containsElement = (element) => {\n return element.closest(this.controllerSelector) === this.element;\n };\n this.schema = schema;\n this.element = element;\n this.identifier = identifier;\n this.guide = new Guide(logger);\n this.outlets = new OutletSet(this.documentScope, element);\n }\n findElement(selector) {\n return this.element.matches(selector) ? this.element : this.queryElements(selector).find(this.containsElement);\n }\n findAllElements(selector) {\n return [\n ...(this.element.matches(selector) ? [this.element] : []),\n ...this.queryElements(selector).filter(this.containsElement),\n ];\n }\n queryElements(selector) {\n return Array.from(this.element.querySelectorAll(selector));\n }\n get controllerSelector() {\n return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n }\n get isDocumentScope() {\n return this.element === document.documentElement;\n }\n get documentScope() {\n return this.isDocumentScope\n ? this\n : new Scope(this.schema, document.documentElement, this.identifier, this.guide.logger);\n }\n}\n\nclass ScopeObserver {\n constructor(element, schema, delegate) {\n this.element = element;\n this.schema = schema;\n this.delegate = delegate;\n this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);\n this.scopesByIdentifierByElement = new WeakMap();\n this.scopeReferenceCounts = new WeakMap();\n }\n start() {\n this.valueListObserver.start();\n }\n stop() {\n this.valueListObserver.stop();\n }\n get controllerAttribute() {\n return this.schema.controllerAttribute;\n }\n parseValueForToken(token) {\n const { element, content: identifier } = token;\n return this.parseValueForElementAndIdentifier(element, identifier);\n }\n parseValueForElementAndIdentifier(element, identifier) {\n const scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n let scope = scopesByIdentifier.get(identifier);\n if (!scope) {\n scope = this.delegate.createScopeForElementAndIdentifier(element, identifier);\n scopesByIdentifier.set(identifier, scope);\n }\n return scope;\n }\n elementMatchedValue(element, value) {\n const referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n this.scopeReferenceCounts.set(value, referenceCount);\n if (referenceCount == 1) {\n this.delegate.scopeConnected(value);\n }\n }\n elementUnmatchedValue(element, value) {\n const referenceCount = this.scopeReferenceCounts.get(value);\n if (referenceCount) {\n this.scopeReferenceCounts.set(value, referenceCount - 1);\n if (referenceCount == 1) {\n this.delegate.scopeDisconnected(value);\n }\n }\n }\n fetchScopesByIdentifierForElement(element) {\n let scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n if (!scopesByIdentifier) {\n scopesByIdentifier = new Map();\n this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n }\n return scopesByIdentifier;\n }\n}\n\nclass Router {\n constructor(application) {\n this.application = application;\n this.scopeObserver = new ScopeObserver(this.element, this.schema, this);\n this.scopesByIdentifier = new Multimap();\n this.modulesByIdentifier = new Map();\n }\n get element() {\n return this.application.element;\n }\n get schema() {\n return this.application.schema;\n }\n get logger() {\n return this.application.logger;\n }\n get controllerAttribute() {\n return this.schema.controllerAttribute;\n }\n get modules() {\n return Array.from(this.modulesByIdentifier.values());\n }\n get contexts() {\n return this.modules.reduce((contexts, module) => contexts.concat(module.contexts), []);\n }\n start() {\n this.scopeObserver.start();\n }\n stop() {\n this.scopeObserver.stop();\n }\n loadDefinition(definition) {\n this.unloadIdentifier(definition.identifier);\n const module = new Module(this.application, definition);\n this.connectModule(module);\n const afterLoad = definition.controllerConstructor.afterLoad;\n if (afterLoad) {\n afterLoad.call(definition.controllerConstructor, definition.identifier, this.application);\n }\n }\n unloadIdentifier(identifier) {\n const module = this.modulesByIdentifier.get(identifier);\n if (module) {\n this.disconnectModule(module);\n }\n }\n getContextForElementAndIdentifier(element, identifier) {\n const module = this.modulesByIdentifier.get(identifier);\n if (module) {\n return module.contexts.find((context) => context.element == element);\n }\n }\n proposeToConnectScopeForElementAndIdentifier(element, identifier) {\n const scope = this.scopeObserver.parseValueForElementAndIdentifier(element, identifier);\n if (scope) {\n this.scopeObserver.elementMatchedValue(scope.element, scope);\n }\n else {\n console.error(`Couldn't find or create scope for identifier: \"${identifier}\" and element:`, element);\n }\n }\n handleError(error, message, detail) {\n this.application.handleError(error, message, detail);\n }\n createScopeForElementAndIdentifier(element, identifier) {\n return new Scope(this.schema, element, identifier, this.logger);\n }\n scopeConnected(scope) {\n this.scopesByIdentifier.add(scope.identifier, scope);\n const module = this.modulesByIdentifier.get(scope.identifier);\n if (module) {\n module.connectContextForScope(scope);\n }\n }\n scopeDisconnected(scope) {\n this.scopesByIdentifier.delete(scope.identifier, scope);\n const module = this.modulesByIdentifier.get(scope.identifier);\n if (module) {\n module.disconnectContextForScope(scope);\n }\n }\n connectModule(module) {\n this.modulesByIdentifier.set(module.identifier, module);\n const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach((scope) => module.connectContextForScope(scope));\n }\n disconnectModule(module) {\n this.modulesByIdentifier.delete(module.identifier);\n const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach((scope) => module.disconnectContextForScope(scope));\n }\n}\n\nconst defaultSchema = {\n controllerAttribute: \"data-controller\",\n actionAttribute: \"data-action\",\n targetAttribute: \"data-target\",\n targetAttributeForScope: (identifier) => `data-${identifier}-target`,\n outletAttributeForScope: (identifier, outlet) => `data-${identifier}-${outlet}-outlet`,\n keyMappings: Object.assign(Object.assign({ enter: \"Enter\", tab: \"Tab\", esc: \"Escape\", space: \" \", up: \"ArrowUp\", down: \"ArrowDown\", left: \"ArrowLeft\", right: \"ArrowRight\", home: \"Home\", end: \"End\", page_up: \"PageUp\", page_down: \"PageDown\" }, objectFromEntries(\"abcdefghijklmnopqrstuvwxyz\".split(\"\").map((c) => [c, c]))), objectFromEntries(\"0123456789\".split(\"\").map((n) => [n, n]))),\n};\nfunction objectFromEntries(array) {\n return array.reduce((memo, [k, v]) => (Object.assign(Object.assign({}, memo), { [k]: v })), {});\n}\n\nclass Application {\n constructor(element = document.documentElement, schema = defaultSchema) {\n this.logger = console;\n this.debug = false;\n this.logDebugActivity = (identifier, functionName, detail = {}) => {\n if (this.debug) {\n this.logFormattedMessage(identifier, functionName, detail);\n }\n };\n this.element = element;\n this.schema = schema;\n this.dispatcher = new Dispatcher(this);\n this.router = new Router(this);\n this.actionDescriptorFilters = Object.assign({}, defaultActionDescriptorFilters);\n }\n static start(element, schema) {\n const application = new this(element, schema);\n application.start();\n return application;\n }\n async start() {\n await domReady();\n this.logDebugActivity(\"application\", \"starting\");\n this.dispatcher.start();\n this.router.start();\n this.logDebugActivity(\"application\", \"start\");\n }\n stop() {\n this.logDebugActivity(\"application\", \"stopping\");\n this.dispatcher.stop();\n this.router.stop();\n this.logDebugActivity(\"application\", \"stop\");\n }\n register(identifier, controllerConstructor) {\n this.load({ identifier, controllerConstructor });\n }\n registerActionOption(name, filter) {\n this.actionDescriptorFilters[name] = filter;\n }\n load(head, ...rest) {\n const definitions = Array.isArray(head) ? head : [head, ...rest];\n definitions.forEach((definition) => {\n if (definition.controllerConstructor.shouldLoad) {\n this.router.loadDefinition(definition);\n }\n });\n }\n unload(head, ...rest) {\n const identifiers = Array.isArray(head) ? head : [head, ...rest];\n identifiers.forEach((identifier) => this.router.unloadIdentifier(identifier));\n }\n get controllers() {\n return this.router.contexts.map((context) => context.controller);\n }\n getControllerForElementAndIdentifier(element, identifier) {\n const context = this.router.getContextForElementAndIdentifier(element, identifier);\n return context ? context.controller : null;\n }\n handleError(error, message, detail) {\n var _a;\n this.logger.error(`%s\\n\\n%o\\n\\n%o`, message, error, detail);\n (_a = window.onerror) === null || _a === void 0 ? void 0 : _a.call(window, message, \"\", 0, 0, error);\n }\n logFormattedMessage(identifier, functionName, detail = {}) {\n detail = Object.assign({ application: this }, detail);\n this.logger.groupCollapsed(`${identifier} #${functionName}`);\n this.logger.log(\"details:\", Object.assign({}, detail));\n this.logger.groupEnd();\n }\n}\nfunction domReady() {\n return new Promise((resolve) => {\n if (document.readyState == \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", () => resolve());\n }\n else {\n resolve();\n }\n });\n}\n\nfunction ClassPropertiesBlessing(constructor) {\n const classes = readInheritableStaticArrayValues(constructor, \"classes\");\n return classes.reduce((properties, classDefinition) => {\n return Object.assign(properties, propertiesForClassDefinition(classDefinition));\n }, {});\n}\nfunction propertiesForClassDefinition(key) {\n return {\n [`${key}Class`]: {\n get() {\n const { classes } = this;\n if (classes.has(key)) {\n return classes.get(key);\n }\n else {\n const attribute = classes.getAttributeName(key);\n throw new Error(`Missing attribute \"${attribute}\"`);\n }\n },\n },\n [`${key}Classes`]: {\n get() {\n return this.classes.getAll(key);\n },\n },\n [`has${capitalize(key)}Class`]: {\n get() {\n return this.classes.has(key);\n },\n },\n };\n}\n\nfunction OutletPropertiesBlessing(constructor) {\n const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n return outlets.reduce((properties, outletDefinition) => {\n return Object.assign(properties, propertiesForOutletDefinition(outletDefinition));\n }, {});\n}\nfunction getOutletController(controller, element, identifier) {\n return controller.application.getControllerForElementAndIdentifier(element, identifier);\n}\nfunction getControllerAndEnsureConnectedScope(controller, element, outletName) {\n let outletController = getOutletController(controller, element, outletName);\n if (outletController)\n return outletController;\n controller.application.router.proposeToConnectScopeForElementAndIdentifier(element, outletName);\n outletController = getOutletController(controller, element, outletName);\n if (outletController)\n return outletController;\n}\nfunction propertiesForOutletDefinition(name) {\n const camelizedName = namespaceCamelize(name);\n return {\n [`${camelizedName}Outlet`]: {\n get() {\n const outletElement = this.outlets.find(name);\n const selector = this.outlets.getSelectorForOutletName(name);\n if (outletElement) {\n const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n if (outletController)\n return outletController;\n throw new Error(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`);\n }\n throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n },\n },\n [`${camelizedName}Outlets`]: {\n get() {\n const outlets = this.outlets.findAll(name);\n if (outlets.length > 0) {\n return outlets\n .map((outletElement) => {\n const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n if (outletController)\n return outletController;\n console.warn(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`, outletElement);\n })\n .filter((controller) => controller);\n }\n return [];\n },\n },\n [`${camelizedName}OutletElement`]: {\n get() {\n const outletElement = this.outlets.find(name);\n const selector = this.outlets.getSelectorForOutletName(name);\n if (outletElement) {\n return outletElement;\n }\n else {\n throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n }\n },\n },\n [`${camelizedName}OutletElements`]: {\n get() {\n return this.outlets.findAll(name);\n },\n },\n [`has${capitalize(camelizedName)}Outlet`]: {\n get() {\n return this.outlets.has(name);\n },\n },\n };\n}\n\nfunction TargetPropertiesBlessing(constructor) {\n const targets = readInheritableStaticArrayValues(constructor, \"targets\");\n return targets.reduce((properties, targetDefinition) => {\n return Object.assign(properties, propertiesForTargetDefinition(targetDefinition));\n }, {});\n}\nfunction propertiesForTargetDefinition(name) {\n return {\n [`${name}Target`]: {\n get() {\n const target = this.targets.find(name);\n if (target) {\n return target;\n }\n else {\n throw new Error(`Missing target element \"${name}\" for \"${this.identifier}\" controller`);\n }\n },\n },\n [`${name}Targets`]: {\n get() {\n return this.targets.findAll(name);\n },\n },\n [`has${capitalize(name)}Target`]: {\n get() {\n return this.targets.has(name);\n },\n },\n };\n}\n\nfunction ValuePropertiesBlessing(constructor) {\n const valueDefinitionPairs = readInheritableStaticObjectPairs(constructor, \"values\");\n const propertyDescriptorMap = {\n valueDescriptorMap: {\n get() {\n return valueDefinitionPairs.reduce((result, valueDefinitionPair) => {\n const valueDescriptor = parseValueDefinitionPair(valueDefinitionPair, this.identifier);\n const attributeName = this.data.getAttributeNameForKey(valueDescriptor.key);\n return Object.assign(result, { [attributeName]: valueDescriptor });\n }, {});\n },\n },\n };\n return valueDefinitionPairs.reduce((properties, valueDefinitionPair) => {\n return Object.assign(properties, propertiesForValueDefinitionPair(valueDefinitionPair));\n }, propertyDescriptorMap);\n}\nfunction propertiesForValueDefinitionPair(valueDefinitionPair, controller) {\n const definition = parseValueDefinitionPair(valueDefinitionPair, controller);\n const { key, name, reader: read, writer: write } = definition;\n return {\n [name]: {\n get() {\n const value = this.data.get(key);\n if (value !== null) {\n return read(value);\n }\n else {\n return definition.defaultValue;\n }\n },\n set(value) {\n if (value === undefined) {\n this.data.delete(key);\n }\n else {\n this.data.set(key, write(value));\n }\n },\n },\n [`has${capitalize(name)}`]: {\n get() {\n return this.data.has(key) || definition.hasCustomDefaultValue;\n },\n },\n };\n}\nfunction parseValueDefinitionPair([token, typeDefinition], controller) {\n return valueDescriptorForTokenAndTypeDefinition({\n controller,\n token,\n typeDefinition,\n });\n}\nfunction parseValueTypeConstant(constant) {\n switch (constant) {\n case Array:\n return \"array\";\n case Boolean:\n return \"boolean\";\n case Number:\n return \"number\";\n case Object:\n return \"object\";\n case String:\n return \"string\";\n }\n}\nfunction parseValueTypeDefault(defaultValue) {\n switch (typeof defaultValue) {\n case \"boolean\":\n return \"boolean\";\n case \"number\":\n return \"number\";\n case \"string\":\n return \"string\";\n }\n if (Array.isArray(defaultValue))\n return \"array\";\n if (Object.prototype.toString.call(defaultValue) === \"[object Object]\")\n return \"object\";\n}\nfunction parseValueTypeObject(payload) {\n const { controller, token, typeObject } = payload;\n const hasType = isSomething(typeObject.type);\n const hasDefault = isSomething(typeObject.default);\n const fullObject = hasType && hasDefault;\n const onlyType = hasType && !hasDefault;\n const onlyDefault = !hasType && hasDefault;\n const typeFromObject = parseValueTypeConstant(typeObject.type);\n const typeFromDefaultValue = parseValueTypeDefault(payload.typeObject.default);\n if (onlyType)\n return typeFromObject;\n if (onlyDefault)\n return typeFromDefaultValue;\n if (typeFromObject !== typeFromDefaultValue) {\n const propertyPath = controller ? `${controller}.${token}` : token;\n throw new Error(`The specified default value for the Stimulus Value \"${propertyPath}\" must match the defined type \"${typeFromObject}\". The provided default value of \"${typeObject.default}\" is of type \"${typeFromDefaultValue}\".`);\n }\n if (fullObject)\n return typeFromObject;\n}\nfunction parseValueTypeDefinition(payload) {\n const { controller, token, typeDefinition } = payload;\n const typeObject = { controller, token, typeObject: typeDefinition };\n const typeFromObject = parseValueTypeObject(typeObject);\n const typeFromDefaultValue = parseValueTypeDefault(typeDefinition);\n const typeFromConstant = parseValueTypeConstant(typeDefinition);\n const type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n if (type)\n return type;\n const propertyPath = controller ? `${controller}.${typeDefinition}` : token;\n throw new Error(`Unknown value type \"${propertyPath}\" for \"${token}\" value`);\n}\nfunction defaultValueForDefinition(typeDefinition) {\n const constant = parseValueTypeConstant(typeDefinition);\n if (constant)\n return defaultValuesByType[constant];\n const hasDefault = hasProperty(typeDefinition, \"default\");\n const hasType = hasProperty(typeDefinition, \"type\");\n const typeObject = typeDefinition;\n if (hasDefault)\n return typeObject.default;\n if (hasType) {\n const { type } = typeObject;\n const constantFromType = parseValueTypeConstant(type);\n if (constantFromType)\n return defaultValuesByType[constantFromType];\n }\n return typeDefinition;\n}\nfunction valueDescriptorForTokenAndTypeDefinition(payload) {\n const { token, typeDefinition } = payload;\n const key = `${dasherize(token)}-value`;\n const type = parseValueTypeDefinition(payload);\n return {\n type,\n key,\n name: camelize(key),\n get defaultValue() {\n return defaultValueForDefinition(typeDefinition);\n },\n get hasCustomDefaultValue() {\n return parseValueTypeDefault(typeDefinition) !== undefined;\n },\n reader: readers[type],\n writer: writers[type] || writers.default,\n };\n}\nconst defaultValuesByType = {\n get array() {\n return [];\n },\n boolean: false,\n number: 0,\n get object() {\n return {};\n },\n string: \"\",\n};\nconst readers = {\n array(value) {\n const array = JSON.parse(value);\n if (!Array.isArray(array)) {\n throw new TypeError(`expected value of type \"array\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(array)}\"`);\n }\n return array;\n },\n boolean(value) {\n return !(value == \"0\" || String(value).toLowerCase() == \"false\");\n },\n number(value) {\n return Number(value.replace(/_/g, \"\"));\n },\n object(value) {\n const object = JSON.parse(value);\n if (object === null || typeof object != \"object\" || Array.isArray(object)) {\n throw new TypeError(`expected value of type \"object\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(object)}\"`);\n }\n return object;\n },\n string(value) {\n return value;\n },\n};\nconst writers = {\n default: writeString,\n array: writeJSON,\n object: writeJSON,\n};\nfunction writeJSON(value) {\n return JSON.stringify(value);\n}\nfunction writeString(value) {\n return `${value}`;\n}\n\nclass Controller {\n constructor(context) {\n this.context = context;\n }\n static get shouldLoad() {\n return true;\n }\n static afterLoad(_identifier, _application) {\n return;\n }\n get application() {\n return this.context.application;\n }\n get scope() {\n return this.context.scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get targets() {\n return this.scope.targets;\n }\n get outlets() {\n return this.scope.outlets;\n }\n get classes() {\n return this.scope.classes;\n }\n get data() {\n return this.scope.data;\n }\n initialize() {\n }\n connect() {\n }\n disconnect() {\n }\n dispatch(eventName, { target = this.element, detail = {}, prefix = this.identifier, bubbles = true, cancelable = true, } = {}) {\n const type = prefix ? `${prefix}:${eventName}` : eventName;\n const event = new CustomEvent(type, { detail, bubbles, cancelable });\n target.dispatchEvent(event);\n return event;\n }\n}\nController.blessings = [\n ClassPropertiesBlessing,\n TargetPropertiesBlessing,\n ValuePropertiesBlessing,\n OutletPropertiesBlessing,\n];\nController.targets = [];\nController.outlets = [];\nController.values = {};\n\nexport { Application, AttributeObserver, Context, Controller, ElementObserver, IndexedMultimap, Multimap, SelectorObserver, StringMapObserver, TokenListObserver, ValueListObserver, add, defaultSchema, del, fetch, prune };\n", "/* global Stimulus */\nimport { Controller } from \"@hotwired/stimulus\";\nimport get from \"lodash/get\";\n\nif (window.Stimulus){\n //? How do you activate global debugging in Stimulus?\n Stimulus.debug = false;\n}\n\nexport default class ApplicationController extends Controller {\n\n debug = false;\n\n log_function(function_name, more_info_1 = \"\", more_info_2 = \"\"){\n const lightColorMap = {\n connect: \"green\",\n disconnect: \"red\",\n helper: \"darkCyan\",\n open: \"blue\",\n close: \"orange\",\n reset: \"darkred\",\n default: \"darkCyan\",\n };\n\n const darkColorMap = {\n connect: \"limegreen\",\n disconnect: \"red\",\n helper: \"lightblue\",\n open: \"aqua\",\n close: \"orange\",\n reset: \"darkred\",\n default: \"lightblue\",\n };\n\n const darkMode = window.matchMedia && window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\n const colorMap = darkMode ? darkColorMap : lightColorMap;\n const color = get(colorMap, function_name, colorMap.default);\n let identifier = \"identifier\";\n\n try {\n identifier = this.identifier;\n } catch (error) {\n console.error(error);\n }\n\n if(this.debug){\n console.log(`%c ${identifier}#${function_name}()`, `color: ${color};`, more_info_1, more_info_2);\n }\n\n\n }\n\n\n log_error_function(function_name, more_info_1 = \"\", more_info_2 = \"\") {\n let identifier = \"identifier\";\n\n try {\n identifier = this.identifier;\n } catch (error) {\n console.error(error);\n }\n\n console.error(`${identifier}#${function_name}()`, more_info_1, more_info_2);\n }\n\n\n}\n", "/*\n * stimulus-use 0.52.1\n */\nimport { Controller } from \"@hotwired/stimulus\";\n\nconst method = (controller, methodName) => {\n const method = controller[methodName];\n if (typeof method == \"function\") {\n return method;\n } else {\n return (...args) => {};\n }\n};\n\nconst composeEventName = (name, controller, eventPrefix) => {\n let composedName = name;\n if (eventPrefix === true) {\n composedName = `${controller.identifier}:${name}`;\n } else if (typeof eventPrefix === \"string\") {\n composedName = `${eventPrefix}:${name}`;\n }\n return composedName;\n};\n\nconst extendedEvent = (type, event, detail) => {\n const {bubbles: bubbles, cancelable: cancelable, composed: composed} = event || {\n bubbles: true,\n cancelable: true,\n composed: true\n };\n if (event) {\n Object.assign(detail, {\n originalEvent: event\n });\n }\n const customEvent = new CustomEvent(type, {\n bubbles: bubbles,\n cancelable: cancelable,\n composed: composed,\n detail: detail\n });\n return customEvent;\n};\n\nfunction isElementInViewport(el) {\n const rect = el.getBoundingClientRect();\n const windowHeight = window.innerHeight || document.documentElement.clientHeight;\n const windowWidth = window.innerWidth || document.documentElement.clientWidth;\n const vertInView = rect.top <= windowHeight && rect.top + rect.height > 0;\n const horInView = rect.left <= windowWidth && rect.left + rect.width > 0;\n return vertInView && horInView;\n}\n\nfunction camelize(value) {\n return value.replace(/(?:[_-])([a-z0-9])/g, ((_, char) => char.toUpperCase()));\n}\n\n/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise */ function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nconst defaultOptions$8 = {\n debug: false,\n logger: console,\n dispatchEvent: true,\n eventPrefix: true\n};\n\nclass StimulusUse {\n constructor(controller, options = {}) {\n var _a, _b, _c;\n this.log = (functionName, args) => {\n if (!this.debug) return;\n this.logger.groupCollapsed(`%c${this.controller.identifier} %c#${functionName}`, \"color: #3B82F6\", \"color: unset\");\n this.logger.log(Object.assign({\n controllerId: this.controllerId\n }, args));\n this.logger.groupEnd();\n };\n this.warn = message => {\n this.logger.warn(`%c${this.controller.identifier} %c${message}`, \"color: #3B82F6; font-weight: bold\", \"color: unset\");\n };\n this.dispatch = (eventName, details = {}) => {\n if (this.dispatchEvent) {\n const {event: event} = details, eventDetails = __rest(details, [ \"event\" ]);\n const customEvent = this.extendedEvent(eventName, event || null, eventDetails);\n this.targetElement.dispatchEvent(customEvent);\n this.log(\"dispatchEvent\", Object.assign({\n eventName: customEvent.type\n }, eventDetails));\n }\n };\n this.call = (methodName, args = {}) => {\n const method = this.controller[methodName];\n if (typeof method == \"function\") {\n return method.call(this.controller, args);\n }\n };\n this.extendedEvent = (name, event, detail) => {\n const {bubbles: bubbles, cancelable: cancelable, composed: composed} = event || {\n bubbles: true,\n cancelable: true,\n composed: true\n };\n if (event) {\n Object.assign(detail, {\n originalEvent: event\n });\n }\n const customEvent = new CustomEvent(this.composeEventName(name), {\n bubbles: bubbles,\n cancelable: cancelable,\n composed: composed,\n detail: detail\n });\n return customEvent;\n };\n this.composeEventName = name => {\n let composedName = name;\n if (this.eventPrefix === true) {\n composedName = `${this.controller.identifier}:${name}`;\n } else if (typeof this.eventPrefix === \"string\") {\n composedName = `${this.eventPrefix}:${name}`;\n }\n return composedName;\n };\n this.debug = (_b = (_a = options === null || options === void 0 ? void 0 : options.debug) !== null && _a !== void 0 ? _a : controller.application.stimulusUseDebug) !== null && _b !== void 0 ? _b : defaultOptions$8.debug;\n this.logger = (_c = options === null || options === void 0 ? void 0 : options.logger) !== null && _c !== void 0 ? _c : defaultOptions$8.logger;\n this.controller = controller;\n this.controllerId = controller.element.id || controller.element.dataset.id;\n this.targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n const {dispatchEvent: dispatchEvent, eventPrefix: eventPrefix} = Object.assign({}, defaultOptions$8, options);\n Object.assign(this, {\n dispatchEvent: dispatchEvent,\n eventPrefix: eventPrefix\n });\n this.controllerInitialize = controller.initialize.bind(controller);\n this.controllerConnect = controller.connect.bind(controller);\n this.controllerDisconnect = controller.disconnect.bind(controller);\n }\n}\n\nconst defaultOptions$7 = {\n eventPrefix: true,\n bubbles: true,\n cancelable: true\n};\n\nclass UseDispatch extends StimulusUse {\n constructor(controller, options = {}) {\n var _a, _b, _c, _d;\n super(controller, options);\n this.dispatch = (eventName, detail = {}) => {\n const {controller: controller, targetElement: targetElement, eventPrefix: eventPrefix, bubbles: bubbles, cancelable: cancelable, log: log, warn: warn} = this;\n Object.assign(detail, {\n controller: controller\n });\n const eventNameWithPrefix = composeEventName(eventName, this.controller, eventPrefix);\n const event = new CustomEvent(eventNameWithPrefix, {\n detail: detail,\n bubbles: bubbles,\n cancelable: cancelable\n });\n targetElement.dispatchEvent(event);\n warn(\"`useDispatch()` is deprecated. Please use the built-in `this.dispatch()` function from Stimulus. You can find more information on how to upgrade at: https://stimulus-use.github.io/stimulus-use/#/use-dispatch\");\n log(\"dispatch\", {\n eventName: eventNameWithPrefix,\n detail: detail,\n bubbles: bubbles,\n cancelable: cancelable\n });\n return event;\n };\n this.targetElement = (_a = options.element) !== null && _a !== void 0 ? _a : controller.element;\n this.eventPrefix = (_b = options.eventPrefix) !== null && _b !== void 0 ? _b : defaultOptions$7.eventPrefix;\n this.bubbles = (_c = options.bubbles) !== null && _c !== void 0 ? _c : defaultOptions$7.bubbles;\n this.cancelable = (_d = options.cancelable) !== null && _d !== void 0 ? _d : defaultOptions$7.cancelable;\n this.enhanceController();\n }\n enhanceController() {\n Object.assign(this.controller, {\n dispatch: this.dispatch\n });\n }\n}\n\nconst useDispatch = (controller, options = {}) => new UseDispatch(controller, options);\n\nconst defaultOptions$6 = {\n overwriteDispatch: true\n};\n\nconst useApplication = (controller, options = {}) => {\n const {overwriteDispatch: overwriteDispatch} = Object.assign({}, defaultOptions$6, options);\n Object.defineProperty(controller, \"isPreview\", {\n get() {\n return document.documentElement.hasAttribute(\"data-turbolinks-preview\") || document.documentElement.hasAttribute(\"data-turbo-preview\");\n }\n });\n Object.defineProperty(controller, \"isConnected\", {\n get() {\n return !!Array.from(this.context.module.connectedContexts).find((c => c === this.context));\n }\n });\n Object.defineProperty(controller, \"csrfToken\", {\n get() {\n return this.metaValue(\"csrf-token\");\n }\n });\n if (overwriteDispatch) {\n useDispatch(controller, options);\n }\n Object.assign(controller, {\n metaValue(name) {\n const element = document.head.querySelector(`meta[name=\"${name}\"]`);\n return element && element.getAttribute(\"content\");\n }\n });\n};\n\nclass ApplicationController extends Controller {\n constructor(context) {\n super(context);\n this.isPreview = false;\n this.isConnected = false;\n this.csrfToken = \"\";\n useApplication(this, this.options);\n }\n}\n\nconst defaultOptions$5 = {\n events: [ \"click\", \"touchend\" ],\n onlyVisible: true,\n dispatchEvent: true,\n eventPrefix: true\n};\n\nconst useClickOutside = (composableController, options = {}) => {\n const controller = composableController;\n const {onlyVisible: onlyVisible, dispatchEvent: dispatchEvent, events: events, eventPrefix: eventPrefix} = Object.assign({}, defaultOptions$5, options);\n const onEvent = event => {\n const targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n if (targetElement.contains(event.target) || !isElementInViewport(targetElement) && onlyVisible) {\n return;\n }\n if (controller.clickOutside) {\n controller.clickOutside(event);\n }\n if (dispatchEvent) {\n const eventName = composeEventName(\"click:outside\", controller, eventPrefix);\n const clickOutsideEvent = extendedEvent(eventName, event, {\n controller: controller\n });\n targetElement.dispatchEvent(clickOutsideEvent);\n }\n };\n const observe = () => {\n events === null || events === void 0 ? void 0 : events.forEach((event => {\n window.addEventListener(event, onEvent, true);\n }));\n };\n const unobserve = () => {\n events === null || events === void 0 ? void 0 : events.forEach((event => {\n window.removeEventListener(event, onEvent, true);\n }));\n };\n const controllerDisconnect = controller.disconnect.bind(controller);\n Object.assign(controller, {\n disconnect() {\n unobserve();\n controllerDisconnect();\n }\n });\n observe();\n return [ observe, unobserve ];\n};\n\nclass ClickOutsideComposableController extends Controller {}\n\nclass ClickOutsideController extends ClickOutsideComposableController {\n constructor(context) {\n super(context);\n requestAnimationFrame((() => {\n const [observe, unobserve] = useClickOutside(this, this.options);\n Object.assign(this, {\n observe: observe,\n unobserve: unobserve\n });\n }));\n }\n}\n\nclass DebounceController extends Controller {}\n\nDebounceController.debounces = [];\n\nconst defaultWait$1 = 200;\n\nconst debounce = (fn, wait = defaultWait$1) => {\n let timeoutId = null;\n return function() {\n const args = Array.from(arguments);\n const context = this;\n const params = args.map((arg => arg.params));\n const callback = () => {\n args.forEach(((arg, index) => arg.params = params[index]));\n return fn.apply(context, args);\n };\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n timeoutId = setTimeout(callback, wait);\n };\n};\n\nconst useDebounce = (composableController, options) => {\n const controller = composableController;\n const constructor = controller.constructor;\n constructor.debounces.forEach((func => {\n if (typeof func === \"string\") {\n controller[func] = debounce(controller[func], options === null || options === void 0 ? void 0 : options.wait);\n }\n if (typeof func === \"object\") {\n const {name: name, wait: wait} = func;\n if (!name) return;\n controller[name] = debounce(controller[name], wait || (options === null || options === void 0 ? void 0 : options.wait));\n }\n }));\n};\n\nclass UseHover extends StimulusUse {\n constructor(controller, options = {}) {\n super(controller, options);\n this.observe = () => {\n this.targetElement.addEventListener(\"mouseenter\", this.onEnter);\n this.targetElement.addEventListener(\"mouseleave\", this.onLeave);\n };\n this.unobserve = () => {\n this.targetElement.removeEventListener(\"mouseenter\", this.onEnter);\n this.targetElement.removeEventListener(\"mouseleave\", this.onLeave);\n };\n this.onEnter = event => {\n this.call(\"mouseEnter\", event);\n this.log(\"mouseEnter\", {\n hover: true\n });\n this.dispatch(\"mouseEnter\", {\n hover: false\n });\n };\n this.onLeave = event => {\n this.call(\"mouseLeave\", event);\n this.log(\"mouseLeave\", {\n hover: false\n });\n this.dispatch(\"mouseLeave\", {\n hover: false\n });\n };\n this.controller = controller;\n this.enhanceController();\n this.observe();\n }\n enhanceController() {\n const controllerDisconnect = this.controller.disconnect.bind(this.controller);\n const disconnect = () => {\n this.unobserve();\n controllerDisconnect();\n };\n Object.assign(this.controller, {\n disconnect: disconnect\n });\n }\n}\n\nconst useHover = (composableController, options = {}) => {\n const controller = composableController;\n const observer = new UseHover(controller, options);\n return [ observer.observe, observer.unobserve ];\n};\n\nclass HoverComposableController extends Controller {}\n\nclass HoverController extends HoverComposableController {\n constructor(context) {\n super(context);\n requestAnimationFrame((() => {\n const [observe, unobserve] = useHover(this, this.options);\n Object.assign(this, {\n observe: observe,\n unobserve: unobserve\n });\n }));\n }\n}\n\nconst defaultEvents = [ \"mousemove\", \"mousedown\", \"resize\", \"keydown\", \"touchstart\", \"wheel\" ];\n\nconst oneMinute = 6e4;\n\nconst defaultOptions$4 = {\n ms: oneMinute,\n initialState: false,\n events: defaultEvents,\n dispatchEvent: true,\n eventPrefix: true\n};\n\nconst useIdle = (composableController, options = {}) => {\n const controller = composableController;\n const {ms: ms, initialState: initialState, events: events, dispatchEvent: dispatchEvent, eventPrefix: eventPrefix} = Object.assign({}, defaultOptions$4, options);\n let isIdle = initialState;\n let timeout = setTimeout((() => {\n isIdle = true;\n dispatchAway();\n }), ms);\n const dispatchAway = event => {\n const eventName = composeEventName(\"away\", controller, eventPrefix);\n controller.isIdle = true;\n method(controller, \"away\").call(controller, event);\n if (dispatchEvent) {\n const clickOutsideEvent = extendedEvent(eventName, event || null, {\n controller: controller\n });\n controller.element.dispatchEvent(clickOutsideEvent);\n }\n };\n const dispatchBack = event => {\n const eventName = composeEventName(\"back\", controller, eventPrefix);\n controller.isIdle = false;\n method(controller, \"back\").call(controller, event);\n if (dispatchEvent) {\n const clickOutsideEvent = extendedEvent(eventName, event || null, {\n controller: controller\n });\n controller.element.dispatchEvent(clickOutsideEvent);\n }\n };\n const onEvent = event => {\n if (isIdle) dispatchBack(event);\n isIdle = false;\n clearTimeout(timeout);\n timeout = setTimeout((() => {\n isIdle = true;\n dispatchAway(event);\n }), ms);\n };\n const onVisibility = event => {\n if (!document.hidden) onEvent(event);\n };\n if (isIdle) {\n dispatchAway();\n } else {\n dispatchBack();\n }\n const controllerDisconnect = controller.disconnect.bind(controller);\n const observe = () => {\n events.forEach((event => {\n window.addEventListener(event, onEvent);\n }));\n document.addEventListener(\"visibilitychange\", onVisibility);\n };\n const unobserve = () => {\n clearTimeout(timeout);\n events.forEach((event => {\n window.removeEventListener(event, onEvent);\n }));\n document.removeEventListener(\"visibilitychange\", onVisibility);\n };\n Object.assign(controller, {\n disconnect() {\n unobserve();\n controllerDisconnect();\n }\n });\n observe();\n return [ observe, unobserve ];\n};\n\nclass IdleComposableController extends Controller {\n constructor() {\n super(...arguments);\n this.isIdle = false;\n }\n}\n\nclass IdleController extends IdleComposableController {\n constructor(context) {\n super(context);\n requestAnimationFrame((() => {\n const [observe, unobserve] = useIdle(this, this.options);\n Object.assign(this, {\n observe: observe,\n unobserve: unobserve\n });\n }));\n }\n}\n\nconst defaultOptions$3 = {\n dispatchEvent: true,\n eventPrefix: true,\n visibleAttribute: \"isVisible\"\n};\n\nconst useIntersection = (composableController, options = {}) => {\n const controller = composableController;\n const {dispatchEvent: dispatchEvent, eventPrefix: eventPrefix, visibleAttribute: visibleAttribute} = Object.assign({}, defaultOptions$3, options);\n const targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n if (!controller.intersectionElements) controller.intersectionElements = [];\n controller.intersectionElements.push(targetElement);\n const callback = entries => {\n const [entry] = entries;\n if (entry.isIntersecting) {\n dispatchAppear(entry);\n } else if (targetElement.hasAttribute(visibleAttribute)) {\n dispatchDisappear(entry);\n }\n };\n const observer = new IntersectionObserver(callback, options);\n const dispatchAppear = entry => {\n targetElement.setAttribute(visibleAttribute, \"true\");\n method(controller, \"appear\").call(controller, entry, observer);\n if (dispatchEvent) {\n const eventName = composeEventName(\"appear\", controller, eventPrefix);\n const appearEvent = extendedEvent(eventName, null, {\n controller: controller,\n entry: entry,\n observer: observer\n });\n targetElement.dispatchEvent(appearEvent);\n }\n };\n const dispatchDisappear = entry => {\n targetElement.removeAttribute(visibleAttribute);\n method(controller, \"disappear\").call(controller, entry, observer);\n if (dispatchEvent) {\n const eventName = composeEventName(\"disappear\", controller, eventPrefix);\n const disappearEvent = extendedEvent(eventName, null, {\n controller: controller,\n entry: entry,\n observer: observer\n });\n targetElement.dispatchEvent(disappearEvent);\n }\n };\n const controllerDisconnect = controller.disconnect.bind(controller);\n const disconnect = () => {\n unobserve();\n controllerDisconnect();\n };\n const observe = () => {\n observer.observe(targetElement);\n };\n const unobserve = () => {\n observer.unobserve(targetElement);\n };\n const noneVisible = () => controller.intersectionElements.filter((element => element.hasAttribute(visibleAttribute))).length === 0;\n const oneVisible = () => controller.intersectionElements.filter((element => element.hasAttribute(visibleAttribute))).length === 1;\n const atLeastOneVisible = () => controller.intersectionElements.some((element => element.hasAttribute(visibleAttribute)));\n const allVisible = () => controller.intersectionElements.every((element => element.hasAttribute(visibleAttribute)));\n const isVisible = allVisible;\n Object.assign(controller, {\n isVisible: isVisible,\n noneVisible: noneVisible,\n oneVisible: oneVisible,\n atLeastOneVisible: atLeastOneVisible,\n allVisible: allVisible,\n disconnect: disconnect\n });\n observe();\n return [ observe, unobserve ];\n};\n\nclass IntersectionComposableController extends Controller {}\n\nclass IntersectionController extends IntersectionComposableController {\n constructor(context) {\n super(context);\n requestAnimationFrame((() => {\n const [observe, unobserve] = useIntersection(this, this.options);\n Object.assign(this, {\n observe: observe,\n unobserve: unobserve\n });\n }));\n }\n}\n\nconst useLazyLoad = (controller, options) => {\n const callback = entries => {\n const [entry] = entries;\n if (entry.isIntersecting && !controller.isLoaded) {\n handleAppear();\n }\n };\n const handleAppear = entry => {\n const src = controller.data.get(\"src\");\n if (!src) return;\n const imageElement = controller.element;\n controller.isLoading = true;\n method(controller, \"loading\").call(controller, src);\n imageElement.onload = () => {\n handleLoaded(src);\n };\n imageElement.src = src;\n };\n const handleLoaded = src => {\n controller.isLoading = false;\n controller.isLoaded = true;\n method(controller, \"loaded\").call(controller, src);\n };\n const controllerDisconnect = controller.disconnect.bind(controller);\n const observer = new IntersectionObserver(callback, options);\n const observe = () => {\n observer.observe(controller.element);\n };\n const unobserve = () => {\n observer.unobserve(controller.element);\n };\n Object.assign(controller, {\n isVisible: false,\n disconnect() {\n unobserve();\n controllerDisconnect();\n }\n });\n observe();\n return [ observe, unobserve ];\n};\n\nclass LazyLoadComposableController extends Controller {\n constructor() {\n super(...arguments);\n this.isLoading = false;\n this.isLoaded = false;\n }\n}\n\nclass LazyLoadController extends LazyLoadComposableController {\n constructor(context) {\n super(context);\n this.options = {\n rootMargin: \"10%\"\n };\n requestAnimationFrame((() => {\n const [observe, unobserve] = useLazyLoad(this, this.options);\n Object.assign(this, {\n observe: observe,\n unobserve: unobserve\n });\n }));\n }\n}\n\nconst defaultOptions$2 = {\n mediaQueries: {},\n dispatchEvent: true,\n eventPrefix: true,\n debug: false\n};\n\nclass UseMatchMedia extends StimulusUse {\n constructor(controller, options = {}) {\n var _a, _b, _c, _d;\n super(controller, options);\n this.matches = [];\n this.callback = event => {\n const name = Object.keys(this.mediaQueries).find((name => this.mediaQueries[name] === event.media));\n if (!name) return;\n const {media: media, matches: matches} = event;\n this.changed({\n name: name,\n media: media,\n matches: matches,\n event: event\n });\n };\n this.changed = payload => {\n const {name: name} = payload;\n if (payload.event) {\n this.call(camelize(`${name}_changed`), payload);\n this.dispatch(`${name}:changed`, payload);\n this.log(`media query \"${name}\" changed`, payload);\n }\n if (payload.matches) {\n this.call(camelize(`is_${name}`), payload);\n this.dispatch(`is:${name}`, payload);\n } else {\n this.call(camelize(`not_${name}`), payload);\n this.dispatch(`not:${name}`, payload);\n }\n };\n this.observe = () => {\n Object.keys(this.mediaQueries).forEach((name => {\n const media = this.mediaQueries[name];\n const match = window.matchMedia(media);\n match.addListener(this.callback);\n this.matches.push(match);\n this.changed({\n name: name,\n media: media,\n matches: match.matches\n });\n }));\n };\n this.unobserve = () => {\n this.matches.forEach((match => match.removeListener(this.callback)));\n };\n this.controller = controller;\n this.mediaQueries = (_a = options.mediaQueries) !== null && _a !== void 0 ? _a : defaultOptions$2.mediaQueries;\n this.dispatchEvent = (_b = options.dispatchEvent) !== null && _b !== void 0 ? _b : defaultOptions$2.dispatchEvent;\n this.eventPrefix = (_c = options.eventPrefix) !== null && _c !== void 0 ? _c : defaultOptions$2.eventPrefix;\n this.debug = (_d = options.debug) !== null && _d !== void 0 ? _d : defaultOptions$2.debug;\n if (!window.matchMedia) {\n console.error(\"window.matchMedia() is not available\");\n return;\n }\n this.enhanceController();\n this.observe();\n }\n enhanceController() {\n const controllerDisconnect = this.controller.disconnect.bind(this.controller);\n const disconnect = () => {\n this.unobserve();\n controllerDisconnect();\n };\n Object.assign(this.controller, {\n disconnect: disconnect\n });\n }\n}\n\nconst useMatchMedia = (controller, options = {}) => {\n const observer = new UseMatchMedia(controller, options);\n return [ observer.observe, observer.unobserve ];\n};\n\nconst memoize = (controller, name, value) => {\n Object.defineProperty(controller, name, {\n value: value\n });\n return value;\n};\n\nconst useMemo = controller => {\n var _a;\n (_a = controller.constructor.memos) === null || _a === void 0 ? void 0 : _a.forEach((getter => {\n memoize(controller, getter, controller[getter]);\n }));\n};\n\nconst defineMetaGetter = (controller, metaName, suffix) => {\n const getterName = suffix ? `${camelize(metaName)}Meta` : camelize(metaName);\n Object.defineProperty(controller, getterName, {\n get() {\n return typeCast(metaValue(metaName));\n }\n });\n};\n\nfunction metaValue(name) {\n const element = document.head.querySelector(`meta[name=\"${name}\"]`);\n return element && element.getAttribute(\"content\");\n}\n\nfunction typeCast(value) {\n try {\n return JSON.parse(value);\n } catch (o_O) {\n return value;\n }\n}\n\nconst useMeta = (controller, options = {\n suffix: true\n}) => {\n const metaNames = controller.constructor.metaNames;\n const suffix = options.suffix;\n metaNames === null || metaNames === void 0 ? void 0 : metaNames.forEach((metaName => {\n defineMetaGetter(controller, metaName, suffix);\n }));\n Object.defineProperty(controller, \"metas\", {\n get() {\n const result = {};\n metaNames === null || metaNames === void 0 ? void 0 : metaNames.forEach((metaName => {\n const value = typeCast(metaValue(metaName));\n if (value !== undefined && value !== null) {\n result[camelize(metaName)] = value;\n }\n }));\n return result;\n }\n });\n};\n\nclass UseMutation extends StimulusUse {\n constructor(controller, options = {}) {\n super(controller, options);\n this.observe = () => {\n try {\n this.observer.observe(this.targetElement, this.options);\n } catch (error) {\n this.controller.application.handleError(error, \"At a minimum, one of childList, attributes, and/or characterData must be true\", {});\n }\n };\n this.unobserve = () => {\n this.observer.disconnect();\n };\n this.mutation = entries => {\n this.call(\"mutate\", entries);\n this.log(\"mutate\", {\n entries: entries\n });\n this.dispatch(\"mutate\", {\n entries: entries\n });\n };\n this.targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n this.controller = controller;\n this.options = options;\n this.observer = new MutationObserver(this.mutation);\n this.enhanceController();\n this.observe();\n }\n enhanceController() {\n const controllerDisconnect = this.controller.disconnect.bind(this.controller);\n const disconnect = () => {\n this.unobserve();\n controllerDisconnect();\n };\n Object.assign(this.controller, {\n disconnect: disconnect\n });\n }\n}\n\nconst useMutation = (controller, options = {}) => {\n const observer = new UseMutation(controller, options);\n return [ observer.observe, observer.unobserve ];\n};\n\nclass MutationComposableController extends Controller {}\n\nclass MutationController extends MutationComposableController {\n constructor(context) {\n super(context);\n requestAnimationFrame((() => {\n const [observe, unobserve] = useMutation(this, this.options);\n Object.assign(this, {\n observe: observe,\n unobserve: unobserve\n });\n }));\n }\n}\n\nconst defaultOptions$1 = {\n dispatchEvent: true,\n eventPrefix: true\n};\n\nconst useResize = (composableController, options = {}) => {\n const controller = composableController;\n const {dispatchEvent: dispatchEvent, eventPrefix: eventPrefix} = Object.assign({}, defaultOptions$1, options);\n const targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n const callback = entries => {\n const [entry] = entries;\n method(controller, \"resize\").call(controller, entry.contentRect);\n if (dispatchEvent) {\n const eventName = composeEventName(\"resize\", controller, eventPrefix);\n const appearEvent = extendedEvent(eventName, null, {\n controller: controller,\n entry: entry\n });\n targetElement.dispatchEvent(appearEvent);\n }\n };\n const controllerDisconnect = controller.disconnect.bind(controller);\n const observer = new ResizeObserver(callback);\n const observe = () => {\n observer.observe(targetElement);\n };\n const unobserve = () => {\n observer.unobserve(targetElement);\n };\n Object.assign(controller, {\n disconnect() {\n unobserve();\n controllerDisconnect();\n }\n });\n observe();\n return [ observe, unobserve ];\n};\n\nclass ResizeComposableController extends Controller {}\n\nclass ResizeController extends ResizeComposableController {\n constructor(context) {\n super(context);\n requestAnimationFrame((() => {\n const [observe, unobserve] = useResize(this, this.options);\n Object.assign(this, {\n observe: observe,\n unobserve: unobserve\n });\n }));\n }\n}\n\nclass UseTargetMutation extends StimulusUse {\n constructor(controller, options = {}) {\n super(controller, options);\n this.observe = () => {\n this.observer.observe(this.targetElement, {\n subtree: true,\n characterData: true,\n childList: true,\n attributes: true,\n attributeOldValue: true,\n attributeFilter: [ this.targetSelector, this.scopedTargetSelector ]\n });\n };\n this.unobserve = () => {\n this.observer.disconnect();\n };\n this.mutation = entries => {\n for (const mutation of entries) {\n switch (mutation.type) {\n case \"attributes\":\n let newValue = mutation.target.getAttribute(mutation.attributeName);\n let oldValue = mutation.oldValue;\n if (mutation.attributeName === this.targetSelector || mutation.attributeName === this.scopedTargetSelector) {\n let oldTargets = this.targetsUsedByThisController(oldValue);\n let newTargets = this.targetsUsedByThisController(newValue);\n let removedTargets = oldTargets.filter((target => !newTargets.includes(target)));\n let addedTargets = newTargets.filter((target => !oldTargets.includes(target)));\n removedTargets.forEach((target => this.targetRemoved(this.stripIdentifierPrefix(target), mutation.target, \"attributeChange\")));\n addedTargets.forEach((target => this.targetAdded(this.stripIdentifierPrefix(target), mutation.target, \"attributeChange\")));\n }\n break;\n\n case \"characterData\":\n let nodule = this.findTargetInAncestry(mutation.target);\n if (nodule == null) {\n return;\n } else {\n let supportedTargets = this.targetsUsedByThisControllerFromNode(nodule);\n supportedTargets.forEach((target => {\n this.targetChanged(this.stripIdentifierPrefix(target), nodule, \"domMutation\");\n }));\n }\n break;\n\n case \"childList\":\n let {addedNodes: addedNodes, removedNodes: removedNodes} = mutation;\n addedNodes.forEach((node => this.processNodeDOMMutation(node, this.targetAdded)));\n removedNodes.forEach((node => this.processNodeDOMMutation(node, this.targetRemoved)));\n break;\n }\n }\n };\n this.controller = controller;\n this.options = options;\n this.targetElement = controller.element;\n this.identifier = controller.scope.identifier;\n this.identifierPrefix = `${this.identifier}.`;\n this.targetSelector = controller.scope.schema.targetAttribute;\n this.scopedTargetSelector = `data-${this.identifier}-target`;\n this.targets = options.targets || controller.constructor.targets;\n this.prefixedTargets = this.targets.map((target => `${this.identifierPrefix}${target}`));\n this.observer = new MutationObserver(this.mutation);\n this.enhanceController();\n this.observe();\n }\n processNodeDOMMutation(node, initialChangeModeAssumption) {\n let nodule = node;\n let change = initialChangeModeAssumption;\n let supportedTargets = [];\n if (nodule.nodeName == \"#text\" || this.targetsUsedByThisControllerFromNode(nodule).length == 0) {\n change = this.targetChanged;\n nodule = this.findTargetInAncestry(node);\n } else {\n supportedTargets = this.targetsUsedByThisControllerFromNode(nodule);\n }\n if (nodule == null) {\n return;\n } else if (supportedTargets.length == 0) {\n supportedTargets = this.targetsUsedByThisControllerFromNode(nodule);\n }\n supportedTargets.forEach((target => {\n change.call(this, this.stripIdentifierPrefix(target), nodule, \"domMutation\");\n }));\n }\n findTargetInAncestry(node) {\n let nodule = node;\n let supportedTargets = [];\n if (nodule.nodeName != \"#text\") {\n supportedTargets = this.targetsUsedByThisControllerFromNode(nodule);\n }\n while (nodule.parentNode !== null && nodule.parentNode != this.targetElement && supportedTargets.length == 0) {\n nodule = nodule.parentNode;\n if (nodule.nodeName !== \"#text\") {\n let supportedTargets = this.targetsUsedByThisControllerFromNode(nodule);\n if (supportedTargets.length > 0) {\n return nodule;\n }\n }\n }\n if (nodule.nodeName == \"#text\") {\n return null;\n }\n if (nodule.parentNode == null) {\n return null;\n }\n if (nodule.parentNode == this.targetElement) {\n if (this.targetsUsedByThisControllerFromNode(nodule).length > 0) {\n return nodule;\n }\n return null;\n }\n return null;\n }\n targetAdded(name, node, trigger) {\n let targetCallback = `${name}TargetAdded`;\n this.controller[targetCallback] && method(this.controller, targetCallback).call(this.controller, node);\n this.log(\"targetAdded\", {\n target: name,\n node: node,\n trigger: trigger\n });\n }\n targetRemoved(name, node, trigger) {\n let targetCallback = `${name}TargetRemoved`;\n this.controller[targetCallback] && method(this.controller, targetCallback).call(this.controller, node);\n this.log(\"targetRemoved\", {\n target: name,\n node: node,\n trigger: trigger\n });\n }\n targetChanged(name, node, trigger) {\n let targetCallback = `${name}TargetChanged`;\n this.controller[targetCallback] && method(this.controller, targetCallback).call(this.controller, node);\n this.log(\"targetChanged\", {\n target: name,\n node: node,\n trigger: trigger\n });\n }\n targetsUsedByThisControllerFromNode(node) {\n if (node.nodeName == \"#text\" || node.nodeName == \"#comment\") {\n return [];\n }\n let nodeElement = node;\n return this.targetsUsedByThisController(nodeElement.getAttribute(this.scopedTargetSelector) || nodeElement.getAttribute(this.targetSelector));\n }\n targetsUsedByThisController(targetStr) {\n targetStr = targetStr || \"\";\n let targetsToCheck = this.stripIdentifierPrefix(targetStr).split(\" \");\n return this.targets.filter((n => targetsToCheck.indexOf(n) !== -1));\n }\n stripIdentifierPrefix(target) {\n return target.replace(new RegExp(this.identifierPrefix, \"g\"), \"\");\n }\n enhanceController() {\n const controllerDisconnect = this.controller.disconnect.bind(this.controller);\n const disconnect = () => {\n this.unobserve();\n controllerDisconnect();\n };\n Object.assign(this.controller, {\n disconnect: disconnect\n });\n }\n}\n\nconst useTargetMutation = (composableController, options = {}) => {\n const controller = composableController;\n const observer = new UseTargetMutation(controller, options);\n return [ observer.observe, observer.unobserve ];\n};\n\nclass TargetMutationComposableController extends Controller {}\n\nclass TargetMutationController extends TargetMutationComposableController {\n constructor(context) {\n super(context);\n requestAnimationFrame((() => {\n const [observe, unobserve] = useTargetMutation(this, this.options);\n Object.assign(this, {\n observe: observe,\n unobserve: unobserve\n });\n }));\n }\n}\n\nclass ThrottleController extends Controller {}\n\nThrottleController.throttles = [];\n\nconst defaultWait = 200;\n\nfunction throttle(func, wait = defaultWait) {\n let inThrottle;\n return function() {\n const args = arguments;\n const context = this;\n if (!inThrottle) {\n inThrottle = true;\n func.apply(context, args);\n setTimeout((() => inThrottle = false), wait);\n }\n };\n}\n\nconst useThrottle = (composableController, options = {}) => {\n var _a;\n const controller = composableController;\n const constructor = controller.constructor;\n (_a = constructor.throttles) === null || _a === void 0 ? void 0 : _a.forEach((func => {\n if (typeof func === \"string\") {\n controller[func] = throttle(controller[func], options === null || options === void 0 ? void 0 : options.wait);\n }\n if (typeof func === \"object\") {\n const {name: name, wait: wait} = func;\n if (!name) return;\n controller[name] = throttle(controller[name], wait || (options === null || options === void 0 ? void 0 : options.wait));\n }\n }));\n};\n\nconst alpineNames = {\n enterFromClass: \"enter\",\n enterActiveClass: \"enterStart\",\n enterToClass: \"enterEnd\",\n leaveFromClass: \"leave\",\n leaveActiveClass: \"leaveStart\",\n leaveToClass: \"leaveEnd\"\n};\n\nconst defaultOptions = {\n transitioned: false,\n hiddenClass: \"hidden\",\n preserveOriginalClass: true,\n removeToClasses: true\n};\n\nconst useTransition = (composableController, options = {}) => {\n var _a, _b, _c;\n const controller = composableController;\n const targetName = controller.element.dataset.transitionTarget;\n let targetFromAttribute;\n if (targetName) {\n targetFromAttribute = controller[`${targetName}Target`];\n }\n const targetElement = (options === null || options === void 0 ? void 0 : options.element) || targetFromAttribute || controller.element;\n if (!(targetElement instanceof HTMLElement || targetElement instanceof SVGElement)) return;\n const dataset = targetElement.dataset;\n const leaveAfter = parseInt(dataset.leaveAfter || \"\") || options.leaveAfter || 0;\n const {transitioned: transitioned, hiddenClass: hiddenClass, preserveOriginalClass: preserveOriginalClass, removeToClasses: removeToClasses} = Object.assign({}, defaultOptions, options);\n const controllerEnter = (_a = controller.enter) === null || _a === void 0 ? void 0 : _a.bind(controller);\n const controllerLeave = (_b = controller.leave) === null || _b === void 0 ? void 0 : _b.bind(controller);\n const controllerToggleTransition = (_c = controller.toggleTransition) === null || _c === void 0 ? void 0 : _c.bind(controller);\n async function enter(event) {\n if (controller.transitioned) return;\n controller.transitioned = true;\n controllerEnter && controllerEnter(event);\n const enterFromClasses = getAttribute(\"enterFrom\", options, dataset);\n const enterActiveClasses = getAttribute(\"enterActive\", options, dataset);\n const enterToClasses = getAttribute(\"enterTo\", options, dataset);\n const leaveToClasses = getAttribute(\"leaveTo\", options, dataset);\n if (!!hiddenClass) {\n targetElement.classList.remove(hiddenClass);\n }\n if (!removeToClasses) {\n removeClasses(targetElement, leaveToClasses);\n }\n await transition(targetElement, enterFromClasses, enterActiveClasses, enterToClasses, hiddenClass, preserveOriginalClass, removeToClasses);\n if (leaveAfter > 0) {\n setTimeout((() => {\n leave(event);\n }), leaveAfter);\n }\n }\n async function leave(event) {\n if (!controller.transitioned) return;\n controller.transitioned = false;\n controllerLeave && controllerLeave(event);\n const leaveFromClasses = getAttribute(\"leaveFrom\", options, dataset);\n const leaveActiveClasses = getAttribute(\"leaveActive\", options, dataset);\n const leaveToClasses = getAttribute(\"leaveTo\", options, dataset);\n const enterToClasses = getAttribute(\"enterTo\", options, dataset);\n if (!removeToClasses) {\n removeClasses(targetElement, enterToClasses);\n }\n await transition(targetElement, leaveFromClasses, leaveActiveClasses, leaveToClasses, hiddenClass, preserveOriginalClass, removeToClasses);\n if (!!hiddenClass) {\n targetElement.classList.add(hiddenClass);\n }\n }\n function toggleTransition(event) {\n controllerToggleTransition && controllerToggleTransition(event);\n if (controller.transitioned) {\n leave();\n } else {\n enter();\n }\n }\n async function transition(element, initialClasses, activeClasses, endClasses, hiddenClass, preserveOriginalClass, removeEndClasses) {\n const stashedClasses = [];\n if (preserveOriginalClass) {\n initialClasses.forEach((cls => element.classList.contains(cls) && cls !== hiddenClass && stashedClasses.push(cls)));\n activeClasses.forEach((cls => element.classList.contains(cls) && cls !== hiddenClass && stashedClasses.push(cls)));\n endClasses.forEach((cls => element.classList.contains(cls) && cls !== hiddenClass && stashedClasses.push(cls)));\n }\n addClasses(element, initialClasses);\n removeClasses(element, stashedClasses);\n addClasses(element, activeClasses);\n await nextAnimationFrame();\n removeClasses(element, initialClasses);\n addClasses(element, endClasses);\n await afterTransition(element);\n removeClasses(element, activeClasses);\n if (removeEndClasses) {\n removeClasses(element, endClasses);\n }\n addClasses(element, stashedClasses);\n }\n function initialState() {\n controller.transitioned = transitioned;\n if (transitioned) {\n if (!!hiddenClass) {\n targetElement.classList.remove(hiddenClass);\n }\n enter();\n } else {\n if (!!hiddenClass) {\n targetElement.classList.add(hiddenClass);\n }\n leave();\n }\n }\n function addClasses(element, classes) {\n if (classes.length > 0) {\n element.classList.add(...classes);\n }\n }\n function removeClasses(element, classes) {\n if (classes.length > 0) {\n element.classList.remove(...classes);\n }\n }\n initialState();\n Object.assign(controller, {\n enter: enter,\n leave: leave,\n toggleTransition: toggleTransition\n });\n return [ enter, leave, toggleTransition ];\n};\n\nfunction getAttribute(name, options, dataset) {\n const datasetName = `transition${name[0].toUpperCase()}${name.substr(1)}`;\n const datasetAlpineName = alpineNames[name];\n const classes = options[name] || dataset[datasetName] || dataset[datasetAlpineName] || \" \";\n return isEmpty(classes) ? [] : classes.split(\" \");\n}\n\nasync function afterTransition(element) {\n return new Promise((resolve => {\n const duration = Number(getComputedStyle(element).transitionDuration.split(\",\")[0].replace(\"s\", \"\")) * 1e3;\n setTimeout((() => {\n resolve(duration);\n }), duration);\n }));\n}\n\nasync function nextAnimationFrame() {\n return new Promise((resolve => {\n requestAnimationFrame((() => {\n requestAnimationFrame(resolve);\n }));\n }));\n}\n\nfunction isEmpty(str) {\n return str.length === 0 || !str.trim();\n}\n\nclass TransitionComposableController extends Controller {\n constructor() {\n super(...arguments);\n this.transitioned = false;\n }\n}\n\nclass TransitionController extends TransitionComposableController {\n constructor(context) {\n super(context);\n requestAnimationFrame((() => {\n useTransition(this, this.options);\n }));\n }\n}\n\nclass UseVisibility extends StimulusUse {\n constructor(controller, options = {}) {\n super(controller, options);\n this.observe = () => {\n this.controller.isVisible = !document.hidden;\n document.addEventListener(\"visibilitychange\", this.handleVisibilityChange);\n this.handleVisibilityChange();\n };\n this.unobserve = () => {\n document.removeEventListener(\"visibilitychange\", this.handleVisibilityChange);\n };\n this.becomesInvisible = event => {\n this.controller.isVisible = false;\n this.call(\"invisible\", event);\n this.log(\"invisible\", {\n isVisible: false\n });\n this.dispatch(\"invisible\", {\n event: event,\n isVisible: false\n });\n };\n this.becomesVisible = event => {\n this.controller.isVisible = true;\n this.call(\"visible\", event);\n this.log(\"visible\", {\n isVisible: true\n });\n this.dispatch(\"visible\", {\n event: event,\n isVisible: true\n });\n };\n this.handleVisibilityChange = event => {\n if (document.hidden) {\n this.becomesInvisible(event);\n } else {\n this.becomesVisible(event);\n }\n };\n this.controller = controller;\n this.enhanceController();\n this.observe();\n }\n enhanceController() {\n const controllerDisconnect = this.controllerDisconnect;\n const disconnect = () => {\n this.unobserve();\n controllerDisconnect();\n };\n Object.assign(this.controller, {\n disconnect: disconnect\n });\n }\n}\n\nconst useVisibility = (composableController, options = {}) => {\n const controller = composableController;\n const observer = new UseVisibility(controller, options);\n return [ observer.observe, observer.unobserve ];\n};\n\nclass VisibilityComposableController extends Controller {\n constructor() {\n super(...arguments);\n this.isVisible = false;\n }\n}\n\nclass VisibilityController extends VisibilityComposableController {\n constructor(context) {\n super(context);\n requestAnimationFrame((() => {\n const [observe, unobserve] = useVisibility(this, this.options);\n Object.assign(this, {\n observe: observe,\n unobserve: unobserve\n });\n }));\n }\n}\n\nclass UseWindowFocus extends StimulusUse {\n constructor(controller, options = {}) {\n super(controller, options);\n this.observe = () => {\n if (document.hasFocus()) {\n this.becomesFocused();\n } else {\n this.becomesUnfocused();\n }\n this.interval = setInterval((() => {\n this.handleWindowFocusChange();\n }), this.intervalDuration);\n };\n this.unobserve = () => {\n clearInterval(this.interval);\n };\n this.becomesUnfocused = event => {\n this.controller.hasFocus = false;\n this.call(\"unfocus\", event);\n this.log(\"unfocus\", {\n hasFocus: false\n });\n this.dispatch(\"unfocus\", {\n event: event,\n hasFocus: false\n });\n };\n this.becomesFocused = event => {\n this.controller.hasFocus = true;\n this.call(\"focus\", event);\n this.log(\"focus\", {\n hasFocus: true\n });\n this.dispatch(\"focus\", {\n event: event,\n hasFocus: true\n });\n };\n this.handleWindowFocusChange = event => {\n if (document.hasFocus() && !this.controller.hasFocus) {\n this.becomesFocused(event);\n } else if (!document.hasFocus() && this.controller.hasFocus) {\n this.becomesUnfocused(event);\n }\n };\n this.controller = controller;\n this.intervalDuration = options.interval || 200;\n this.enhanceController();\n this.observe();\n }\n enhanceController() {\n const controllerDisconnect = this.controllerDisconnect;\n const disconnect = () => {\n this.unobserve();\n controllerDisconnect();\n };\n Object.assign(this.controller, {\n disconnect: disconnect\n });\n }\n}\n\nconst useWindowFocus = (composableController, options = {}) => {\n const controller = composableController;\n const observer = new UseWindowFocus(controller, options);\n return [ observer.observe, observer.unobserve ];\n};\n\nclass WindowFocusComposableController extends Controller {\n constructor() {\n super(...arguments);\n this.hasFocus = false;\n }\n}\n\nclass WindowFocusController extends WindowFocusComposableController {\n constructor(context) {\n super(context);\n requestAnimationFrame((() => {\n const [observe, unobserve] = useWindowFocus(this, this.options);\n Object.assign(this, {\n observe: observe,\n unobserve: unobserve\n });\n }));\n }\n}\n\nconst useWindowResize = composableController => {\n const controller = composableController;\n const callback = event => {\n const {innerWidth: innerWidth, innerHeight: innerHeight} = window;\n const payload = {\n height: innerHeight || Infinity,\n width: innerWidth || Infinity,\n event: event\n };\n method(controller, \"windowResize\").call(controller, payload);\n };\n const controllerDisconnect = controller.disconnect.bind(controller);\n const observe = () => {\n window.addEventListener(\"resize\", callback);\n callback();\n };\n const unobserve = () => {\n window.removeEventListener(\"resize\", callback);\n };\n Object.assign(controller, {\n disconnect() {\n unobserve();\n controllerDisconnect();\n }\n });\n observe();\n return [ observe, unobserve ];\n};\n\nclass WindowResizeComposableController extends Controller {}\n\nclass WindowResizeController extends WindowResizeComposableController {\n constructor(context) {\n super(context);\n requestAnimationFrame((() => {\n const [observe, unobserve] = useWindowResize(this);\n Object.assign(this, {\n observe: observe,\n unobserve: unobserve\n });\n }));\n }\n}\n\nfunction useHotkeys() {\n throw \"[stimulus-use] Notice: The import for `useHotkeys()` has been moved from `stimulus-use` to `stimulus-use/hotkeys`. \\nPlease change the import accordingly and add `hotkey-js` as a dependency to your project. \\n\\nFor more information see: https://stimulus-use.github.io/stimulus-use/#/use-hotkeys?id=importing-the-behavior\";\n}\n\nexport { ApplicationController, ClickOutsideController, HoverController, IdleController, IntersectionController, LazyLoadController, MutationController, ResizeController, TargetMutationController, TransitionController, UseHover, UseMutation, UseTargetMutation, UseVisibility, UseWindowFocus, VisibilityController, WindowFocusController, WindowResizeController, debounce, useApplication, useClickOutside, useDebounce, useDispatch, useHotkeys, useHover, useIdle, useIntersection, useLazyLoad, useMatchMedia, useMemo, useMeta, useMutation, useResize, useTargetMutation, useThrottle, useTransition, useVisibility, useWindowFocus, useWindowResize };\n", "/* global i18n */\n\n/**\n * Assigns internationalization methods to a controller object and stores the given translations.\n * @function\n * @param {object} options - The options object.\n * @param {object} options.controller - The controller object to assign the methods to.\n * @param {object} options.translations - The translation data to be stored.\n * @param {string} options.scope - The translation scope.\n * @returns {undefined}\n */\nconst useI18n = ({ controller, translations, scope }) => {\n //! Custom Error Messages if required arguments are undefined\n if(!controller) console.error(\"useI18n() requires a controller\");\n if(!translations) console.error(\"useI18n() requires translations\");\n if(!scope) console.error(\"useI18n() requires a scope\");\n\n if (translations && scope){\n i18n.store(translations);\n\n if (controller){\n Object.assign(controller, {\n t: (key, params = {}) => i18n.t(`${scope}.${key}`, params),\n });\n }\n }\n\n\n};\n\nexport { useI18n };\nexport default useI18n;\n", "/**\n * Decodes an HTML string into a DOM element.\n * @param {string} html_string - The HTML string to decode.\n * @returns {Element} - The decoded DOM element.\n */\nconst decodeHtml = function(html_string) {\n const wrapper = document.createElement(\"div\");\n wrapper.innerHTML = html_string;\n return wrapper.firstChild;\n};\n\n\n/**\n * Gives access to a decoder function (decodeHtml)\n * @param {object} controller - The URL of the script to load.\n */\nconst useDecoder = controller => {\n Object.assign(controller, {\n decodeHtml,\n });\n};\n\nexport { decodeHtml, useDecoder };\n\nexport default useDecoder;\n", "/**\n * Loads a stylesheet from the specified URL\n * @function load_style\n * @param {string} source - The URL of the script to load.\n */\nconst load_style = function(source) {\n var mapCSS = document.createElement(\"link\");\n mapCSS.rel = \"stylesheet\";\n mapCSS.href = source;\n document.body.appendChild(mapCSS);\n};\n\n\n/**\n * Loads a script from the specified URL and calls the optional callback function after the script is loaded.\n * we found a version of this code here https://stackoverflow.com/a/28002292\n * @function load_script\n * @param {string} source - The URL of the script to load.\n * @param {Function} [callback] - An optional callback function to call after the script is loaded.\n */\nconst load_script = function(source, callback = false) {\n var script = document.createElement(\"script\");\n script.async = true;\n script.defer = \"defer\";\n script.as = \"script\";\n script.dataset.turboTrack = \"reload\";\n\n script.onload = script.onreadystatechange = (_, isAbort) => {\n if (isAbort || !script.readyState || /loaded|complete/.test(script.readyState)) {\n script.onload = script.onreadystatechange = null;\n script = undefined;\n if (!isAbort && callback) callback();\n }\n };\n\n script.src = source;\n document.body.appendChild(script);\n};\n\n\n/**\n * Gives access to loader functions to load scripts (load_script) and stylesheets (load_style)\n * @mixin useAssetLoader\n * @param {object} controller - The URL of the script to load.\n */\nconst useAssetLoader = controller => {\n Object.assign(controller, {\n load_style,\n load_script,\n });\n};\n\nexport {\n load_style,\n load_script,\n useAssetLoader,\n};\n\nexport default useAssetLoader;\n", "/**\n * Calculates the viewport width of the browser window.\n * @function\n * @returns {number} The viewport width in pixels.\n */\nconst viewport_width = function(){\n let width = Math.max(\n document.documentElement.clientWidth,\n window.innerWidth,\n 0,\n );\n return width;\n};\n\n\n/**\n * Determines the viewport label based on the given width.\n * @function\n * @param {number} width - The viewport width in pixels.\n * @returns {string} The corresponding viewport label (one of \"xxl\", \"xl\", \"lg\", \"md\", \"sm\", \"xs\").\n */\nconst viewport_label_lookup = function(width){\n let viewportLabel = \"xxl\";\n if (width < 1400) viewportLabel = \"xl\";\n if (width < 1200) viewportLabel = \"lg\";\n if (width < 992) viewportLabel = \"md\";\n if (width < 768) viewportLabel = \"sm\";\n if (width < 576) viewportLabel = \"xs\";\n\n return viewportLabel;\n};\n\n\n/**\n * Determines the current viewport label.\n * @function\n * @returns {string} The corresponding viewport label (one of \"xxl\", \"xl\", \"lg\", \"md\", \"sm\", \"xs\").\n */\nconst viewport_label = function(){\n const width = viewport_width();\n const viewportLabel = viewport_label_lookup(width);\n return viewportLabel;\n};\n\n\n/**\n * Assigns viewport size related methods to a controller object.\n * @function\n * @param {object} controller - The controller object to assign the methods to.\n * @returns {undefined}\n */\nconst useViewportSize = controller => {\n Object.assign(controller, {\n viewport_width,\n viewport_label_lookup,\n viewport_label,\n });\n};\n\nexport { viewport_width, viewport_label_lookup, viewport_label, useViewportSize };\nexport default useViewportSize;\n", "var r=.2126,t=.7152,n=.0722,u=1/12.92;function a(r){return Math.pow((r+.055)/1.055,2.4)}export default function(e){var o=e[0]/255,f=e[1]/255,c=e[2]/255,i=o<=.03928?o*u:a(o),p=f<=.03928?f*u:a(f),v=c<=.03928?c*u:a(c);return i*r+p*t+v*n};\n//# sourceMappingURL=index.m.js.map\n", "import relativeLuminance from \"relative-luminance\";\n\nconst hexChars = \"a-f\\\\d\";\nconst match3or4Hex = `#?[${hexChars}]{3}[${hexChars}]?`;\nconst match6or8Hex = `#?[${hexChars}]{6}([${hexChars}]{2})?`;\n\nfunction hexRgb(hex) {\n hex = hex.replace(/^#/, \"\");\n let alpha = 255;\n\n if (hex.length === 8) {\n alpha = parseInt(hex.slice(6, 8), 16);\n hex = hex.substring(0, 6);\n }\n\n if (hex.length === 4) {\n alpha = parseInt(hex.slice(3, 4).repeat(2), 16);\n hex = hex.substring(0, 3);\n }\n\n if (hex.length === 3) {\n hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n }\n\n const num = parseInt(hex, 16);\n const red = num >> 16;\n const green = (num >> 8) & 255;\n const blue = num & 255;\n\n return [red, green, blue, alpha];\n}\n\n// http://www.w3.org/TR/WCAG20/#contrast-ratiodef\n\n/**\n * Get the contrast ratio between two relative luminance values\n * @param {number} a luminance value\n * @param {number} b luminance value\n * @returns {number} contrast ratio\n * @example\n * luminance(1, 1); // = 1\n */\nexport function luminance(a, b) {\n const l1 = Math.max(a, b);\n const l2 = Math.min(a, b);\n return (l1 + 0.05) / (l2 + 0.05);\n}\n\n/**\n * Get a score for the contrast between two colors as rgb triplets\n * @param {array} a\n * @param {array} b\n * @returns {number} contrast ratio\n * @example\n * rgb([0, 0, 0], [255, 255, 255]); // = 21\n */\nexport function rgb(a, b) {\n return luminance(relativeLuminance(a), relativeLuminance(b));\n}\n\n/**\n * Get a score for the contrast between two colors as hex strings\n * @param {string} a hex value\n * @param {string} b hex value\n * @returns {number} contrast ratio\n * @example\n * hex('#000', '#fff'); // = 21\n */\nexport function hex(a, b) {\n return rgb(hexRgb(a, { format: \"array\" }), hexRgb(b, { format: \"array\" }));\n}\n\n/**\n * Get a textual score from a numeric contrast value\n * @param {number} contrast\n * @returns {string} score\n * @example\n * score(10); // = 'AAA'\n */\nexport function score(contrast) {\n if (contrast >= 7) {\n return 'AAA';\n }\n \n if (contrast >= 4.5) {\n return 'AA';\n }\n \n if (contrast >= 3) {\n return 'AA Large';\n }\n \n return 'Fail';\n}\n", "import { hex as WCAGColorContrastHex} from \"wcag-contrast\";\n\n/**\n * This module provides utility functions for working with colors.\n * @module color-utils\n */\n\n\n/**\n * Converts a RGB color string to a hexadecimal color code.\n * @param {string} rgb - The RGBA color string to convert.\n * @returns {string} The hexadecimal color code.\n */\nconst rgb_to_hex = (rgb) => {\n //* Remove spaces from the RGB color string\n const rgb_clean = rgb.replace(/\\s/g, \"\");\n\n //* Extract the RGB values\n const matches = rgb_clean.match(/^rgb\\((\\d+),(\\d+),(\\d+)\\)$/);\n const r = parseInt(matches[1]);\n const g = parseInt(matches[2]);\n const b = parseInt(matches[3]);\n\n //* Convert each RGB value to hexadecimal\n const rHex = r.toString(16).padStart(2, \"0\");\n const gHex = g.toString(16).padStart(2, \"0\");\n const bHex = b.toString(16).padStart(2, \"0\");\n\n //* Combine the hexadecimal values\n const hexColor = \"#\" + rHex + gHex + bHex;\n\n return hexColor;\n};\n\n/**\n * Converts a hexadecimal color code to a RGBA color string.\n * @param {string} hex - The hexadecimal color code to convert.\n * @returns {string} The RGBA color string.\n */\nconst hex_color_to_rgba = (hex) => {\n const rgba_array = hex_color_to_rgba_array(hex); //* Convert the hexadecimal color code to an RGBA array\n return `rgba(${rgba_array.join(\", \")})`; //* Join the elements of the RGBA array into an RGBA color string\n};\n\n\n/**\n * Converts a hexadecimal color code to an RGBA array.\n * @param {string} hex - The hexadecimal color code to convert.\n * @returns {number[]} An array containing the red, green, blue, and alpha values of the converted color code.\n * The red, green, and blue values are integers from 0 to 255, and the alpha value is a decimal from 0 to 1.\n * Returns an array of [255, 255, 255, 1] if the input hex code is invalid.\n */\nconst hex_color_to_rgba_array = (hex) => {\n const clean_hex = hex_long(hex);\n const valid_hex_lengths = [4, 5, 7, 9];\n\n if (valid_hex_lengths.includes(clean_hex.length)) {\n //* The numbers in the array are the positions of each color pair in the string\n //* #FF00BBFF\n //* 1 3 5 7\n const hex_rgba_array = [1, 3, 5, 7].map((position) => clean_hex.slice(position, position + 2));\n const dec_rgba_array = hex_rgba_array.map((rgba_color) => parseInt(rgba_color, 16));\n dec_rgba_array[3] = parseFloat((dec_rgba_array[3] / 255).toFixed(2)); //* Alpha value is from 0-1 not 0-255\n return dec_rgba_array;\n } else {\n return [255, 255, 255, 1];\n }\n};\n\n\n/**\n * Converts a hexadecimal color code to an RGB array.\n * @param {string} hex - The hexadecimal color code to convert.\n * @returns {number[]} An array containing the red, green, and blue values of the converted color code.\n * The red, green, and blue values are integers from 0 to 255.\n */\nconst hex_color_to_rgb_array = (hex) => {\n const rgba_array = hex_color_to_rgba_array(hex);\n rgba_array.pop();\n\n return rgba_array;\n};\n\n\n/**\n * Converts a hexadecimal color code to an RGBA object.\n * @param {string} hex - The hexadecimal color code to convert.\n * @returns {object} An object containing the red, green, blue, and alpha values of the converted color code.\n * The red, green, and blue values are integers from 0 to 255, and the alpha value is a decimal from 0 to 1.\n */\nconst hex_color_to_rgba_object = (hex) => {\n const rgba_array = hex_color_to_rgba_array(hex);\n const rgba_object = {\n red: rgba_array[0],\n green: rgba_array[1],\n blue: rgba_array[2],\n alpha: rgba_array[3],\n };\n\n return rgba_object;\n};\n\n\n/**\n * Converts a shorthand hexadecimal color code to a longhand hexadecimal color code.\n * @param {string} hex - The shorthand hexadecimal color code to convert.\n * @returns {string} The longhand hexadecimal color code.\n * @throws {Error} If an invalid HEX code length is provided.\n */\nconst hex_long = (hex) => {\n const hex_no_hash = hex.replace(\"#\", \"\");\n let rgb_array = [];\n let red = \"\";\n let blue = \"\";\n let green = \"\";\n let alpha = \"\";\n\n switch (hex_no_hash.length) {\n case 3:\n rgb_array = hex_no_hash.split(\"\");\n red = rgb_array[0] + rgb_array[0];\n green = rgb_array[1] + rgb_array[1];\n blue = rgb_array[2] + rgb_array[2];\n alpha = \"FF\";\n return \"#\" + red + green + blue + alpha;\n case 4:\n rgb_array = hex_no_hash.split(\"\");\n red = rgb_array[0] + rgb_array[0];\n green = rgb_array[1] + rgb_array[1];\n blue = rgb_array[2] + rgb_array[2];\n alpha = rgb_array[3] + rgb_array[3];\n return \"#\" + red + green + blue + alpha;\n case 6:\n return hex + \"FF\";\n case 8:\n return hex;\n default:\n console.error(\"Invalid HEX code length provided!\");\n return hex;\n }\n};\n\n\n/**\n * Removes the alpha channel from a hexadecimal color code if it exists.\n * @param {string} hex - The hexadecimal color code to modify.\n * @returns {string} The modified hexadecimal color code without an alpha channel.\n * @throws {Error} If an invalid HEX code length is provided.\n */\nconst hex_no_alpha = (hex) => {\n const hex_no_hash = hex.replace(\"#\", \"\");\n\n switch (hex_no_hash.length) {\n case 3:\n return hex;\n case 6:\n return hex;\n case 4:\n return hex.slice(0, -1);\n case 8:\n return hex.slice(0, -2);\n default:\n console.error(\"Invalid HEX code length provided!\");\n return hex;\n }\n};\n\n\n/**\n * Calculates the contrasting color to a given hexadecimal color code.\n * @param {string} hex - The hexadecimal color code to find the contrasting color for.\n * @param {object} [user_settings] - Optional user settings to override the default settings.\n * @param {string} [user_settings.dark_output] - The default output color if the input color is light.\n * @param {string} [user_settings.light_output] - The default output color if the input color is dark.\n * @param {number} [user_settings.threshold] - The threshold value at which the input color is considered light or dark. Range is from 0-255.\n * @returns {string} The contrasting color as a hexadecimal color code.\n */\nconst hex_contrasted_color = (hex, user_settings = {}) => {\n\n const default_settings = {\n dark_output: \"#000000\",\n light_output: \"#FFFFFF\",\n threshold: 186, //* adjust the default threshold value to change when light/dark values switch\n };\n\n const settings = {\n ...default_settings,\n ...user_settings,\n };\n\n const rgb_object = hex_color_to_rgba_object(hex);\n const { red, green, blue } = rgb_object;\n\n //* This algorithum was pulled from:\n //* https://stackoverflow.com/questions/3942878/how-to-decide-font-color-in-white-or-black-depending-on-background-color\n if (red * 0.299 + green * 0.587 + blue * 0.114 > settings.threshold) {\n return settings.dark_output;\n }\n\n return settings.light_output;\n};\n\n\n/**\n * Calculates the contrast ratio between two colors using the WCAG algorithm.\n * @param {string} color1 - The first color in hexadecimal format.\n * @param {string} color2 - The second color in hexadecimal format.\n * @returns {number} - The contrast ratio between the two colors.\n * @throws {Error} - If either color is not a valid hexadecimal color.\n * @throws {Error} - If the first color is missing.\n * @throws {Error} - If the second color is missing.\n */\nconst color_contrast_ratio = (color1 = false, color2 = false) => {\n if (!color1) console.error(\"Missing first color\");\n if (!color2) console.error(\"Missing second color\");\n if (!is_valid_hex_color(color1)) console.error(\"Invalid hexadecimal color: \" + color1);\n if (!is_valid_hex_color(color2)) console.error(\"Invalid hexadecimal color: \" + color2);\n if (!is_valid_hex_color(color1) || !is_valid_hex_color(color2)) return 1;\n\n return WCAGColorContrastHex(color1, color2);\n};\n\n/**\n * Checks if a string is a valid hexadecimal color.\n * @param {string} color - The color string to check.\n * @returns {boolean} - True if the color is valid, false otherwise.\n */\nconst is_valid_hex_color = (color) => {\n return /^#(?:(?:[\\da-f]{3}){1,2}|(?:[\\da-f]{4}){1,2})$/i.test(color);\n};\n\n\n/**\n * Determine whether to use the light or dark color in order to create sufficient contrast with the given color\n * @param {string} color - The hex code for the color to test\n * @param {object} settings - (Optional) An object that contains the settings to use for testing the color\n * @param {string} settings.light_test - The hex code for the color to use as a test for light colors\n * @param {string} settings.dark_test - The hex code for the color to use as a test for dark colors\n * @param {string} settings.light_output - The hex code for the color to use if the light test produces the best contrast\n * @param {string} settings.dark_output - The hex code for the color to use if the dark test produces the best contrast\n * @returns {string} - The hex code for the recommended color (either light_output or dark_output)\n */\nconst dark_or_light_via_color = (color, settings) => {\n const default_settings = {\n light_test: \"#FFFFFF\",\n dark_test: \"#000000\",\n light_output: \"#FFFFFF\",\n dark_output: \"#000000\",\n };\n\n const settings_to_use = Object.assign(default_settings, settings);\n const dark = color_contrast_ratio(color, settings_to_use.dark_test);\n const light = color_contrast_ratio(color, settings_to_use.light_test);\n return dark > light ? settings_to_use.dark_output : settings_to_use.light_output;\n};\n\n\n/**\n * Helper function to extend an object with color-related utility functions\n * @param {object} controller - The object to extend with color-related utility functions\n */\nconst useColorHelper = controller => {\n Object.assign(controller, {\n rgb_to_hex,\n hex_color_to_rgba,\n hex_color_to_rgba_array,\n hex_color_to_rgb_array,\n hex_color_to_rgba_object,\n hex_long,\n hex_no_alpha,\n hex_contrasted_color,\n color_contrast_ratio,\n is_valid_hex_color,\n dark_or_light_via_color,\n });\n};\n\nexport {\n rgb_to_hex,\n hex_color_to_rgba,\n hex_color_to_rgba_array,\n hex_color_to_rgb_array,\n hex_color_to_rgba_object,\n hex_long,\n hex_no_alpha,\n hex_contrasted_color,\n color_contrast_ratio,\n is_valid_hex_color,\n dark_or_light_via_color,\n useColorHelper,\n};\n\nexport default useColorHelper;\n", "import ApplicationController from \"../../application_controller.js\";\nimport { useDebounce } from \"stimulus-use\";\nimport { useViewportSize } from \"mixins\";\n\nexport default class extends ApplicationController {\n static debounces = [\"resize\"];\n static values = {\n viewport: String,\n };\n\n connect() {\n this.log_function(\"connect\");\n\n useDebounce(this);\n useViewportSize(this);\n\n this.set_viewport_size();\n }\n\n open_slide(event){\n this.log_function(\"open_slide\");\n\n if(this.viewportValue == \"xs\") return false;\n if(this.viewportValue == \"sm\") return false;\n\n this.dispatch(\"open_slide\", { detail: { slide_index: event.currentTarget.dataset.slideIndex }, prefix: false });\n }\n\n set_viewport_size(){\n this.log_function(\"set_viewport_size\");\n\n this.viewportValue = this.viewport_label();\n }\n\n resize(){\n this.log_function(\"resize\");\n\n this.set_viewport_size();\n }\n}\n", "/*\n * anime.js v3.2.2\n * (c) 2023 Julian Garnier\n * Released under the MIT license\n * animejs.com\n */\n\n// Defaults\n\nvar defaultInstanceSettings = {\n update: null,\n begin: null,\n loopBegin: null,\n changeBegin: null,\n change: null,\n changeComplete: null,\n loopComplete: null,\n complete: null,\n loop: 1,\n direction: 'normal',\n autoplay: true,\n timelineOffset: 0\n};\n\nvar defaultTweenSettings = {\n duration: 1000,\n delay: 0,\n endDelay: 0,\n easing: 'easeOutElastic(1, .5)',\n round: 0\n};\n\nvar validTransforms = ['translateX', 'translateY', 'translateZ', 'rotate', 'rotateX', 'rotateY', 'rotateZ', 'scale', 'scaleX', 'scaleY', 'scaleZ', 'skew', 'skewX', 'skewY', 'perspective', 'matrix', 'matrix3d'];\n\n// Caching\n\nvar cache = {\n CSS: {},\n springs: {}\n};\n\n// Utils\n\nfunction minMax(val, min, max) {\n return Math.min(Math.max(val, min), max);\n}\n\nfunction stringContains(str, text) {\n return str.indexOf(text) > -1;\n}\n\nfunction applyArguments(func, args) {\n return func.apply(null, args);\n}\n\nvar is = {\n arr: function (a) { return Array.isArray(a); },\n obj: function (a) { return stringContains(Object.prototype.toString.call(a), 'Object'); },\n pth: function (a) { return is.obj(a) && a.hasOwnProperty('totalLength'); },\n svg: function (a) { return a instanceof SVGElement; },\n inp: function (a) { return a instanceof HTMLInputElement; },\n dom: function (a) { return a.nodeType || is.svg(a); },\n str: function (a) { return typeof a === 'string'; },\n fnc: function (a) { return typeof a === 'function'; },\n und: function (a) { return typeof a === 'undefined'; },\n nil: function (a) { return is.und(a) || a === null; },\n hex: function (a) { return /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(a); },\n rgb: function (a) { return /^rgb/.test(a); },\n hsl: function (a) { return /^hsl/.test(a); },\n col: function (a) { return (is.hex(a) || is.rgb(a) || is.hsl(a)); },\n key: function (a) { return !defaultInstanceSettings.hasOwnProperty(a) && !defaultTweenSettings.hasOwnProperty(a) && a !== 'targets' && a !== 'keyframes'; },\n};\n\n// Easings\n\nfunction parseEasingParameters(string) {\n var match = /\\(([^)]+)\\)/.exec(string);\n return match ? match[1].split(',').map(function (p) { return parseFloat(p); }) : [];\n}\n\n// Spring solver inspired by Webkit Copyright \u00A9 2016 Apple Inc. All rights reserved. https://webkit.org/demos/spring/spring.js\n\nfunction spring(string, duration) {\n\n var params = parseEasingParameters(string);\n var mass = minMax(is.und(params[0]) ? 1 : params[0], .1, 100);\n var stiffness = minMax(is.und(params[1]) ? 100 : params[1], .1, 100);\n var damping = minMax(is.und(params[2]) ? 10 : params[2], .1, 100);\n var velocity = minMax(is.und(params[3]) ? 0 : params[3], .1, 100);\n var w0 = Math.sqrt(stiffness / mass);\n var zeta = damping / (2 * Math.sqrt(stiffness * mass));\n var wd = zeta < 1 ? w0 * Math.sqrt(1 - zeta * zeta) : 0;\n var a = 1;\n var b = zeta < 1 ? (zeta * w0 + -velocity) / wd : -velocity + w0;\n\n function solver(t) {\n var progress = duration ? (duration * t) / 1000 : t;\n if (zeta < 1) {\n progress = Math.exp(-progress * zeta * w0) * (a * Math.cos(wd * progress) + b * Math.sin(wd * progress));\n } else {\n progress = (a + b * progress) * Math.exp(-progress * w0);\n }\n if (t === 0 || t === 1) { return t; }\n return 1 - progress;\n }\n\n function getDuration() {\n var cached = cache.springs[string];\n if (cached) { return cached; }\n var frame = 1/6;\n var elapsed = 0;\n var rest = 0;\n while(true) {\n elapsed += frame;\n if (solver(elapsed) === 1) {\n rest++;\n if (rest >= 16) { break; }\n } else {\n rest = 0;\n }\n }\n var duration = elapsed * frame * 1000;\n cache.springs[string] = duration;\n return duration;\n }\n\n return duration ? solver : getDuration;\n\n}\n\n// Basic steps easing implementation https://developer.mozilla.org/fr/docs/Web/CSS/transition-timing-function\n\nfunction steps(steps) {\n if ( steps === void 0 ) steps = 10;\n\n return function (t) { return Math.ceil((minMax(t, 0.000001, 1)) * steps) * (1 / steps); };\n}\n\n// BezierEasing https://github.com/gre/bezier-easing\n\nvar bezier = (function () {\n\n var kSplineTableSize = 11;\n var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n\n function A(aA1, aA2) { return 1.0 - 3.0 * aA2 + 3.0 * aA1 }\n function B(aA1, aA2) { return 3.0 * aA2 - 6.0 * aA1 }\n function C(aA1) { return 3.0 * aA1 }\n\n function calcBezier(aT, aA1, aA2) { return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT }\n function getSlope(aT, aA1, aA2) { return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1) }\n\n function binarySubdivide(aX, aA, aB, mX1, mX2) {\n var currentX, currentT, i = 0;\n do {\n currentT = aA + (aB - aA) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n if (currentX > 0.0) { aB = currentT; } else { aA = currentT; }\n } while (Math.abs(currentX) > 0.0000001 && ++i < 10);\n return currentT;\n }\n\n function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {\n for (var i = 0; i < 4; ++i) {\n var currentSlope = getSlope(aGuessT, mX1, mX2);\n if (currentSlope === 0.0) { return aGuessT; }\n var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n }\n\n function bezier(mX1, mY1, mX2, mY2) {\n\n if (!(0 <= mX1 && mX1 <= 1 && 0 <= mX2 && mX2 <= 1)) { return; }\n var sampleValues = new Float32Array(kSplineTableSize);\n\n if (mX1 !== mY1 || mX2 !== mY2) {\n for (var i = 0; i < kSplineTableSize; ++i) {\n sampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n }\n }\n\n function getTForX(aX) {\n\n var intervalStart = 0;\n var currentSample = 1;\n var lastSample = kSplineTableSize - 1;\n\n for (; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample) {\n intervalStart += kSampleStepSize;\n }\n\n --currentSample;\n\n var dist = (aX - sampleValues[currentSample]) / (sampleValues[currentSample + 1] - sampleValues[currentSample]);\n var guessForT = intervalStart + dist * kSampleStepSize;\n var initialSlope = getSlope(guessForT, mX1, mX2);\n\n if (initialSlope >= 0.001) {\n return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n } else if (initialSlope === 0.0) {\n return guessForT;\n } else {\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n }\n\n }\n\n return function (x) {\n if (mX1 === mY1 && mX2 === mY2) { return x; }\n if (x === 0 || x === 1) { return x; }\n return calcBezier(getTForX(x), mY1, mY2);\n }\n\n }\n\n return bezier;\n\n})();\n\nvar penner = (function () {\n\n // Based on jQuery UI's implemenation of easing equations from Robert Penner (http://www.robertpenner.com/easing)\n\n var eases = { linear: function () { return function (t) { return t; }; } };\n\n var functionEasings = {\n Sine: function () { return function (t) { return 1 - Math.cos(t * Math.PI / 2); }; },\n Expo: function () { return function (t) { return t ? Math.pow(2, 10 * t - 10) : 0; }; },\n Circ: function () { return function (t) { return 1 - Math.sqrt(1 - t * t); }; },\n Back: function () { return function (t) { return t * t * (3 * t - 2); }; },\n Bounce: function () { return function (t) {\n var pow2, b = 4;\n while (t < (( pow2 = Math.pow(2, --b)) - 1) / 11) {}\n return 1 / Math.pow(4, 3 - b) - 7.5625 * Math.pow(( pow2 * 3 - 2 ) / 22 - t, 2)\n }; },\n Elastic: function (amplitude, period) {\n if ( amplitude === void 0 ) amplitude = 1;\n if ( period === void 0 ) period = .5;\n\n var a = minMax(amplitude, 1, 10);\n var p = minMax(period, .1, 2);\n return function (t) {\n return (t === 0 || t === 1) ? t : \n -a * Math.pow(2, 10 * (t - 1)) * Math.sin((((t - 1) - (p / (Math.PI * 2) * Math.asin(1 / a))) * (Math.PI * 2)) / p);\n }\n }\n };\n\n var baseEasings = ['Quad', 'Cubic', 'Quart', 'Quint'];\n\n baseEasings.forEach(function (name, i) {\n functionEasings[name] = function () { return function (t) { return Math.pow(t, i + 2); }; };\n });\n\n Object.keys(functionEasings).forEach(function (name) {\n var easeIn = functionEasings[name];\n eases['easeIn' + name] = easeIn;\n eases['easeOut' + name] = function (a, b) { return function (t) { return 1 - easeIn(a, b)(1 - t); }; };\n eases['easeInOut' + name] = function (a, b) { return function (t) { return t < 0.5 ? easeIn(a, b)(t * 2) / 2 : \n 1 - easeIn(a, b)(t * -2 + 2) / 2; }; };\n eases['easeOutIn' + name] = function (a, b) { return function (t) { return t < 0.5 ? (1 - easeIn(a, b)(1 - t * 2)) / 2 : \n (easeIn(a, b)(t * 2 - 1) + 1) / 2; }; };\n });\n\n return eases;\n\n})();\n\nfunction parseEasings(easing, duration) {\n if (is.fnc(easing)) { return easing; }\n var name = easing.split('(')[0];\n var ease = penner[name];\n var args = parseEasingParameters(easing);\n switch (name) {\n case 'spring' : return spring(easing, duration);\n case 'cubicBezier' : return applyArguments(bezier, args);\n case 'steps' : return applyArguments(steps, args);\n default : return applyArguments(ease, args);\n }\n}\n\n// Strings\n\nfunction selectString(str) {\n try {\n var nodes = document.querySelectorAll(str);\n return nodes;\n } catch(e) {\n return;\n }\n}\n\n// Arrays\n\nfunction filterArray(arr, callback) {\n var len = arr.length;\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n var result = [];\n for (var i = 0; i < len; i++) {\n if (i in arr) {\n var val = arr[i];\n if (callback.call(thisArg, val, i, arr)) {\n result.push(val);\n }\n }\n }\n return result;\n}\n\nfunction flattenArray(arr) {\n return arr.reduce(function (a, b) { return a.concat(is.arr(b) ? flattenArray(b) : b); }, []);\n}\n\nfunction toArray(o) {\n if (is.arr(o)) { return o; }\n if (is.str(o)) { o = selectString(o) || o; }\n if (o instanceof NodeList || o instanceof HTMLCollection) { return [].slice.call(o); }\n return [o];\n}\n\nfunction arrayContains(arr, val) {\n return arr.some(function (a) { return a === val; });\n}\n\n// Objects\n\nfunction cloneObject(o) {\n var clone = {};\n for (var p in o) { clone[p] = o[p]; }\n return clone;\n}\n\nfunction replaceObjectProps(o1, o2) {\n var o = cloneObject(o1);\n for (var p in o1) { o[p] = o2.hasOwnProperty(p) ? o2[p] : o1[p]; }\n return o;\n}\n\nfunction mergeObjects(o1, o2) {\n var o = cloneObject(o1);\n for (var p in o2) { o[p] = is.und(o1[p]) ? o2[p] : o1[p]; }\n return o;\n}\n\n// Colors\n\nfunction rgbToRgba(rgbValue) {\n var rgb = /rgb\\((\\d+,\\s*[\\d]+,\\s*[\\d]+)\\)/g.exec(rgbValue);\n return rgb ? (\"rgba(\" + (rgb[1]) + \",1)\") : rgbValue;\n}\n\nfunction hexToRgba(hexValue) {\n var rgx = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n var hex = hexValue.replace(rgx, function (m, r, g, b) { return r + r + g + g + b + b; } );\n var rgb = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n var r = parseInt(rgb[1], 16);\n var g = parseInt(rgb[2], 16);\n var b = parseInt(rgb[3], 16);\n return (\"rgba(\" + r + \",\" + g + \",\" + b + \",1)\");\n}\n\nfunction hslToRgba(hslValue) {\n var hsl = /hsl\\((\\d+),\\s*([\\d.]+)%,\\s*([\\d.]+)%\\)/g.exec(hslValue) || /hsla\\((\\d+),\\s*([\\d.]+)%,\\s*([\\d.]+)%,\\s*([\\d.]+)\\)/g.exec(hslValue);\n var h = parseInt(hsl[1], 10) / 360;\n var s = parseInt(hsl[2], 10) / 100;\n var l = parseInt(hsl[3], 10) / 100;\n var a = hsl[4] || 1;\n function hue2rgb(p, q, t) {\n if (t < 0) { t += 1; }\n if (t > 1) { t -= 1; }\n if (t < 1/6) { return p + (q - p) * 6 * t; }\n if (t < 1/2) { return q; }\n if (t < 2/3) { return p + (q - p) * (2/3 - t) * 6; }\n return p;\n }\n var r, g, b;\n if (s == 0) {\n r = g = b = l;\n } else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1/3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1/3);\n }\n return (\"rgba(\" + (r * 255) + \",\" + (g * 255) + \",\" + (b * 255) + \",\" + a + \")\");\n}\n\nfunction colorToRgb(val) {\n if (is.rgb(val)) { return rgbToRgba(val); }\n if (is.hex(val)) { return hexToRgba(val); }\n if (is.hsl(val)) { return hslToRgba(val); }\n}\n\n// Units\n\nfunction getUnit(val) {\n var split = /[+-]?\\d*\\.?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?(%|px|pt|em|rem|in|cm|mm|ex|ch|pc|vw|vh|vmin|vmax|deg|rad|turn)?$/.exec(val);\n if (split) { return split[1]; }\n}\n\nfunction getTransformUnit(propName) {\n if (stringContains(propName, 'translate') || propName === 'perspective') { return 'px'; }\n if (stringContains(propName, 'rotate') || stringContains(propName, 'skew')) { return 'deg'; }\n}\n\n// Values\n\nfunction getFunctionValue(val, animatable) {\n if (!is.fnc(val)) { return val; }\n return val(animatable.target, animatable.id, animatable.total);\n}\n\nfunction getAttribute(el, prop) {\n return el.getAttribute(prop);\n}\n\nfunction convertPxToUnit(el, value, unit) {\n var valueUnit = getUnit(value);\n if (arrayContains([unit, 'deg', 'rad', 'turn'], valueUnit)) { return value; }\n var cached = cache.CSS[value + unit];\n if (!is.und(cached)) { return cached; }\n var baseline = 100;\n var tempEl = document.createElement(el.tagName);\n var parentEl = (el.parentNode && (el.parentNode !== document)) ? el.parentNode : document.body;\n parentEl.appendChild(tempEl);\n tempEl.style.position = 'absolute';\n tempEl.style.width = baseline + unit;\n var factor = baseline / tempEl.offsetWidth;\n parentEl.removeChild(tempEl);\n var convertedUnit = factor * parseFloat(value);\n cache.CSS[value + unit] = convertedUnit;\n return convertedUnit;\n}\n\nfunction getCSSValue(el, prop, unit) {\n if (prop in el.style) {\n var uppercasePropName = prop.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n var value = el.style[prop] || getComputedStyle(el).getPropertyValue(uppercasePropName) || '0';\n return unit ? convertPxToUnit(el, value, unit) : value;\n }\n}\n\nfunction getAnimationType(el, prop) {\n if (is.dom(el) && !is.inp(el) && (!is.nil(getAttribute(el, prop)) || (is.svg(el) && el[prop]))) { return 'attribute'; }\n if (is.dom(el) && arrayContains(validTransforms, prop)) { return 'transform'; }\n if (is.dom(el) && (prop !== 'transform' && getCSSValue(el, prop))) { return 'css'; }\n if (el[prop] != null) { return 'object'; }\n}\n\nfunction getElementTransforms(el) {\n if (!is.dom(el)) { return; }\n var str = el.style.transform || '';\n var reg = /(\\w+)\\(([^)]*)\\)/g;\n var transforms = new Map();\n var m; while (m = reg.exec(str)) { transforms.set(m[1], m[2]); }\n return transforms;\n}\n\nfunction getTransformValue(el, propName, animatable, unit) {\n var defaultVal = stringContains(propName, 'scale') ? 1 : 0 + getTransformUnit(propName);\n var value = getElementTransforms(el).get(propName) || defaultVal;\n if (animatable) {\n animatable.transforms.list.set(propName, value);\n animatable.transforms['last'] = propName;\n }\n return unit ? convertPxToUnit(el, value, unit) : value;\n}\n\nfunction getOriginalTargetValue(target, propName, unit, animatable) {\n switch (getAnimationType(target, propName)) {\n case 'transform': return getTransformValue(target, propName, animatable, unit);\n case 'css': return getCSSValue(target, propName, unit);\n case 'attribute': return getAttribute(target, propName);\n default: return target[propName] || 0;\n }\n}\n\nfunction getRelativeValue(to, from) {\n var operator = /^(\\*=|\\+=|-=)/.exec(to);\n if (!operator) { return to; }\n var u = getUnit(to) || 0;\n var x = parseFloat(from);\n var y = parseFloat(to.replace(operator[0], ''));\n switch (operator[0][0]) {\n case '+': return x + y + u;\n case '-': return x - y + u;\n case '*': return x * y + u;\n }\n}\n\nfunction validateValue(val, unit) {\n if (is.col(val)) { return colorToRgb(val); }\n if (/\\s/g.test(val)) { return val; }\n var originalUnit = getUnit(val);\n var unitLess = originalUnit ? val.substr(0, val.length - originalUnit.length) : val;\n if (unit) { return unitLess + unit; }\n return unitLess;\n}\n\n// getTotalLength() equivalent for circle, rect, polyline, polygon and line shapes\n// adapted from https://gist.github.com/SebLambla/3e0550c496c236709744\n\nfunction getDistance(p1, p2) {\n return Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2));\n}\n\nfunction getCircleLength(el) {\n return Math.PI * 2 * getAttribute(el, 'r');\n}\n\nfunction getRectLength(el) {\n return (getAttribute(el, 'width') * 2) + (getAttribute(el, 'height') * 2);\n}\n\nfunction getLineLength(el) {\n return getDistance(\n {x: getAttribute(el, 'x1'), y: getAttribute(el, 'y1')}, \n {x: getAttribute(el, 'x2'), y: getAttribute(el, 'y2')}\n );\n}\n\nfunction getPolylineLength(el) {\n var points = el.points;\n var totalLength = 0;\n var previousPos;\n for (var i = 0 ; i < points.numberOfItems; i++) {\n var currentPos = points.getItem(i);\n if (i > 0) { totalLength += getDistance(previousPos, currentPos); }\n previousPos = currentPos;\n }\n return totalLength;\n}\n\nfunction getPolygonLength(el) {\n var points = el.points;\n return getPolylineLength(el) + getDistance(points.getItem(points.numberOfItems - 1), points.getItem(0));\n}\n\n// Path animation\n\nfunction getTotalLength(el) {\n if (el.getTotalLength) { return el.getTotalLength(); }\n switch(el.tagName.toLowerCase()) {\n case 'circle': return getCircleLength(el);\n case 'rect': return getRectLength(el);\n case 'line': return getLineLength(el);\n case 'polyline': return getPolylineLength(el);\n case 'polygon': return getPolygonLength(el);\n }\n}\n\nfunction setDashoffset(el) {\n var pathLength = getTotalLength(el);\n el.setAttribute('stroke-dasharray', pathLength);\n return pathLength;\n}\n\n// Motion path\n\nfunction getParentSvgEl(el) {\n var parentEl = el.parentNode;\n while (is.svg(parentEl)) {\n if (!is.svg(parentEl.parentNode)) { break; }\n parentEl = parentEl.parentNode;\n }\n return parentEl;\n}\n\nfunction getParentSvg(pathEl, svgData) {\n var svg = svgData || {};\n var parentSvgEl = svg.el || getParentSvgEl(pathEl);\n var rect = parentSvgEl.getBoundingClientRect();\n var viewBoxAttr = getAttribute(parentSvgEl, 'viewBox');\n var width = rect.width;\n var height = rect.height;\n var viewBox = svg.viewBox || (viewBoxAttr ? viewBoxAttr.split(' ') : [0, 0, width, height]);\n return {\n el: parentSvgEl,\n viewBox: viewBox,\n x: viewBox[0] / 1,\n y: viewBox[1] / 1,\n w: width,\n h: height,\n vW: viewBox[2],\n vH: viewBox[3]\n }\n}\n\nfunction getPath(path, percent) {\n var pathEl = is.str(path) ? selectString(path)[0] : path;\n var p = percent || 100;\n return function(property) {\n return {\n property: property,\n el: pathEl,\n svg: getParentSvg(pathEl),\n totalLength: getTotalLength(pathEl) * (p / 100)\n }\n }\n}\n\nfunction getPathProgress(path, progress, isPathTargetInsideSVG) {\n function point(offset) {\n if ( offset === void 0 ) offset = 0;\n\n var l = progress + offset >= 1 ? progress + offset : 0;\n return path.el.getPointAtLength(l);\n }\n var svg = getParentSvg(path.el, path.svg);\n var p = point();\n var p0 = point(-1);\n var p1 = point(+1);\n var scaleX = isPathTargetInsideSVG ? 1 : svg.w / svg.vW;\n var scaleY = isPathTargetInsideSVG ? 1 : svg.h / svg.vH;\n switch (path.property) {\n case 'x': return (p.x - svg.x) * scaleX;\n case 'y': return (p.y - svg.y) * scaleY;\n case 'angle': return Math.atan2(p1.y - p0.y, p1.x - p0.x) * 180 / Math.PI;\n }\n}\n\n// Decompose value\n\nfunction decomposeValue(val, unit) {\n // const rgx = /-?\\d*\\.?\\d+/g; // handles basic numbers\n // const rgx = /[+-]?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?/g; // handles exponents notation\n var rgx = /[+-]?\\d*\\.?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?/g; // handles exponents notation\n var value = validateValue((is.pth(val) ? val.totalLength : val), unit) + '';\n return {\n original: value,\n numbers: value.match(rgx) ? value.match(rgx).map(Number) : [0],\n strings: (is.str(val) || unit) ? value.split(rgx) : []\n }\n}\n\n// Animatables\n\nfunction parseTargets(targets) {\n var targetsArray = targets ? (flattenArray(is.arr(targets) ? targets.map(toArray) : toArray(targets))) : [];\n return filterArray(targetsArray, function (item, pos, self) { return self.indexOf(item) === pos; });\n}\n\nfunction getAnimatables(targets) {\n var parsed = parseTargets(targets);\n return parsed.map(function (t, i) {\n return {target: t, id: i, total: parsed.length, transforms: { list: getElementTransforms(t) } };\n });\n}\n\n// Properties\n\nfunction normalizePropertyTweens(prop, tweenSettings) {\n var settings = cloneObject(tweenSettings);\n // Override duration if easing is a spring\n if (/^spring/.test(settings.easing)) { settings.duration = spring(settings.easing); }\n if (is.arr(prop)) {\n var l = prop.length;\n var isFromTo = (l === 2 && !is.obj(prop[0]));\n if (!isFromTo) {\n // Duration divided by the number of tweens\n if (!is.fnc(tweenSettings.duration)) { settings.duration = tweenSettings.duration / l; }\n } else {\n // Transform [from, to] values shorthand to a valid tween value\n prop = {value: prop};\n }\n }\n var propArray = is.arr(prop) ? prop : [prop];\n return propArray.map(function (v, i) {\n var obj = (is.obj(v) && !is.pth(v)) ? v : {value: v};\n // Default delay value should only be applied to the first tween\n if (is.und(obj.delay)) { obj.delay = !i ? tweenSettings.delay : 0; }\n // Default endDelay value should only be applied to the last tween\n if (is.und(obj.endDelay)) { obj.endDelay = i === propArray.length - 1 ? tweenSettings.endDelay : 0; }\n return obj;\n }).map(function (k) { return mergeObjects(k, settings); });\n}\n\n\nfunction flattenKeyframes(keyframes) {\n var propertyNames = filterArray(flattenArray(keyframes.map(function (key) { return Object.keys(key); })), function (p) { return is.key(p); })\n .reduce(function (a,b) { if (a.indexOf(b) < 0) { a.push(b); } return a; }, []);\n var properties = {};\n var loop = function ( i ) {\n var propName = propertyNames[i];\n properties[propName] = keyframes.map(function (key) {\n var newKey = {};\n for (var p in key) {\n if (is.key(p)) {\n if (p == propName) { newKey.value = key[p]; }\n } else {\n newKey[p] = key[p];\n }\n }\n return newKey;\n });\n };\n\n for (var i = 0; i < propertyNames.length; i++) loop( i );\n return properties;\n}\n\nfunction getProperties(tweenSettings, params) {\n var properties = [];\n var keyframes = params.keyframes;\n if (keyframes) { params = mergeObjects(flattenKeyframes(keyframes), params); }\n for (var p in params) {\n if (is.key(p)) {\n properties.push({\n name: p,\n tweens: normalizePropertyTweens(params[p], tweenSettings)\n });\n }\n }\n return properties;\n}\n\n// Tweens\n\nfunction normalizeTweenValues(tween, animatable) {\n var t = {};\n for (var p in tween) {\n var value = getFunctionValue(tween[p], animatable);\n if (is.arr(value)) {\n value = value.map(function (v) { return getFunctionValue(v, animatable); });\n if (value.length === 1) { value = value[0]; }\n }\n t[p] = value;\n }\n t.duration = parseFloat(t.duration);\n t.delay = parseFloat(t.delay);\n return t;\n}\n\nfunction normalizeTweens(prop, animatable) {\n var previousTween;\n return prop.tweens.map(function (t) {\n var tween = normalizeTweenValues(t, animatable);\n var tweenValue = tween.value;\n var to = is.arr(tweenValue) ? tweenValue[1] : tweenValue;\n var toUnit = getUnit(to);\n var originalValue = getOriginalTargetValue(animatable.target, prop.name, toUnit, animatable);\n var previousValue = previousTween ? previousTween.to.original : originalValue;\n var from = is.arr(tweenValue) ? tweenValue[0] : previousValue;\n var fromUnit = getUnit(from) || getUnit(originalValue);\n var unit = toUnit || fromUnit;\n if (is.und(to)) { to = previousValue; }\n tween.from = decomposeValue(from, unit);\n tween.to = decomposeValue(getRelativeValue(to, from), unit);\n tween.start = previousTween ? previousTween.end : 0;\n tween.end = tween.start + tween.delay + tween.duration + tween.endDelay;\n tween.easing = parseEasings(tween.easing, tween.duration);\n tween.isPath = is.pth(tweenValue);\n tween.isPathTargetInsideSVG = tween.isPath && is.svg(animatable.target);\n tween.isColor = is.col(tween.from.original);\n if (tween.isColor) { tween.round = 1; }\n previousTween = tween;\n return tween;\n });\n}\n\n// Tween progress\n\nvar setProgressValue = {\n css: function (t, p, v) { return t.style[p] = v; },\n attribute: function (t, p, v) { return t.setAttribute(p, v); },\n object: function (t, p, v) { return t[p] = v; },\n transform: function (t, p, v, transforms, manual) {\n transforms.list.set(p, v);\n if (p === transforms.last || manual) {\n var str = '';\n transforms.list.forEach(function (value, prop) { str += prop + \"(\" + value + \") \"; });\n t.style.transform = str;\n }\n }\n};\n\n// Set Value helper\n\nfunction setTargetsValue(targets, properties) {\n var animatables = getAnimatables(targets);\n animatables.forEach(function (animatable) {\n for (var property in properties) {\n var value = getFunctionValue(properties[property], animatable);\n var target = animatable.target;\n var valueUnit = getUnit(value);\n var originalValue = getOriginalTargetValue(target, property, valueUnit, animatable);\n var unit = valueUnit || getUnit(originalValue);\n var to = getRelativeValue(validateValue(value, unit), originalValue);\n var animType = getAnimationType(target, property);\n setProgressValue[animType](target, property, to, animatable.transforms, true);\n }\n });\n}\n\n// Animations\n\nfunction createAnimation(animatable, prop) {\n var animType = getAnimationType(animatable.target, prop.name);\n if (animType) {\n var tweens = normalizeTweens(prop, animatable);\n var lastTween = tweens[tweens.length - 1];\n return {\n type: animType,\n property: prop.name,\n animatable: animatable,\n tweens: tweens,\n duration: lastTween.end,\n delay: tweens[0].delay,\n endDelay: lastTween.endDelay\n }\n }\n}\n\nfunction getAnimations(animatables, properties) {\n return filterArray(flattenArray(animatables.map(function (animatable) {\n return properties.map(function (prop) {\n return createAnimation(animatable, prop);\n });\n })), function (a) { return !is.und(a); });\n}\n\n// Create Instance\n\nfunction getInstanceTimings(animations, tweenSettings) {\n var animLength = animations.length;\n var getTlOffset = function (anim) { return anim.timelineOffset ? anim.timelineOffset : 0; };\n var timings = {};\n timings.duration = animLength ? Math.max.apply(Math, animations.map(function (anim) { return getTlOffset(anim) + anim.duration; })) : tweenSettings.duration;\n timings.delay = animLength ? Math.min.apply(Math, animations.map(function (anim) { return getTlOffset(anim) + anim.delay; })) : tweenSettings.delay;\n timings.endDelay = animLength ? timings.duration - Math.max.apply(Math, animations.map(function (anim) { return getTlOffset(anim) + anim.duration - anim.endDelay; })) : tweenSettings.endDelay;\n return timings;\n}\n\nvar instanceID = 0;\n\nfunction createNewInstance(params) {\n var instanceSettings = replaceObjectProps(defaultInstanceSettings, params);\n var tweenSettings = replaceObjectProps(defaultTweenSettings, params);\n var properties = getProperties(tweenSettings, params);\n var animatables = getAnimatables(params.targets);\n var animations = getAnimations(animatables, properties);\n var timings = getInstanceTimings(animations, tweenSettings);\n var id = instanceID;\n instanceID++;\n return mergeObjects(instanceSettings, {\n id: id,\n children: [],\n animatables: animatables,\n animations: animations,\n duration: timings.duration,\n delay: timings.delay,\n endDelay: timings.endDelay\n });\n}\n\n// Core\n\nvar activeInstances = [];\n\nvar engine = (function () {\n var raf;\n\n function play() {\n if (!raf && (!isDocumentHidden() || !anime.suspendWhenDocumentHidden) && activeInstances.length > 0) {\n raf = requestAnimationFrame(step);\n }\n }\n function step(t) {\n // memo on algorithm issue:\n // dangerous iteration over mutable `activeInstances`\n // (that collection may be updated from within callbacks of `tick`-ed animation instances)\n var activeInstancesLength = activeInstances.length;\n var i = 0;\n while (i < activeInstancesLength) {\n var activeInstance = activeInstances[i];\n if (!activeInstance.paused) {\n activeInstance.tick(t);\n i++;\n } else {\n activeInstances.splice(i, 1);\n activeInstancesLength--;\n }\n }\n raf = i > 0 ? requestAnimationFrame(step) : undefined;\n }\n\n function handleVisibilityChange() {\n if (!anime.suspendWhenDocumentHidden) { return; }\n\n if (isDocumentHidden()) {\n // suspend ticks\n raf = cancelAnimationFrame(raf);\n } else { // is back to active tab\n // first adjust animations to consider the time that ticks were suspended\n activeInstances.forEach(\n function (instance) { return instance ._onDocumentVisibility(); }\n );\n engine();\n }\n }\n if (typeof document !== 'undefined') {\n document.addEventListener('visibilitychange', handleVisibilityChange);\n }\n\n return play;\n})();\n\nfunction isDocumentHidden() {\n return !!document && document.hidden;\n}\n\n// Public Instance\n\nfunction anime(params) {\n if ( params === void 0 ) params = {};\n\n\n var startTime = 0, lastTime = 0, now = 0;\n var children, childrenLength = 0;\n var resolve = null;\n\n function makePromise(instance) {\n var promise = window.Promise && new Promise(function (_resolve) { return resolve = _resolve; });\n instance.finished = promise;\n return promise;\n }\n\n var instance = createNewInstance(params);\n var promise = makePromise(instance);\n\n function toggleInstanceDirection() {\n var direction = instance.direction;\n if (direction !== 'alternate') {\n instance.direction = direction !== 'normal' ? 'normal' : 'reverse';\n }\n instance.reversed = !instance.reversed;\n children.forEach(function (child) { return child.reversed = instance.reversed; });\n }\n\n function adjustTime(time) {\n return instance.reversed ? instance.duration - time : time;\n }\n\n function resetTime() {\n startTime = 0;\n lastTime = adjustTime(instance.currentTime) * (1 / anime.speed);\n }\n\n function seekChild(time, child) {\n if (child) { child.seek(time - child.timelineOffset); }\n }\n\n function syncInstanceChildren(time) {\n if (!instance.reversePlayback) {\n for (var i = 0; i < childrenLength; i++) { seekChild(time, children[i]); }\n } else {\n for (var i$1 = childrenLength; i$1--;) { seekChild(time, children[i$1]); }\n }\n }\n\n function setAnimationsProgress(insTime) {\n var i = 0;\n var animations = instance.animations;\n var animationsLength = animations.length;\n while (i < animationsLength) {\n var anim = animations[i];\n var animatable = anim.animatable;\n var tweens = anim.tweens;\n var tweenLength = tweens.length - 1;\n var tween = tweens[tweenLength];\n // Only check for keyframes if there is more than one tween\n if (tweenLength) { tween = filterArray(tweens, function (t) { return (insTime < t.end); })[0] || tween; }\n var elapsed = minMax(insTime - tween.start - tween.delay, 0, tween.duration) / tween.duration;\n var eased = isNaN(elapsed) ? 1 : tween.easing(elapsed);\n var strings = tween.to.strings;\n var round = tween.round;\n var numbers = [];\n var toNumbersLength = tween.to.numbers.length;\n var progress = (void 0);\n for (var n = 0; n < toNumbersLength; n++) {\n var value = (void 0);\n var toNumber = tween.to.numbers[n];\n var fromNumber = tween.from.numbers[n] || 0;\n if (!tween.isPath) {\n value = fromNumber + (eased * (toNumber - fromNumber));\n } else {\n value = getPathProgress(tween.value, eased * toNumber, tween.isPathTargetInsideSVG);\n }\n if (round) {\n if (!(tween.isColor && n > 2)) {\n value = Math.round(value * round) / round;\n }\n }\n numbers.push(value);\n }\n // Manual Array.reduce for better performances\n var stringsLength = strings.length;\n if (!stringsLength) {\n progress = numbers[0];\n } else {\n progress = strings[0];\n for (var s = 0; s < stringsLength; s++) {\n var a = strings[s];\n var b = strings[s + 1];\n var n$1 = numbers[s];\n if (!isNaN(n$1)) {\n if (!b) {\n progress += n$1 + ' ';\n } else {\n progress += n$1 + b;\n }\n }\n }\n }\n setProgressValue[anim.type](animatable.target, anim.property, progress, animatable.transforms);\n anim.currentValue = progress;\n i++;\n }\n }\n\n function setCallback(cb) {\n if (instance[cb] && !instance.passThrough) { instance[cb](instance); }\n }\n\n function countIteration() {\n if (instance.remaining && instance.remaining !== true) {\n instance.remaining--;\n }\n }\n\n function setInstanceProgress(engineTime) {\n var insDuration = instance.duration;\n var insDelay = instance.delay;\n var insEndDelay = insDuration - instance.endDelay;\n var insTime = adjustTime(engineTime);\n instance.progress = minMax((insTime / insDuration) * 100, 0, 100);\n instance.reversePlayback = insTime < instance.currentTime;\n if (children) { syncInstanceChildren(insTime); }\n if (!instance.began && instance.currentTime > 0) {\n instance.began = true;\n setCallback('begin');\n }\n if (!instance.loopBegan && instance.currentTime > 0) {\n instance.loopBegan = true;\n setCallback('loopBegin');\n }\n if (insTime <= insDelay && instance.currentTime !== 0) {\n setAnimationsProgress(0);\n }\n if ((insTime >= insEndDelay && instance.currentTime !== insDuration) || !insDuration) {\n setAnimationsProgress(insDuration);\n }\n if (insTime > insDelay && insTime < insEndDelay) {\n if (!instance.changeBegan) {\n instance.changeBegan = true;\n instance.changeCompleted = false;\n setCallback('changeBegin');\n }\n setCallback('change');\n setAnimationsProgress(insTime);\n } else {\n if (instance.changeBegan) {\n instance.changeCompleted = true;\n instance.changeBegan = false;\n setCallback('changeComplete');\n }\n }\n instance.currentTime = minMax(insTime, 0, insDuration);\n if (instance.began) { setCallback('update'); }\n if (engineTime >= insDuration) {\n lastTime = 0;\n countIteration();\n if (!instance.remaining) {\n instance.paused = true;\n if (!instance.completed) {\n instance.completed = true;\n setCallback('loopComplete');\n setCallback('complete');\n if (!instance.passThrough && 'Promise' in window) {\n resolve();\n promise = makePromise(instance);\n }\n }\n } else {\n startTime = now;\n setCallback('loopComplete');\n instance.loopBegan = false;\n if (instance.direction === 'alternate') {\n toggleInstanceDirection();\n }\n }\n }\n }\n\n instance.reset = function() {\n var direction = instance.direction;\n instance.passThrough = false;\n instance.currentTime = 0;\n instance.progress = 0;\n instance.paused = true;\n instance.began = false;\n instance.loopBegan = false;\n instance.changeBegan = false;\n instance.completed = false;\n instance.changeCompleted = false;\n instance.reversePlayback = false;\n instance.reversed = direction === 'reverse';\n instance.remaining = instance.loop;\n children = instance.children;\n childrenLength = children.length;\n for (var i = childrenLength; i--;) { instance.children[i].reset(); }\n if (instance.reversed && instance.loop !== true || (direction === 'alternate' && instance.loop === 1)) { instance.remaining++; }\n setAnimationsProgress(instance.reversed ? instance.duration : 0);\n };\n\n // internal method (for engine) to adjust animation timings before restoring engine ticks (rAF)\n instance._onDocumentVisibility = resetTime;\n\n // Set Value helper\n\n instance.set = function(targets, properties) {\n setTargetsValue(targets, properties);\n return instance;\n };\n\n instance.tick = function(t) {\n now = t;\n if (!startTime) { startTime = now; }\n setInstanceProgress((now + (lastTime - startTime)) * anime.speed);\n };\n\n instance.seek = function(time) {\n setInstanceProgress(adjustTime(time));\n };\n\n instance.pause = function() {\n instance.paused = true;\n resetTime();\n };\n\n instance.play = function() {\n if (!instance.paused) { return; }\n if (instance.completed) { instance.reset(); }\n instance.paused = false;\n activeInstances.push(instance);\n resetTime();\n engine();\n };\n\n instance.reverse = function() {\n toggleInstanceDirection();\n instance.completed = instance.reversed ? false : true;\n resetTime();\n };\n\n instance.restart = function() {\n instance.reset();\n instance.play();\n };\n\n instance.remove = function(targets) {\n var targetsArray = parseTargets(targets);\n removeTargetsFromInstance(targetsArray, instance);\n };\n\n instance.reset();\n\n if (instance.autoplay) { instance.play(); }\n\n return instance;\n\n}\n\n// Remove targets from animation\n\nfunction removeTargetsFromAnimations(targetsArray, animations) {\n for (var a = animations.length; a--;) {\n if (arrayContains(targetsArray, animations[a].animatable.target)) {\n animations.splice(a, 1);\n }\n }\n}\n\nfunction removeTargetsFromInstance(targetsArray, instance) {\n var animations = instance.animations;\n var children = instance.children;\n removeTargetsFromAnimations(targetsArray, animations);\n for (var c = children.length; c--;) {\n var child = children[c];\n var childAnimations = child.animations;\n removeTargetsFromAnimations(targetsArray, childAnimations);\n if (!childAnimations.length && !child.children.length) { children.splice(c, 1); }\n }\n if (!animations.length && !children.length) { instance.pause(); }\n}\n\nfunction removeTargetsFromActiveInstances(targets) {\n var targetsArray = parseTargets(targets);\n for (var i = activeInstances.length; i--;) {\n var instance = activeInstances[i];\n removeTargetsFromInstance(targetsArray, instance);\n }\n}\n\n// Stagger helpers\n\nfunction stagger(val, params) {\n if ( params === void 0 ) params = {};\n\n var direction = params.direction || 'normal';\n var easing = params.easing ? parseEasings(params.easing) : null;\n var grid = params.grid;\n var axis = params.axis;\n var fromIndex = params.from || 0;\n var fromFirst = fromIndex === 'first';\n var fromCenter = fromIndex === 'center';\n var fromLast = fromIndex === 'last';\n var isRange = is.arr(val);\n var val1 = isRange ? parseFloat(val[0]) : parseFloat(val);\n var val2 = isRange ? parseFloat(val[1]) : 0;\n var unit = getUnit(isRange ? val[1] : val) || 0;\n var start = params.start || 0 + (isRange ? val1 : 0);\n var values = [];\n var maxValue = 0;\n return function (el, i, t) {\n if (fromFirst) { fromIndex = 0; }\n if (fromCenter) { fromIndex = (t - 1) / 2; }\n if (fromLast) { fromIndex = t - 1; }\n if (!values.length) {\n for (var index = 0; index < t; index++) {\n if (!grid) {\n values.push(Math.abs(fromIndex - index));\n } else {\n var fromX = !fromCenter ? fromIndex%grid[0] : (grid[0]-1)/2;\n var fromY = !fromCenter ? Math.floor(fromIndex/grid[0]) : (grid[1]-1)/2;\n var toX = index%grid[0];\n var toY = Math.floor(index/grid[0]);\n var distanceX = fromX - toX;\n var distanceY = fromY - toY;\n var value = Math.sqrt(distanceX * distanceX + distanceY * distanceY);\n if (axis === 'x') { value = -distanceX; }\n if (axis === 'y') { value = -distanceY; }\n values.push(value);\n }\n maxValue = Math.max.apply(Math, values);\n }\n if (easing) { values = values.map(function (val) { return easing(val / maxValue) * maxValue; }); }\n if (direction === 'reverse') { values = values.map(function (val) { return axis ? (val < 0) ? val * -1 : -val : Math.abs(maxValue - val); }); }\n }\n var spacing = isRange ? (val2 - val1) / maxValue : val1;\n return start + (spacing * (Math.round(values[i] * 100) / 100)) + unit;\n }\n}\n\n// Timeline\n\nfunction timeline(params) {\n if ( params === void 0 ) params = {};\n\n var tl = anime(params);\n tl.duration = 0;\n tl.add = function(instanceParams, timelineOffset) {\n var tlIndex = activeInstances.indexOf(tl);\n var children = tl.children;\n if (tlIndex > -1) { activeInstances.splice(tlIndex, 1); }\n function passThrough(ins) { ins.passThrough = true; }\n for (var i = 0; i < children.length; i++) { passThrough(children[i]); }\n var insParams = mergeObjects(instanceParams, replaceObjectProps(defaultTweenSettings, params));\n insParams.targets = insParams.targets || params.targets;\n var tlDuration = tl.duration;\n insParams.autoplay = false;\n insParams.direction = tl.direction;\n insParams.timelineOffset = is.und(timelineOffset) ? tlDuration : getRelativeValue(timelineOffset, tlDuration);\n passThrough(tl);\n tl.seek(insParams.timelineOffset);\n var ins = anime(insParams);\n passThrough(ins);\n children.push(ins);\n var timings = getInstanceTimings(children, params);\n tl.delay = timings.delay;\n tl.endDelay = timings.endDelay;\n tl.duration = timings.duration;\n tl.seek(0);\n tl.reset();\n if (tl.autoplay) { tl.play(); }\n return tl;\n };\n return tl;\n}\n\nanime.version = '3.2.1';\nanime.speed = 1;\n// TODO:#review: naming, documentation\nanime.suspendWhenDocumentHidden = true;\nanime.running = activeInstances;\nanime.remove = removeTargetsFromActiveInstances;\nanime.get = getOriginalTargetValue;\nanime.set = setTargetsValue;\nanime.convertPx = convertPxToUnit;\nanime.path = getPath;\nanime.setDashoffset = setDashoffset;\nanime.stagger = stagger;\nanime.timeline = timeline;\nanime.easing = parseEasings;\nanime.penner = penner;\nanime.random = function (min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; };\n\nexport default anime;\n", "//* https://tobiasahlin.com/moving-letters\nimport ApplicationController from \"../application_controller.js\";\nimport anime from \"animejs\";\n\nexport default class extends ApplicationController {\n static values = {\n effect: { type: Number, default: 0 },\n delay: { type: Number, default: 0 },\n loop: { type: Boolean, default: false },\n styled: { type: Boolean, default: false },\n loopDelay: { type: Number, default: 0 },\n };\n\n connect() {\n this.log_function(\"connect\");\n\n const force_motion = true;\n\n if(this.prefers_reduced_motion && !force_motion){\n this.dispatch(\"ahoy_trackEvent\", { detail: { type: \"accessibility\", action: \"prefers reduced motion\" }, prefix: false });\n } else{\n let effect = false;\n this.timeout = false;\n switch (this.effectValue) {\n case 0: effect = false; break;\n case 1: effect = this.effect_1.bind(this); break;\n case 2: effect = this.effect_2.bind(this); break;\n case 3: effect = this.effect_3.bind(this); break;\n case 4: effect = this.effect_4.bind(this); break;\n case 5: effect = this.effect_5.bind(this); break;\n case 6: effect = this.effect_6.bind(this); break;\n case 7: effect = this.effect_7.bind(this); break;\n case 8: effect = this.effect_8.bind(this); break;\n case 9: effect = this.effect_9.bind(this); break;\n case 10: effect = this.effect_10.bind(this); break;\n case 11: effect = this.effect_11.bind(this); break;\n case 12: effect = this.effect_12.bind(this); break;\n case 13: effect = this.effect_13.bind(this); break;\n case 14: effect = this.effect_14.bind(this); break;\n case 15: effect = this.effect_15.bind(this); break;\n case 16: effect = this.effect_16.bind(this); break;\n default: this.log_error_function(\"connect\", \"Please select valid animation\"); break;\n }\n\n if (effect) {\n this.hide();\n this.timeout = setTimeout(effect, this.delayValue);\n }\n\n }\n }\n\n hide(){\n this.log_function(\"hide\");\n\n this.initial_display_value = this.element.style.display;\n this.element.style.opacity = 0;\n }\n\n show(){\n this.log_function(\"show\");\n\n this.element.style.opacity = 1;\n }\n\n disconnect(){\n this.log_function(\"disconnect\");\n\n if(this.timeout){\n clearTimeout(this.timeout);\n }\n }\n\n\n //* Thursday\n effect_1(){\n this.log_function(\"effect_1\");\n this.letters = this.element.getElementsByClassName(\"letter\");\n this.lines = this.element.getElementsByClassName(\"line\");\n\n this.timeline = anime.timeline({ loop: this.loopValue })\n .add({\n targets: this.letters,\n scale: [0.3, 1],\n opacity: [0, 1],\n translateZ: 0,\n easing: \"easeOutExpo\",\n duration: 600,\n delay: (el, i) => 70 * ( i + 1),\n })\n .add({\n targets: this.lines,\n scaleX: [0, 1],\n opacity: [0.5, 1],\n easing: \"easeOutExpo\",\n duration: 700,\n offset: \"-=875\",\n endDelay: this.loopDelayValue,\n });\n\n this.show();\n }\n\n\n //* Sunny Mornings\n effect_2(){\n this.log_function(\"effect_2\");\n this.letters = this.element.getElementsByClassName(\"letter\");\n\n this.timeline = anime.timeline({ loop: this.loopValue })\n .add({\n targets: this.letters,\n scale: [4, 1],\n opacity: [0, 1],\n translateZ: 0,\n easing: \"easeOutExpo\",\n duration: 950,\n delay: (el, i) => 70 * i,\n endDelay: this.loopDelayValue,\n });\n\n this.show();\n }\n\n\n //* Great Thinkers\n effect_3(){\n this.log_function(\"effect_3\");\n this.letters = this.element.getElementsByClassName(\"letter\");\n\n this.timeline = anime.timeline({ loop: this.loopValue })\n .add({\n targets: this.letters,\n opacity: [0, 1],\n easing: \"easeInOutQuad\",\n duration: 500,\n delay: (el, i) => 20 * (i + 1),\n endDelay: this.loopDelayValue,\n });\n\n this.show();\n }\n\n\n //* Ready Set Go\n effect_4(){\n this.log_function(\"effect_4\");\n this.words = this.element.getElementsByClassName(\"word\");\n\n this.timeline = anime.timeline({ loop: this.loopValue });\n Array.from(this.words).forEach((word, index) => {\n const delay = 350 * index;\n\n this.timeline\n .add({\n targets: word,\n opacity: [0, 1],\n scale: [0, 1],\n duration: 800,\n easing: \"easeInExpo\",\n delay: delay,\n })\n .add({\n targets: word,\n opacity: [1, 0],\n scale: [1, 0],\n duration: 800,\n easing: \"easeInExpo\",\n delay: delay,\n });\n });\n\n this.timeline.add({\n targets: this.words,\n opacity: [0, 1],\n scale: [0, 1],\n duration: 600,\n easing: \"easeInExpo\",\n delay: 350 * this.words.length,\n endDelay: this.loopDelayValue,\n });\n\n this.show();\n }\n\n\n //* Signal & Noise\n effect_5(){\n this.log_function(\"effect_5\");\n\n const amp_count = this.element.getElementsByClassName(\"ampersand\").length;\n\n //* Check if the Animation is compatible\n if(amp_count === 1){\n this.letters_start = this.element.getElementsByClassName(\"word-first\");\n this.letters_end = this.element.getElementsByClassName(\"word-last\");\n this.ampersand = this.element.getElementsByClassName(\"ampersand\");\n this.lines = this.element.getElementsByClassName(\"line\");\n\n this.timeline = anime.timeline({ loop: this.loopValue })\n .add({\n targets: this.lines,\n opacity: [0.5, 1],\n scaleX: [0, 1],\n easing: \"easeInOutExpo\",\n duration: 700,\n })\n .add({\n targets: this.lines,\n duration: 600,\n easing: \"easeOutExpo\",\n translateY: (element, index) => (-0.625 + 0.625 * 2 * index) + \"em\",\n })\n .add({\n targets: this.ampersand,\n opacity: [0, 1],\n scaleY: [0.5, 1],\n easing: \"easeOutExpo\",\n duration: 600,\n offset: \"-=600\",\n })\n .add({\n targets: this.letters_start,\n opacity: [0, 1],\n translateX: [\"0.5em\", 0],\n easing: \"easeOutExpo\",\n duration: 600,\n offset: \"-=300\",\n })\n .add({\n targets: this.letters_end,\n opacity: [0, 1],\n translateX: [\"-0.5em\", 0],\n easing: \"easeOutExpo\",\n duration: 600,\n offset: \"-=600\",\n endDelay: this.loopDelayValue,\n });\n } else {\n this.log_function(\"effect_5\", \"effect_5 aka Signal & Noise needs to have at least one & in the text! you have\", amp_count);\n }\n\n this.show();\n }\n\n\n //* Beautiful Questions\n effect_6(){\n this.log_function(\"effect_6\");\n this.letters = this.element.getElementsByClassName(\"letter\");\n\n this.timeline = anime.timeline({ loop: this.loopValue })\n .add({\n targets: this.letters,\n translateY: [\"1.1em\", 0],\n translateZ: 0,\n duration: 750,\n delay: (el, i) => 50 * i,\n endDelay: this.loopDelayValue,\n });\n\n this.show();\n }\n\n\n //* Reality Is Broken\n effect_7(){\n this.log_function(\"effect_7\");\n this.letters = this.element.getElementsByClassName(\"letter\");\n\n this.timeline = anime.timeline({ loop: this.loopValue })\n .add({\n targets: this.letters,\n translateY: [\"1.1em\", 0],\n translateX: [\"0.55em\", 0],\n translateZ: 0,\n rotateZ: [180, 0],\n duration: 750,\n easing: \"easeOutExpo\",\n delay: (el, i) => 50 * i,\n endDelay: this.loopDelayValue,\n });\n\n this.show();\n }\n\n\n //* Hi!\n effect_8(){\n this.log_function(\"effect_8\");\n this.words = this.element.getElementsByClassName(\"word\");\n\n this.timeline = anime.timeline({ loop: this.loopValue })\n .add({\n targets: this.words,\n scale: [0, 1],\n duration: 1200,\n offset: \"-=550\",\n endDelay: this.loopDelayValue,\n });\n\n this.show();\n }\n\n\n //* Coffee Mornings\n effect_9(){\n this.log_function(\"effect_9\");\n this.letters = this.element.getElementsByClassName(\"letter\");\n\n this.timeline = anime.timeline({ loop: this.loopValue })\n .add({\n targets: this.letters,\n scale: [0, 1],\n duration: 1500,\n elasticity: 600,\n delay: (el, i) => 45 * (i + 1),\n endDelay: this.loopDelayValue,\n });\n\n this.show();\n }\n\n\n //* Domino Dreams\n effect_10(){\n this.log_function(\"effect_10\");\n this.letters = this.element.getElementsByClassName(\"letter\");\n\n\n this.timeline = anime.timeline({ loop: this.loopValue })\n .add({\n targets: this.letters,\n rotateY: [-90, 0],\n duration: 1300,\n delay: (el, i) => 45 * i,\n endDelay: this.loopDelayValue,\n });\n\n this.show();\n }\n\n\n //* Hello Goodbye\n effect_11(){\n this.log_function(\"effect_11\");\n this.letters = this.element.getElementsByClassName(\"letter\");\n this.lines = this.element.getElementsByClassName(\"line\");\n\n this.timeline = anime.timeline({ loop: this.loopValue })\n .add({\n targets: this.lines,\n scaleY: [0, 1],\n opacity: [0, 1],\n easing: \"easeOutExpo\",\n duration: 800,\n })\n .add({\n targets: this.lines,\n translateX: [0, this.element.getBoundingClientRect().width + 10],\n easing: \"easeOutExpo\",\n duration: 1000,\n delay: 100,\n })\n .add({\n targets: this.letters,\n opacity: [0, 1],\n easing: \"easeOutExpo\",\n duration: 700,\n delay: (el, i) => 34 * ( i + 1),\n }, 900)\n .add({\n targets: this.lines,\n scaleY: [1, 0],\n opacity: [1, 0],\n duration: 1000,\n easing: \"easeOutExpo\",\n delay: 500,\n endDelay: this.loopDelayValue,\n });\n\n this.show();\n }\n\n\n //* A New Production\n effect_12(){\n this.log_function(\"effect_12\");\n this.letters = this.element.getElementsByClassName(\"letter\");\n\n this.timeline = anime.timeline({ loop: this.loopValue })\n .add({\n targets: this.letters,\n translateX: [40, 0],\n translateZ: 0,\n opacity: [0, 1],\n easing: \"easeOutExpo\",\n duration: 1200,\n delay: (el, i) => 500 + 30 * i,\n endDelay: this.loopDelayValue,\n });\n\n this.show();\n }\n\n\n //* Rising Strong\n effect_13(){\n this.log_function(\"effect_13\");\n this.letters = this.element.getElementsByClassName(\"letter\");\n\n this.timeline = anime.timeline({ loop: this.loopValue })\n .add({\n targets: this.letters,\n translateY: [100, 0],\n translateZ: 0,\n opacity: [0, 1],\n easing: \"easeOutExpo\",\n duration: 1400,\n delay: (el, i) => 300 + 30 * i,\n endDelay: this.loopDelayValue,\n });\n\n this.show();\n }\n\n\n //* Find Your Element\n effect_14(){\n this.log_function(\"effect_14\");\n this.letters = this.element.getElementsByClassName(\"letter\");\n this.lines = this.element.getElementsByClassName(\"line\");\n\n this.timeline = anime.timeline({ loop: this.loopValue })\n .add({\n targets: this.lines,\n scaleX: [0, 1],\n opacity: [0.5, 1],\n easing: \"easeInOutExpo\",\n duration: 900,\n })\n .add({\n targets: this.letters,\n opacity: [0, 1],\n translateX: [40, 0],\n translateZ: 0,\n scaleX: [0.3, 1],\n easing: \"easeOutExpo\",\n duration: 800,\n offset: \"-=600\",\n delay: (el, i) => 150 + 25 * i,\n endDelay: this.loopDelayValue,\n });\n\n this.show();\n }\n\n\n //* Out Now\n effect_15(){\n this.log_function(\"effect_15\");\n this.words = this.element.getElementsByClassName(\"word\");\n\n this.timeline = anime.timeline({ loop: this.loopValue })\n .add({\n targets: this.words,\n scale: [14, 1],\n opacity: [0, 1],\n easing: \"easeOutCirc\",\n duration: 800,\n delay: (el, i) => 800 * i,\n endDelay: this.loopDelayValue,\n });\n\n this.show();\n }\n\n\n //* Made With Love\n effect_16(){\n this.log_function(\"effect_16\");\n this.letters = this.element.getElementsByClassName(\"letter\");\n\n this.timeline = anime.timeline({ loop: this.loopValue })\n .add({\n targets: this.letters,\n translateY: [-100, 0],\n easing: \"easeOutExpo\",\n duration: 1400,\n delay: (el, i) => 30 * i,\n endDelay: this.loopDelayValue,\n });\n\n this.show();\n }\n\n get prefers_reduced_motion(){\n this.log_function(\"get prefers_reduced_motion\");\n\n let prefers_reduced_motion = false;\n\n try {\n if(\"matchMedia\" in window){\n prefers_reduced_motion = window.matchMedia(\"(prefers-reduced-motion)\").matches;\n }\n } catch (error) {\n this.log_error_function(\"get prefers_reduced_motion\", error);\n }\n this.log_function(\"get prefers_reduced_motion\", prefers_reduced_motion);\n return prefers_reduced_motion;\n }\n\n}\n", "//* https://github.com/peacechen/FitText-UMD\nimport ApplicationController from \"../application_controller.js\";\nimport fitText from \"FitText-UMD\";\n\nexport default class extends ApplicationController {\n static values = {\n /**\n * @type {number}\n * @default 1\n * @description The default setting works pretty well, but when it doesn't FitText has one setting you can adjust. If your text resizes poorly or is resizing all hurdy gurdy, you'll want to turn tweak up/down the compressor.It works a little like a guitar amp. (can be a float like 0.8).\n * @example\n * compressor: 0.8\n * compressor: 1\n */\n compressor: { type: Number, default: 1 },\n\n /**\n * @type {object}\n * @default {}\n * @description FitText now allows you to specify two optional pixel values: `minFontSize` and `maxFontSize`. Great for situations when you want to preserve hierarchy.\n * @example\n * config: { minFontSize: '20px', maxFontSize: '40px' }\n */\n config: { type: Object, default: {} },\n };\n\n connect() {\n this.log_function(\"connect\");\n fitText(this.element, this.compressorValue, this.configValue);\n }\n\n disconnect(){\n this.log_function(\"disconnect\");\n }\n}\n", "export default {\n // Base parallax options.\n type: 'scroll',\n speed: 0.5,\n containerClass: 'jarallax-container',\n imgSrc: null,\n imgElement: '.jarallax-img',\n imgSize: 'cover',\n imgPosition: '50% 50%',\n imgRepeat: 'no-repeat',\n keepImg: false,\n elementInViewport: null,\n zIndex: -100,\n disableParallax: false,\n\n // Callbacks.\n onScroll: null,\n onInit: null,\n onDestroy: null,\n onCoverImage: null,\n\n // Video options.\n videoClass: 'jarallax-video',\n videoSrc: null,\n videoStartTime: 0,\n videoEndTime: 0,\n videoVolume: 0,\n videoLoop: true,\n videoPlayOnlyVisible: true,\n videoLazyLoading: true,\n disableVideo: false,\n\n // Video callbacks.\n onVideoInsert: null,\n onVideoWorkerInit: null,\n};\n", "/* eslint-disable import/no-mutable-exports */\n/* eslint-disable no-restricted-globals */\nlet win;\n\nif (typeof window !== 'undefined') {\n win = window;\n} else if (typeof global !== 'undefined') {\n win = global;\n} else if (typeof self !== 'undefined') {\n win = self;\n} else {\n win = {};\n}\n\nexport default win;\n", "import global from './global';\n\n/**\n * Add styles to element.\n *\n * @param {Element} el - element.\n * @param {String|Object} styles - styles list.\n *\n * @returns {Element}\n */\nexport default function css(el, styles) {\n if (typeof styles === 'string') {\n return global.getComputedStyle(el).getPropertyValue(styles);\n }\n\n Object.keys(styles).forEach((key) => {\n el.style[key] = styles[key];\n });\n return el;\n}\n", "/**\n * Extend like jQuery.extend\n *\n * @param {Object} out - output object.\n * @param {...any} args - additional objects to extend.\n *\n * @returns {Object}\n */\nexport default function extend(out, ...args) {\n out = out || {};\n\n Object.keys(args).forEach((i) => {\n if (!args[i]) {\n return;\n }\n Object.keys(args[i]).forEach((key) => {\n out[key] = args[i][key];\n });\n });\n\n return out;\n}\n", "/**\n * Get all parents of the element.\n *\n * @param {Element} elem - DOM element.\n *\n * @returns {Array}\n */\nexport default function getParents(elem) {\n const parents = [];\n\n while (elem.parentElement !== null) {\n elem = elem.parentElement;\n\n if (elem.nodeType === 1) {\n parents.push(elem);\n }\n }\n\n return parents;\n}\n", "/**\n * Document ready callback.\n * @param {Function} callback - callback will be fired once Document ready.\n */\nfunction ready(callback) {\n if (document.readyState === 'complete' || document.readyState === 'interactive') {\n // Already ready or interactive, execute callback\n callback();\n } else {\n document.addEventListener('DOMContentLoaded', callback, {\n capture: true,\n once: true,\n passive: true,\n });\n }\n}\n\nexport default ready;\n", "import global from './global';\n\nconst { navigator } = global;\n\nconst mobileAgent = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n navigator.userAgent\n);\n\nexport default function isMobile() {\n return mobileAgent;\n}\n", "import global from './global';\nimport domReady from './ready';\nimport isMobile from './isMobile';\n\nlet wndW;\nlet wndH;\nlet $deviceHelper;\n\n/**\n * The most popular mobile browsers changes height after page scroll and this generates image jumping.\n * We can fix it using this workaround with vh units.\n */\nfunction getDeviceHeight() {\n if (!$deviceHelper && document.body) {\n $deviceHelper = document.createElement('div');\n $deviceHelper.style.cssText =\n 'position: fixed; top: -9999px; left: 0; height: 100vh; width: 0;';\n document.body.appendChild($deviceHelper);\n }\n\n return (\n ($deviceHelper ? $deviceHelper.clientHeight : 0) ||\n global.innerHeight ||\n document.documentElement.clientHeight\n );\n}\n\nfunction updateWindowHeight() {\n wndW = global.innerWidth || document.documentElement.clientWidth;\n\n if (isMobile()) {\n wndH = getDeviceHeight();\n } else {\n wndH = global.innerHeight || document.documentElement.clientHeight;\n }\n}\n\nupdateWindowHeight();\nglobal.addEventListener('resize', updateWindowHeight);\nglobal.addEventListener('orientationchange', updateWindowHeight);\nglobal.addEventListener('load', updateWindowHeight);\ndomReady(() => {\n updateWindowHeight({\n type: 'dom-loaded',\n });\n});\n\nexport default function getWindowSize() {\n return {\n width: wndW,\n height: wndH,\n };\n}\n", "import global from './global';\nimport getWindowSize from './getWindowSize';\n\n// List with all jarallax instances\n// need to render all in one scroll/resize event.\nconst jarallaxList = [];\n\nfunction updateParallax() {\n if (!jarallaxList.length) {\n return;\n }\n\n const { width: wndW, height: wndH } = getWindowSize();\n\n jarallaxList.forEach((data, k) => {\n const { instance, oldData } = data;\n\n if (!instance.isVisible()) {\n return;\n }\n\n const clientRect = instance.$item.getBoundingClientRect();\n\n const newData = {\n width: clientRect.width,\n height: clientRect.height,\n top: clientRect.top,\n bottom: clientRect.bottom,\n wndW,\n wndH,\n };\n\n const isResized =\n !oldData ||\n oldData.wndW !== newData.wndW ||\n oldData.wndH !== newData.wndH ||\n oldData.width !== newData.width ||\n oldData.height !== newData.height;\n const isScrolled =\n isResized || !oldData || oldData.top !== newData.top || oldData.bottom !== newData.bottom;\n\n jarallaxList[k].oldData = newData;\n\n if (isResized) {\n instance.onResize();\n }\n if (isScrolled) {\n instance.onScroll();\n }\n });\n\n global.requestAnimationFrame(updateParallax);\n}\n\nconst visibilityObserver = new global.IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n entry.target.jarallax.isElementInViewport = entry.isIntersecting;\n });\n },\n {\n // We have to start parallax calculation before the block is in view\n // to prevent possible parallax jumping.\n rootMargin: '50px',\n }\n);\n\nexport function addObserver(instance) {\n jarallaxList.push({\n instance,\n });\n\n if (jarallaxList.length === 1) {\n global.requestAnimationFrame(updateParallax);\n }\n\n visibilityObserver.observe(instance.options.elementInViewport || instance.$item);\n}\n\nexport function removeObserver(instance) {\n jarallaxList.forEach((data, key) => {\n if (data.instance.instanceID === instance.instanceID) {\n jarallaxList.splice(key, 1);\n }\n });\n\n visibilityObserver.unobserve(instance.options.elementInViewport || instance.$item);\n}\n", "/* eslint-disable class-methods-use-this */\nimport defaults from './defaults';\nimport global from './utils/global';\nimport css from './utils/css';\nimport extend from './utils/extend';\nimport getParents from './utils/getParents';\nimport getWindowSize from './utils/getWindowSize';\nimport { addObserver, removeObserver } from './utils/observer';\n\nconst { navigator } = global;\n\nlet instanceID = 0;\n\n// Jarallax class\nclass Jarallax {\n constructor(item, userOptions) {\n const self = this;\n\n self.instanceID = instanceID;\n instanceID += 1;\n\n self.$item = item;\n\n self.defaults = { ...defaults };\n\n // prepare data-options\n const dataOptions = self.$item.dataset || {};\n const pureDataOptions = {};\n Object.keys(dataOptions).forEach((key) => {\n const lowerCaseOption = key.substr(0, 1).toLowerCase() + key.substr(1);\n if (lowerCaseOption && typeof self.defaults[lowerCaseOption] !== 'undefined') {\n pureDataOptions[lowerCaseOption] = dataOptions[key];\n }\n });\n\n self.options = self.extend({}, self.defaults, pureDataOptions, userOptions);\n self.pureOptions = self.extend({}, self.options);\n\n // prepare 'true' and 'false' strings to boolean\n Object.keys(self.options).forEach((key) => {\n if (self.options[key] === 'true') {\n self.options[key] = true;\n } else if (self.options[key] === 'false') {\n self.options[key] = false;\n }\n });\n\n // fix speed option [-1.0, 2.0]\n self.options.speed = Math.min(2, Math.max(-1, parseFloat(self.options.speed)));\n\n // prepare disableParallax callback\n if (typeof self.options.disableParallax === 'string') {\n self.options.disableParallax = new RegExp(self.options.disableParallax);\n }\n if (self.options.disableParallax instanceof RegExp) {\n const disableParallaxRegexp = self.options.disableParallax;\n self.options.disableParallax = () => disableParallaxRegexp.test(navigator.userAgent);\n }\n if (typeof self.options.disableParallax !== 'function') {\n // Support for `true` option value.\n const disableParallaxDefault = self.options.disableParallax;\n self.options.disableParallax = () => disableParallaxDefault === true;\n }\n\n // prepare disableVideo callback\n if (typeof self.options.disableVideo === 'string') {\n self.options.disableVideo = new RegExp(self.options.disableVideo);\n }\n if (self.options.disableVideo instanceof RegExp) {\n const disableVideoRegexp = self.options.disableVideo;\n self.options.disableVideo = () => disableVideoRegexp.test(navigator.userAgent);\n }\n if (typeof self.options.disableVideo !== 'function') {\n // Support for `true` option value.\n const disableVideoDefault = self.options.disableVideo;\n self.options.disableVideo = () => disableVideoDefault === true;\n }\n\n // custom element to check if parallax in viewport\n let elementInVP = self.options.elementInViewport;\n // get first item from array\n if (\n elementInVP &&\n typeof elementInVP === 'object' &&\n typeof elementInVP.length !== 'undefined'\n ) {\n [elementInVP] = elementInVP;\n }\n // check if dom element\n if (!(elementInVP instanceof Element)) {\n elementInVP = null;\n }\n self.options.elementInViewport = elementInVP;\n\n self.image = {\n src: self.options.imgSrc || null,\n $container: null,\n useImgTag: false,\n\n // 1. Position fixed is needed for the most of browsers because absolute position have glitches\n // 2. On MacOS with smooth scroll there is a huge lags with absolute position - https://github.com/nk-o/jarallax/issues/75\n // 3. Previously used 'absolute' for mobile devices. But we re-tested on iPhone 12 and 'fixed' position is working better, then 'absolute', so for now position is always 'fixed'\n position: 'fixed',\n };\n\n if (self.initImg() && self.canInitParallax()) {\n self.init();\n }\n }\n\n css(el, styles) {\n return css(el, styles);\n }\n\n extend(out, ...args) {\n return extend(out, ...args);\n }\n\n // get window size and scroll position. Useful for extensions\n getWindowData() {\n const { width, height } = getWindowSize();\n\n return {\n width,\n height,\n y: document.documentElement.scrollTop,\n };\n }\n\n // Jarallax functions\n initImg() {\n const self = this;\n\n // find image element\n let $imgElement = self.options.imgElement;\n if ($imgElement && typeof $imgElement === 'string') {\n $imgElement = self.$item.querySelector($imgElement);\n }\n\n // check if dom element\n if (!($imgElement instanceof Element)) {\n if (self.options.imgSrc) {\n $imgElement = new Image();\n $imgElement.src = self.options.imgSrc;\n } else {\n $imgElement = null;\n }\n }\n\n if ($imgElement) {\n if (self.options.keepImg) {\n self.image.$item = $imgElement.cloneNode(true);\n } else {\n self.image.$item = $imgElement;\n self.image.$itemParent = $imgElement.parentNode;\n }\n self.image.useImgTag = true;\n }\n\n // true if there is img tag\n if (self.image.$item) {\n return true;\n }\n\n // get image src\n if (self.image.src === null) {\n self.image.src =\n 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n self.image.bgImage = self.css(self.$item, 'background-image');\n }\n return !(!self.image.bgImage || self.image.bgImage === 'none');\n }\n\n canInitParallax() {\n return !this.options.disableParallax();\n }\n\n init() {\n const self = this;\n const containerStyles = {\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n };\n let imageStyles = {\n pointerEvents: 'none',\n transformStyle: 'preserve-3d',\n backfaceVisibility: 'hidden',\n };\n\n if (!self.options.keepImg) {\n // save default user styles\n const curStyle = self.$item.getAttribute('style');\n if (curStyle) {\n self.$item.setAttribute('data-jarallax-original-styles', curStyle);\n }\n if (self.image.useImgTag) {\n const curImgStyle = self.image.$item.getAttribute('style');\n if (curImgStyle) {\n self.image.$item.setAttribute('data-jarallax-original-styles', curImgStyle);\n }\n }\n }\n\n // set relative position and z-index to the parent\n if (self.css(self.$item, 'position') === 'static') {\n self.css(self.$item, {\n position: 'relative',\n });\n }\n if (self.css(self.$item, 'z-index') === 'auto') {\n self.css(self.$item, {\n zIndex: 0,\n });\n }\n\n // container for parallax image\n self.image.$container = document.createElement('div');\n self.css(self.image.$container, containerStyles);\n self.css(self.image.$container, {\n 'z-index': self.options.zIndex,\n });\n\n // it will remove some image overlapping\n // overlapping occur due to an image position fixed inside absolute position element\n // needed only when background in fixed position\n if (this.image.position === 'fixed') {\n self.css(self.image.$container, {\n '-webkit-clip-path': 'polygon(0 0, 100% 0, 100% 100%, 0 100%)',\n 'clip-path': 'polygon(0 0, 100% 0, 100% 100%, 0 100%)',\n });\n }\n\n // Add container unique ID.\n self.image.$container.setAttribute('id', `jarallax-container-${self.instanceID}`);\n\n // Add container class.\n if (self.options.containerClass) {\n self.image.$container.setAttribute('class', self.options.containerClass);\n }\n\n self.$item.appendChild(self.image.$container);\n\n // use img tag\n if (self.image.useImgTag) {\n imageStyles = self.extend(\n {\n 'object-fit': self.options.imgSize,\n 'object-position': self.options.imgPosition,\n 'max-width': 'none',\n },\n containerStyles,\n imageStyles\n );\n\n // use div with background image\n } else {\n self.image.$item = document.createElement('div');\n if (self.image.src) {\n imageStyles = self.extend(\n {\n 'background-position': self.options.imgPosition,\n 'background-size': self.options.imgSize,\n 'background-repeat': self.options.imgRepeat,\n 'background-image': self.image.bgImage || `url(\"${self.image.src}\")`,\n },\n containerStyles,\n imageStyles\n );\n }\n }\n\n if (\n self.options.type === 'opacity' ||\n self.options.type === 'scale' ||\n self.options.type === 'scale-opacity' ||\n self.options.speed === 1\n ) {\n self.image.position = 'absolute';\n }\n\n // 1. Check if one of parents have transform style (without this check, scroll transform will be inverted if used parallax with position fixed)\n // discussion - https://github.com/nk-o/jarallax/issues/9\n // 2. Check if parents have overflow scroll\n if (self.image.position === 'fixed') {\n const $parents = getParents(self.$item).filter((el) => {\n const styles = global.getComputedStyle(el);\n const parentTransform =\n styles['-webkit-transform'] || styles['-moz-transform'] || styles.transform;\n const overflowRegex = /(auto|scroll)/;\n\n return (\n (parentTransform && parentTransform !== 'none') ||\n overflowRegex.test(styles.overflow + styles['overflow-y'] + styles['overflow-x'])\n );\n });\n\n self.image.position = $parents.length ? 'absolute' : 'fixed';\n }\n\n // add position to parallax block\n imageStyles.position = self.image.position;\n\n // insert parallax image\n self.css(self.image.$item, imageStyles);\n self.image.$container.appendChild(self.image.$item);\n\n // set initial position and size\n self.onResize();\n self.onScroll(true);\n\n // call onInit event\n if (self.options.onInit) {\n self.options.onInit.call(self);\n }\n\n // remove default user background\n if (self.css(self.$item, 'background-image') !== 'none') {\n self.css(self.$item, {\n 'background-image': 'none',\n });\n }\n\n addObserver(self);\n }\n\n destroy() {\n const self = this;\n\n removeObserver(self);\n\n // return styles on container as before jarallax init\n const originalStylesTag = self.$item.getAttribute('data-jarallax-original-styles');\n self.$item.removeAttribute('data-jarallax-original-styles');\n // null occurs if there is no style tag before jarallax init\n if (!originalStylesTag) {\n self.$item.removeAttribute('style');\n } else {\n self.$item.setAttribute('style', originalStylesTag);\n }\n\n if (self.image.useImgTag) {\n // return styles on img tag as before jarallax init\n const originalStylesImgTag = self.image.$item.getAttribute('data-jarallax-original-styles');\n self.image.$item.removeAttribute('data-jarallax-original-styles');\n // null occurs if there is no style tag before jarallax init\n if (!originalStylesImgTag) {\n self.image.$item.removeAttribute('style');\n } else {\n self.image.$item.setAttribute('style', originalStylesTag);\n }\n\n // move img tag to its default position\n if (self.image.$itemParent) {\n self.image.$itemParent.appendChild(self.image.$item);\n }\n }\n\n // remove additional dom elements\n if (self.image.$container) {\n self.image.$container.parentNode.removeChild(self.image.$container);\n }\n\n // call onDestroy event\n if (self.options.onDestroy) {\n self.options.onDestroy.call(self);\n }\n\n // delete jarallax from item\n delete self.$item.jarallax;\n }\n\n coverImage() {\n const self = this;\n\n const { height: wndH } = getWindowSize();\n const rect = self.image.$container.getBoundingClientRect();\n const contH = rect.height;\n const { speed } = self.options;\n const isScroll = self.options.type === 'scroll' || self.options.type === 'scroll-opacity';\n let scrollDist = 0;\n let resultH = contH;\n let resultMT = 0;\n\n // scroll parallax\n if (isScroll) {\n // scroll distance and height for image\n if (speed < 0) {\n scrollDist = speed * Math.max(contH, wndH);\n\n if (wndH < contH) {\n scrollDist -= speed * (contH - wndH);\n }\n } else {\n scrollDist = speed * (contH + wndH);\n }\n\n // size for scroll parallax\n if (speed > 1) {\n resultH = Math.abs(scrollDist - wndH);\n } else if (speed < 0) {\n resultH = scrollDist / speed + Math.abs(scrollDist);\n } else {\n resultH += (wndH - contH) * (1 - speed);\n }\n\n scrollDist /= 2;\n }\n\n // store scroll distance\n self.parallaxScrollDistance = scrollDist;\n\n // vertical center\n if (isScroll) {\n resultMT = (wndH - resultH) / 2;\n } else {\n resultMT = (contH - resultH) / 2;\n }\n\n // apply result to item\n self.css(self.image.$item, {\n height: `${resultH}px`,\n marginTop: `${resultMT}px`,\n left: self.image.position === 'fixed' ? `${rect.left}px` : '0',\n width: `${rect.width}px`,\n });\n\n // call onCoverImage event\n if (self.options.onCoverImage) {\n self.options.onCoverImage.call(self);\n }\n\n // return some useful data. Used in the video cover function\n return {\n image: {\n height: resultH,\n marginTop: resultMT,\n },\n container: rect,\n };\n }\n\n isVisible() {\n return this.isElementInViewport || false;\n }\n\n onScroll(force) {\n const self = this;\n\n // stop calculations if item is not in viewport\n if (!force && !self.isVisible()) {\n return;\n }\n\n const { height: wndH } = getWindowSize();\n const rect = self.$item.getBoundingClientRect();\n const contT = rect.top;\n const contH = rect.height;\n const styles = {};\n\n // calculate parallax helping variables\n const beforeTop = Math.max(0, contT);\n const beforeTopEnd = Math.max(0, contH + contT);\n const afterTop = Math.max(0, -contT);\n const beforeBottom = Math.max(0, contT + contH - wndH);\n const beforeBottomEnd = Math.max(0, contH - (contT + contH - wndH));\n const afterBottom = Math.max(0, -contT + wndH - contH);\n const fromViewportCenter = 1 - 2 * ((wndH - contT) / (wndH + contH));\n\n // calculate on how percent of section is visible\n let visiblePercent = 1;\n if (contH < wndH) {\n visiblePercent = 1 - (afterTop || beforeBottom) / contH;\n } else if (beforeTopEnd <= wndH) {\n visiblePercent = beforeTopEnd / wndH;\n } else if (beforeBottomEnd <= wndH) {\n visiblePercent = beforeBottomEnd / wndH;\n }\n\n // opacity\n if (\n self.options.type === 'opacity' ||\n self.options.type === 'scale-opacity' ||\n self.options.type === 'scroll-opacity'\n ) {\n styles.transform = 'translate3d(0,0,0)';\n styles.opacity = visiblePercent;\n }\n\n // scale\n if (self.options.type === 'scale' || self.options.type === 'scale-opacity') {\n let scale = 1;\n if (self.options.speed < 0) {\n scale -= self.options.speed * visiblePercent;\n } else {\n scale += self.options.speed * (1 - visiblePercent);\n }\n styles.transform = `scale(${scale}) translate3d(0,0,0)`;\n }\n\n // scroll\n if (self.options.type === 'scroll' || self.options.type === 'scroll-opacity') {\n let positionY = self.parallaxScrollDistance * fromViewportCenter;\n\n // fix if parallax block in absolute position\n if (self.image.position === 'absolute') {\n positionY -= contT;\n }\n\n styles.transform = `translate3d(0,${positionY}px,0)`;\n }\n\n self.css(self.image.$item, styles);\n\n // call onScroll event\n if (self.options.onScroll) {\n self.options.onScroll.call(self, {\n section: rect,\n\n beforeTop,\n beforeTopEnd,\n afterTop,\n beforeBottom,\n beforeBottomEnd,\n afterBottom,\n\n visiblePercent,\n fromViewportCenter,\n });\n }\n }\n\n onResize() {\n this.coverImage();\n }\n}\n\n// global definition\nconst jarallax = function (items, options, ...args) {\n // check for dom element\n // thanks: http://stackoverflow.com/questions/384286/javascript-isdom-how-do-you-check-if-a-javascript-object-is-a-dom-object\n if (\n typeof HTMLElement === 'object'\n ? items instanceof HTMLElement\n : items &&\n typeof items === 'object' &&\n items !== null &&\n items.nodeType === 1 &&\n typeof items.nodeName === 'string'\n ) {\n items = [items];\n }\n\n const len = items.length;\n let k = 0;\n let ret;\n\n for (k; k < len; k += 1) {\n if (typeof options === 'object' || typeof options === 'undefined') {\n if (!items[k].jarallax) {\n items[k].jarallax = new Jarallax(items[k], options);\n }\n } else if (items[k].jarallax) {\n // eslint-disable-next-line prefer-spread\n ret = items[k].jarallax[options].apply(items[k].jarallax, args);\n }\n if (typeof ret !== 'undefined') {\n return ret;\n }\n }\n\n return items;\n};\njarallax.constructor = Jarallax;\n\nexport default jarallax;\n", "/*!\n * Video Worker v2.2.0 (https://github.com/nk-o/video-worker)\n * Copyright 2024 nK \n * Licensed under MIT (https://github.com/nk-o/video-worker/blob/master/LICENSE)\n */\n\nvar defaults = {\n autoplay: false,\n loop: false,\n mute: false,\n volume: 100,\n showControls: true,\n accessibilityHidden: false,\n // start / end video time in seconds\n startTime: 0,\n endTime: 0\n};\n\n/**\n * Extend like jQuery.extend\n *\n * @param {Object} out - output object.\n * @param {...any} args - additional objects to extend.\n *\n * @returns {Object}\n */\nfunction extend(out, ...args) {\n out = out || {};\n Object.keys(args).forEach(i => {\n if (!args[i]) {\n return;\n }\n Object.keys(args[i]).forEach(key => {\n out[key] = args[i][key];\n });\n });\n return out;\n}\n\nlet ID = 0;\nclass VideoWorkerBase {\n type = 'none';\n constructor(url, options) {\n const self = this;\n self.url = url;\n self.options_default = {\n ...defaults\n };\n self.options = extend({}, self.options_default, options);\n\n // check URL\n self.videoID = self.constructor.parseURL(url);\n\n // init\n if (self.videoID) {\n self.init();\n }\n }\n isValid() {\n return !!this.videoID;\n }\n init() {\n const self = this;\n self.ID = ID;\n ID += 1;\n self.playerID = `VideoWorker-${self.ID}`;\n }\n\n // events\n on(name, callback) {\n this.userEventsList = this.userEventsList || [];\n\n // add new callback in events list\n (this.userEventsList[name] || (this.userEventsList[name] = [])).push(callback);\n }\n off(name, callback) {\n if (!this.userEventsList || !this.userEventsList[name]) {\n return;\n }\n if (!callback) {\n delete this.userEventsList[name];\n } else {\n this.userEventsList[name].forEach((val, key) => {\n if (val === callback) {\n this.userEventsList[name][key] = false;\n }\n });\n }\n }\n fire(name, ...args) {\n if (this.userEventsList && typeof this.userEventsList[name] !== 'undefined') {\n this.userEventsList[name].forEach(val => {\n // call with all arguments\n if (val) {\n val.apply(this, args);\n }\n });\n }\n }\n\n /**\n * Methods used in providers.\n */\n /* eslint-disable */\n static parseURL(url) {\n return false;\n }\n play(start) {}\n pause() {}\n mute() {}\n unmute() {}\n setVolume(volume = false) {}\n getVolume(callback) {}\n getMuted(callback) {}\n setCurrentTime(currentTime = false) {}\n getCurrentTime(callback) {}\n getImageURL(callback) {}\n getVideo(callback) {}\n /* eslint-enable */\n}\n\n/* eslint-disable import/no-mutable-exports */\n/* eslint-disable no-restricted-globals */\nlet win;\nif (typeof window !== 'undefined') {\n win = window;\n} else if (typeof global !== 'undefined') {\n win = global;\n} else if (typeof self !== 'undefined') {\n win = self;\n} else {\n win = {};\n}\nvar global$1 = win;\n\n// Deferred\n// thanks http://stackoverflow.com/questions/18096715/implement-deferred-object-without-using-jquery\nfunction Deferred() {\n this.doneCallbacks = [];\n this.failCallbacks = [];\n}\nDeferred.prototype = {\n execute(list, args) {\n let i = list.length;\n // eslint-disable-next-line no-param-reassign\n args = Array.prototype.slice.call(args);\n while (i) {\n i -= 1;\n list[i].apply(null, args);\n }\n },\n resolve(...args) {\n this.execute(this.doneCallbacks, args);\n },\n reject(...args) {\n this.execute(this.failCallbacks, args);\n },\n done(callback) {\n this.doneCallbacks.push(callback);\n },\n fail(callback) {\n this.failCallbacks.push(callback);\n }\n};\n\nlet YoutubeAPIadded = 0;\nlet loadingYoutubePlayer = 0;\nconst loadingYoutubeDefer = /*#__PURE__*/new Deferred();\nfunction loadAPI$1() {\n if (YoutubeAPIadded) {\n return;\n }\n YoutubeAPIadded = true;\n const src = 'https://www.youtube.com/iframe_api';\n\n // add script in head section\n let tag = document.createElement('script');\n let head = document.getElementsByTagName('head')[0];\n tag.src = src;\n head.appendChild(tag);\n head = null;\n tag = null;\n}\nfunction onAPIready$1(callback) {\n // Listen for global YT player callback\n if ((typeof global$1.YT === 'undefined' || global$1.YT.loaded === 0) && !loadingYoutubePlayer) {\n // Prevents Ready event from being called twice\n loadingYoutubePlayer = 1;\n\n // Creates deferred so, other players know when to wait.\n global$1.onYouTubeIframeAPIReady = function () {\n global$1.onYouTubeIframeAPIReady = null;\n loadingYoutubeDefer.resolve('done');\n callback();\n };\n } else if (typeof global$1.YT === 'object' && global$1.YT.loaded === 1) {\n callback();\n } else {\n loadingYoutubeDefer.done(() => {\n callback();\n });\n }\n}\nclass VideoWorkerYoutube extends VideoWorkerBase {\n type = 'youtube';\n static parseURL(url) {\n // eslint-disable-next-line no-useless-escape\n const regExp = /.*(?:youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|shorts\\/|watch\\?v=)([^#\\&\\?]*).*/;\n const match = url.match(regExp);\n return match && match[1].length === 11 ? match[1] : false;\n }\n init() {\n super.init();\n loadAPI$1();\n }\n play(start) {\n const self = this;\n if (!self.player || !self.player.playVideo) {\n return;\n }\n if (typeof start !== 'undefined') {\n self.player.seekTo(start || 0);\n }\n if (global$1.YT.PlayerState.PLAYING !== self.player.getPlayerState()) {\n // Don't play if video is already ended and with no loop.\n if (self.options.endTime && !self.options.loop) {\n self.getCurrentTime(seconds => {\n if (seconds < self.options.endTime) {\n self.player.playVideo();\n }\n });\n } else {\n self.player.playVideo();\n }\n }\n }\n pause() {\n const self = this;\n if (!self.player || !self.player.pauseVideo) {\n return;\n }\n if (global$1.YT.PlayerState.PLAYING === self.player.getPlayerState()) {\n self.player.pauseVideo();\n }\n }\n mute() {\n const self = this;\n if (!self.player || !self.player.mute) {\n return;\n }\n self.player.mute();\n }\n unmute() {\n const self = this;\n if (!self.player || !self.player.unMute) {\n return;\n }\n self.player.unMute();\n }\n setVolume(volume = false) {\n const self = this;\n if (!self.player || typeof volume !== 'number' || !self.player.setVolume) {\n return;\n }\n self.player.setVolume(volume);\n }\n getVolume(callback) {\n const self = this;\n if (!self.player) {\n callback(false);\n return;\n }\n if (self.player.getVolume) {\n callback(self.player.getVolume());\n }\n }\n getMuted(callback) {\n const self = this;\n if (!self.player) {\n callback(null);\n return;\n }\n if (self.player.isMuted) {\n callback(self.player.isMuted());\n }\n }\n setCurrentTime(currentTime = false) {\n const self = this;\n if (!self.player || typeof currentTime !== 'number' || !self.player.seekTo) {\n return;\n }\n self.player.seekTo(currentTime);\n }\n getCurrentTime(callback) {\n const self = this;\n if (!self.player || !self.player.getCurrentTime) {\n return;\n }\n callback(self.player.getCurrentTime());\n }\n getImageURL(callback) {\n const self = this;\n if (self.videoImage) {\n callback(self.videoImage);\n return;\n }\n const availableSizes = ['maxresdefault', 'sddefault', 'hqdefault', '0'];\n let step = 0;\n const tempImg = new Image();\n tempImg.onload = function () {\n // if no thumbnail, youtube add their own image with width = 120px\n if ((this.naturalWidth || this.width) !== 120 || step === availableSizes.length - 1) {\n // ok\n self.videoImage = `https://img.youtube.com/vi/${self.videoID}/${availableSizes[step]}.jpg`;\n callback(self.videoImage);\n } else {\n // try another size\n step += 1;\n this.src = `https://img.youtube.com/vi/${self.videoID}/${availableSizes[step]}.jpg`;\n }\n };\n tempImg.src = `https://img.youtube.com/vi/${self.videoID}/${availableSizes[step]}.jpg`;\n }\n getVideo(callback) {\n const self = this;\n\n // return generated video block\n if (self.$video) {\n callback(self.$video);\n return;\n }\n\n // generate new video block\n onAPIready$1(() => {\n let hiddenDiv;\n if (!self.$video) {\n hiddenDiv = document.createElement('div');\n hiddenDiv.style.display = 'none';\n }\n self.playerOptions = {\n // GDPR Compliance.\n host: 'https://www.youtube-nocookie.com',\n videoId: self.videoID,\n playerVars: {\n autohide: 1,\n rel: 0,\n autoplay: 0,\n // autoplay enable on mobile devices\n playsinline: 1\n }\n };\n\n // hide controls\n if (!self.options.showControls) {\n self.playerOptions.playerVars.iv_load_policy = 3;\n self.playerOptions.playerVars.modestbranding = 1;\n self.playerOptions.playerVars.controls = 0;\n self.playerOptions.playerVars.showinfo = 0;\n self.playerOptions.playerVars.disablekb = 1;\n }\n\n // events\n let ytStarted;\n let ytProgressInterval;\n self.playerOptions.events = {\n onReady(e) {\n // mute\n if (self.options.mute) {\n e.target.mute();\n } else if (typeof self.options.volume === 'number') {\n e.target.setVolume(self.options.volume);\n }\n\n // autoplay\n if (self.options.autoplay) {\n self.play(self.options.startTime);\n }\n self.fire('ready', e);\n\n // For seamless loops, set the endTime to 0.1 seconds less than the video's duration\n // https://github.com/nk-o/video-worker/issues/2\n if (self.options.loop && !self.options.endTime) {\n const secondsOffset = 0.1;\n self.options.endTime = self.player.getDuration() - secondsOffset;\n }\n\n // volumechange\n setInterval(() => {\n self.getVolume(volume => {\n if (self.options.volume !== volume) {\n self.options.volume = volume;\n self.fire('volumechange', e);\n }\n });\n }, 150);\n },\n onStateChange(e) {\n // loop\n if (self.options.loop && e.data === global$1.YT.PlayerState.ENDED) {\n self.play(self.options.startTime);\n }\n if (!ytStarted && e.data === global$1.YT.PlayerState.PLAYING) {\n ytStarted = 1;\n self.fire('started', e);\n }\n if (e.data === global$1.YT.PlayerState.PLAYING) {\n self.fire('play', e);\n }\n if (e.data === global$1.YT.PlayerState.PAUSED) {\n self.fire('pause', e);\n }\n if (e.data === global$1.YT.PlayerState.ENDED) {\n self.fire('ended', e);\n }\n\n // progress check\n if (e.data === global$1.YT.PlayerState.PLAYING) {\n ytProgressInterval = setInterval(() => {\n self.fire('timeupdate', e);\n\n // check for end of video and play again or stop\n if (self.options.endTime && self.player.getCurrentTime() >= self.options.endTime) {\n if (self.options.loop) {\n self.play(self.options.startTime);\n } else {\n self.pause();\n }\n }\n }, 150);\n } else {\n clearInterval(ytProgressInterval);\n }\n },\n onError(e) {\n self.fire('error', e);\n }\n };\n const firstInit = !self.$video;\n if (firstInit) {\n const div = document.createElement('div');\n div.setAttribute('id', self.playerID);\n hiddenDiv.appendChild(div);\n document.body.appendChild(hiddenDiv);\n }\n self.player = self.player || new global$1.YT.Player(self.playerID, self.playerOptions);\n if (firstInit) {\n self.$video = document.getElementById(self.playerID);\n\n // add accessibility attributes\n if (self.options.accessibilityHidden) {\n self.$video.setAttribute('tabindex', '-1');\n self.$video.setAttribute('aria-hidden', 'true');\n }\n\n // get video width and height\n self.videoWidth = parseInt(self.$video.getAttribute('width'), 10) || 1280;\n self.videoHeight = parseInt(self.$video.getAttribute('height'), 10) || 720;\n }\n callback(self.$video);\n });\n }\n}\n\nlet VimeoAPIadded = 0;\nlet loadingVimeoPlayer = 0;\nconst loadingVimeoDefer = /*#__PURE__*/new Deferred();\nfunction loadAPI() {\n if (VimeoAPIadded) {\n return;\n }\n VimeoAPIadded = true;\n\n // Useful when Vimeo API added using RequireJS https://github.com/nk-o/video-worker/pull/7\n if (typeof global$1.Vimeo !== 'undefined') {\n return;\n }\n const src = 'https://player.vimeo.com/api/player.js';\n\n // add script in head section\n let tag = document.createElement('script');\n let head = document.getElementsByTagName('head')[0];\n tag.src = src;\n head.appendChild(tag);\n head = null;\n tag = null;\n}\nfunction onAPIready(callback) {\n if (typeof global$1.Vimeo === 'undefined' && !loadingVimeoPlayer) {\n loadingVimeoPlayer = 1;\n const vimeoInterval = setInterval(() => {\n if (typeof global$1.Vimeo !== 'undefined') {\n clearInterval(vimeoInterval);\n loadingVimeoDefer.resolve('done');\n callback();\n }\n }, 20);\n } else if (typeof global$1.Vimeo !== 'undefined') {\n callback();\n } else {\n loadingVimeoDefer.done(() => {\n callback();\n });\n }\n}\nclass VideoWorkerVimeo extends VideoWorkerBase {\n type = 'vimeo';\n static parseURL(url) {\n // eslint-disable-next-line no-useless-escape\n const regExp = /https?:\\/\\/(?:www\\.|player\\.)?vimeo.com\\/(?:channels\\/(?:\\w+\\/)?|groups\\/([^/]*)\\/videos\\/|album\\/(\\d+)\\/video\\/|video\\/|)(\\d+)(?:$|\\/|\\?)/;\n const match = url.match(regExp);\n return match && match[3] ? match[3] : false;\n }\n\n // Try to extract a hash for private videos from the URL.\n // Thanks to https://github.com/sampotts/plyr\n static parseURLHash(url) {\n /* This regex matches a hexadecimal hash if given in any of these forms:\n * - [https://player.]vimeo.com/video/{id}/{hash}[?params]\n * - [https://player.]vimeo.com/video/{id}?h={hash}[¶ms]\n * - [https://player.]vimeo.com/video/{id}?[params]&h={hash}\n * - video/{id}/{hash}\n * If matched, the hash is available in capture group 4\n */\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+)(\\?.*&*h=|\\/)+([\\d,a-f]+)/;\n const found = url.match(regex);\n return found && found.length === 5 ? found[4] : null;\n }\n init() {\n super.init();\n loadAPI();\n }\n play(start) {\n const self = this;\n if (!self.player) {\n return;\n }\n if (typeof start !== 'undefined') {\n self.player.setCurrentTime(start);\n }\n self.player.getPaused().then(paused => {\n if (paused) {\n // Don't play if video is already ended and with no loop.\n if (self.options.endTime && !self.options.loop) {\n self.getCurrentTime(seconds => {\n if (seconds < self.options.endTime) {\n self.player.play();\n }\n });\n } else {\n self.player.play();\n }\n }\n });\n }\n pause() {\n const self = this;\n if (!self.player) {\n return;\n }\n self.player.getPaused().then(paused => {\n if (!paused) {\n self.player.pause();\n }\n });\n }\n mute() {\n const self = this;\n if (!self.player || !self.player.setVolume) {\n return;\n }\n self.setVolume(0);\n }\n unmute() {\n const self = this;\n if (!self.player || !self.player.setVolume) {\n return;\n }\n\n // In case the default volume is 0, we have to set 100 when unmute.\n self.setVolume(self.options.volume || 100);\n }\n setVolume(volume = false) {\n const self = this;\n if (!self.player || typeof volume !== 'number' || !self.player.setVolume) {\n return;\n }\n self.player.setVolume(volume / 100);\n }\n getVolume(callback) {\n const self = this;\n if (!self.player) {\n callback(false);\n return;\n }\n if (self.player.getVolume) {\n self.player.getVolume().then(volume => {\n callback(volume * 100);\n });\n }\n }\n getMuted(callback) {\n const self = this;\n if (!self.player) {\n callback(null);\n return;\n }\n if (self.player.getVolume) {\n self.player.getVolume().then(volume => {\n callback(!!volume);\n });\n }\n }\n setCurrentTime(currentTime = false) {\n const self = this;\n if (!self.player || typeof currentTime !== 'number' || !self.player.setCurrentTime) {\n return;\n }\n self.player.setCurrentTime(currentTime);\n }\n getCurrentTime(callback) {\n const self = this;\n if (!self.player || !self.player.getCurrentTime) {\n return;\n }\n self.player.getCurrentTime().then(currentTime => {\n callback(currentTime);\n });\n }\n getImageURL(callback) {\n const self = this;\n if (self.videoImage) {\n callback(self.videoImage);\n return;\n }\n\n // We should provide width to get HQ thumbnail URL.\n let width = global$1.innerWidth || 1920;\n if (global$1.devicePixelRatio) {\n width *= global$1.devicePixelRatio;\n }\n width = Math.min(width, 1920);\n let request = new XMLHttpRequest();\n // https://vimeo.com/api/oembed.json?url=https://vimeo.com/235212527\n request.open('GET', `https://vimeo.com/api/oembed.json?url=${self.url}&width=${width}`, true);\n request.onreadystatechange = function () {\n if (this.readyState === 4) {\n if (this.status >= 200 && this.status < 400) {\n // Success!\n const response = JSON.parse(this.responseText);\n if (response.thumbnail_url) {\n self.videoImage = response.thumbnail_url;\n callback(self.videoImage);\n }\n }\n }\n };\n request.send();\n request = null;\n }\n getVideo(callback) {\n const self = this;\n\n // return generated video block\n if (self.$video) {\n callback(self.$video);\n return;\n }\n\n // generate new video block\n onAPIready(() => {\n let hiddenDiv;\n if (!self.$video) {\n hiddenDiv = document.createElement('div');\n hiddenDiv.style.display = 'none';\n }\n self.playerOptions = {\n // GDPR Compliance.\n dnt: 1,\n id: self.videoID,\n autopause: 0,\n transparent: 0,\n autoplay: self.options.autoplay ? 1 : 0,\n loop: self.options.loop ? 1 : 0,\n muted: self.options.mute || self.options.volume === 0 ? 1 : 0\n };\n\n // private video hash\n const urlHash = self.constructor.parseURLHash(self.url);\n if (urlHash) {\n self.playerOptions.h = urlHash;\n }\n\n // hide controls\n if (!self.options.showControls) {\n self.playerOptions.controls = 0;\n }\n\n // enable background option\n if (!self.options.showControls && self.options.loop && self.options.autoplay) {\n self.playerOptions.background = 1;\n }\n if (!self.$video) {\n let playerOptionsString = '';\n Object.keys(self.playerOptions).forEach(key => {\n if (playerOptionsString !== '') {\n playerOptionsString += '&';\n }\n playerOptionsString += `${key}=${encodeURIComponent(self.playerOptions[key])}`;\n });\n\n // we need to create iframe manually because when we create it using API\n // js events won't triggers after iframe moved to another place\n self.$video = document.createElement('iframe');\n self.$video.setAttribute('id', self.playerID);\n self.$video.setAttribute('src', `https://player.vimeo.com/video/${self.videoID}?${playerOptionsString}`);\n self.$video.setAttribute('frameborder', '0');\n self.$video.setAttribute('mozallowfullscreen', '');\n self.$video.setAttribute('allowfullscreen', '');\n self.$video.setAttribute('title', 'Vimeo video player');\n\n // add accessibility attributes\n if (self.options.accessibilityHidden) {\n self.$video.setAttribute('tabindex', '-1');\n self.$video.setAttribute('aria-hidden', 'true');\n }\n hiddenDiv.appendChild(self.$video);\n document.body.appendChild(hiddenDiv);\n }\n self.player = self.player || new global$1.Vimeo.Player(self.$video, self.playerOptions);\n\n // Since Vimeo removed the `volume` parameter, we have to set it manually.\n if (!self.options.mute && typeof self.options.volume === 'number') {\n self.setVolume(self.options.volume);\n }\n\n // set current time for autoplay\n if (self.options.startTime && self.options.autoplay) {\n self.player.setCurrentTime(self.options.startTime);\n }\n\n // get video width and height\n self.player.getVideoWidth().then(width => {\n self.videoWidth = width || 1280;\n });\n self.player.getVideoHeight().then(height => {\n self.videoHeight = height || 720;\n });\n\n // events\n let vmStarted;\n self.player.on('timeupdate', e => {\n if (!vmStarted) {\n self.fire('started', e);\n vmStarted = 1;\n }\n self.fire('timeupdate', e);\n\n // check for end of video and play again or stop\n if (self.options.endTime && e.seconds >= self.options.endTime) {\n if (self.options.loop) {\n self.play(self.options.startTime);\n } else {\n self.pause();\n }\n }\n });\n self.player.on('play', e => {\n self.fire('play', e);\n\n // check for the start time and start with it\n if (self.options.startTime && e.seconds === 0) {\n self.play(self.options.startTime);\n }\n });\n self.player.on('pause', e => {\n self.fire('pause', e);\n });\n self.player.on('ended', e => {\n self.fire('ended', e);\n });\n self.player.on('loaded', e => {\n self.fire('ready', e);\n });\n self.player.on('volumechange', e => {\n self.getVolume(volume => {\n self.options.volume = volume;\n });\n self.fire('volumechange', e);\n });\n self.player.on('error', e => {\n self.fire('error', e);\n });\n callback(self.$video);\n });\n }\n}\n\nclass VideoWorkerLocal extends VideoWorkerBase {\n type = 'local';\n static parseURL(url) {\n // eslint-disable-next-line no-useless-escape\n const videoFormats = url.split(/,(?=mp4\\:|webm\\:|ogv\\:|ogg\\:)/);\n const result = {};\n let ready = 0;\n videoFormats.forEach(val => {\n // eslint-disable-next-line no-useless-escape\n const match = val.match(/^(mp4|webm|ogv|ogg)\\:(.*)/);\n if (match && match[1] && match[2]) {\n // eslint-disable-next-line prefer-destructuring\n result[match[1] === 'ogv' ? 'ogg' : match[1]] = match[2];\n ready = 1;\n }\n });\n return ready ? result : false;\n }\n play(start) {\n const self = this;\n if (!self.player) {\n return;\n }\n if (typeof start !== 'undefined') {\n self.player.currentTime = start;\n }\n if (self.player.paused) {\n // Don't play if video is already ended and with no loop.\n if (self.options.endTime && !self.options.loop) {\n self.getCurrentTime(seconds => {\n if (seconds < self.options.endTime) {\n self.player.play();\n }\n });\n } else {\n self.player.play();\n }\n }\n }\n pause() {\n const self = this;\n if (!self.player || self.player.paused) {\n return;\n }\n self.player.pause();\n }\n mute() {\n const self = this;\n if (!self.player) {\n return;\n }\n self.$video.muted = true;\n }\n unmute() {\n const self = this;\n if (!self.player) {\n return;\n }\n self.$video.muted = false;\n }\n setVolume(volume = false) {\n const self = this;\n if (!self.player || typeof volume !== 'number') {\n return;\n }\n self.$video.volume = volume / 100;\n }\n getVolume(callback) {\n const self = this;\n if (!self.player) {\n callback(false);\n return;\n }\n callback(self.$video.volume * 100);\n }\n getMuted(callback) {\n const self = this;\n if (!self.player) {\n callback(null);\n return;\n }\n callback(self.$video.muted);\n }\n setCurrentTime(currentTime = false) {\n const self = this;\n if (!self.player || typeof currentTime !== 'number') {\n return;\n }\n self.$video.currentTime = currentTime;\n }\n getCurrentTime(callback) {\n const self = this;\n if (!self.player) {\n return;\n }\n callback(self.player.currentTime);\n }\n getImageURL(callback) {\n const self = this;\n if (self.videoImage) {\n callback(self.videoImage);\n }\n }\n getVideo(callback) {\n const self = this;\n\n // return generated video block\n if (self.$video) {\n callback(self.$video);\n return;\n }\n\n // generate new video block\n let hiddenDiv;\n if (!self.$video) {\n hiddenDiv = document.createElement('div');\n hiddenDiv.style.display = 'none';\n }\n function addSourceElement(element, src, type) {\n const source = document.createElement('source');\n source.src = src;\n source.type = type;\n element.appendChild(source);\n }\n if (!self.$video) {\n self.$video = document.createElement('video');\n self.player = self.$video;\n\n // show controls\n if (self.options.showControls) {\n self.$video.controls = true;\n }\n\n // set volume\n if (typeof self.options.volume === 'number') {\n self.setVolume(self.options.volume);\n }\n\n // mute (it is required to mute after the volume set)\n if (self.options.mute) {\n self.mute();\n }\n\n // loop\n if (self.options.loop) {\n self.$video.loop = true;\n }\n\n // autoplay enable on mobile devices\n self.$video.setAttribute('playsinline', '');\n self.$video.setAttribute('webkit-playsinline', '');\n\n // add accessibility attributes\n if (self.options.accessibilityHidden) {\n self.$video.setAttribute('tabindex', '-1');\n self.$video.setAttribute('aria-hidden', 'true');\n }\n self.$video.setAttribute('id', self.playerID);\n hiddenDiv.appendChild(self.$video);\n document.body.appendChild(hiddenDiv);\n Object.keys(self.videoID).forEach(key => {\n addSourceElement(self.$video, self.videoID[key], `video/${key}`);\n });\n }\n let locStarted;\n self.player.addEventListener('playing', e => {\n if (!locStarted) {\n self.fire('started', e);\n }\n locStarted = 1;\n });\n self.player.addEventListener('timeupdate', function (e) {\n self.fire('timeupdate', e);\n\n // check for end of video and play again or stop\n if (self.options.endTime && this.currentTime >= self.options.endTime) {\n if (self.options.loop) {\n self.play(self.options.startTime);\n } else {\n self.pause();\n }\n }\n });\n self.player.addEventListener('play', e => {\n self.fire('play', e);\n });\n self.player.addEventListener('pause', e => {\n self.fire('pause', e);\n });\n self.player.addEventListener('ended', e => {\n self.fire('ended', e);\n });\n self.player.addEventListener('loadedmetadata', function () {\n // get video width and height\n self.videoWidth = this.videoWidth || 1280;\n self.videoHeight = this.videoHeight || 720;\n self.fire('ready');\n\n // autoplay\n if (self.options.autoplay) {\n self.play(self.options.startTime);\n }\n });\n self.player.addEventListener('volumechange', e => {\n self.getVolume(volume => {\n self.options.volume = volume;\n });\n self.fire('volumechange', e);\n });\n self.player.addEventListener('error', e => {\n self.fire('error', e);\n });\n callback(self.$video);\n }\n}\n\nfunction VideoWorker(url, options) {\n let result = false;\n Object.keys(VideoWorker.providers).forEach(key => {\n if (!result && VideoWorker.providers[key].parseURL(url)) {\n result = new VideoWorker.providers[key](url, options);\n }\n });\n return result || new VideoWorkerBase(url, options);\n}\nVideoWorker.BaseClass = VideoWorkerBase;\nVideoWorker.providers = {\n Youtube: VideoWorkerYoutube,\n Vimeo: VideoWorkerVimeo,\n Local: VideoWorkerLocal\n};\n\nexport { VideoWorker as default };\n//# sourceMappingURL=video-worker.esm.js.map\n", "import VideoWorker from 'video-worker';\n\nimport global from './utils/global';\n\nfunction jarallaxVideo(jarallax = global.jarallax) {\n if (typeof jarallax === 'undefined') {\n return;\n }\n\n const Jarallax = jarallax.constructor;\n\n // append video after when block will be visible.\n const defOnScroll = Jarallax.prototype.onScroll;\n Jarallax.prototype.onScroll = function () {\n const self = this;\n\n defOnScroll.apply(self);\n\n const isReady =\n !self.isVideoInserted &&\n self.video &&\n (!self.options.videoLazyLoading || self.isElementInViewport) &&\n !self.options.disableVideo();\n\n if (isReady) {\n self.isVideoInserted = true;\n\n self.video.getVideo((video) => {\n const $parent = video.parentNode;\n self.css(video, {\n position: self.image.position,\n top: '0px',\n left: '0px',\n right: '0px',\n bottom: '0px',\n width: '100%',\n height: '100%',\n maxWidth: 'none',\n maxHeight: 'none',\n pointerEvents: 'none',\n transformStyle: 'preserve-3d',\n backfaceVisibility: 'hidden',\n margin: 0,\n zIndex: -1,\n });\n self.$video = video;\n\n // add Poster attribute to self-hosted video\n if (self.video.type === 'local') {\n if (self.image.src) {\n self.$video.setAttribute('poster', self.image.src);\n } else if (\n self.image.$item &&\n self.image.$item.tagName === 'IMG' &&\n self.image.$item.src\n ) {\n self.$video.setAttribute('poster', self.image.$item.src);\n }\n }\n\n // add classname to video element\n if (self.options.videoClass) {\n self.$video.setAttribute(\n 'class',\n `${self.options.videoClass} ${self.options.videoClass}-${self.video.type}`\n );\n }\n\n // insert video tag\n self.image.$container.appendChild(video);\n\n // remove parent video element (created by VideoWorker)\n $parent.parentNode.removeChild($parent);\n\n // call onVideoInsert event\n if (self.options.onVideoInsert) {\n self.options.onVideoInsert.call(self);\n }\n });\n }\n };\n\n // cover video\n const defCoverImage = Jarallax.prototype.coverImage;\n Jarallax.prototype.coverImage = function () {\n const self = this;\n const imageData = defCoverImage.apply(self);\n const node = self.image.$item ? self.image.$item.nodeName : false;\n\n if (imageData && self.video && node && (node === 'IFRAME' || node === 'VIDEO')) {\n let h = imageData.image.height;\n let w = (h * self.image.width) / self.image.height;\n let ml = (imageData.container.width - w) / 2;\n let mt = imageData.image.marginTop;\n\n if (imageData.container.width > w) {\n w = imageData.container.width;\n h = (w * self.image.height) / self.image.width;\n ml = 0;\n mt += (imageData.image.height - h) / 2;\n }\n\n // add video height over than need to hide controls\n if (node === 'IFRAME') {\n h += 400;\n mt -= 200;\n }\n\n self.css(self.$video, {\n width: `${w}px`,\n marginLeft: `${ml}px`,\n height: `${h}px`,\n marginTop: `${mt}px`,\n });\n }\n\n return imageData;\n };\n\n // init video\n const defInitImg = Jarallax.prototype.initImg;\n Jarallax.prototype.initImg = function () {\n const self = this;\n const defaultResult = defInitImg.apply(self);\n\n if (!self.options.videoSrc) {\n self.options.videoSrc = self.$item.getAttribute('data-jarallax-video') || null;\n }\n\n if (self.options.videoSrc) {\n self.defaultInitImgResult = defaultResult;\n return true;\n }\n\n return defaultResult;\n };\n\n const defCanInitParallax = Jarallax.prototype.canInitParallax;\n Jarallax.prototype.canInitParallax = function () {\n const self = this;\n let defaultResult = defCanInitParallax.apply(self);\n\n if (!self.options.videoSrc) {\n return defaultResult;\n }\n\n // Init video api\n const video = new VideoWorker(self.options.videoSrc, {\n autoplay: true,\n loop: self.options.videoLoop,\n showControls: false,\n accessibilityHidden: true,\n startTime: self.options.videoStartTime || 0,\n endTime: self.options.videoEndTime || 0,\n mute: !self.options.videoVolume,\n volume: self.options.videoVolume || 0,\n });\n\n // call onVideoWorkerInit event\n if (self.options.onVideoWorkerInit) {\n self.options.onVideoWorkerInit.call(self, video);\n }\n\n function resetDefaultImage() {\n if (self.image.$default_item) {\n self.image.$item = self.image.$default_item;\n self.image.$item.style.display = 'block';\n\n // set image width and height\n self.coverImage();\n self.onScroll();\n }\n }\n\n if (video.isValid()) {\n // Force enable parallax.\n // When the parallax disabled on mobile devices, we still need to display videos.\n // https://github.com/nk-o/jarallax/issues/159\n if (this.options.disableParallax()) {\n defaultResult = true;\n self.image.position = 'absolute';\n self.options.type = 'scroll';\n self.options.speed = 1;\n }\n\n // if parallax will not be inited, we can add thumbnail on background.\n if (!defaultResult) {\n if (!self.defaultInitImgResult) {\n video.getImageURL((url) => {\n // save default user styles\n const curStyle = self.$item.getAttribute('style');\n if (curStyle) {\n self.$item.setAttribute('data-jarallax-original-styles', curStyle);\n }\n\n // set new background\n self.css(self.$item, {\n 'background-image': `url(\"${url}\")`,\n 'background-position': 'center',\n 'background-size': 'cover',\n });\n });\n }\n\n // init video\n } else {\n video.on('ready', () => {\n if (self.options.videoPlayOnlyVisible) {\n const oldOnScroll = self.onScroll;\n self.onScroll = function () {\n oldOnScroll.apply(self);\n if (\n !self.videoError &&\n (self.options.videoLoop || (!self.options.videoLoop && !self.videoEnded))\n ) {\n if (self.isVisible()) {\n video.play();\n } else {\n video.pause();\n }\n }\n };\n } else {\n video.play();\n }\n });\n video.on('started', () => {\n self.image.$default_item = self.image.$item;\n self.image.$item = self.$video;\n\n // set video width and height\n self.image.width = self.video.videoWidth || 1280;\n self.image.height = self.video.videoHeight || 720;\n self.coverImage();\n self.onScroll();\n\n // hide image\n if (self.image.$default_item) {\n self.image.$default_item.style.display = 'none';\n }\n });\n\n video.on('ended', () => {\n self.videoEnded = true;\n\n if (!self.options.videoLoop) {\n // show default image if Loop disabled.\n resetDefaultImage();\n }\n });\n video.on('error', () => {\n self.videoError = true;\n\n // show default image if video loading error.\n resetDefaultImage();\n });\n\n self.video = video;\n\n // set image if not exists\n if (!self.defaultInitImgResult) {\n // set empty image on self-hosted video if not defined\n self.image.src =\n 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n\n if (video.type !== 'local') {\n video.getImageURL((url) => {\n self.image.bgImage = `url(\"${url}\")`;\n self.init();\n });\n\n return false;\n }\n }\n }\n }\n\n return defaultResult;\n };\n\n // Destroy video parallax\n const defDestroy = Jarallax.prototype.destroy;\n Jarallax.prototype.destroy = function () {\n const self = this;\n\n if (self.image.$default_item) {\n self.image.$item = self.image.$default_item;\n delete self.image.$default_item;\n }\n\n defDestroy.apply(self);\n };\n}\n\nexport default jarallaxVideo;\n", "import global from '../utils/global';\n\nfunction jarallaxElement(jarallax = global.jarallax) {\n // eslint-disable-next-line no-console\n console.warn(\n \"Jarallax Element extension is DEPRECATED, please, avoid using it. We recommend you look at something like `lax.js` library . It is much more powerful and has a less code (in cases when you don't want to add parallax backgrounds).\"\n );\n\n if (typeof jarallax === 'undefined') {\n return;\n }\n\n const Jarallax = jarallax.constructor;\n\n // redefine default methods\n [\n 'initImg',\n 'canInitParallax',\n 'init',\n 'destroy',\n 'coverImage',\n 'isVisible',\n 'onScroll',\n 'onResize',\n ].forEach((key) => {\n const def = Jarallax.prototype[key];\n Jarallax.prototype[key] = function (...args) {\n const self = this;\n\n if (key === 'initImg' && self.$item.getAttribute('data-jarallax-element') !== null) {\n self.options.type = 'element';\n self.pureOptions.speed = self.$item.getAttribute('data-jarallax-element') || '100';\n }\n if (self.options.type !== 'element') {\n return def.apply(self, args);\n }\n\n self.pureOptions.threshold = self.$item.getAttribute('data-threshold') || '';\n\n switch (key) {\n case 'init': {\n const speedArr = `${self.pureOptions.speed}`.split(' ');\n self.options.speed = self.pureOptions.speed || 0;\n self.options.speedY = speedArr[0] ? parseFloat(speedArr[0]) : 0;\n self.options.speedX = speedArr[1] ? parseFloat(speedArr[1]) : 0;\n\n const thresholdArr = self.pureOptions.threshold.split(' ');\n self.options.thresholdY = thresholdArr[0] ? parseFloat(thresholdArr[0]) : null;\n self.options.thresholdX = thresholdArr[1] ? parseFloat(thresholdArr[1]) : null;\n\n def.apply(self, args);\n\n // restore background image if available.\n const originalStylesTag = self.$item.getAttribute('data-jarallax-original-styles');\n if (originalStylesTag) {\n self.$item.setAttribute('style', originalStylesTag);\n }\n\n return true;\n }\n case 'onResize': {\n const defTransform = self.css(self.$item, 'transform');\n self.css(self.$item, { transform: '' });\n const rect = self.$item.getBoundingClientRect();\n self.itemData = {\n width: rect.width,\n height: rect.height,\n y: rect.top + self.getWindowData().y,\n x: rect.left,\n };\n self.css(self.$item, { transform: defTransform });\n break;\n }\n case 'onScroll': {\n const wnd = self.getWindowData();\n const centerPercent =\n (wnd.y + wnd.height / 2 - self.itemData.y - self.itemData.height / 2) /\n (wnd.height / 2);\n const moveY = centerPercent * self.options.speedY;\n const moveX = centerPercent * self.options.speedX;\n let my = moveY;\n let mx = moveX;\n if (self.options.thresholdY !== null && moveY > self.options.thresholdY) my = 0;\n if (self.options.thresholdX !== null && moveX > self.options.thresholdX) mx = 0;\n self.css(self.$item, { transform: `translate3d(${mx}px,${my}px,0)` });\n break;\n }\n case 'initImg':\n case 'isVisible':\n case 'coverImage':\n return true;\n // no default\n }\n return def.apply(self, args);\n };\n });\n}\n\nexport default jarallaxElement;\n", "import jarallaxLib from './core';\nimport jarallaxVideoExt from './ext-video';\nimport jarallaxElementExt from './deprecated/ext-element';\n\nexport const jarallax = jarallaxLib;\n\nexport const jarallaxVideo = function jarallaxVideo() {\n return jarallaxVideoExt(jarallax);\n};\n\nexport const jarallaxElement = function jarallaxElement() {\n return jarallaxElementExt(jarallax);\n};\n", "import ApplicationController from \"../application_controller.js\";\nimport { jarallax, jarallaxVideo } from \"jarallax\";\n\n\n// TODO handle youtube video backgrounds when user rejects third party cookies.\nexport default class extends ApplicationController {\n static targets = [ \"imageContainer\" ];\n\n static values = {\n videoSrc: { type: String, default: \"\" },\n };\n\n connect() {\n this.log_function(\"connect\");\n\n if(this.videoSrcValue) {\n this.log_function(\"connect\", \"videoSrc\", this.videoSrcValue);\n jarallaxVideo();\n }\n\n this.init_attempts = 0;\n this.max_init_attempts = 5;\n\n this.interval = setInterval(() => {\n\n if(this.init_attempts > this.max_init_attempts){\n clearInterval(this.interval);\n return false;\n }\n\n if (this.image) {\n this.element.classList.add(\"jarallax\");\n this.image.classList.add(\"jarallax-img\");\n jarallax(this.element, this.config);\n clearInterval(this.interval);\n }\n\n this.init_attempts++;\n }, 1000);\n }\n\n handleVideoInsert(){\n this.log_function(\"handleVideoInsert\");\n this.element.classList.add(\"loaded\");\n }\n\n disconnect(){\n this.log_function(\"disconnect\");\n\n if(this.interval) {\n clearInterval(this.interval);\n }\n\n jarallax(this.element, \"destroy\");\n }\n\n get image() {\n if (this.imageContainerTarget) {\n const imageElement = this.imageContainerTarget.querySelector(\"img\");\n return imageElement || null;\n }\n return null;\n }\n\n get config(){\n this.log_function(\"get config\");\n\n //* https://github.com/nk-o/jarallax/blob/master/README.md#options\n return {\n type: \"scroll\",\n speed: 0,\n videoSrc: this.videoSrcValue,\n onVideoInsert: this.handleVideoInsert.bind(this),\n };\n }\n}\n", "import { LightGallery } from './lightgallery';\nimport { VideoSource } from './plugins/video/types';\n\n/**\n * List of lightGallery events\n * All events should be documented here\n * Below interfaces are used to build the website documentations\n * */\nexport const lGEvents: {\n [key: string]: string;\n} = {\n afterAppendSlide: 'lgAfterAppendSlide',\n init: 'lgInit',\n hasVideo: 'lgHasVideo',\n containerResize: 'lgContainerResize',\n updateSlides: 'lgUpdateSlides',\n afterAppendSubHtml: 'lgAfterAppendSubHtml',\n beforeOpen: 'lgBeforeOpen',\n afterOpen: 'lgAfterOpen',\n slideItemLoad: 'lgSlideItemLoad',\n beforeSlide: 'lgBeforeSlide',\n afterSlide: 'lgAfterSlide',\n posterClick: 'lgPosterClick',\n dragStart: 'lgDragStart',\n dragMove: 'lgDragMove',\n dragEnd: 'lgDragEnd',\n beforeNextSlide: 'lgBeforeNextSlide',\n beforePrevSlide: 'lgBeforePrevSlide',\n beforeClose: 'lgBeforeClose',\n afterClose: 'lgAfterClose',\n rotateLeft: 'lgRotateLeft',\n rotateRight: 'lgRotateRight',\n flipHorizontal: 'lgFlipHorizontal',\n flipVertical: 'lgFlipVertical',\n autoplay: 'lgAutoplay',\n autoplayStart: 'lgAutoplayStart',\n autoplayStop: 'lgAutoplayStop',\n};\n\n// Follow the below format for the event documentation\n// @method is the method name when event is used with Angular/React components\n\n/**\n * Fired only once when lightGallery is initialized\n * @name lgInit\n * @method onInit\n * @example\n * const lg = document.getElementById('custom-events-demo');\n * // Perform any action on lightGallery initialization.\n * // Init event returns the plugin instance that can be used to call any lightGalley public method\n * let pluginInstance = null;\n * lg.addEventListener('lgInit', (event) => {\n * pluginInstance = event.detail.instance;\n * });\n * lightGallery(lg);\n * @see
Methods\n */\nexport interface InitDetail {\n /**\n * lightGallery plugin instance\n */\n instance: LightGallery;\n}\n\n/**\n * Fired when the slide content has been inserted into it's slide container.\n * @name lgAfterAppendSlide\n * @method onAfterAppendSlide\n */\nexport interface AfterAppendSlideEventDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired immediately before opening the gallery\n * @name lgBeforeOpen\n * @method onBeforeOpen\n */\nexport interface BeforeOpenDetail {}\n\n/**\n * Fired immediately after opening the gallery\n * @name lgAfterOpen\n * @method onAfterOpen\n */\nexport interface AfterOpenDetail {}\n\n/**\n * Fired once the media inside the slide has been completely loaded .\n * @name lgSlideItemLoad\n * @method onSlideItemLoad\n */\nexport interface SlideItemLoadDetail {\n /**\n * Index of the slide\n */\n index: number;\n /**\n * For the first slide, lightGallery adds some delay for displaying the loaded slide item.\n * This delay is required for the transition effect when the slide item is displayed\n * Respect the delay when you use this event\n */\n delay: number;\n\n // Will be true for the first slide\n isFirstSlide: boolean;\n}\n\n/**\n * Fired immediately before each slide transition.\n * @name lgBeforeSlide\n * @method onBeforeSlide\n * @example\n * const lg = document.getElementById('custom-events-demo');\n * // Perform any action before each slide transition\n * lg.addEventListener('lgBeforeSlide', (event) => {\n * const { index, prevIndex } = event.detail;\n * alert(index, prevIndex);\n * });\n * lightGallery(lg);\n */\nexport interface BeforeSlideDetail {\n /**\n * Index of the previous slide\n */\n prevIndex: number;\n /**\n * Index of the slide\n */\n index: number;\n /**\n * true if slide function called via touch event or mouse drag\n */\n fromTouch: boolean;\n /**\n * true if slide function called via thumbnail click\n */\n fromThumb: boolean;\n}\n\n/**\n * Fired immediately after each slide transition.\n * @name lgAfterSlide\n * @method onAfterSlide\n */\nexport interface AfterSlideDetail {\n /**\n * Index of the previous slide\n */\n prevIndex: number;\n /**\n * Index of the slide\n */\n index: number;\n /**\n * true if slide function called via touch event or mouse drag\n */\n fromTouch: boolean;\n /**\n * true if slide function called via thumbnail click\n */\n fromThumb: boolean;\n}\n\n/**\n * Fired when the video poster is clicked.\n * @name lgPosterClick\n * @method onPosterClick\n */\nexport interface PosterClickDetail {}\n\n/**\n * Fired when the drag event to move to different slide starts.\n * @name lgDragStart\n * @method onDragStart\n */\nexport interface DragStartDetail {}\n\n/**\n * Fired periodically during the drag operation.\n * @name lgDragMove\n * @method onDragMove\n */\nexport interface DragMoveDetail {}\n\n/**\n * Fired when the user has finished the drag operation\n * @name lgDragEnd\n * @method onDragEnd\n */\nexport interface DragEndDetail {}\n\n/**\n * Fired immediately before the start of the close process.\n * @name lgBeforeClose\n * @method onBeforeClose\n */\nexport interface BeforeCloseDetail {}\n\n/**\n * Fired immediately once lightGallery is closed.\n * @name lgAfterClose\n * @method onAfterClose\n */\nexport interface AfterCloseDetail {\n /**\n * lightGallery plugin instance\n */\n instance: LightGallery;\n}\n\n/**\n * Fired immediately before each \"next\" slide transition\n * @name lgBeforeNextSlide\n * @method onBeforeNextSlide\n */\nexport interface BeforeNextSlideDetail {\n /**\n * Index of the slide\n */\n index: number;\n /**\n * true if slide function called via touch event or mouse drag\n */\n fromTouch: boolean;\n}\n\n/**\n * Fired immediately before each \"prev\" slide transition\n * @name lgBeforePrevSlide\n * @method onBeforePrevSlide\n */\nexport interface BeforePrevSlideDetail {\n /**\n * Index of the slide\n */\n index: number;\n /**\n * true if slide function called via touch event or mouse drag\n */\n fromTouch: boolean;\n}\n\n/**\n * Fired when the sub-html content (ex : title/ description) has been appended into the slide.\n * @name lgAfterAppendSubHtml\n * @method onAfterAppendSubHtml\n */\nexport interface AfterAppendSubHtmlDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when the lightGallery container has been resized.\n * @name lgContainerResize\n * @method onContainerResize\n */\nexport interface ContainerResizeDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when lightGallery detects video slide\n * @name lgHasVideo\n * @method onHasVideo\n */\nexport interface HasVideoDetail {\n /**\n * Index of the slide,\n */\n index: number;\n /**\n * Video source\n */\n src: string;\n /**\n * HTML5 video source if available\n *

\n HTML5 video source = source: {\n src: string;\n type: string;\n }[];\n attributes: HTMLVideoElement;\n *

\n */\n html5Video: VideoSource;\n /**\n * True if video has poster\n */\n hasPoster: boolean;\n}\n\n/**\n * Fired when the image is rotated in anticlockwise direction\n * @name lgRotateLeft\n * @method onRotateLeft\n */\nexport interface RotateLeftDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when the image is rotated in clockwise direction\n * @name lgRotateRight\n * @method onRotateRight\n */\nexport interface RotateRightDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when the image is flipped horizontally\n * @name lgFlipHorizontal\n * @method onFlipHorizontal\n */\nexport interface FlipHorizontalDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when the image is flipped vertically\n * @name lgFlipVertical\n * @method onFlipVertical\n */\nexport interface FlipVerticalDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n", "import { GalleryItem } from './lg-utils';\nimport { LgQuery } from './lgQuery';\nimport { LightGallery } from './lightgallery';\nimport { AutoplaySettings } from './plugins/autoplay/lg-autoplay-settings';\nimport { CommentSettings } from './plugins/comment/lg-comment-settings';\nimport { FullscreenSettings } from './plugins/fullscreen/lg-fullscreen-settings';\nimport { HashSettings } from './plugins/hash/lg-hash-settings';\nimport { PagerSettings } from './plugins/pager/lg-pager-settings';\nimport { RotateSettings } from './plugins/rotate/lg-rotate-settings';\nimport { ShareSettings } from './plugins/share/lg-share-settings';\nimport { ThumbnailsSettings } from './plugins/thumbnail/lg-thumbnail-settings';\nimport { VideoSettings } from './plugins/video/lg-video-settings';\nimport { ZoomSettings } from './plugins/zoom/lg-zoom-settings';\n\ntype LightGalleryCoreMobileSettings = Exclude<\n LightGalleryCoreSettings,\n 'mobileSettings'\n>;\n\n// @todo use separate mobile settings for plugins\nexport interface MobileSettings\n extends LightGalleryCoreMobileSettings,\n Partial,\n Partial,\n Partial,\n Partial,\n Partial,\n Partial,\n Partial,\n Partial,\n Partial,\n Partial {}\n\nexport interface LightGalleryCoreStrings {\n closeGallery: string;\n toggleMaximize: string;\n previousSlide: string;\n nextSlide: string;\n download: string;\n playVideo: string;\n mediaLoadingFailed: string;\n}\n\nexport type LightGalleryAllSettings = LightGalleryCoreSettings &\n ZoomSettings &\n ThumbnailsSettings &\n VideoSettings &\n AutoplaySettings &\n CommentSettings &\n FullscreenSettings &\n HashSettings &\n PagerSettings &\n RotateSettings &\n ShareSettings;\n\nexport type LightGallerySettings = Partial;\n\nexport interface LightGalleryCoreSettings {\n /**\n * Type of transition between images.\n */\n mode:\n | 'lg-slide'\n | 'lg-fade'\n | 'lg-zoom-in'\n | 'lg-zoom-in-big'\n | 'lg-zoom-out'\n | 'lg-zoom-out-big'\n | 'lg-zoom-out-in'\n | 'lg-zoom-in-out'\n | 'lg-soft-zoom'\n | 'lg-scale-up'\n | 'lg-slide-circular'\n | 'lg-slide-circular-vertical'\n | 'lg-slide-vertical'\n | 'lg-slide-vertical-growth'\n | 'lg-slide-skew-only'\n | 'lg-slide-skew-only-rev'\n | 'lg-slide-skew-only-y'\n | 'lg-slide-skew-only-y-rev'\n | 'lg-slide-skew'\n | 'lg-slide-skew-rev'\n | 'lg-slide-skew-cross'\n | 'lg-slide-skew-cross-rev'\n | 'lg-slide-skew-ver'\n | 'lg-slide-skew-ver-rev'\n | 'lg-slide-skew-ver-cross'\n | 'lg-slide-skew-ver-cross-rev'\n | 'lg-lollipop'\n | 'lg-lollipop-rev'\n | 'lg-rotate'\n | 'lg-rotate-rev'\n | 'lg-tube';\n\n /**\n * Slide animation CSS easing property\n */\n easing: string;\n\n /**\n *Transition duration (in ms).\n */\n speed: number;\n\n /**\n * If you are using lightGallery for commercial projects, you need to purchase a commercial license\n * to get the license key. For projects that are compatible with GPLv3 license,\n * please contact us for getting a license key at
contact@lightgalleryjs.com.\n * If you want to test lightGallery before purchasing a commercial license, you can\n * use `0000-0000-000-0000` as a temporary license key\n */\n\n licenseKey: string;\n\n /**\n * Height of the gallery.\n * example '100%' , '300px'\n */\n height: string;\n\n /**\n * Width of the gallery.\n * example '100%' , '300px'\n */\n width: string;\n\n /**\n * Add custom class for gallery container\n * This can be used to set different style for different galleries\n */\n addClass: string;\n\n /**\n * Start animation class for the gallery.\n * @description\n * \n */\n startClass: string;\n\n /**\n * Enable zoom from origin effect.\n * @description You need to know the original image size upfront and provide it via data-lg-size attribute as data-lg-size=\"1920-1280\"\n *\n * If you don't know, the size of a few images in the list, you can skip the data-lg-size attribute for the particular slides,\n * lightGallery will show the default animation if data-lg-size is not available\n *\n * If you are using responsive images,\n * you can pass a comma separated list of sizes combined with a max-width (up to what size the particular image should be used)\n *\n * example -\n * data-lg-size=\"240-160-375, 400-267-480, 1600-1067\"\n * data-responsive=\"img-240.jpg 375, img-400.jpg 480\"\n * data-src=\"img-1600.jpg\" \n *\n * In the above example, upto 375 width img.240.jpg and lg-size 240-160 will be used.\n * Similarly, upto 480 pixel width size 400-267 and img-400.jpg will be used\n * And above 480, lg-size 1600-1067 and img-1600.jpg will be used\n *\n * \n */\n zoomFromOrigin: boolean;\n\n /**\n * Zoom from image animation duration\n */\n startAnimationDuration: number;\n\n /**\n * Backdrop transition duration.\n * Note - Do not change the value of backdrop via css.\n */\n backdropDuration: number;\n\n /**\n * Configure where the gallery should be appended.\n * Useful to create inline galleries and more\n * It is an empty string in the default settings and later assigned to document.body to avoid accessing document for SSR\n */\n container: HTMLElement | '';\n\n /**\n * Delay for hiding gallery controls in ms.\n * Pass 0 if you don't want to hide the controls\n */\n hideBarsDelay: number;\n\n /**\n * Delay in hiding controls for the first time when gallery is opened\n */\n showBarsAfter: number;\n\n /**\n * Delay slide transitions.\n * @description This is useful if you want to do any action in the current slide before moving to next slide.\n *
\n * For example, fading out the captions before going to next slide.\n * .lg-slide-progress class name is added to the current slide immediately after calling the slide method.\n * But transition begins only after the delay\n *
\n */\n slideDelay: number;\n\n /**\n * Support legacy browsers\n * @description Currently this is used only for adding support to srcset attribute via picturefill library\n * If true lightGallery will show warning message to include picturefill library\n */\n supportLegacyBrowser: boolean;\n\n /**\n * If true, toolbar, captions and thumbnails will not overlap with media element\n * This will not effect thumbnails if animateThumb is false\n * Also, toggle thumbnails button is not displayed if allowMediaOverlap is false\n *
\n * Note - Changing the position of the media on every slide transition creates a flickering effect.\n * Therefore, the height of the caption is calculated dynamically, only once based on the first slide caption.\n *
\n *
\n * if you have dynamic captions for each media,\n * you can provide an appropriate height for the captions via allowMediaOverlap option\n *
\n */\n allowMediaOverlap: boolean;\n\n /**\n * Video max size.\n * @description This can be over-written by passing specific size via data-lg-size attribute\n * Recommended video resolution and & aspect ratios https://support.google.com/youtube/answer/6375112\n */\n videoMaxSize: string;\n\n /**\n * Automatically load poster image for YouTube videos\n */\n loadYouTubePoster: boolean;\n\n /**\n * Height of the caption for calculating allowMediaOverlap positions\n * Note - this is only used to find the position of media item if allowMediaOverlap is true.\n * Not for setting height of the captions\n * Set 0 if you want to calculate the height of captions dynamically\n */\n defaultCaptionHeight: number;\n\n /**\n * aria-labelledby attribute fot gallery\n */\n ariaLabelledby: string;\n\n /**\n * aria-describedby attribute for gallery\n */\n ariaDescribedby: string;\n\n /**\n * Hide scrollbar when gallery is opened\n * @version V2.5.0\n */\n hideScrollbar: boolean;\n\n /**\n * Reset to previous scrollPosition when lightGallery is closed\n * @description By default, lightGallery doesn't hide the scrollbar for a smooth opening transition.\n * If a user changes the scroll position, lightGallery resets it to the previous value\n * @version V2.5.0\n */\n resetScrollPosition: boolean;\n\n /**\n * If false user won't be abel to close the gallery at all\n * This is useful for creating inline galleries.\n */\n closable: boolean;\n\n /**\n * allows vertical drag/swipe to close gallery\n * false if option closable is false\n */\n swipeToClose: boolean;\n /**\n * allows clicks on black area to close gallery.\n */\n closeOnTap: boolean;\n\n /**\n * If false, close button won't be displayed.\n * Useful for creating inline galleries.\n */\n showCloseIcon: boolean;\n\n /**\n * Show maximize icon.\n * Useful for creating inline galleries.\n */\n showMaximizeIcon: boolean;\n\n /**\n * If false, will disable the ability to loop back to the beginning of the gallery from the last slide.\n */\n loop: boolean;\n\n /**\n * Whether the LightGallery could be closed by pressing the \"Esc\" key.\n */\n escKey: boolean;\n\n /**\n * Enable keyboard navigation\n */\n keyPress: boolean;\n\n /**\n * Trap focus within the lightGallery\n * @version V2.5.0\n */\n trapFocus: boolean;\n\n /**\n * If false, prev/next buttons will not be displayed.\n */\n controls: boolean;\n\n /**\n * Enable slideEnd animation\n */\n slideEndAnimation: boolean;\n\n /**\n * If true, prev/next button will be hidden on first/last image.\n * @description Note - this option will be ignored if loop or slideEndAnimation is set to true\n */\n hideControlOnEnd: boolean;\n\n /**\n * ability to navigate to next/prev slides on mousewheel\n */\n mousewheel: boolean;\n\n /**\n * Option to get captions from alt or title tags.\n */\n getCaptionFromTitleOrAlt: boolean;\n\n /**\n * control where the sub-html should be appended.\n * If you choose '.lg-outer', you are responsible for placing the div at the right position.\n * '.lg-outer' is useful if you want show custom HTML outside the normal gallery\n */\n appendSubHtmlTo: '.lg-sub-html' | '.lg-item' | '.lg-outer';\n\n /**\n * Set to true if the selector in \"data-sub-html\" should use the current item as its origin.\n */\n subHtmlSelectorRelative: boolean;\n\n /**\n * number of preload slides\n * @description will exicute only after the current slide is fully loaded.\n * for example, if you click on 4th image and if preload = 1 then 3rd slide and 5th\n * slide will be loaded in the background after the 4th slide is fully loaded..\n * if preload is 2 then 2nd 3rd 5th 6th slides will be preloaded.\n */\n preload: number;\n\n /**\n * Control how many slide items should be kept in dom at a time\n * @description To improve performance by reducing number of gallery items in the dom,\n * lightGallery keeps only the lowest possible number of slides in the dom at a time.\n * This has a minimum value of 3\n */\n numberOfSlideItemsInDom: number;\n\n /**\n * Custom selector property instead of direct children.\n * @description Based on your markup structure, you can specify custom selectors to fetch media data for the gallery\n * Pass \"this\" to select same element\n * You can also pass HTMLCollection directly\n * Example - '.my-selector' | '#my-selector' | this | document.querySelectorAll('.my-selector')\n */\n selector: string | HTMLCollection[];\n\n /**\n * By default selector element relative to the current gallery.\n * Instead of that you can tell lightGallery to select element relative to another element.\n * Example - '.my-selector-container' | '#my-selector-container'\n * In the code this become selector = document.querySelector(this.s.selectWithin ).querySelectorAll(this.s.selector);\n */\n selectWithin: string;\n\n /**\n * Custom html for next control\n */\n nextHtml: string;\n\n /**\n * Custom html for prev control\n */\n prevHtml: string;\n\n /**\n * specify which slide should load initially\n */\n index: number;\n\n /**\n * Set width for iframe.\n */\n iframeWidth: string;\n\n /**\n * Set height for iframe.\n */\n iframeHeight: string;\n\n /**\n * Set max width for iframe.\n */\n iframeMaxWidth: string;\n\n /**\n * Set max height for iframe.\n */\n iframeMaxHeight: string;\n\n /**\n * Enable download button.\n * @description By default download url will be taken from data-src/href attribute but it supports only for modern browsers.\n * If you want you can provide another url for download via data-download-url.\n * pass false in data-download-url if you want to hide download button for the particular slide.\n */\n download: boolean;\n\n /**\n * Whether to show total number of images and index number of currently displayed image.\n */\n counter: boolean;\n\n /**\n * Where the counter should be appended\n */\n appendCounterTo: string;\n\n /**\n * By setting the swipeThreshold (in px) you can set how far the user must swipe for the next/prev image.\n */\n swipeThreshold: number;\n\n /**\n * Enables swipe support for touch devices\n */\n enableSwipe: boolean;\n\n /**\n * Enables desktop mouse drag support\n */\n enableDrag: boolean;\n\n /**\n * LightGallery can be instantiated and launched programmatically by setting this option to true and populating dynamicEl option (see below) with the definitions of images.\n */\n dynamic: boolean;\n\n /**\n * An array of objects (src, iframe, subHtml, thumb, poster, responsive, srcset sizes) representing gallery elements.\n */\n dynamicEl: GalleryItem[];\n\n /**\n * Fetch custom properties from the selector\n * @description this is useful for plugin development\n * By default lightGallery fetches and store all the props selectors to\n * reduce frequent dom interaction for fetching props every time.\n *\n * If you need any addition data to be fetched and stored in the galleryItems variable,\n * you can do this just by passing the prop names via extraProps\n * @example\n * HTML:\n *
\n * \n * \n *
\n * JS:\n * lightGallery(document.getElementById('lightGallery'), {\n * extraProps: ['customProp']\n * })\n * // Note - If you are using dynamic mode, you can pass any custom prop in the galleryItem\n * lightGallery(document.getElementById('lightGallery'), {\n * dynamic: true,\n * dynamicEl: [{\n * src: 'img/img1.jpg',\n * customProp:'abc',\n * }]\n * })\n *\n */\n extraProps: string[];\n\n /**\n * Option to fetch different thumbnail image other than first image\n * @description If you want to use external image for thumbnail,\n * add the path of that image inside \"data-\" attribute\n * and set value of this option to the name of your custom attribute.\n *\n * @example\n *
\n * \n *
\n *\n * lightGallery(document.getElementById('lightGallery'), {\n * exThumbImage: 'data-external-thumb-image'\n * })\n */\n exThumbImage: string;\n\n /**\n * Function to detect mobile devices\n */\n isMobile?: () => boolean;\n\n /**\n * Separate settings for mobile devices\n * @description Note - this is applied only at the time of loading\n * by default controls and close buttons are disabled on mobile devices.\n * use this options if you want to enable them or change any other settings for mobile devices\n * Note - mobileSettings does not merge default values, You need to provide all mobileSettings including default values\n */\n mobileSettings: Partial;\n\n /**\n * Customize string.\n * @description This can be useful if you want to localize the lightGallery strings to other languages.\n * Use your own service to translate the strings and pass it via settings.strings\n * You can find dedicated strings option for all lightGallery modules in their respective documentation.\n * Note - You need to provide values for all the strings. For example, even if you just want to change the closeGallery string, you need to provide all the other strings as well.\n */\n strings: LightGalleryCoreStrings;\n\n plugins: (new (instance: LightGallery, $LG: LgQuery) => any)[];\n}\n\nexport const lightGalleryCoreSettings: LightGalleryCoreSettings = {\n mode: 'lg-slide',\n easing: 'ease',\n speed: 400,\n licenseKey: '0000-0000-000-0000',\n height: '100%',\n width: '100%',\n addClass: '',\n startClass: 'lg-start-zoom',\n backdropDuration: 300,\n container: '',\n startAnimationDuration: 400,\n zoomFromOrigin: true,\n hideBarsDelay: 0,\n showBarsAfter: 10000,\n slideDelay: 0,\n supportLegacyBrowser: true,\n allowMediaOverlap: false,\n videoMaxSize: '1280-720',\n loadYouTubePoster: true,\n defaultCaptionHeight: 0,\n ariaLabelledby: '',\n ariaDescribedby: '',\n resetScrollPosition: true,\n hideScrollbar: false,\n closable: true,\n swipeToClose: true,\n closeOnTap: true,\n showCloseIcon: true,\n showMaximizeIcon: false,\n loop: true,\n escKey: true,\n keyPress: true,\n trapFocus: true,\n controls: true,\n slideEndAnimation: true,\n hideControlOnEnd: false,\n mousewheel: false,\n getCaptionFromTitleOrAlt: true,\n appendSubHtmlTo: '.lg-sub-html',\n subHtmlSelectorRelative: false,\n preload: 2,\n numberOfSlideItemsInDom: 10,\n selector: '',\n selectWithin: '',\n nextHtml: '',\n prevHtml: '',\n index: 0,\n iframeWidth: '100%',\n iframeHeight: '100%',\n iframeMaxWidth: '100%',\n iframeMaxHeight: '100%',\n download: true,\n counter: true,\n appendCounterTo: '.lg-toolbar',\n swipeThreshold: 50,\n enableSwipe: true,\n enableDrag: true,\n dynamic: false,\n dynamicEl: [],\n extraProps: [],\n exThumbImage: '',\n isMobile: undefined,\n mobileSettings: {\n controls: false,\n showCloseIcon: false,\n download: false,\n } as MobileSettings,\n plugins: [],\n strings: {\n closeGallery: 'Close gallery',\n toggleMaximize: 'Toggle maximize',\n previousSlide: 'Previous slide',\n nextSlide: 'Next slide',\n download: 'Download',\n playVideo: 'Play video',\n mediaLoadingFailed: 'Oops... Failed to load content...',\n } as LightGalleryCoreStrings,\n};\n", "interface Offset {\n left: number;\n top: number;\n}\n\nfunction initLgPolyfills() {\n (function () {\n if (typeof window.CustomEvent === 'function') return false;\n\n function CustomEvent(event: string, params: any) {\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: null,\n };\n const evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(\n event,\n params.bubbles,\n params.cancelable,\n params.detail,\n );\n return evt;\n }\n\n window.CustomEvent = CustomEvent as any;\n })();\n (function () {\n if (!Element.prototype.matches) {\n Element.prototype.matches =\n (Element.prototype as any).msMatchesSelector ||\n Element.prototype.webkitMatchesSelector;\n }\n })();\n}\n\nexport type LgQuery = (selector: any) => lgQuery;\nexport class lgQuery {\n static eventListeners: { [key: string]: any[] } = {};\n static generateUUID(): string {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(\n /[xy]/g,\n function (c) {\n const r = (Math.random() * 16) | 0,\n v = c == 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n },\n );\n }\n\n private selector: any;\n private firstElement: any;\n private cssVenderPrefixes: string[] = [\n 'TransitionDuration',\n 'TransitionTimingFunction',\n 'Transform',\n 'Transition',\n ];\n constructor(selector: string | Element) {\n this.selector = this._getSelector(selector);\n this.firstElement = this._getFirstEl();\n return this;\n }\n\n private _getSelector(\n selector: string | Element,\n context: Element | Document = document,\n ): Element | null | NodeListOf {\n if (typeof selector !== 'string') {\n return selector;\n }\n context = context || document;\n const fl = selector.substring(0, 1);\n if (fl === '#') {\n return context.querySelector(selector);\n } else {\n return context.querySelectorAll(selector);\n }\n }\n\n private _each(\n func: (\n elements: Element | NodeListOf | null,\n index: number,\n ) => void,\n ): this {\n if (!this.selector) {\n return this;\n }\n if (this.selector.length !== undefined) {\n [].forEach.call(this.selector, func);\n } else {\n func(this.selector, 0);\n }\n return this;\n }\n\n private _setCssVendorPrefix(\n el: any,\n cssProperty: string,\n value?: string | number,\n ): void {\n // prettier-ignore\n const property = cssProperty.replace(/-([a-z])/gi, function (\n s,\n group1,\n ) {\n return group1.toUpperCase();\n });\n if (this.cssVenderPrefixes.indexOf(property) !== -1) {\n el.style[\n property.charAt(0).toLowerCase() + property.slice(1)\n ] = value;\n el.style['webkit' + property] = value;\n el.style['moz' + property] = value;\n el.style['ms' + property] = value;\n el.style['o' + property] = value;\n } else {\n el.style[property] = value;\n }\n }\n\n private _getFirstEl() {\n if (this.selector && this.selector.length !== undefined) {\n return this.selector[0];\n } else {\n return this.selector;\n }\n }\n\n private isEventMatched(event: string, eventName: string): boolean {\n const eventNamespace = eventName.split('.');\n return event\n .split('.')\n .filter((e) => e)\n .every((e) => {\n return eventNamespace.indexOf(e) !== -1;\n });\n }\n\n attr(attr: string): string;\n attr(attr: string, value: string | number | boolean): this;\n attr(attr: string, value?: string | number | boolean): string | this {\n if (value === undefined) {\n if (!this.firstElement) {\n return '';\n }\n return this.firstElement.getAttribute(attr);\n }\n this._each((el: any) => {\n el.setAttribute(attr, value);\n });\n return this;\n }\n\n find(selector: any): lgQuery {\n return $LG(this._getSelector(selector, this.selector));\n }\n\n first(): lgQuery {\n if (this.selector && this.selector.length !== undefined) {\n return $LG(this.selector[0]);\n } else {\n return $LG(this.selector);\n }\n }\n\n eq(index: number): lgQuery {\n return $LG(this.selector[index]);\n }\n\n parent(): lgQuery {\n return $LG(this.selector.parentElement);\n }\n\n get(): HTMLElement {\n return this._getFirstEl();\n }\n\n removeAttr(attributes: string): this {\n const attrs = attributes.split(' ');\n this._each((el: any) => {\n attrs.forEach((attr: string) => el.removeAttribute(attr));\n });\n return this;\n }\n\n wrap(className: string): this {\n if (!this.firstElement) {\n return this;\n }\n const wrapper = document.createElement('div');\n wrapper.className = className;\n this.firstElement.parentNode.insertBefore(wrapper, this.firstElement);\n this.firstElement.parentNode.removeChild(this.firstElement);\n wrapper.appendChild(this.firstElement);\n return this;\n }\n\n addClass(classNames = ''): this {\n this._each((el: any) => {\n // IE doesn't support multiple arguments\n classNames.split(' ').forEach((className) => {\n if (className) {\n el.classList.add(className);\n }\n });\n });\n return this;\n }\n\n removeClass(classNames: string): this {\n this._each((el: any) => {\n // IE doesn't support multiple arguments\n classNames.split(' ').forEach((className) => {\n if (className) {\n el.classList.remove(className);\n }\n });\n });\n return this;\n }\n\n hasClass(className: string): boolean {\n if (!this.firstElement) {\n return false;\n }\n return this.firstElement.classList.contains(className);\n }\n hasAttribute(attribute: string): boolean {\n if (!this.firstElement) {\n return false;\n }\n return this.firstElement.hasAttribute(attribute);\n }\n toggleClass(className: string): this {\n if (!this.firstElement) {\n return this;\n }\n if (this.hasClass(className)) {\n this.removeClass(className);\n } else {\n this.addClass(className);\n }\n return this;\n }\n\n css(property: string, value?: string | number): this {\n this._each((el: any) => {\n this._setCssVendorPrefix(el, property, value);\n });\n return this;\n }\n // Need to pass separate namespaces for separate elements\n on(events: string, listener: (e: any) => void): this {\n if (!this.selector) {\n return this;\n }\n events.split(' ').forEach((event: string) => {\n if (!Array.isArray(lgQuery.eventListeners[event])) {\n lgQuery.eventListeners[event] = [];\n }\n lgQuery.eventListeners[event].push(listener);\n this.selector.addEventListener(event.split('.')[0], listener);\n });\n\n return this;\n }\n // @todo - test this\n once(event: string, listener: (e: any) => void): this {\n this.on(event, () => {\n this.off(event);\n listener(event);\n });\n return this;\n }\n off(event: string): this {\n if (!this.selector) {\n return this;\n }\n Object.keys(lgQuery.eventListeners).forEach((eventName) => {\n if (this.isEventMatched(event, eventName)) {\n lgQuery.eventListeners[eventName].forEach((listener) => {\n this.selector.removeEventListener(\n eventName.split('.')[0],\n listener,\n );\n });\n lgQuery.eventListeners[eventName] = [];\n }\n });\n\n return this;\n }\n trigger(event: string, detail?: Detail): this {\n if (!this.firstElement) {\n return this;\n }\n\n const customEvent = new CustomEvent(event.split('.')[0], {\n detail: detail || null,\n });\n this.firstElement.dispatchEvent(customEvent);\n return this;\n }\n\n // Does not support IE\n load(url: string): this {\n fetch(url)\n .then((res) => res.text())\n .then((html) => {\n this.selector.innerHTML = html;\n });\n return this;\n }\n\n html(): string;\n html(html: string): this;\n html(html?: string): string | this {\n if (html === undefined) {\n if (!this.firstElement) {\n return '';\n }\n return this.firstElement.innerHTML;\n }\n this._each((el: any) => {\n el.innerHTML = html;\n });\n return this;\n }\n append(html: string | HTMLElement): this {\n this._each((el: any) => {\n if (typeof html === 'string') {\n el.insertAdjacentHTML('beforeend', html);\n } else {\n el.appendChild(html);\n }\n });\n return this;\n }\n prepend(html: string): this {\n this._each((el: any) => {\n el.insertAdjacentHTML('afterbegin', html);\n });\n return this;\n }\n remove(): this {\n this._each((el: any) => {\n el.parentNode.removeChild(el);\n });\n return this;\n }\n empty(): this {\n this._each((el: any) => {\n el.innerHTML = '';\n });\n return this;\n }\n // Supports only window\n scrollTop(): number;\n scrollTop(scrollTop: number): this;\n scrollTop(scrollTop?: number): number | this {\n if (scrollTop !== undefined) {\n document.body.scrollTop = scrollTop;\n document.documentElement.scrollTop = scrollTop;\n return this;\n } else {\n return (\n window.pageYOffset ||\n document.documentElement.scrollTop ||\n document.body.scrollTop ||\n 0\n );\n }\n }\n // Supports only window\n scrollLeft(): number;\n scrollLeft(scrollLeft?: number): this;\n scrollLeft(scrollLeft?: number): number | this {\n if (scrollLeft !== undefined) {\n document.body.scrollLeft = scrollLeft;\n document.documentElement.scrollLeft = scrollLeft;\n return this;\n } else {\n return (\n window.pageXOffset ||\n document.documentElement.scrollLeft ||\n document.body.scrollLeft ||\n 0\n );\n }\n }\n offset(): Offset {\n if (!this.firstElement) {\n return {\n left: 0,\n top: 0,\n };\n }\n const rect = this.firstElement.getBoundingClientRect();\n const bodyMarginLeft = $LG('body').style().marginLeft;\n\n // Minus body margin - https://stackoverflow.com/questions/30711548/is-getboundingclientrect-left-returning-a-wrong-value\n return {\n left: rect.left - parseFloat(bodyMarginLeft) + this.scrollLeft(),\n top: rect.top + this.scrollTop(),\n };\n }\n style(): CSSStyleDeclaration {\n if (!this.firstElement) {\n return {} as CSSStyleDeclaration;\n }\n return (\n this.firstElement.currentStyle ||\n window.getComputedStyle(this.firstElement)\n );\n }\n // Width without padding and border even if box-sizing is used.\n width(): number {\n const style = this.style();\n return (\n this.firstElement.clientWidth -\n parseFloat(style.paddingLeft) -\n parseFloat(style.paddingRight)\n );\n }\n // Height without padding and border even if box-sizing is used.\n height(): number {\n const style = this.style();\n return (\n this.firstElement.clientHeight -\n parseFloat(style.paddingTop) -\n parseFloat(style.paddingBottom)\n );\n }\n}\n\nexport function $LG(selector: any): lgQuery {\n initLgPolyfills();\n return new lgQuery(selector);\n}\n", "import { $LG, lgQuery } from './lgQuery';\nimport { VideoSource } from './plugins/video/types';\nimport { VideoInfo } from './types';\n\nexport interface ImageSize {\n width: number;\n height: number;\n}\n\nexport interface ImageSources {\n media?: string;\n srcset: string;\n sizes?: string;\n type?: string;\n}\n\nexport interface GalleryItem {\n /**\n * url of the media\n * @data-attr data-src\n */\n src?: string;\n\n /**\n * Source attributes for the picture element\n * @data-attr data-sources\n */\n sources?: ImageSources[];\n\n /**\n * Thumbnail url\n * @description By default lightGallery uses the image inside gallery selector as thumbnail.\n * But, If you want to use external image for thumbnail,\n * pass the thumbnail url via any data attribute and\n * pass the attribute name via exThumbImage option\n * @example\n *
\n * \n *
\n *\n * lightGallery(document.getElementById('lightGallery'), {\n * exThumbImage: 'data-external-thumb-image'\n * })\n * @data-attr data-*\n */\n thumb?: string;\n\n /**\n * alt attribute for the image\n * @data-attr alt\n */\n alt?: string;\n\n /**\n * Title attribute for the video\n * @data-attr title\n */\n title?: string;\n\n /**\n * Title for iframe\n * @data-attr data-iframe-title\n */\n iframeTitle?: string;\n\n /**\n * Caption for the slide\n * @description You can either pass the HTML markup or the ID or class name of the element which contains the captions\n * @data-attr data-sub-html\n */\n subHtml?: string;\n\n /**\n * url of the file which contain the sub html.\n * @description Note - Does not support Internet Explorer browser\n * @data-attr data-sub-html-url\n */\n subHtmlUrl?: string;\n\n /**\n * Video source\n * @data-attr data-video\n */\n video?: VideoSource;\n\n /**\n * Poster url\n * @data-attr data-poster\n */\n poster?: string;\n\n /**\n * Custom slide name to use in the url when hash plugin is enabled\n * @data-attr data-slide-name\n */\n slideName?: string;\n\n /**\n * List of images and viewport's max width separated by comma.\n * @description Ex?: img/1-375.jpg 375, img/1-480.jpg 480, img/1-757.jpg 757.\n * @data-attr data-responsive\n */\n responsive?: string;\n\n /**\n * srcset attribute values for the main image\n * @data-attr data-srcset\n */\n srcset?: string;\n\n /**\n * srcset sizes attribute for the main image\n * @data-attr data-sizes\n */\n sizes?: string;\n\n /**\n * Set true is you want to open your url in an iframe\n * @data-attr data-iframe\n */\n iframe?: boolean;\n\n /**\n * Download url for your image/video.\n * @description Pass false if you want to disable the download button.\n * @data-attr data-download-url\n */\n downloadUrl?: string | boolean;\n\n /**\n * Name of the file after it is downloaded.\n * @description The HTML value of the download attribute.\n * There are no restrictions on allowed values, and the browser will automatically\n * detect the correct file extension and add it to the file (.img, .pdf, .txt, .html, etc.).\n * More info\n * @data-attr data-download\n */\n download?: string | boolean;\n\n /**\n * Actual size of the image in px.\n * @description This is used in zoom plugin to see the actual size of the image when double taped on the image.\n * @data-attr data-width\n */\n width?: string;\n\n /**\n * Facebook share URL.\n * @description Specify only if you want to provide separate share URL for the specific slide. By default, current browser URL is taken.\n * @data-attr data-facebook-share-url\n */\n facebookShareUrl?: string;\n\n /**\n * Tweet text\n * @data-attr data-tweet-text\n */\n tweetText?: string;\n\n /**\n * Twitter share URL.\n * @description Specify only if you want to provide separate share URL for the specific slide. By default, current browser URL will be taken.\n * @data-attr data-twitter-share-url\n */\n twitterShareUrl?: string;\n\n /**\n * Pinterest share URL.\n * @description Specify only if you want to provide separate share URL for the specific slide. By default, current browser URL will be taken.\n * Note?: Pinterest requires absolute URL\n * @data-attr data-pinterest-share-url\n */\n pinterestShareUrl?: string;\n\n /**\n * Description for Pinterest post.\n * @data-attr data-pinterest-text\n */\n pinterestText?: string;\n\n /**\n * Facebook comments body html\n * @description Please refer facebook official documentation for generating the HTML markup\n * @example\n * \n * \n * @data-attr data-fb-html\n */\n fbHtml?: string;\n\n /**\n * Disqus page identifier\n * @description Please refer official disqus documentation for more info\n * @data-attr data-disqus-identifier\n */\n disqusIdentifier?: string;\n\n /**\n * Disqus page url\n * @description Please refer official disqus documentation for more info\n * @data-attr data-disqus-url\n */\n disqusUrl?: string;\n\n __slideVideoInfo?: VideoInfo;\n [key: string]: any;\n}\n\nconst defaultDynamicOptions = [\n 'src',\n 'sources',\n 'subHtml',\n 'subHtmlUrl',\n 'html',\n 'video',\n 'poster',\n 'slideName',\n 'responsive',\n 'srcset',\n 'sizes',\n 'iframe',\n 'downloadUrl',\n 'download',\n 'width',\n 'facebookShareUrl',\n 'tweetText',\n 'iframeTitle',\n 'twitterShareUrl',\n 'pinterestShareUrl',\n 'pinterestText',\n 'fbHtml',\n 'disqusIdentifier',\n 'disqusUrl',\n];\n\n// Convert html data-attribute to camalcase\nexport function convertToData(attr: string): string {\n // FInd a way for lgsize\n if (attr === 'href') {\n return 'src';\n }\n attr = attr.replace('data-', '');\n attr = attr.charAt(0).toLowerCase() + attr.slice(1);\n attr = attr.replace(/-([a-z])/g, (g) => g[1].toUpperCase());\n\n return attr;\n}\n\nconst utils = {\n /**\n * get possible width and height from the lgSize attribute. Used for ZoomFromOrigin option\n */\n getSize(\n el: HTMLElement,\n container: lgQuery,\n spacing = 0,\n defaultLgSize?: string,\n ): ImageSize | undefined {\n const LGel = $LG(el);\n let lgSize = LGel.attr('data-lg-size') || defaultLgSize;\n\n if (!lgSize) {\n return;\n }\n\n const isResponsiveSizes = lgSize.split(',');\n // if at-least two viewport sizes are available\n if (isResponsiveSizes[1]) {\n const wWidth = window.innerWidth;\n for (let i = 0; i < isResponsiveSizes.length; i++) {\n const size = isResponsiveSizes[i];\n const responsiveWidth = parseInt(size.split('-')[2], 10);\n if (responsiveWidth > wWidth) {\n lgSize = size;\n break;\n }\n\n // take last item as last option\n if (i === isResponsiveSizes.length - 1) {\n lgSize = size;\n }\n }\n }\n\n const size = lgSize.split('-');\n\n const width = parseInt(size[0], 10);\n const height = parseInt(size[1], 10);\n\n const cWidth = container.width();\n const cHeight = container.height() - spacing;\n\n const maxWidth = Math.min(cWidth, width);\n const maxHeight = Math.min(cHeight, height);\n\n const ratio = Math.min(maxWidth / width, maxHeight / height);\n\n return { width: width * ratio, height: height * ratio };\n },\n\n /**\n * @desc Get transform value based on the imageSize. Used for ZoomFromOrigin option\n * @param {jQuery Element}\n * @returns {String} Transform CSS string\n */\n getTransform(\n el: HTMLElement,\n container: lgQuery,\n top: number,\n bottom: number,\n imageSize?: ImageSize,\n ): string | undefined {\n if (!imageSize) {\n return;\n }\n const LGel = $LG(el).find('img').first();\n if (!LGel.get()) {\n return;\n }\n\n const containerRect = container.get().getBoundingClientRect();\n\n const wWidth = containerRect.width;\n\n // using innerWidth to include mobile safari bottom bar\n const wHeight = container.height() - (top + bottom);\n\n const elWidth = LGel.width();\n const elHeight = LGel.height();\n\n const elStyle = LGel.style();\n let x =\n (wWidth - elWidth) / 2 -\n LGel.offset().left +\n (parseFloat(elStyle.paddingLeft) || 0) +\n (parseFloat(elStyle.borderLeft) || 0) +\n $LG(window).scrollLeft() +\n containerRect.left;\n let y =\n (wHeight - elHeight) / 2 -\n LGel.offset().top +\n (parseFloat(elStyle.paddingTop) || 0) +\n (parseFloat(elStyle.borderTop) || 0) +\n $LG(window).scrollTop() +\n top;\n\n const scX = elWidth / imageSize.width;\n const scY = elHeight / imageSize.height;\n\n const transform =\n 'translate3d(' +\n (x *= -1) +\n 'px, ' +\n (y *= -1) +\n 'px, 0) scale3d(' +\n scX +\n ', ' +\n scY +\n ', 1)';\n return transform;\n },\n\n getIframeMarkup(\n iframeWidth: string,\n iframeHeight: string,\n iframeMaxWidth: string,\n iframeMaxHeight: string,\n src?: string,\n iframeTitle?: string,\n ): string {\n const title = iframeTitle ? 'title=\"' + iframeTitle + '\"' : '';\n return `
\n \n
`;\n },\n\n getImgMarkup(\n index: number,\n src: string,\n altAttr: string,\n srcset?: string,\n sizes?: string,\n sources?: ImageSources[],\n ): string {\n const srcsetAttr = srcset ? `srcset=\"${srcset}\"` : '';\n const sizesAttr = sizes ? `sizes=\"${sizes}\"` : '';\n const imgMarkup = ``;\n let sourceTag = '';\n if (sources) {\n const sourceObj =\n typeof sources === 'string' ? JSON.parse(sources) : sources;\n\n sourceTag = sourceObj.map((source: any) => {\n let attrs = '';\n Object.keys(source).forEach((key) => {\n // Do not remove the first space as it is required to separate the attributes\n attrs += ` ${key}=\"${source[key]}\"`;\n });\n return ``;\n });\n }\n return `${sourceTag}${imgMarkup}`;\n },\n\n // Get src from responsive src\n getResponsiveSrc(srcItms: string[]): string {\n const rsWidth = [];\n const rsSrc = [];\n let src = '';\n for (let i = 0; i < srcItms.length; i++) {\n const _src = srcItms[i].split(' ');\n\n // Manage empty space\n if (_src[0] === '') {\n _src.splice(0, 1);\n }\n\n rsSrc.push(_src[0]);\n rsWidth.push(_src[1]);\n }\n\n const wWidth = window.innerWidth;\n for (let j = 0; j < rsWidth.length; j++) {\n if (parseInt(rsWidth[j], 10) > wWidth) {\n src = rsSrc[j];\n break;\n }\n }\n return src;\n },\n\n isImageLoaded(img: HTMLImageElement): boolean {\n if (!img) return false;\n // During the onload event, IE correctly identifies any images that\n // weren’t downloaded as not complete. Others should too. Gecko-based\n // browsers act like NS4 in that they report this incorrectly.\n if (!img.complete) {\n return false;\n }\n\n // However, they do have two very useful properties: naturalWidth and\n // naturalHeight. These give the true size of the image. If it failed\n // to load, either of these should be zero.\n if (img.naturalWidth === 0) {\n return false;\n }\n\n // No other way of checking: assume it’s ok.\n return true;\n },\n\n getVideoPosterMarkup(\n _poster: string,\n dummyImg: string,\n videoContStyle: string,\n playVideoString: string,\n _isVideo?: VideoInfo,\n ): string {\n let videoClass = '';\n if (_isVideo && _isVideo.youtube) {\n videoClass = 'lg-has-youtube';\n } else if (_isVideo && _isVideo.vimeo) {\n videoClass = 'lg-has-vimeo';\n } else {\n videoClass = 'lg-has-html5';\n }\n\n return `
\n
\n \n ${playVideoString}\n \n \n \n \n \n \n \n
\n ${dummyImg || ''}\n \n
`;\n },\n\n getFocusableElements(container: HTMLElement): NodeListOf {\n const elements = container.querySelectorAll(\n 'a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input[type=\"text\"]:not([disabled]), input[type=\"radio\"]:not([disabled]), input[type=\"checkbox\"]:not([disabled]), select:not([disabled])',\n );\n const visibleElements = [].filter.call(elements, (element) => {\n const style = window.getComputedStyle(element);\n return style.display !== 'none' && style.visibility !== 'hidden';\n });\n return (visibleElements as unknown) as NodeListOf;\n },\n\n /**\n * @desc Create dynamic elements array from gallery items when dynamic option is false\n * It helps to avoid frequent DOM interaction\n * and avoid multiple checks for dynamic elments\n *\n * @returns {Array} dynamicEl\n */\n getDynamicOptions(\n items: any,\n extraProps: string[],\n getCaptionFromTitleOrAlt: boolean,\n exThumbImage: string,\n ): GalleryItem[] {\n const dynamicElements: GalleryItem[] = [];\n const availableDynamicOptions = [\n ...defaultDynamicOptions,\n ...extraProps,\n ];\n [].forEach.call(items, (item: HTMLElement) => {\n const dynamicEl: GalleryItem = {} as GalleryItem;\n for (let i = 0; i < item.attributes.length; i++) {\n const attr = item.attributes[i];\n if (attr.specified) {\n const dynamicAttr = convertToData(attr.name);\n let label = '';\n if (availableDynamicOptions.indexOf(dynamicAttr) > -1) {\n label = dynamicAttr;\n }\n if (label) {\n (dynamicEl as any)[label] = attr.value;\n }\n }\n }\n const currentItem = $LG(item);\n const alt = currentItem.find('img').first().attr('alt');\n const title = currentItem.attr('title');\n\n const thumb = exThumbImage\n ? currentItem.attr(exThumbImage)\n : currentItem.find('img').first().attr('src');\n dynamicEl.thumb = thumb;\n\n if (getCaptionFromTitleOrAlt && !dynamicEl.subHtml) {\n dynamicEl.subHtml = title || alt || '';\n }\n dynamicEl.alt = alt || title || '';\n dynamicElements.push(dynamicEl);\n });\n return dynamicElements;\n },\n isMobile(): boolean {\n return /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);\n },\n /**\n * @desc Check the given src is video\n * @param {String} src\n * @return {Object} video type\n * Ex:{ youtube : [\"//www.youtube.com/watch?v=c0asJgSyxcY\", \"c0asJgSyxcY\"] }\n *\n * @todo - this information can be moved to dynamicEl to avoid frequent calls\n */\n\n isVideo(\n src: string,\n isHTML5VIdeo: boolean,\n index: number,\n ): VideoInfo | undefined {\n if (!src) {\n if (isHTML5VIdeo) {\n return {\n html5: true,\n };\n } else {\n console.error(\n 'lightGallery :- data-src is not provided on slide item ' +\n (index + 1) +\n '. Please make sure the selector property is properly configured. More info - https://www.lightgalleryjs.com/demos/html-markup/',\n );\n return;\n }\n }\n\n const youtube = src.match(\n /\\/\\/(?:www\\.)?youtu(?:\\.be|be\\.com|be-nocookie\\.com)\\/(?:watch\\?v=|embed\\/)?([a-z0-9\\-\\_\\%]+)([\\&|?][\\S]*)*/i,\n );\n const vimeo = src.match(\n /\\/\\/(?:www\\.)?(?:player\\.)?vimeo.com\\/(?:video\\/)?([0-9a-z\\-_]+)(.*)?/i,\n );\n const wistia = src.match(\n /https?:\\/\\/(.+)?(wistia\\.com|wi\\.st)\\/(medias|embed)\\/([0-9a-z\\-_]+)(.*)/,\n );\n\n if (youtube) {\n return {\n youtube,\n };\n } else if (vimeo) {\n return {\n vimeo,\n };\n } else if (wistia) {\n return {\n wistia,\n };\n }\n },\n};\n\nexport default utils;\n", "import {\n AfterAppendSlideEventDetail,\n AfterAppendSubHtmlDetail,\n BeforeSlideDetail,\n lGEvents,\n SlideItemLoadDetail,\n} from './lg-events';\nimport {\n LightGalleryAllSettings,\n lightGalleryCoreSettings,\n LightGallerySettings,\n} from './lg-settings';\nimport utils, { GalleryItem, ImageSize } from './lg-utils';\nimport { $LG, lgQuery } from './lgQuery';\nimport {\n Coords,\n MediaContainerPosition,\n SlideDirection,\n VideoInfo,\n} from './types';\n\ndeclare let picturefill: any;\n\n// @ref - https://stackoverflow.com/questions/3971841/how-to-resize-images-proportionally-keeping-the-aspect-ratio\n// @ref - https://2ality.com/2017/04/setting-up-multi-platform-packages.html\n\n// Unique id for each gallery\nlet lgId = 0;\n\nexport class LightGallery {\n public settings!: LightGalleryAllSettings;\n public galleryItems!: GalleryItem[];\n\n // Current gallery item\n public lgId!: number;\n\n public el!: HTMLElement;\n public LGel!: lgQuery;\n public lgOpened = false;\n\n public index = 0;\n\n // lightGallery modules\n public plugins: any[] = [];\n\n // false when lightGallery load first slide content;\n public lGalleryOn = false;\n\n // True when a slide animation is in progress\n public lgBusy = false;\n\n // Type of touch action - {swipe, zoomSwipe, pinch}\n public touchAction?: 'swipe' | 'zoomSwipe' | 'pinch';\n\n // Direction of swipe/drag - {horizontal, vertical}\n public swipeDirection?: 'horizontal' | 'vertical';\n\n // Timeout function for hiding controls;\n public hideBarTimeout: any;\n\n public currentItemsInDom: string[] = [];\n\n public outer!: lgQuery;\n\n public items: any;\n\n public $backdrop!: lgQuery;\n public $lgComponents!: lgQuery;\n\n public $container!: lgQuery;\n\n public $inner!: lgQuery;\n public $content!: lgQuery;\n public $toolbar!: lgQuery;\n\n // Scroll top value before lightGallery is opened\n public prevScrollTop = 0;\n\n public bodyPaddingRight = 0;\n\n private zoomFromOrigin!: boolean;\n\n private currentImageSize?: ImageSize;\n\n private isDummyImageRemoved = false;\n\n private dragOrSwipeEnabled = false;\n\n public mediaContainerPosition = {\n top: 0,\n bottom: 0,\n };\n\n constructor(element: HTMLElement, options?: LightGallerySettings) {\n if (!element) {\n return this;\n }\n lgId++;\n this.lgId = lgId;\n\n this.el = element;\n this.LGel = $LG(element);\n\n this.generateSettings(options);\n\n this.buildModules();\n\n // When using dynamic mode, ensure dynamicEl is an array\n if (\n this.settings.dynamic &&\n this.settings.dynamicEl !== undefined &&\n !Array.isArray(this.settings.dynamicEl)\n ) {\n throw 'When using dynamic mode, you must also define dynamicEl as an Array.';\n }\n\n this.galleryItems = this.getItems();\n this.normalizeSettings();\n\n // Gallery items\n\n this.init();\n\n this.validateLicense();\n\n return this;\n }\n\n private generateSettings(options?: LightGallerySettings) {\n // lightGallery settings\n this.settings = {\n ...lightGalleryCoreSettings,\n ...options,\n } as LightGalleryAllSettings;\n if (\n this.settings.isMobile &&\n typeof this.settings.isMobile === 'function'\n ? this.settings.isMobile()\n : utils.isMobile()\n ) {\n const mobileSettings = {\n ...this.settings.mobileSettings,\n ...this.settings.mobileSettings,\n };\n this.settings = { ...this.settings, ...mobileSettings };\n }\n }\n\n private normalizeSettings() {\n if (this.settings.slideEndAnimation) {\n this.settings.hideControlOnEnd = false;\n }\n if (!this.settings.closable) {\n this.settings.swipeToClose = false;\n }\n\n // And reset it on close to get the correct value next time\n this.zoomFromOrigin = this.settings.zoomFromOrigin;\n\n // At the moment, Zoom from image doesn't support dynamic options\n // @todo add zoomFromOrigin support for dynamic images\n if (this.settings.dynamic) {\n this.zoomFromOrigin = false;\n }\n\n if (!this.settings.container) {\n this.settings.container = document.body;\n }\n\n // settings.preload should not be grater than $item.length\n this.settings.preload = Math.min(\n this.settings.preload,\n this.galleryItems.length,\n );\n }\n\n init(): void {\n this.addSlideVideoInfo(this.galleryItems);\n\n this.buildStructure();\n\n this.LGel.trigger(lGEvents.init, {\n instance: this,\n });\n\n if (this.settings.keyPress) {\n this.keyPress();\n }\n\n setTimeout(() => {\n this.enableDrag();\n this.enableSwipe();\n this.triggerPosterClick();\n }, 50);\n\n this.arrow();\n if (this.settings.mousewheel) {\n this.mousewheel();\n }\n\n if (!this.settings.dynamic) {\n this.openGalleryOnItemClick();\n }\n }\n\n openGalleryOnItemClick(): void {\n // Using for loop instead of using bubbling as the items can be any html element.\n for (let index = 0; index < this.items.length; index++) {\n const element = this.items[index];\n const $element = $LG(element);\n // Using different namespace for click because click event should not unbind if selector is same object('this')\n // @todo manage all event listners - should have namespace that represent element\n const uuid = lgQuery.generateUUID();\n $element\n .attr('data-lg-id', uuid)\n .on(`click.lgcustom-item-${uuid}`, (e) => {\n e.preventDefault();\n const currentItemIndex = this.settings.index || index;\n this.openGallery(currentItemIndex, element);\n });\n }\n }\n\n /**\n * Module constructor\n * Modules are build incrementally.\n * Gallery should be opened only once all the modules are initialized.\n * use moduleBuildTimeout to make sure this\n */\n buildModules(): void {\n this.settings.plugins.forEach((plugin) => {\n this.plugins.push(new plugin(this, $LG));\n });\n }\n\n validateLicense(): void {\n if (!this.settings.licenseKey) {\n console.error('Please provide a valid license key');\n } else if (this.settings.licenseKey === '0000-0000-000-0000') {\n console.warn(\n `lightGallery: ${this.settings.licenseKey} license key is not valid for production use`,\n );\n }\n }\n\n getSlideItem(index: number): lgQuery {\n return $LG(this.getSlideItemId(index));\n }\n\n getSlideItemId(index: number): string {\n return `#lg-item-${this.lgId}-${index}`;\n }\n\n getIdName(id: string): string {\n return `${id}-${this.lgId}`;\n }\n getElementById(id: string): lgQuery {\n return $LG(`#${this.getIdName(id)}`);\n }\n\n manageSingleSlideClassName(): void {\n if (this.galleryItems.length < 2) {\n this.outer.addClass('lg-single-item');\n } else {\n this.outer.removeClass('lg-single-item');\n }\n }\n\n buildStructure(): void {\n const container = this.$container && this.$container.get();\n if (container) {\n return;\n }\n let controls = '';\n let subHtmlCont = '';\n\n // Create controls\n if (this.settings.controls) {\n controls = `\n `;\n }\n\n if (this.settings.appendSubHtmlTo !== '.lg-item') {\n subHtmlCont =\n '
';\n }\n\n let addClasses = '';\n\n if (this.settings.allowMediaOverlap) {\n // Do not remove space before last single quote\n addClasses += 'lg-media-overlap ';\n }\n\n const ariaLabelledby = this.settings.ariaLabelledby\n ? 'aria-labelledby=\"' + this.settings.ariaLabelledby + '\"'\n : '';\n const ariaDescribedby = this.settings.ariaDescribedby\n ? 'aria-describedby=\"' + this.settings.ariaDescribedby + '\"'\n : '';\n\n const containerClassName = `lg-container ${this.settings.addClass} ${\n document.body !== this.settings.container ? 'lg-inline' : ''\n }`;\n const closeIcon =\n this.settings.closable && this.settings.showCloseIcon\n ? ``\n : '';\n const maximizeIcon = this.settings.showMaximizeIcon\n ? ``\n : '';\n const template = `\n
\n
\n\n
\n\n
\n
\n
\n ${controls}\n
\n
\n ${maximizeIcon}\n ${closeIcon}\n
\n ${\n this.settings.appendSubHtmlTo === '.lg-outer'\n ? subHtmlCont\n : ''\n }\n
\n ${\n this.settings.appendSubHtmlTo === '.lg-sub-html'\n ? subHtmlCont\n : ''\n }\n
\n
\n
\n `;\n\n $LG(this.settings.container).append(template);\n\n if (document.body !== this.settings.container) {\n $LG(this.settings.container).css('position', 'relative');\n }\n\n this.outer = this.getElementById('lg-outer');\n this.$lgComponents = this.getElementById('lg-components');\n this.$backdrop = this.getElementById('lg-backdrop');\n this.$container = this.getElementById('lg-container');\n this.$inner = this.getElementById('lg-inner');\n this.$content = this.getElementById('lg-content');\n this.$toolbar = this.getElementById('lg-toolbar');\n\n this.$backdrop.css(\n 'transition-duration',\n this.settings.backdropDuration + 'ms',\n );\n\n let outerClassNames = `${this.settings.mode} `;\n\n this.manageSingleSlideClassName();\n\n if (this.settings.enableDrag) {\n outerClassNames += 'lg-grab ';\n }\n\n this.outer.addClass(outerClassNames);\n\n this.$inner.css('transition-timing-function', this.settings.easing);\n this.$inner.css('transition-duration', this.settings.speed + 'ms');\n\n if (this.settings.download) {\n this.$toolbar.append(\n ``,\n );\n }\n\n this.counter();\n\n $LG(window).on(\n `resize.lg.global${this.lgId} orientationchange.lg.global${this.lgId}`,\n () => {\n this.refreshOnResize();\n },\n );\n\n this.hideBars();\n\n this.manageCloseGallery();\n this.toggleMaximize();\n\n this.initModules();\n }\n\n refreshOnResize(): void {\n if (this.lgOpened) {\n const currentGalleryItem = this.galleryItems[this.index];\n const { __slideVideoInfo } = currentGalleryItem;\n\n this.mediaContainerPosition = this.getMediaContainerPosition();\n const { top, bottom } = this.mediaContainerPosition;\n this.currentImageSize = utils.getSize(\n this.items[this.index],\n this.outer,\n top + bottom,\n __slideVideoInfo && this.settings.videoMaxSize,\n );\n if (__slideVideoInfo) {\n this.resizeVideoSlide(this.index, this.currentImageSize);\n }\n if (this.zoomFromOrigin && !this.isDummyImageRemoved) {\n const imgStyle = this.getDummyImgStyles(this.currentImageSize);\n this.outer\n .find('.lg-current .lg-dummy-img')\n .first()\n .attr('style', imgStyle);\n }\n this.LGel.trigger(lGEvents.containerResize);\n }\n }\n\n resizeVideoSlide(index: number, imageSize?: ImageSize): void {\n const lgVideoStyle = this.getVideoContStyle(imageSize);\n const currentSlide = this.getSlideItem(index);\n currentSlide.find('.lg-video-cont').attr('style', lgVideoStyle);\n }\n\n /**\n * Update slides dynamically.\n * Add, edit or delete slides dynamically when lightGallery is opened.\n * Modify the current gallery items and pass it via updateSlides method\n * @note\n * - Do not mutate existing lightGallery items directly.\n * - Always pass new list of gallery items\n * - You need to take care of thumbnails outside the gallery if any\n * - user this method only if you want to update slides when the gallery is opened. Otherwise, use `refresh()` method.\n * @param items Gallery items\n * @param index After the update operation, which slide gallery should navigate to\n * @category lGPublicMethods\n * @example\n * const plugin = lightGallery();\n *\n * // Adding slides dynamically\n * let galleryItems = [\n * // Access existing lightGallery items\n * // galleryItems are automatically generated internally from the gallery HTML markup\n * // or directly from galleryItems when dynamic gallery is used\n * ...plugin.galleryItems,\n * ...[\n * {\n * src: 'img/img-1.png',\n * thumb: 'img/thumb1.png',\n * },\n * ],\n * ];\n * plugin.updateSlides(\n * galleryItems,\n * plugin.index,\n * );\n *\n *\n * // Remove slides dynamically\n * galleryItems = JSON.parse(\n * JSON.stringify(updateSlideInstance.galleryItems),\n * );\n * galleryItems.shift();\n * updateSlideInstance.updateSlides(galleryItems, 1);\n * @see Demo\n */\n updateSlides(items: GalleryItem[], index: number): void {\n if (this.index > items.length - 1) {\n this.index = items.length - 1;\n }\n if (items.length === 1) {\n this.index = 0;\n }\n if (!items.length) {\n this.closeGallery();\n return;\n }\n const currentSrc = this.galleryItems[index].src;\n this.galleryItems = items;\n this.updateControls();\n this.$inner.empty();\n this.currentItemsInDom = [];\n\n let _index = 0;\n // Find the current index based on source value of the slide\n this.galleryItems.some((galleryItem, itemIndex) => {\n if (galleryItem.src === currentSrc) {\n _index = itemIndex;\n return true;\n }\n return false;\n });\n\n this.currentItemsInDom = this.organizeSlideItems(_index, -1);\n this.loadContent(_index, true);\n this.getSlideItem(_index).addClass('lg-current');\n\n this.index = _index;\n this.updateCurrentCounter(_index);\n this.LGel.trigger(lGEvents.updateSlides);\n }\n\n // Get gallery items based on multiple conditions\n getItems(): GalleryItem[] {\n // Gallery items\n this.items = [];\n if (!this.settings.dynamic) {\n if (this.settings.selector === 'this') {\n this.items.push(this.el);\n } else if (this.settings.selector) {\n if (typeof this.settings.selector === 'string') {\n if (this.settings.selectWithin) {\n const selectWithin = $LG(this.settings.selectWithin);\n this.items = selectWithin\n .find(this.settings.selector)\n .get();\n } else {\n this.items = this.el.querySelectorAll(\n this.settings.selector,\n );\n }\n } else {\n this.items = this.settings.selector;\n }\n } else {\n this.items = this.el.children;\n }\n return utils.getDynamicOptions(\n this.items,\n this.settings.extraProps,\n this.settings.getCaptionFromTitleOrAlt,\n this.settings.exThumbImage,\n );\n } else {\n return this.settings.dynamicEl || [];\n }\n }\n\n shouldHideScrollbar(): boolean {\n return (\n this.settings.hideScrollbar &&\n document.body === this.settings.container\n );\n }\n\n hideScrollbar(): void {\n if (!this.shouldHideScrollbar()) {\n return;\n }\n this.bodyPaddingRight = parseFloat($LG('body').style().paddingRight);\n const bodyRect = document.documentElement.getBoundingClientRect();\n const scrollbarWidth = window.innerWidth - bodyRect.width;\n\n $LG(document.body).css(\n 'padding-right',\n scrollbarWidth + this.bodyPaddingRight + 'px',\n );\n $LG(document.body).addClass('lg-overlay-open');\n }\n\n resetScrollBar(): void {\n if (!this.shouldHideScrollbar()) {\n return;\n }\n $LG(document.body).css('padding-right', this.bodyPaddingRight + 'px');\n $LG(document.body).removeClass('lg-overlay-open');\n }\n\n /**\n * Open lightGallery.\n * Open gallery with specific slide by passing index of the slide as parameter.\n * @category lGPublicMethods\n * @param {Number} index - index of the slide\n * @param {HTMLElement} element - Which image lightGallery should zoom from\n *\n * @example\n * const $dynamicGallery = document.getElementById('dynamic-gallery-demo');\n * const dynamicGallery = lightGallery($dynamicGallery, {\n * dynamic: true,\n * dynamicEl: [\n * {\n * src: 'img/1.jpg',\n * thumb: 'img/thumb-1.jpg',\n * subHtml: '

Image 1 title

Image 1 descriptions.

',\n * },\n * ...\n * ],\n * });\n * $dynamicGallery.addEventListener('click', function () {\n * // Starts with third item.(Optional).\n * // This is useful if you want use dynamic mode with\n * // custom thumbnails (thumbnails outside gallery),\n * dynamicGallery.openGallery(2);\n * });\n *\n */\n openGallery(index = this.settings.index, element?: HTMLElement): void {\n // prevent accidental double execution\n if (this.lgOpened) return;\n this.lgOpened = true;\n this.outer.removeClass('lg-hide-items');\n\n this.hideScrollbar();\n\n // Add display block, but still has opacity 0\n this.$container.addClass('lg-show');\n\n const itemsToBeInsertedToDom = this.getItemsToBeInsertedToDom(\n index,\n index,\n );\n this.currentItemsInDom = itemsToBeInsertedToDom;\n\n let items = '';\n itemsToBeInsertedToDom.forEach((item) => {\n items = items + `
`;\n });\n\n this.$inner.append(items);\n this.addHtml(index);\n let transform: string | undefined = '';\n this.mediaContainerPosition = this.getMediaContainerPosition();\n const { top, bottom } = this.mediaContainerPosition;\n if (!this.settings.allowMediaOverlap) {\n this.setMediaContainerPosition(top, bottom);\n }\n const { __slideVideoInfo } = this.galleryItems[index];\n if (this.zoomFromOrigin && element) {\n this.currentImageSize = utils.getSize(\n element,\n this.outer,\n top + bottom,\n __slideVideoInfo && this.settings.videoMaxSize,\n );\n transform = utils.getTransform(\n element,\n this.outer,\n top,\n bottom,\n this.currentImageSize,\n );\n }\n if (!this.zoomFromOrigin || !transform) {\n this.outer.addClass(this.settings.startClass);\n this.getSlideItem(index).removeClass('lg-complete');\n }\n const timeout = this.settings.zoomFromOrigin\n ? 100\n : this.settings.backdropDuration;\n setTimeout(() => {\n this.outer.addClass('lg-components-open');\n }, timeout);\n this.index = index;\n this.LGel.trigger(lGEvents.beforeOpen);\n\n // add class lg-current to remove initial transition\n this.getSlideItem(index).addClass('lg-current');\n\n this.lGalleryOn = false;\n // Store the current scroll top value to scroll back after closing the gallery..\n this.prevScrollTop = $LG(window).scrollTop();\n\n setTimeout(() => {\n // Need to check both zoomFromOrigin and transform values as we need to set set the\n // default opening animation if user missed to add the lg-size attribute\n\n if (this.zoomFromOrigin && transform) {\n const currentSlide = this.getSlideItem(index);\n currentSlide.css('transform', transform);\n setTimeout(() => {\n currentSlide\n .addClass('lg-start-progress lg-start-end-progress')\n .css(\n 'transition-duration',\n this.settings.startAnimationDuration + 'ms',\n );\n this.outer.addClass('lg-zoom-from-image');\n });\n setTimeout(() => {\n currentSlide.css('transform', 'translate3d(0, 0, 0)');\n }, 100);\n }\n\n setTimeout(() => {\n this.$backdrop.addClass('in');\n this.$container.addClass('lg-show-in');\n }, 10);\n\n setTimeout(() => {\n if (\n this.settings.trapFocus &&\n document.body === this.settings.container\n ) {\n this.trapFocus();\n }\n }, this.settings.backdropDuration + 50);\n\n // lg-visible class resets gallery opacity to 1\n if (!this.zoomFromOrigin || !transform) {\n setTimeout(() => {\n this.outer.addClass('lg-visible');\n }, this.settings.backdropDuration);\n }\n\n // initiate slide function\n this.slide(index, false, false, false);\n\n this.LGel.trigger(lGEvents.afterOpen);\n });\n\n if (document.body === this.settings.container) {\n $LG('html').addClass('lg-on');\n }\n }\n\n /**\n * Note - Changing the position of the media on every slide transition creates a flickering effect.\n * Therefore, The height of the caption is calculated dynamically, only once based on the first slide caption.\n * if you have dynamic captions for each media,\n * you can provide an appropriate height for the captions via allowMediaOverlap option\n */\n public getMediaContainerPosition(): MediaContainerPosition {\n if (this.settings.allowMediaOverlap) {\n return {\n top: 0,\n bottom: 0,\n };\n }\n const top = this.$toolbar.get().clientHeight || 0;\n const subHtml = this.outer.find('.lg-components .lg-sub-html').get();\n const captionHeight =\n this.settings.defaultCaptionHeight ||\n (subHtml && subHtml.clientHeight) ||\n 0;\n const thumbContainer = this.outer.find('.lg-thumb-outer').get();\n const thumbHeight = thumbContainer ? thumbContainer.clientHeight : 0;\n const bottom = thumbHeight + captionHeight;\n return {\n top,\n bottom,\n };\n }\n\n private setMediaContainerPosition(top = 0, bottom = 0): void {\n this.$content.css('top', top + 'px').css('bottom', bottom + 'px');\n }\n\n hideBars(): void {\n // Hide controllers if mouse doesn't move for some period\n setTimeout(() => {\n this.outer.removeClass('lg-hide-items');\n if (this.settings.hideBarsDelay > 0) {\n this.outer.on('mousemove.lg click.lg touchstart.lg', () => {\n this.outer.removeClass('lg-hide-items');\n\n clearTimeout(this.hideBarTimeout);\n\n // Timeout will be cleared on each slide movement also\n this.hideBarTimeout = setTimeout(() => {\n this.outer.addClass('lg-hide-items');\n }, this.settings.hideBarsDelay);\n });\n this.outer.trigger('mousemove.lg');\n }\n }, this.settings.showBarsAfter);\n }\n\n initPictureFill($img: lgQuery): void {\n if (this.settings.supportLegacyBrowser) {\n try {\n picturefill({\n elements: [$img.get()],\n });\n } catch (e) {\n console.warn(\n 'lightGallery :- If you want srcset or picture tag to be supported for older browser please include picturefil javascript library in your document.',\n );\n }\n }\n }\n\n /**\n * @desc Create image counter\n * Ex: 1/10\n */\n counter(): void {\n if (this.settings.counter) {\n const counterHtml = `
\n ${this.index + 1} /\n ${\n this.galleryItems.length\n }
`;\n this.outer.find(this.settings.appendCounterTo).append(counterHtml);\n }\n }\n\n /**\n * @desc add sub-html into the slide\n * @param {Number} index - index of the slide\n */\n addHtml(index: number): void {\n let subHtml;\n let subHtmlUrl;\n if (this.galleryItems[index].subHtmlUrl) {\n subHtmlUrl = this.galleryItems[index].subHtmlUrl;\n } else {\n subHtml = this.galleryItems[index].subHtml;\n }\n\n if (!subHtmlUrl) {\n if (subHtml) {\n // get first letter of sub-html\n // if first letter starts with . or # get the html form the jQuery object\n const fL = subHtml.substring(0, 1);\n if (fL === '.' || fL === '#') {\n if (\n this.settings.subHtmlSelectorRelative &&\n !this.settings.dynamic\n ) {\n subHtml = $LG(this.items)\n .eq(index)\n .find(subHtml)\n .first()\n .html();\n } else {\n subHtml = $LG(subHtml).first().html();\n }\n }\n } else {\n subHtml = '';\n }\n }\n\n if (this.settings.appendSubHtmlTo !== '.lg-item') {\n if (subHtmlUrl) {\n this.outer.find('.lg-sub-html').load(subHtmlUrl);\n } else {\n this.outer.find('.lg-sub-html').html(subHtml as string);\n }\n } else {\n const currentSlide = $LG(this.getSlideItemId(index));\n if (subHtmlUrl) {\n currentSlide.load(subHtmlUrl);\n } else {\n currentSlide.append(\n `
${subHtml}
`,\n );\n }\n }\n\n // Add lg-empty-html class if title doesn't exist\n if (typeof subHtml !== 'undefined' && subHtml !== null) {\n if (subHtml === '') {\n this.outer\n .find(this.settings.appendSubHtmlTo)\n .addClass('lg-empty-html');\n } else {\n this.outer\n .find(this.settings.appendSubHtmlTo)\n .removeClass('lg-empty-html');\n }\n }\n\n this.LGel.trigger(\n lGEvents.afterAppendSubHtml,\n {\n index,\n },\n );\n }\n\n /**\n * @desc Preload slides\n * @param {Number} index - index of the slide\n * @todo preload not working for the first slide, Also, should work for the first and last slide as well\n */\n preload(index: number): void {\n for (let i = 1; i <= this.settings.preload; i++) {\n if (i >= this.galleryItems.length - index) {\n break;\n }\n\n this.loadContent(index + i, false);\n }\n\n for (let j = 1; j <= this.settings.preload; j++) {\n if (index - j < 0) {\n break;\n }\n\n this.loadContent(index - j, false);\n }\n }\n\n getDummyImgStyles(imageSize?: ImageSize): string {\n if (!imageSize) return '';\n return `width:${imageSize.width}px;\n margin-left: -${imageSize.width / 2}px;\n margin-top: -${imageSize.height / 2}px;\n height:${imageSize.height}px`;\n }\n getVideoContStyle(imageSize?: ImageSize): string {\n if (!imageSize) return '';\n return `width:${imageSize.width}px;\n height:${imageSize.height}px`;\n }\n\n getDummyImageContent(\n $currentSlide: lgQuery,\n index: number,\n alt: string,\n ): string {\n let $currentItem;\n if (!this.settings.dynamic) {\n $currentItem = $LG(this.items).eq(index);\n }\n if ($currentItem) {\n let _dummyImgSrc;\n if (!this.settings.exThumbImage) {\n _dummyImgSrc = $currentItem.find('img').first().attr('src');\n } else {\n _dummyImgSrc = $currentItem.attr(this.settings.exThumbImage);\n }\n if (!_dummyImgSrc) return '';\n const imgStyle = this.getDummyImgStyles(this.currentImageSize);\n const dummyImgContent = ``;\n\n $currentSlide.addClass('lg-first-slide');\n this.outer.addClass('lg-first-slide-loading');\n\n return dummyImgContent;\n }\n return '';\n }\n\n setImgMarkup(src: string, $currentSlide: lgQuery, index: number): void {\n const currentGalleryItem = this.galleryItems[index];\n const { alt, srcset, sizes, sources } = currentGalleryItem;\n\n // Use the thumbnail as dummy image which will be resized to actual image size and\n // displayed on top of actual image\n let imgContent = '';\n const altAttr = alt ? 'alt=\"' + alt + '\"' : '';\n\n if (this.isFirstSlideWithZoomAnimation()) {\n imgContent = this.getDummyImageContent(\n $currentSlide,\n index,\n altAttr,\n );\n } else {\n imgContent = utils.getImgMarkup(\n index,\n src,\n altAttr,\n srcset,\n sizes,\n sources,\n );\n }\n const imgMarkup = ` ${imgContent}`;\n $currentSlide.prepend(imgMarkup);\n }\n\n onSlideObjectLoad(\n $slide: lgQuery,\n isHTML5VideoWithoutPoster: boolean,\n onLoad: () => void,\n onError: () => void,\n ): void {\n const mediaObject = $slide.find('.lg-object').first();\n if (\n utils.isImageLoaded(mediaObject.get() as HTMLImageElement) ||\n isHTML5VideoWithoutPoster\n ) {\n onLoad();\n } else {\n mediaObject.on('load.lg error.lg', () => {\n onLoad && onLoad();\n });\n mediaObject.on('error.lg', () => {\n onError && onError();\n });\n }\n }\n\n /**\n *\n * @param $el Current slide item\n * @param index\n * @param delay Delay is 0 except first time\n * @param speed Speed is same as delay, except it is 0 if gallery is opened via hash plugin\n * @param isFirstSlide\n */\n onLgObjectLoad(\n currentSlide: lgQuery,\n index: number,\n delay: number,\n speed: number,\n isFirstSlide: boolean,\n isHTML5VideoWithoutPoster: boolean,\n ): void {\n this.onSlideObjectLoad(\n currentSlide,\n isHTML5VideoWithoutPoster,\n () => {\n this.triggerSlideItemLoad(\n currentSlide,\n index,\n delay,\n speed,\n isFirstSlide,\n );\n },\n () => {\n currentSlide.addClass('lg-complete lg-complete_');\n currentSlide.html(\n '' +\n this.settings.strings['mediaLoadingFailed'] +\n '',\n );\n },\n );\n }\n\n triggerSlideItemLoad(\n $currentSlide: lgQuery,\n index: number,\n delay: number,\n speed: number,\n isFirstSlide: boolean,\n ): void {\n const currentGalleryItem = this.galleryItems[index];\n\n // Adding delay for video slides without poster for better performance and user experience\n // Videos should start playing once once the gallery is completely loaded\n const _speed =\n isFirstSlide &&\n this.getSlideType(currentGalleryItem) === 'video' &&\n !currentGalleryItem.poster\n ? speed\n : 0;\n setTimeout(() => {\n $currentSlide.addClass('lg-complete lg-complete_');\n this.LGel.trigger(lGEvents.slideItemLoad, {\n index,\n delay: delay || 0,\n isFirstSlide,\n });\n }, _speed);\n }\n\n isFirstSlideWithZoomAnimation(): boolean {\n return !!(\n !this.lGalleryOn &&\n this.zoomFromOrigin &&\n this.currentImageSize\n );\n }\n\n // Add video slideInfo\n addSlideVideoInfo(items: GalleryItem[]): void {\n items.forEach((element, index) => {\n element.__slideVideoInfo = utils.isVideo(\n element.src as string,\n !!element.video,\n index,\n );\n if (\n element.__slideVideoInfo &&\n this.settings.loadYouTubePoster &&\n !element.poster &&\n element.__slideVideoInfo.youtube\n ) {\n element.poster = `//img.youtube.com/vi/${element.__slideVideoInfo.youtube[1]}/maxresdefault.jpg`;\n }\n });\n }\n\n /**\n * Load slide content into slide.\n * This is used to load content into slides that is not visible too\n * @param {Number} index - index of the slide.\n * @param {Boolean} rec - if true call loadcontent() function again.\n */\n loadContent(index: number, rec: boolean): void {\n const currentGalleryItem = this.galleryItems[index];\n const $currentSlide = $LG(this.getSlideItemId(index));\n\n const { poster, srcset, sizes, sources } = currentGalleryItem;\n let { src } = currentGalleryItem;\n\n const video = currentGalleryItem.video;\n\n const _html5Video =\n video && typeof video === 'string' ? JSON.parse(video) : video;\n\n if (currentGalleryItem.responsive) {\n const srcDyItms = currentGalleryItem.responsive.split(',');\n src = utils.getResponsiveSrc(srcDyItms) || src;\n }\n\n const videoInfo = currentGalleryItem.__slideVideoInfo;\n let lgVideoStyle = '';\n\n const iframe = !!currentGalleryItem.iframe;\n\n const isFirstSlide = !this.lGalleryOn;\n\n // delay for adding complete class. it is 0 except first time.\n let delay = 0;\n if (isFirstSlide) {\n if (this.zoomFromOrigin && this.currentImageSize) {\n delay = this.settings.startAnimationDuration + 10;\n } else {\n delay = this.settings.backdropDuration + 10;\n }\n }\n\n if (!$currentSlide.hasClass('lg-loaded')) {\n if (videoInfo) {\n const { top, bottom } = this.mediaContainerPosition;\n const videoSize = utils.getSize(\n this.items[index],\n this.outer,\n top + bottom,\n videoInfo && this.settings.videoMaxSize,\n );\n lgVideoStyle = this.getVideoContStyle(videoSize);\n }\n if (iframe) {\n const markup = utils.getIframeMarkup(\n this.settings.iframeWidth,\n this.settings.iframeHeight,\n this.settings.iframeMaxWidth,\n this.settings.iframeMaxHeight,\n src,\n currentGalleryItem.iframeTitle,\n );\n $currentSlide.prepend(markup);\n } else if (poster) {\n let dummyImg = '';\n const hasStartAnimation =\n isFirstSlide &&\n this.zoomFromOrigin &&\n this.currentImageSize;\n if (hasStartAnimation) {\n dummyImg = this.getDummyImageContent(\n $currentSlide,\n index,\n '',\n );\n }\n\n const markup = utils.getVideoPosterMarkup(\n poster,\n dummyImg || '',\n lgVideoStyle,\n this.settings.strings['playVideo'],\n videoInfo,\n );\n $currentSlide.prepend(markup);\n } else if (videoInfo) {\n const markup = `
`;\n $currentSlide.prepend(markup);\n } else {\n this.setImgMarkup(src as string, $currentSlide, index);\n if (srcset || sources) {\n const $img = $currentSlide.find('.lg-object');\n this.initPictureFill($img);\n }\n }\n if (poster || videoInfo) {\n this.LGel.trigger(lGEvents.hasVideo, {\n index,\n src: src,\n html5Video: _html5Video,\n hasPoster: !!poster,\n });\n }\n\n this.LGel.trigger(\n lGEvents.afterAppendSlide,\n { index },\n );\n\n if (\n this.lGalleryOn &&\n this.settings.appendSubHtmlTo === '.lg-item'\n ) {\n this.addHtml(index);\n }\n }\n\n // For first time add some delay for displaying the start animation.\n let _speed = 0;\n\n // Do not change the delay value because it is required for zoom plugin.\n // If gallery opened from direct url (hash) speed value should be 0\n if (delay && !$LG(document.body).hasClass('lg-from-hash')) {\n _speed = delay;\n }\n\n // Only for first slide and zoomFromOrigin is enabled\n if (this.isFirstSlideWithZoomAnimation()) {\n setTimeout(() => {\n $currentSlide\n .removeClass('lg-start-end-progress lg-start-progress')\n .removeAttr('style');\n }, this.settings.startAnimationDuration + 100);\n if (!$currentSlide.hasClass('lg-loaded')) {\n setTimeout(() => {\n if (this.getSlideType(currentGalleryItem) === 'image') {\n const { alt } = currentGalleryItem;\n const altAttr = alt ? 'alt=\"' + alt + '\"' : '';\n\n $currentSlide\n .find('.lg-img-wrap')\n .append(\n utils.getImgMarkup(\n index,\n src as string,\n altAttr,\n srcset,\n sizes,\n currentGalleryItem.sources,\n ),\n );\n if (srcset || sources) {\n const $img = $currentSlide.find('.lg-object');\n this.initPictureFill($img);\n }\n }\n if (\n this.getSlideType(currentGalleryItem) === 'image' ||\n (this.getSlideType(currentGalleryItem) === 'video' &&\n poster)\n ) {\n this.onLgObjectLoad(\n $currentSlide,\n index,\n delay,\n _speed,\n true,\n false,\n );\n\n // load remaining slides once the slide is completely loaded\n this.onSlideObjectLoad(\n $currentSlide,\n !!(videoInfo && videoInfo.html5 && !poster),\n () => {\n this.loadContentOnFirstSlideLoad(\n index,\n $currentSlide,\n _speed,\n );\n },\n () => {\n this.loadContentOnFirstSlideLoad(\n index,\n $currentSlide,\n _speed,\n );\n },\n );\n }\n }, this.settings.startAnimationDuration + 100);\n }\n }\n\n // SLide content has been added to dom\n $currentSlide.addClass('lg-loaded');\n\n if (\n !this.isFirstSlideWithZoomAnimation() ||\n (this.getSlideType(currentGalleryItem) === 'video' && !poster)\n ) {\n this.onLgObjectLoad(\n $currentSlide,\n index,\n delay,\n _speed,\n isFirstSlide,\n !!(videoInfo && videoInfo.html5 && !poster),\n );\n }\n\n // When gallery is opened once content is loaded (second time) need to add lg-complete class for css styling\n if (\n (!this.zoomFromOrigin || !this.currentImageSize) &&\n $currentSlide.hasClass('lg-complete_') &&\n !this.lGalleryOn\n ) {\n setTimeout(() => {\n $currentSlide.addClass('lg-complete');\n }, this.settings.backdropDuration);\n }\n\n // Content loaded\n // Need to set lGalleryOn before calling preload function\n this.lGalleryOn = true;\n\n if (rec === true) {\n if (!$currentSlide.hasClass('lg-complete_')) {\n $currentSlide\n .find('.lg-object')\n .first()\n .on('load.lg error.lg', () => {\n this.preload(index);\n });\n } else {\n this.preload(index);\n }\n }\n }\n\n /**\n * @desc Remove dummy image content and load next slides\n * Called only for the first time if zoomFromOrigin animation is enabled\n * @param index\n * @param $currentSlide\n * @param speed\n */\n loadContentOnFirstSlideLoad(\n index: number,\n $currentSlide: lgQuery,\n speed: number,\n ): void {\n setTimeout(() => {\n $currentSlide.find('.lg-dummy-img').remove();\n $currentSlide.removeClass('lg-first-slide');\n this.outer.removeClass('lg-first-slide-loading');\n this.isDummyImageRemoved = true;\n this.preload(index);\n }, speed + 300);\n }\n\n getItemsToBeInsertedToDom(\n index: number,\n prevIndex: number,\n numberOfItems = 0,\n ): string[] {\n const itemsToBeInsertedToDom: string[] = [];\n // Minimum 2 items should be there\n let possibleNumberOfItems = Math.max(numberOfItems, 3);\n possibleNumberOfItems = Math.min(\n possibleNumberOfItems,\n this.galleryItems.length,\n );\n const prevIndexItem = `lg-item-${this.lgId}-${prevIndex}`;\n if (this.galleryItems.length <= 3) {\n this.galleryItems.forEach((_element, index) => {\n itemsToBeInsertedToDom.push(`lg-item-${this.lgId}-${index}`);\n });\n return itemsToBeInsertedToDom;\n }\n\n if (index < (this.galleryItems.length - 1) / 2) {\n for (\n let idx = index;\n idx > index - possibleNumberOfItems / 2 && idx >= 0;\n idx--\n ) {\n itemsToBeInsertedToDom.push(`lg-item-${this.lgId}-${idx}`);\n }\n const numberOfExistingItems = itemsToBeInsertedToDom.length;\n for (\n let idx = 0;\n idx < possibleNumberOfItems - numberOfExistingItems;\n idx++\n ) {\n itemsToBeInsertedToDom.push(\n `lg-item-${this.lgId}-${index + idx + 1}`,\n );\n }\n } else {\n for (\n let idx = index;\n idx <= this.galleryItems.length - 1 &&\n idx < index + possibleNumberOfItems / 2;\n idx++\n ) {\n itemsToBeInsertedToDom.push(`lg-item-${this.lgId}-${idx}`);\n }\n const numberOfExistingItems = itemsToBeInsertedToDom.length;\n for (\n let idx = 0;\n idx < possibleNumberOfItems - numberOfExistingItems;\n idx++\n ) {\n itemsToBeInsertedToDom.push(\n `lg-item-${this.lgId}-${index - idx - 1}`,\n );\n }\n }\n if (this.settings.loop) {\n if (index === this.galleryItems.length - 1) {\n itemsToBeInsertedToDom.push(`lg-item-${this.lgId}-${0}`);\n } else if (index === 0) {\n itemsToBeInsertedToDom.push(\n `lg-item-${this.lgId}-${this.galleryItems.length - 1}`,\n );\n }\n }\n if (itemsToBeInsertedToDom.indexOf(prevIndexItem) === -1) {\n itemsToBeInsertedToDom.push(`lg-item-${this.lgId}-${prevIndex}`);\n }\n\n return itemsToBeInsertedToDom;\n }\n\n organizeSlideItems(index: number, prevIndex: number): string[] {\n const itemsToBeInsertedToDom = this.getItemsToBeInsertedToDom(\n index,\n prevIndex,\n this.settings.numberOfSlideItemsInDom,\n );\n\n itemsToBeInsertedToDom.forEach((item) => {\n if (this.currentItemsInDom.indexOf(item) === -1) {\n this.$inner.append(`
`);\n }\n });\n\n this.currentItemsInDom.forEach((item) => {\n if (itemsToBeInsertedToDom.indexOf(item) === -1) {\n $LG(`#${item}`).remove();\n }\n });\n return itemsToBeInsertedToDom;\n }\n\n /**\n * Get previous index of the slide\n */\n getPreviousSlideIndex(): number {\n let prevIndex = 0;\n try {\n const currentItemId = this.outer\n .find('.lg-current')\n .first()\n .attr('id');\n prevIndex = parseInt(currentItemId.split('-')[3]) || 0;\n } catch (error) {\n prevIndex = 0;\n }\n return prevIndex;\n }\n\n setDownloadValue(index: number): void {\n if (this.settings.download) {\n const currentGalleryItem = this.galleryItems[index];\n const hideDownloadBtn =\n currentGalleryItem.downloadUrl === false ||\n currentGalleryItem.downloadUrl === 'false';\n if (hideDownloadBtn) {\n this.outer.addClass('lg-hide-download');\n } else {\n const $download = this.getElementById('lg-download');\n this.outer.removeClass('lg-hide-download');\n $download.attr(\n 'href',\n currentGalleryItem.downloadUrl ||\n (currentGalleryItem.src as string),\n );\n if (currentGalleryItem.download) {\n $download.attr('download', currentGalleryItem.download);\n }\n }\n }\n }\n\n makeSlideAnimation(\n direction: 'next' | 'prev',\n currentSlideItem: lgQuery,\n previousSlideItem: lgQuery,\n ): void {\n if (this.lGalleryOn) {\n previousSlideItem.addClass('lg-slide-progress');\n }\n setTimeout(\n () => {\n // remove all transitions\n this.outer.addClass('lg-no-trans');\n\n this.outer\n .find('.lg-item')\n .removeClass('lg-prev-slide lg-next-slide');\n\n if (direction === 'prev') {\n //prevslide\n currentSlideItem.addClass('lg-prev-slide');\n previousSlideItem.addClass('lg-next-slide');\n } else {\n // next slide\n currentSlideItem.addClass('lg-next-slide');\n previousSlideItem.addClass('lg-prev-slide');\n }\n\n // give 50 ms for browser to add/remove class\n setTimeout(() => {\n this.outer.find('.lg-item').removeClass('lg-current');\n\n currentSlideItem.addClass('lg-current');\n\n // reset all transitions\n this.outer.removeClass('lg-no-trans');\n }, 50);\n },\n this.lGalleryOn ? this.settings.slideDelay : 0,\n );\n }\n\n /**\n * Goto a specific slide.\n * @param {Number} index - index of the slide\n * @param {Boolean} fromTouch - true if slide function called via touch event or mouse drag\n * @param {Boolean} fromThumb - true if slide function called via thumbnail click\n * @param {String} direction - Direction of the slide(next/prev)\n * @category lGPublicMethods\n * @example\n * const plugin = lightGallery();\n * // to go to 3rd slide\n * plugin.slide(2);\n *\n */\n slide(\n index: number,\n fromTouch?: boolean,\n fromThumb?: boolean,\n direction?: SlideDirection | false,\n ): void {\n const prevIndex = this.getPreviousSlideIndex();\n this.currentItemsInDom = this.organizeSlideItems(index, prevIndex);\n\n // Prevent multiple call, Required for hsh plugin\n if (this.lGalleryOn && prevIndex === index) {\n return;\n }\n\n const numberOfGalleryItems = this.galleryItems.length;\n\n if (!this.lgBusy) {\n if (this.settings.counter) {\n this.updateCurrentCounter(index);\n }\n\n const currentSlideItem = this.getSlideItem(index);\n const previousSlideItem = this.getSlideItem(prevIndex);\n\n const currentGalleryItem = this.galleryItems[index];\n const videoInfo = currentGalleryItem.__slideVideoInfo;\n\n this.outer.attr(\n 'data-lg-slide-type',\n this.getSlideType(currentGalleryItem),\n );\n this.setDownloadValue(index);\n\n if (videoInfo) {\n const { top, bottom } = this.mediaContainerPosition;\n const videoSize = utils.getSize(\n this.items[index],\n this.outer,\n top + bottom,\n videoInfo && this.settings.videoMaxSize,\n );\n this.resizeVideoSlide(index, videoSize);\n }\n\n this.LGel.trigger(lGEvents.beforeSlide, {\n prevIndex,\n index,\n fromTouch: !!fromTouch,\n fromThumb: !!fromThumb,\n });\n\n this.lgBusy = true;\n\n clearTimeout(this.hideBarTimeout);\n\n this.arrowDisable(index);\n\n if (!direction) {\n if (index < prevIndex) {\n direction = 'prev';\n } else if (index > prevIndex) {\n direction = 'next';\n }\n }\n\n if (!fromTouch) {\n this.makeSlideAnimation(\n direction as SlideDirection,\n currentSlideItem,\n previousSlideItem,\n );\n } else {\n this.outer\n .find('.lg-item')\n .removeClass('lg-prev-slide lg-current lg-next-slide');\n let touchPrev;\n let touchNext;\n if (numberOfGalleryItems > 2) {\n touchPrev = index - 1;\n touchNext = index + 1;\n\n if (index === 0 && prevIndex === numberOfGalleryItems - 1) {\n // next slide\n touchNext = 0;\n touchPrev = numberOfGalleryItems - 1;\n } else if (\n index === numberOfGalleryItems - 1 &&\n prevIndex === 0\n ) {\n // prev slide\n touchNext = 0;\n touchPrev = numberOfGalleryItems - 1;\n }\n } else {\n touchPrev = 0;\n touchNext = 1;\n }\n\n if (direction === 'prev') {\n this.getSlideItem(touchNext).addClass('lg-next-slide');\n } else {\n this.getSlideItem(touchPrev).addClass('lg-prev-slide');\n }\n\n currentSlideItem.addClass('lg-current');\n }\n\n // Do not put load content in set timeout as it needs to load immediately when the gallery is opened\n if (!this.lGalleryOn) {\n this.loadContent(index, true);\n } else {\n setTimeout(() => {\n this.loadContent(index, true);\n // Add title if this.settings.appendSubHtmlTo === lg-sub-html\n if (this.settings.appendSubHtmlTo !== '.lg-item') {\n this.addHtml(index);\n }\n }, this.settings.speed + 50 + (fromTouch ? 0 : this.settings.slideDelay));\n }\n\n setTimeout(() => {\n this.lgBusy = false;\n previousSlideItem.removeClass('lg-slide-progress');\n this.LGel.trigger(lGEvents.afterSlide, {\n prevIndex: prevIndex,\n index,\n fromTouch,\n fromThumb,\n });\n }, (this.lGalleryOn ? this.settings.speed + 100 : 100) + (fromTouch ? 0 : this.settings.slideDelay));\n }\n\n this.index = index;\n }\n\n updateCurrentCounter(index: number): void {\n this.getElementById('lg-counter-current').html(index + 1 + '');\n }\n\n updateCounterTotal(): void {\n this.getElementById('lg-counter-all').html(\n this.galleryItems.length + '',\n );\n }\n\n getSlideType(item: GalleryItem): 'video' | 'iframe' | 'image' {\n if (item.__slideVideoInfo) {\n return 'video';\n } else if (item.iframe) {\n return 'iframe';\n } else {\n return 'image';\n }\n }\n\n touchMove(startCoords: Coords, endCoords: Coords, e?: TouchEvent): void {\n const distanceX = endCoords.pageX - startCoords.pageX;\n const distanceY = endCoords.pageY - startCoords.pageY;\n let allowSwipe = false;\n\n if (this.swipeDirection) {\n allowSwipe = true;\n } else {\n if (Math.abs(distanceX) > 15) {\n this.swipeDirection = 'horizontal';\n allowSwipe = true;\n } else if (Math.abs(distanceY) > 15) {\n this.swipeDirection = 'vertical';\n allowSwipe = true;\n }\n }\n\n if (!allowSwipe) {\n return;\n }\n\n const $currentSlide = this.getSlideItem(this.index);\n\n if (this.swipeDirection === 'horizontal') {\n e?.preventDefault();\n // reset opacity and transition duration\n this.outer.addClass('lg-dragging');\n\n // move current slide\n this.setTranslate($currentSlide, distanceX, 0);\n\n // move next and prev slide with current slide\n const width = $currentSlide.get().offsetWidth;\n const slideWidthAmount = (width * 15) / 100;\n const gutter = slideWidthAmount - Math.abs((distanceX * 10) / 100);\n this.setTranslate(\n this.outer.find('.lg-prev-slide').first(),\n -width + distanceX - gutter,\n 0,\n );\n\n this.setTranslate(\n this.outer.find('.lg-next-slide').first(),\n width + distanceX + gutter,\n 0,\n );\n } else if (this.swipeDirection === 'vertical') {\n if (this.settings.swipeToClose) {\n e?.preventDefault();\n this.$container.addClass('lg-dragging-vertical');\n\n const opacity = 1 - Math.abs(distanceY) / window.innerHeight;\n this.$backdrop.css('opacity', opacity);\n\n const scale = 1 - Math.abs(distanceY) / (window.innerWidth * 2);\n this.setTranslate($currentSlide, 0, distanceY, scale, scale);\n if (Math.abs(distanceY) > 100) {\n this.outer\n .addClass('lg-hide-items')\n .removeClass('lg-components-open');\n }\n }\n }\n }\n\n touchEnd(endCoords: Coords, startCoords: Coords, event: TouchEvent): void {\n let distance;\n\n // keep slide animation for any mode while dragg/swipe\n if (this.settings.mode !== 'lg-slide') {\n this.outer.addClass('lg-slide');\n }\n\n // set transition duration\n setTimeout(() => {\n this.$container.removeClass('lg-dragging-vertical');\n this.outer\n .removeClass('lg-dragging lg-hide-items')\n .addClass('lg-components-open');\n\n let triggerClick = true;\n\n if (this.swipeDirection === 'horizontal') {\n distance = endCoords.pageX - startCoords.pageX;\n const distanceAbs = Math.abs(\n endCoords.pageX - startCoords.pageX,\n );\n if (\n distance < 0 &&\n distanceAbs > this.settings.swipeThreshold\n ) {\n this.goToNextSlide(true);\n triggerClick = false;\n } else if (\n distance > 0 &&\n distanceAbs > this.settings.swipeThreshold\n ) {\n this.goToPrevSlide(true);\n triggerClick = false;\n }\n } else if (this.swipeDirection === 'vertical') {\n distance = Math.abs(endCoords.pageY - startCoords.pageY);\n if (\n this.settings.closable &&\n this.settings.swipeToClose &&\n distance > 100\n ) {\n this.closeGallery();\n return;\n } else {\n this.$backdrop.css('opacity', 1);\n }\n }\n this.outer.find('.lg-item').removeAttr('style');\n\n if (\n triggerClick &&\n Math.abs(endCoords.pageX - startCoords.pageX) < 5\n ) {\n // Trigger click if distance is less than 5 pix\n const target = $LG(event.target);\n if (this.isPosterElement(target)) {\n this.LGel.trigger(lGEvents.posterClick);\n }\n }\n\n this.swipeDirection = undefined;\n });\n\n // remove slide class once drag/swipe is completed if mode is not slide\n setTimeout(() => {\n if (\n !this.outer.hasClass('lg-dragging') &&\n this.settings.mode !== 'lg-slide'\n ) {\n this.outer.removeClass('lg-slide');\n }\n }, this.settings.speed + 100);\n }\n\n enableSwipe(): void {\n let startCoords: Coords = {} as Coords;\n let endCoords: Coords = {} as Coords;\n let isMoved = false;\n let isSwiping = false;\n\n if (this.settings.enableSwipe) {\n this.$inner.on('touchstart.lg', (e) => {\n this.dragOrSwipeEnabled = true;\n const $item = this.getSlideItem(this.index);\n if (\n ($LG(e.target).hasClass('lg-item') ||\n $item.get().contains(e.target)) &&\n !this.outer.hasClass('lg-zoomed') &&\n !this.lgBusy &&\n e.touches.length === 1\n ) {\n isSwiping = true;\n this.touchAction = 'swipe';\n this.manageSwipeClass();\n startCoords = {\n pageX: e.touches[0].pageX,\n pageY: e.touches[0].pageY,\n };\n }\n });\n\n this.$inner.on('touchmove.lg', (e) => {\n if (\n isSwiping &&\n this.touchAction === 'swipe' &&\n e.touches.length === 1\n ) {\n endCoords = {\n pageX: e.touches[0].pageX,\n pageY: e.touches[0].pageY,\n };\n this.touchMove(startCoords, endCoords, e);\n isMoved = true;\n }\n });\n\n this.$inner.on('touchend.lg', (event: TouchEvent) => {\n if (this.touchAction === 'swipe') {\n if (isMoved) {\n isMoved = false;\n this.touchEnd(endCoords, startCoords, event);\n } else if (isSwiping) {\n const target = $LG(event.target);\n if (this.isPosterElement(target)) {\n this.LGel.trigger(lGEvents.posterClick);\n }\n }\n this.touchAction = undefined;\n isSwiping = false;\n }\n });\n }\n }\n\n enableDrag(): void {\n let startCoords: Coords = {} as Coords;\n let endCoords: Coords = {} as Coords;\n let isDraging = false;\n let isMoved = false;\n if (this.settings.enableDrag) {\n this.outer.on('mousedown.lg', (e) => {\n this.dragOrSwipeEnabled = true;\n const $item = this.getSlideItem(this.index);\n if (\n $LG(e.target).hasClass('lg-item') ||\n $item.get().contains(e.target)\n ) {\n if (!this.outer.hasClass('lg-zoomed') && !this.lgBusy) {\n e.preventDefault();\n if (!this.lgBusy) {\n this.manageSwipeClass();\n startCoords = {\n pageX: e.pageX,\n pageY: e.pageY,\n };\n isDraging = true;\n\n // ** Fix for webkit cursor issue https://code.google.com/p/chromium/issues/detail?id=26723\n this.outer.get().scrollLeft += 1;\n this.outer.get().scrollLeft -= 1;\n\n // *\n\n this.outer\n .removeClass('lg-grab')\n .addClass('lg-grabbing');\n\n this.LGel.trigger(lGEvents.dragStart);\n }\n }\n }\n });\n\n $LG(window).on(`mousemove.lg.global${this.lgId}`, (e) => {\n if (isDraging && this.lgOpened) {\n isMoved = true;\n endCoords = {\n pageX: e.pageX,\n pageY: e.pageY,\n };\n this.touchMove(startCoords, endCoords);\n this.LGel.trigger(lGEvents.dragMove);\n }\n });\n\n $LG(window).on(`mouseup.lg.global${this.lgId}`, (event) => {\n if (!this.lgOpened) {\n return;\n }\n const target = $LG(event.target);\n if (isMoved) {\n isMoved = false;\n this.touchEnd(endCoords, startCoords, event);\n this.LGel.trigger(lGEvents.dragEnd);\n } else if (this.isPosterElement(target)) {\n this.LGel.trigger(lGEvents.posterClick);\n }\n\n // Prevent execution on click\n if (isDraging) {\n isDraging = false;\n this.outer.removeClass('lg-grabbing').addClass('lg-grab');\n }\n });\n }\n }\n\n triggerPosterClick(): void {\n this.$inner.on('click.lg', (event) => {\n if (\n !this.dragOrSwipeEnabled &&\n this.isPosterElement($LG(event.target))\n ) {\n this.LGel.trigger(lGEvents.posterClick);\n }\n });\n }\n\n manageSwipeClass(): void {\n let _touchNext = this.index + 1;\n let _touchPrev = this.index - 1;\n if (this.settings.loop && this.galleryItems.length > 2) {\n if (this.index === 0) {\n _touchPrev = this.galleryItems.length - 1;\n } else if (this.index === this.galleryItems.length - 1) {\n _touchNext = 0;\n }\n }\n\n this.outer.find('.lg-item').removeClass('lg-next-slide lg-prev-slide');\n if (_touchPrev > -1) {\n this.getSlideItem(_touchPrev).addClass('lg-prev-slide');\n }\n\n this.getSlideItem(_touchNext).addClass('lg-next-slide');\n }\n\n /**\n * Go to next slide\n * @param {Boolean} fromTouch - true if slide function called via touch event\n * @category lGPublicMethods\n * @example\n * const plugin = lightGallery();\n * plugin.goToNextSlide();\n * @see Demo\n */\n goToNextSlide(fromTouch?: boolean): void {\n let _loop = this.settings.loop;\n if (fromTouch && this.galleryItems.length < 3) {\n _loop = false;\n }\n\n if (!this.lgBusy) {\n if (this.index + 1 < this.galleryItems.length) {\n this.index++;\n this.LGel.trigger(lGEvents.beforeNextSlide, {\n index: this.index,\n });\n this.slide(this.index, !!fromTouch, false, 'next');\n } else {\n if (_loop) {\n this.index = 0;\n this.LGel.trigger(lGEvents.beforeNextSlide, {\n index: this.index,\n });\n this.slide(this.index, !!fromTouch, false, 'next');\n } else if (this.settings.slideEndAnimation && !fromTouch) {\n this.outer.addClass('lg-right-end');\n setTimeout(() => {\n this.outer.removeClass('lg-right-end');\n }, 400);\n }\n }\n }\n }\n\n /**\n * Go to previous slides\n * @param {Boolean} fromTouch - true if slide function called via touch event\n * @category lGPublicMethods\n * @example\n * const plugin = lightGallery({});\n * plugin.goToPrevSlide();\n * @see Demo\n *\n */\n goToPrevSlide(fromTouch?: boolean): void {\n let _loop = this.settings.loop;\n if (fromTouch && this.galleryItems.length < 3) {\n _loop = false;\n }\n\n if (!this.lgBusy) {\n if (this.index > 0) {\n this.index--;\n this.LGel.trigger(lGEvents.beforePrevSlide, {\n index: this.index,\n fromTouch,\n });\n this.slide(this.index, !!fromTouch, false, 'prev');\n } else {\n if (_loop) {\n this.index = this.galleryItems.length - 1;\n this.LGel.trigger(lGEvents.beforePrevSlide, {\n index: this.index,\n fromTouch,\n });\n this.slide(this.index, !!fromTouch, false, 'prev');\n } else if (this.settings.slideEndAnimation && !fromTouch) {\n this.outer.addClass('lg-left-end');\n setTimeout(() => {\n this.outer.removeClass('lg-left-end');\n }, 400);\n }\n }\n }\n }\n\n keyPress(): void {\n $LG(window).on(`keydown.lg.global${this.lgId}`, (e) => {\n if (\n this.lgOpened &&\n this.settings.escKey === true &&\n e.keyCode === 27\n ) {\n e.preventDefault();\n if (\n this.settings.allowMediaOverlap &&\n this.outer.hasClass('lg-can-toggle') &&\n this.outer.hasClass('lg-components-open')\n ) {\n this.outer.removeClass('lg-components-open');\n } else {\n this.closeGallery();\n }\n }\n if (this.lgOpened && this.galleryItems.length > 1) {\n if (e.keyCode === 37) {\n e.preventDefault();\n this.goToPrevSlide();\n }\n\n if (e.keyCode === 39) {\n e.preventDefault();\n this.goToNextSlide();\n }\n }\n });\n }\n\n arrow(): void {\n this.getElementById('lg-prev').on('click.lg', () => {\n this.goToPrevSlide();\n });\n this.getElementById('lg-next').on('click.lg', () => {\n this.goToNextSlide();\n });\n }\n\n arrowDisable(index: number): void {\n // Disable arrows if settings.hideControlOnEnd is true\n if (!this.settings.loop && this.settings.hideControlOnEnd) {\n const $prev = this.getElementById('lg-prev');\n const $next = this.getElementById('lg-next');\n if (index + 1 === this.galleryItems.length) {\n $next.attr('disabled', 'disabled').addClass('disabled');\n } else {\n $next.removeAttr('disabled').removeClass('disabled');\n }\n\n if (index === 0) {\n $prev.attr('disabled', 'disabled').addClass('disabled');\n } else {\n $prev.removeAttr('disabled').removeClass('disabled');\n }\n }\n }\n\n setTranslate(\n $el: lgQuery,\n xValue: number,\n yValue: number,\n scaleX = 1,\n scaleY = 1,\n ): void {\n $el.css(\n 'transform',\n 'translate3d(' +\n xValue +\n 'px, ' +\n yValue +\n 'px, 0px) scale3d(' +\n scaleX +\n ', ' +\n scaleY +\n ', 1)',\n );\n }\n\n mousewheel(): void {\n let lastCall = 0;\n this.outer.on('wheel.lg', (e) => {\n if (!e.deltaY || this.galleryItems.length < 2) {\n return;\n }\n e.preventDefault();\n const now = new Date().getTime();\n if (now - lastCall < 1000) {\n return;\n }\n lastCall = now;\n if (e.deltaY > 0) {\n this.goToNextSlide();\n } else if (e.deltaY < 0) {\n this.goToPrevSlide();\n }\n });\n }\n\n isSlideElement(target: lgQuery): boolean {\n return (\n target.hasClass('lg-outer') ||\n target.hasClass('lg-item') ||\n target.hasClass('lg-img-wrap')\n );\n }\n\n isPosterElement(target: lgQuery): boolean {\n const playButton = this.getSlideItem(this.index)\n .find('.lg-video-play-button')\n .get();\n return (\n target.hasClass('lg-video-poster') ||\n target.hasClass('lg-video-play-button') ||\n (playButton && playButton.contains(target.get()))\n );\n }\n\n /**\n * Maximize minimize inline gallery.\n * @category lGPublicMethods\n */\n toggleMaximize(): void {\n this.getElementById('lg-maximize').on('click.lg', () => {\n this.$container.toggleClass('lg-inline');\n this.refreshOnResize();\n });\n }\n\n invalidateItems(): void {\n for (let index = 0; index < this.items.length; index++) {\n const element = this.items[index];\n const $element = $LG(element);\n $element.off(`click.lgcustom-item-${$element.attr('data-lg-id')}`);\n }\n }\n\n trapFocus(): void {\n this.$container.get().focus({\n preventScroll: true,\n });\n $LG(window).on(`keydown.lg.global${this.lgId}`, (e) => {\n if (!this.lgOpened) {\n return;\n }\n\n const isTabPressed = e.key === 'Tab' || e.keyCode === 9;\n if (!isTabPressed) {\n return;\n }\n const focusableEls = utils.getFocusableElements(\n this.$container.get(),\n );\n const firstFocusableEl = focusableEls[0];\n const lastFocusableEl = focusableEls[focusableEls.length - 1];\n\n if (e.shiftKey) {\n if (document.activeElement === firstFocusableEl) {\n (lastFocusableEl as HTMLElement).focus();\n e.preventDefault();\n }\n } else {\n if (document.activeElement === lastFocusableEl) {\n (firstFocusableEl as HTMLElement).focus();\n e.preventDefault();\n }\n }\n });\n }\n\n manageCloseGallery(): void {\n if (!this.settings.closable) return;\n let mousedown = false;\n this.getElementById('lg-close').on('click.lg', () => {\n this.closeGallery();\n });\n\n if (this.settings.closeOnTap) {\n // If you drag the slide and release outside gallery gets close on chrome\n // for preventing this check mousedown and mouseup happened on .lg-item or lg-outer\n this.outer.on('mousedown.lg', (e) => {\n const target = $LG(e.target);\n if (this.isSlideElement(target)) {\n mousedown = true;\n } else {\n mousedown = false;\n }\n });\n\n this.outer.on('mousemove.lg', () => {\n mousedown = false;\n });\n\n this.outer.on('mouseup.lg', (e) => {\n const target = $LG(e.target);\n if (this.isSlideElement(target) && mousedown) {\n if (!this.outer.hasClass('lg-dragging')) {\n this.closeGallery();\n }\n }\n });\n }\n }\n\n /**\n * Close lightGallery if it is opened.\n *\n * @description If closable is false in the settings, you need to pass true via closeGallery method to force close gallery\n * @return returns the estimated time to close gallery completely including the close animation duration\n * @category lGPublicMethods\n * @example\n * const plugin = lightGallery();\n * plugin.closeGallery();\n *\n */\n closeGallery(force?: boolean): number {\n if (!this.lgOpened || (!this.settings.closable && !force)) {\n return 0;\n }\n this.LGel.trigger(lGEvents.beforeClose);\n\n if (this.settings.resetScrollPosition && !this.settings.hideScrollbar) {\n $LG(window).scrollTop(this.prevScrollTop);\n }\n\n const currentItem = this.items[this.index];\n let transform: string | undefined;\n if (this.zoomFromOrigin && currentItem) {\n const { top, bottom } = this.mediaContainerPosition;\n const { __slideVideoInfo, poster } = this.galleryItems[this.index];\n const imageSize = utils.getSize(\n currentItem,\n this.outer,\n top + bottom,\n __slideVideoInfo && poster && this.settings.videoMaxSize,\n );\n transform = utils.getTransform(\n currentItem,\n this.outer,\n top,\n bottom,\n imageSize,\n );\n }\n if (this.zoomFromOrigin && transform) {\n this.outer.addClass('lg-closing lg-zoom-from-image');\n this.getSlideItem(this.index)\n .addClass('lg-start-end-progress')\n .css(\n 'transition-duration',\n this.settings.startAnimationDuration + 'ms',\n )\n .css('transform', transform);\n } else {\n this.outer.addClass('lg-hide-items');\n // lg-zoom-from-image is used for setting the opacity to 1 if zoomFromOrigin is true\n // If the closing item doesn't have the lg-size attribute, remove this class to avoid the closing css conflicts\n this.outer.removeClass('lg-zoom-from-image');\n }\n\n // Unbind all events added by lightGallery\n // @todo\n //this.$el.off('.lg.tm');\n\n this.destroyModules();\n\n this.lGalleryOn = false;\n this.isDummyImageRemoved = false;\n this.zoomFromOrigin = this.settings.zoomFromOrigin;\n\n clearTimeout(this.hideBarTimeout);\n this.hideBarTimeout = false;\n $LG('html').removeClass('lg-on');\n\n this.outer.removeClass('lg-visible lg-components-open');\n\n // Resetting opacity to 0 isd required as vertical swipe to close function adds inline opacity.\n this.$backdrop.removeClass('in').css('opacity', 0);\n\n const removeTimeout =\n this.zoomFromOrigin && transform\n ? Math.max(\n this.settings.startAnimationDuration,\n this.settings.backdropDuration,\n )\n : this.settings.backdropDuration;\n this.$container.removeClass('lg-show-in');\n\n // Once the closign animation is completed and gallery is invisible\n setTimeout(() => {\n if (this.zoomFromOrigin && transform) {\n this.outer.removeClass('lg-zoom-from-image');\n }\n this.$container.removeClass('lg-show');\n\n // Reset scrollbar\n this.resetScrollBar();\n\n // Need to remove inline opacity as it is used in the stylesheet as well\n this.$backdrop\n .removeAttr('style')\n .css(\n 'transition-duration',\n this.settings.backdropDuration + 'ms',\n );\n\n this.outer.removeClass(`lg-closing ${this.settings.startClass}`);\n\n this.getSlideItem(this.index).removeClass('lg-start-end-progress');\n this.$inner.empty();\n if (this.lgOpened) {\n this.LGel.trigger(lGEvents.afterClose, {\n instance: this,\n });\n }\n if (this.$container.get()) {\n this.$container.get().blur();\n }\n\n this.lgOpened = false;\n }, removeTimeout + 100);\n return removeTimeout + 100;\n }\n\n initModules(): void {\n this.plugins.forEach((module) => {\n try {\n module.init();\n } catch (err) {\n console.warn(\n `lightGallery:- make sure lightGallery module is properly initiated`,\n );\n }\n });\n }\n\n destroyModules(destroy?: true): void {\n this.plugins.forEach((module) => {\n try {\n if (destroy) {\n module.destroy();\n } else {\n module.closeGallery && module.closeGallery();\n }\n } catch (err) {\n console.warn(\n `lightGallery:- make sure lightGallery module is properly destroyed`,\n );\n }\n });\n }\n\n /**\n * Refresh lightGallery with new set of children.\n *\n * @description This is useful to update the gallery when the child elements are changed without calling destroy method.\n *\n * If you are using dynamic mode, you can pass the modified array of dynamicEl as the first parameter to refresh the dynamic gallery\n * @see Demo\n * @category lGPublicMethods\n * @example\n * const plugin = lightGallery();\n * // Delete or add children, then call\n * plugin.refresh();\n *\n */\n refresh(galleryItems?: GalleryItem[]): void {\n if (!this.settings.dynamic) {\n this.invalidateItems();\n }\n if (galleryItems) {\n this.galleryItems = galleryItems;\n } else {\n this.galleryItems = this.getItems();\n }\n this.updateControls();\n this.openGalleryOnItemClick();\n this.LGel.trigger(lGEvents.updateSlides);\n }\n\n updateControls(): void {\n this.addSlideVideoInfo(this.galleryItems);\n this.updateCounterTotal();\n this.manageSingleSlideClassName();\n }\n\n private destroyGallery(): void {\n this.destroyModules(true);\n if (!this.settings.dynamic) {\n this.invalidateItems();\n }\n $LG(window).off(`.lg.global${this.lgId}`);\n this.LGel.off('.lg');\n this.$container.remove();\n }\n\n /**\n * Destroy lightGallery.\n * Destroy lightGallery and its plugin instances completely\n *\n * @description This method also calls CloseGallery function internally. Returns the time takes to completely close and destroy the instance.\n * In case if you want to re-initialize lightGallery right after destroying it, initialize it only once the destroy process is completed.\n * You can use refresh method most of the times.\n * @category lGPublicMethods\n * @example\n * const plugin = lightGallery();\n * plugin.destroy();\n *\n */\n destroy(): number {\n const closeTimeout = this.closeGallery(true);\n if (closeTimeout) {\n setTimeout(this.destroyGallery.bind(this), closeTimeout);\n } else {\n this.destroyGallery();\n }\n return closeTimeout;\n }\n}\n", "import { LightGallerySettings } from './lg-settings';\nimport { LightGallery } from './lightgallery';\n\nfunction lightGallery(\n el: HTMLElement,\n options?: LightGallerySettings,\n): LightGallery {\n return new LightGallery(el, options);\n}\nexport default lightGallery;\n", "import { LightGallery } from './lightgallery';\nimport { VideoSource } from './plugins/video/types';\n\n/**\n * List of lightGallery events\n * All events should be documented here\n * Below interfaces are used to build the website documentations\n * */\nexport const lGEvents: {\n [key: string]: string;\n} = {\n afterAppendSlide: 'lgAfterAppendSlide',\n init: 'lgInit',\n hasVideo: 'lgHasVideo',\n containerResize: 'lgContainerResize',\n updateSlides: 'lgUpdateSlides',\n afterAppendSubHtml: 'lgAfterAppendSubHtml',\n beforeOpen: 'lgBeforeOpen',\n afterOpen: 'lgAfterOpen',\n slideItemLoad: 'lgSlideItemLoad',\n beforeSlide: 'lgBeforeSlide',\n afterSlide: 'lgAfterSlide',\n posterClick: 'lgPosterClick',\n dragStart: 'lgDragStart',\n dragMove: 'lgDragMove',\n dragEnd: 'lgDragEnd',\n beforeNextSlide: 'lgBeforeNextSlide',\n beforePrevSlide: 'lgBeforePrevSlide',\n beforeClose: 'lgBeforeClose',\n afterClose: 'lgAfterClose',\n rotateLeft: 'lgRotateLeft',\n rotateRight: 'lgRotateRight',\n flipHorizontal: 'lgFlipHorizontal',\n flipVertical: 'lgFlipVertical',\n autoplay: 'lgAutoplay',\n autoplayStart: 'lgAutoplayStart',\n autoplayStop: 'lgAutoplayStop',\n};\n\n// Follow the below format for the event documentation\n// @method is the method name when event is used with Angular/React components\n\n/**\n * Fired only once when lightGallery is initialized\n * @name lgInit\n * @method onInit\n * @example\n * const lg = document.getElementById('custom-events-demo');\n * // Perform any action on lightGallery initialization.\n * // Init event returns the plugin instance that can be used to call any lightGalley public method\n * let pluginInstance = null;\n * lg.addEventListener('lgInit', (event) => {\n * pluginInstance = event.detail.instance;\n * });\n * lightGallery(lg);\n * @see Methods\n */\nexport interface InitDetail {\n /**\n * lightGallery plugin instance\n */\n instance: LightGallery;\n}\n\n/**\n * Fired when the slide content has been inserted into it's slide container.\n * @name lgAfterAppendSlide\n * @method onAfterAppendSlide\n */\nexport interface AfterAppendSlideEventDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired immediately before opening the gallery\n * @name lgBeforeOpen\n * @method onBeforeOpen\n */\nexport interface BeforeOpenDetail {}\n\n/**\n * Fired immediately after opening the gallery\n * @name lgAfterOpen\n * @method onAfterOpen\n */\nexport interface AfterOpenDetail {}\n\n/**\n * Fired once the media inside the slide has been completely loaded .\n * @name lgSlideItemLoad\n * @method onSlideItemLoad\n */\nexport interface SlideItemLoadDetail {\n /**\n * Index of the slide\n */\n index: number;\n /**\n * For the first slide, lightGallery adds some delay for displaying the loaded slide item.\n * This delay is required for the transition effect when the slide item is displayed\n * Respect the delay when you use this event\n */\n delay: number;\n\n // Will be true for the first slide\n isFirstSlide: boolean;\n}\n\n/**\n * Fired immediately before each slide transition.\n * @name lgBeforeSlide\n * @method onBeforeSlide\n * @example\n * const lg = document.getElementById('custom-events-demo');\n * // Perform any action before each slide transition\n * lg.addEventListener('lgBeforeSlide', (event) => {\n * const { index, prevIndex } = event.detail;\n * alert(index, prevIndex);\n * });\n * lightGallery(lg);\n */\nexport interface BeforeSlideDetail {\n /**\n * Index of the previous slide\n */\n prevIndex: number;\n /**\n * Index of the slide\n */\n index: number;\n /**\n * true if slide function called via touch event or mouse drag\n */\n fromTouch: boolean;\n /**\n * true if slide function called via thumbnail click\n */\n fromThumb: boolean;\n}\n\n/**\n * Fired immediately after each slide transition.\n * @name lgAfterSlide\n * @method onAfterSlide\n */\nexport interface AfterSlideDetail {\n /**\n * Index of the previous slide\n */\n prevIndex: number;\n /**\n * Index of the slide\n */\n index: number;\n /**\n * true if slide function called via touch event or mouse drag\n */\n fromTouch: boolean;\n /**\n * true if slide function called via thumbnail click\n */\n fromThumb: boolean;\n}\n\n/**\n * Fired when the video poster is clicked.\n * @name lgPosterClick\n * @method onPosterClick\n */\nexport interface PosterClickDetail {}\n\n/**\n * Fired when the drag event to move to different slide starts.\n * @name lgDragStart\n * @method onDragStart\n */\nexport interface DragStartDetail {}\n\n/**\n * Fired periodically during the drag operation.\n * @name lgDragMove\n * @method onDragMove\n */\nexport interface DragMoveDetail {}\n\n/**\n * Fired when the user has finished the drag operation\n * @name lgDragEnd\n * @method onDragEnd\n */\nexport interface DragEndDetail {}\n\n/**\n * Fired immediately before the start of the close process.\n * @name lgBeforeClose\n * @method onBeforeClose\n */\nexport interface BeforeCloseDetail {}\n\n/**\n * Fired immediately once lightGallery is closed.\n * @name lgAfterClose\n * @method onAfterClose\n */\nexport interface AfterCloseDetail {\n /**\n * lightGallery plugin instance\n */\n instance: LightGallery;\n}\n\n/**\n * Fired immediately before each \"next\" slide transition\n * @name lgBeforeNextSlide\n * @method onBeforeNextSlide\n */\nexport interface BeforeNextSlideDetail {\n /**\n * Index of the slide\n */\n index: number;\n /**\n * true if slide function called via touch event or mouse drag\n */\n fromTouch: boolean;\n}\n\n/**\n * Fired immediately before each \"prev\" slide transition\n * @name lgBeforePrevSlide\n * @method onBeforePrevSlide\n */\nexport interface BeforePrevSlideDetail {\n /**\n * Index of the slide\n */\n index: number;\n /**\n * true if slide function called via touch event or mouse drag\n */\n fromTouch: boolean;\n}\n\n/**\n * Fired when the sub-html content (ex : title/ description) has been appended into the slide.\n * @name lgAfterAppendSubHtml\n * @method onAfterAppendSubHtml\n */\nexport interface AfterAppendSubHtmlDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when the lightGallery container has been resized.\n * @name lgContainerResize\n * @method onContainerResize\n */\nexport interface ContainerResizeDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when lightGallery detects video slide\n * @name lgHasVideo\n * @method onHasVideo\n */\nexport interface HasVideoDetail {\n /**\n * Index of the slide,\n */\n index: number;\n /**\n * Video source\n */\n src: string;\n /**\n * HTML5 video source if available\n *

\n HTML5 video source = source: {\n src: string;\n type: string;\n }[];\n attributes: HTMLVideoElement;\n *

\n */\n html5Video: VideoSource;\n /**\n * True if video has poster\n */\n hasPoster: boolean;\n}\n\n/**\n * Fired when the image is rotated in anticlockwise direction\n * @name lgRotateLeft\n * @method onRotateLeft\n */\nexport interface RotateLeftDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when the image is rotated in clockwise direction\n * @name lgRotateRight\n * @method onRotateRight\n */\nexport interface RotateRightDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when the image is flipped horizontally\n * @name lgFlipHorizontal\n * @method onFlipHorizontal\n */\nexport interface FlipHorizontalDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when the image is flipped vertically\n * @name lgFlipVertical\n * @method onFlipVertical\n */\nexport interface FlipVerticalDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n", "export interface HashSettings {\n /**\n * Enable/Disable hash option\n */\n hash: boolean;\n\n /**\n * Unique id for each gallery.\n * @description It is mandatory when you use hash plugin for multiple galleries on the same page.\n */\n galleryId: string;\n\n /**\n * Custom slide name to use in the url when hash plugin is enabled\n */\n customSlideName: boolean;\n}\n\nexport const hashSettings: HashSettings = {\n hash: true,\n galleryId: '1',\n customSlideName: false,\n};\n", "import { lGEvents } from '../../lg-events';\nimport { LgQuery } from '../../lgQuery';\nimport { LightGallery } from '../../lightgallery';\nimport { hashSettings, HashSettings } from './lg-hash-settings';\n\nexport default class Hash {\n core: LightGallery;\n settings: HashSettings;\n oldHash!: string;\n private $LG!: LgQuery;\n constructor(instance: LightGallery, $LG: LgQuery) {\n // get lightGallery core plugin instance\n this.core = instance;\n this.$LG = $LG;\n // extend module default settings with lightGallery core settings\n this.settings = { ...hashSettings, ...this.core.settings };\n return this;\n }\n\n public init(): void {\n if (!this.settings.hash) {\n return;\n }\n this.oldHash = window.location.hash;\n setTimeout(() => {\n this.buildFromHash();\n }, 100);\n // Change hash value on after each slide transition\n this.core.LGel.on(\n `${lGEvents.afterSlide}.hash`,\n this.onAfterSlide.bind(this),\n );\n this.core.LGel.on(\n `${lGEvents.afterClose}.hash`,\n this.onCloseAfter.bind(this),\n );\n\n // Listen hash change and change the slide according to slide value\n this.$LG(window).on(\n `hashchange.lg.hash.global${this.core.lgId}`,\n this.onHashchange.bind(this),\n );\n }\n\n private onAfterSlide(event: CustomEvent) {\n let slideName = this.core.galleryItems[event.detail.index].slideName;\n slideName = this.settings.customSlideName\n ? slideName || event.detail.index\n : event.detail.index;\n if (history.replaceState) {\n history.replaceState(\n null,\n '',\n window.location.pathname +\n window.location.search +\n '#lg=' +\n this.settings.galleryId +\n '&slide=' +\n slideName,\n );\n } else {\n window.location.hash =\n 'lg=' + this.settings.galleryId + '&slide=' + slideName;\n }\n }\n\n /**\n * Get index of the slide from custom slideName. Has to be a public method. Used in hash plugin\n * @param {String} hash\n * @returns {Number} Index of the slide.\n */\n getIndexFromUrl(hash = window.location.hash): number {\n const slideName = hash.split('&slide=')[1];\n let _idx = 0;\n\n if (this.settings.customSlideName) {\n for (\n let index = 0;\n index < this.core.galleryItems.length;\n index++\n ) {\n const dynamicEl = this.core.galleryItems[index];\n if (dynamicEl.slideName === slideName) {\n _idx = index;\n break;\n }\n }\n } else {\n _idx = parseInt(slideName, 10);\n }\n\n return isNaN(_idx) ? 0 : _idx;\n }\n\n // Build Gallery if gallery id exist in the URL\n buildFromHash(): boolean | undefined {\n // if dynamic option is enabled execute immediately\n const _hash = window.location.hash;\n if (_hash.indexOf('lg=' + this.settings.galleryId) > 0) {\n // This class is used to remove the initial animation if galleryId present in the URL\n this.$LG(document.body).addClass('lg-from-hash');\n\n const index = this.getIndexFromUrl(_hash);\n\n this.core.openGallery(index);\n return true;\n }\n }\n\n private onCloseAfter() {\n // Reset to old hash value\n if (\n this.oldHash &&\n this.oldHash.indexOf('lg=' + this.settings.galleryId) < 0\n ) {\n if (history.replaceState) {\n history.replaceState(null, '', this.oldHash);\n } else {\n window.location.hash = this.oldHash;\n }\n } else {\n if (history.replaceState) {\n history.replaceState(\n null,\n document.title,\n window.location.pathname + window.location.search,\n );\n } else {\n window.location.hash = '';\n }\n }\n }\n\n private onHashchange() {\n if (!this.core.lgOpened) return;\n const _hash = window.location.hash;\n const index = this.getIndexFromUrl(_hash);\n\n // it galleryId doesn't exist in the url close the gallery\n if (_hash.indexOf('lg=' + this.settings.galleryId) > -1) {\n this.core.slide(index, false, false);\n } else if (this.core.lGalleryOn) {\n this.core.closeGallery();\n }\n }\n\n closeGallery(): void {\n if (this.settings.hash) {\n this.$LG(document.body).removeClass('lg-from-hash');\n }\n }\n\n destroy(): void {\n this.core.LGel.off('.lg.hash');\n this.core.LGel.off('.hash');\n this.$LG(window).off(`hashchange.lg.hash.global${this.core.lgId}`);\n }\n}\n", "import { PlayerParams } from './lg-video-utils';\n\nexport interface VideoSettings {\n /**\n * Enable/DIsable first video autoplay.\n * @description Autoplay has to be managed using this setting.\n * Autoplay in PlayerParams doesn't have any effect.\n */\n autoplayFirstVideo: boolean;\n\n /**\n * Change YouTube player parameters.\n * You can find the list of YouTube player parameters from the following link\n *
YouTube player parameters\n * @example\n * lightGallery(document.getElementById('lightGallery'), {\n * youTubePlayerParams: {\n * modestbranding : 1,\n * showinfo : 0,\n * controls : 0\n * }\n * })\n */\n youTubePlayerParams: any;\n\n /**\n * Change Vimeo player parameters.\n * You can find the list of vimeo player parameters from the following link\n * Vimeo player parameters\n * @example\n * lightGallery(document.getElementById('lightGallery'), {\n * vimeoPlayerParams: {\n * byline : 0,\n * portrait : 0,\n * color : 'CCCCCC'\n * }\n * })\n */\n vimeoPlayerParams: PlayerParams;\n\n /**\n * Change Wistia player parameters.\n * You can find the list of Wistia player parameters from the following link\n * Vimeo player parameters\n */\n wistiaPlayerParams: any;\n\n /**\n * Go to next slide when video is ended\n * Note - this doesn't work with YouTube videos at the moment\n */\n gotoNextSlideOnVideoEnd: boolean;\n\n /**\n * Autoplay video on slide change\n * @description Make sure you set preload:\"none\"\n */\n autoplayVideoOnSlide: boolean;\n\n /**\n * Enbale videojs custom video player\n *
\n * Dependency - You need to include videoJs on your document to enable videojs player\n *
\n */\n videojs: boolean;\n\n /**\n * Class name of the videojs theme\n * You need to include the theme stylesheet on your document. More info\n * @version V2.5.0\n */\n videojsTheme: string;\n\n /**\n * Videojs player options\n */\n videojsOptions: any;\n}\nexport const videoSettings: VideoSettings = {\n autoplayFirstVideo: true,\n youTubePlayerParams: false,\n vimeoPlayerParams: false,\n wistiaPlayerParams: false,\n gotoNextSlideOnVideoEnd: true,\n autoplayVideoOnSlide: false,\n videojs: false,\n videojsTheme: '',\n videojsOptions: {},\n};\n", "import { LightGallery } from './lightgallery';\nimport { VideoSource } from './plugins/video/types';\n\n/**\n * List of lightGallery events\n * All events should be documented here\n * Below interfaces are used to build the website documentations\n * */\nexport const lGEvents: {\n [key: string]: string;\n} = {\n afterAppendSlide: 'lgAfterAppendSlide',\n init: 'lgInit',\n hasVideo: 'lgHasVideo',\n containerResize: 'lgContainerResize',\n updateSlides: 'lgUpdateSlides',\n afterAppendSubHtml: 'lgAfterAppendSubHtml',\n beforeOpen: 'lgBeforeOpen',\n afterOpen: 'lgAfterOpen',\n slideItemLoad: 'lgSlideItemLoad',\n beforeSlide: 'lgBeforeSlide',\n afterSlide: 'lgAfterSlide',\n posterClick: 'lgPosterClick',\n dragStart: 'lgDragStart',\n dragMove: 'lgDragMove',\n dragEnd: 'lgDragEnd',\n beforeNextSlide: 'lgBeforeNextSlide',\n beforePrevSlide: 'lgBeforePrevSlide',\n beforeClose: 'lgBeforeClose',\n afterClose: 'lgAfterClose',\n rotateLeft: 'lgRotateLeft',\n rotateRight: 'lgRotateRight',\n flipHorizontal: 'lgFlipHorizontal',\n flipVertical: 'lgFlipVertical',\n autoplay: 'lgAutoplay',\n autoplayStart: 'lgAutoplayStart',\n autoplayStop: 'lgAutoplayStop',\n};\n\n// Follow the below format for the event documentation\n// @method is the method name when event is used with Angular/React components\n\n/**\n * Fired only once when lightGallery is initialized\n * @name lgInit\n * @method onInit\n * @example\n * const lg = document.getElementById('custom-events-demo');\n * // Perform any action on lightGallery initialization.\n * // Init event returns the plugin instance that can be used to call any lightGalley public method\n * let pluginInstance = null;\n * lg.addEventListener('lgInit', (event) => {\n * pluginInstance = event.detail.instance;\n * });\n * lightGallery(lg);\n * @see Methods\n */\nexport interface InitDetail {\n /**\n * lightGallery plugin instance\n */\n instance: LightGallery;\n}\n\n/**\n * Fired when the slide content has been inserted into it's slide container.\n * @name lgAfterAppendSlide\n * @method onAfterAppendSlide\n */\nexport interface AfterAppendSlideEventDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired immediately before opening the gallery\n * @name lgBeforeOpen\n * @method onBeforeOpen\n */\nexport interface BeforeOpenDetail {}\n\n/**\n * Fired immediately after opening the gallery\n * @name lgAfterOpen\n * @method onAfterOpen\n */\nexport interface AfterOpenDetail {}\n\n/**\n * Fired once the media inside the slide has been completely loaded .\n * @name lgSlideItemLoad\n * @method onSlideItemLoad\n */\nexport interface SlideItemLoadDetail {\n /**\n * Index of the slide\n */\n index: number;\n /**\n * For the first slide, lightGallery adds some delay for displaying the loaded slide item.\n * This delay is required for the transition effect when the slide item is displayed\n * Respect the delay when you use this event\n */\n delay: number;\n\n // Will be true for the first slide\n isFirstSlide: boolean;\n}\n\n/**\n * Fired immediately before each slide transition.\n * @name lgBeforeSlide\n * @method onBeforeSlide\n * @example\n * const lg = document.getElementById('custom-events-demo');\n * // Perform any action before each slide transition\n * lg.addEventListener('lgBeforeSlide', (event) => {\n * const { index, prevIndex } = event.detail;\n * alert(index, prevIndex);\n * });\n * lightGallery(lg);\n */\nexport interface BeforeSlideDetail {\n /**\n * Index of the previous slide\n */\n prevIndex: number;\n /**\n * Index of the slide\n */\n index: number;\n /**\n * true if slide function called via touch event or mouse drag\n */\n fromTouch: boolean;\n /**\n * true if slide function called via thumbnail click\n */\n fromThumb: boolean;\n}\n\n/**\n * Fired immediately after each slide transition.\n * @name lgAfterSlide\n * @method onAfterSlide\n */\nexport interface AfterSlideDetail {\n /**\n * Index of the previous slide\n */\n prevIndex: number;\n /**\n * Index of the slide\n */\n index: number;\n /**\n * true if slide function called via touch event or mouse drag\n */\n fromTouch: boolean;\n /**\n * true if slide function called via thumbnail click\n */\n fromThumb: boolean;\n}\n\n/**\n * Fired when the video poster is clicked.\n * @name lgPosterClick\n * @method onPosterClick\n */\nexport interface PosterClickDetail {}\n\n/**\n * Fired when the drag event to move to different slide starts.\n * @name lgDragStart\n * @method onDragStart\n */\nexport interface DragStartDetail {}\n\n/**\n * Fired periodically during the drag operation.\n * @name lgDragMove\n * @method onDragMove\n */\nexport interface DragMoveDetail {}\n\n/**\n * Fired when the user has finished the drag operation\n * @name lgDragEnd\n * @method onDragEnd\n */\nexport interface DragEndDetail {}\n\n/**\n * Fired immediately before the start of the close process.\n * @name lgBeforeClose\n * @method onBeforeClose\n */\nexport interface BeforeCloseDetail {}\n\n/**\n * Fired immediately once lightGallery is closed.\n * @name lgAfterClose\n * @method onAfterClose\n */\nexport interface AfterCloseDetail {\n /**\n * lightGallery plugin instance\n */\n instance: LightGallery;\n}\n\n/**\n * Fired immediately before each \"next\" slide transition\n * @name lgBeforeNextSlide\n * @method onBeforeNextSlide\n */\nexport interface BeforeNextSlideDetail {\n /**\n * Index of the slide\n */\n index: number;\n /**\n * true if slide function called via touch event or mouse drag\n */\n fromTouch: boolean;\n}\n\n/**\n * Fired immediately before each \"prev\" slide transition\n * @name lgBeforePrevSlide\n * @method onBeforePrevSlide\n */\nexport interface BeforePrevSlideDetail {\n /**\n * Index of the slide\n */\n index: number;\n /**\n * true if slide function called via touch event or mouse drag\n */\n fromTouch: boolean;\n}\n\n/**\n * Fired when the sub-html content (ex : title/ description) has been appended into the slide.\n * @name lgAfterAppendSubHtml\n * @method onAfterAppendSubHtml\n */\nexport interface AfterAppendSubHtmlDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when the lightGallery container has been resized.\n * @name lgContainerResize\n * @method onContainerResize\n */\nexport interface ContainerResizeDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when lightGallery detects video slide\n * @name lgHasVideo\n * @method onHasVideo\n */\nexport interface HasVideoDetail {\n /**\n * Index of the slide,\n */\n index: number;\n /**\n * Video source\n */\n src: string;\n /**\n * HTML5 video source if available\n *

\n HTML5 video source = source: {\n src: string;\n type: string;\n }[];\n attributes: HTMLVideoElement;\n *

\n */\n html5Video: VideoSource;\n /**\n * True if video has poster\n */\n hasPoster: boolean;\n}\n\n/**\n * Fired when the image is rotated in anticlockwise direction\n * @name lgRotateLeft\n * @method onRotateLeft\n */\nexport interface RotateLeftDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when the image is rotated in clockwise direction\n * @name lgRotateRight\n * @method onRotateRight\n */\nexport interface RotateRightDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when the image is flipped horizontally\n * @name lgFlipHorizontal\n * @method onFlipHorizontal\n */\nexport interface FlipHorizontalDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when the image is flipped vertically\n * @name lgFlipVertical\n * @method onFlipVertical\n */\nexport interface FlipVerticalDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n", "import { VideoInfo } from '../../types';\nexport type PlayerParams = Record | boolean;\n\nexport type YouTubeParams = {\n [x: string]: string | number | boolean;\n};\n\nexport const param = (obj: YouTubeParams): string => {\n return Object.keys(obj)\n .map(function (k) {\n return encodeURIComponent(k) + '=' + encodeURIComponent(obj[k]);\n })\n .join('&');\n};\nexport const paramsToObject = (url: string): YouTubeParams => {\n const paramas = url\n .slice(1)\n .split('&')\n .map((p) => p.split('='))\n .reduce((obj: any, pair) => {\n const [key, value] = pair.map(decodeURIComponent);\n obj[key] = value;\n return obj;\n }, {});\n return paramas;\n};\n\nexport const getYouTubeParams = (\n videoInfo: VideoInfo,\n youTubePlayerParamsSettings: YouTubeParams | false,\n): string => {\n if (!videoInfo.youtube) return '';\n const slideUrlParams = videoInfo.youtube[2]\n ? paramsToObject(videoInfo.youtube[2])\n : '';\n\n // For youtube first params gets priority if duplicates found\n const defaultYouTubePlayerParams = {\n wmode: 'opaque',\n autoplay: 0,\n mute: 1,\n enablejsapi: 1,\n };\n\n const playerParamsSettings = youTubePlayerParamsSettings || {};\n\n const youTubePlayerParams = {\n ...defaultYouTubePlayerParams,\n ...playerParamsSettings,\n ...slideUrlParams,\n };\n\n const youTubeParams = `?${param(youTubePlayerParams)}`;\n return youTubeParams;\n};\n\nexport const isYouTubeNoCookie = (url: string): boolean => {\n return url.includes('youtube-nocookie.com');\n};\n\nexport const getVimeoURLParams = (\n defaultParams: PlayerParams,\n videoInfo?: VideoInfo,\n): string => {\n if (!videoInfo || !videoInfo.vimeo) return '';\n let urlParams = videoInfo.vimeo[2] || '';\n\n const defaultPlayerParams =\n defaultParams && Object.keys(defaultParams).length !== 0\n ? '&' + param(defaultParams as any)\n : '';\n\n // Support private video\n const urlWithHash = videoInfo.vimeo[0].split('/').pop() || '';\n const urlWithHashWithParams = urlWithHash.split('?')[0] || '';\n const hash = urlWithHashWithParams.split('#')[0];\n\n const isPrivate = videoInfo.vimeo[1] !== hash;\n if (isPrivate) {\n urlParams = urlParams.replace(`/${hash}`, '');\n }\n\n urlParams =\n urlParams[0] == '?' ? '&' + urlParams.slice(1) : urlParams || '';\n\n // For vimeo last params gets priority if duplicates found\n const vimeoPlayerParams = `?autoplay=0&muted=1${\n isPrivate ? `&h=${hash}` : ''\n }${defaultPlayerParams}${urlParams}`;\n return vimeoPlayerParams;\n};\n", "/**\n * Video module for lightGallery\n * Supports HTML5, YouTube, Vimeo, wistia videos\n *\n *\n * @ref Wistia\n * https://wistia.com/support/integrations/wordpress(How to get url)\n * https://wistia.com/support/developers/embed-options#using-embed-options\n * https://wistia.com/support/developers/player-api\n * https://wistia.com/support/developers/construct-an-embed-code\n * http://jsfiddle.net/xvnm7xLm/\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video\n * https://wistia.com/support/embed-and-share/sharing-videos\n * https://private-sharing.wistia.com/medias/mwhrulrucj\n *\n * @ref Youtube\n * https://developers.google.com/youtube/player_parameters#enablejsapi\n * https://developers.google.com/youtube/iframe_api_reference\n * https://developer.chrome.com/blog/autoplay/#iframe-delegation\n *\n * @ref Vimeo\n * https://stackoverflow.com/questions/10488943/easy-way-to-get-vimeo-id-from-a-vimeo-url\n * https://vimeo.zendesk.com/hc/en-us/articles/360000121668-Starting-playback-at-a-specific-timecode\n * https://vimeo.zendesk.com/hc/en-us/articles/360001494447-Using-Player-Parameters\n */\n\nimport { VideoSettings, videoSettings } from './lg-video-settings';\nimport { LightGallery } from '../../lightgallery';\nimport { lgQuery } from '../../lgQuery';\nimport {\n CustomEventAfterSlide,\n CustomEventHasVideo,\n CustomEventSlideItemLoad,\n VideoInfo,\n} from '../../types';\nimport { lGEvents } from '../../lg-events';\nimport { VideoSource } from './types';\nimport {\n getVimeoURLParams,\n getYouTubeParams,\n isYouTubeNoCookie,\n param,\n} from './lg-video-utils';\n\ndeclare let Vimeo: any;\ndeclare let videojs: any;\ndeclare global {\n interface Window {\n _wq: any;\n Vimeo: any;\n }\n}\nexport default class Video {\n private core: LightGallery;\n private settings: VideoSettings;\n constructor(instance: LightGallery) {\n // get lightGallery core plugin instance\n this.core = instance;\n this.settings = { ...videoSettings, ...this.core.settings };\n\n return this;\n }\n init() {\n /**\n * Event triggered when video url found without poster\n * Append video HTML\n * Play if autoplayFirstVideo is true\n */\n this.core.LGel.on(\n `${lGEvents.hasVideo}.video`,\n this.onHasVideo.bind(this),\n );\n\n this.core.LGel.on(`${lGEvents.posterClick}.video`, () => {\n const $el = this.core.getSlideItem(this.core.index);\n this.loadVideoOnPosterClick($el);\n });\n this.core.LGel.on(\n `${lGEvents.slideItemLoad}.video`,\n this.onSlideItemLoad.bind(this),\n );\n\n // @desc fired immediately before each slide transition.\n this.core.LGel.on(\n `${lGEvents.beforeSlide}.video`,\n this.onBeforeSlide.bind(this),\n );\n\n // @desc fired immediately after each slide transition.\n this.core.LGel.on(\n `${lGEvents.afterSlide}.video`,\n this.onAfterSlide.bind(this),\n );\n }\n\n /**\n * @desc Event triggered when a slide is completely loaded\n *\n * @param {Event} event - lightGalley custom event\n */\n onSlideItemLoad(event: CustomEventSlideItemLoad): void {\n const { isFirstSlide, index } = event.detail;\n\n // Should check the active slide as well as user may have moved to different slide before the first slide is loaded\n if (\n this.settings.autoplayFirstVideo &&\n isFirstSlide &&\n index === this.core.index\n ) {\n // Delay is just for the transition effect on video load\n setTimeout(() => {\n this.loadAndPlayVideo(index);\n }, 200);\n }\n\n // Should not call on first slide. should check only if the slide is active\n if (\n !isFirstSlide &&\n this.settings.autoplayVideoOnSlide &&\n index === this.core.index\n ) {\n this.loadAndPlayVideo(index);\n }\n }\n\n /**\n * @desc Event triggered when video url or poster found\n * Append video HTML is poster is not given\n * Play if autoplayFirstVideo is true\n *\n * @param {Event} event - Javascript Event object.\n */\n onHasVideo(event: CustomEventHasVideo): void {\n const { index, src, html5Video, hasPoster } = event.detail;\n if (!hasPoster) {\n // All functions are called separately if poster exist in loadVideoOnPosterClick function\n\n this.appendVideos(this.core.getSlideItem(index), {\n src,\n addClass: 'lg-object',\n index,\n html5Video,\n });\n\n // Automatically navigate to next slide once video reaches the end.\n this.gotoNextSlideOnVideoEnd(src, index);\n }\n }\n\n /**\n * @desc fired immediately before each slide transition.\n * Pause the previous video\n * Hide the download button if the slide contains YouTube, Vimeo, or Wistia videos.\n *\n * @param {Event} event - Javascript Event object.\n * @param {number} prevIndex - Previous index of the slide.\n * @param {number} index - Current index of the slide\n */\n onBeforeSlide(event: CustomEvent): void {\n if (this.core.lGalleryOn) {\n const { prevIndex } = event.detail;\n this.pauseVideo(prevIndex);\n }\n }\n\n /**\n * @desc fired immediately after each slide transition.\n * Play video if autoplayVideoOnSlide option is enabled.\n *\n * @param {Event} event - Javascript Event object.\n * @param {number} prevIndex - Previous index of the slide.\n * @param {number} index - Current index of the slide\n * @todo should check on onSlideLoad as well if video is not loaded on after slide\n */\n onAfterSlide(event: CustomEventAfterSlide): void {\n const { index, prevIndex } = event.detail;\n // Do not call on first slide\n const $slide = this.core.getSlideItem(index);\n if (this.settings.autoplayVideoOnSlide && index !== prevIndex) {\n if ($slide.hasClass('lg-complete')) {\n setTimeout(() => {\n this.loadAndPlayVideo(index);\n }, 100);\n }\n }\n }\n\n loadAndPlayVideo(index: number): void {\n const $slide = this.core.getSlideItem(index);\n const currentGalleryItem = this.core.galleryItems[index];\n if (currentGalleryItem.poster) {\n this.loadVideoOnPosterClick($slide, true);\n } else {\n this.playVideo(index);\n }\n }\n\n /**\n * Play HTML5, Youtube, Vimeo or Wistia videos in a particular slide.\n * @param {number} index - Index of the slide\n */\n playVideo(index: number) {\n this.controlVideo(index, 'play');\n }\n\n /**\n * Pause HTML5, Youtube, Vimeo or Wistia videos in a particular slide.\n * @param {number} index - Index of the slide\n */\n pauseVideo(index: number) {\n this.controlVideo(index, 'pause');\n }\n\n getVideoHtml(\n src: any,\n addClass: any,\n index: number,\n html5Video: VideoSource,\n ): string {\n let video = '';\n const videoInfo =\n this.core.galleryItems[(index as unknown) as number]\n .__slideVideoInfo || {};\n const currentGalleryItem = this.core.galleryItems[index];\n let videoTitle = currentGalleryItem.title || currentGalleryItem.alt;\n videoTitle = videoTitle ? 'title=\"' + videoTitle + '\"' : '';\n const commonIframeProps = `allowtransparency=\"true\"\n frameborder=\"0\"\n scrolling=\"no\"\n allowfullscreen\n mozallowfullscreen\n webkitallowfullscreen\n oallowfullscreen\n msallowfullscreen`;\n\n if (videoInfo.youtube) {\n const videoId = 'lg-youtube' + index;\n\n const youTubeParams = getYouTubeParams(\n videoInfo,\n this.settings.youTubePlayerParams,\n );\n\n const isYouTubeNoCookieURL = isYouTubeNoCookie(src);\n\n const youtubeURL = isYouTubeNoCookieURL\n ? '//www.youtube-nocookie.com/'\n : '//www.youtube.com/';\n\n video = ``;\n } else if (videoInfo.vimeo) {\n const videoId = 'lg-vimeo' + index;\n const playerParams = getVimeoURLParams(\n this.settings.vimeoPlayerParams,\n videoInfo,\n );\n video = ``;\n } else if (videoInfo.wistia) {\n const wistiaId = 'lg-wistia' + index;\n let playerParams = param(this.settings.wistiaPlayerParams);\n playerParams = playerParams ? '?' + playerParams : '';\n video = ``;\n } else if (videoInfo.html5) {\n let html5VideoMarkup = '';\n for (let i = 0; i < html5Video.source.length; i++) {\n html5VideoMarkup += ``;\n }\n if (html5Video.tracks) {\n for (let i = 0; i < html5Video.tracks.length; i++) {\n let trackAttributes = '';\n const track = html5Video.tracks[i];\n Object.keys(track || {}).forEach(function (key) {\n trackAttributes += `${key}=\"${(track as any)[key]}\" `;\n });\n html5VideoMarkup += ``;\n }\n }\n\n let html5VideoAttrs = '';\n const videoAttributes = html5Video.attributes || {};\n Object.keys(videoAttributes || {}).forEach(function (key) {\n html5VideoAttrs += `${key}=\"${(videoAttributes as any)[key]}\" `;\n });\n video = ``;\n }\n\n return video;\n }\n\n /**\n * @desc - Append videos to the slide\n *\n * @param {HTMLElement} el - slide element\n * @param {Object} videoParams - Video parameters, Contains src, class, index, htmlVideo\n */\n appendVideos(\n el: lgQuery,\n videoParams: {\n src: string;\n addClass: string;\n index: number;\n html5Video: any;\n },\n ): any {\n const videoHtml = this.getVideoHtml(\n videoParams.src,\n videoParams.addClass,\n videoParams.index,\n videoParams.html5Video,\n );\n el.find('.lg-video-cont').append(videoHtml);\n const $videoElement = el.find('.lg-video-object').first();\n if (videoParams.html5Video) {\n $videoElement.on('mousedown.lg.video', (e) => {\n e.stopPropagation();\n });\n }\n if (\n this.settings.videojs &&\n this.core.galleryItems[videoParams.index].__slideVideoInfo?.html5\n ) {\n try {\n return videojs(\n $videoElement.get(),\n this.settings.videojsOptions,\n );\n } catch (e) {\n console.error(\n 'lightGallery:- Make sure you have included videojs',\n );\n }\n }\n }\n\n gotoNextSlideOnVideoEnd(src: any, index: number) {\n const $videoElement = this.core\n .getSlideItem(index)\n .find('.lg-video-object')\n .first();\n const videoInfo = this.core.galleryItems[index].__slideVideoInfo || {};\n if (this.settings.gotoNextSlideOnVideoEnd) {\n if (videoInfo.html5) {\n $videoElement.on('ended', () => {\n this.core.goToNextSlide();\n });\n } else if (videoInfo.vimeo) {\n try {\n // https://github.com/vimeo/player.js/#ended\n new Vimeo.Player($videoElement.get()).on('ended', () => {\n this.core.goToNextSlide();\n });\n } catch (e) {\n console.error(\n 'lightGallery:- Make sure you have included //github.com/vimeo/player.js',\n );\n }\n } else if (videoInfo.wistia) {\n try {\n window._wq = window._wq || [];\n\n // @todo Event is gettign triggered multiple times\n window._wq.push({\n id: $videoElement.attr('id'),\n onReady: (video: {\n bind: (arg0: string, arg1: () => void) => void;\n }) => {\n video.bind('end', () => {\n this.core.goToNextSlide();\n });\n },\n });\n } catch (e) {\n console.error(\n 'lightGallery:- Make sure you have included //fast.wistia.com/assets/external/E-v1.js',\n );\n }\n }\n }\n }\n\n controlVideo(index: number, action: string) {\n const $videoElement = this.core\n .getSlideItem(index)\n .find('.lg-video-object')\n .first();\n const videoInfo = this.core.galleryItems[index].__slideVideoInfo || {};\n\n if (!$videoElement.get()) return;\n\n if (videoInfo.youtube) {\n try {\n ($videoElement.get() as any).contentWindow.postMessage(\n `{\"event\":\"command\",\"func\":\"${action}Video\",\"args\":\"\"}`,\n '*',\n );\n } catch (e) {\n console.error(`lightGallery:- ${e}`);\n }\n } else if (videoInfo.vimeo) {\n try {\n new Vimeo.Player($videoElement.get())[action]();\n } catch (e) {\n console.error(\n 'lightGallery:- Make sure you have included //github.com/vimeo/player.js',\n );\n }\n } else if (videoInfo.html5) {\n if (this.settings.videojs) {\n try {\n (videojs($videoElement.get()) as any)[action as any]();\n } catch (e) {\n console.error(\n 'lightGallery:- Make sure you have included videojs',\n );\n }\n } else {\n ($videoElement.get() as any)[action]();\n }\n } else if (videoInfo.wistia) {\n try {\n window._wq = window._wq || [];\n\n // @todo Find a way to destroy wistia player instance\n window._wq.push({\n id: $videoElement.attr('id'),\n onReady: (video: any) => {\n video[action]();\n },\n });\n } catch (e) {\n console.error(\n 'lightGallery:- Make sure you have included //fast.wistia.com/assets/external/E-v1.js',\n );\n }\n }\n }\n\n loadVideoOnPosterClick($el: lgQuery, forcePlay?: boolean): void {\n // check slide has poster\n if (!$el.hasClass('lg-video-loaded')) {\n // check already video element present\n if (!$el.hasClass('lg-has-video')) {\n $el.addClass('lg-has-video');\n\n let _html;\n\n const _src = this.core.galleryItems[this.core.index].src;\n const video = this.core.galleryItems[this.core.index].video;\n if (video) {\n _html =\n typeof video === 'string' ? JSON.parse(video) : video;\n }\n\n const videoJsPlayer = this.appendVideos($el, {\n src: _src as string,\n addClass: '',\n index: this.core.index,\n html5Video: _html,\n });\n\n this.gotoNextSlideOnVideoEnd(_src, this.core.index);\n\n const $tempImg = $el.find('.lg-object').first().get();\n\n // @todo make sure it is working\n $el.find('.lg-video-cont').first().append($tempImg);\n $el.addClass('lg-video-loading');\n\n videoJsPlayer &&\n videoJsPlayer.ready(() => {\n videoJsPlayer.on('loadedmetadata', () => {\n this.onVideoLoadAfterPosterClick(\n $el,\n this.core.index,\n );\n });\n });\n\n $el.find('.lg-video-object')\n .first()\n .on('load.lg error.lg loadedmetadata.lg', () => {\n setTimeout(() => {\n this.onVideoLoadAfterPosterClick(\n $el,\n this.core.index,\n );\n }, 50);\n });\n } else {\n this.playVideo(this.core.index);\n }\n } else if (forcePlay) {\n this.playVideo(this.core.index);\n }\n }\n onVideoLoadAfterPosterClick($el: lgQuery, index: number): void {\n $el.addClass('lg-video-loaded');\n this.playVideo(index);\n }\n destroy(): void {\n this.core.LGel.off('.lg.video');\n this.core.LGel.off('.video');\n }\n}\n", "import ApplicationController from \"../application_controller.js\";\nimport lightGallery from \"lightgallery\";\nimport lgHash from \"lightgallery/plugins/hash\";\nimport lgVideo from \"lightgallery/plugins/video\";\nimport { useViewportSize } from \"mixins\";\n\nexport default class extends ApplicationController {\n static values = {\n //* We paid for the licence and it gets passed in via rails credentials.\n licenseKey: { type: String, default: \"0000-0000-000-0000\" },\n };\n\n connect() {\n this.log_function(\"connect\");\n\n useViewportSize(this);\n\n //* Save the original theme color to se it back After\n // this.originalViewport = document.querySelector(\"meta[name=\\\"viewport\\\"]\").getAttribute(\"content\");\n this.originalThemeColor = document.querySelector(\"meta[name=\\\"theme-color\\\"]\").getAttribute(\"content\");\n\n let viewport = this.viewport_label();\n\n this.lgInstance = lightGallery(this.element, {\n selector: \".gallery-item\",\n plugins: [lgHash, lgVideo],\n thumbnail: false,\n download: false,\n licenseKey: this.licenseKeyValue,\n preload: 3,\n mode: \"lg-slide\",\n youTubePlayerParams: {\n modestbranding : 1,\n showinfo : 0,\n controls : 1,\n },\n getCaptionFromTitleOrAlt: false,\n mobileSettings: {\n controls: true,\n showCloseIcon: true,\n download: false,\n speed: 100,\n preload: 3,\n mode: \"lg-slide\",\n },\n isMobile: function(){\n return viewport == \"md\" || viewport == \"sm\" || viewport == \"xs\" ? true : false;\n },\n });\n\n //* Set the theme color to the same color as the background so Iphone users won't get white bars when the gallery opens.\n this.element.addEventListener(\"lgBeforeOpen\", () => {\n // document.querySelector(\"meta[name=\\\"viewport\\\"]\").setAttribute(\"content\", `${this.originalViewport}, viewport-fit=cover`);\n document.querySelector(\"meta[name=\\\"theme-color\\\"]\").setAttribute(\"content\", \"#000000\");\n });\n\n //* Set the theme color back to the original.\n this.element.addEventListener(\"lgBeforeClose\", () => {\n // document.querySelector(\"meta[name=\\\"viewport\\\"]\").setAttribute(\"content\", this.originalViewport);\n document.querySelector(\"meta[name=\\\"theme-color\\\"]\").setAttribute(\"content\", this.originalThemeColor);\n });\n }\n\n open_slide(event){\n this.log_function(\"open_slide\", event);\n\n let slide_index = parseInt(event.detail.slide_index);\n this.lgInstance.openGallery(slide_index);\n }\n\n disconnect(){\n this.log_function(\"disconnect\");\n\n this.lgInstance.destroy();\n }\n}\n", "export default class MapboxGLButtonControl {\n constructor({\n className = \"\",\n style = \"\",\n title = \"\",\n toggleOnClassName = \"\",\n toggleOnLabel = \"\",\n toggleOffClassName = \"\",\n toggleOffLabel = \"\",\n eventHandler = eventHandler,\n toggleState = true,\n }) {\n this._className = className || toggleOnClassName;\n this._style = style;\n this._title = title;\n this._eventHandler = eventHandler;\n this._toggleOnClassName = toggleOnClassName || className;\n this._toggleOffClassName = toggleOffClassName || className;\n this._toggleOnLabel = toggleOnLabel;\n this._toggleOffLabel = toggleOffLabel;\n this._toggleState = toggleState;\n this._toggleClass = toggleOnClassName || className;\n }\n\n onAdd(map) {\n this._btn = document.createElement(\"button\");\n this._btn.className = `mapboxgl-ctrl-icon ${this._className}`;\n this._btn.type = \"button\";\n this._btn.title = this._title;\n this._btn.onclick = this._eventHandler;\n this._btn.style = this._style;\n\n if (this._toggleOnLabel && this._toggleOffLabel) {\n this._btn.innerHTML = this._toggleOnLabel;\n }\n\n this._container = document.createElement(\"div\");\n this._container.className = \"mapboxgl-ctrl-group mapboxgl-ctrl\";\n this._container.appendChild(this._btn);\n\n if((this._toggleOnClassName && this._toggleOffClassName) || (this._toggleOnLabel && this._toggleOffLabel)) {\n this._btn.onclick = () => {\n this._toggleState = !this._toggleState;\n\n this._btn.innerHTML = this._toggleState ? this._toggleOnLabel : this._toggleOffLabel;\n this._toggleClass = this._toggleState ? this._toggleOnClassName : this._toggleOffClassName;\n this._btn.className = `mapboxgl-ctrl-icon ${this._toggleClass}`;\n this._eventHandler();\n };\n\n }\n\n return this._container;\n }\n\n onRemove() {\n this._container.parentNode.removeChild(this._container);\n this._map = undefined;\n }\n}\n", "{\n \"el\": {\n \"view_components\": {\n \"map\": {\n \"controls\": {\n \"attribution\": {\n \"feedback\": \"\u03A3\u03C7\u03CC\u03BB\u03B9\u03B1 \u03C7\u03AC\u03C1\u03C4\u03B7\",\n \"toggle\": \"\u0395\u03BD\u03B1\u03BB\u03BB\u03B1\u03B3\u03AE \u03B1\u03BD\u03B1\u03C6\u03BF\u03C1\u03AC\u03C2\"\n },\n \"center\": {\n \"title\": \"\u039A\u03B5\u03BD\u03C4\u03C1\u03AC\u03C1\u03B9\u03C3\u03BC\u03B1 \u03A7\u03AC\u03C1\u03C4\u03B7\"\n },\n \"fullscreen\": {\n \"enter\": \"\u03A0\u03BB\u03AE\u03C1\u03B7 \u039F\u03B8\u03CC\u03BD\u03B7\",\n \"exit\": \"\u0388\u03BE\u03BF\u03B4\u03BF\u03C2 \u0391\u03C0\u03CC \u03A0\u03BB\u03AE\u03C1\u03B7 \u039F\u03B8\u03CC\u03BD\u03B7\"\n },\n \"geolocate\": {\n \"find_my_location\": \"\u0392\u03C1\u03B5\u03AF\u03C4\u03B5 \u03A4\u03B7\u03BD \u03A4\u03BF\u03C0\u03BF\u03B8\u03B5\u03C3\u03AF\u03B1 \u039C\u03BF\u03C5\",\n \"location_not_available\": \"\u03A4\u03BF\u03C0\u03BF\u03B8\u03B5\u03C3\u03AF\u03B1 \u039C\u03B7 \u0394\u03B9\u03B1\u03B8\u03AD\u03C3\u03B9\u03BC\u03B7\"\n },\n \"logo\": {\n \"title\": \"\u039B\u03BF\u03B3\u03CC\u03C4\u03C5\u03C0\u03BF Mapbox\"\n },\n \"navigation\": {\n \"reset_bearing\": \"\u0395\u03C0\u03B1\u03BD\u03B1\u03C6\u03BF\u03C1\u03AC \u03A0\u03C1\u03BF\u03C2 \u0392\u03BF\u03C1\u03C1\u03AC\",\n \"zoom_in\": \"\u039C\u03B5\u03B3\u03AD\u03B8\u03C5\u03BD\u03C3\u03B7\",\n \"zoom_out\": \"\u03A3\u03BC\u03AF\u03BA\u03C1\u03C5\u03BD\u03C3\u03B7\"\n },\n \"poi\": {\n \"hide\": \"\u0391\u03C0\u03CC\u03BA\u03C1\u03C5\u03C8\u03B7 \u03A3\u03B7\u03BC\u03B5\u03AF\u03B1 \u0395\u03BD\u03B4\u03B9\u03B1\u03C6\u03AD\u03C1\u03BF\u03BD\u03C4\u03BF\u03C2\",\n \"show\": \"\u0395\u03BC\u03C6\u03AC\u03BD\u03B9\u03C3\u03B7 \u03A3\u03B7\u03BC\u03B5\u03AF\u03B1 \u0395\u03BD\u03B4\u03B9\u03B1\u03C6\u03AD\u03C1\u03BF\u03BD\u03C4\u03BF\u03C2\",\n \"title\": \"\u03A3\u03B7\u03BC\u03B5\u03AF\u03B1 \u0395\u03BD\u03B4\u03B9\u03B1\u03C6\u03AD\u03C1\u03BF\u03BD\u03C4\u03BF\u03C2\"\n }\n },\n \"cta\": \"\u039A\u03AC\u03BD\u03C4\u03B5 \u039A\u03BB\u03B9\u03BA \u0393\u03B9\u03B1 \u0395\u03BD\u03B5\u03C1\u03B3\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7 \u03A4\u03BF\u03C5 \u03A7\u03AC\u03C1\u03C4\u03B7\",\n \"pois\": {\n \"archaeology\": \"\u0391\u03C1\u03C7\u03B1\u03B9\u03BF\u03BB\u03BF\u03B3\u03AF\u03B1\",\n \"atm\": \"ATM\",\n \"bank\": \"\u03A4\u03C1\u03AC\u03C0\u03B5\u03B6\u03B1\",\n \"beach\": \"\u03A0\u03B1\u03C1\u03B1\u03BB\u03AF\u03B1\",\n \"bus_station\": \"\u03A3\u03C4\u03AC\u03C3\u03B7 \u039B\u03B5\u03C9\u03C6\u03BF\u03C1\u03B5\u03AF\u03BF\u03C5\",\n \"car_electrician\": \"\u0397\u03BB\u03B5\u03BA\u03C4\u03C1\u03BF\u03BB\u03CC\u03B3\u03BF\u03C2 \u0391\u03C5\u03C4\u03BF\u03BA\u03B9\u03BD\u03AE\u03C4\u03C9\u03BD\",\n \"car_mechanic\": \"\u039C\u03B7\u03C7\u03B1\u03BD\u03B9\u03BA\u03CC\u03C2 \u03B1\u03C5\u03C4\u03BF\u03BA\u03B9\u03BD\u03AE\u03C4\u03C9\u03BD\",\n \"car_wash\": \"\u03A0\u03BB\u03C5\u03BD\u03C4\u03AE\u03C1\u03B9\u03BF \u03B1\u03C5\u03C4\u03BF\u03BA\u03B9\u03BD\u03AE\u03C4\u03C9\u03BD\",\n \"cardiologist\": \"\u039A\u03B1\u03C1\u03B4\u03B9\u03BF\u03BB\u03CC\u03B3\u03BF\u03C2\",\n \"cultural\": \"\u03BA\u03BF\u03C5\u03BB\u03C4\u03BF\u03CD\u03C1\u03B1\",\n \"dentist\": \"\u039F\u03B4\u03BF\u03BD\u03C4\u03AF\u03B1\u03C4\u03C1\u03BF\u03C2\",\n \"electric_car_charger\": \"\u03A3\u03B7\u03BC\u03B5\u03AF\u03BF \u03A6\u03CC\u03C1\u03C4\u03B9\u03C3\u03B7\u03C2 EV\",\n \"ent\": \"\u03A9\u03C4\u03BF\u03C1\u03B9\u03BD\u03BF\u03BB\u03B1\u03C1\u03C5\u03B3\u03B3\u03BF\u03BB\u03CC\u03B3\u03BF\u03C2 (\u03A9\u03A1\u039B)\",\n \"ferryport\": \"\u039B\u03B9\u03BC\u03AC\u03BD\u03B9\",\n \"fire_station\": \"\u03A0\u03C5\u03C1\u03BF\u03C3\u03B2\u03B5\u03C3\u03C4\u03B9\u03BA\u03AE\",\n \"gas_station\": \"\u0392\u03B5\u03BD\u03B6\u03B9\u03BD\u03AC\u03B4\u03B9\u03BA\u03BF\",\n \"gastroenterologist\": \"\u0393\u03B1\u03C3\u03C4\u03C1\u03B5\u03BD\u03C4\u03B5\u03C1\u03BF\u03BB\u03CC\u03B3\u03BF\u03C2\",\n \"general_doctor\": \"\u0393\u03B5\u03BD\u03B9\u03BA\u03CC\u03C2 \u0393\u03B9\u03B1\u03C4\u03C1\u03CC\u03C2\",\n \"gynaecologist\": \"\u0393\u03C5\u03BD\u03B1\u03B9\u03BA\u03BF\u03BB\u03CC\u03B3\u03BF\u03C2\",\n \"landmark\": \"\u039F\u03C1\u03CC\u03C3\u03B7\u03BC\u03BF\",\n \"marina\": \"\u039C\u03B1\u03C1\u03AF\u03BD\u03B1\",\n \"microbiologist\": \"\u039C\u03B9\u03BA\u03C1\u03BF\u03B2\u03B9\u03BF\u03BB\u03CC\u03B3\u03BF\u03C2\",\n \"motorcycle\": \"\u039C\u03BF\u03C4\u03BF\u03C3\u03C5\u03BA\u03BB\u03AD\u03C4\u03B1\",\n \"museum\": \"\u039C\u03BF\u03C5\u03C3\u03B5\u03AF\u03BF\",\n \"nature\": \"\u03A6\u03CD\u03C3\u03B7\",\n \"orthopedic\": \"\u039F\u03C1\u03B8\u03BF\u03C0\u03B5\u03B4\u03B9\u03BA\u03CC\u03C2\",\n \"parking\": \"\u03A0\u03B1\u03C1\u03BA\u03B9\u03BD\u03B3\u03BA\",\n \"pediatrician\": \"\u03A0\u03B1\u03B9\u03B4\u03AF\u03B1\u03C4\u03C1\u03BF\u03C2\",\n \"pharmacy\": \"\u03A6\u03B1\u03C1\u03BC\u03B1\u03BA\u03B5\u03AF\u03BF\",\n \"police_station\": \"\u0391\u03C3\u03C4\u03C5\u03BD\u03BF\u03BC\u03B9\u03BA\u03CC \u03A4\u03BC\u03AE\u03BC\u03B1\",\n \"private_medical_center\": \"\u0399\u03B4\u03B9\u03C9\u03C4\u03B9\u03BA\u03CC \u0399\u03B1\u03C4\u03C1\u03B9\u03BA\u03CC \u039A\u03AD\u03BD\u03C4\u03C1\u03BF\",\n \"products\": \"\u03A0\u03C1\u03BF\u03CA\u03CC\u03BD\u03C4\u03B1\",\n \"public_hospital\": \"\u0394\u03B7\u03BC\u03BF\u03C3\u03B9\u03BF \u039D\u03BF\u03C3\u03BF\u03BA\u03BF\u03BC\u03B5\u03B9\u03BF\",\n \"pulmonologist\": \"\u03A0\u03BD\u03B5\u03C5\u03BC\u03BF\u03BD\u03BF\u03BB\u03CC\u03B3\u03BF\u03C2\",\n \"shopping\": \"\u0391\u03B3\u03BF\u03C1\u03AC\",\n \"taxi_stop\": \"\u03A3\u03C4\u03AC\u03C3\u03B7 \u03A4\u03B1\u03BE\u03AF\",\n \"veterinarian\": \"\u039A\u03C4\u03B7\u03BD\u03AF\u03B1\u03C4\u03C1\u03BF\u03C2\",\n \"water_sports\": \"\u0398\u03B1\u03BB\u03AC\u03C3\u03C3\u03B9\u03B1 \u03C3\u03C0\u03BF\u03C1\"\n },\n \"scroll_zoom_blocker\": {\n \"cmd_message\": \"\u03A7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03AE\u03C3\u03C4\u03B5 \u2318 + \u03BA\u03CD\u03BB\u03B9\u03C3\u03B7 \u03B3\u03B9\u03B1 \u03BC\u03B5\u03B3\u03AD\u03B8\u03C5\u03BD\u03C3\u03B7 \u03C4\u03BF\u03C5 \u03C7\u03AC\u03C1\u03C4\u03B7\",\n \"ctrl_message\": \"\u03A7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03AE\u03C3\u03C4\u03B5 ctrl + \u03BA\u03CD\u03BB\u03B9\u03C3\u03B7 \u03B3\u03B9\u03B1 \u03BC\u03B5\u03B3\u03AD\u03B8\u03C5\u03BD\u03C3\u03B7 \u03C4\u03BF\u03C5 \u03C7\u03AC\u03C1\u03C4\u03B7\"\n },\n \"title\": \"\u03A7\u03AC\u03C1\u03C4\u03B7\u03C2\",\n \"touch_pan_blocker\": {\n \"message\": \"\u03A7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03AE\u03C3\u03C4\u03B5 \u03B4\u03CD\u03BF \u03B4\u03AC\u03C7\u03C4\u03C5\u03BB\u03B1 \u03B3\u03B9\u03B1 \u03BD\u03B1 \u03BC\u03B5\u03C4\u03B1\u03BA\u03B9\u03BD\u03AE\u03C3\u03B5\u03C4\u03B5 \u03C4\u03BF\u03BD \u03C7\u03AC\u03C1\u03C4\u03B7\"\n }\n }\n }\n },\n \"en\": {\n \"view_components\": {\n \"map\": {\n \"controls\": {\n \"attribution\": {\n \"feedback\": \"Map feedback\",\n \"toggle\": \"Toggle attribution\"\n },\n \"center\": {\n \"title\": \"Recenter Map\"\n },\n \"fullscreen\": {\n \"enter\": \"Enter fullscreen\",\n \"exit\": \"Exit fullscreen\"\n },\n \"geolocate\": {\n \"find_my_location\": \"Find my location\",\n \"location_not_available\": \"Location not available\"\n },\n \"logo\": {\n \"title\": \"Mapbox logo\"\n },\n \"navigation\": {\n \"reset_bearing\": \"Reset bearing to north\",\n \"zoom_in\": \"Zoom in\",\n \"zoom_out\": \"Zoom out\"\n },\n \"poi\": {\n \"hide\": \"Hide Points of Interest\",\n \"show\": \"Show Points of Interest\",\n \"title\": \"Points of Interest\"\n }\n },\n \"cta\": \"Click for Interactive Map\",\n \"pois\": {\n \"archaeology\": \"Archaeology\",\n \"atm\": \"ATM\",\n \"bank\": \"Bank\",\n \"beach\": \"Beach\",\n \"bus_station\": \"Bus Station\",\n \"car_electrician\": \"Car Electrician\",\n \"car_mechanic\": \"Car Mechanic\",\n \"car_wash\": \"Car Wash\",\n \"cardiologist\": \"Cardiologist\",\n \"cultural\": \"Cultural\",\n \"dentist\": \"Dentist\",\n \"electric_car_charger\": \"EV Charging Point\",\n \"ent\": \"Otolaryngologist (ENT)\",\n \"ferryport\": \"Ferry Port\",\n \"fire_station\": \"Fire Station\",\n \"gas_station\": \"Gas Station\",\n \"gastroenterologist\": \"Gastroenterologist\",\n \"general_doctor\": \"General Doctor\",\n \"gynaecologist\": \"Gynaecologist\",\n \"landmark\": \"Landmark\",\n \"marina\": \"Marina\",\n \"microbiologist\": \"Microbiologist\",\n \"motorcycle\": \"Motorcycle\",\n \"museum\": \"Museum\",\n \"nature\": \"Nature\",\n \"orthopedic\": \"Orthopedic\",\n \"parking\": \"Parking\",\n \"pediatrician\": \"Pediatrician\",\n \"pharmacy\": \"Pharmacy\",\n \"police_station\": \"Police Station\",\n \"private_medical_center\": \"Private Medical Center\",\n \"products\": \"Products\",\n \"public_hospital\": \"Public Hospital\",\n \"pulmonologist\": \"Pulmonologist\",\n \"shopping\": \"Shopping\",\n \"taxi_stop\": \"Taxi Stop\",\n \"veterinarian\": \"Veterinarian\",\n \"water_sports\": \"Water Sports\"\n },\n \"scroll_zoom_blocker\": {\n \"cmd_message\": \"Use \u2318 + scroll to zoom the map\",\n \"ctrl_message\": \"Use ctrl + scroll to zoom the map\"\n },\n \"title\": \"Map\",\n \"touch_pan_blocker\": {\n \"message\": \"Use two fingers to move the map\"\n }\n }\n }\n }\n}", "/* global mapboxgl, i18n */\n\nimport ApplicationController from \"../application_controller.js\";\nimport { useDebounce } from \"stimulus-use\";\nimport { useI18n, useAssetLoader, useDecoder, useColorHelper } from \"mixins\";\nimport MapboxGLButtonControl from \"../../mapbox\";\nimport translations from \"../../locales/view_components/map.json\";\n\nexport default class extends ApplicationController {\n static values = {\n page_name: { type: String, default: \"\" },\n mode: { type: String, default: \"default\" },\n mapbox_username: String,\n mapbox_style_id: String,\n mapbox_access_token: String,\n latitude: String,\n longitude: String,\n zoom: { type: Number, default: 15 },\n\n //* Options for Marker\n marker_name: { type: String, default: \"pin-l\" },\n marker_label: { type: String, default: \"\" },\n marker_color: { type: String, default: \"#3FB1CE\" },\n marker_content: { type: String, default: \"\" },\n marker_anchor: { type: String, default: \"center\" },\n marker_scale: { type: Number, default: 1 },\n marker_icon: { type: String, default: \"\" },\n marker_icon_color: { type: String, default: \"auto\" },\n\n //* Options for popup\n popup_content: { type: String, default: \"\" },\n popup_anchor: { type: String, default: \"bottom\" },\n popup_class_name: { type: String, default: \"\" },\n popup_close_button: { type: Boolean, default: true },\n popup_close_on_click: { type: Boolean, default: true },\n popup_close_on_move: { type: Boolean, default: false },\n popup_focus_after_open: { type: Boolean, default: false },\n popup_max_width: { type: String, default: \"240px\" },\n popup_offset: { type: Number, default: 0 },\n\n //* Options for POI button\n icon_poi_enable: { type: String, default: \"\" },\n icon_poi_disable: { type: String, default: \"\" },\n };\n\n static targets = [ \"cta\", \"static_map\", \"interactive_map\" ];\n\n static classes = [ \"loading\", \"loaded\" ];\n\n static debounces = [ \"checkzoom\", \"checkFullscreen\" ];\n\n connect() {\n this.log_function(\"connect\");\n\n useDebounce(this);\n useColorHelper(this);\n useAssetLoader(this);\n useDecoder(this);\n useI18n({\n controller: this,\n translations: translations,\n scope: \"view_components.map\",\n });\n\n this.mapAPIloaded = false;\n this.map = false;\n\n this.mapEvents = [];\n\n switch (this.modeValue) {\n case \"static\":\n this.loadStaticMap();\n this.ctaTarget.style.display = \"none\";\n this.element.style.cursor = \"default\";\n break;\n case \"interactive\":\n this.element.addEventListener(\"lazybeforeunveil\", this.loadInteractiveMap.bind(this), { once : true });\n break;\n default:\n this.loadStaticMap();\n this.element.addEventListener(\"click\", this.loadInteractiveMap.bind(this), { once : true });\n break;\n }\n }\n\n get marker_color() {\n this.log_function(\"get marker_color\");\n\n //* This switch checks where to get the color value from\n switch (true) { //* if you don't understand why it is set to true, read this https://seanbarry.dev/posts/switch-true-pattern\n case this.markerColorValue.startsWith(\"#\"): //* If the string starts with a #, it must be a HEX color code.\n return this.markerColorValue; //* Get the color from the provided string\n case this.markerColorValue.startsWith(\"--\"): //* If the string starts with a --, it must be a css variable.\n return getComputedStyle(document.documentElement).getPropertyValue(this.markerColorValue).trim(); //* Get the color value from the CSS variable\n default: //* If the string does not start with -- or # send a default color\n return \"#FF0000\"; //* Send a default color #FF0000 (red)\n }\n //* If you don't understand this code just ask Anthony\n //* If you are Anthony and still don't understand this code past Anthony is laughing now!\n }\n\n get marker_icon_color() {\n this.log_function(\"get marker_icon_color\");\n\n if (this.markerIconColorValue === \"auto\") {\n //! We don't have the logic that MapBox uses so it's a bit of trial and error\n //* We adjust the threshold value as we test,\n //* We want to the static map marker icon and the interactive map marker icons to match\n return this.hex_contrasted_color(this.marker_color, { threshold: 150 });\n }\n\n //* If this.markerIconColorValue is not se to auto just return the color that it was set to\n return this.markerIconColorValue;\n }\n\n loadStaticMap() {\n this.log_function(\"loadStaticMap\");\n\n //* If needing to load a custom marker icon in static map, refer to this documentation: https://docs.mapbox.com/api/maps/static-images/#example-request-retrieve-a-static-map-with-a-custom-marker-overlay\n\n let map_width = this.static_mapTarget.clientWidth;\n let map_height = this.static_mapTarget.clientHeight;\n const map_ratio = map_width / map_height;\n const max_size = 1280; //* max size of the map provided by mapbox in pixels (width or height)\n\n //* Mapbox requires an integer that is why Math.floor is used\n if(map_width > max_size || map_height > max_size) {\n if (map_width > map_height) {\n map_width = max_size;\n map_height = Math.floor(map_width / map_ratio);\n } else if (map_height > map_width) {\n map_height = max_size;\n map_width = Math.floor(map_height / map_ratio);\n } else {\n map_width = max_size;\n map_height = max_size;\n }\n }\n\n const static_map_dimensions = `${map_width}x${map_height}`;\n const username = this.mapboxUsernameValue;\n const style_id = this.mapboxStyleIdValue;\n const access_token = this.mapboxAccessTokenValue;\n\n //* Marker shape and size. Options are pin-s and pin-l.\n const marker_name = this.markerNameValue;\n\n //* Optional. Marker symbol. Options are a lowercase alphanumeric label a through z, 0 through 99, or a valid Maki icon. If a letter is requested, it will be rendered in uppercase only.\n const marker_label = this.markerLabelValue ? `-${this.markerLabelValue}` : \"\";\n\n //* Optional. A 3-digit or 6-digit HEX color code.\n const marker_color_no_alpha = this.hex_no_alpha(this.marker_color).replace(\"#\", \"\").toLowerCase();\n\n //* The location at which to center the marker. When using an asymmetric marker, make sure that the tip of the pin is at the center of the image.\n const marker_longitude = this.longitudeValue;\n const marker_latitude = this.latitudeValue;\n\n const markerUrlParam = `${marker_name}${marker_label}+${marker_color_no_alpha}(${marker_longitude},${marker_latitude})/`;\n\n const src = `https://api.mapbox.com/styles/v1/${username}/${style_id}/static/${markerUrlParam}${this.longitudeValue},${this.latitudeValue},${this.zoomValue},0/${static_map_dimensions}@2x?access_token=${access_token}&logo=true&attribution=true`;\n\n this.static_mapTarget.setAttribute(\"data-src\", src);\n this.static_mapTarget.classList.add(\"lazyload\");\n }\n\n loadInteractiveMap() {\n this.log_function(\"loadInteractiveMap\");\n\n this.element.classList.add(this.loadingClass);\n\n //* \"https://api.mapbox.com/mapbox-gl-js/v2.9.2/mapbox-gl.css\"\n this.load_style(\"/obfuscated/mapbox-gl/css/mapbox-gl.css\");\n\n //* \"https://api.mapbox.com/mapbox-gl-js/v2.9.2/mapbox-gl.js\"\n this.load_script(\"/obfuscated/mapbox-gl/js/mapbox-gl.js\", this.generateMap.bind(this) );\n\n this.element.removeEventListener(\"click\", this.loadInteractiveMap.bind(this));\n this.element.removeEventListener(\"lazybeforeunveil\", this.loadInteractiveMap.bind(this));\n\n }\n\n generateMap() {\n this.log_function(\"generateMap\");\n\n const markerIcon = this.markerIconValue;\n const markerColor = this.marker_color;\n const markerIconColor = this.marker_icon_color;\n const styleForMarkerCircle = markerIcon ? \"display: none;\" : \"\";\n this.interactive_mapTarget.style.display = \"block\";\n this.mapAPIloaded = true;\n this.foundArea51 = false;\n\n const pinHtml =\n `
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n ${markerIcon}\n
\n
`;\n\n mapboxgl.accessToken = this.mapboxAccessTokenValue;\n this.map = new mapboxgl.Map({\n container: this.interactive_mapTarget,\n zoom: this.zoomValue,\n // maxZoom: 15,\n center: [this.longitudeValue, this.latitudeValue],\n style: `mapbox://styles/${this.mapboxUsernameValue}/${this.mapboxStyleIdValue}`,\n exitFullscreenOnEsc: true,\n locale: {\n \"AttributionControl.MapFeedback\": this.t(\"controls.attribution.feedback\"),\n \"AttributionControl.ToggleAttribution\": this.t(\"controls.attribution.toggle\"),\n \"FullscreenControl.Enter\": this.t(\"controls.fullscreen.enter\"),\n \"FullscreenControl.Exit\": this.t(\"controls.fullscreen.exit\"),\n \"GeolocateControl.FindMyLocation\": this.t(\"controls.geolocate.find_my_location\"),\n \"GeolocateControl.LocationNotAvailable\": this.t(\"controls.geolocate.location_not_available\"),\n \"LogoControl.Title\": this.t(\"controls.logo.title\"),\n \"Map.Title\": this.t(\"title\"),\n \"NavigationControl.ResetBearing\": this.t(\"controls.navigation.reset_bearing\"),\n \"NavigationControl.ZoomIn\": this.t(\"controls.navigation.zoom_in\"),\n \"NavigationControl.ZoomOut\": this.t(\"controls.navigation.zoom_out\"),\n \"ScrollZoomBlocker.CmdMessage\": this.t(\"scroll_zoom_blocker.cmd_message\"),\n \"ScrollZoomBlocker.CtrlMessage\": this.t(\"scroll_zoom_blocker.ctrl_message\"),\n \"TouchPanBlocker.Message\": this.t(\"touch_pan_blocker.message\"),\n },\n });\n\n // this.map._logoControl._container.style.scale = 0.5;\n const marker = new mapboxgl.Marker({\n element: this.decodeHtml(this.markerContentValue || pinHtml),\n color: this.marker_color,\n anchor: this.markerAnchorValue,\n scale: this.markerScaleValue,\n })\n .setLngLat([this.longitudeValue, this.latitudeValue])\n .addTo(this.map);\n\n if(this.popupContentValue) {\n const popup = new mapboxgl.Popup({\n anchor: this.popupAnchorValue,\n className: this.popupClassNameValue,\n closeButton: this.popupCloseButtonValue,\n closeOnClick: this.popupCloseOnClickValue,\n closeOnMove: this.popupCloseOnMoveValue,\n focusAfterOpen: this.popupFocusAfterOpenValue,\n maxWidth: this.popupMaxWidthValue,\n offset: this.popupOffsetValue,\n }).setHTML(this.popupContentValue);\n marker.setPopup(popup).togglePopup();\n }\n\n const navigationControlOptions = {\n showCompass: false,\n showZoom: true,\n visualizePitch: true,\n };\n\n const centerMap = () => {\n this.map.flyTo({\n center: [this.longitudeValue, this.latitudeValue],\n zoom: this.zoomValue,\n pitch: 0,\n bearing: 0,\n });\n\n const centeredMap = \"clicked centered map\";\n if(!this.checkMapEventUsed(centeredMap)){\n this.updateMapEvents(centeredMap);\n this.dispatch(\"ahoy_trackEvent\", { detail: { type: \"ux\", location: \"map\", action: centeredMap, page: this.pageNameValue }, prefix: false });\n }\n };\n\n const togglePoiMarkers = () => {\n const visibility = this.map.getLayoutProperty(\"poi-layer\", \"visibility\") || \"visible\";\n\n let poiVisibility = false;\n if (visibility === \"visible\") {\n this.map.setLayoutProperty(\"poi-layer\", \"visibility\", \"none\");\n poiVisibility = \"clicked hide POIs\";\n } else {\n this.map.setLayoutProperty(\"poi-layer\", \"visibility\", \"visible\");\n poiVisibility = \"clicked show POIs\";\n }\n if(poiVisibility && !this.checkMapEventUsed(poiVisibility)){\n this.updateMapEvents(poiVisibility);\n this.dispatch(\"ahoy_trackEvent\", { detail: { type: \"ux\", location: \"map\", action: poiVisibility, page: this.pageNameValue }, prefix: false });\n }\n };\n\n const ctrlPois = new MapboxGLButtonControl({\n className: \"mapboxgl-ctrl-pois\",\n toggleOnLabel: `${this.iconPoiEnableValue} ${this.t(\"controls.poi.hide\")}`,\n toggleOffLabel: `${this.iconPoiDisableValue} ${this.t(\"controls.poi.show\")}`,\n title: `${this.t(\"controls.poi.title\")}`,\n eventHandler: togglePoiMarkers,\n });\n\n const ctrlCenter = new MapboxGLButtonControl({\n className: \"mapboxgl-ctrl-home\",\n title: `${this.t(\"controls.center.title\")}`,\n eventHandler: centerMap,\n });\n\n //* If a map scale indicator is required, uncomment the code below\n // const scale = new mapboxgl.ScaleControl({\n // maxWidth: 200,\n // unit: \"metric\",\n // });\n // this.map.addControl(scale);\n this.map.addControl(new mapboxgl.NavigationControl(navigationControlOptions), \"bottom-right\");\n this.map.addControl(ctrlCenter, \"bottom-right\");\n this.map.addControl(ctrlPois, \"top-left\");\n this.map.addControl(new mapboxgl.FullscreenControl(), \"top-right\");\n\n this.map.on(\"load\", () => {\n //* This request get ALL map markers (added to pois layer)\n this.map.addSource(\"pois\", {\n \"type\": \"geojson\",\n //* Use a URL for the value for the `data` property.\n \"data\": i18n._locale === \"en\" ? \"/markers.json\" : `/${i18n._locale}/markers.json`,\n });\n\n //* This request gets maps markers associated with a SPECIFIC listing (added to custom_markers layer)\n this.map.addSource(\"custom_markers\", {\n \"type\": \"geojson\",\n //* Use a URL for the value for the `data` property.\n \"data\": i18n._locale === \"en\" ? \"/markers.json?types=custom\" : `/${i18n._locale}/markers.json?types=custom`,\n });\n\n let layerProperties = {\n \"type\": \"symbol\",\n \"paint\": {\n \"text-color\": \"#fff\",\n \"text-halo-color\": \"#000\",\n \"text-halo-width\": 1,\n // \"text-opacity\": 0.8,\n },\n \"layout\": {\n \"icon-image\": [\"get\", \"icon\"],\n \"icon-offset\": [0, -15],\n \"icon-size\": 0.9,\n //* get the title name from the source's \"title\" property\n \"text-field\": [\"get\", \"title\"],\n \"text-size\": 18,\n \"text-justify\": \"center\",\n \"text-optional\": true,\n // \"text-letter-spacing\": 0.1,\n \"text-font\": [\n \"Open Sans Semibold\",\n \"Arial Unicode MS Bold\",\n ],\n \"text-offset\": [0, 0],\n \"text-anchor\": \"top\",\n },\n };\n\n //* There are 2 separate layers in order to keep custom markers from\n //* being hidden when the show/hide POIs toggle button is clicked.\n this.map.addLayer({ \"id\": \"poi-layer\", \"source\": \"pois\", ...layerProperties });\n this.map.addLayer({ \"id\": \"custom-markers-layer\", \"source\": \"custom_markers\", ...layerProperties });\n });\n\n this.element.classList.add(this.loadedClass);\n\n this.interactiveMapLoadedTimeout = setTimeout(() => {\n this.static_mapTarget.style.display = \"none\";\n this.element.classList.remove(this.loadingClass);\n }, 2000);\n\n this.updateLastZoom();\n\n this.map.on(\"zoom\", (event) => this.checkzoom(event) );\n\n this.fullScreenChange = false;\n if (\"onfullscreenchange\" in window.document) {\n this.fullScreenChange = \"fullscreenchange\";\n } else if (\"onmozfullscreenchange\" in window.document) {\n this.fullScreenChange = \"mozfullscreenchange\";\n } else if (\"onwebkitfullscreenchange\" in window.document) {\n this.fullScreenChange = \"webkitfullscreenchange\";\n } else if (\"onmsfullscreenchange\" in window.document) {\n this.fullScreenChange = \"MSFullscreenChange\";\n }\n\n if (this.fullScreenChange) {\n this.boundCheckFullscreen = this.checkFullscreen.bind(this);\n window.document.addEventListener(this.fullScreenChange, this.boundCheckFullscreen);\n }\n\n //* Disables map rotation using right click + drag\n this.map.dragRotate.disable();\n\n //* Disables map rotation using touch rotation gesture\n this.map.touchZoomRotate.disableRotation();\n\n //* Disables map tilting using two-finger gesture\n this.map.touchPitch.disable();\n\n //* Disables the \"box zoom\" interaction.\n this.map.boxZoom.disable();\n\n this.map.on(\"moveend\", (event) => {\n const currentBoundingBox = new mapboxgl.LngLatBounds(this.map.getBounds().toArray());\n const area51Location = new mapboxgl.LngLat(-115.812251, 37.234729);\n\n if(!this.foundArea51 && currentBoundingBox.contains(area51Location)){\n this.dispatch(\"ahoy_trackEvent\", { detail: { type: \"ux\", location: \"map\", action: \"found Area51\", page: this.pageNameValue }, prefix: false });\n this.foundArea51 = true;\n\n this.confettiElement = document.createElement(\"div\"); //* Create a new div element\n this.confettiElement.classList.add(\"position-absolute\", \"top-50\", \"start-50\", \"translate-middle\"); //* Add classes to the div element\n this.confettiElement.setAttribute(\"data-controller\", \"confetti\"); //* Set the data-controller attribute\n this.element.appendChild(this.confettiElement); //* Append the div element to the body or another element in the document\n\n this.confettiElementRemoveTimeout = setTimeout(() => {\n this.confettiElement.remove();\n }, 5000);\n }\n });\n }\n\n updateCurrentZoom(){\n this.log_function(\"updateCurrentZoom\");\n\n this.currentZoom = this.map.getZoom();\n }\n\n updateLastZoom(){\n this.log_function(\"updateLastZoom\");\n\n this.lastZoom = this.map.getZoom();\n }\n\n checkzoom(event){\n this.log_function(\"checkzoom\");\n\n this.updateCurrentZoom();\n\n let used_type = false;\n if (event.originalEvent) {\n switch (event.originalEvent.type) {\n case \"click\":\n used_type = \"clicked on button\";\n break;\n case \"touchstart\", \"touchend\":\n used_type = \"pinched on touchscreen\";\n break;\n case \"wheel\":\n used_type = \"scrolled on mouse\";\n break;\n case \"keyup\", \"keydown\":\n used_type = \"typed on keyboard\";\n break;\n default:\n used_type = \"method undetected\";\n break;\n }\n }\n\n let zoom = false;\n switch (true) {\n case this.currentZoom > this.lastZoom:\n zoom = \"zoom in\";\n break;\n case this.currentZoom < this.lastZoom:\n zoom = \"zoom out\";\n break;\n default:\n zoom = \"zoom none\";\n break;\n }\n\n if(zoom && used_type) {\n const zoomUsed = `${used_type} | ${zoom}`;\n if(!this.checkMapEventUsed(zoomUsed)){\n this.updateMapEvents(zoomUsed);\n this.dispatch(\"ahoy_trackEvent\", { detail: { type: \"ux\", location: \"map\", action: zoomUsed, page: this.pageNameValue }, prefix: false });\n }\n }\n\n this.updateLastZoom();\n }\n\n checkFullscreen(){\n this.log_function(\"checkFullscreen\");\n\n let fullscreen = false;\n if(document.fullscreenElement && document.fullscreenElement.classList.contains(\"mapboxgl-map\")){\n this.mapIsFullscreen = true;\n fullscreen = \"entered fullscreen\";\n } else if(this.mapIsFullscreen) {\n fullscreen = \"exited fullscreen\";\n this.mapIsFullscreen = false;\n }\n\n if(fullscreen) {\n if(!this.checkMapEventUsed(fullscreen)){\n this.updateMapEvents(fullscreen);\n this.dispatch(\"ahoy_trackEvent\", { detail: { type: \"ux\", location: \"map\", action: fullscreen, page: this.pageNameValue }, prefix: false });\n }\n }\n }\n\n\n disconnect(){\n this.log_function(\"disconnect\");\n\n if (this.mapAPIloaded) {\n clearTimeout(this.interactiveMapLoadedTimeout);\n this.map.remove();\n }\n\n if(this.confettiElementRemoveTimeout){\n clearTimeout(this.confettiElementRemoveTimeout);\n this.confettiElement.remove();\n }\n\n if (this.fullScreenChange) {\n window.document.removeEventListener(this.fullScreenChange, this.boundCheckFullscreen);\n }\n }\n\n updateMapEvents(event){\n this.log_function(\"updateMapEvents\", event);\n\n this.mapEvents.push(event);\n }\n\n checkMapEventUsed(event){\n this.log_function(\"checkMapEventUsed\", event);\n\n return this.mapEvents.includes(event);\n }\n}\n", "import ApplicationController from \"../application_controller.js\";\nimport { confetti } from \"dom-confetti\";\n\n\nexport default class extends ApplicationController {\n static values = {\n config: { type: Object, default: {} },\n mode: { type: String, default: \"auto\" },\n delay: { type: Number, default: 0 },\n times: { type: Number, default: 1 },\n };\n\n //* You can run this controller on events like click like this:\n //* 1. Set mode to manual\n //* 2. Add this to the element (data-action=\"click->confetti#showConfetti\")\n\n connect() {\n this.log_function(\"connect\");\n\n this.times_confetti_launched = 0;\n this.BondShowConfetti = this.showConfetti.bind(this);\n\n if (this.modeValue === \"auto\") {\n this.setupConfetti();\n }\n }\n\n setupConfetti() {\n this.log_function(\"setupConfetti\");\n\n if(this.timesValue > 1) {\n this.setupInterval();\n } else if(this.delayValue > 0){\n this.setupTimeout();\n } else {\n this.showConfetti();\n }\n }\n\n setupInterval() {\n this.log_function(\"setupInterval\");\n\n this.interval = setInterval(()=> {\n this.BondShowConfetti();\n this.times_confetti_launched++;\n if(this.times_confetti_launched >= this.timesValue){\n clearInterval(this.interval);\n }\n }, this.delayValue);\n }\n\n setupTimeout(){\n this.log_function(\"setupTimeout\");\n\n this.showConfettiTimeout = setTimeout(()=>{\n this.BondShowConfetti();\n }, this.delayValue);\n }\n\n showConfetti(){\n this.log_function(\"showConfetti\");\n\n confetti(this.element, this.config);\n }\n\n disconnect(){\n this.log_function(\"disconnect\");\n\n clearTimeout(this.showConfettiTimeout);\n }\n\n get config() {\n this.log_function(\"get config\");\n\n return {\n angle: 90,\n spread: 360,\n startVelocity: 40,\n elementCount: 70,\n dragFriction: 0.12,\n duration: 3000,\n stagger: 3,\n width: \"10px\",\n height: \"10px\",\n perspective: \"500px\",\n colors: [\"#a864fd\", \"#29cdff\", \"#78ff44\", \"#ff718d\", \"#fdff6a\"],\n ...this.configValue,\n };\n }\n}\n", "import ApplicationController from \"../application_controller.js\";\n\nexport default class extends ApplicationController {\n static classes = [ \"reveal\" ];\n static values = {\n max_height: { type: Number, default: 500 },\n enabled: { type: Boolean, default: true },\n sync: { type: String, default: \"\" },\n };\n\n connect() {\n this.log_function(\"connect\");\n\n this.enabled = (this.element.clientHeight >= this.maxHeightValue) && this.enabledValue;\n\n if(this.enabled) {\n this.conceal();\n }\n\n\n\n if(this.syncValue) {\n this.sync_reveal = this.reveal.bind(this);\n this.sync_conceal = this.conceal.bind(this);\n\n this.reveal_event_name = `show-more:reveal:${this.syncValue}`;\n this.conceal_event_name = `show-more:conceal:${this.syncValue}`;\n document.addEventListener(this.reveal_event_name, this.sync_reveal);\n document.addEventListener(this.conceal_event_name, this.sync_conceal);\n }\n\n }\n\n reveal(event) {\n this.log_function(\"reveal\", event);\n\n this.element.classList.add(this.revealClass);\n\n if(this.syncValue && event instanceof MouseEvent) {\n this.log_function(\"conceal\", \"Send Reveal Sync\");\n const reveal_event = new Event(this.reveal_event_name);\n document.dispatchEvent(reveal_event);\n }\n }\n\n conceal(event) {\n this.log_function(\"conceal\", event);\n\n this.element.classList.remove(this.revealClass);\n\n if(this.syncValue && event instanceof MouseEvent) {\n this.log_function(\"conceal\", \"Send Conceal Sync\");\n const conceal_event = new Event(this.conceal_event_name);\n document.dispatchEvent(conceal_event);\n }\n }\n\n disconnect(){\n this.log_function(\"disconnect\");\n\n if(this.enabled) {\n this.conceal();\n }\n\n if(this.syncValue) {\n document.removeEventListener(this.reveal_event_name, this.sync_reveal);\n document.removeEventListener(this.conceal_event_name, this.sync_conceal);\n }\n }\n}\n", "import ApplicationController from \"../application_controller.js\";\nimport Popover from \"bootstrap/js/dist/popover\";\n\nexport default class extends ApplicationController {\n static targets = [ \"button\", \"source\" ];\n static values = {\n success: { type: String, default: \"COPIED\" },\n error: { type: String, default: \"ERROR\" },\n feedbackDuration: { type: Number, default: 2000 },\n feedbackType: { type: String, default: \"text\" }, //* text OR popover OR alert\n };\n\n connect() {\n this.log_function(\"connect\");\n\n if(!this.hasButtonTarget) return;\n\n this.originalText = this.buttonTarget.innerHTML;\n\n if (this.feedbackTypeValue === \"popover\") {\n this.popover = new Popover(this.buttonTarget, {\n container: \"body\",\n content: \" \",\n placement: \"top\",\n offset: [0, 0],\n trigger: \"manual\",\n });\n }\n\n }\n\n copy(event) {\n this.log_function(\"copy\", event);\n\n event.preventDefault();\n\n try {\n navigator.clipboard.writeText(this.sourceTarget.value)\n .then(() => {\n this.send_feedback(this.successValue);\n return this.successValue;\n })\n .catch((error) => {\n this.log_error_function(\"copy\", error);\n this.send_feedback(this.errorValue);\n });\n } catch(error) {\n if(location.protocol !== \"https:\"){\n this.log_error_function(\"copy\", \"Clipboard API only available on HTTPS!\");\n }\n this.log_error_function(\"copy\", error);\n this.send_feedback(this.errorValue);\n }\n }\n\n send_feedback(feedback) {\n this.log_function(\"send_feedback\", feedback);\n\n if(!this.hasButtonTarget) return;\n switch (this.feedbackTypeValue) {\n case \"text\":\n this.trigger_text_feedback(feedback);\n break;\n case \"popover\":\n this.trigger_popover(feedback);\n break;\n case \"alert\":\n this.trigger_alert.alert(feedback);\n break;\n default:\n this.log_error_function(\"send_feedback\", `Feedback type ${this.feedbackTypeValue} is incompatible`);\n break;\n }\n }\n\n trigger_text_feedback(content) {\n this.log_function(\"trigger_text_feedback\", content);\n\n if (!this.text_shown) {\n this.text_shown = true;\n this.buttonTarget.innerHTML = content;\n\n this.popover_timeout = setTimeout(() => {\n this.buttonTarget.innerHTML = this.originalText;\n this.text_shown = false;\n }, this.feedbackDurationValue);\n }\n }\n\n trigger_popover(content) {\n this.log_function(\"trigger_popover\", content);\n\n if (!this.popover_shown) {\n this.popover_shown = true;\n this.popover.setContent({ \".popover-body\": content });\n this.popover.show();\n\n this.popover_timeout = setTimeout(() => {\n this.popover.hide();\n this.popover_shown = false;\n }, this.feedbackDurationValue);\n }\n }\n\n trigger_alert(content){\n this.log_function(\"trigger_alert\", content);\n\n window.alert(content);\n }\n\n disconnect(){\n this.log_function(\"disconnect\");\n\n if(this.original_value_timeout) clearTimeout(this.original_value_timeout);\n if(this.popover_timeout) clearTimeout(this.popover_timeout);\n }\n\n}\n", "import ApplicationController from \"../application_controller.js\";\nimport lightGallery from \"lightgallery\";\n\nexport default class extends ApplicationController {\n static classes = [ \"container\" ];\n static values = {\n //* We paid for the licence and it gets passed in via rails credentials.\n licenseKey: { type: String, default: \"0000-0000-000-0000\" },\n };\n\n connect() {\n this.log_function(\"connect\");\n\n this.lgInstance = lightGallery(this.element, {\n licenseKey: this.licenseKeyValue,\n addClass: this.containerClass,\n download: false,\n counter: false,\n enableDrag: false,\n enableSwipe: false,\n // controls: false,\n getCaptionFromTitleOrAlt: false,\n mobileSettings: {\n showCloseIcon: true,\n download: false,\n counter: false,\n },\n });\n }\n\n disconnect(){\n this.log_function(\"disconnect\");\n\n this.lgInstance.destroy();\n }\n}\n", "import ApplicationController from \"../application_controller.js\";\n\nexport default class extends ApplicationController {\n static classes = [\"animateIn\", \"animateOut\", \"animateSpeed\"];\n static values = {\n delay: { type: Number, default: 1000 },\n enabled: { type: Boolean, default: true },\n };\n\n static targets = [\"container\", \"item\"];\n\n connect() {\n this.log_function(\"connect\");\n\n if (this.enabledValue) {\n this.index = 0;\n\n this.containerToggleClass(this.animateInClass);\n\n if (this.animateSpeedClass) {\n this.containerTargets.forEach(() => {\n this.containerToggleClass(this.animateSpeedClass);\n });\n }\n\n this.interval = setInterval(() => {\n if (!this.containerHasClass(this.animateInClass)) {\n this.cycleContent();\n }\n\n this.containerToggleClass(this.animateInClass);\n this.containerToggleClass(this.animateOutClass);\n }, this.delayValue);\n }\n }\n\n containerToggleClass(className) {\n this.log_function(\"containerToggleClass\", className);\n\n return this.containerTarget.classList.toggle(className);\n }\n\n containerHasClass(className) {\n this.log_function(\"containerHasClass\", className);\n\n return this.containerTarget.classList.contains(className);\n }\n\n cycleContent() {\n this.log_function(\"cycleContent\");\n\n //* Update the index first because the initial item is already rendered\n this.updateIndex();\n this.containerTarget.innerHTML = this.itemTargets[this.index].innerHTML;\n }\n\n updateIndex() {\n this.log_function(\"updateIndex\");\n\n this.index++;\n\n //* Reset index to 0 if we've reached the end of the array\n if (this.index >= this.itemTargets.length) {\n this.index = 0;\n }\n }\n\n disconnect() {\n this.log_function(\"disconnect\");\n\n if (this.enabledValue) {\n clearInterval(this.interval);\n }\n }\n}\n", "import ApplicationController from \"../application_controller.js\";\nimport { useIntersection } from \"stimulus-use\";\n\nexport default class extends ApplicationController {\n static values = {\n selector: String,\n };\n\n connect() {\n this.log_function(\"connect\");\n useIntersection(this);\n\n this.elements.forEach(element => {\n element.style.transition = `${element.style.transition} opacity 100ms`;\n });\n }\n\n appear(entry, observer) {\n this.log_function(\"appear\", entry, observer);\n //* callback automatically triggered when the element\n //* intersects with the viewport (or root Element specified in the options)\n this.log_function(\"appear:entry\", entry);\n this.log_function(\"appear:observer\", observer);\n\n this.elements.forEach(element => {\n element.style.opacity = 0;\n });\n\n }\n\n disappear(entry, observer) {\n this.log_function(\"disappear\", entry, observer);\n //* callback automatically triggered when the element\n //* leaves the viewport (or root Element specified in the options)\n this.log_function(\"disappear:entry\", entry);\n this.log_function(\"disappear:observer\", observer);\n\n this.elements.forEach(element => {\n element.style.opacity = null;\n });\n }\n\n disconnect(){\n this.log_function(\"disconnect\");\n }\n\n get elements(){\n return document.querySelectorAll(this.selectorValue);\n }\n}\n", "import ApplicationController from \"../application_controller.js\";\nimport { useThrottle } from \"stimulus-use\";\n\nexport default class extends ApplicationController {\n static debounces = [\"manageScroll\"];\n\n connect() {\n this.log_function(\"connect\");\n\n useThrottle(this);\n\n this.show();\n this.boundManageScroll = this.manageScroll.bind(this);\n window.addEventListener(\"scroll\", this.boundManageScroll);\n }\n\n hide() {\n this.log_function(\"hide\");\n\n this.element.style.setProperty(\"display\", \"none\", \"important\");\n document.body.dataset.espaBannerOpen = false;\n document.getElementById(\"floating_contact_button\").classList.remove(\"pb-5\", \"pb-sm-5\", \"pb-md-5\", \"pb-lg-5\", \"pb-xl-5\", \"pb-xxl-5\");\n }\n\n show() {\n this.log_function(\"show\");\n\n this.element.style.removeProperty(\"display\");\n document.body.dataset.espaBannerOpen = true;\n document.getElementById(\"floating_contact_button\").classList.add(\"pb-5\", \"pb-sm-5\", \"pb-md-5\", \"pb-lg-5\", \"pb-xl-5\", \"pb-xxl-5\");\n }\n\n manageScroll() {\n this.log_function(\"manageScroll\");\n\n const scroll = window.scrollY;\n if(scroll > 25) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n disconnect(){\n this.log_function(\"disconnect\");\n\n delete document.body.dataset.espaBannerOpen;\n window.removeEventListener(\"scroll\", this.boundManageScroll);\n }\n}\n", "import ApplicationController from \"../application_controller.js\";\nimport { useMutation } from \"stimulus-use\";\n\nexport default class extends ApplicationController {\n static targets = [ \"container\" ];\n\n connect() {\n this.log_function(\"connect\");\n\n useMutation(this, { childList: true, subtree: true });\n }\n\n\n //* Any time widgets get changed (ie by external scripts)\n //* Our scripts run and repair any damage to accessibility\n mutate(entries) {\n this.log_function(\"mutated\", entries);\n\n //* triggered when the observed element is changed\n for (const mutation of entries) {\n if (mutation.type === \"childList\") {\n this.log_function(\"mutate\", \"A child node has been added or removed.\");\n this.fix_empty_link();\n this.fix_image_alt();\n this.fix_img_display();\n } else if (mutation.target === this.element) {\n this.log_function(\"mutate\", \"The root element of this controller was modified.\");\n } else if (mutation.type === \"attributes\") {\n this.log_function(\"mutate\", `The ${mutation.attributeName} attribute was modified.`);\n }\n }\n }\n\n\n //* To pass accessibility tests all links need content\n //* fix_empty_link() is to add children to an empty link\n //* Example
\n //* Becomes FIXED\n fix_empty_link() {\n this.log_function(\"fix_empty_link\");\n\n if (this.has_links) {\n for (let link_index = 0; link_index < this.links.length; link_index++){\n let link = this.links[link_index];\n if (!link.innerHTML || link.innerHTML === \"\") {\n link.innerHTML = \"FIXED\";\n }\n }\n }\n }\n\n //* To pass accessibility tests all images need an alt attribute value\n //* Additionally you cant have two images nex to each other with the same alt attribute\n //* fix_image_alt() is to add unique alt tags to images and to make alt tags unique\n //* Example becomes \"-FIXED-0\"\n //* Example \"TRIPADVISOR\" becomes \"TRIPADVISOR-FIXED-0\"\n fix_image_alt(){\n this.log_function(\"fix_image_alt\");\n\n if (this.has_images) {\n for (let image_index = 0; image_index < this.images.length; image_index++) {\n let image = this.images[image_index];\n if (!image.alt.endsWith(`-FIXED-${image_index}`)) {\n image.alt += `-FIXED-${image_index}`;\n }\n }\n }\n }\n\n\n fix_img_display(){\n this.log_function(\"fix_img_display\");\n\n if (this.has_images) {\n for (let image_index = 0; image_index < this.images.length; image_index++) {\n let image = this.images[image_index];\n image.style.display = \"inline-block\";\n }\n }\n }\n\n get has_images(){\n return this.images.length > 0;\n }\n\n get images(){\n return this.containerTarget.getElementsByTagName(\"img\");\n }\n\n get has_links(){\n return this.links.length > 0;\n }\n\n get links(){\n return this.containerTarget.getElementsByTagName(\"a\");\n }\n\n disconnect() {\n this.log_function(\"disconnect\");\n }\n}\n"], "mappings": "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", "names": ["elementMap", "Map", "set", "element", "key", "instance", "has", "instanceMap", "get", "size", "console", "error", "Array", "from", "keys", "remove", "delete", "TRANSITION_END", "parseSelector", "selector", "window", "CSS", "escape", "replace", "match", "id", "toType", "object", "Object", "prototype", "toString", "call", "toLowerCase", "getUID", "prefix", "Math", "floor", "random", "MAX_UID", "document", "getElementById", "getTransitionDurationFromElement", "element", "transitionDuration", "transitionDelay", "getComputedStyle", "floatTransitionDuration", "Number", "parseFloat", "floatTransitionDelay", "split", "MILLISECONDS_MULTIPLIER", "triggerTransitionEnd", "dispatchEvent", "Event", "isElement", "jquery", "nodeType", "getElement", "length", "querySelector", "isVisible", "getClientRects", "elementIsVisible", "getPropertyValue", "closedDetails", "closest", "summary", "parentNode", "isDisabled", "Node", "ELEMENT_NODE", "classList", "contains", "disabled", "hasAttribute", "getAttribute", "findShadowRoot", "documentElement", "attachShadow", "getRootNode", "root", "ShadowRoot", "noop", "reflow", "offsetHeight", "getjQuery", "jQuery", "body", "DOMContentLoadedCallbacks", "onDOMContentLoaded", "callback", "readyState", "addEventListener", "push", "isRTL", "dir", "defineJQueryPlugin", "plugin", "$", "name", "NAME", "JQUERY_NO_CONFLICT", "fn", "jQueryInterface", "Constructor", "noConflict", "execute", "possibleCallback", "args", "defaultValue", "executeAfterTransition", "transitionElement", "waitForTransition", "emulatedDuration", "called", "handler", "target", "removeEventListener", "setTimeout", "getNextActiveElement", "list", "activeElement", "shouldGetNext", "isCycleAllowed", "listLength", "index", "indexOf", "max", "min", "namespaceRegex", "stripNameRegex", "stripUidRegex", "eventRegistry", "uidEvent", "customEvents", "mouseenter", "mouseleave", "nativeEvents", "Set", "makeEventUid", "element", "uid", "getElementEvents", "bootstrapHandler", "fn", "handler", "event", "hydrateObj", "delegateTarget", "oneOff", "EventHandler", "off", "type", "apply", "bootstrapDelegationHandler", "selector", "domElements", "querySelectorAll", "target", "parentNode", "domElement", "findHandler", "events", "callable", "delegationSelector", "Object", "values", "find", "normalizeParameters", "originalTypeEvent", "delegationFunction", "isDelegated", "typeEvent", "getTypeEvent", "has", "addHandler", "relatedTarget", "contains", "call", "handlers", "previousFunction", "replace", "addEventListener", "removeHandler", "removeEventListener", "Boolean", "removeNamespacedHandlers", "namespace", "storeElementEvent", "handlerKey", "entries", "includes", "on", "one", "inNamespace", "isNamespace", "startsWith", "keys", "length", "elementEvent", "slice", "keyHandlers", "trigger", "args", "$", "getjQuery", "jQueryEvent", "bubbles", "nativeDispatch", "defaultPrevented", "Event", "isPropagationStopped", "isImmediatePropagationStopped", "isDefaultPrevented", "evt", "cancelable", "preventDefault", "dispatchEvent", "obj", "meta", "key", "value", "defineProperty", "configurable", "get", "normalizeData", "value", "Number", "toString", "JSON", "parse", "decodeURIComponent", "normalizeDataKey", "key", "replace", "chr", "toLowerCase", "setDataAttribute", "element", "setAttribute", "removeDataAttribute", "removeAttribute", "getDataAttributes", "attributes", "bsKeys", "Object", "keys", "dataset", "filter", "startsWith", "pureKey", "charAt", "slice", "length", "getDataAttribute", "getAttribute", "Config", "Default", "DefaultType", "NAME", "Error", "_getConfig", "config", "_mergeConfigObj", "_configAfterMerge", "_typeCheckConfig", "element", "jsonConfig", "isElement", "Manipulator", "getDataAttribute", "constructor", "getDataAttributes", "configTypes", "property", "expectedTypes", "Object", "entries", "value", "valueType", "toType", "RegExp", "test", "TypeError", "toUpperCase", "VERSION", "BaseComponent", "Config", "constructor", "element", "config", "getElement", "_element", "_config", "_getConfig", "Data", "set", "DATA_KEY", "dispose", "remove", "EventHandler", "off", "EVENT_KEY", "propertyName", "Object", "getOwnPropertyNames", "_queueCallback", "callback", "isAnimated", "executeAfterTransition", "_mergeConfigObj", "_configAfterMerge", "_typeCheckConfig", "getInstance", "get", "getOrCreateInstance", "NAME", "eventName", "name", "getSelector", "element", "selector", "getAttribute", "hrefAttribute", "includes", "startsWith", "split", "trim", "map", "sel", "parseSelector", "join", "SelectorEngine", "find", "document", "documentElement", "concat", "Element", "prototype", "querySelectorAll", "call", "findOne", "querySelector", "children", "filter", "child", "matches", "parents", "ancestor", "parentNode", "closest", "push", "prev", "previous", "previousElementSibling", "next", "nextElementSibling", "focusableChildren", "focusables", "el", "isDisabled", "isVisible", "getSelectorFromElement", "getElementFromSelector", "getMultipleElementsFromSelector", "enableDismissTrigger", "component", "method", "clickEvent", "EVENT_KEY", "name", "NAME", "EventHandler", "on", "document", "event", "includes", "tagName", "preventDefault", "isDisabled", "target", "SelectorEngine", "getElementFromSelector", "closest", "getOrCreateInstance", "NAME", "EVENT_KEY", "EVENT_CLOSE", "EVENT_CLOSED", "CLASS_NAME_FADE", "CLASS_NAME_SHOW", "Alert", "BaseComponent", "close", "EventHandler", "trigger", "_element", "defaultPrevented", "classList", "remove", "isAnimated", "contains", "_queueCallback", "_destroyElement", "dispose", "jQueryInterface", "config", "each", "data", "getOrCreateInstance", "undefined", "startsWith", "TypeError", "enableDismissTrigger", "defineJQueryPlugin", "NAME", "EVENT_KEY", "DATA_API_KEY", "EVENT_SHOW", "EVENT_SHOWN", "EVENT_HIDE", "EVENT_HIDDEN", "EVENT_CLICK_DATA_API", "CLASS_NAME_SHOW", "CLASS_NAME_COLLAPSE", "CLASS_NAME_COLLAPSING", "CLASS_NAME_COLLAPSED", "CLASS_NAME_DEEPER_CHILDREN", "CLASS_NAME_HORIZONTAL", "WIDTH", "HEIGHT", "SELECTOR_ACTIVES", "SELECTOR_DATA_TOGGLE", "Default", "parent", "toggle", "DefaultType", "Collapse", "BaseComponent", "constructor", "element", "config", "_isTransitioning", "_triggerArray", "toggleList", "SelectorEngine", "find", "elem", "selector", "getSelectorFromElement", "filterElement", "filter", "foundElement", "_element", "length", "push", "_initializeChildren", "_config", "_addAriaAndCollapsedClass", "_isShown", "hide", "show", "activeChildren", "_getFirstLevelChildren", "map", "getOrCreateInstance", "EventHandler", "trigger", "defaultPrevented", "activeInstance", "dimension", "_getDimension", "classList", "remove", "add", "style", "complete", "scrollSize", "toUpperCase", "slice", "_queueCallback", "getBoundingClientRect", "reflow", "getElementFromSelector", "contains", "_configAfterMerge", "Boolean", "getElement", "children", "selected", "includes", "triggerArray", "isOpen", "setAttribute", "jQueryInterface", "test", "each", "data", "TypeError", "on", "document", "event", "target", "tagName", "delegateTarget", "preventDefault", "getMultipleElementsFromSelector", "defineJQueryPlugin", "require_isArray", "__commonJSMin", "exports", "module", "isArray", "require_freeGlobal", "__commonJSMin", "exports", "module", "freeGlobal", "require_root", "__commonJSMin", "exports", "module", "freeGlobal", "freeSelf", "root", "require_Symbol", "__commonJSMin", "exports", "module", "root", "Symbol", "require_getRawTag", "__commonJSMin", "exports", "module", "Symbol", "objectProto", "hasOwnProperty", "nativeObjectToString", "symToStringTag", "getRawTag", "value", "isOwn", "tag", "unmasked", "result", "require_objectToString", "__commonJSMin", "exports", "module", "objectProto", "nativeObjectToString", "objectToString", "value", "require_baseGetTag", "__commonJSMin", "exports", "module", "Symbol", "getRawTag", "objectToString", "nullTag", "undefinedTag", "symToStringTag", "baseGetTag", "value", "require_isObjectLike", "__commonJSMin", "exports", "module", "isObjectLike", "value", "require_isSymbol", "__commonJSMin", "exports", "module", "baseGetTag", "isObjectLike", "symbolTag", "isSymbol", "value", "require_isKey", "__commonJSMin", "exports", "module", "isArray", "isSymbol", "reIsDeepProp", "reIsPlainProp", "isKey", "value", "object", "type", "require_isObject", "__commonJSMin", "exports", "module", "isObject", "value", "type", "require_isFunction", "__commonJSMin", "exports", "module", "baseGetTag", "isObject", "asyncTag", "funcTag", "genTag", "proxyTag", "isFunction", "value", "tag", "require_coreJsData", "__commonJSMin", "exports", "module", "root", "coreJsData", "require_isMasked", "__commonJSMin", "exports", "module", "coreJsData", "maskSrcKey", "uid", "isMasked", "func", "require_toSource", "__commonJSMin", "exports", "module", "funcProto", "funcToString", "toSource", "func", "require_baseIsNative", "__commonJSMin", "exports", "module", "isFunction", "isMasked", "isObject", "toSource", "reRegExpChar", "reIsHostCtor", "funcProto", "objectProto", "funcToString", "hasOwnProperty", "reIsNative", "baseIsNative", "value", "pattern", "require_getValue", "__commonJSMin", "exports", "module", "getValue", "object", "key", "require_getNative", "__commonJSMin", "exports", "module", "baseIsNative", "getValue", "getNative", "object", "key", "value", "require_nativeCreate", "__commonJSMin", "exports", "module", "getNative", "nativeCreate", "require_hashClear", "__commonJSMin", "exports", "module", "nativeCreate", "hashClear", "require_hashDelete", "__commonJSMin", "exports", "module", "hashDelete", "key", "result", "require_hashGet", "__commonJSMin", "exports", "module", "nativeCreate", "HASH_UNDEFINED", "objectProto", "hasOwnProperty", "hashGet", "key", "data", "result", "require_hashHas", "__commonJSMin", "exports", "module", "nativeCreate", "objectProto", "hasOwnProperty", "hashHas", "key", "data", "require_hashSet", "__commonJSMin", "exports", "module", "nativeCreate", "HASH_UNDEFINED", "hashSet", "key", "value", "data", "require_Hash", "__commonJSMin", "exports", "module", "hashClear", "hashDelete", "hashGet", "hashHas", "hashSet", "Hash", "entries", "index", "length", "entry", "require_listCacheClear", "__commonJSMin", "exports", "module", "listCacheClear", "require_eq", "__commonJSMin", "exports", "module", "eq", "value", "other", "require_assocIndexOf", "__commonJSMin", "exports", "module", "eq", "assocIndexOf", "array", "key", "length", "require_listCacheDelete", "__commonJSMin", "exports", "module", "assocIndexOf", "arrayProto", "splice", "listCacheDelete", "key", "data", "index", "lastIndex", "require_listCacheGet", "__commonJSMin", "exports", "module", "assocIndexOf", "listCacheGet", "key", "data", "index", "require_listCacheHas", "__commonJSMin", "exports", "module", "assocIndexOf", "listCacheHas", "key", "require_listCacheSet", "__commonJSMin", "exports", "module", "assocIndexOf", "listCacheSet", "key", "value", "data", "index", "require_ListCache", "__commonJSMin", "exports", "module", "listCacheClear", "listCacheDelete", "listCacheGet", "listCacheHas", "listCacheSet", "ListCache", "entries", "index", "length", "entry", "require_Map", "__commonJSMin", "exports", "module", "getNative", "root", "Map", "require_mapCacheClear", "__commonJSMin", "exports", "module", "Hash", "ListCache", "Map", "mapCacheClear", "require_isKeyable", "__commonJSMin", "exports", "module", "isKeyable", "value", "type", "require_getMapData", "__commonJSMin", "exports", "module", "isKeyable", "getMapData", "map", "key", "data", "require_mapCacheDelete", "__commonJSMin", "exports", "module", "getMapData", "mapCacheDelete", "key", "result", "require_mapCacheGet", "__commonJSMin", "exports", "module", "getMapData", "mapCacheGet", "key", "require_mapCacheHas", "__commonJSMin", "exports", "module", "getMapData", "mapCacheHas", "key", "require_mapCacheSet", "__commonJSMin", "exports", "module", "getMapData", "mapCacheSet", "key", "value", "data", "size", "require_MapCache", "__commonJSMin", "exports", "module", "mapCacheClear", "mapCacheDelete", "mapCacheGet", "mapCacheHas", "mapCacheSet", "MapCache", "entries", "index", "length", "entry", "require_memoize", "__commonJSMin", "exports", "module", "MapCache", "FUNC_ERROR_TEXT", "memoize", "func", "resolver", "memoized", "args", "key", "cache", "result", "require_memoizeCapped", "__commonJSMin", "exports", "module", "memoize", "MAX_MEMOIZE_SIZE", "memoizeCapped", "func", "result", "key", "cache", "require_stringToPath", "__commonJSMin", "exports", "module", "memoizeCapped", "rePropName", "reEscapeChar", "stringToPath", "string", "result", "match", "number", "quote", "subString", "require_arrayMap", "__commonJSMin", "exports", "module", "arrayMap", "array", "iteratee", "index", "length", "result", "require_baseToString", "__commonJSMin", "exports", "module", "Symbol", "arrayMap", "isArray", "isSymbol", "INFINITY", "symbolProto", "symbolToString", "baseToString", "value", "result", "require_toString", "__commonJSMin", "exports", "module", "baseToString", "toString", "value", "require_castPath", "__commonJSMin", "exports", "module", "isArray", "isKey", "stringToPath", "toString", "castPath", "value", "object", "require_toKey", "__commonJSMin", "exports", "module", "isSymbol", "INFINITY", "toKey", "value", "result", "require_baseGet", "__commonJSMin", "exports", "module", "castPath", "toKey", "baseGet", "object", "path", "index", "length", "require_get", "__commonJSMin", "exports", "module", "baseGet", "get", "object", "path", "defaultValue", "result", "require_fittext", "__commonJSMin", "exports", "module", "root", "factory", "css", "el", "prop", "addEvent", "type", "fn", "extend", "obj", "ext", "key", "fitText", "kompressor", "options", "settings", "fit", "compressor", "resizer", "i", "require_main", "__commonJSMin", "exports", "confetti", "defaultColors", "createElements", "root", "elementCount", "colors", "width", "height", "_", "index", "element", "color", "randomPhysics", "angle", "spread", "startVelocity", "random", "radAngle", "radSpread", "updateFetti", "fetti", "progress", "dragFriction", "decay", "_fetti$physics", "x", "y", "z", "tiltAngle", "wobble", "wobbleX", "wobbleY", "transform", "animate", "fettis", "duration", "stagger", "startTime", "resolve", "update", "time", "elapsed", "defaults", "backwardPatch", "config", "_Object$assign", "perspective", "elements", "getWindow", "node", "window", "toString", "ownerDocument", "defaultView", "isElement", "OwnElement", "Element", "isHTMLElement", "HTMLElement", "isShadowRoot", "ShadowRoot", "max", "Math", "min", "round", "getUAString", "uaData", "navigator", "userAgentData", "brands", "Array", "isArray", "map", "item", "brand", "version", "join", "userAgent", "isLayoutViewport", "test", "getBoundingClientRect", "element", "includeScale", "isFixedStrategy", "clientRect", "scaleX", "scaleY", "offsetWidth", "width", "offsetHeight", "height", "_ref", "visualViewport", "addVisualOffsets", "x", "left", "offsetLeft", "y", "top", "offsetTop", "right", "bottom", "getWindowScroll", "win", "scrollLeft", "pageXOffset", "scrollTop", "pageYOffset", "getHTMLElementScroll", "getNodeScroll", "getNodeName", "nodeName", "toLowerCase", "getDocumentElement", "document", "documentElement", "getWindowScrollBarX", "getComputedStyle", "isScrollParent", "_getComputedStyle", "overflow", "overflowX", "overflowY", "isElementScaled", "rect", "getCompositeRect", "elementOrVirtualElement", "offsetParent", "isFixed", "isOffsetParentAnElement", "offsetParentIsScaled", "scroll", "offsets", "clientLeft", "clientTop", "getLayoutRect", "abs", "getParentNode", "assignedSlot", "parentNode", "host", "getScrollParent", "indexOf", "body", "listScrollParents", "list", "_element$ownerDocumen", "scrollParent", "isBody", "target", "concat", "updatedList", "isTableElement", "getTrueOffsetParent", "position", "getContainingBlock", "isFirefox", "isIE", "elementCss", "currentNode", "css", "transform", "perspective", "contain", "willChange", "filter", "getOffsetParent", "auto", "basePlacements", "start", "end", "clippingParents", "viewport", "popper", "reference", "variationPlacements", "reduce", "acc", "placement", "placements", "beforeRead", "read", "afterRead", "beforeMain", "main", "afterMain", "beforeWrite", "write", "afterWrite", "modifierPhases", "order", "modifiers", "Map", "visited", "Set", "result", "forEach", "modifier", "set", "name", "sort", "add", "requires", "requiresIfExists", "dep", "has", "depModifier", "get", "push", "orderModifiers", "orderedModifiers", "phase", "debounce", "fn", "pending", "Promise", "resolve", "then", "undefined", "mergeByName", "merged", "current", "existing", "options", "data", "Object", "keys", "key", "getViewportRect", "strategy", "html", "clientWidth", "clientHeight", "layoutViewport", "getDocumentRect", "winScroll", "scrollWidth", "scrollHeight", "direction", "contains", "parent", "child", "rootNode", "getRootNode", "next", "isSameNode", "rectToClientRect", "getInnerBoundingClientRect", "getClientRectFromMixedType", "clippingParent", "getClippingParents", "canEscapeClipping", "clipperElement", "getClippingRect", "boundary", "rootBoundary", "mainClippingParents", "firstClippingParent", "clippingRect", "accRect", "getBasePlacement", "split", "getVariation", "getMainAxisFromPlacement", "computeOffsets", "basePlacement", "variation", "commonX", "commonY", "mainAxis", "len", "getFreshSideObject", "mergePaddingObject", "paddingObject", "expandToHashMap", "value", "hashMap", "detectOverflow", "state", "_options", "_options$placement", "_options$strategy", "_options$boundary", "_options$rootBoundary", "_options$elementConte", "elementContext", "_options$altBoundary", "altBoundary", "_options$padding", "padding", "altContext", "popperRect", "rects", "elements", "clippingClientRect", "contextElement", "referenceClientRect", "popperOffsets", "popperClientRect", "elementClientRect", "overflowOffsets", "offsetData", "modifiersData", "offset", "multiply", "axis", "DEFAULT_OPTIONS", "areValidElements", "_len", "args", "_key", "some", "popperGenerator", "generatorOptions", "_generatorOptions", "_generatorOptions$def", "defaultModifiers", "_generatorOptions$def2", "defaultOptions", "attributes", "styles", "effectCleanupFns", "isDestroyed", "instance", "setOptions", "setOptionsAction", "cleanupModifierEffects", "scrollParents", "m", "enabled", "runModifierEffects", "update", "forceUpdate", "_state$elements", "reset", "index", "length", "_state$orderedModifie", "_state$orderedModifie2", "destroy", "onFirstUpdate", "_ref$options", "effect", "cleanupFn", "noopFn", "passive", "_options$scroll", "_options$resize", "resize", "addEventListener", "removeEventListener", "eventListeners", "popperOffsets$1", "unsetSides", "roundOffsetsByDPR", "dpr", "devicePixelRatio", "mapToStyles", "_ref2", "_Object$assign2", "gpuAcceleration", "adaptive", "roundOffsets", "_offsets$x", "_offsets$y", "_ref3", "hasX", "hasOwnProperty", "hasY", "sideX", "sideY", "heightProp", "widthProp", "offsetY", "offsetX", "commonStyles", "_ref4", "_Object$assign", "computeStyles", "_ref5", "_options$gpuAccelerat", "_options$adaptive", "_options$roundOffsets", "arrow", "computeStyles$1", "applyStyles", "style", "assign", "removeAttribute", "setAttribute", "initialStyles", "margin", "styleProperties", "property", "attribute", "applyStyles$1", "distanceAndSkiddingToXY", "invertDistance", "skidding", "distance", "_options$offset", "_data$state$placement", "offset$1", "hash", "getOppositePlacement", "replace", "matched", "getOppositeVariationPlacement", "computeAutoPlacement", "flipVariations", "_options$allowedAutoP", "allowedAutoPlacements", "allPlacements", "allowedPlacements", "overflows", "a", "b", "getExpandedFallbackPlacements", "oppositePlacement", "flip", "_skip", "_options$mainAxis", "checkMainAxis", "_options$altAxis", "altAxis", "checkAltAxis", "specifiedFallbackPlacements", "fallbackPlacements", "_options$flipVariatio", "preferredPlacement", "isBasePlacement", "referenceRect", "checksMap", "makeFallbackChecks", "firstFittingPlacement", "i", "isStartVariation", "isVertical", "mainVariationSide", "altVariationSide", "checks", "every", "check", "numberOfChecks", "_loop", "fittingPlacement", "find", "slice", "_ret", "flip$1", "getAltAxis", "within", "mathMax", "mathMin", "withinMaxClamp", "v", "preventOverflow", "_options$tether", "tether", "_options$tetherOffset", "tetherOffset", "tetherOffsetValue", "normalizedTetherOffsetValue", "offsetModifierState", "_offsetModifierState$", "mainSide", "altSide", "additive", "minLen", "maxLen", "arrowElement", "arrowRect", "arrowPaddingObject", "arrowPaddingMin", "arrowPaddingMax", "arrowLen", "minOffset", "maxOffset", "arrowOffsetParent", "clientOffset", "offsetModifierValue", "tetherMin", "tetherMax", "preventedOffset", "_offsetModifierState$2", "isOriginSide", "preventOverflow$1", "toPaddingObject", "_state$modifiersData$", "minProp", "maxProp", "endDiff", "startDiff", "clientSize", "centerToReference", "center", "axisProp", "centerOffset", "_options$element", "querySelector", "arrow$1", "getSideOffsets", "preventedOffsets", "isAnySideFullyClipped", "side", "hide", "referenceOverflow", "popperAltOverflow", "referenceClippingOffsets", "popperEscapeOffsets", "isReferenceHidden", "hasPopperEscaped", "hide$1", "createPopper", "DefaultAllowlist", "a", "area", "b", "br", "col", "code", "dd", "div", "dl", "dt", "em", "hr", "h1", "h2", "h3", "h4", "h5", "h6", "i", "img", "li", "ol", "p", "pre", "s", "small", "span", "sub", "sup", "strong", "u", "ul", "uriAttributes", "Set", "SAFE_URL_PATTERN", "allowedAttribute", "attribute", "allowedAttributeList", "attributeName", "nodeName", "toLowerCase", "includes", "has", "Boolean", "test", "nodeValue", "filter", "attributeRegex", "RegExp", "some", "regex", "sanitizeHtml", "unsafeHtml", "allowList", "sanitizeFunction", "length", "createdDocument", "window", "DOMParser", "parseFromString", "elements", "concat", "body", "querySelectorAll", "element", "elementName", "Object", "keys", "remove", "attributeList", "attributes", "allowedAttributes", "removeAttribute", "innerHTML", "NAME", "Default", "allowList", "DefaultAllowlist", "content", "extraClass", "html", "sanitize", "sanitizeFn", "template", "DefaultType", "DefaultContentType", "entry", "selector", "TemplateFactory", "Config", "constructor", "config", "_config", "_getConfig", "getContent", "Object", "values", "map", "_resolvePossibleFunction", "filter", "Boolean", "hasContent", "length", "changeContent", "_checkContent", "toHtml", "templateWrapper", "document", "createElement", "innerHTML", "_maybeSanitize", "text", "entries", "_setContent", "children", "classList", "add", "split", "_typeCheckConfig", "arg", "templateElement", "SelectorEngine", "findOne", "remove", "isElement", "_putElementInTemplate", "getElement", "textContent", "sanitizeHtml", "execute", "element", "append", "NAME", "DISALLOWED_ATTRIBUTES", "Set", "CLASS_NAME_FADE", "CLASS_NAME_MODAL", "CLASS_NAME_SHOW", "SELECTOR_TOOLTIP_INNER", "SELECTOR_MODAL", "EVENT_MODAL_HIDE", "TRIGGER_HOVER", "TRIGGER_FOCUS", "TRIGGER_CLICK", "TRIGGER_MANUAL", "EVENT_HIDE", "EVENT_HIDDEN", "EVENT_SHOW", "EVENT_SHOWN", "EVENT_INSERTED", "EVENT_CLICK", "EVENT_FOCUSIN", "EVENT_FOCUSOUT", "EVENT_MOUSEENTER", "EVENT_MOUSELEAVE", "AttachmentMap", "AUTO", "TOP", "RIGHT", "isRTL", "BOTTOM", "LEFT", "Default", "allowList", "DefaultAllowlist", "animation", "boundary", "container", "customClass", "delay", "fallbackPlacements", "html", "offset", "placement", "popperConfig", "sanitize", "sanitizeFn", "selector", "template", "title", "trigger", "DefaultType", "Tooltip", "BaseComponent", "constructor", "element", "config", "Popper", "TypeError", "_isEnabled", "_timeout", "_isHovered", "_activeTrigger", "_popper", "_templateFactory", "_newContent", "tip", "_setListeners", "_config", "_fixTitle", "enable", "disable", "toggleEnabled", "toggle", "click", "_isShown", "_leave", "_enter", "dispose", "clearTimeout", "EventHandler", "off", "_element", "closest", "_hideModalHandler", "getAttribute", "setAttribute", "_disposePopper", "show", "style", "display", "Error", "_isWithContent", "showEvent", "eventName", "isInTheDom", "findShadowRoot", "ownerDocument", "documentElement", "contains", "defaultPrevented", "_getTipElement", "append", "_createPopper", "classList", "add", "document", "concat", "body", "children", "on", "noop", "complete", "_queueCallback", "_isAnimated", "hide", "remove", "_isWithActiveTrigger", "removeAttribute", "update", "Boolean", "_getTitle", "_createTipElement", "_getContentForTemplate", "content", "_getTemplateFactory", "toHtml", "tipId", "getUID", "toString", "setContent", "changeContent", "TemplateFactory", "extraClass", "_resolvePossibleFunction", "_initializeOnDelegatedTarget", "event", "getOrCreateInstance", "delegateTarget", "_getDelegateConfig", "execute", "attachment", "toUpperCase", "createPopper", "_getPopperConfig", "_getOffset", "split", "map", "value", "Number", "parseInt", "popperData", "arg", "defaultBsPopperConfig", "modifiers", "name", "options", "enabled", "phase", "fn", "data", "state", "triggers", "eventIn", "eventOut", "context", "type", "relatedTarget", "textContent", "trim", "_setTimeout", "handler", "timeout", "setTimeout", "Object", "values", "includes", "_getConfig", "dataAttributes", "Manipulator", "getDataAttributes", "dataAttribute", "keys", "has", "_mergeConfigObj", "_configAfterMerge", "_typeCheckConfig", "getElement", "key", "entries", "destroy", "jQueryInterface", "each", "defineJQueryPlugin", "NAME", "SELECTOR_TITLE", "SELECTOR_CONTENT", "Default", "Tooltip", "content", "offset", "placement", "template", "trigger", "DefaultType", "Popover", "_isWithContent", "_getTitle", "_getContent", "_getContentForTemplate", "_resolvePossibleFunction", "_config", "jQueryInterface", "config", "each", "data", "getOrCreateInstance", "TypeError", "defineJQueryPlugin", "import_alert", "import_collapse", "camelize", "value", "_", "char", "namespaceCamelize", "capitalize", "dasherize", "isSomething", "object", "hasProperty", "property", "readInheritableStaticArrayValues", "constructor", "propertyName", "ancestors", "getAncestorsForConstructor", "values", "getOwnStaticArrayValues", "name", "readInheritableStaticObjectPairs", "pairs", "getOwnStaticObjectPairs", "definition", "key", "extend", "extendWithReflect", "constructor", "extended", "testReflectExtension", "b", "defaultSchema", "identifier", "outlet", "objectFromEntries", "c", "n", "array", "memo", "k", "v", "ClassPropertiesBlessing", "constructor", "readInheritableStaticArrayValues", "properties", "classDefinition", "propertiesForClassDefinition", "key", "classes", "attribute", "capitalize", "OutletPropertiesBlessing", "outletDefinition", "propertiesForOutletDefinition", "getOutletController", "controller", "element", "identifier", "getControllerAndEnsureConnectedScope", "outletName", "outletController", "name", "camelizedName", "namespaceCamelize", "outletElement", "selector", "outlets", "TargetPropertiesBlessing", "targetDefinition", "propertiesForTargetDefinition", "target", "ValuePropertiesBlessing", "valueDefinitionPairs", "readInheritableStaticObjectPairs", "propertyDescriptorMap", "result", "valueDefinitionPair", "valueDescriptor", "parseValueDefinitionPair", "attributeName", "propertiesForValueDefinitionPair", "definition", "read", "write", "value", "token", "typeDefinition", "valueDescriptorForTokenAndTypeDefinition", "parseValueTypeConstant", "constant", "parseValueTypeDefault", "defaultValue", "parseValueTypeObject", "payload", "typeObject", "hasType", "isSomething", "hasDefault", "fullObject", "onlyType", "onlyDefault", "typeFromObject", "typeFromDefaultValue", "propertyPath", "parseValueTypeDefinition", "typeFromConstant", "type", "defaultValueForDefinition", "defaultValuesByType", "hasProperty", "constantFromType", "dasherize", "camelize", "readers", "writers", "array", "object", "writeString", "writeJSON", "Controller", "context", "_identifier", "_application", "eventName", "detail", "prefix", "bubbles", "cancelable", "event", "import_get", "ApplicationController", "Controller", "function_name", "more_info_1", "more_info_2", "lightColorMap", "darkColorMap", "colorMap", "color", "get", "identifier", "error", "method", "controller", "methodName", "args", "composeEventName", "name", "eventPrefix", "composedName", "extendedEvent", "type", "event", "detail", "bubbles", "cancelable", "composed", "__rest", "s", "t", "p", "i", "defaultOptions$8", "StimulusUse", "controller", "options", "_a", "_b", "_c", "functionName", "args", "message", "eventName", "details", "event", "eventDetails", "customEvent", "methodName", "method", "name", "detail", "bubbles", "cancelable", "composed", "composedName", "dispatchEvent", "eventPrefix", "DebounceController", "Controller", "defaultWait$1", "debounce", "fn", "wait", "timeoutId", "args", "context", "params", "arg", "callback", "index", "useDebounce", "composableController", "options", "controller", "func", "name", "defaultOptions$3", "useIntersection", "composableController", "options", "controller", "dispatchEvent", "eventPrefix", "visibleAttribute", "targetElement", "callback", "entries", "entry", "dispatchAppear", "dispatchDisappear", "observer", "method", "eventName", "composeEventName", "appearEvent", "extendedEvent", "disappearEvent", "controllerDisconnect", "disconnect", "unobserve", "observe", "noneVisible", "element", "oneVisible", "atLeastOneVisible", "allVisible", "UseMutation", "StimulusUse", "controller", "options", "error", "entries", "controllerDisconnect", "disconnect", "useMutation", "observer", "ThrottleController", "Controller", "defaultWait", "throttle", "func", "wait", "inThrottle", "args", "context", "useThrottle", "composableController", "options", "_a", "controller", "name", "useI18n", "controller", "translations", "scope", "key", "params", "decodeHtml", "html_string", "wrapper", "useDecoder", "controller", "load_style", "source", "mapCSS", "load_script", "callback", "script", "_", "isAbort", "useAssetLoader", "controller", "viewport_width", "viewport_label_lookup", "width", "viewportLabel", "viewport_label", "useViewportSize", "controller", "r", "t", "n", "u", "a", "Math", "pow", "e", "o", "f", "c", "i", "p", "v", "hexRgb", "hex", "alpha", "replace", "length", "parseInt", "slice", "substring", "repeat", "num", "luminance", "b", "max", "min", "rgb", "relativeLuminance", "rgb_to_hex", "rgb", "matches", "r", "g", "b", "rHex", "gHex", "bHex", "hex_color_to_rgba", "hex", "hex_color_to_rgba_array", "clean_hex", "hex_long", "dec_rgba_array", "position", "rgba_color", "hex_color_to_rgb_array", "rgba_array", "hex_color_to_rgba_object", "hex_no_hash", "rgb_array", "red", "blue", "green", "alpha", "hex_no_alpha", "hex_contrasted_color", "user_settings", "settings", "rgb_object", "color_contrast_ratio", "color1", "color2", "is_valid_hex_color", "s", "color", "dark_or_light_via_color", "settings_to_use", "dark", "light", "useColorHelper", "controller", "bootstrap_default", "ApplicationController", "useDebounce", "useViewportSize", "event", "defaultInstanceSettings", "defaultTweenSettings", "validTransforms", "cache", "minMax", "val", "min", "max", "stringContains", "str", "text", "applyArguments", "func", "args", "is", "a", "parseEasingParameters", "string", "match", "p", "spring", "duration", "params", "mass", "stiffness", "damping", "velocity", "w0", "zeta", "wd", "b", "solver", "t", "progress", "getDuration", "cached", "frame", "elapsed", "rest", "steps", "bezier", "kSplineTableSize", "kSampleStepSize", "A", "aA1", "aA2", "B", "C", "calcBezier", "aT", "getSlope", "binarySubdivide", "aX", "aA", "aB", "mX1", "mX2", "currentX", "currentT", "i", "newtonRaphsonIterate", "aGuessT", "currentSlope", "mY1", "mY2", "sampleValues", "getTForX", "intervalStart", "currentSample", "lastSample", "dist", "guessForT", "initialSlope", "x", "penner", "eases", "functionEasings", "pow2", "amplitude", "period", "baseEasings", "name", "easeIn", "parseEasings", "easing", "ease", "selectString", "nodes", "filterArray", "arr", "callback", "len", "thisArg", "result", "flattenArray", "toArray", "o", "arrayContains", "cloneObject", "clone", "replaceObjectProps", "o1", "o2", "mergeObjects", "rgbToRgba", "rgbValue", "rgb", "hexToRgba", "hexValue", "rgx", "hex", "m", "r", "g", "hslToRgba", "hslValue", "hsl", "h", "l", "hue2rgb", "q", "colorToRgb", "getUnit", "split", "getTransformUnit", "propName", "getFunctionValue", "animatable", "getAttribute", "el", "prop", "convertPxToUnit", "value", "unit", "valueUnit", "baseline", "tempEl", "parentEl", "factor", "convertedUnit", "getCSSValue", "uppercasePropName", "getAnimationType", "getElementTransforms", "reg", "transforms", "getTransformValue", "defaultVal", "getOriginalTargetValue", "target", "getRelativeValue", "to", "from", "operator", "u", "y", "validateValue", "originalUnit", "unitLess", "getDistance", "p1", "p2", "getCircleLength", "getRectLength", "getLineLength", "getPolylineLength", "points", "totalLength", "previousPos", "currentPos", "getPolygonLength", "getTotalLength", "setDashoffset", "pathLength", "getParentSvgEl", "getParentSvg", "pathEl", "svgData", "svg", "parentSvgEl", "rect", "viewBoxAttr", "width", "height", "viewBox", "getPath", "path", "percent", "property", "getPathProgress", "isPathTargetInsideSVG", "point", "offset", "p0", "scaleX", "scaleY", "decomposeValue", "parseTargets", "targets", "targetsArray", "item", "pos", "self", "getAnimatables", "parsed", "normalizePropertyTweens", "tweenSettings", "settings", "isFromTo", "propArray", "v", "obj", "k", "flattenKeyframes", "keyframes", "propertyNames", "key", "properties", "loop", "newKey", "getProperties", "normalizeTweenValues", "tween", "normalizeTweens", "previousTween", "tweenValue", "toUnit", "originalValue", "previousValue", "fromUnit", "setProgressValue", "manual", "setTargetsValue", "animatables", "animType", "createAnimation", "tweens", "lastTween", "getAnimations", "getInstanceTimings", "animations", "animLength", "getTlOffset", "anim", "timings", "instanceID", "createNewInstance", "instanceSettings", "id", "activeInstances", "engine", "raf", "play", "isDocumentHidden", "anime", "step", "activeInstancesLength", "activeInstance", "handleVisibilityChange", "instance", "startTime", "lastTime", "now", "children", "childrenLength", "resolve", "makePromise", "promise", "_resolve", "toggleInstanceDirection", "direction", "child", "adjustTime", "time", "resetTime", "seekChild", "syncInstanceChildren", "i$1", "setAnimationsProgress", "insTime", "animationsLength", "tweenLength", "eased", "strings", "round", "numbers", "toNumbersLength", "n", "toNumber", "fromNumber", "stringsLength", "s", "n$1", "setCallback", "cb", "countIteration", "setInstanceProgress", "engineTime", "insDuration", "insDelay", "insEndDelay", "removeTargetsFromInstance", "removeTargetsFromAnimations", "c", "childAnimations", "removeTargetsFromActiveInstances", "stagger", "grid", "axis", "fromIndex", "fromFirst", "fromCenter", "fromLast", "isRange", "val1", "val2", "start", "values", "maxValue", "index", "fromX", "fromY", "toX", "toY", "distanceX", "distanceY", "spacing", "timeline", "tl", "instanceParams", "timelineOffset", "tlIndex", "passThrough", "ins", "insParams", "tlDuration", "anime_es_default", "moving_letters_default", "ApplicationController", "effect", "anime_es_default", "el", "i", "word", "index", "delay", "amp_count", "element", "prefers_reduced_motion", "error", "import_FitText_UMD", "fit_text_default", "ApplicationController", "fitText", "defaults$1", "type", "speed", "containerClass", "imgSrc", "imgElement", "imgSize", "imgPosition", "imgRepeat", "keepImg", "elementInViewport", "zIndex", "disableParallax", "onScroll", "onInit", "onDestroy", "onCoverImage", "videoClass", "videoSrc", "videoStartTime", "videoEndTime", "videoVolume", "videoLoop", "videoPlayOnlyVisible", "videoLazyLoading", "disableVideo", "onVideoInsert", "onVideoWorkerInit", "win", "window", "global", "self", "global$2", "css", "el", "styles", "getComputedStyle", "getPropertyValue", "Object", "keys", "forEach", "key", "style", "extend", "out", "args", "i", "getParents", "elem", "parents", "parentElement", "nodeType", "push", "ready", "callback", "document", "readyState", "addEventListener", "capture", "once", "passive", "navigator", "mobileAgent", "test", "userAgent", "isMobile", "wndW", "wndH", "$deviceHelper", "getDeviceHeight", "body", "createElement", "cssText", "appendChild", "clientHeight", "innerHeight", "documentElement", "updateWindowHeight", "innerWidth", "clientWidth", "domReady", "getWindowSize", "width", "height", "jarallaxList", "updateParallax", "length", "data", "k", "instance", "oldData", "isVisible", "clientRect", "$item", "getBoundingClientRect", "newData", "top", "bottom", "isResized", "isScrolled", "onResize", "requestAnimationFrame", "visibilityObserver", "IntersectionObserver", "entries", "entry", "target", "jarallax", "isElementInViewport", "isIntersecting", "rootMargin", "addObserver", "observe", "options", "removeObserver", "instanceID", "splice", "unobserve", "Jarallax", "constructor", "item", "userOptions", "defaults", "dataOptions", "dataset", "pureDataOptions", "lowerCaseOption", "substr", "toLowerCase", "pureOptions", "Math", "min", "max", "parseFloat", "RegExp", "disableParallaxRegexp", "disableParallaxDefault", "disableVideoRegexp", "disableVideoDefault", "elementInVP", "Element", "image", "src", "$container", "useImgTag", "position", "initImg", "canInitParallax", "init", "getWindowData", "y", "scrollTop", "$imgElement", "querySelector", "Image", "cloneNode", "$itemParent", "parentNode", "bgImage", "containerStyles", "left", "overflow", "imageStyles", "pointerEvents", "transformStyle", "backfaceVisibility", "curStyle", "getAttribute", "setAttribute", "curImgStyle", "$parents", "filter", "parentTransform", "transform", "call", "destroy", "originalStylesTag", "removeAttribute", "originalStylesImgTag", "removeChild", "coverImage", "rect", "contH", "isScroll", "scrollDist", "resultH", "resultMT", "abs", "parallaxScrollDistance", "marginTop", "container", "force", "contT", "beforeTop", "beforeTopEnd", "afterTop", "beforeBottom", "beforeBottomEnd", "afterBottom", "fromViewportCenter", "visiblePercent", "opacity", "scale", "positionY", "section", "items", "HTMLElement", "nodeName", "len", "ret", "apply", "autoplay", "loop", "mute", "volume", "showControls", "accessibilityHidden", "startTime", "endTime", "jarallaxVideo", "defOnScroll", "prototype", "isVideoInserted", "video", "getVideo", "$parent", "right", "maxWidth", "maxHeight", "margin", "$video", "tagName", "defCoverImage", "imageData", "node", "h", "w", "ml", "mt", "marginLeft", "defInitImg", "defaultResult", "defaultInitImgResult", "defCanInitParallax", "VideoWorker", "resetDefaultImage", "$default_item", "display", "isValid", "getImageURL", "url", "on", "oldOnScroll", "videoError", "videoEnded", "play", "pause", "videoWidth", "videoHeight", "defDestroy", "jarallax", "jarallaxLib", "jarallaxVideo", "jarallaxVideoExt", "parallax_divider_default", "ApplicationController", "jarallaxVideo", "jarallax", "lGEvents", "lightGalleryCoreSettings", "initLgPolyfills", "CustomEvent", "event", "params", "evt", "lgQuery", "selector", "c", "r", "v", "context", "fl", "func", "el", "cssProperty", "value", "property", "s", "group1", "eventName", "eventNamespace", "e", "attr", "$LG", "index", "attributes", "attrs", "className", "wrapper", "classNames", "attribute", "_this", "events", "listener", "detail", "customEvent", "url", "res", "html", "scrollTop", "scrollLeft", "rect", "bodyMarginLeft", "style", "defaultDynamicOptions", "convertToData", "g", "utils", "container", "spacing", "defaultLgSize", "LGel", "lgSize", "isResponsiveSizes", "wWidth", "i", "size_1", "responsiveWidth", "size", "width", "height", "cWidth", "cHeight", "maxWidth", "maxHeight", "ratio", "top", "bottom", "imageSize", "containerRect", "wHeight", "elWidth", "elHeight", "elStyle", "x", "y", "scX", "scY", "transform", "iframeWidth", "iframeHeight", "iframeMaxWidth", "iframeMaxHeight", "src", "iframeTitle", "title", "altAttr", "srcset", "sizes", "sources", "srcsetAttr", "sizesAttr", "imgMarkup", "sourceTag", "sourceObj", "source", "key", "srcItms", "rsWidth", "rsSrc", "_src", "j", "img", "_poster", "dummyImg", "videoContStyle", "playVideoString", "_isVideo", "videoClass", "elements", "visibleElements", "element", "items", "extraProps", "getCaptionFromTitleOrAlt", "exThumbImage", "dynamicElements", "availableDynamicOptions", "__spreadArrays", "item", "dynamicEl", "dynamicAttr", "label", "currentItem", "alt", "thumb", "isHTML5VIdeo", "youtube", "vimeo", "wistia", "lgId", "LightGallery", "options", "__assign", "mobileSettings", "this_1", "$element", "uuid", "currentItemIndex", "plugin", "id", "controls", "subHtmlCont", "addClasses", "ariaLabelledby", "ariaDescribedby", "containerClassName", "closeIcon", "maximizeIcon", "template", "outerClassNames", "currentGalleryItem", "__slideVideoInfo", "_a", "top_1", "imgStyle", "lgVideoStyle", "currentSlide", "currentSrc", "_index", "galleryItem", "itemIndex", "selectWithin", "bodyRect", "scrollbarWidth", "itemsToBeInsertedToDom", "timeout", "currentSlide_1", "subHtml", "captionHeight", "thumbContainer", "thumbHeight", "$img", "counterHtml", "subHtmlUrl", "fL", "$currentSlide", "$currentItem", "_dummyImgSrc", "dummyImgContent", "imgContent", "$slide", "isHTML5VideoWithoutPoster", "onLoad", "onError", "mediaObject", "delay", "speed", "isFirstSlide", "_speed", "rec", "poster", "video", "_html5Video", "srcDyItms", "videoInfo", "iframe", "top_2", "videoSize", "markup", "hasStartAnimation", "prevIndex", "numberOfItems", "possibleNumberOfItems", "prevIndexItem", "_element", "idx", "numberOfExistingItems", "currentItemId", "hideDownloadBtn", "$download", "direction", "currentSlideItem", "previousSlideItem", "fromTouch", "fromThumb", "numberOfGalleryItems", "previousSlideItem_1", "top_3", "touchPrev", "touchNext", "startCoords", "endCoords", "distanceX", "distanceY", "allowSwipe", "slideWidthAmount", "gutter", "opacity", "scale", "distance", "triggerClick", "distanceAbs", "target", "isMoved", "isSwiping", "$item", "isDraging", "_touchNext", "_touchPrev", "_loop", "$prev", "$next", "$el", "xValue", "yValue", "scaleX", "scaleY", "lastCall", "now", "playButton", "isTabPressed", "focusableEls", "firstFocusableEl", "lastFocusableEl", "mousedown", "force", "top_4", "_b", "removeTimeout", "module", "destroy", "galleryItems", "closeTimeout", "lightGallery", "lGEvents", "hashSettings", "Hash", "instance", "$LG", "__assign", "_this", "event", "slideName", "hash", "_idx", "index", "dynamicEl", "_hash", "videoSettings", "lGEvents", "param", "obj", "k", "paramsToObject", "url", "paramas", "p", "pair", "_a", "key", "value", "getYouTubeParams", "videoInfo", "youTubePlayerParamsSettings", "slideUrlParams", "defaultYouTubePlayerParams", "playerParamsSettings", "youTubePlayerParams", "__assign", "youTubeParams", "isYouTubeNoCookie", "getVimeoURLParams", "defaultParams", "urlParams", "defaultPlayerParams", "urlWithHash", "urlWithHashWithParams", "hash", "isPrivate", "vimeoPlayerParams", "Video", "instance", "_this", "$el", "event", "isFirstSlide", "index", "src", "html5Video", "hasPoster", "prevIndex", "$slide", "currentGalleryItem", "addClass", "video", "videoTitle", "commonIframeProps", "videoId", "isYouTubeNoCookieURL", "youtubeURL", "playerParams", "wistiaId", "html5VideoMarkup", "i", "trackAttributes", "track", "html5VideoAttrs_1", "videoAttributes_1", "el", "videoParams", "videoHtml", "$videoElement", "e", "action", "forcePlay", "_html", "_src", "videoJsPlayer_1", "$tempImg", "gallery_default", "ApplicationController", "useViewportSize", "viewport", "lightgallery_es5_default", "lg_hash_es5_default", "lg_video_es5_default", "event", "slide_index", "MapboxGLButtonControl", "className", "style", "title", "toggleOnClassName", "toggleOnLabel", "toggleOffClassName", "toggleOffLabel", "eventHandler", "toggleState", "map", "map_default", "map_default", "ApplicationController", "useDebounce", "useColorHelper", "useAssetLoader", "useDecoder", "useI18n", "map_width", "map_height", "map_ratio", "max_size", "static_map_dimensions", "username", "style_id", "access_token", "marker_name", "marker_label", "marker_color_no_alpha", "marker_longitude", "marker_latitude", "markerUrlParam", "src", "markerIcon", "markerColor", "markerIconColor", "styleForMarkerCircle", "pinHtml", "marker", "popup", "navigationControlOptions", "centerMap", "centeredMap", "togglePoiMarkers", "visibility", "poiVisibility", "ctrlPois", "MapboxGLButtonControl", "ctrlCenter", "layerProperties", "event", "currentBoundingBox", "area51Location", "used_type", "zoom", "zoomUsed", "fullscreen", "import_dom_confetti", "confetti_default", "ApplicationController", "show_more_default", "ApplicationController", "event", "reveal_event", "conceal_event", "import_popover", "copyable_input_default", "ApplicationController", "Popover", "event", "error", "feedback", "content", "image_preview_default", "ApplicationController", "lightgallery_es5_default", "content_animator_default", "ApplicationController", "className", "visibility_default", "ApplicationController", "useIntersection", "element", "entry", "observer", "espa_banner_default", "ApplicationController", "useThrottle", "widget_default", "ApplicationController", "useMutation", "entries", "mutation", "link_index", "link", "image_index", "image", "bootstrap_default", "moving_letters_default", "fit_text_default", "parallax_divider_default", "gallery_default", "map_default", "confetti_default", "show_more_default", "copyable_input_default", "image_preview_default", "content_animator_default", "visibility_default", "espa_banner_default", "widget_default"] }