{"version":3,"file":"application.js","mappings":"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","sources":["webpack:///./node_modules/@popperjs/core/lib/enums.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getWindow.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/applyStyles.js","webpack:///./node_modules/@popperjs/core/lib/utils/getBasePlacement.js","webpack:///./node_modules/@popperjs/core/lib/utils/math.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/contains.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","webpack:///./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","webpack:///./node_modules/@popperjs/core/lib/utils/within.js","webpack:///./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","webpack:///./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","webpack:///./node_modules/@popperjs/core/lib/utils/expandToHashMap.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/arrow.js","webpack:///./node_modules/@popperjs/core/lib/utils/getVariation.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/computeStyles.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/eventListeners.js","webpack:///./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","webpack:///./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","webpack:///./node_modules/@popperjs/core/lib/utils/rectToClientRect.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","webpack:///./node_modules/@popperjs/core/lib/utils/computeOffsets.js","webpack:///./node_modules/@popperjs/core/lib/utils/detectOverflow.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/flip.js","webpack:///./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/hide.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/offset.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","webpack:///./node_modules/@popperjs/core/lib/utils/getAltAxis.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","webpack:///./node_modules/@popperjs/core/lib/utils/orderModifiers.js","webpack:///./node_modules/@popperjs/core/lib/createPopper.js","webpack:///./node_modules/@popperjs/core/lib/utils/debounce.js","webpack:///./node_modules/@popperjs/core/lib/utils/mergeByName.js","webpack:///./node_modules/@popperjs/core/lib/popper.js","webpack:///./node_modules/@popperjs/core/lib/popper-lite.js","webpack:///./node_modules/@rails/ujs/lib/assets/compiled/rails-ujs.js","webpack:///./vendor/assets/javascripts/fastclick.js","webpack:///./node_modules/bootstrap/dist/js/bootstrap.js","webpack:///./node_modules/widjet-disposables/lib/index.js","webpack:///./node_modules/widjet-utils/lib/index.js","webpack:///./node_modules/widjet-validation/lib/index.js","webpack:///./node_modules/widjet-validation/lib/resolvers.js","webpack:///./node_modules/widjet-validation/lib/utils.js","webpack:///./node_modules/widjet-validation/lib/validators.js","webpack:///./node_modules/widjet/lib/index.js","webpack:///./node_modules/widjet/lib/widget.js","webpack:///webpack/bootstrap","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///webpack/runtime/make namespace object","webpack:///./app/frontend/js/utils/locales.js","webpack:///./app/frontend/js/utils/locales/en.js","webpack:///./app/frontend/js/utils/locales/es.js","webpack:///./app/frontend/js/utils/locales/fr.js","webpack:///./app/frontend/js/utils/locales/de.js","webpack:///./app/frontend/js/utils/locales/pt.js","webpack:///./app/frontend/js/utils/i18n.js","webpack:///./app/frontend/js/widgets/validation.js","webpack:///./app/frontend/js/utils/animations.js","webpack:///./app/frontend/js/utils/scroll-top.js","webpack:///./node_modules/chartkick/dist/chartkick.esm.js","webpack:///./app/frontend/js/widgets/animations.js","webpack:///./app/frontend/js/widgets/remote-form.js","webpack:///./app/frontend/js/widgets/remote-link.js","webpack:///./app/frontend/js/widgets/background-video.js","webpack:///./app/frontend/packs/application.js"],"sourcesContent":["export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n  return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n  return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","export default function getNodeName(element) {\n  return element ? (element.nodeName || '').toLowerCase() : null;\n}","export default function getWindow(node) {\n  if (node == null) {\n    return window;\n  }\n\n  if (node.toString() !== '[object Window]') {\n    var ownerDocument = node.ownerDocument;\n    return ownerDocument ? ownerDocument.defaultView || window : window;\n  }\n\n  return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n  var OwnElement = getWindow(node).Element;\n  return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n  var OwnElement = getWindow(node).HTMLElement;\n  return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n  // IE 11 has no ShadowRoot\n  if (typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n\n  var OwnElement = getWindow(node).ShadowRoot;\n  return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // 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(_ref) {\n  var state = _ref.state;\n  Object.keys(state.elements).forEach(function (name) {\n    var style = state.styles[name] || {};\n    var attributes = state.attributes[name] || {};\n    var element = state.elements[name]; // arrow is optional + virtual elements\n\n    if (!isHTMLElement(element) || !getNodeName(element)) {\n      return;\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\n\n    Object.assign(element.style, style);\n    Object.keys(attributes).forEach(function (name) {\n      var value = attributes[name];\n\n      if (value === false) {\n        element.removeAttribute(name);\n      } else {\n        element.setAttribute(name, value === true ? '' : value);\n      }\n    });\n  });\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state;\n  var 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  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 function () {\n    Object.keys(state.elements).forEach(function (name) {\n      var element = state.elements[name];\n      var attributes = state.attributes[name] || {};\n      var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n      var style = styleProperties.reduce(function (style, property) {\n        style[property] = '';\n        return style;\n      }, {}); // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      }\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (attribute) {\n        element.removeAttribute(attribute);\n      });\n    });\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'applyStyles',\n  enabled: true,\n  phase: 'write',\n  fn: applyStyles,\n  effect: effect,\n  requires: ['computeStyles']\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n  return placement.split('-')[0];\n}","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","import { isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nexport default function getBoundingClientRect(element, includeScale) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n\n  var rect = element.getBoundingClientRect();\n  var scaleX = 1;\n  var scaleY = 1;\n\n  if (isHTMLElement(element) && includeScale) {\n    var offsetHeight = element.offsetHeight;\n    var offsetWidth = element.offsetWidth; // Do not attempt to divide by 0, otherwise we get `Infinity` as scale\n    // Fallback to 1 in case both values are `0`\n\n    if (offsetWidth > 0) {\n      scaleX = round(rect.width) / offsetWidth || 1;\n    }\n\n    if (offsetHeight > 0) {\n      scaleY = round(rect.height) / offsetHeight || 1;\n    }\n  }\n\n  return {\n    width: rect.width / scaleX,\n    height: rect.height / scaleY,\n    top: rect.top / scaleY,\n    right: rect.right / scaleX,\n    bottom: rect.bottom / scaleY,\n    left: rect.left / scaleX,\n    x: rect.left / scaleX,\n    y: rect.top / scaleY\n  };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n  var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n  // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n  var width = element.offsetWidth;\n  var 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: width,\n    height: height\n  };\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n  var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n  if (parent.contains(child)) {\n    return true;\n  } // then fallback to custom implementation with Shadow DOM support\n  else if (rootNode && isShadowRoot(rootNode)) {\n      var next = child;\n\n      do {\n        if (next && parent.isSameNode(next)) {\n          return true;\n        } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n        next = next.parentNode || next.host;\n      } while (next);\n    } // Give up, the result is false\n\n\n  return false;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n  return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n  // $FlowFixMe[incompatible-return]: assume body is always available\n  return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n  element.document) || window.document).documentElement;\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n  if (getNodeName(element) === 'html') {\n    return element;\n  }\n\n  return (// 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}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\n\nfunction getTrueOffsetParent(element) {\n  if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n  getComputedStyle(element).position === 'fixed') {\n    return null;\n  }\n\n  return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n  var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;\n  var isIE = navigator.userAgent.indexOf('Trident') !== -1;\n\n  if (isIE && isHTMLElement(element)) {\n    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n    var elementCss = getComputedStyle(element);\n\n    if (elementCss.position === 'fixed') {\n      return null;\n    }\n  }\n\n  var currentNode = getParentNode(element);\n\n  if (isShadowRoot(currentNode)) {\n    currentNode = currentNode.host;\n  }\n\n  while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n    var css = getComputedStyle(currentNode); // 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\n    if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n      return currentNode;\n    } else {\n      currentNode = currentNode.parentNode;\n    }\n  }\n\n  return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n  var window = getWindow(element);\n  var offsetParent = getTrueOffsetParent(element);\n\n  while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n    offsetParent = getTrueOffsetParent(offsetParent);\n  }\n\n  if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n    return window;\n  }\n\n  return offsetParent || getContainingBlock(element) || window;\n}","export default function getMainAxisFromPlacement(placement) {\n  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n  return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n  var v = within(min, value, max);\n  return v > max ? max : v;\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n  return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function getFreshSideObject() {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  };\n}","export default function expandToHashMap(value, keys) {\n  return keys.reduce(function (hashMap, key) {\n    hashMap[key] = value;\n    return hashMap;\n  }, {});\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n  padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : padding;\n  return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n  var _state$modifiersData$;\n\n  var state = _ref.state,\n      name = _ref.name,\n      options = _ref.options;\n  var arrowElement = state.elements.arrow;\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var basePlacement = getBasePlacement(state.placement);\n  var axis = getMainAxisFromPlacement(basePlacement);\n  var isVertical = [left, right].indexOf(basePlacement) >= 0;\n  var len = isVertical ? 'height' : 'width';\n\n  if (!arrowElement || !popperOffsets) {\n    return;\n  }\n\n  var paddingObject = toPaddingObject(options.padding, state);\n  var arrowRect = getLayoutRect(arrowElement);\n  var minProp = axis === 'y' ? top : left;\n  var maxProp = axis === 'y' ? bottom : right;\n  var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n  var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n  var arrowOffsetParent = getOffsetParent(arrowElement);\n  var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n  var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n  // outside of the popper bounds\n\n  var min = paddingObject[minProp];\n  var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n  var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n  var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n  var axisProp = axis;\n  state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options;\n  var _options$element = options.element,\n      arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n  if (arrowElement == null) {\n    return;\n  } // CSS selector\n\n\n  if (typeof arrowElement === 'string') {\n    arrowElement = state.elements.popper.querySelector(arrowElement);\n\n    if (!arrowElement) {\n      return;\n    }\n  }\n\n  if (process.env.NODE_ENV !== \"production\") {\n    if (!isHTMLElement(arrowElement)) {\n      console.error(['Popper: \"arrow\" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' '));\n    }\n  }\n\n  if (!contains(state.elements.popper, arrowElement)) {\n    if (process.env.NODE_ENV !== \"production\") {\n      console.error(['Popper: \"arrow\" modifier\\'s `element` must be a child of the popper', 'element.'].join(' '));\n    }\n\n    return;\n  }\n\n  state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'arrow',\n  enabled: true,\n  phase: 'main',\n  fn: arrow,\n  effect: effect,\n  requires: ['popperOffsets'],\n  requiresIfExists: ['preventOverflow']\n};","export default function getVariation(placement) {\n  return placement.split('-')[1];\n}","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n  top: 'auto',\n  right: 'auto',\n  bottom: 'auto',\n  left: 'auto'\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.\n\nfunction roundOffsetsByDPR(_ref) {\n  var x = _ref.x,\n      y = _ref.y;\n  var win = window;\n  var dpr = win.devicePixelRatio || 1;\n  return {\n    x: round(x * dpr) / dpr || 0,\n    y: round(y * dpr) / dpr || 0\n  };\n}\n\nexport function mapToStyles(_ref2) {\n  var _Object$assign2;\n\n  var popper = _ref2.popper,\n      popperRect = _ref2.popperRect,\n      placement = _ref2.placement,\n      variation = _ref2.variation,\n      offsets = _ref2.offsets,\n      position = _ref2.position,\n      gpuAcceleration = _ref2.gpuAcceleration,\n      adaptive = _ref2.adaptive,\n      roundOffsets = _ref2.roundOffsets,\n      isFixed = _ref2.isFixed;\n  var _offsets$x = offsets.x,\n      x = _offsets$x === void 0 ? 0 : _offsets$x,\n      _offsets$y = offsets.y,\n      y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n  var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n    x: x,\n    y: y\n  }) : {\n    x: x,\n    y: y\n  };\n\n  x = _ref3.x;\n  y = _ref3.y;\n  var hasX = offsets.hasOwnProperty('x');\n  var hasY = offsets.hasOwnProperty('y');\n  var sideX = left;\n  var sideY = top;\n  var win = window;\n\n  if (adaptive) {\n    var offsetParent = getOffsetParent(popper);\n    var heightProp = 'clientHeight';\n    var widthProp = 'clientWidth';\n\n    if (offsetParent === getWindow(popper)) {\n      offsetParent = getDocumentElement(popper);\n\n      if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n        heightProp = 'scrollHeight';\n        widthProp = 'scrollWidth';\n      }\n    } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n    offsetParent = offsetParent;\n\n    if (placement === top || (placement === left || placement === right) && variation === end) {\n      sideY = bottom;\n      var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n      offsetParent[heightProp];\n      y -= offsetY - popperRect.height;\n      y *= gpuAcceleration ? 1 : -1;\n    }\n\n    if (placement === left || (placement === top || placement === bottom) && variation === end) {\n      sideX = right;\n      var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n      offsetParent[widthProp];\n      x -= offsetX - popperRect.width;\n      x *= gpuAcceleration ? 1 : -1;\n    }\n  }\n\n  var commonStyles = Object.assign({\n    position: position\n  }, adaptive && unsetSides);\n\n  var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n    x: x,\n    y: y\n  }) : {\n    x: x,\n    y: y\n  };\n\n  x = _ref4.x;\n  y = _ref4.y;\n\n  if (gpuAcceleration) {\n    var _Object$assign;\n\n    return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n  }\n\n  return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n  var state = _ref5.state,\n      options = _ref5.options;\n  var _options$gpuAccelerat = options.gpuAcceleration,\n      gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n      _options$adaptive = options.adaptive,\n      adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n      _options$roundOffsets = options.roundOffsets,\n      roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n  if (process.env.NODE_ENV !== \"production\") {\n    var transitionProperty = getComputedStyle(state.elements.popper).transitionProperty || '';\n\n    if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) {\n      return transitionProperty.indexOf(property) >= 0;\n    })) {\n      console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: \"transform\", \"top\", \"right\", \"bottom\", \"left\".', '\\n\\n', 'Disable the \"computeStyles\" modifier\\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\\n\\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' '));\n    }\n  }\n\n  var commonStyles = {\n    placement: getBasePlacement(state.placement),\n    variation: getVariation(state.placement),\n    popper: state.elements.popper,\n    popperRect: state.rects.popper,\n    gpuAcceleration: gpuAcceleration,\n    isFixed: state.options.strategy === 'fixed'\n  };\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.popperOffsets,\n      position: state.options.strategy,\n      adaptive: adaptive,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  if (state.modifiersData.arrow != null) {\n    state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.arrow,\n      position: 'absolute',\n      adaptive: false,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-placement': state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'computeStyles',\n  enabled: true,\n  phase: 'beforeWrite',\n  fn: computeStyles,\n  data: {}\n};","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n  passive: true\n};\n\nfunction effect(_ref) {\n  var state = _ref.state,\n      instance = _ref.instance,\n      options = _ref.options;\n  var _options$scroll = options.scroll,\n      scroll = _options$scroll === void 0 ? true : _options$scroll,\n      _options$resize = options.resize,\n      resize = _options$resize === void 0 ? true : _options$resize;\n  var window = getWindow(state.elements.popper);\n  var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n  if (scroll) {\n    scrollParents.forEach(function (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 function () {\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.removeEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.removeEventListener('resize', instance.update, passive);\n    }\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'eventListeners',\n  enabled: true,\n  phase: 'write',\n  fn: function fn() {},\n  effect: effect,\n  data: {}\n};","var hash = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, function (matched) {\n    return hash[matched];\n  });\n}","var hash = {\n  start: 'end',\n  end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n  return placement.replace(/start|end/g, function (matched) {\n    return hash[matched];\n  });\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n  var win = getWindow(node);\n  var scrollLeft = win.pageXOffset;\n  var scrollTop = win.pageYOffset;\n  return {\n    scrollLeft: scrollLeft,\n    scrollTop: scrollTop\n  };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n  // If <html> 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 <html>\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 getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n  // Firefox wants us to check `-x` and `-y` variations as well\n  var _getComputedStyle = getComputedStyle(element),\n      overflow = _getComputedStyle.overflow,\n      overflowX = _getComputedStyle.overflowX,\n      overflowY = _getComputedStyle.overflowY;\n\n  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\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}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\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*/\n\nexport default function listScrollParents(element, list) {\n  var _element$ownerDocumen;\n\n  if (list === void 0) {\n    list = [];\n  }\n\n  var scrollParent = getScrollParent(element);\n  var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n  var win = getWindow(scrollParent);\n  var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n  var updatedList = list.concat(target);\n  return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n  updatedList.concat(listScrollParents(getParentNode(target)));\n}","export default function rectToClientRect(rect) {\n  return Object.assign({}, rect, {\n    left: rect.x,\n    top: rect.y,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height\n  });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element) {\n  var rect = getBoundingClientRect(element);\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  return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent) {\n  return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\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`\n\n\nfunction getClippingParents(element) {\n  var clippingParents = listScrollParents(getParentNode(element));\n  var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n  var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n  if (!isElement(clipperElement)) {\n    return [];\n  } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n  return clippingParents.filter(function (clippingParent) {\n    return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n  });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary) {\n  var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n  var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n  var firstClippingParent = clippingParents[0];\n  var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n    var rect = getClientRectFromMixedType(element, clippingParent);\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    return accRect;\n  }, getClientRectFromMixedType(element, firstClippingParent));\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  return clippingRect;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nexport default function getViewportRect(element) {\n  var win = getWindow(element);\n  var html = getDocumentElement(element);\n  var visualViewport = win.visualViewport;\n  var width = html.clientWidth;\n  var height = html.clientHeight;\n  var x = 0;\n  var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n  // can be obscured underneath it.\n  // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n  // if it isn't open, so if this isn't available, the popper will be detected\n  // to overflow the bottom of the screen too early.\n\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n    // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n    // errors due to floating point numbers, so we need to check precision.\n    // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n    // Feature detection fails in mobile emulation mode in Chrome.\n    // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n    // 0.001\n    // Fallback here: \"Not Safari\" userAgent\n\n    if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x + getWindowScrollBarX(element),\n    y: y\n  };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n  var _element$ownerDocumen;\n\n  var html = getDocumentElement(element);\n  var winScroll = getWindowScroll(element);\n  var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n  var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n  var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n  var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n  var 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 {\n    width: width,\n    height: height,\n    x: x,\n    y: y\n  };\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n  var reference = _ref.reference,\n      element = _ref.element,\n      placement = _ref.placement;\n  var basePlacement = placement ? getBasePlacement(placement) : null;\n  var variation = placement ? getVariation(placement) : null;\n  var commonX = reference.x + reference.width / 2 - element.width / 2;\n  var commonY = reference.y + reference.height / 2 - element.height / 2;\n  var offsets;\n\n  switch (basePlacement) {\n    case top:\n      offsets = {\n        x: commonX,\n        y: reference.y - element.height\n      };\n      break;\n\n    case bottom:\n      offsets = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n\n    case right:\n      offsets = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n\n    case left:\n      offsets = {\n        x: reference.x - element.width,\n        y: commonY\n      };\n      break;\n\n    default:\n      offsets = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n\n  var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n  if (mainAxis != null) {\n    var len = mainAxis === 'y' ? 'height' : 'width';\n\n    switch (variation) {\n      case start:\n        offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n        break;\n\n      case end:\n        offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n        break;\n\n      default:\n    }\n  }\n\n  return offsets;\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      _options$placement = _options.placement,\n      placement = _options$placement === void 0 ? state.placement : _options$placement,\n      _options$boundary = _options.boundary,\n      boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n      _options$rootBoundary = _options.rootBoundary,\n      rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n      _options$elementConte = _options.elementContext,\n      elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n      _options$altBoundary = _options.altBoundary,\n      altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n      _options$padding = _options.padding,\n      padding = _options$padding === void 0 ? 0 : _options$padding;\n  var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  var altContext = elementContext === popper ? reference : popper;\n  var popperRect = state.rects.popper;\n  var element = state.elements[altBoundary ? altContext : elementContext];\n  var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);\n  var referenceClientRect = getBoundingClientRect(state.elements.reference);\n  var popperOffsets = computeOffsets({\n    reference: referenceClientRect,\n    element: popperRect,\n    strategy: 'absolute',\n    placement: placement\n  });\n  var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n  var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n  // 0 or negative = within the clipping rect\n\n  var overflowOffsets = {\n    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n    bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n    right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n  };\n  var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n  if (elementContext === popper && offsetData) {\n    var offset = offsetData[placement];\n    Object.keys(overflowOffsets).forEach(function (key) {\n      var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n      var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n      overflowOffsets[key] += offset[axis] * multiply;\n    });\n  }\n\n  return overflowOffsets;\n}","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n  if (getBasePlacement(placement) === auto) {\n    return [];\n  }\n\n  var oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n\n  if (state.modifiersData[name]._skip) {\n    return;\n  }\n\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n      specifiedFallbackPlacements = options.fallbackPlacements,\n      padding = options.padding,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      _options$flipVariatio = options.flipVariations,\n      flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n      allowedAutoPlacements = options.allowedAutoPlacements;\n  var preferredPlacement = state.options.placement;\n  var basePlacement = getBasePlacement(preferredPlacement);\n  var isBasePlacement = basePlacement === preferredPlacement;\n  var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n  var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n    return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      flipVariations: flipVariations,\n      allowedAutoPlacements: allowedAutoPlacements\n    }) : placement);\n  }, []);\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var checksMap = new Map();\n  var makeFallbackChecks = true;\n  var firstFittingPlacement = placements[0];\n\n  for (var i = 0; i < placements.length; i++) {\n    var placement = placements[i];\n\n    var _basePlacement = getBasePlacement(placement);\n\n    var isStartVariation = getVariation(placement) === start;\n    var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n    var len = isVertical ? 'width' : 'height';\n    var overflow = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      altBoundary: altBoundary,\n      padding: padding\n    });\n    var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n    if (referenceRect[len] > popperRect[len]) {\n      mainVariationSide = getOppositePlacement(mainVariationSide);\n    }\n\n    var altVariationSide = getOppositePlacement(mainVariationSide);\n    var checks = [];\n\n    if (checkMainAxis) {\n      checks.push(overflow[_basePlacement] <= 0);\n    }\n\n    if (checkAltAxis) {\n      checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n    }\n\n    if (checks.every(function (check) {\n      return check;\n    })) {\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    var numberOfChecks = flipVariations ? 3 : 1;\n\n    var _loop = function _loop(_i) {\n      var fittingPlacement = placements.find(function (placement) {\n        var checks = checksMap.get(placement);\n\n        if (checks) {\n          return checks.slice(0, _i).every(function (check) {\n            return check;\n          });\n        }\n      });\n\n      if (fittingPlacement) {\n        firstFittingPlacement = fittingPlacement;\n        return \"break\";\n      }\n    };\n\n    for (var _i = numberOfChecks; _i > 0; _i--) {\n      var _ret = _loop(_i);\n\n      if (_ret === \"break\") break;\n    }\n  }\n\n  if (state.placement !== firstFittingPlacement) {\n    state.modifiersData[name]._skip = true;\n    state.placement = firstFittingPlacement;\n    state.reset = true;\n  }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'flip',\n  enabled: true,\n  phase: 'main',\n  fn: flip,\n  requiresIfExists: ['offset'],\n  data: {\n    _skip: false\n  }\n};","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      placement = _options.placement,\n      boundary = _options.boundary,\n      rootBoundary = _options.rootBoundary,\n      padding = _options.padding,\n      flipVariations = _options.flipVariations,\n      _options$allowedAutoP = _options.allowedAutoPlacements,\n      allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n  var variation = getVariation(placement);\n  var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n    return getVariation(placement) === variation;\n  }) : basePlacements;\n  var allowedPlacements = placements.filter(function (placement) {\n    return allowedAutoPlacements.indexOf(placement) >= 0;\n  });\n\n  if (allowedPlacements.length === 0) {\n    allowedPlacements = placements;\n\n    if (process.env.NODE_ENV !== \"production\") {\n      console.error(['Popper: The `allowedAutoPlacements` option did not allow any', 'placements. Ensure the `placement` option matches the variation', 'of the allowed placements.', 'For example, \"auto\" cannot be used to allow \"bottom-start\".', 'Use \"auto-start\" instead.'].join(' '));\n    }\n  } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n  var overflows = allowedPlacements.reduce(function (acc, placement) {\n    acc[placement] = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding\n    })[getBasePlacement(placement)];\n    return acc;\n  }, {});\n  return Object.keys(overflows).sort(function (a, b) {\n    return overflows[a] - overflows[b];\n  });\n}","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n  if (preventedOffsets === void 0) {\n    preventedOffsets = {\n      x: 0,\n      y: 0\n    };\n  }\n\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) {\n  return [top, right, bottom, left].some(function (side) {\n    return overflow[side] >= 0;\n  });\n}\n\nfunction hide(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var preventedOffsets = state.modifiersData.preventOverflow;\n  var referenceOverflow = detectOverflow(state, {\n    elementContext: 'reference'\n  });\n  var popperAltOverflow = detectOverflow(state, {\n    altBoundary: true\n  });\n  var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n  var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n  var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n  var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n  state.modifiersData[name] = {\n    referenceClippingOffsets: referenceClippingOffsets,\n    popperEscapeOffsets: popperEscapeOffsets,\n    isReferenceHidden: isReferenceHidden,\n    hasPopperEscaped: hasPopperEscaped\n  };\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-reference-hidden': isReferenceHidden,\n    'data-popper-escaped': hasPopperEscaped\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'hide',\n  enabled: true,\n  phase: 'main',\n  requiresIfExists: ['preventOverflow'],\n  fn: hide\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n  var basePlacement = getBasePlacement(placement);\n  var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n  var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n    placement: placement\n  })) : offset,\n      skidding = _ref[0],\n      distance = _ref[1];\n\n  skidding = skidding || 0;\n  distance = (distance || 0) * invertDistance;\n  return [left, right].indexOf(basePlacement) >= 0 ? {\n    x: distance,\n    y: skidding\n  } : {\n    x: skidding,\n    y: distance\n  };\n}\n\nfunction offset(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options,\n      name = _ref2.name;\n  var _options$offset = options.offset,\n      offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n  var data = placements.reduce(function (acc, placement) {\n    acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n    return acc;\n  }, {});\n  var _data$state$placement = data[state.placement],\n      x = _data$state$placement.x,\n      y = _data$state$placement.y;\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} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'offset',\n  enabled: true,\n  phase: 'main',\n  requires: ['popperOffsets'],\n  fn: offset\n};","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\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} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'popperOffsets',\n  enabled: true,\n  phase: 'read',\n  fn: popperOffsets,\n  data: {}\n};","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      padding = options.padding,\n      _options$tether = options.tether,\n      tether = _options$tether === void 0 ? true : _options$tether,\n      _options$tetherOffset = options.tetherOffset,\n      tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n  var overflow = detectOverflow(state, {\n    boundary: boundary,\n    rootBoundary: rootBoundary,\n    padding: padding,\n    altBoundary: altBoundary\n  });\n  var basePlacement = getBasePlacement(state.placement);\n  var variation = getVariation(state.placement);\n  var isBasePlacement = !variation;\n  var mainAxis = getMainAxisFromPlacement(basePlacement);\n  var altAxis = getAltAxis(mainAxis);\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : tetherOffset;\n  var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n    mainAxis: tetherOffsetValue,\n    altAxis: tetherOffsetValue\n  } : Object.assign({\n    mainAxis: 0,\n    altAxis: 0\n  }, tetherOffsetValue);\n  var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n  var data = {\n    x: 0,\n    y: 0\n  };\n\n  if (!popperOffsets) {\n    return;\n  }\n\n  if (checkMainAxis) {\n    var _offsetModifierState$;\n\n    var mainSide = mainAxis === 'y' ? top : left;\n    var altSide = mainAxis === 'y' ? bottom : right;\n    var len = mainAxis === 'y' ? 'height' : 'width';\n    var offset = popperOffsets[mainAxis];\n    var min = offset + overflow[mainSide];\n    var max = offset - overflow[altSide];\n    var additive = tether ? -popperRect[len] / 2 : 0;\n    var minLen = variation === start ? referenceRect[len] : popperRect[len];\n    var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n    // outside the reference bounds\n\n    var arrowElement = state.elements.arrow;\n    var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n      width: 0,\n      height: 0\n    };\n    var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n    var arrowPaddingMin = arrowPaddingObject[mainSide];\n    var arrowPaddingMax = arrowPaddingObject[altSide]; // 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\n    var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n    var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n    var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n    var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n    var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n    var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n    var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n    var tetherMax = offset + maxOffset - offsetModifierValue;\n    var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n    popperOffsets[mainAxis] = preventedOffset;\n    data[mainAxis] = preventedOffset - offset;\n  }\n\n  if (checkAltAxis) {\n    var _offsetModifierState$2;\n\n    var _mainSide = mainAxis === 'x' ? top : left;\n\n    var _altSide = mainAxis === 'x' ? bottom : right;\n\n    var _offset = popperOffsets[altAxis];\n\n    var _len = altAxis === 'y' ? 'height' : 'width';\n\n    var _min = _offset + overflow[_mainSide];\n\n    var _max = _offset - overflow[_altSide];\n\n    var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n    var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n    var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n    var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n    var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : 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} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'preventOverflow',\n  enabled: true,\n  phase: 'main',\n  fn: preventOverflow,\n  requiresIfExists: ['offset']\n};","export default function getAltAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n  var rect = element.getBoundingClientRect();\n  var scaleX = round(rect.width) / element.offsetWidth || 1;\n  var scaleY = round(rect.height) / element.offsetHeight || 1;\n  return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n\n  var isOffsetParentAnElement = isHTMLElement(offsetParent);\n  var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n  var documentElement = getDocumentElement(offsetParent);\n  var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled);\n  var scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  var offsets = {\n    x: 0,\n    y: 0\n  };\n\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n    isScrollParent(documentElement)) {\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}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n  if (node === getWindow(node) || !isHTMLElement(node)) {\n    return getWindowScroll(node);\n  } else {\n    return getHTMLElementScroll(node);\n  }\n}","export default function getHTMLElementScroll(element) {\n  return {\n    scrollLeft: element.scrollLeft,\n    scrollTop: element.scrollTop\n  };\n}","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n  var map = new Map();\n  var visited = new Set();\n  var result = [];\n  modifiers.forEach(function (modifier) {\n    map.set(modifier.name, modifier);\n  }); // On visiting object, check for its dependencies and visit them recursively\n\n  function sort(modifier) {\n    visited.add(modifier.name);\n    var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n    requires.forEach(function (dep) {\n      if (!visited.has(dep)) {\n        var depModifier = map.get(dep);\n\n        if (depModifier) {\n          sort(depModifier);\n        }\n      }\n    });\n    result.push(modifier);\n  }\n\n  modifiers.forEach(function (modifier) {\n    if (!visited.has(modifier.name)) {\n      // check for visited object\n      sort(modifier);\n    }\n  });\n  return result;\n}\n\nexport default function orderModifiers(modifiers) {\n  // order based on dependencies\n  var orderedModifiers = order(modifiers); // order based on phase\n\n  return modifierPhases.reduce(function (acc, phase) {\n    return acc.concat(orderedModifiers.filter(function (modifier) {\n      return modifier.phase === phase;\n    }));\n  }, []);\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport getComputedStyle from \"./dom-utils/getComputedStyle.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport validateModifiers from \"./utils/validateModifiers.js\";\nimport uniqueBy from \"./utils/uniqueBy.js\";\nimport getBasePlacement from \"./utils/getBasePlacement.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nimport { auto } from \"./enums.js\";\nvar INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.';\nvar INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.';\nvar DEFAULT_OPTIONS = {\n  placement: 'bottom',\n  modifiers: [],\n  strategy: 'absolute'\n};\n\nfunction areValidElements() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  return !args.some(function (element) {\n    return !(element && typeof element.getBoundingClientRect === 'function');\n  });\n}\n\nexport function popperGenerator(generatorOptions) {\n  if (generatorOptions === void 0) {\n    generatorOptions = {};\n  }\n\n  var _generatorOptions = generatorOptions,\n      _generatorOptions$def = _generatorOptions.defaultModifiers,\n      defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n      _generatorOptions$def2 = _generatorOptions.defaultOptions,\n      defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n  return function createPopper(reference, popper, options) {\n    if (options === void 0) {\n      options = defaultOptions;\n    }\n\n    var state = {\n      placement: 'bottom',\n      orderedModifiers: [],\n      options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n      modifiersData: {},\n      elements: {\n        reference: reference,\n        popper: popper\n      },\n      attributes: {},\n      styles: {}\n    };\n    var effectCleanupFns = [];\n    var isDestroyed = false;\n    var instance = {\n      state: state,\n      setOptions: function setOptions(setOptionsAction) {\n        var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n        cleanupModifierEffects();\n        state.options = Object.assign({}, defaultOptions, state.options, options);\n        state.scrollParents = {\n          reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n          popper: listScrollParents(popper)\n        }; // Orders the modifiers based on their dependencies and `phase`\n        // properties\n\n        var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n        state.orderedModifiers = orderedModifiers.filter(function (m) {\n          return m.enabled;\n        }); // Validate the provided modifiers so that the consumer will get warned\n        // if one of the modifiers is invalid for any reason\n\n        if (process.env.NODE_ENV !== \"production\") {\n          var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function (_ref) {\n            var name = _ref.name;\n            return name;\n          });\n          validateModifiers(modifiers);\n\n          if (getBasePlacement(state.options.placement) === auto) {\n            var flipModifier = state.orderedModifiers.find(function (_ref2) {\n              var name = _ref2.name;\n              return name === 'flip';\n            });\n\n            if (!flipModifier) {\n              console.error(['Popper: \"auto\" placements require the \"flip\" modifier be', 'present and enabled to work.'].join(' '));\n            }\n          }\n\n          var _getComputedStyle = getComputedStyle(popper),\n              marginTop = _getComputedStyle.marginTop,\n              marginRight = _getComputedStyle.marginRight,\n              marginBottom = _getComputedStyle.marginBottom,\n              marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can\n          // cause bugs with positioning, so we'll warn the consumer\n\n\n          if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) {\n            return parseFloat(margin);\n          })) {\n            console.warn(['Popper: CSS \"margin\" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' '));\n          }\n        }\n\n        runModifierEffects();\n        return instance.update();\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: function forceUpdate() {\n        if (isDestroyed) {\n          return;\n        }\n\n        var _state$elements = state.elements,\n            reference = _state$elements.reference,\n            popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n        // anymore\n\n        if (!areValidElements(reference, popper)) {\n          if (process.env.NODE_ENV !== \"production\") {\n            console.error(INVALID_ELEMENT_ERROR);\n          }\n\n          return;\n        } // Store the reference and popper rects to be read by modifiers\n\n\n        state.rects = {\n          reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n          popper: getLayoutRect(popper)\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\n        state.reset = false;\n        state.placement = state.options.placement; // 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\n        state.orderedModifiers.forEach(function (modifier) {\n          return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n        });\n        var __debug_loops__ = 0;\n\n        for (var index = 0; index < state.orderedModifiers.length; index++) {\n          if (process.env.NODE_ENV !== \"production\") {\n            __debug_loops__ += 1;\n\n            if (__debug_loops__ > 100) {\n              console.error(INFINITE_LOOP_ERROR);\n              break;\n            }\n          }\n\n          if (state.reset === true) {\n            state.reset = false;\n            index = -1;\n            continue;\n          }\n\n          var _state$orderedModifie = state.orderedModifiers[index],\n              fn = _state$orderedModifie.fn,\n              _state$orderedModifie2 = _state$orderedModifie.options,\n              _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n              name = _state$orderedModifie.name;\n\n          if (typeof fn === 'function') {\n            state = fn({\n              state: state,\n              options: _options,\n              name: name,\n              instance: instance\n            }) || state;\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(function () {\n        return new Promise(function (resolve) {\n          instance.forceUpdate();\n          resolve(state);\n        });\n      }),\n      destroy: function destroy() {\n        cleanupModifierEffects();\n        isDestroyed = true;\n      }\n    };\n\n    if (!areValidElements(reference, popper)) {\n      if (process.env.NODE_ENV !== \"production\") {\n        console.error(INVALID_ELEMENT_ERROR);\n      }\n\n      return instance;\n    }\n\n    instance.setOptions(options).then(function (state) {\n      if (!isDestroyed && options.onFirstUpdate) {\n        options.onFirstUpdate(state);\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\n    function runModifierEffects() {\n      state.orderedModifiers.forEach(function (_ref3) {\n        var name = _ref3.name,\n            _ref3$options = _ref3.options,\n            options = _ref3$options === void 0 ? {} : _ref3$options,\n            effect = _ref3.effect;\n\n        if (typeof effect === 'function') {\n          var cleanupFn = effect({\n            state: state,\n            name: name,\n            instance: instance,\n            options: options\n          });\n\n          var noopFn = function noopFn() {};\n\n          effectCleanupFns.push(cleanupFn || noopFn);\n        }\n      });\n    }\n\n    function cleanupModifierEffects() {\n      effectCleanupFns.forEach(function (fn) {\n        return fn();\n      });\n      effectCleanupFns = [];\n    }\n\n    return instance;\n  };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","export default function debounce(fn) {\n  var pending;\n  return function () {\n    if (!pending) {\n      pending = new Promise(function (resolve) {\n        Promise.resolve().then(function () {\n          pending = undefined;\n          resolve(fn());\n        });\n      });\n    }\n\n    return pending;\n  };\n}","export default function mergeByName(modifiers) {\n  var merged = modifiers.reduce(function (merged, current) {\n    var existing = merged[current.name];\n    merged[current.name] = existing ? Object.assign({}, existing, current, {\n      options: Object.assign({}, existing.options, current.options),\n      data: Object.assign({}, existing.data, current.data)\n    }) : current;\n    return merged;\n  }, {}); // IE11 does not support Object.values\n\n  return Object.keys(merged).map(function (key) {\n    return merged[key];\n  });\n}","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n  defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles];\nvar createPopper = /*#__PURE__*/popperGenerator({\n  defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };","/*\nUnobtrusive JavaScript\nhttps://github.com/rails/rails/blob/main/actionview/app/assets/javascripts\nReleased under the MIT license\n */;\n\n(function() {\n  var context = this;\n\n  (function() {\n    (function() {\n      this.Rails = {\n        linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]',\n        buttonClickSelector: {\n          selector: 'button[data-remote]:not([form]), button[data-confirm]:not([form])',\n          exclude: 'form button'\n        },\n        inputChangeSelector: 'select[data-remote], input[data-remote], textarea[data-remote]',\n        formSubmitSelector: 'form:not([data-turbo=true])',\n        formInputClickSelector: 'form:not([data-turbo=true]) input[type=submit], form:not([data-turbo=true]) input[type=image], form:not([data-turbo=true]) button[type=submit], form:not([data-turbo=true]) button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])',\n        formDisableSelector: 'input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled',\n        formEnableSelector: 'input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled',\n        fileInputSelector: 'input[name][type=file]:not([disabled])',\n        linkDisableSelector: 'a[data-disable-with], a[data-disable]',\n        buttonDisableSelector: 'button[data-remote][data-disable-with], button[data-remote][data-disable]'\n      };\n\n    }).call(this);\n  }).call(context);\n\n  var Rails = context.Rails;\n\n  (function() {\n    (function() {\n      var nonce;\n\n      nonce = null;\n\n      Rails.loadCSPNonce = function() {\n        var ref;\n        return nonce = (ref = document.querySelector(\"meta[name=csp-nonce]\")) != null ? ref.content : void 0;\n      };\n\n      Rails.cspNonce = function() {\n        return nonce != null ? nonce : Rails.loadCSPNonce();\n      };\n\n    }).call(this);\n    (function() {\n      var expando, m;\n\n      m = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;\n\n      Rails.matches = function(element, selector) {\n        if (selector.exclude != null) {\n          return m.call(element, selector.selector) && !m.call(element, selector.exclude);\n        } else {\n          return m.call(element, selector);\n        }\n      };\n\n      expando = '_ujsData';\n\n      Rails.getData = function(element, key) {\n        var ref;\n        return (ref = element[expando]) != null ? ref[key] : void 0;\n      };\n\n      Rails.setData = function(element, key, value) {\n        if (element[expando] == null) {\n          element[expando] = {};\n        }\n        return element[expando][key] = value;\n      };\n\n      Rails.$ = function(selector) {\n        return Array.prototype.slice.call(document.querySelectorAll(selector));\n      };\n\n    }).call(this);\n    (function() {\n      var $, csrfParam, csrfToken;\n\n      $ = Rails.$;\n\n      csrfToken = Rails.csrfToken = function() {\n        var meta;\n        meta = document.querySelector('meta[name=csrf-token]');\n        return meta && meta.content;\n      };\n\n      csrfParam = Rails.csrfParam = function() {\n        var meta;\n        meta = document.querySelector('meta[name=csrf-param]');\n        return meta && meta.content;\n      };\n\n      Rails.CSRFProtection = function(xhr) {\n        var token;\n        token = csrfToken();\n        if (token != null) {\n          return xhr.setRequestHeader('X-CSRF-Token', token);\n        }\n      };\n\n      Rails.refreshCSRFTokens = function() {\n        var param, token;\n        token = csrfToken();\n        param = csrfParam();\n        if ((token != null) && (param != null)) {\n          return $('form input[name=\"' + param + '\"]').forEach(function(input) {\n            return input.value = token;\n          });\n        }\n      };\n\n    }).call(this);\n    (function() {\n      var CustomEvent, fire, matches, preventDefault;\n\n      matches = Rails.matches;\n\n      CustomEvent = window.CustomEvent;\n\n      if (typeof CustomEvent !== 'function') {\n        CustomEvent = function(event, params) {\n          var evt;\n          evt = document.createEvent('CustomEvent');\n          evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n          return evt;\n        };\n        CustomEvent.prototype = window.Event.prototype;\n        preventDefault = CustomEvent.prototype.preventDefault;\n        CustomEvent.prototype.preventDefault = function() {\n          var result;\n          result = preventDefault.call(this);\n          if (this.cancelable && !this.defaultPrevented) {\n            Object.defineProperty(this, 'defaultPrevented', {\n              get: function() {\n                return true;\n              }\n            });\n          }\n          return result;\n        };\n      }\n\n      fire = Rails.fire = function(obj, name, data) {\n        var event;\n        event = new CustomEvent(name, {\n          bubbles: true,\n          cancelable: true,\n          detail: data\n        });\n        obj.dispatchEvent(event);\n        return !event.defaultPrevented;\n      };\n\n      Rails.stopEverything = function(e) {\n        fire(e.target, 'ujs:everythingStopped');\n        e.preventDefault();\n        e.stopPropagation();\n        return e.stopImmediatePropagation();\n      };\n\n      Rails.delegate = function(element, selector, eventType, handler) {\n        return element.addEventListener(eventType, function(e) {\n          var target;\n          target = e.target;\n          while (!(!(target instanceof Element) || matches(target, selector))) {\n            target = target.parentNode;\n          }\n          if (target instanceof Element && handler.call(target, e) === false) {\n            e.preventDefault();\n            return e.stopPropagation();\n          }\n        });\n      };\n\n    }).call(this);\n    (function() {\n      var AcceptHeaders, CSRFProtection, createXHR, cspNonce, fire, prepareOptions, processResponse;\n\n      cspNonce = Rails.cspNonce, CSRFProtection = Rails.CSRFProtection, fire = Rails.fire;\n\n      AcceptHeaders = {\n        '*': '*/*',\n        text: 'text/plain',\n        html: 'text/html',\n        xml: 'application/xml, text/xml',\n        json: 'application/json, text/javascript',\n        script: 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript'\n      };\n\n      Rails.ajax = function(options) {\n        var xhr;\n        options = prepareOptions(options);\n        xhr = createXHR(options, function() {\n          var ref, response;\n          response = processResponse((ref = xhr.response) != null ? ref : xhr.responseText, xhr.getResponseHeader('Content-Type'));\n          if (Math.floor(xhr.status / 100) === 2) {\n            if (typeof options.success === \"function\") {\n              options.success(response, xhr.statusText, xhr);\n            }\n          } else {\n            if (typeof options.error === \"function\") {\n              options.error(response, xhr.statusText, xhr);\n            }\n          }\n          return typeof options.complete === \"function\" ? options.complete(xhr, xhr.statusText) : void 0;\n        });\n        if ((options.beforeSend != null) && !options.beforeSend(xhr, options)) {\n          return false;\n        }\n        if (xhr.readyState === XMLHttpRequest.OPENED) {\n          return xhr.send(options.data);\n        }\n      };\n\n      prepareOptions = function(options) {\n        options.url = options.url || location.href;\n        options.type = options.type.toUpperCase();\n        if (options.type === 'GET' && options.data) {\n          if (options.url.indexOf('?') < 0) {\n            options.url += '?' + options.data;\n          } else {\n            options.url += '&' + options.data;\n          }\n        }\n        if (AcceptHeaders[options.dataType] == null) {\n          options.dataType = '*';\n        }\n        options.accept = AcceptHeaders[options.dataType];\n        if (options.dataType !== '*') {\n          options.accept += ', */*; q=0.01';\n        }\n        return options;\n      };\n\n      createXHR = function(options, done) {\n        var xhr;\n        xhr = new XMLHttpRequest();\n        xhr.open(options.type, options.url, true);\n        xhr.setRequestHeader('Accept', options.accept);\n        if (typeof options.data === 'string') {\n          xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');\n        }\n        if (!options.crossDomain) {\n          xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n          CSRFProtection(xhr);\n        }\n        xhr.withCredentials = !!options.withCredentials;\n        xhr.onreadystatechange = function() {\n          if (xhr.readyState === XMLHttpRequest.DONE) {\n            return done(xhr);\n          }\n        };\n        return xhr;\n      };\n\n      processResponse = function(response, type) {\n        var parser, script;\n        if (typeof response === 'string' && typeof type === 'string') {\n          if (type.match(/\\bjson\\b/)) {\n            try {\n              response = JSON.parse(response);\n            } catch (error) {}\n          } else if (type.match(/\\b(?:java|ecma)script\\b/)) {\n            script = document.createElement('script');\n            script.setAttribute('nonce', cspNonce());\n            script.text = response;\n            document.head.appendChild(script).parentNode.removeChild(script);\n          } else if (type.match(/\\b(xml|html|svg)\\b/)) {\n            parser = new DOMParser();\n            type = type.replace(/;.+/, '');\n            try {\n              response = parser.parseFromString(response, type);\n            } catch (error) {}\n          }\n        }\n        return response;\n      };\n\n      Rails.href = function(element) {\n        return element.href;\n      };\n\n      Rails.isCrossDomain = function(url) {\n        var e, originAnchor, urlAnchor;\n        originAnchor = document.createElement('a');\n        originAnchor.href = location.href;\n        urlAnchor = document.createElement('a');\n        try {\n          urlAnchor.href = url;\n          return !(((!urlAnchor.protocol || urlAnchor.protocol === ':') && !urlAnchor.host) || (originAnchor.protocol + '//' + originAnchor.host === urlAnchor.protocol + '//' + urlAnchor.host));\n        } catch (error) {\n          e = error;\n          return true;\n        }\n      };\n\n    }).call(this);\n    (function() {\n      var matches, toArray;\n\n      matches = Rails.matches;\n\n      toArray = function(e) {\n        return Array.prototype.slice.call(e);\n      };\n\n      Rails.serializeElement = function(element, additionalParam) {\n        var inputs, params;\n        inputs = [element];\n        if (matches(element, 'form')) {\n          inputs = toArray(element.elements);\n        }\n        params = [];\n        inputs.forEach(function(input) {\n          if (!input.name || input.disabled) {\n            return;\n          }\n          if (matches(input, 'fieldset[disabled] *')) {\n            return;\n          }\n          if (matches(input, 'select')) {\n            return toArray(input.options).forEach(function(option) {\n              if (option.selected) {\n                return params.push({\n                  name: input.name,\n                  value: option.value\n                });\n              }\n            });\n          } else if (input.checked || ['radio', 'checkbox', 'submit'].indexOf(input.type) === -1) {\n            return params.push({\n              name: input.name,\n              value: input.value\n            });\n          }\n        });\n        if (additionalParam) {\n          params.push(additionalParam);\n        }\n        return params.map(function(param) {\n          if (param.name != null) {\n            return (encodeURIComponent(param.name)) + \"=\" + (encodeURIComponent(param.value));\n          } else {\n            return param;\n          }\n        }).join('&');\n      };\n\n      Rails.formElements = function(form, selector) {\n        if (matches(form, 'form')) {\n          return toArray(form.elements).filter(function(el) {\n            return matches(el, selector);\n          });\n        } else {\n          return toArray(form.querySelectorAll(selector));\n        }\n      };\n\n    }).call(this);\n    (function() {\n      var allowAction, fire, stopEverything;\n\n      fire = Rails.fire, stopEverything = Rails.stopEverything;\n\n      Rails.handleConfirm = function(e) {\n        if (!allowAction(this)) {\n          return stopEverything(e);\n        }\n      };\n\n      Rails.confirm = function(message, element) {\n        return confirm(message);\n      };\n\n      allowAction = function(element) {\n        var answer, callback, message;\n        message = element.getAttribute('data-confirm');\n        if (!message) {\n          return true;\n        }\n        answer = false;\n        if (fire(element, 'confirm')) {\n          try {\n            answer = Rails.confirm(message, element);\n          } catch (error) {}\n          callback = fire(element, 'confirm:complete', [answer]);\n        }\n        return answer && callback;\n      };\n\n    }).call(this);\n    (function() {\n      var disableFormElement, disableFormElements, disableLinkElement, enableFormElement, enableFormElements, enableLinkElement, formElements, getData, isXhrRedirect, matches, setData, stopEverything;\n\n      matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, stopEverything = Rails.stopEverything, formElements = Rails.formElements;\n\n      Rails.handleDisabledElement = function(e) {\n        var element;\n        element = this;\n        if (element.disabled) {\n          return stopEverything(e);\n        }\n      };\n\n      Rails.enableElement = function(e) {\n        var element;\n        if (e instanceof Event) {\n          if (isXhrRedirect(e)) {\n            return;\n          }\n          element = e.target;\n        } else {\n          element = e;\n        }\n        if (matches(element, Rails.linkDisableSelector)) {\n          return enableLinkElement(element);\n        } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formEnableSelector)) {\n          return enableFormElement(element);\n        } else if (matches(element, Rails.formSubmitSelector)) {\n          return enableFormElements(element);\n        }\n      };\n\n      Rails.disableElement = function(e) {\n        var element;\n        element = e instanceof Event ? e.target : e;\n        if (matches(element, Rails.linkDisableSelector)) {\n          return disableLinkElement(element);\n        } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formDisableSelector)) {\n          return disableFormElement(element);\n        } else if (matches(element, Rails.formSubmitSelector)) {\n          return disableFormElements(element);\n        }\n      };\n\n      disableLinkElement = function(element) {\n        var replacement;\n        if (getData(element, 'ujs:disabled')) {\n          return;\n        }\n        replacement = element.getAttribute('data-disable-with');\n        if (replacement != null) {\n          setData(element, 'ujs:enable-with', element.innerHTML);\n          element.innerHTML = replacement;\n        }\n        element.addEventListener('click', stopEverything);\n        return setData(element, 'ujs:disabled', true);\n      };\n\n      enableLinkElement = function(element) {\n        var originalText;\n        originalText = getData(element, 'ujs:enable-with');\n        if (originalText != null) {\n          element.innerHTML = originalText;\n          setData(element, 'ujs:enable-with', null);\n        }\n        element.removeEventListener('click', stopEverything);\n        return setData(element, 'ujs:disabled', null);\n      };\n\n      disableFormElements = function(form) {\n        return formElements(form, Rails.formDisableSelector).forEach(disableFormElement);\n      };\n\n      disableFormElement = function(element) {\n        var replacement;\n        if (getData(element, 'ujs:disabled')) {\n          return;\n        }\n        replacement = element.getAttribute('data-disable-with');\n        if (replacement != null) {\n          if (matches(element, 'button')) {\n            setData(element, 'ujs:enable-with', element.innerHTML);\n            element.innerHTML = replacement;\n          } else {\n            setData(element, 'ujs:enable-with', element.value);\n            element.value = replacement;\n          }\n        }\n        element.disabled = true;\n        return setData(element, 'ujs:disabled', true);\n      };\n\n      enableFormElements = function(form) {\n        return formElements(form, Rails.formEnableSelector).forEach(enableFormElement);\n      };\n\n      enableFormElement = function(element) {\n        var originalText;\n        originalText = getData(element, 'ujs:enable-with');\n        if (originalText != null) {\n          if (matches(element, 'button')) {\n            element.innerHTML = originalText;\n          } else {\n            element.value = originalText;\n          }\n          setData(element, 'ujs:enable-with', null);\n        }\n        element.disabled = false;\n        return setData(element, 'ujs:disabled', null);\n      };\n\n      isXhrRedirect = function(event) {\n        var ref, xhr;\n        xhr = (ref = event.detail) != null ? ref[0] : void 0;\n        return (xhr != null ? xhr.getResponseHeader(\"X-Xhr-Redirect\") : void 0) != null;\n      };\n\n    }).call(this);\n    (function() {\n      var stopEverything;\n\n      stopEverything = Rails.stopEverything;\n\n      Rails.handleMethod = function(e) {\n        var csrfParam, csrfToken, form, formContent, href, link, method;\n        link = this;\n        method = link.getAttribute('data-method');\n        if (!method) {\n          return;\n        }\n        href = Rails.href(link);\n        csrfToken = Rails.csrfToken();\n        csrfParam = Rails.csrfParam();\n        form = document.createElement('form');\n        formContent = \"<input name='_method' value='\" + method + \"' type='hidden' />\";\n        if ((csrfParam != null) && (csrfToken != null) && !Rails.isCrossDomain(href)) {\n          formContent += \"<input name='\" + csrfParam + \"' value='\" + csrfToken + \"' type='hidden' />\";\n        }\n        formContent += '<input type=\"submit\" />';\n        form.method = 'post';\n        form.action = href;\n        form.target = link.target;\n        form.innerHTML = formContent;\n        form.style.display = 'none';\n        document.body.appendChild(form);\n        form.querySelector('[type=\"submit\"]').click();\n        return stopEverything(e);\n      };\n\n    }).call(this);\n    (function() {\n      var ajax, fire, getData, isCrossDomain, isRemote, matches, serializeElement, setData, stopEverything,\n        slice = [].slice;\n\n      matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, fire = Rails.fire, stopEverything = Rails.stopEverything, ajax = Rails.ajax, isCrossDomain = Rails.isCrossDomain, serializeElement = Rails.serializeElement;\n\n      isRemote = function(element) {\n        var value;\n        value = element.getAttribute('data-remote');\n        return (value != null) && value !== 'false';\n      };\n\n      Rails.handleRemote = function(e) {\n        var button, data, dataType, element, method, url, withCredentials;\n        element = this;\n        if (!isRemote(element)) {\n          return true;\n        }\n        if (!fire(element, 'ajax:before')) {\n          fire(element, 'ajax:stopped');\n          return false;\n        }\n        withCredentials = element.getAttribute('data-with-credentials');\n        dataType = element.getAttribute('data-type') || 'script';\n        if (matches(element, Rails.formSubmitSelector)) {\n          button = getData(element, 'ujs:submit-button');\n          method = getData(element, 'ujs:submit-button-formmethod') || element.method;\n          url = getData(element, 'ujs:submit-button-formaction') || element.getAttribute('action') || location.href;\n          if (method.toUpperCase() === 'GET') {\n            url = url.replace(/\\?.*$/, '');\n          }\n          if (element.enctype === 'multipart/form-data') {\n            data = new FormData(element);\n            if (button != null) {\n              data.append(button.name, button.value);\n            }\n          } else {\n            data = serializeElement(element, button);\n          }\n          setData(element, 'ujs:submit-button', null);\n          setData(element, 'ujs:submit-button-formmethod', null);\n          setData(element, 'ujs:submit-button-formaction', null);\n        } else if (matches(element, Rails.buttonClickSelector) || matches(element, Rails.inputChangeSelector)) {\n          method = element.getAttribute('data-method');\n          url = element.getAttribute('data-url');\n          data = serializeElement(element, element.getAttribute('data-params'));\n        } else {\n          method = element.getAttribute('data-method');\n          url = Rails.href(element);\n          data = element.getAttribute('data-params');\n        }\n        ajax({\n          type: method || 'GET',\n          url: url,\n          data: data,\n          dataType: dataType,\n          beforeSend: function(xhr, options) {\n            if (fire(element, 'ajax:beforeSend', [xhr, options])) {\n              return fire(element, 'ajax:send', [xhr]);\n            } else {\n              fire(element, 'ajax:stopped');\n              return false;\n            }\n          },\n          success: function() {\n            var args;\n            args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n            return fire(element, 'ajax:success', args);\n          },\n          error: function() {\n            var args;\n            args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n            return fire(element, 'ajax:error', args);\n          },\n          complete: function() {\n            var args;\n            args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n            return fire(element, 'ajax:complete', args);\n          },\n          crossDomain: isCrossDomain(url),\n          withCredentials: (withCredentials != null) && withCredentials !== 'false'\n        });\n        return stopEverything(e);\n      };\n\n      Rails.formSubmitButtonClick = function(e) {\n        var button, form;\n        button = this;\n        form = button.form;\n        if (!form) {\n          return;\n        }\n        if (button.name) {\n          setData(form, 'ujs:submit-button', {\n            name: button.name,\n            value: button.value\n          });\n        }\n        setData(form, 'ujs:formnovalidate-button', button.formNoValidate);\n        setData(form, 'ujs:submit-button-formaction', button.getAttribute('formaction'));\n        return setData(form, 'ujs:submit-button-formmethod', button.getAttribute('formmethod'));\n      };\n\n      Rails.preventInsignificantClick = function(e) {\n        var data, insignificantMetaClick, link, metaClick, method, nonPrimaryMouseClick;\n        link = this;\n        method = (link.getAttribute('data-method') || 'GET').toUpperCase();\n        data = link.getAttribute('data-params');\n        metaClick = e.metaKey || e.ctrlKey;\n        insignificantMetaClick = metaClick && method === 'GET' && !data;\n        nonPrimaryMouseClick = (e.button != null) && e.button !== 0;\n        if (nonPrimaryMouseClick || insignificantMetaClick) {\n          return e.stopImmediatePropagation();\n        }\n      };\n\n    }).call(this);\n    (function() {\n      var $, CSRFProtection, delegate, disableElement, enableElement, fire, formSubmitButtonClick, getData, handleConfirm, handleDisabledElement, handleMethod, handleRemote, loadCSPNonce, preventInsignificantClick, refreshCSRFTokens;\n\n      fire = Rails.fire, delegate = Rails.delegate, getData = Rails.getData, $ = Rails.$, refreshCSRFTokens = Rails.refreshCSRFTokens, CSRFProtection = Rails.CSRFProtection, loadCSPNonce = Rails.loadCSPNonce, enableElement = Rails.enableElement, disableElement = Rails.disableElement, handleDisabledElement = Rails.handleDisabledElement, handleConfirm = Rails.handleConfirm, preventInsignificantClick = Rails.preventInsignificantClick, handleRemote = Rails.handleRemote, formSubmitButtonClick = Rails.formSubmitButtonClick, handleMethod = Rails.handleMethod;\n\n      if ((typeof jQuery !== \"undefined\" && jQuery !== null) && (jQuery.ajax != null)) {\n        if (jQuery.rails) {\n          throw new Error('If you load both jquery_ujs and rails-ujs, use rails-ujs only.');\n        }\n        jQuery.rails = Rails;\n        jQuery.ajaxPrefilter(function(options, originalOptions, xhr) {\n          if (!options.crossDomain) {\n            return CSRFProtection(xhr);\n          }\n        });\n      }\n\n      Rails.start = function() {\n        if (window._rails_loaded) {\n          throw new Error('rails-ujs has already been loaded!');\n        }\n        window.addEventListener('pageshow', function() {\n          $(Rails.formEnableSelector).forEach(function(el) {\n            if (getData(el, 'ujs:disabled')) {\n              return enableElement(el);\n            }\n          });\n          return $(Rails.linkDisableSelector).forEach(function(el) {\n            if (getData(el, 'ujs:disabled')) {\n              return enableElement(el);\n            }\n          });\n        });\n        delegate(document, Rails.linkDisableSelector, 'ajax:complete', enableElement);\n        delegate(document, Rails.linkDisableSelector, 'ajax:stopped', enableElement);\n        delegate(document, Rails.buttonDisableSelector, 'ajax:complete', enableElement);\n        delegate(document, Rails.buttonDisableSelector, 'ajax:stopped', enableElement);\n        delegate(document, Rails.linkClickSelector, 'click', preventInsignificantClick);\n        delegate(document, Rails.linkClickSelector, 'click', handleDisabledElement);\n        delegate(document, Rails.linkClickSelector, 'click', handleConfirm);\n        delegate(document, Rails.linkClickSelector, 'click', disableElement);\n        delegate(document, Rails.linkClickSelector, 'click', handleRemote);\n        delegate(document, Rails.linkClickSelector, 'click', handleMethod);\n        delegate(document, Rails.buttonClickSelector, 'click', preventInsignificantClick);\n        delegate(document, Rails.buttonClickSelector, 'click', handleDisabledElement);\n        delegate(document, Rails.buttonClickSelector, 'click', handleConfirm);\n        delegate(document, Rails.buttonClickSelector, 'click', disableElement);\n        delegate(document, Rails.buttonClickSelector, 'click', handleRemote);\n        delegate(document, Rails.inputChangeSelector, 'change', handleDisabledElement);\n        delegate(document, Rails.inputChangeSelector, 'change', handleConfirm);\n        delegate(document, Rails.inputChangeSelector, 'change', handleRemote);\n        delegate(document, Rails.formSubmitSelector, 'submit', handleDisabledElement);\n        delegate(document, Rails.formSubmitSelector, 'submit', handleConfirm);\n        delegate(document, Rails.formSubmitSelector, 'submit', handleRemote);\n        delegate(document, Rails.formSubmitSelector, 'submit', function(e) {\n          return setTimeout((function() {\n            return disableElement(e);\n          }), 13);\n        });\n        delegate(document, Rails.formSubmitSelector, 'ajax:send', disableElement);\n        delegate(document, Rails.formSubmitSelector, 'ajax:complete', enableElement);\n        delegate(document, Rails.formInputClickSelector, 'click', preventInsignificantClick);\n        delegate(document, Rails.formInputClickSelector, 'click', handleDisabledElement);\n        delegate(document, Rails.formInputClickSelector, 'click', handleConfirm);\n        delegate(document, Rails.formInputClickSelector, 'click', formSubmitButtonClick);\n        document.addEventListener('DOMContentLoaded', refreshCSRFTokens);\n        document.addEventListener('DOMContentLoaded', loadCSPNonce);\n        return window._rails_loaded = true;\n      };\n\n      if (window.Rails === Rails && fire(document, 'rails:attachBindings')) {\n        Rails.start();\n      }\n\n    }).call(this);\n  }).call(this);\n\n  if (typeof module === \"object\" && module.exports) {\n    module.exports = Rails;\n  } else if (typeof define === \"function\" && define.amd) {\n    define(Rails);\n  }\n}).call(this);\n","/**\n * @preserve FastClick: polyfill to remove click delays on browsers with touch UIs.\n *\n * @version 0.6.7\n * @codingstandard ftlabs-jsv2\n * @copyright The Financial Times Limited [All Rights Reserved]\n * @license MIT License (see LICENSE.txt)\n */\n\n/*jslint browser:true, node:true*/\n/*global define, Event, Node*/\n\n\n/**\n * Instantiate fast-clicking listeners on the specificed layer.\n *\n * @constructor\n * @param {Element} layer The layer to listen on\n */\nfunction FastClick(layer) {\n\t'use strict';\n\tvar oldOnClick, self = this;\n\n\n\t/**\n\t * Whether a click is currently being tracked.\n\t *\n\t * @type boolean\n\t */\n\tthis.trackingClick = false;\n\n\n\t/**\n\t * Timestamp for when when click tracking started.\n\t *\n\t * @type number\n\t */\n\tthis.trackingClickStart = 0;\n\n\n\t/**\n\t * The element being tracked for a click.\n\t *\n\t * @type EventTarget\n\t */\n\tthis.targetElement = null;\n\n\n\t/**\n\t * X-coordinate of touch start event.\n\t *\n\t * @type number\n\t */\n\tthis.touchStartX = 0;\n\n\n\t/**\n\t * Y-coordinate of touch start event.\n\t *\n\t * @type number\n\t */\n\tthis.touchStartY = 0;\n\n\n\t/**\n\t * ID of the last touch, retrieved from Touch.identifier.\n\t *\n\t * @type number\n\t */\n\tthis.lastTouchIdentifier = 0;\n\n\n\t/**\n\t * Touchmove boundary, beyond which a click will be cancelled.\n\t *\n\t * @type number\n\t */\n\tthis.touchBoundary = 10;\n\n\n\t/**\n\t * The FastClick layer.\n\t *\n\t * @type Element\n\t */\n\tthis.layer = layer;\n\n\tif (!layer || !layer.nodeType) {\n\t\tthrow new TypeError('Layer must be a document node');\n\t}\n\n\t/** @type function() */\n\tthis.onClick = function() { return FastClick.prototype.onClick.apply(self, arguments); };\n\n\t/** @type function() */\n\tthis.onMouse = function() { return FastClick.prototype.onMouse.apply(self, arguments); };\n\n\t/** @type function() */\n\tthis.onTouchStart = function() { return FastClick.prototype.onTouchStart.apply(self, arguments); };\n\n\t/** @type function() */\n\tthis.onTouchEnd = function() { return FastClick.prototype.onTouchEnd.apply(self, arguments); };\n\n\t/** @type function() */\n\tthis.onTouchCancel = function() { return FastClick.prototype.onTouchCancel.apply(self, arguments); };\n\n\tif (FastClick.notNeeded(layer)) {\n\t\treturn;\n\t}\n\n\t// Set up event handlers as required\n\tif (this.deviceIsAndroid) {\n\t\tlayer.addEventListener('mouseover', this.onMouse, true);\n\t\tlayer.addEventListener('mousedown', this.onMouse, true);\n\t\tlayer.addEventListener('mouseup', this.onMouse, true);\n\t}\n\n\tlayer.addEventListener('click', this.onClick, true);\n\tlayer.addEventListener('touchstart', this.onTouchStart, false);\n\tlayer.addEventListener('touchend', this.onTouchEnd, false);\n\tlayer.addEventListener('touchcancel', this.onTouchCancel, false);\n\n\t// Hack is required for browsers that don't support Event#stopImmediatePropagation (e.g. Android 2)\n\t// which is how FastClick normally stops click events bubbling to callbacks registered on the FastClick\n\t// layer when they are cancelled.\n\tif (!Event.prototype.stopImmediatePropagation) {\n\t\tlayer.removeEventListener = function(type, callback, capture) {\n\t\t\tvar rmv = Node.prototype.removeEventListener;\n\t\t\tif (type === 'click') {\n\t\t\t\trmv.call(layer, type, callback.hijacked || callback, capture);\n\t\t\t} else {\n\t\t\t\trmv.call(layer, type, callback, capture);\n\t\t\t}\n\t\t};\n\n\t\tlayer.addEventListener = function(type, callback, capture) {\n\t\t\tvar adv = Node.prototype.addEventListener;\n\t\t\tif (type === 'click') {\n\t\t\t\tadv.call(layer, type, callback.hijacked || (callback.hijacked = function(event) {\n\t\t\t\t\tif (!event.propagationStopped) {\n\t\t\t\t\t\tcallback(event);\n\t\t\t\t\t}\n\t\t\t\t}), capture);\n\t\t\t} else {\n\t\t\t\tadv.call(layer, type, callback, capture);\n\t\t\t}\n\t\t};\n\t}\n\n\t// If a handler is already declared in the element's onclick attribute, it will be fired before\n\t// FastClick's onClick handler. Fix this by pulling out the user-defined handler function and\n\t// adding it as listener.\n\tif (typeof layer.onclick === 'function') {\n\n\t\t// Android browser on at least 3.2 requires a new reference to the function in layer.onclick\n\t\t// - the old one won't work if passed to addEventListener directly.\n\t\toldOnClick = layer.onclick;\n\t\tlayer.addEventListener('click', function(event) {\n\t\t\toldOnClick(event);\n\t\t}, false);\n\t\tlayer.onclick = null;\n\t}\n}\n\n\n/**\n * Android requires exceptions.\n *\n * @type boolean\n */\nFastClick.prototype.deviceIsAndroid = navigator.userAgent.indexOf('Android') > 0;\n\n\n/**\n * iOS requires exceptions.\n *\n * @type boolean\n */\nFastClick.prototype.deviceIsIOS = /iP(ad|hone|od)/.test(navigator.userAgent);\n\n\n/**\n * iOS 4 requires an exception for select elements.\n *\n * @type boolean\n */\nFastClick.prototype.deviceIsIOS4 = FastClick.prototype.deviceIsIOS && (/OS 4_\\d(_\\d)?/).test(navigator.userAgent);\n\n\n/**\n * iOS 6.0(+?) requires the target element to be manually derived\n *\n * @type boolean\n */\nFastClick.prototype.deviceIsIOSWithBadTarget = FastClick.prototype.deviceIsIOS && (/OS ([6-9]|\\d{2})_\\d/).test(navigator.userAgent);\n\n\n/**\n * Determine whether a given element requires a native click.\n *\n * @param {EventTarget|Element} target Target DOM element\n * @returns {boolean} Returns true if the element needs a native click\n */\nFastClick.prototype.needsClick = function(target) {\n\t'use strict';\n\tswitch (target.nodeName.toLowerCase()) {\n\n\t// Don't send a synthetic click to disabled inputs (issue #62)\n\tcase 'button':\n\tcase 'select':\n\tcase 'textarea':\n\t\tif (target.disabled) {\n\t\t\treturn true;\n\t\t}\n\n\t\tbreak;\n\tcase 'input':\n\n\t\t// File inputs need real clicks on iOS 6 due to a browser bug (issue #68)\n\t\tif ((this.deviceIsIOS && target.type === 'file') || target.disabled) {\n\t\t\treturn true;\n\t\t}\n\n\t\tbreak;\n\tcase 'label':\n\tcase 'video':\n\t\treturn true;\n\t}\n\n\treturn (/\\bneedsclick\\b/).test(target.className);\n};\n\n\n/**\n * Determine whether a given element requires a call to focus to simulate click into element.\n *\n * @param {EventTarget|Element} target Target DOM element\n * @returns {boolean} Returns true if the element requires a call to focus to simulate native click.\n */\nFastClick.prototype.needsFocus = function(target) {\n\t'use strict';\n\tswitch (target.nodeName.toLowerCase()) {\n\tcase 'textarea':\n\tcase 'select':\n\t\treturn true;\n\tcase 'input':\n\t\tswitch (target.type) {\n\t\tcase 'button':\n\t\tcase 'checkbox':\n\t\tcase 'file':\n\t\tcase 'image':\n\t\tcase 'radio':\n\t\tcase 'submit':\n\t\t\treturn false;\n\t\t}\n\n\t\t// No point in attempting to focus disabled inputs\n\t\treturn !target.disabled && !target.readOnly;\n\tdefault:\n\t\treturn (/\\bneedsfocus\\b/).test(target.className);\n\t}\n};\n\n\n/**\n * Send a click event to the specified element.\n *\n * @param {EventTarget|Element} targetElement\n * @param {Event} event\n */\nFastClick.prototype.sendClick = function(targetElement, event) {\n\t'use strict';\n\tvar clickEvent, touch;\n\n\t// On some Android devices activeElement needs to be blurred otherwise the synthetic click will have no effect (#24)\n\tif (document.activeElement && document.activeElement !== targetElement) {\n\t\tdocument.activeElement.blur();\n\t}\n\n\ttouch = event.changedTouches[0];\n\n\t// Synthesise a click event, with an extra attribute so it can be tracked\n\tclickEvent = document.createEvent('MouseEvents');\n\tclickEvent.initMouseEvent('click', true, true, window, 1, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, null);\n\tclickEvent.forwardedTouchEvent = true;\n\ttargetElement.dispatchEvent(clickEvent);\n};\n\n\n/**\n * @param {EventTarget|Element} targetElement\n */\nFastClick.prototype.focus = function(targetElement) {\n\t'use strict';\n\tvar length;\n\n\tif (this.deviceIsIOS && targetElement.setSelectionRange) {\n\t\tlength = targetElement.value.length;\n\t\ttargetElement.setSelectionRange(length, length);\n\t} else {\n\t\ttargetElement.focus();\n\t}\n};\n\n\n/**\n * Check whether the given target element is a child of a scrollable layer and if so, set a flag on it.\n *\n * @param {EventTarget|Element} targetElement\n */\nFastClick.prototype.updateScrollParent = function(targetElement) {\n\t'use strict';\n\tvar scrollParent, parentElement;\n\n\tscrollParent = targetElement.fastClickScrollParent;\n\n\t// Attempt to discover whether the target element is contained within a scrollable layer. Re-check if the\n\t// target element was moved to another parent.\n\tif (!scrollParent || !scrollParent.contains(targetElement)) {\n\t\tparentElement = targetElement;\n\t\tdo {\n\t\t\tif (parentElement.scrollHeight > parentElement.offsetHeight) {\n\t\t\t\tscrollParent = parentElement;\n\t\t\t\ttargetElement.fastClickScrollParent = parentElement;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tparentElement = parentElement.parentElement;\n\t\t} while (parentElement);\n\t}\n\n\t// Always update the scroll top tracker if possible.\n\tif (scrollParent) {\n\t\tscrollParent.fastClickLastScrollTop = scrollParent.scrollTop;\n\t}\n};\n\n\n/**\n * @param {EventTarget} targetElement\n * @returns {Element|EventTarget}\n */\nFastClick.prototype.getTargetElementFromEventTarget = function(eventTarget) {\n\t'use strict';\n\n\t// On some older browsers (notably Safari on iOS 4.1 - see issue #56) the event target may be a text node.\n\tif (eventTarget.nodeType === Node.TEXT_NODE) {\n\t\treturn eventTarget.parentNode;\n\t}\n\n\treturn eventTarget;\n};\n\n\n/**\n * On touch start, record the position and scroll offset.\n *\n * @param {Event} event\n * @returns {boolean}\n */\nFastClick.prototype.onTouchStart = function(event) {\n\t'use strict';\n\tvar targetElement, touch, selection;\n\n\t// Ignore multiple touches, otherwise pinch-to-zoom is prevented if both fingers are on the FastClick element (issue #111).\n\tif (event.targetTouches.length > 1) {\n\t\treturn true;\n\t}\n\n\ttargetElement = this.getTargetElementFromEventTarget(event.target);\n\ttouch = event.targetTouches[0];\n\n\tif (this.deviceIsIOS) {\n\n\t\t// Only trusted events will deselect text on iOS (issue #49)\n\t\tselection = window.getSelection();\n\t\tif (selection.rangeCount && !selection.isCollapsed) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (!this.deviceIsIOS4) {\n\n\t\t\t// Weird things happen on iOS when an alert or confirm dialog is opened from a click event callback (issue #23):\n\t\t\t// when the user next taps anywhere else on the page, new touchstart and touchend events are dispatched\n\t\t\t// with the same identifier as the touch event that previously triggered the click that triggered the alert.\n\t\t\t// Sadly, there is an issue on iOS 4 that causes some normal touch events to have the same identifier as an\n\t\t\t// immediately preceeding touch event (issue #52), so this fix is unavailable on that platform.\n\t\t\tif (touch.identifier === this.lastTouchIdentifier) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthis.lastTouchIdentifier = touch.identifier;\n\n\t\t\t// If the target element is a child of a scrollable layer (using -webkit-overflow-scrolling: touch) and:\n\t\t\t// 1) the user does a fling scroll on the scrollable layer\n\t\t\t// 2) the user stops the fling scroll with another tap\n\t\t\t// then the event.target of the last 'touchend' event will be the element that was under the user's finger\n\t\t\t// when the fling scroll was started, causing FastClick to send a click event to that layer - unless a check\n\t\t\t// is made to ensure that a parent layer was not scrolled before sending a synthetic click (issue #42).\n\t\t\tthis.updateScrollParent(targetElement);\n\t\t}\n\t}\n\n\tthis.trackingClick = true;\n\tthis.trackingClickStart = event.timeStamp;\n\tthis.targetElement = targetElement;\n\n\tthis.touchStartX = touch.pageX;\n\tthis.touchStartY = touch.pageY;\n\n\t// Prevent phantom clicks on fast double-tap (issue #36)\n\tif ((event.timeStamp - this.lastClickTime) < 200) {\n\t\tevent.preventDefault();\n\t}\n\n\treturn true;\n};\n\n\n/**\n * Based on a touchmove event object, check whether the touch has moved past a boundary since it started.\n *\n * @param {Event} event\n * @returns {boolean}\n */\nFastClick.prototype.touchHasMoved = function(event) {\n\t'use strict';\n\tvar touch = event.changedTouches[0], boundary = this.touchBoundary;\n\n\tif (Math.abs(touch.pageX - this.touchStartX) > boundary || Math.abs(touch.pageY - this.touchStartY) > boundary) {\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\n\n/**\n * Attempt to find the labelled control for the given label element.\n *\n * @param {EventTarget|HTMLLabelElement} labelElement\n * @returns {Element|null}\n */\nFastClick.prototype.findControl = function(labelElement) {\n\t'use strict';\n\n\t// Fast path for newer browsers supporting the HTML5 control attribute\n\tif (labelElement.control !== undefined) {\n\t\treturn labelElement.control;\n\t}\n\n\t// All browsers under test that support touch events also support the HTML5 htmlFor attribute\n\tif (labelElement.htmlFor) {\n\t\treturn document.getElementById(labelElement.htmlFor);\n\t}\n\n\t// If no for attribute exists, attempt to retrieve the first labellable descendant element\n\t// the list of which is defined here: http://www.w3.org/TR/html5/forms.html#category-label\n\treturn labelElement.querySelector('button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea');\n};\n\n\n/**\n * On touch end, determine whether to send a click event at once.\n *\n * @param {Event} event\n * @returns {boolean}\n */\nFastClick.prototype.onTouchEnd = function(event) {\n\t'use strict';\n\tvar forElement, trackingClickStart, targetTagName, scrollParent, touch, targetElement = this.targetElement;\n\n\t// If the touch has moved, cancel the click tracking\n\tif (this.touchHasMoved(event)) {\n\t\tthis.trackingClick = false;\n\t\tthis.targetElement = null;\n\t}\n\n\tif (!this.trackingClick) {\n\t\treturn true;\n\t}\n\n\t// Prevent phantom clicks on fast double-tap (issue #36)\n\tif ((event.timeStamp - this.lastClickTime) < 200) {\n\t\tthis.cancelNextClick = true;\n\t\treturn true;\n\t}\n\n\tthis.lastClickTime = event.timeStamp;\n\n\ttrackingClickStart = this.trackingClickStart;\n\tthis.trackingClick = false;\n\tthis.trackingClickStart = 0;\n\n\t// On some iOS devices, the targetElement supplied with the event is invalid if the layer\n\t// is performing a transition or scroll, and has to be re-detected manually. Note that\n\t// for this to function correctly, it must be called *after* the event target is checked!\n\t// See issue #57; also filed as rdar://13048589 .\n\tif (this.deviceIsIOSWithBadTarget) {\n\t\ttouch = event.changedTouches[0];\n\t\ttargetElement = document.elementFromPoint(touch.pageX - window.pageXOffset, touch.pageY - window.pageYOffset);\n\t}\n\n\ttargetTagName = targetElement.tagName.toLowerCase();\n\tif (targetTagName === 'label') {\n\t\tforElement = this.findControl(targetElement);\n\t\tif (forElement) {\n\t\t\tthis.focus(targetElement);\n\t\t\tif (this.deviceIsAndroid) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\ttargetElement = forElement;\n\t\t}\n\t} else if (this.needsFocus(targetElement)) {\n\n\t\t// Case 1: If the touch started a while ago (best guess is 100ms based on tests for issue #36) then focus will be triggered anyway. Return early and unset the target element reference so that the subsequent click will be allowed through.\n\t\t// Case 2: Without this exception for input elements tapped when the document is contained in an iframe, then any inputted text won't be visible even though the value attribute is updated as the user types (issue #37).\n\t\tif ((event.timeStamp - trackingClickStart) > 100 || (this.deviceIsIOS && window.top !== window && targetTagName === 'input')) {\n\t\t\tthis.targetElement = null;\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.focus(targetElement);\n\n\t\t// Select elements need the event to go through on iOS 4, otherwise the selector menu won't open.\n\t\tif (!this.deviceIsIOS4 || targetTagName !== 'select') {\n\t\t\tthis.targetElement = null;\n\t\t\tevent.preventDefault();\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tif (this.deviceIsIOS && !this.deviceIsIOS4) {\n\n\t\t// Don't send a synthetic click event if the target element is contained within a parent layer that was scrolled\n\t\t// and this tap is being used to stop the scrolling (usually initiated by a fling - issue #42).\n\t\tscrollParent = targetElement.fastClickScrollParent;\n\t\tif (scrollParent && scrollParent.fastClickLastScrollTop !== scrollParent.scrollTop) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\t// Prevent the actual click from going though - unless the target node is marked as requiring\n\t// real clicks or if it is in the whitelist in which case only non-programmatic clicks are permitted.\n\tif (!this.needsClick(targetElement)) {\n\t\tevent.preventDefault();\n\t\tthis.sendClick(targetElement, event);\n\t}\n\n\treturn false;\n};\n\n\n/**\n * On touch cancel, stop tracking the click.\n *\n * @returns {void}\n */\nFastClick.prototype.onTouchCancel = function() {\n\t'use strict';\n\tthis.trackingClick = false;\n\tthis.targetElement = null;\n};\n\n\n/**\n * Determine mouse events which should be permitted.\n *\n * @param {Event} event\n * @returns {boolean}\n */\nFastClick.prototype.onMouse = function(event) {\n\t'use strict';\n\n\t// If a target element was never set (because a touch event was never fired) allow the event\n\tif (!this.targetElement) {\n\t\treturn true;\n\t}\n\n\tif (event.forwardedTouchEvent) {\n\t\treturn true;\n\t}\n\n\t// Programmatically generated events targeting a specific element should be permitted\n\tif (!event.cancelable) {\n\t\treturn true;\n\t}\n\n\t// Derive and check the target element to see whether the mouse event needs to be permitted;\n\t// unless explicitly enabled, prevent non-touch click events from triggering actions,\n\t// to prevent ghost/doubleclicks.\n\tif (!this.needsClick(this.targetElement) || this.cancelNextClick) {\n\n\t\t// Prevent any user-added listeners declared on FastClick element from being fired.\n\t\tif (event.stopImmediatePropagation) {\n\t\t\tevent.stopImmediatePropagation();\n\t\t} else {\n\n\t\t\t// Part of the hack for browsers that don't support Event#stopImmediatePropagation (e.g. Android 2)\n\t\t\tevent.propagationStopped = true;\n\t\t}\n\n\t\t// Cancel the event\n\t\tevent.stopPropagation();\n\t\tevent.preventDefault();\n\n\t\treturn false;\n\t}\n\n\t// If the mouse event is permitted, return true for the action to go through.\n\treturn true;\n};\n\n\n/**\n * On actual clicks, determine whether this is a touch-generated click, a click action occurring\n * naturally after a delay after a touch (which needs to be cancelled to avoid duplication), or\n * an actual click which should be permitted.\n *\n * @param {Event} event\n * @returns {boolean}\n */\nFastClick.prototype.onClick = function(event) {\n\t'use strict';\n\tvar permitted;\n\n\t// It's possible for another FastClick-like library delivered with third-party code to fire a click event before FastClick does (issue #44). In that case, set the click-tracking flag back to false and return early. This will cause onTouchEnd to return early.\n\tif (this.trackingClick) {\n\t\tthis.targetElement = null;\n\t\tthis.trackingClick = false;\n\t\treturn true;\n\t}\n\n\t// Very odd behaviour on iOS (issue #18): if a submit element is present inside a form and the user hits enter in the iOS simulator or clicks the Go button on the pop-up OS keyboard the a kind of 'fake' click event will be triggered with the submit-type input element as the target.\n\tif (event.target.type === 'submit' && event.detail === 0) {\n\t\treturn true;\n\t}\n\n\tpermitted = this.onMouse(event);\n\n\t// Only unset targetElement if the click is not permitted. This will ensure that the check for !targetElement in onMouse fails and the browser's click doesn't go through.\n\tif (!permitted) {\n\t\tthis.targetElement = null;\n\t}\n\n\t// If clicks are permitted, return true for the action to go through.\n\treturn permitted;\n};\n\n\n/**\n * Remove all FastClick's event listeners.\n *\n * @returns {void}\n */\nFastClick.prototype.destroy = function() {\n\t'use strict';\n\tvar layer = this.layer;\n\n\tif (this.deviceIsAndroid) {\n\t\tlayer.removeEventListener('mouseover', this.onMouse, true);\n\t\tlayer.removeEventListener('mousedown', this.onMouse, true);\n\t\tlayer.removeEventListener('mouseup', this.onMouse, true);\n\t}\n\n\tlayer.removeEventListener('click', this.onClick, true);\n\tlayer.removeEventListener('touchstart', this.onTouchStart, false);\n\tlayer.removeEventListener('touchend', this.onTouchEnd, false);\n\tlayer.removeEventListener('touchcancel', this.onTouchCancel, false);\n};\n\n\n/**\n * Check whether FastClick is needed.\n *\n * @param {Element} layer The layer to listen on\n */\nFastClick.notNeeded = function(layer) {\n\t'use strict';\n\tvar metaViewport;\n\n\t// Devices that don't support touch don't need FastClick\n\tif (typeof window.ontouchstart === 'undefined') {\n\t\treturn true;\n\t}\n\n\tif ((/Chrome\\/[0-9]+/).test(navigator.userAgent)) {\n\n\t\t// Chrome on Android with user-scalable=\"no\" doesn't need FastClick (issue #89)\n\t\tif (FastClick.prototype.deviceIsAndroid) {\n\t\t\tmetaViewport = document.querySelector('meta[name=viewport]');\n\t\t\tif (metaViewport && metaViewport.content.indexOf('user-scalable=no') !== -1) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t// Chrome desktop doesn't need FastClick (issue #15)\n\t\t} else {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\t// IE10 with -ms-touch-action: none, which disables double-tap-to-zoom (issue #97)\n\tif (layer.style.msTouchAction === 'none') {\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\n\n/**\n * Factory method for creating a FastClick object\n *\n * @param {Element} layer The layer to listen on\n */\nFastClick.attach = function(layer) {\n\t'use strict';\n\treturn new FastClick(layer);\n};\n\n\nif (typeof define !== 'undefined' && define.amd) {\n\n\t// AMD. Register as an anonymous module.\n\tdefine(function() {\n\t\t'use strict';\n\t\treturn FastClick;\n\t});\n} else if (typeof module !== 'undefined' && module.exports) {\n\tmodule.exports = FastClick.attach;\n\tmodule.exports.FastClick = FastClick;\n} else {\n\twindow.FastClick = FastClick;\n}\n","/*!\n  * Bootstrap v5.1.3 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('@popperjs/core')) :\n  typeof define === 'function' && define.amd ? define(['@popperjs/core'], factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrap = factory(global.Popper));\n})(this, (function (Popper) { 'use strict';\n\n  function _interopNamespace(e) {\n    if (e && e.__esModule) return e;\n    const n = Object.create(null);\n    if (e) {\n      for (const k in e) {\n        if (k !== 'default') {\n          const d = Object.getOwnPropertyDescriptor(e, k);\n          Object.defineProperty(n, k, d.get ? d : {\n            enumerable: true,\n            get: () => e[k]\n          });\n        }\n      }\n    }\n    n.default = e;\n    return Object.freeze(n);\n  }\n\n  const Popper__namespace = /*#__PURE__*/_interopNamespace(Popper);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.1.3): util/index.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const MAX_UID = 1000000;\n  const MILLISECONDS_MULTIPLIER = 1000;\n  const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n  const toType = obj => {\n    if (obj === null || obj === undefined) {\n      return `${obj}`;\n    }\n\n    return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n  };\n  /**\n   * --------------------------------------------------------------------------\n   * Public Util Api\n   * --------------------------------------------------------------------------\n   */\n\n\n  const getUID = prefix => {\n    do {\n      prefix += Math.floor(Math.random() * MAX_UID);\n    } while (document.getElementById(prefix));\n\n    return prefix;\n  };\n\n  const getSelector = element => {\n    let selector = element.getAttribute('data-bs-target');\n\n    if (!selector || selector === '#') {\n      let hrefAttr = element.getAttribute('href'); // 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\n      if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n        return null;\n      } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n      if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n        hrefAttr = `#${hrefAttr.split('#')[1]}`;\n      }\n\n      selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n    }\n\n    return selector;\n  };\n\n  const getSelectorFromElement = element => {\n    const selector = getSelector(element);\n\n    if (selector) {\n      return document.querySelector(selector) ? selector : null;\n    }\n\n    return null;\n  };\n\n  const getElementFromSelector = element => {\n    const selector = getSelector(element);\n    return selector ? document.querySelector(selector) : null;\n  };\n\n  const getTransitionDurationFromElement = element => {\n    if (!element) {\n      return 0;\n    } // Get transition-duration of the element\n\n\n    let {\n      transitionDuration,\n      transitionDelay\n    } = window.getComputedStyle(element);\n    const floatTransitionDuration = Number.parseFloat(transitionDuration);\n    const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n    if (!floatTransitionDuration && !floatTransitionDelay) {\n      return 0;\n    } // If multiple durations are defined, take the first\n\n\n    transitionDuration = transitionDuration.split(',')[0];\n    transitionDelay = transitionDelay.split(',')[0];\n    return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n  };\n\n  const triggerTransitionEnd = element => {\n    element.dispatchEvent(new Event(TRANSITION_END));\n  };\n\n  const isElement = obj => {\n    if (!obj || typeof obj !== 'object') {\n      return false;\n    }\n\n    if (typeof obj.jquery !== 'undefined') {\n      obj = obj[0];\n    }\n\n    return typeof obj.nodeType !== 'undefined';\n  };\n\n  const getElement = obj => {\n    if (isElement(obj)) {\n      // it's a jQuery object or a node element\n      return obj.jquery ? obj[0] : obj;\n    }\n\n    if (typeof obj === 'string' && obj.length > 0) {\n      return document.querySelector(obj);\n    }\n\n    return null;\n  };\n\n  const typeCheckConfig = (componentName, config, configTypes) => {\n    Object.keys(configTypes).forEach(property => {\n      const expectedTypes = configTypes[property];\n      const value = config[property];\n      const valueType = value && isElement(value) ? 'element' : toType(value);\n\n      if (!new RegExp(expectedTypes).test(valueType)) {\n        throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n      }\n    });\n  };\n\n  const isVisible = element => {\n    if (!isElement(element) || element.getClientRects().length === 0) {\n      return false;\n    }\n\n    return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n  };\n\n  const 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\n  const findShadowRoot = element => {\n    if (!document.documentElement.attachShadow) {\n      return null;\n    } // Can find the shadow root otherwise it'll return the document\n\n\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    } // when we don't find a shadow root\n\n\n    if (!element.parentNode) {\n      return null;\n    }\n\n    return findShadowRoot(element.parentNode);\n  };\n\n  const noop = () => {};\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   */\n\n\n  const reflow = element => {\n    // eslint-disable-next-line no-unused-expressions\n    element.offsetHeight;\n  };\n\n  const getjQuery = () => {\n    const {\n      jQuery\n    } = window;\n\n    if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n      return jQuery;\n    }\n\n    return null;\n  };\n\n  const DOMContentLoadedCallbacks = [];\n\n  const 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          DOMContentLoadedCallbacks.forEach(callback => callback());\n        });\n      }\n\n      DOMContentLoadedCallbacks.push(callback);\n    } else {\n      callback();\n    }\n  };\n\n  const isRTL = () => document.documentElement.dir === 'rtl';\n\n  const defineJQueryPlugin = plugin => {\n    onDOMContentLoaded(() => {\n      const $ = getjQuery();\n      /* istanbul ignore if */\n\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\n        $.fn[name].noConflict = () => {\n          $.fn[name] = JQUERY_NO_CONFLICT;\n          return plugin.jQueryInterface;\n        };\n      }\n    });\n  };\n\n  const execute = callback => {\n    if (typeof callback === 'function') {\n      callback();\n    }\n  };\n\n  const 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    let called = false;\n\n    const handler = ({\n      target\n    }) => {\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   * 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   */\n\n\n  const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n    let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n    if (index === -1) {\n      return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n    }\n\n    const listLength = list.length;\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\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.1.3): dom/event-handler.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\n  const stripNameRegex = /\\..*/;\n  const stripUidRegex = /::\\d+$/;\n  const eventRegistry = {}; // Events storage\n\n  let uidEvent = 1;\n  const customEvents = {\n    mouseenter: 'mouseover',\n    mouseleave: 'mouseout'\n  };\n  const customEventsRegex = /^(mouseenter|mouseleave)/i;\n  const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n  /**\n   * ------------------------------------------------------------------------\n   * Private methods\n   * ------------------------------------------------------------------------\n   */\n\n  function getUidEvent(element, uid) {\n    return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n  }\n\n  function getEvent(element) {\n    const uid = getUidEvent(element);\n    element.uidEvent = uid;\n    eventRegistry[uid] = eventRegistry[uid] || {};\n    return eventRegistry[uid];\n  }\n\n  function bootstrapHandler(element, fn) {\n    return function handler(event) {\n      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\n  function bootstrapDelegationHandler(element, selector, fn) {\n    return function handler(event) {\n      const domElements = element.querySelectorAll(selector);\n\n      for (let {\n        target\n      } = event; target && target !== this; target = target.parentNode) {\n        for (let i = domElements.length; i--;) {\n          if (domElements[i] === target) {\n            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      } // To please ESLint\n\n\n      return null;\n    };\n  }\n\n  function findHandler(events, handler, delegationSelector = null) {\n    const uidEventList = Object.keys(events);\n\n    for (let i = 0, len = uidEventList.length; i < len; i++) {\n      const event = events[uidEventList[i]];\n\n      if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n        return event;\n      }\n    }\n\n    return null;\n  }\n\n  function normalizeParams(originalTypeEvent, handler, delegationFn) {\n    const delegation = typeof handler === 'string';\n    const originalHandler = delegation ? delegationFn : handler;\n    let typeEvent = getTypeEvent(originalTypeEvent);\n    const isNative = nativeEvents.has(typeEvent);\n\n    if (!isNative) {\n      typeEvent = originalTypeEvent;\n    }\n\n    return [delegation, originalHandler, typeEvent];\n  }\n\n  function addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    if (!handler) {\n      handler = delegationFn;\n      delegationFn = null;\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\n\n    if (customEventsRegex.test(originalTypeEvent)) {\n      const wrapFn = 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      if (delegationFn) {\n        delegationFn = wrapFn(delegationFn);\n      } else {\n        handler = wrapFn(handler);\n      }\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const events = getEvent(element);\n    const handlers = events[typeEvent] || (events[typeEvent] = {});\n    const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n    if (previousFn) {\n      previousFn.oneOff = previousFn.oneOff && oneOff;\n      return;\n    }\n\n    const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n    const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n    fn.delegationSelector = delegation ? handler : null;\n    fn.originalHandler = originalHandler;\n    fn.oneOff = oneOff;\n    fn.uidEvent = uid;\n    handlers[uid] = fn;\n    element.addEventListener(typeEvent, fn, delegation);\n  }\n\n  function 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\n  function removeNamespacedHandlers(element, events, typeEvent, namespace) {\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(handlerKey => {\n      if (handlerKey.includes(namespace)) {\n        const event = storeElementEvent[handlerKey];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  }\n\n  function 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\n  const EventHandler = {\n    on(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, false);\n    },\n\n    one(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, true);\n    },\n\n    off(element, originalTypeEvent, handler, delegationFn) {\n      if (typeof originalTypeEvent !== 'string' || !element) {\n        return;\n      }\n\n      const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n      const inNamespace = typeEvent !== originalTypeEvent;\n      const events = getEvent(element);\n      const isNamespace = originalTypeEvent.startsWith('.');\n\n      if (typeof originalHandler !== 'undefined') {\n        // Simplest case: handler is passed, remove that listener ONLY.\n        if (!events || !events[typeEvent]) {\n          return;\n        }\n\n        removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n        return;\n      }\n\n      if (isNamespace) {\n        Object.keys(events).forEach(elementEvent => {\n          removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n        });\n      }\n\n      const storeElementEvent = events[typeEvent] || {};\n      Object.keys(storeElementEvent).forEach(keyHandlers => {\n        const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n        if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n          const event = storeElementEvent[keyHandlers];\n          removeHandler(element, events, typeEvent, event.originalHandler, 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      const isNative = nativeEvents.has(typeEvent);\n      let jQueryEvent;\n      let bubbles = true;\n      let nativeDispatch = true;\n      let defaultPrevented = false;\n      let evt = null;\n\n      if (inNamespace && $) {\n        jQueryEvent = $.Event(event, args);\n        $(element).trigger(jQueryEvent);\n        bubbles = !jQueryEvent.isPropagationStopped();\n        nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n        defaultPrevented = jQueryEvent.isDefaultPrevented();\n      }\n\n      if (isNative) {\n        evt = document.createEvent('HTMLEvents');\n        evt.initEvent(typeEvent, bubbles, true);\n      } else {\n        evt = new CustomEvent(event, {\n          bubbles,\n          cancelable: true\n        });\n      } // merge custom information in our event\n\n\n      if (typeof args !== 'undefined') {\n        Object.keys(args).forEach(key => {\n          Object.defineProperty(evt, key, {\n            get() {\n              return args[key];\n            }\n\n          });\n        });\n      }\n\n      if (defaultPrevented) {\n        evt.preventDefault();\n      }\n\n      if (nativeDispatch) {\n        element.dispatchEvent(evt);\n      }\n\n      if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n        jQueryEvent.preventDefault();\n      }\n\n      return evt;\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.1.3): dom/data.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const elementMap = new Map();\n  const Data = {\n    set(element, key, instance) {\n      if (!elementMap.has(element)) {\n        elementMap.set(element, new Map());\n      }\n\n      const instanceMap = elementMap.get(element); // 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\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      instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n      if (instanceMap.size === 0) {\n        elementMap.delete(element);\n      }\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.1.3): base-component.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const VERSION = '5.1.3';\n\n  class BaseComponent {\n    constructor(element) {\n      element = getElement(element);\n\n      if (!element) {\n        return;\n      }\n\n      this._element = element;\n      Data.set(this._element, this.constructor.DATA_KEY, this);\n    }\n\n    dispose() {\n      Data.remove(this._element, this.constructor.DATA_KEY);\n      EventHandler.off(this._element, this.constructor.EVENT_KEY);\n      Object.getOwnPropertyNames(this).forEach(propertyName => {\n        this[propertyName] = null;\n      });\n    }\n\n    _queueCallback(callback, element, isAnimated = true) {\n      executeAfterTransition(callback, element, isAnimated);\n    }\n    /** Static */\n\n\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 NAME() {\n      throw new Error('You have to implement the static method \"NAME\", for each component!');\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  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.1.3): util/component-functions.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  const enableDismissTrigger = (component, method = 'hide') => {\n    const clickEvent = `click.dismiss${component.EVENT_KEY}`;\n    const name = component.NAME;\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 = getElementFromSelector(this) || this.closest(`.${name}`);\n      const instance = component.getOrCreateInstance(target); // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n\n      instance[method]();\n    });\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.1.3): alert.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$d = 'alert';\n  const DATA_KEY$c = 'bs.alert';\n  const EVENT_KEY$c = `.${DATA_KEY$c}`;\n  const EVENT_CLOSE = `close${EVENT_KEY$c}`;\n  const EVENT_CLOSED = `closed${EVENT_KEY$c}`;\n  const CLASS_NAME_FADE$5 = 'fade';\n  const CLASS_NAME_SHOW$8 = 'show';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Alert extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$d;\n    } // Public\n\n\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$8);\n\n      const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);\n\n      this._queueCallback(() => this._destroyElement(), this._element, isAnimated);\n    } // Private\n\n\n    _destroyElement() {\n      this._element.remove();\n\n      EventHandler.trigger(this._element, EVENT_CLOSED);\n      this.dispose();\n    } // Static\n\n\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   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  enableDismissTrigger(Alert, 'close');\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Alert to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Alert);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.1.3): button.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$c = 'button';\n  const DATA_KEY$b = 'bs.button';\n  const EVENT_KEY$b = `.${DATA_KEY$b}`;\n  const DATA_API_KEY$7 = '.data-api';\n  const CLASS_NAME_ACTIVE$3 = 'active';\n  const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\n  const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$b}${DATA_API_KEY$7}`;\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Button extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$c;\n    } // Public\n\n\n    toggle() {\n      // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n      this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Button.getOrCreateInstance(this);\n\n        if (config === 'toggle') {\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n    event.preventDefault();\n    const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n    const data = Button.getOrCreateInstance(button);\n    data.toggle();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Button to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Button);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.1.3): dom/manipulator.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  function normalizeData(val) {\n    if (val === 'true') {\n      return true;\n    }\n\n    if (val === 'false') {\n      return false;\n    }\n\n    if (val === Number(val).toString()) {\n      return Number(val);\n    }\n\n    if (val === '' || val === 'null') {\n      return null;\n    }\n\n    return val;\n  }\n\n  function normalizeDataKey(key) {\n    return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n  }\n\n  const 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      Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\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      return attributes;\n    },\n\n    getDataAttribute(element, key) {\n      return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n    },\n\n    offset(element) {\n      const rect = element.getBoundingClientRect();\n      return {\n        top: rect.top + window.pageYOffset,\n        left: rect.left + window.pageXOffset\n      };\n    },\n\n    position(element) {\n      return {\n        top: element.offsetTop,\n        left: element.offsetLeft\n      };\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.1.3): dom/selector-engine.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const NODE_TEXT = 3;\n  const 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;\n\n      while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n        if (ancestor.matches(selector)) {\n          parents.push(ancestor);\n        }\n\n        ancestor = ancestor.parentNode;\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\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 = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable=\"true\"]'].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(', ');\n      return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.1.3): carousel.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$b = 'carousel';\n  const DATA_KEY$a = 'bs.carousel';\n  const EVENT_KEY$a = `.${DATA_KEY$a}`;\n  const DATA_API_KEY$6 = '.data-api';\n  const ARROW_LEFT_KEY = 'ArrowLeft';\n  const ARROW_RIGHT_KEY = 'ArrowRight';\n  const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n  const SWIPE_THRESHOLD = 40;\n  const Default$a = {\n    interval: 5000,\n    keyboard: true,\n    slide: false,\n    pause: 'hover',\n    wrap: true,\n    touch: true\n  };\n  const DefaultType$a = {\n    interval: '(number|boolean)',\n    keyboard: 'boolean',\n    slide: '(boolean|string)',\n    pause: '(string|boolean)',\n    wrap: 'boolean',\n    touch: 'boolean'\n  };\n  const ORDER_NEXT = 'next';\n  const ORDER_PREV = 'prev';\n  const DIRECTION_LEFT = 'left';\n  const DIRECTION_RIGHT = 'right';\n  const KEY_TO_DIRECTION = {\n    [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n    [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n  };\n  const EVENT_SLIDE = `slide${EVENT_KEY$a}`;\n  const EVENT_SLID = `slid${EVENT_KEY$a}`;\n  const EVENT_KEYDOWN = `keydown${EVENT_KEY$a}`;\n  const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$a}`;\n  const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$a}`;\n  const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$a}`;\n  const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$a}`;\n  const EVENT_TOUCHEND = `touchend${EVENT_KEY$a}`;\n  const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$a}`;\n  const EVENT_POINTERUP = `pointerup${EVENT_KEY$a}`;\n  const EVENT_DRAG_START = `dragstart${EVENT_KEY$a}`;\n  const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$a}${DATA_API_KEY$6}`;\n  const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`;\n  const CLASS_NAME_CAROUSEL = 'carousel';\n  const CLASS_NAME_ACTIVE$2 = 'active';\n  const CLASS_NAME_SLIDE = 'slide';\n  const CLASS_NAME_END = 'carousel-item-end';\n  const CLASS_NAME_START = 'carousel-item-start';\n  const CLASS_NAME_NEXT = 'carousel-item-next';\n  const CLASS_NAME_PREV = 'carousel-item-prev';\n  const CLASS_NAME_POINTER_EVENT = 'pointer-event';\n  const SELECTOR_ACTIVE$1 = '.active';\n  const SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\n  const SELECTOR_ITEM = '.carousel-item';\n  const SELECTOR_ITEM_IMG = '.carousel-item img';\n  const SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\n  const SELECTOR_INDICATORS = '.carousel-indicators';\n  const SELECTOR_INDICATOR = '[data-bs-target]';\n  const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\n  const SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\n  const POINTER_TYPE_TOUCH = 'touch';\n  const POINTER_TYPE_PEN = 'pen';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Carousel extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._items = null;\n      this._interval = null;\n      this._activeElement = null;\n      this._isPaused = false;\n      this._isSliding = false;\n      this.touchTimeout = null;\n      this.touchStartX = 0;\n      this.touchDeltaX = 0;\n      this._config = this._getConfig(config);\n      this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n      this._pointerEvent = Boolean(window.PointerEvent);\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$a;\n    }\n\n    static get NAME() {\n      return NAME$b;\n    } // Public\n\n\n    next() {\n      this._slide(ORDER_NEXT);\n    }\n\n    nextWhenVisible() {\n      // Don't call next when the page isn't visible\n      // or the carousel or its parent isn't visible\n      if (!document.hidden && isVisible(this._element)) {\n        this.next();\n      }\n    }\n\n    prev() {\n      this._slide(ORDER_PREV);\n    }\n\n    pause(event) {\n      if (!event) {\n        this._isPaused = true;\n      }\n\n      if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n        triggerTransitionEnd(this._element);\n        this.cycle(true);\n      }\n\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    cycle(event) {\n      if (!event) {\n        this._isPaused = false;\n      }\n\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n\n      if (this._config && this._config.interval && !this._isPaused) {\n        this._updateInterval();\n\n        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n      }\n    }\n\n    to(index) {\n      this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeIndex = this._getItemIndex(this._activeElement);\n\n      if (index > this._items.length - 1 || index < 0) {\n        return;\n      }\n\n      if (this._isSliding) {\n        EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n        return;\n      }\n\n      if (activeIndex === index) {\n        this.pause();\n        this.cycle();\n        return;\n      }\n\n      const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n      this._slide(order, this._items[index]);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$a,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$b, config, DefaultType$a);\n      return config;\n    }\n\n    _handleSwipe() {\n      const absDeltax = Math.abs(this.touchDeltaX);\n\n      if (absDeltax <= SWIPE_THRESHOLD) {\n        return;\n      }\n\n      const direction = absDeltax / this.touchDeltaX;\n      this.touchDeltaX = 0;\n\n      if (!direction) {\n        return;\n      }\n\n      this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n    }\n\n    _addEventListeners() {\n      if (this._config.keyboard) {\n        EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n      }\n\n      if (this._config.pause === 'hover') {\n        EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n        EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n      }\n\n      if (this._config.touch && this._touchSupported) {\n        this._addTouchEventListeners();\n      }\n    }\n\n    _addTouchEventListeners() {\n      const hasPointerPenTouch = event => {\n        return this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH);\n      };\n\n      const start = event => {\n        if (hasPointerPenTouch(event)) {\n          this.touchStartX = event.clientX;\n        } else if (!this._pointerEvent) {\n          this.touchStartX = event.touches[0].clientX;\n        }\n      };\n\n      const move = event => {\n        // ensure swiping with one touch and not pinching\n        this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n      };\n\n      const end = event => {\n        if (hasPointerPenTouch(event)) {\n          this.touchDeltaX = event.clientX - this.touchStartX;\n        }\n\n        this._handleSwipe();\n\n        if (this._config.pause === 'hover') {\n          // If it's a touch-enabled device, mouseenter/leave are fired as\n          // part of the mouse compatibility events on first tap - the carousel\n          // would stop cycling until user tapped out of it;\n          // here, we listen for touchend, explicitly pause the carousel\n          // (as if it's the second time we tap on it, mouseenter compat event\n          // is NOT fired) and after a timeout (to allow for mouse compatibility\n          // events to fire) we explicitly restart cycling\n          this.pause();\n\n          if (this.touchTimeout) {\n            clearTimeout(this.touchTimeout);\n          }\n\n          this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n        }\n      };\n\n      SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n        EventHandler.on(itemImg, EVENT_DRAG_START, event => event.preventDefault());\n      });\n\n      if (this._pointerEvent) {\n        EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n        EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n        this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n      } else {\n        EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n        EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n        EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n      }\n    }\n\n    _keydown(event) {\n      if (/input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n\n      const direction = KEY_TO_DIRECTION[event.key];\n\n      if (direction) {\n        event.preventDefault();\n\n        this._slide(direction);\n      }\n    }\n\n    _getItemIndex(element) {\n      this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n      return this._items.indexOf(element);\n    }\n\n    _getItemByOrder(order, activeElement) {\n      const isNext = order === ORDER_NEXT;\n      return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n    }\n\n    _triggerSlideEvent(relatedTarget, eventDirectionName) {\n      const targetIndex = this._getItemIndex(relatedTarget);\n\n      const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n      return EventHandler.trigger(this._element, EVENT_SLIDE, {\n        relatedTarget,\n        direction: eventDirectionName,\n        from: fromIndex,\n        to: targetIndex\n      });\n    }\n\n    _setActiveIndicatorElement(element) {\n      if (this._indicatorsElement) {\n        const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n        activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n        activeIndicator.removeAttribute('aria-current');\n        const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n        for (let i = 0; i < indicators.length; i++) {\n          if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n            indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n            indicators[i].setAttribute('aria-current', 'true');\n            break;\n          }\n        }\n      }\n    }\n\n    _updateInterval() {\n      const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      if (!element) {\n        return;\n      }\n\n      const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n      if (elementInterval) {\n        this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n        this._config.interval = elementInterval;\n      } else {\n        this._config.interval = this._config.defaultInterval || this._config.interval;\n      }\n    }\n\n    _slide(directionOrOrder, element) {\n      const order = this._directionToOrder(directionOrOrder);\n\n      const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeElementIndex = this._getItemIndex(activeElement);\n\n      const nextElement = element || this._getItemByOrder(order, activeElement);\n\n      const nextElementIndex = this._getItemIndex(nextElement);\n\n      const isCycling = Boolean(this._interval);\n      const isNext = order === ORDER_NEXT;\n      const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n      const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n      const eventDirectionName = this._orderToDirection(order);\n\n      if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n        this._isSliding = false;\n        return;\n      }\n\n      if (this._isSliding) {\n        return;\n      }\n\n      const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n      if (slideEvent.defaultPrevented) {\n        return;\n      }\n\n      if (!activeElement || !nextElement) {\n        // Some weirdness is happening, so we bail\n        return;\n      }\n\n      this._isSliding = true;\n\n      if (isCycling) {\n        this.pause();\n      }\n\n      this._setActiveIndicatorElement(nextElement);\n\n      this._activeElement = nextElement;\n\n      const triggerSlidEvent = () => {\n        EventHandler.trigger(this._element, EVENT_SLID, {\n          relatedTarget: nextElement,\n          direction: eventDirectionName,\n          from: activeElementIndex,\n          to: nextElementIndex\n        });\n      };\n\n      if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n        nextElement.classList.add(orderClassName);\n        reflow(nextElement);\n        activeElement.classList.add(directionalClassName);\n        nextElement.classList.add(directionalClassName);\n\n        const completeCallBack = () => {\n          nextElement.classList.remove(directionalClassName, orderClassName);\n          nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n          activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n          this._isSliding = false;\n          setTimeout(triggerSlidEvent, 0);\n        };\n\n        this._queueCallback(completeCallBack, activeElement, true);\n      } else {\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        this._isSliding = false;\n        triggerSlidEvent();\n      }\n\n      if (isCycling) {\n        this.cycle();\n      }\n    }\n\n    _directionToOrder(direction) {\n      if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n        return direction;\n      }\n\n      if (isRTL()) {\n        return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n      }\n\n      return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n    }\n\n    _orderToDirection(order) {\n      if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n        return order;\n      }\n\n      if (isRTL()) {\n        return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n      }\n\n      return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n    } // Static\n\n\n    static carouselInterface(element, config) {\n      const data = Carousel.getOrCreateInstance(element, config);\n      let {\n        _config\n      } = data;\n\n      if (typeof config === 'object') {\n        _config = { ..._config,\n          ...config\n        };\n      }\n\n      const action = typeof config === 'string' ? config : _config.slide;\n\n      if (typeof config === 'number') {\n        data.to(config);\n      } else if (typeof action === 'string') {\n        if (typeof data[action] === 'undefined') {\n          throw new TypeError(`No method named \"${action}\"`);\n        }\n\n        data[action]();\n      } else if (_config.interval && _config.ride) {\n        data.pause();\n        data.cycle();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Carousel.carouselInterface(this, config);\n      });\n    }\n\n    static dataApiClickHandler(event) {\n      const target = getElementFromSelector(this);\n\n      if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n        return;\n      }\n\n      const config = { ...Manipulator.getDataAttributes(target),\n        ...Manipulator.getDataAttributes(this)\n      };\n      const slideIndex = this.getAttribute('data-bs-slide-to');\n\n      if (slideIndex) {\n        config.interval = false;\n      }\n\n      Carousel.carouselInterface(target, config);\n\n      if (slideIndex) {\n        Carousel.getInstance(target).to(slideIndex);\n      }\n\n      event.preventDefault();\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\n  EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n    const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n    for (let i = 0, len = carousels.length; i < len; i++) {\n      Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Carousel to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Carousel);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.1.3): collapse.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$a = 'collapse';\n  const DATA_KEY$9 = 'bs.collapse';\n  const EVENT_KEY$9 = `.${DATA_KEY$9}`;\n  const DATA_API_KEY$5 = '.data-api';\n  const Default$9 = {\n    toggle: true,\n    parent: null\n  };\n  const DefaultType$9 = {\n    toggle: 'boolean',\n    parent: '(null|element)'\n  };\n  const EVENT_SHOW$5 = `show${EVENT_KEY$9}`;\n  const EVENT_SHOWN$5 = `shown${EVENT_KEY$9}`;\n  const EVENT_HIDE$5 = `hide${EVENT_KEY$9}`;\n  const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$9}`;\n  const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$9}${DATA_API_KEY$5}`;\n  const CLASS_NAME_SHOW$7 = 'show';\n  const CLASS_NAME_COLLAPSE = 'collapse';\n  const CLASS_NAME_COLLAPSING = 'collapsing';\n  const CLASS_NAME_COLLAPSED = 'collapsed';\n  const CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;\n  const CLASS_NAME_HORIZONTAL = 'collapse-horizontal';\n  const WIDTH = 'width';\n  const HEIGHT = 'height';\n  const SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';\n  const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Collapse extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._isTransitioning = false;\n      this._config = this._getConfig(config);\n      this._triggerArray = [];\n      const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n      for (let i = 0, len = toggleList.length; i < len; i++) {\n        const elem = toggleList[i];\n        const selector = getSelectorFromElement(elem);\n        const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n        if (selector !== null && filterElement.length) {\n          this._selector = selector;\n\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    } // Getters\n\n\n    static get Default() {\n      return Default$9;\n    }\n\n    static get NAME() {\n      return NAME$a;\n    } // Public\n\n\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 actives = [];\n      let activesData;\n\n      if (this._config.parent) {\n        const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);\n        actives = SelectorEngine.find(SELECTOR_ACTIVES, this._config.parent).filter(elem => !children.includes(elem)); // remove children if greater depth\n      }\n\n      const container = SelectorEngine.findOne(this._selector);\n\n      if (actives.length) {\n        const tempActiveData = actives.find(elem => container !== elem);\n        activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n        if (activesData && activesData._isTransitioning) {\n          return;\n        }\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      actives.forEach(elemActive => {\n        if (container !== elemActive) {\n          Collapse.getOrCreateInstance(elemActive, {\n            toggle: false\n          }).hide();\n        }\n\n        if (!activesData) {\n          Data.set(elemActive, DATA_KEY$9, null);\n        }\n      });\n\n      const dimension = this._getDimension();\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.style[dimension] = 0;\n\n      this._addAriaAndCollapsedClass(this._triggerArray, true);\n\n      this._isTransitioning = true;\n\n      const complete = () => {\n        this._isTransitioning = false;\n\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n\n        this._element.style[dimension] = '';\n        EventHandler.trigger(this._element, EVENT_SHOWN$5);\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\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$5);\n\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      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n\n      const triggerArrayLength = this._triggerArray.length;\n\n      for (let i = 0; i < triggerArrayLength; i++) {\n        const trigger = this._triggerArray[i];\n        const elem = getElementFromSelector(trigger);\n\n        if (elem && !this._isShown(elem)) {\n          this._addAriaAndCollapsedClass([trigger], false);\n        }\n      }\n\n      this._isTransitioning = true;\n\n      const complete = () => {\n        this._isTransitioning = false;\n\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$5);\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$7);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$9,\n        ...Manipulator.getDataAttributes(this._element),\n        ...config\n      };\n      config.toggle = Boolean(config.toggle); // Coerce string values\n\n      config.parent = getElement(config.parent);\n      typeCheckConfig(NAME$a, config, DefaultType$9);\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 = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);\n      SelectorEngine.find(SELECTOR_DATA_TOGGLE$4, this._config.parent).filter(elem => !children.includes(elem)).forEach(element => {\n        const selected = getElementFromSelector(element);\n\n        if (selected) {\n          this._addAriaAndCollapsedClass([element], this._isShown(selected));\n        }\n      });\n    }\n\n    _addAriaAndCollapsedClass(triggerArray, isOpen) {\n      if (!triggerArray.length) {\n        return;\n      }\n\n      triggerArray.forEach(elem => {\n        if (isOpen) {\n          elem.classList.remove(CLASS_NAME_COLLAPSED);\n        } else {\n          elem.classList.add(CLASS_NAME_COLLAPSED);\n        }\n\n        elem.setAttribute('aria-expanded', isOpen);\n      });\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const _config = {};\n\n        if (typeof config === 'string' && /show|hide/.test(config)) {\n          _config.toggle = false;\n        }\n\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   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n    // preventDefault only for <a> 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    const selector = getSelectorFromElement(this);\n    const selectorElements = SelectorEngine.find(selector);\n    selectorElements.forEach(element => {\n      Collapse.getOrCreateInstance(element, {\n        toggle: false\n      }).toggle();\n    });\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Collapse to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Collapse);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.1.3): dropdown.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$9 = 'dropdown';\n  const DATA_KEY$8 = 'bs.dropdown';\n  const EVENT_KEY$8 = `.${DATA_KEY$8}`;\n  const DATA_API_KEY$4 = '.data-api';\n  const ESCAPE_KEY$2 = 'Escape';\n  const SPACE_KEY = 'Space';\n  const TAB_KEY$1 = 'Tab';\n  const ARROW_UP_KEY = 'ArrowUp';\n  const ARROW_DOWN_KEY = 'ArrowDown';\n  const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\n  const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\n  const EVENT_HIDE$4 = `hide${EVENT_KEY$8}`;\n  const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$8}`;\n  const EVENT_SHOW$4 = `show${EVENT_KEY$8}`;\n  const EVENT_SHOWN$4 = `shown${EVENT_KEY$8}`;\n  const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$8}${DATA_API_KEY$4}`;\n  const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$8}${DATA_API_KEY$4}`;\n  const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$8}${DATA_API_KEY$4}`;\n  const CLASS_NAME_SHOW$6 = 'show';\n  const CLASS_NAME_DROPUP = 'dropup';\n  const CLASS_NAME_DROPEND = 'dropend';\n  const CLASS_NAME_DROPSTART = 'dropstart';\n  const CLASS_NAME_NAVBAR = 'navbar';\n  const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\n  const SELECTOR_MENU = '.dropdown-menu';\n  const SELECTOR_NAVBAR_NAV = '.navbar-nav';\n  const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\n  const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\n  const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\n  const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\n  const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\n  const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\n  const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\n  const Default$8 = {\n    offset: [0, 2],\n    boundary: 'clippingParents',\n    reference: 'toggle',\n    display: 'dynamic',\n    popperConfig: null,\n    autoClose: true\n  };\n  const DefaultType$8 = {\n    offset: '(array|string|function)',\n    boundary: '(string|element)',\n    reference: '(string|element|object)',\n    display: 'string',\n    popperConfig: '(null|object|function)',\n    autoClose: '(boolean|string)'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Dropdown extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._popper = null;\n      this._config = this._getConfig(config);\n      this._menu = this._getMenuElement();\n      this._inNavbar = this._detectNavbar();\n    } // Getters\n\n\n    static get Default() {\n      return Default$8;\n    }\n\n    static get DefaultType() {\n      return DefaultType$8;\n    }\n\n    static get NAME() {\n      return NAME$9;\n    } // Public\n\n\n    toggle() {\n      return this._isShown() ? this.hide() : this.show();\n    }\n\n    show() {\n      if (isDisabled(this._element) || this._isShown(this._menu)) {\n        return;\n      }\n\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      const parent = Dropdown.getParentFromElement(this._element); // Totally disable Popper for Dropdowns in Navbar\n\n      if (this._inNavbar) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n      } else {\n        this._createPopper(parent);\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\n\n      if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n      }\n\n      this._element.focus();\n\n      this._element.setAttribute('aria-expanded', true);\n\n      this._menu.classList.add(CLASS_NAME_SHOW$6);\n\n      this._element.classList.add(CLASS_NAME_SHOW$6);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n    }\n\n    hide() {\n      if (isDisabled(this._element) || !this._isShown(this._menu)) {\n        return;\n      }\n\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n\n      this._completeHide(relatedTarget);\n    }\n\n    dispose() {\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    update() {\n      this._inNavbar = this._detectNavbar();\n\n      if (this._popper) {\n        this._popper.update();\n      }\n    } // Private\n\n\n    _completeHide(relatedTarget) {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      } // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      this._menu.classList.remove(CLASS_NAME_SHOW$6);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$6);\n\n      this._element.setAttribute('aria-expanded', 'false');\n\n      Manipulator.removeDataAttribute(this._menu, 'popper');\n      EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n    }\n\n    _getConfig(config) {\n      config = { ...this.constructor.Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...config\n      };\n      typeCheckConfig(NAME$9, config, this.constructor.DefaultType);\n\n      if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n        // Popper virtual elements require a getBoundingClientRect method\n        throw new TypeError(`${NAME$9.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n      }\n\n      return config;\n    }\n\n    _createPopper(parent) {\n      if (typeof Popper__namespace === 'undefined') {\n        throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n      }\n\n      let referenceElement = this._element;\n\n      if (this._config.reference === 'parent') {\n        referenceElement = parent;\n      } else if (isElement(this._config.reference)) {\n        referenceElement = getElement(this._config.reference);\n      } else if (typeof this._config.reference === 'object') {\n        referenceElement = this._config.reference;\n      }\n\n      const popperConfig = this._getPopperConfig();\n\n      const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n      this._popper = Popper__namespace.createPopper(referenceElement, this._menu, popperConfig);\n\n      if (isDisplayStatic) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n      }\n    }\n\n    _isShown(element = this._element) {\n      return element.classList.contains(CLASS_NAME_SHOW$6);\n    }\n\n    _getMenuElement() {\n      return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n    }\n\n    _getPlacement() {\n      const parentDropdown = this._element.parentNode;\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n        return PLACEMENT_RIGHT;\n      }\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n        return PLACEMENT_LEFT;\n      } // We need to trim the value because custom properties can also include spaces\n\n\n      const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n        return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n      }\n\n      return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n    }\n\n    _detectNavbar() {\n      return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig() {\n      const defaultBsPopperConfig = {\n        placement: this._getPlacement(),\n        modifiers: [{\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }]\n      }; // Disable Popper if we have a static display\n\n      if (this._config.display === 'static') {\n        defaultBsPopperConfig.modifiers = [{\n          name: 'applyStyles',\n          enabled: false\n        }];\n      }\n\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _selectMenuItem({\n      key,\n      target\n    }) {\n      const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n      if (!items.length) {\n        return;\n      } // if target isn't included in items (e.g. when expanding the dropdown)\n      // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n      getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Dropdown.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    static clearMenus(event) {\n      if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1)) {\n        return;\n      }\n\n      const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n      for (let i = 0, len = toggles.length; i < len; i++) {\n        const context = Dropdown.getInstance(toggles[i]);\n\n        if (!context || context._config.autoClose === false) {\n          continue;\n        }\n\n        if (!context._isShown()) {\n          continue;\n        }\n\n        const relatedTarget = {\n          relatedTarget: context._element\n        };\n\n        if (event) {\n          const composedPath = event.composedPath();\n          const isMenuTarget = composedPath.includes(context._menu);\n\n          if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n            continue;\n          } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n          if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n            continue;\n          }\n\n          if (event.type === 'click') {\n            relatedTarget.clickEvent = event;\n          }\n        }\n\n        context._completeHide(relatedTarget);\n      }\n    }\n\n    static getParentFromElement(element) {\n      return getElementFromSelector(element) || element.parentNode;\n    }\n\n    static dataApiKeydownHandler(event) {\n      // If not input/textarea:\n      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n      // If input/textarea:\n      //  - If space key => not a dropdown command\n      //  - If key is other than escape\n      //    - If key is not up or down => not a dropdown command\n      //    - If trigger inside the menu => not a dropdown command\n      if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n        return;\n      }\n\n      const isActive = this.classList.contains(CLASS_NAME_SHOW$6);\n\n      if (!isActive && event.key === ESCAPE_KEY$2) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (isDisabled(this)) {\n        return;\n      }\n\n      const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n      const instance = Dropdown.getOrCreateInstance(getToggleButton);\n\n      if (event.key === ESCAPE_KEY$2) {\n        instance.hide();\n        return;\n      }\n\n      if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n        if (!isActive) {\n          instance.show();\n        }\n\n        instance._selectMenuItem(event);\n\n        return;\n      }\n\n      if (!isActive || event.key === SPACE_KEY) {\n        Dropdown.clearMenus();\n      }\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n    event.preventDefault();\n    Dropdown.getOrCreateInstance(this).toggle();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Dropdown to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Dropdown);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.1.3): util/scrollBar.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\n  const SELECTOR_STICKY_CONTENT = '.sticky-top';\n\n  class ScrollBarHelper {\n    constructor() {\n      this._element = document.body;\n    }\n\n    getWidth() {\n      // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n      const documentWidth = document.documentElement.clientWidth;\n      return Math.abs(window.innerWidth - documentWidth);\n    }\n\n    hide() {\n      const width = this.getWidth();\n\n      this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n      this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n      this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n      this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n    }\n\n    _disableOverFlow() {\n      this._saveInitialAttribute(this._element, 'overflow');\n\n      this._element.style.overflow = 'hidden';\n    }\n\n    _setElementAttributes(selector, styleProp, callback) {\n      const scrollbarWidth = this.getWidth();\n\n      const manipulationCallBack = element => {\n        if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n          return;\n        }\n\n        this._saveInitialAttribute(element, styleProp);\n\n        const calculatedValue = window.getComputedStyle(element)[styleProp];\n        element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    reset() {\n      this._resetElementAttributes(this._element, 'overflow');\n\n      this._resetElementAttributes(this._element, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n    }\n\n    _saveInitialAttribute(element, styleProp) {\n      const actualValue = element.style[styleProp];\n\n      if (actualValue) {\n        Manipulator.setDataAttribute(element, styleProp, actualValue);\n      }\n    }\n\n    _resetElementAttributes(selector, styleProp) {\n      const manipulationCallBack = element => {\n        const value = Manipulator.getDataAttribute(element, styleProp);\n\n        if (typeof value === 'undefined') {\n          element.style.removeProperty(styleProp);\n        } else {\n          Manipulator.removeDataAttribute(element, styleProp);\n          element.style[styleProp] = value;\n        }\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    _applyManipulationCallback(selector, callBack) {\n      if (isElement(selector)) {\n        callBack(selector);\n      } else {\n        SelectorEngine.find(selector, this._element).forEach(callBack);\n      }\n    }\n\n    isOverflowing() {\n      return this.getWidth() > 0;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.1.3): util/backdrop.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const Default$7 = {\n    className: 'modal-backdrop',\n    isVisible: true,\n    // if false, we use the backdrop helper without adding any element to the dom\n    isAnimated: false,\n    rootElement: 'body',\n    // give the choice to place backdrop under different elements\n    clickCallback: null\n  };\n  const DefaultType$7 = {\n    className: 'string',\n    isVisible: 'boolean',\n    isAnimated: 'boolean',\n    rootElement: '(element|string)',\n    clickCallback: '(function|null)'\n  };\n  const NAME$8 = 'backdrop';\n  const CLASS_NAME_FADE$4 = 'fade';\n  const CLASS_NAME_SHOW$5 = 'show';\n  const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$8}`;\n\n  class Backdrop {\n    constructor(config) {\n      this._config = this._getConfig(config);\n      this._isAppended = false;\n      this._element = null;\n    }\n\n    show(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._append();\n\n      if (this._config.isAnimated) {\n        reflow(this._getElement());\n      }\n\n      this._getElement().classList.add(CLASS_NAME_SHOW$5);\n\n      this._emulateAnimation(() => {\n        execute(callback);\n      });\n    }\n\n    hide(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._getElement().classList.remove(CLASS_NAME_SHOW$5);\n\n      this._emulateAnimation(() => {\n        this.dispose();\n        execute(callback);\n      });\n    } // Private\n\n\n    _getElement() {\n      if (!this._element) {\n        const backdrop = document.createElement('div');\n        backdrop.className = this._config.className;\n\n        if (this._config.isAnimated) {\n          backdrop.classList.add(CLASS_NAME_FADE$4);\n        }\n\n        this._element = backdrop;\n      }\n\n      return this._element;\n    }\n\n    _getConfig(config) {\n      config = { ...Default$7,\n        ...(typeof config === 'object' ? config : {})\n      }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n      config.rootElement = getElement(config.rootElement);\n      typeCheckConfig(NAME$8, config, DefaultType$7);\n      return config;\n    }\n\n    _append() {\n      if (this._isAppended) {\n        return;\n      }\n\n      this._config.rootElement.append(this._getElement());\n\n      EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n        execute(this._config.clickCallback);\n      });\n      this._isAppended = true;\n    }\n\n    dispose() {\n      if (!this._isAppended) {\n        return;\n      }\n\n      EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n      this._element.remove();\n\n      this._isAppended = false;\n    }\n\n    _emulateAnimation(callback) {\n      executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.1.3): util/focustrap.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const Default$6 = {\n    trapElement: null,\n    // The element to trap focus inside of\n    autofocus: true\n  };\n  const DefaultType$6 = {\n    trapElement: 'element',\n    autofocus: 'boolean'\n  };\n  const NAME$7 = 'focustrap';\n  const DATA_KEY$7 = 'bs.focustrap';\n  const EVENT_KEY$7 = `.${DATA_KEY$7}`;\n  const EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$7}`;\n  const EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$7}`;\n  const TAB_KEY = 'Tab';\n  const TAB_NAV_FORWARD = 'forward';\n  const TAB_NAV_BACKWARD = 'backward';\n\n  class FocusTrap {\n    constructor(config) {\n      this._config = this._getConfig(config);\n      this._isActive = false;\n      this._lastTabNavDirection = null;\n    }\n\n    activate() {\n      const {\n        trapElement,\n        autofocus\n      } = this._config;\n\n      if (this._isActive) {\n        return;\n      }\n\n      if (autofocus) {\n        trapElement.focus();\n      }\n\n      EventHandler.off(document, EVENT_KEY$7); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$1, event => this._handleFocusin(event));\n      EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));\n      this._isActive = true;\n    }\n\n    deactivate() {\n      if (!this._isActive) {\n        return;\n      }\n\n      this._isActive = false;\n      EventHandler.off(document, EVENT_KEY$7);\n    } // Private\n\n\n    _handleFocusin(event) {\n      const {\n        target\n      } = event;\n      const {\n        trapElement\n      } = this._config;\n\n      if (target === document || target === trapElement || trapElement.contains(target)) {\n        return;\n      }\n\n      const elements = SelectorEngine.focusableChildren(trapElement);\n\n      if (elements.length === 0) {\n        trapElement.focus();\n      } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n        elements[elements.length - 1].focus();\n      } else {\n        elements[0].focus();\n      }\n    }\n\n    _handleKeydown(event) {\n      if (event.key !== TAB_KEY) {\n        return;\n      }\n\n      this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;\n    }\n\n    _getConfig(config) {\n      config = { ...Default$6,\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$7, config, DefaultType$6);\n      return config;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.1.3): modal.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$6 = 'modal';\n  const DATA_KEY$6 = 'bs.modal';\n  const EVENT_KEY$6 = `.${DATA_KEY$6}`;\n  const DATA_API_KEY$3 = '.data-api';\n  const ESCAPE_KEY$1 = 'Escape';\n  const Default$5 = {\n    backdrop: true,\n    keyboard: true,\n    focus: true\n  };\n  const DefaultType$5 = {\n    backdrop: '(boolean|string)',\n    keyboard: 'boolean',\n    focus: 'boolean'\n  };\n  const EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\n  const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\n  const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\n  const EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\n  const EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\n  const EVENT_RESIZE = `resize${EVENT_KEY$6}`;\n  const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$6}`;\n  const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\n  const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\n  const CLASS_NAME_OPEN = 'modal-open';\n  const CLASS_NAME_FADE$3 = 'fade';\n  const CLASS_NAME_SHOW$4 = 'show';\n  const CLASS_NAME_STATIC = 'modal-static';\n  const OPEN_SELECTOR$1 = '.modal.show';\n  const SELECTOR_DIALOG = '.modal-dialog';\n  const SELECTOR_MODAL_BODY = '.modal-body';\n  const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Modal extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n      this._backdrop = this._initializeBackDrop();\n      this._focustrap = this._initializeFocusTrap();\n      this._isShown = false;\n      this._ignoreBackdropClick = false;\n      this._isTransitioning = false;\n      this._scrollBar = new ScrollBarHelper();\n    } // Getters\n\n\n    static get Default() {\n      return Default$5;\n    }\n\n    static get NAME() {\n      return NAME$6;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n\n      if (this._isAnimated()) {\n        this._isTransitioning = true;\n      }\n\n      this._scrollBar.hide();\n\n      document.body.classList.add(CLASS_NAME_OPEN);\n\n      this._adjustDialog();\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n        EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n          if (event.target === this._element) {\n            this._ignoreBackdropClick = true;\n          }\n        });\n      });\n\n      this._showBackdrop(() => this._showElement(relatedTarget));\n    }\n\n    hide() {\n      if (!this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = false;\n\n      const isAnimated = this._isAnimated();\n\n      if (isAnimated) {\n        this._isTransitioning = true;\n      }\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      this._focustrap.deactivate();\n\n      this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n      EventHandler.off(this._element, EVENT_CLICK_DISMISS);\n      EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n      this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n    }\n\n    dispose() {\n      [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n      this._backdrop.dispose();\n\n      this._focustrap.deactivate();\n\n      super.dispose();\n    }\n\n    handleUpdate() {\n      this._adjustDialog();\n    } // Private\n\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: Boolean(this._config.backdrop),\n        // 'static' option will be translated to true, and booleans will keep their value\n        isAnimated: this._isAnimated()\n      });\n    }\n\n    _initializeFocusTrap() {\n      return new FocusTrap({\n        trapElement: this._element\n      });\n    }\n\n    _getConfig(config) {\n      config = { ...Default$5,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$6, config, DefaultType$5);\n      return config;\n    }\n\n    _showElement(relatedTarget) {\n      const isAnimated = this._isAnimated();\n\n      const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n        // Don't move modal's DOM position\n        document.body.append(this._element);\n      }\n\n      this._element.style.display = 'block';\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.scrollTop = 0;\n\n      if (modalBody) {\n        modalBody.scrollTop = 0;\n      }\n\n      if (isAnimated) {\n        reflow(this._element);\n      }\n\n      this._element.classList.add(CLASS_NAME_SHOW$4);\n\n      const transitionComplete = () => {\n        if (this._config.focus) {\n          this._focustrap.activate();\n        }\n\n        this._isTransitioning = false;\n        EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(transitionComplete, this._dialog, isAnimated);\n    }\n\n    _setEscapeEvent() {\n      if (this._isShown) {\n        EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n          if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            event.preventDefault();\n            this.hide();\n          } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            this._triggerBackdropTransition();\n          }\n        });\n      } else {\n        EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n      }\n    }\n\n    _setResizeEvent() {\n      if (this._isShown) {\n        EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n      } else {\n        EventHandler.off(window, EVENT_RESIZE);\n      }\n    }\n\n    _hideModal() {\n      this._element.style.display = 'none';\n\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._isTransitioning = false;\n\n      this._backdrop.hide(() => {\n        document.body.classList.remove(CLASS_NAME_OPEN);\n\n        this._resetAdjustments();\n\n        this._scrollBar.reset();\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n      });\n    }\n\n    _showBackdrop(callback) {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS, event => {\n        if (this._ignoreBackdropClick) {\n          this._ignoreBackdropClick = false;\n          return;\n        }\n\n        if (event.target !== event.currentTarget) {\n          return;\n        }\n\n        if (this._config.backdrop === true) {\n          this.hide();\n        } else if (this._config.backdrop === 'static') {\n          this._triggerBackdropTransition();\n        }\n      });\n\n      this._backdrop.show(callback);\n    }\n\n    _isAnimated() {\n      return this._element.classList.contains(CLASS_NAME_FADE$3);\n    }\n\n    _triggerBackdropTransition() {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const {\n        classList,\n        scrollHeight,\n        style\n      } = this._element;\n      const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n      if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n        return;\n      }\n\n      if (!isModalOverflowing) {\n        style.overflowY = 'hidden';\n      }\n\n      classList.add(CLASS_NAME_STATIC);\n\n      this._queueCallback(() => {\n        classList.remove(CLASS_NAME_STATIC);\n\n        if (!isModalOverflowing) {\n          this._queueCallback(() => {\n            style.overflowY = '';\n          }, this._dialog);\n        }\n      }, this._dialog);\n\n      this._element.focus();\n    } // ----------------------------------------------------------------------\n    // the following methods are used to handle overflowing modals\n    // ----------------------------------------------------------------------\n\n\n    _adjustDialog() {\n      const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n      const scrollbarWidth = this._scrollBar.getWidth();\n\n      const isBodyOverflowing = scrollbarWidth > 0;\n\n      if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n        this._element.style.paddingLeft = `${scrollbarWidth}px`;\n      }\n\n      if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n        this._element.style.paddingRight = `${scrollbarWidth}px`;\n      }\n    }\n\n    _resetAdjustments() {\n      this._element.style.paddingLeft = '';\n      this._element.style.paddingRight = '';\n    } // Static\n\n\n    static jQueryInterface(config, relatedTarget) {\n      return this.each(function () {\n        const data = Modal.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](relatedTarget);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n      if (showEvent.defaultPrevented) {\n        // only register focus restorer if modal will actually get shown\n        return;\n      }\n\n      EventHandler.one(target, EVENT_HIDDEN$3, () => {\n        if (isVisible(this)) {\n          this.focus();\n        }\n      });\n    }); // avoid conflict when clicking moddal toggler while another one is open\n\n    const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1);\n\n    if (allReadyOpen) {\n      Modal.getInstance(allReadyOpen).hide();\n    }\n\n    const data = Modal.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  enableDismissTrigger(Modal);\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Modal to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Modal);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.1.3): offcanvas.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$5 = 'offcanvas';\n  const DATA_KEY$5 = 'bs.offcanvas';\n  const EVENT_KEY$5 = `.${DATA_KEY$5}`;\n  const DATA_API_KEY$2 = '.data-api';\n  const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const ESCAPE_KEY = 'Escape';\n  const Default$4 = {\n    backdrop: true,\n    keyboard: true,\n    scroll: false\n  };\n  const DefaultType$4 = {\n    backdrop: 'boolean',\n    keyboard: 'boolean',\n    scroll: 'boolean'\n  };\n  const CLASS_NAME_SHOW$3 = 'show';\n  const CLASS_NAME_BACKDROP = 'offcanvas-backdrop';\n  const OPEN_SELECTOR = '.offcanvas.show';\n  const EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\n  const EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\n  const EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\n  const EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\n  const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\n  const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Offcanvas extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._isShown = false;\n      this._backdrop = this._initializeBackDrop();\n      this._focustrap = this._initializeFocusTrap();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get NAME() {\n      return NAME$5;\n    }\n\n    static get Default() {\n      return Default$4;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n      this._element.style.visibility = 'visible';\n\n      this._backdrop.show();\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().hide();\n      }\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.classList.add(CLASS_NAME_SHOW$3);\n\n      const completeCallBack = () => {\n        if (!this._config.scroll) {\n          this._focustrap.activate();\n        }\n\n        EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(completeCallBack, this._element, true);\n    }\n\n    hide() {\n      if (!this._isShown) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._focustrap.deactivate();\n\n      this._element.blur();\n\n      this._isShown = false;\n\n      this._element.classList.remove(CLASS_NAME_SHOW$3);\n\n      this._backdrop.hide();\n\n      const completeCallback = () => {\n        this._element.setAttribute('aria-hidden', true);\n\n        this._element.removeAttribute('aria-modal');\n\n        this._element.removeAttribute('role');\n\n        this._element.style.visibility = 'hidden';\n\n        if (!this._config.scroll) {\n          new ScrollBarHelper().reset();\n        }\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n      };\n\n      this._queueCallback(completeCallback, this._element, true);\n    }\n\n    dispose() {\n      this._backdrop.dispose();\n\n      this._focustrap.deactivate();\n\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$4,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$5, config, DefaultType$4);\n      return config;\n    }\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        className: CLASS_NAME_BACKDROP,\n        isVisible: this._config.backdrop,\n        isAnimated: true,\n        rootElement: this._element.parentNode,\n        clickCallback: () => this.hide()\n      });\n    }\n\n    _initializeFocusTrap() {\n      return new FocusTrap({\n        trapElement: this._element\n      });\n    }\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY) {\n          this.hide();\n        }\n      });\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Offcanvas.getOrCreateInstance(this, config);\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   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$2, () => {\n      // focus on trigger when it is closed\n      if (isVisible(this)) {\n        this.focus();\n      }\n    }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n    const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n    if (allReadyOpen && allReadyOpen !== target) {\n      Offcanvas.getInstance(allReadyOpen).hide();\n    }\n\n    const data = Offcanvas.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n  enableDismissTrigger(Offcanvas);\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  defineJQueryPlugin(Offcanvas);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.1.3): util/sanitizer.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\n  const ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n  /**\n   * A pattern that recognizes a commonly useful subset of URLs that are safe.\n   *\n   * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i;\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\n  const 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) || DATA_URL_PATTERN.test(attribute.nodeValue));\n      }\n\n      return true;\n    }\n\n    const regExp = allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n    for (let i = 0, len = regExp.length; i < len; i++) {\n      if (regExp[i].test(attributeName)) {\n        return true;\n      }\n    }\n\n    return false;\n  };\n\n  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    div: [],\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  function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n    if (!unsafeHtml.length) {\n      return unsafeHtml;\n    }\n\n    if (sanitizeFn && typeof sanitizeFn === 'function') {\n      return sanitizeFn(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 (let i = 0, len = elements.length; i < len; i++) {\n      const element = elements[i];\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      attributeList.forEach(attribute => {\n        if (!allowedAttribute(attribute, allowedAttributes)) {\n          element.removeAttribute(attribute.nodeName);\n        }\n      });\n    }\n\n    return createdDocument.body.innerHTML;\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.1.3): tooltip.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$4 = 'tooltip';\n  const DATA_KEY$4 = 'bs.tooltip';\n  const EVENT_KEY$4 = `.${DATA_KEY$4}`;\n  const CLASS_PREFIX$1 = 'bs-tooltip';\n  const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\n  const DefaultType$3 = {\n    animation: 'boolean',\n    template: 'string',\n    title: '(string|element|function)',\n    trigger: 'string',\n    delay: '(number|object)',\n    html: 'boolean',\n    selector: '(string|boolean)',\n    placement: '(string|function)',\n    offset: '(array|string|function)',\n    container: '(string|element|boolean)',\n    fallbackPlacements: 'array',\n    boundary: '(string|element)',\n    customClass: '(string|function)',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    allowList: 'object',\n    popperConfig: '(null|object|function)'\n  };\n  const AttachmentMap = {\n    AUTO: 'auto',\n    TOP: 'top',\n    RIGHT: isRTL() ? 'left' : 'right',\n    BOTTOM: 'bottom',\n    LEFT: isRTL() ? 'right' : 'left'\n  };\n  const Default$3 = {\n    animation: true,\n    template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    selector: false,\n    placement: 'top',\n    offset: [0, 0],\n    container: false,\n    fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n    boundary: 'clippingParents',\n    customClass: '',\n    sanitize: true,\n    sanitizeFn: null,\n    allowList: DefaultAllowlist,\n    popperConfig: null\n  };\n  const Event$2 = {\n    HIDE: `hide${EVENT_KEY$4}`,\n    HIDDEN: `hidden${EVENT_KEY$4}`,\n    SHOW: `show${EVENT_KEY$4}`,\n    SHOWN: `shown${EVENT_KEY$4}`,\n    INSERTED: `inserted${EVENT_KEY$4}`,\n    CLICK: `click${EVENT_KEY$4}`,\n    FOCUSIN: `focusin${EVENT_KEY$4}`,\n    FOCUSOUT: `focusout${EVENT_KEY$4}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n  };\n  const CLASS_NAME_FADE$2 = 'fade';\n  const CLASS_NAME_MODAL = 'modal';\n  const CLASS_NAME_SHOW$2 = 'show';\n  const HOVER_STATE_SHOW = 'show';\n  const HOVER_STATE_OUT = 'out';\n  const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\n  const SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;\n  const EVENT_MODAL_HIDE = 'hide.bs.modal';\n  const TRIGGER_HOVER = 'hover';\n  const TRIGGER_FOCUS = 'focus';\n  const TRIGGER_CLICK = 'click';\n  const TRIGGER_MANUAL = 'manual';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tooltip extends BaseComponent {\n    constructor(element, config) {\n      if (typeof Popper__namespace === 'undefined') {\n        throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n      }\n\n      super(element); // private\n\n      this._isEnabled = true;\n      this._timeout = 0;\n      this._hoverState = '';\n      this._activeTrigger = {};\n      this._popper = null; // Protected\n\n      this._config = this._getConfig(config);\n      this.tip = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$3;\n    }\n\n    static get NAME() {\n      return NAME$4;\n    }\n\n    static get Event() {\n      return Event$2;\n    }\n\n    static get DefaultType() {\n      return DefaultType$3;\n    } // Public\n\n\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(event) {\n      if (!this._isEnabled) {\n        return;\n      }\n\n      if (event) {\n        const context = this._initializeOnDelegatedTarget(event);\n\n        context._activeTrigger.click = !context._activeTrigger.click;\n\n        if (context._isWithActiveTrigger()) {\n          context._enter(null, context);\n        } else {\n          context._leave(null, context);\n        }\n      } else {\n        if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$2)) {\n          this._leave(null, this);\n\n          return;\n        }\n\n        this._enter(null, this);\n      }\n    }\n\n    dispose() {\n      clearTimeout(this._timeout);\n      EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n\n      if (this.tip) {\n        this.tip.remove();\n      }\n\n      this._disposePopper();\n\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.Event.SHOW);\n      const shadowRoot = findShadowRoot(this._element);\n      const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n      if (showEvent.defaultPrevented || !isInTheDom) {\n        return;\n      } // A trick to recreate a tooltip in case a new title is given by using the NOT documented `data-bs-original-title`\n      // This will be removed later in favor of a `setContent` method\n\n\n      if (this.constructor.NAME === 'tooltip' && this.tip && this.getTitle() !== this.tip.querySelector(SELECTOR_TOOLTIP_INNER).innerHTML) {\n        this._disposePopper();\n\n        this.tip.remove();\n        this.tip = null;\n      }\n\n      const tip = this.getTipElement();\n      const tipId = getUID(this.constructor.NAME);\n      tip.setAttribute('id', tipId);\n\n      this._element.setAttribute('aria-describedby', tipId);\n\n      if (this._config.animation) {\n        tip.classList.add(CLASS_NAME_FADE$2);\n      }\n\n      const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n      const attachment = this._getAttachment(placement);\n\n      this._addAttachmentClass(attachment);\n\n      const {\n        container\n      } = this._config;\n      Data.set(tip, this.constructor.DATA_KEY, this);\n\n      if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n        container.append(tip);\n        EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n      }\n\n      if (this._popper) {\n        this._popper.update();\n      } else {\n        this._popper = Popper__namespace.createPopper(this._element, tip, this._getPopperConfig(attachment));\n      }\n\n      tip.classList.add(CLASS_NAME_SHOW$2);\n\n      const customClass = this._resolvePossibleFunction(this._config.customClass);\n\n      if (customClass) {\n        tip.classList.add(...customClass.split(' '));\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\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => {\n          EventHandler.on(element, 'mouseover', noop);\n        });\n      }\n\n      const complete = () => {\n        const prevHoverState = this._hoverState;\n        this._hoverState = null;\n        EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n        if (prevHoverState === HOVER_STATE_OUT) {\n          this._leave(null, this);\n        }\n      };\n\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$2);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n    }\n\n    hide() {\n      if (!this._popper) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n\n      const complete = () => {\n        if (this._isWithActiveTrigger()) {\n          return;\n        }\n\n        if (this._hoverState !== HOVER_STATE_SHOW) {\n          tip.remove();\n        }\n\n        this._cleanTipClass();\n\n        this._element.removeAttribute('aria-describedby');\n\n        EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n        this._disposePopper();\n      };\n\n      const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      tip.classList.remove(CLASS_NAME_SHOW$2); // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n      }\n\n      this._activeTrigger[TRIGGER_CLICK] = false;\n      this._activeTrigger[TRIGGER_FOCUS] = false;\n      this._activeTrigger[TRIGGER_HOVER] = false;\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$2);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n\n      this._hoverState = '';\n    }\n\n    update() {\n      if (this._popper !== null) {\n        this._popper.update();\n      }\n    } // Protected\n\n\n    isWithContent() {\n      return Boolean(this.getTitle());\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      const element = document.createElement('div');\n      element.innerHTML = this._config.template;\n      const tip = element.children[0];\n      this.setContent(tip);\n      tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n      this.tip = tip;\n      return this.tip;\n    }\n\n    setContent(tip) {\n      this._sanitizeAndSetContent(tip, this.getTitle(), SELECTOR_TOOLTIP_INNER);\n    }\n\n    _sanitizeAndSetContent(template, content, selector) {\n      const templateElement = SelectorEngine.findOne(selector, template);\n\n      if (!content && templateElement) {\n        templateElement.remove();\n        return;\n      } // we use append for html objects to maintain js events\n\n\n      this.setElementContent(templateElement, content);\n    }\n\n    setElementContent(element, content) {\n      if (element === null) {\n        return;\n      }\n\n      if (isElement(content)) {\n        content = getElement(content); // content is a DOM node or a jQuery\n\n        if (this._config.html) {\n          if (content.parentNode !== element) {\n            element.innerHTML = '';\n            element.append(content);\n          }\n        } else {\n          element.textContent = content.textContent;\n        }\n\n        return;\n      }\n\n      if (this._config.html) {\n        if (this._config.sanitize) {\n          content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n        }\n\n        element.innerHTML = content;\n      } else {\n        element.textContent = content;\n      }\n    }\n\n    getTitle() {\n      const title = this._element.getAttribute('data-bs-original-title') || this._config.title;\n\n      return this._resolvePossibleFunction(title);\n    }\n\n    updateAttachment(attachment) {\n      if (attachment === 'right') {\n        return 'end';\n      }\n\n      if (attachment === 'left') {\n        return 'start';\n      }\n\n      return attachment;\n    } // Private\n\n\n    _initializeOnDelegatedTarget(event, context) {\n      return context || this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _resolvePossibleFunction(content) {\n      return typeof content === 'function' ? content.call(this._element) : content;\n    }\n\n    _getPopperConfig(attachment) {\n      const defaultBsPopperConfig = {\n        placement: attachment,\n        modifiers: [{\n          name: 'flip',\n          options: {\n            fallbackPlacements: this._config.fallbackPlacements\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }, {\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'arrow',\n          options: {\n            element: `.${this.constructor.NAME}-arrow`\n          }\n        }, {\n          name: 'onChange',\n          enabled: true,\n          phase: 'afterWrite',\n          fn: data => this._handlePopperPlacementChange(data)\n        }],\n        onFirstUpdate: data => {\n          if (data.options.placement !== data.placement) {\n            this._handlePopperPlacementChange(data);\n          }\n        }\n      };\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${this._getBasicClassPrefix()}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getAttachment(placement) {\n      return AttachmentMap[placement.toUpperCase()];\n    }\n\n    _setListeners() {\n      const triggers = this._config.trigger.split(' ');\n\n      triggers.forEach(trigger => {\n        if (trigger === 'click') {\n          EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n        } else if (trigger !== TRIGGER_MANUAL) {\n          const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n          const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n          EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n          EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\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      if (this._config.selector) {\n        this._config = { ...this._config,\n          trigger: 'manual',\n          selector: ''\n        };\n      } else {\n        this._fixTitle();\n      }\n    }\n\n    _fixTitle() {\n      const title = this._element.getAttribute('title');\n\n      const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n      if (title || originalTitleType !== 'string') {\n        this._element.setAttribute('data-bs-original-title', title || '');\n\n        if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n          this._element.setAttribute('aria-label', title);\n        }\n\n        this._element.setAttribute('title', '');\n      }\n    }\n\n    _enter(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n      }\n\n      if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$2) || context._hoverState === HOVER_STATE_SHOW) {\n        context._hoverState = HOVER_STATE_SHOW;\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_SHOW;\n\n      if (!context._config.delay || !context._config.delay.show) {\n        context.show();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_SHOW) {\n          context.show();\n        }\n      }, context._config.delay.show);\n    }\n\n    _leave(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n      }\n\n      if (context._isWithActiveTrigger()) {\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_OUT;\n\n      if (!context._config.delay || !context._config.delay.hide) {\n        context.hide();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_OUT) {\n          context.hide();\n        }\n      }, context._config.delay.hide);\n    }\n\n    _isWithActiveTrigger() {\n      for (const trigger in this._activeTrigger) {\n        if (this._activeTrigger[trigger]) {\n          return true;\n        }\n      }\n\n      return false;\n    }\n\n    _getConfig(config) {\n      const dataAttributes = Manipulator.getDataAttributes(this._element);\n      Object.keys(dataAttributes).forEach(dataAttr => {\n        if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n          delete dataAttributes[dataAttr];\n        }\n      });\n      config = { ...this.constructor.Default,\n        ...dataAttributes,\n        ...(typeof config === 'object' && config ? config : {})\n      };\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      typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n      if (config.sanitize) {\n        config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n      }\n\n      return config;\n    }\n\n    _getDelegateConfig() {\n      const config = {};\n\n      for (const key in this._config) {\n        if (this.constructor.Default[key] !== this._config[key]) {\n          config[key] = this._config[key];\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\n\n      return config;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const basicClassPrefixRegex = new RegExp(`(^|\\\\s)${this._getBasicClassPrefix()}\\\\S+`, 'g');\n      const tabClass = tip.getAttribute('class').match(basicClassPrefixRegex);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    }\n\n    _getBasicClassPrefix() {\n      return CLASS_PREFIX$1;\n    }\n\n    _handlePopperPlacementChange(popperData) {\n      const {\n        state\n      } = popperData;\n\n      if (!state) {\n        return;\n      }\n\n      this.tip = state.elements.popper;\n\n      this._cleanTipClass();\n\n      this._addAttachmentClass(this._getAttachment(state.placement));\n    }\n\n    _disposePopper() {\n      if (this._popper) {\n        this._popper.destroy();\n\n        this._popper = null;\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tooltip.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   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tooltip to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Tooltip);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.1.3): popover.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$3 = 'popover';\n  const DATA_KEY$3 = 'bs.popover';\n  const EVENT_KEY$3 = `.${DATA_KEY$3}`;\n  const CLASS_PREFIX = 'bs-popover';\n  const Default$2 = { ...Tooltip.Default,\n    placement: 'right',\n    offset: [0, 8],\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n  };\n  const DefaultType$2 = { ...Tooltip.DefaultType,\n    content: '(string|element|function)'\n  };\n  const Event$1 = {\n    HIDE: `hide${EVENT_KEY$3}`,\n    HIDDEN: `hidden${EVENT_KEY$3}`,\n    SHOW: `show${EVENT_KEY$3}`,\n    SHOWN: `shown${EVENT_KEY$3}`,\n    INSERTED: `inserted${EVENT_KEY$3}`,\n    CLICK: `click${EVENT_KEY$3}`,\n    FOCUSIN: `focusin${EVENT_KEY$3}`,\n    FOCUSOUT: `focusout${EVENT_KEY$3}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n  };\n  const SELECTOR_TITLE = '.popover-header';\n  const SELECTOR_CONTENT = '.popover-body';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Popover extends Tooltip {\n    // Getters\n    static get Default() {\n      return Default$2;\n    }\n\n    static get NAME() {\n      return NAME$3;\n    }\n\n    static get Event() {\n      return Event$1;\n    }\n\n    static get DefaultType() {\n      return DefaultType$2;\n    } // Overrides\n\n\n    isWithContent() {\n      return this.getTitle() || this._getContent();\n    }\n\n    setContent(tip) {\n      this._sanitizeAndSetContent(tip, this.getTitle(), SELECTOR_TITLE);\n\n      this._sanitizeAndSetContent(tip, this._getContent(), SELECTOR_CONTENT);\n    } // Private\n\n\n    _getContent() {\n      return this._resolvePossibleFunction(this._config.content);\n    }\n\n    _getBasicClassPrefix() {\n      return CLASS_PREFIX;\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Popover.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   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Popover to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Popover);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.1.3): scrollspy.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$2 = 'scrollspy';\n  const DATA_KEY$2 = 'bs.scrollspy';\n  const EVENT_KEY$2 = `.${DATA_KEY$2}`;\n  const DATA_API_KEY$1 = '.data-api';\n  const Default$1 = {\n    offset: 10,\n    method: 'auto',\n    target: ''\n  };\n  const DefaultType$1 = {\n    offset: 'number',\n    method: 'string',\n    target: '(string|element)'\n  };\n  const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\n  const EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\n  const EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\n  const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\n  const CLASS_NAME_ACTIVE$1 = 'active';\n  const SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\n  const SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\n  const SELECTOR_NAV_LINKS = '.nav-link';\n  const SELECTOR_NAV_ITEMS = '.nav-item';\n  const SELECTOR_LIST_ITEMS = '.list-group-item';\n  const SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}, .${CLASS_NAME_DROPDOWN_ITEM}`;\n  const SELECTOR_DROPDOWN$1 = '.dropdown';\n  const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\n  const METHOD_OFFSET = 'offset';\n  const METHOD_POSITION = 'position';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class ScrollSpy extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n      this._config = this._getConfig(config);\n      this._offsets = [];\n      this._targets = [];\n      this._activeTarget = null;\n      this._scrollHeight = 0;\n      EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n      this.refresh();\n\n      this._process();\n    } // Getters\n\n\n    static get Default() {\n      return Default$1;\n    }\n\n    static get NAME() {\n      return NAME$2;\n    } // Public\n\n\n    refresh() {\n      const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n      const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n      const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n      this._offsets = [];\n      this._targets = [];\n      this._scrollHeight = this._getScrollHeight();\n      const targets = SelectorEngine.find(SELECTOR_LINK_ITEMS, this._config.target);\n      targets.map(element => {\n        const targetSelector = getSelectorFromElement(element);\n        const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n        if (target) {\n          const targetBCR = target.getBoundingClientRect();\n\n          if (targetBCR.width || targetBCR.height) {\n            return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n          }\n        }\n\n        return null;\n      }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n        this._offsets.push(item[0]);\n\n        this._targets.push(item[1]);\n      });\n    }\n\n    dispose() {\n      EventHandler.off(this._scrollElement, EVENT_KEY$2);\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$1,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      config.target = getElement(config.target) || document.documentElement;\n      typeCheckConfig(NAME$2, config, DefaultType$1);\n      return config;\n    }\n\n    _getScrollTop() {\n      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n    }\n\n    _getScrollHeight() {\n      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n    }\n\n    _getOffsetHeight() {\n      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n    }\n\n    _process() {\n      const scrollTop = this._getScrollTop() + this._config.offset;\n\n      const scrollHeight = this._getScrollHeight();\n\n      const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n      if (this._scrollHeight !== scrollHeight) {\n        this.refresh();\n      }\n\n      if (scrollTop >= maxScroll) {\n        const target = this._targets[this._targets.length - 1];\n\n        if (this._activeTarget !== target) {\n          this._activate(target);\n        }\n\n        return;\n      }\n\n      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n        this._activeTarget = null;\n\n        this._clear();\n\n        return;\n      }\n\n      for (let i = this._offsets.length; i--;) {\n        const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n        if (isActiveTarget) {\n          this._activate(this._targets[i]);\n        }\n      }\n    }\n\n    _activate(target) {\n      this._activeTarget = target;\n\n      this._clear();\n\n      const queries = SELECTOR_LINK_ITEMS.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n      const link = SelectorEngine.findOne(queries.join(','), this._config.target);\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n\n      if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n        SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n      } else {\n        SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n          // Set triggered links parents as active\n          // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n          SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n          SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n            SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n          });\n        });\n      }\n\n      EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n        relatedTarget: target\n      });\n    }\n\n    _clear() {\n      SelectorEngine.find(SELECTOR_LINK_ITEMS, this._config.target).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = ScrollSpy.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   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n    SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .ScrollSpy to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(ScrollSpy);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.1.3): tab.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$1 = 'tab';\n  const DATA_KEY$1 = 'bs.tab';\n  const EVENT_KEY$1 = `.${DATA_KEY$1}`;\n  const DATA_API_KEY = '.data-api';\n  const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\n  const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\n  const EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\n  const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\n  const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\n  const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\n  const CLASS_NAME_ACTIVE = 'active';\n  const CLASS_NAME_FADE$1 = 'fade';\n  const CLASS_NAME_SHOW$1 = 'show';\n  const SELECTOR_DROPDOWN = '.dropdown';\n  const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\n  const SELECTOR_ACTIVE = '.active';\n  const SELECTOR_ACTIVE_UL = ':scope > li > .active';\n  const SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\n  const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\n  const SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tab extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$1;\n    } // Public\n\n\n    show() {\n      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n        return;\n      }\n\n      let previous;\n      const target = getElementFromSelector(this._element);\n\n      const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n      if (listElement) {\n        const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n        previous = SelectorEngine.find(itemSelector, listElement);\n        previous = previous[previous.length - 1];\n      }\n\n      const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n        relatedTarget: this._element\n      }) : null;\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n        relatedTarget: previous\n      });\n\n      if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._activate(this._element, listElement);\n\n      const complete = () => {\n        EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n          relatedTarget: this._element\n        });\n        EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n          relatedTarget: previous\n        });\n      };\n\n      if (target) {\n        this._activate(target, target.parentNode, complete);\n      } else {\n        complete();\n      }\n    } // Private\n\n\n    _activate(element, container, callback) {\n      const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n      const active = activeElements[0];\n      const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n      const complete = () => this._transitionComplete(element, active, callback);\n\n      if (active && isTransitioning) {\n        active.classList.remove(CLASS_NAME_SHOW$1);\n\n        this._queueCallback(complete, element, true);\n      } else {\n        complete();\n      }\n    }\n\n    _transitionComplete(element, active, callback) {\n      if (active) {\n        active.classList.remove(CLASS_NAME_ACTIVE);\n        const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n        if (dropdownChild) {\n          dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n        }\n\n        if (active.getAttribute('role') === 'tab') {\n          active.setAttribute('aria-selected', false);\n        }\n      }\n\n      element.classList.add(CLASS_NAME_ACTIVE);\n\n      if (element.getAttribute('role') === 'tab') {\n        element.setAttribute('aria-selected', true);\n      }\n\n      reflow(element);\n\n      if (element.classList.contains(CLASS_NAME_FADE$1)) {\n        element.classList.add(CLASS_NAME_SHOW$1);\n      }\n\n      let parent = element.parentNode;\n\n      if (parent && parent.nodeName === 'LI') {\n        parent = parent.parentNode;\n      }\n\n      if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n        const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n        if (dropdownElement) {\n          SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n        }\n\n        element.setAttribute('aria-expanded', true);\n      }\n\n      if (callback) {\n        callback();\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tab.getOrCreateInstance(this);\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   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const data = Tab.getOrCreateInstance(this);\n    data.show();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tab to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Tab);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.1.3): toast.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME = 'toast';\n  const DATA_KEY = 'bs.toast';\n  const EVENT_KEY = `.${DATA_KEY}`;\n  const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\n  const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\n  const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\n  const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\n  const EVENT_HIDE = `hide${EVENT_KEY}`;\n  const EVENT_HIDDEN = `hidden${EVENT_KEY}`;\n  const EVENT_SHOW = `show${EVENT_KEY}`;\n  const EVENT_SHOWN = `shown${EVENT_KEY}`;\n  const CLASS_NAME_FADE = 'fade';\n  const CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility\n\n  const CLASS_NAME_SHOW = 'show';\n  const CLASS_NAME_SHOWING = 'showing';\n  const DefaultType = {\n    animation: 'boolean',\n    autohide: 'boolean',\n    delay: 'number'\n  };\n  const Default = {\n    animation: true,\n    autohide: true,\n    delay: 5000\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Toast extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._timeout = null;\n      this._hasMouseInteraction = false;\n      this._hasKeyboardInteraction = false;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get DefaultType() {\n      return DefaultType;\n    }\n\n    static get Default() {\n      return Default;\n    }\n\n    static get NAME() {\n      return NAME;\n    } // Public\n\n\n    show() {\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._clearTimeout();\n\n      if (this._config.animation) {\n        this._element.classList.add(CLASS_NAME_FADE);\n      }\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_SHOWING);\n\n        EventHandler.trigger(this._element, EVENT_SHOWN);\n\n        this._maybeScheduleHide();\n      };\n\n      this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated\n\n\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_SHOW);\n\n      this._element.classList.add(CLASS_NAME_SHOWING);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    hide() {\n      if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const complete = () => {\n        this._element.classList.add(CLASS_NAME_HIDE); // @deprecated\n\n\n        this._element.classList.remove(CLASS_NAME_SHOWING);\n\n        this._element.classList.remove(CLASS_NAME_SHOW);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN);\n      };\n\n      this._element.classList.add(CLASS_NAME_SHOWING);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    dispose() {\n      this._clearTimeout();\n\n      if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n        this._element.classList.remove(CLASS_NAME_SHOW);\n      }\n\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      typeCheckConfig(NAME, config, this.constructor.DefaultType);\n      return config;\n    }\n\n    _maybeScheduleHide() {\n      if (!this._config.autohide) {\n        return;\n      }\n\n      if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n        return;\n      }\n\n      this._timeout = setTimeout(() => {\n        this.hide();\n      }, this._config.delay);\n    }\n\n    _onInteraction(event, isInteracting) {\n      switch (event.type) {\n        case 'mouseover':\n        case 'mouseout':\n          this._hasMouseInteraction = isInteracting;\n          break;\n\n        case 'focusin':\n        case 'focusout':\n          this._hasKeyboardInteraction = isInteracting;\n          break;\n      }\n\n      if (isInteracting) {\n        this._clearTimeout();\n\n        return;\n      }\n\n      const nextElement = event.relatedTarget;\n\n      if (this._element === nextElement || this._element.contains(nextElement)) {\n        return;\n      }\n\n      this._maybeScheduleHide();\n    }\n\n    _setListeners() {\n      EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n      EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n    }\n\n    _clearTimeout() {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Toast.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](this);\n        }\n      });\n    }\n\n  }\n\n  enableDismissTrigger(Toast);\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Toast to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Toast);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.1.3): index.umd.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const index_umd = {\n    Alert,\n    Button,\n    Carousel,\n    Collapse,\n    Dropdown,\n    Modal,\n    Offcanvas,\n    Popover,\n    ScrollSpy,\n    Tab,\n    Toast,\n    Tooltip\n  };\n\n  return index_umd;\n\n}));\n//# sourceMappingURL=bootstrap.js.map\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.DisposableEvent = exports.CompositeDisposable = exports.Disposable = void 0;\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar Disposable =\n/*#__PURE__*/\nfunction () {\n  function Disposable(block) {\n    _classCallCheck(this, Disposable);\n\n    if (!block) {\n      throw new Error('A Disposable must be created with a dispose callback');\n    }\n\n    this.block = block;\n  }\n\n  _createClass(Disposable, [{\n    key: \"dispose\",\n    value: function dispose() {\n      if (this.block) {\n        this.block();\n        delete this.block;\n      }\n    }\n  }]);\n\n  return Disposable;\n}();\n\nexports.Disposable = Disposable;\n\nvar CompositeDisposable =\n/*#__PURE__*/\nfunction (_Disposable) {\n  _inherits(CompositeDisposable, _Disposable);\n\n  function CompositeDisposable() {\n    var _this;\n\n    var disposables = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n    _classCallCheck(this, CompositeDisposable);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(CompositeDisposable).call(this, function () {\n      for (var i = 0; i < _this.disposables.length; i++) {\n        var disposable = _this.disposables[i];\n        disposable.dispose();\n      }\n    }));\n    _this.disposables = disposables;\n    return _this;\n  }\n\n  _createClass(CompositeDisposable, [{\n    key: \"add\",\n    value: function add(disposable) {\n      this.disposables.push(disposable);\n    }\n  }, {\n    key: \"remove\",\n    value: function remove(disposable) {\n      var index = this.disposables.indexOf(disposable);\n\n      if (index !== -1) {\n        this.disposables.splice(index, 1);\n      }\n    }\n  }]);\n\n  return CompositeDisposable;\n}(Disposable);\n\nexports.CompositeDisposable = CompositeDisposable;\n\nvar DisposableEvent =\n/*#__PURE__*/\nfunction (_Disposable2) {\n  _inherits(DisposableEvent, _Disposable2);\n\n  function DisposableEvent(target, event, listener) {\n    var _this2;\n\n    _classCallCheck(this, DisposableEvent);\n\n    var events = event.split(/\\s+/g);\n\n    if (typeof target.addEventListener === 'function') {\n      _this2 = _possibleConstructorReturn(this, _getPrototypeOf(DisposableEvent).call(this, function () {\n        return events.forEach(function (e) {\n          return target.removeEventListener(e, listener);\n        });\n      }));\n      events.forEach(function (e) {\n        return target.addEventListener(e, listener);\n      });\n    } else if (typeof target.on === 'function') {\n      _this2 = _possibleConstructorReturn(this, _getPrototypeOf(DisposableEvent).call(this, function () {\n        return events.forEach(function (e) {\n          return target.off(e, listener);\n        });\n      }));\n      events.forEach(function (e) {\n        return target.on(e, listener);\n      });\n    } else {\n      throw new Error('The passed-in source must have either a addEventListener or on method');\n    }\n\n    return _possibleConstructorReturn(_this2);\n  }\n\n  return DisposableEvent;\n}(Disposable);\n\nexports.DisposableEvent = DisposableEvent;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.merge = merge;\nexports.clone = clone;\nexports.curry = curry;\nexports.curryN = curryN;\nexports.compose = compose;\nexports.pipe = pipe;\nexports.clearNodeCache = clearNodeCache;\nexports.getNode = getNode;\nexports.getNodes = getNodes;\nexports.cloneNode = cloneNode;\nexports.nodeIndex = nodeIndex;\nexports.detachNode = detachNode;\nexports.animate = animate;\nexports.eachParent = eachParent;\nexports.parents = parents;\nexports.parent = parent;\nexports.nodeAndParents = nodeAndParents;\nexports.addDelegatedEventListener = addDelegatedEventListener;\nexports.domEvent = exports.createEventObject = exports.createEvent = exports.newEvent = exports.mapEach = exports.fill = exports.log = exports.inputName = exports.asDataAttributes = exports.asPair = exports.asArray = exports.when = exports.init = exports.tail = exports.last = exports.head = exports.never = exports.always = exports.identity = exports.apply = exports.curry4 = exports.curry3 = exports.curry2 = exports.curry1 = void 0;\n\nvar _widjetDisposables = require(\"widjet-disposables\");\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); }\n\nfunction _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n//  ######  ######## ########\n// ##    ##    ##    ##     ##\n// ##          ##    ##     ##\n//  ######     ##    ##     ##\n//       ##    ##    ##     ##\n// ##    ##    ##    ##     ##\n//  ######     ##    ########\nfunction merge(a, b) {\n  var c = {};\n\n  for (var k in a) {\n    c[k] = a[k];\n  }\n\n  for (var _k in b) {\n    c[_k] = b[_k];\n  }\n\n  return c;\n}\n\nfunction clone(object) {\n  var copy = {};\n\n  for (var k in object) {\n    copy[k] = object[k];\n  }\n\n  return copy;\n}\n\nvar slice = Array.prototype.slice;\n\nvar _curry = function _curry(n, fn) {\n  var curryArgs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n  return function () {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    var concatArgs = curryArgs.concat(args);\n    return n > concatArgs.length ? _curry(n, fn, concatArgs) : fn.apply(null, concatArgs);\n  };\n};\n\nfunction curry(fn) {\n  return _curry(fn.length, fn);\n}\n\nfunction curryN(n, fn) {\n  return _curry(n, fn);\n}\n\nvar curry1 = curryN(2, curryN)(1);\nexports.curry1 = curry1;\nvar curry2 = curryN(2, curryN)(2);\nexports.curry2 = curry2;\nvar curry3 = curryN(2, curryN)(3);\nexports.curry3 = curry3;\nvar curry4 = curryN(2, curryN)(4);\nexports.curry4 = curry4;\nvar apply = curry2(function (fn, args) {\n  return fn.apply(null, args);\n});\nexports.apply = apply;\n\nvar identity = function identity(a) {\n  return a;\n};\n\nexports.identity = identity;\n\nvar always = function always(a) {\n  return true;\n};\n\nexports.always = always;\n\nvar never = function never(a) {\n  return false;\n};\n\nexports.never = never;\n\nvar head = function head(a) {\n  return a[0];\n};\n\nexports.head = head;\n\nvar last = function last(a) {\n  return a[a.length - 1];\n};\n\nexports.last = last;\n\nvar tail = function tail(a) {\n  return a.slice(1);\n};\n\nexports.tail = tail;\n\nvar init = function init(a) {\n  return a.slice(0, -1);\n};\n\nexports.init = init;\nvar when = curry2(function (predicates) {\n  for (var _len2 = arguments.length, values = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n    values[_key2 - 1] = arguments[_key2];\n  }\n\n  var doWhen = function doWhen(a) {\n    var _head = head(a),\n        _head2 = _slicedToArray(_head, 2),\n        predicate = _head2[0],\n        resolve = _head2[1];\n\n    return predicate.apply(void 0, values) ? resolve.apply(void 0, values) : doWhen(tail(a));\n  };\n\n  return doWhen(predicates);\n});\nexports.when = when;\n\nfunction compose() {\n  for (var _len3 = arguments.length, fns = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n    fns[_key3] = arguments[_key3];\n  }\n\n  fns.push(apply(fns.pop()));\n  return function () {\n    for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n      args[_key4] = arguments[_key4];\n    }\n\n    return fns.reduceRight(function (memo, fn) {\n      return fn(memo);\n    }, args);\n  };\n}\n\nfunction pipe() {\n  for (var _len5 = arguments.length, fns = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n    fns[_key5] = arguments[_key5];\n  }\n\n  fns[0] = apply(fns[0]);\n  return function () {\n    for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n      args[_key6] = arguments[_key6];\n    }\n\n    return fns.reduce(function (memo, fn) {\n      return fn(memo);\n    }, args);\n  };\n}\n\nvar asArray = function asArray(collection) {\n  return slice.call(collection);\n};\n\nexports.asArray = asArray;\n\nvar asPair = function asPair(object) {\n  return Object.keys(object).map(function (k) {\n    return [k, object[k]];\n  });\n};\n\nexports.asPair = asPair;\n\nvar asDataAttributes = function asDataAttributes(o) {\n  return asPair(o).map(function (_ref) {\n    var _ref2 = _slicedToArray(_ref, 2),\n        k = _ref2[0],\n        v = _ref2[1];\n\n    return typeof v === 'boolean' ? v ? k : '' : \"\".concat(k, \"=\\\"\").concat(v, \"\\\"\");\n  }).map(function (s) {\n    return \"data-\".concat(s);\n  }).join(' ');\n};\n\nexports.asDataAttributes = asDataAttributes;\n\nvar inputName = function inputName() {\n  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n    prefix: '[',\n    suffix: ']'\n  };\n  var prefix = options.prefix || '';\n  var suffix = options.suffix || '';\n  return function () {\n    for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n      args[_key7] = arguments[_key7];\n    }\n\n    return [head(args)].concat(tail(args).map(function (s) {\n      return \"\".concat(prefix).concat(s).concat(suffix);\n    })).join('');\n  };\n};\n\nexports.inputName = inputName;\n\nvar log = function log(v) {\n  console.log(v);\n  return v;\n};\n\nexports.log = log;\nvar fill = curry2(function (len, value) {\n  return new Array(len).fill(value);\n});\nexports.fill = fill;\nvar mapEach = curry2(function (maps, values) {\n  return values.map(function (v, i) {\n    return maps[i % maps.length](v);\n  });\n}); // ########   #######  ##     ##\n// ##     ## ##     ## ###   ###\n// ##     ## ##     ## #### ####\n// ##     ## ##     ## ## ### ##\n// ##     ## ##     ## ##     ##\n// ##     ## ##     ## ##     ##\n// ########   #######  ##     ##\n\nexports.mapEach = mapEach;\nvar previewNodes = {};\n\nfunction clearNodeCache() {\n  Object.keys(previewNodes).forEach(function (key) {\n    delete previewNodes[key];\n  });\n}\n\nfunction getNode(html) {\n  var nodeType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'div';\n\n  if (!html) {\n    return undefined;\n  }\n\n  if (previewNodes[nodeType] == null) {\n    previewNodes[nodeType] = document.createElement(nodeType);\n  }\n\n  var previewNode = previewNodes[nodeType];\n  previewNode.innerHTML = html;\n  var node = previewNode.firstElementChild;\n\n  if (node) {\n    previewNode.removeChild(node);\n  }\n\n  previewNode.innerHTML = '';\n  return node || null;\n}\n\nfunction getNodes(html) {\n  var nodeType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'div';\n\n  if (!html) {\n    return [];\n  }\n\n  if (previewNodes[nodeType] == null) {\n    previewNodes[nodeType] = document.createElement(nodeType);\n  }\n\n  var previewNode = previewNodes[nodeType];\n  previewNode.innerHTML = html;\n  var nodes = asArray(previewNode.childNodes);\n  nodes.forEach(function (n) {\n    return previewNode.removeChild(n);\n  });\n  previewNode.innerHTML = '';\n  return nodes;\n}\n\nfunction cloneNode(node) {\n  return node ? getNode(node.outerHTML) : undefined;\n}\n\nfunction nodeIndex(node) {\n  return node && node.parentNode ? [].indexOf.call(node.parentNode.children, node) : -1;\n}\n\nfunction detachNode(node) {\n  node && node.parentNode && node.parentNode.removeChild(node);\n}\n\nfunction animate(_ref3) {\n  var from = _ref3.from,\n      to = _ref3.to,\n      duration = _ref3.duration,\n      step = _ref3.step,\n      end = _ref3.end;\n  var start = getTime();\n  update();\n\n  function getTime() {\n    return new Date();\n  }\n\n  function swing(progress) {\n    return 0.5 - Math.cos(progress * Math.PI) / 2;\n  }\n\n  function update() {\n    var passed = getTime() - start;\n    var progress = Math.min(1, duration === 0 ? 1 : passed / duration);\n    var delta = swing(progress);\n    step(from + (to - from) * delta, delta);\n    progress < 1 ? window.requestAnimationFrame(update) : end && end();\n  }\n} // ########     ###    ########  ######## ##    ## ########  ######\n// ##     ##   ## ##   ##     ## ##       ###   ##    ##    ##    ##\n// ##     ##  ##   ##  ##     ## ##       ####  ##    ##    ##\n// ########  ##     ## ########  ######   ## ## ##    ##     ######\n// ##        ######### ##   ##   ##       ##  ####    ##          ##\n// ##        ##     ## ##    ##  ##       ##   ###    ##    ##    ##\n// ##        ##     ## ##     ## ######## ##    ##    ##     ######\n\n\nfunction eachParent(node, block) {\n  var parent = node.parentNode;\n\n  while (parent) {\n    block(parent);\n\n    if (parent.nodeName === 'HTML') {\n      break;\n    }\n\n    parent = parent.parentNode;\n  }\n}\n\nfunction parents(node) {\n  var selector = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '*';\n  var parentNodes = [];\n  eachParent(node, function (parent) {\n    if (parent.matches && parent.matches(selector)) {\n      parentNodes.push(parent);\n    }\n  });\n  return parentNodes;\n}\n\nfunction parent(node) {\n  var selector = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '*';\n  return parents(node, selector)[0];\n}\n\nfunction nodeAndParents(node) {\n  var selector = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '*';\n  return [node].concat(parents(node, selector));\n} // ######## ##     ## ######## ##    ## ########  ######\n// ##       ##     ## ##       ###   ##    ##    ##    ##\n// ##       ##     ## ##       ####  ##    ##    ##\n// ######   ##     ## ######   ## ## ##    ##     ######\n// ##        ##   ##  ##       ##  ####    ##          ##\n// ##         ## ##   ##       ##   ###    ##    ##    ##\n// ########    ###    ######## ##    ##    ##     ######\n\n\nfunction appendData(data, event) {\n  if (data) {\n    event.data = data;\n  }\n\n  return event;\n}\n\nvar newEvent = function newEvent(type, data, props) {\n  return appendData(data, new window.Event(type, {\n    bubbles: props.bubbles != null ? props.bubbles : true,\n    cancelable: props.cancelable != null ? props.cancelable : true\n  }));\n};\n\nexports.newEvent = newEvent;\n\nvar createEvent = function createEvent(type, data, props) {\n  var event = document.createEvent('Event');\n  event.initEvent(type, props.bubbles != null ? props.bubbles : true, props.cancelable != null ? props.cancelable : true);\n  return appendData(data, event);\n};\n\nexports.createEvent = createEvent;\n\nvar createEventObject = function createEventObject(type, data, props) {\n  var event = document.createEventObject();\n  event.type = type;\n  event.cancelBubble = props.bubbles === false;\n  delete props.bubbles;\n\n  for (var k in props) {\n    event[k] = props[k];\n  }\n\n  return appendData(data, event);\n};\n\nexports.createEventObject = createEventObject;\nvar domEventImplementation;\n\nvar domEvent = function domEvent(type, data) {\n  var props = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n  if (!domEventImplementation) {\n    try {\n      var e = new window.Event('test');\n      domEventImplementation = e && newEvent;\n    } catch (e) {\n      domEventImplementation = document.createEvent ? createEvent : createEventObject;\n    }\n  }\n\n  return domEventImplementation(type, data, props);\n};\n\nexports.domEvent = domEvent;\n\nfunction addDelegatedEventListener(object, event, selector, callback) {\n  if (typeof selector === 'function') {\n    callback = selector;\n    selector = '*';\n  }\n\n  var listener = function listener(e) {\n    if (e.isPropagationStopped) {\n      return;\n    }\n\n    var target = e.target;\n    decorateEvent(e);\n    nodeAndParents(target).forEach(function (node) {\n      var matched = node.matches(selector);\n\n      if (e.isImmediatePropagationStopped || !matched) {\n        return;\n      }\n\n      e.matchedTarget = node;\n      callback(e);\n    });\n  };\n\n  return new _widjetDisposables.DisposableEvent(object, event, listener);\n\n  function decorateEvent(e) {\n    var overriddenStop = window.Event.prototype.stopPropagation;\n\n    e.stopPropagation = function () {\n      this.isPropagationStopped = true;\n      overriddenStop.apply(this, arguments);\n    };\n\n    var overriddenStopImmediate = window.Event.prototype.stopImmediatePropagation;\n\n    e.stopImmediatePropagation = function () {\n      this.isImmediatePropagationStopped = true;\n      overriddenStopImmediate.apply(this, arguments);\n    };\n  }\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.getValidator = getValidator;\nObject.defineProperty(exports, \"DEFAULT_VALIDATORS\", {\n  enumerable: true,\n  get: function get() {\n    return _validators.default;\n  }\n});\nObject.defineProperty(exports, \"validatePresence\", {\n  enumerable: true,\n  get: function get() {\n    return _validators.validatePresence;\n  }\n});\nObject.defineProperty(exports, \"validateChecked\", {\n  enumerable: true,\n  get: function get() {\n    return _validators.validateChecked;\n  }\n});\nObject.defineProperty(exports, \"validateEmail\", {\n  enumerable: true,\n  get: function get() {\n    return _validators.validateEmail;\n  }\n});\nObject.defineProperty(exports, \"validateAccept\", {\n  enumerable: true,\n  get: function get() {\n    return _validators.validateAccept;\n  }\n});\nObject.defineProperty(exports, \"DEFAULT_RESOLVERS\", {\n  enumerable: true,\n  get: function get() {\n    return _resolvers.default;\n  }\n});\n\nvar _widjet = _interopRequireDefault(require(\"widjet\"));\n\nvar _widjetDisposables = require(\"widjet-disposables\");\n\nvar _widjetUtils = require(\"widjet-utils\");\n\nvar _validators = _interopRequireWildcard(require(\"./validators\"));\n\nvar _resolvers = _interopRequireDefault(require(\"./resolvers\"));\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); }\n\nfunction _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n_widjet.default.define('live-validation', function (options) {\n  var validator = getValidator(options);\n  var events = options.events || 'change blur';\n  var inputBuffer = options.inputBuffer || 0;\n  return function (input) {\n    input.validateSelfAndForm = function (silent) {\n      var result = input.validate(silent);\n      var form = (0, _widjetUtils.parent)(input, 'form');\n\n      if (form) {\n        form.validateExcept(input, true);\n      }\n\n      return result;\n    };\n\n    input.validate = function (silent) {\n      return validator(input, silent);\n    };\n\n    if (options.validateOnInit) {\n      input.validate();\n    }\n\n    return new _widjetDisposables.CompositeDisposable([new _widjetDisposables.DisposableEvent(input, events, withInputBuffer(inputBuffer, function () {\n      return input.validateSelfAndForm();\n    })), new _widjetDisposables.Disposable(function () {\n      return delete input.validate;\n    })]);\n  };\n});\n\n_widjet.default.define('form-validation', function (options) {\n  var fieldSelector = options.fieldSelector || 'input, select, textarea';\n  var events = options.events || 'submit';\n  var validator = getValidator(options);\n\n  var reducer = function reducer(silent) {\n    return function (memo, item) {\n      return (item.validate ? item.validate(silent) : validator(item, silent)) || memo;\n    };\n  };\n\n  return function (form) {\n    form.validateExcept = function (input, silent) {\n      var result = (0, _widjetUtils.asArray)(form.querySelectorAll(fieldSelector)).filter(function (i) {\n        return i != input;\n      }).reduce(reducer(silent), false);\n\n      if (result) {\n        _widjet.default.dispatch(form, 'did-not-validate', result);\n      } else {\n        _widjet.default.dispatch(form, 'did-validate', result);\n      }\n\n      return result;\n    };\n\n    form.validate = function (silent) {\n      return form.validateExcept(null, silent);\n    };\n\n    if (options.validateOnInit) {\n      form.validate();\n    }\n\n    return new _widjetDisposables.CompositeDisposable([new _widjetDisposables.Disposable(function () {\n      form.removeAttribute('novalidate');\n      delete form.validate;\n    }), new _widjetDisposables.DisposableEvent(form, events, function (e) {\n      var hasErrors = form.validate();\n\n      if (hasErrors) {\n        e.stopImmediatePropagation();\n        e.preventDefault();\n      }\n\n      return !hasErrors;\n    })]);\n  };\n});\n\nfunction getValidator(options) {\n  var validators = (options.validators || []).concat(_validators.default);\n  var resolvers = (options.resolvers || []).concat(_resolvers.default);\n  var i18n = options.i18n || _widjetUtils.identity;\n  var onSuccess = options.onSuccess || _widjetUtils.identity;\n  var onError = options.onError || defaultErrorFeedback;\n  var clean = options.clean || defaultCleanFeedback;\n  var validator = (0, _widjetUtils.when)(validators.map(function (_ref) {\n    var _ref2 = _slicedToArray(_ref, 2),\n        predicate = _ref2[0],\n        validate = _ref2[1];\n\n    return [predicate, (0, _widjetUtils.compose)((0, _widjetUtils.apply)((0, _widjetUtils.curry2)(validate)(i18n)), (0, _widjetUtils.mapEach)([(0, _widjetUtils.when)(resolvers), _widjetUtils.identity]), (0, _widjetUtils.fill)(2))];\n  }));\n  return function (input, silent) {\n    clean(input);\n    var res = validator(input);\n\n    if (!silent) {\n      res != null ? onError(input, res) : onSuccess(input);\n    }\n\n    return res != null;\n  };\n}\n\nfunction defaultErrorFeedback(input, res) {\n  var prevError = document.querySelector(\"[name=\\\"\".concat(input.name, \"\\\"] + .error\"));\n\n  if (prevError) {\n    (0, _widjetUtils.detachNode)(prevError);\n  }\n\n  var error = (0, _widjetUtils.getNode)(\"<div class='error'>\".concat(res, \"</div>\"));\n  input.parentNode.insertBefore(error, input.nextElementSibling);\n}\n\nfunction defaultCleanFeedback(input) {\n  var next = input.nextElementSibling;\n\n  if (next && next.classList.contains('error')) {\n    (0, _widjetUtils.detachNode)(next);\n  }\n}\n\nfunction withInputBuffer(buffer, callback) {\n  var timeout;\n  return buffer <= 0 ? callback : function () {\n    clearTimeout(timeout);\n    timeout = setTimeout(callback, buffer);\n  };\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _widjetUtils = require(\"widjet-utils\");\n\nvar _utils = require(\"./utils\");\n\nvar _default = [[(0, _utils.inputPredicate)('checkbox'), function (i) {\n  return i.checked;\n}], [(0, _utils.inputPredicate)('number', 'range'), function (i) {\n  return i.value && parseFloat(i.value);\n}], [(0, _utils.inputPredicate)('radio'), function (i) {\n  return radioValue((0, _widjetUtils.parent)(i, 'form'), i.name);\n}], [(0, _utils.inputPredicate)('file'), function (i) {\n  return i.files;\n}], [(0, _utils.selectPredicate)(true), function (i) {\n  return optionValues(i);\n}], [(0, _utils.selectPredicate)(false), function (i) {\n  return optionValues(i)[0];\n}], [_widjetUtils.always, function (i) {\n  return i.value;\n}]];\nexports.default = _default;\n\nfunction optionValues(input) {\n  return (0, _widjetUtils.asArray)(input.querySelectorAll('option')).filter(function (o) {\n    return o.selected;\n  }).map(function (o) {\n    return o.value;\n  });\n}\n\nfunction radioValue(form, name) {\n  var checked = form && (0, _widjetUtils.asArray)(form.querySelectorAll(\"[name=\\\"\".concat(name, \"\\\"]\"))).filter(function (i) {\n    return i.checked;\n  })[0];\n  return checked ? checked.value : undefined;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.inputPredicate = inputPredicate;\nexports.selectPredicate = selectPredicate;\nexports.attributePredicate = attributePredicate;\n\nfunction inputPredicate() {\n  for (var _len = arguments.length, types = new Array(_len), _key = 0; _key < _len; _key++) {\n    types[_key] = arguments[_key];\n  }\n\n  return function (input) {\n    return input.nodeName === 'INPUT' && types.indexOf(input.type) > -1;\n  };\n}\n\nfunction selectPredicate(multiple) {\n  return function (input) {\n    return input.nodeName === 'SELECT' && input.multiple === multiple;\n  };\n}\n\nfunction attributePredicate(attr) {\n  return function (input) {\n    return input.hasAttribute(attr);\n  };\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.nativeValidation = nativeValidation;\nexports.validatePresence = validatePresence;\nexports.validateChecked = validateChecked;\nexports.validateEmail = validateEmail;\nexports.validateAccept = validateAccept;\nexports.default = void 0;\n\nvar _widjetUtils = require(\"widjet-utils\");\n\nfunction nativeValidation(i18n, value, input) {\n  return input.checkValidity() ? null : labelForValidity(input);\n}\n\nvar MESSAGES = {\n  badInput: 'bad_input',\n  customError: 'custom_error',\n  patternMismatch: 'pattern_mismatch',\n  rangeOverflow: 'range_overflow',\n  rangeUnderflow: 'range_underflow',\n  stepMismatch: 'step_mismatch',\n  tooLong: 'too_long',\n  tooShort: 'too_short',\n  typeMismatch: {\n    email: 'email_mismatch',\n    url: 'url_mismatch'\n  },\n  valueMissing: 'value_missing'\n};\n\nfunction labelForValidity(input) {\n  return Object.keys(MESSAGES).reduce(function (memo, key) {\n    if (memo) {\n      return memo;\n    }\n\n    if (input.validity[key]) {\n      return MESSAGES[key][input.type] || MESSAGES[key];\n    }\n\n    return null;\n  }, null);\n}\n\nfunction validatePresence(i18n, value) {\n  return value != null && value.length !== 0 ? null : i18n('value_missing');\n}\n\nfunction validateChecked(i18n, value) {\n  return value ? null : i18n('unchecked');\n}\n\nfunction validateEmail(i18n, value) {\n  return validatePresence(i18n, value) || (/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/.test(value.toUpperCase()) ? null : i18n('invalid_email'));\n}\n\nvar match = function match(re, s) {\n  return new RegExp(re).test(s);\n};\n\nvar escDot = function escDot(s) {\n  return s.replace('.', '\\\\.');\n};\n\nvar compact = function compact(a) {\n  return a.filter(function (v) {\n    return v != null;\n  });\n};\n\nvar getFileValidator = (0, _widjetUtils.when)([[function (s) {\n  return /^\\./.test(s);\n}, function (s) {\n  return function (f) {\n    return match(\"\".concat(escDot(s), \"$\"), f.name);\n  };\n}], [function (s) {\n  return /\\/\\*/.test(s);\n}, function (s) {\n  return function (f) {\n    return match(\"^\".concat(s.replace('*', '')), f.type);\n  };\n}], [_widjetUtils.always, function (s) {\n  return function (f) {\n    return f.type === s;\n  };\n}]]);\n\nfunction validateAccept(i18n, value, input) {\n  var accepted = input.getAttribute('accept').split(',');\n  var validators = accepted.map(getFileValidator);\n  var results = compact(value.map(function (file) {\n    return validators.some(function (f) {\n      return f(file);\n    }) ? null : i18n('invalid_file_type', {\n      file: value.name\n    });\n  }));\n  return results.length ? results.join('\\n') : null;\n}\n\nvar _default = [[_widjetUtils.always, nativeValidation]];\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = widgets;\n\nvar _widjetUtils = require(\"widjet-utils\");\n\nvar _widjetDisposables = require(\"widjet-disposables\");\n\nvar _widget = _interopRequireDefault(require(\"./widget\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); }\n\nfunction _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n/**\n * The `WIDGETS` object stores all the registered widget factories.\n */\nvar WIDGETS = {};\n/**\n * The `INSTANCES` object stores the returned instances of the various widgets,\n * stored by widget type and then mapped with their target DOM element as key.\n */\n\nvar INSTANCES = {};\n/**\n * The `SUBSCRIPTIONS` object stores all the subscriptions object created\n * through the `widgets.subscribe` function.\n */\n\nvar SUBSCRIPTIONS = {};\n/**\n * The `widgets` function is both the main module and the function\n * used to register the widgets to apply on a page.\n *\n * @param {string} name the name of the widget to apply\n * @param {string} selector the CSS selector for the targets of the widge\n * @param {Object} [options={}] the base options for this widget application.\n * @param {string|Array<string>} [options.on] the list of events that will\n *                                            trigger the application\n *                                            of the widget\n * @param {function():boolean} [options.if] a function use to define when\n *                                          to apply the widget\n * @param {function():boolean} [options.unless] a function use to define when\n *                                              to not apply the widget\n * @param {Object|function} [options.media] a media condition to apply\n *                                          to the widget\n * @param {Object|function} [options.media.min] the minimum screen width\n *                                              at which the widget will apply\n * @param {Object|function} [options.media.max] the maximum screen width\n *                                              at which the widget will apply\n * @param {function(el:HTMLElement):void} [block]\n */\n\nfunction widgets(name, selector) {\n  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  var block = arguments.length > 3 ? arguments[3] : undefined;\n\n  if (WIDGETS[name] == null) {\n    throw new Error(\"Unable to find widget '\".concat(name, \"'\"));\n  } // The options specific to the widget registration and activation are\n  // extracted from the options object.\n\n\n  var ifCond = options.if;\n  var unlessCond = options.unless;\n  var targetFrame = options.targetFrame;\n  var handledClass = \"\".concat(name, \"-handled\");\n  var events = options.on || 'init';\n  var mediaCondition = options.media;\n  var mediaHandler;\n  delete options.on;\n  delete options.if;\n  delete options.unless;\n  delete options.media;\n  delete options.targetFrame;\n  var define = WIDGETS[name];\n  var elementHandle = define(options);\n  var targetDocument = targetFrame ? document.querySelector(targetFrame).contentDocument : document;\n  var targetWindow = targetFrame ? document.querySelector(targetFrame).contentWindow : window; // Events can be passed as a string with event names separated with spaces.\n\n  if (typeof events === 'string') {\n    events = events.split(/\\s+/g);\n  } // The widgets instances are stored in a Map with the DOM element they\n  // target as key. The instances hashes are stored per widget type.\n\n\n  var instances = INSTANCES[name] || (INSTANCES[name] = new Map()); // This method execute a test condition for the given element. The condition\n  // can be either a function or a value converted to boolean.\n\n  function testCondition(condition, element) {\n    return typeof condition === 'function' ? condition(element) : !!condition;\n  } // This method will test if an element can be handled by the current widget.\n  // It will test for both the handled class presence and the widget\n  // conditions. Note that if both the `if` and `unless` conditions\n  // are passed in the options object they will be tested as both part\n  // of a single `&&` condition.\n\n\n  function canBeHandled(element, widget) {\n    var res = !widgets.hasBeenHandled(element, widget);\n    res = ifCond ? res && testCondition(ifCond, element) : res;\n    res = unlessCond ? res && !testCondition(unlessCond, element) : res;\n    return res;\n  } // If a media condition have been specified, the widget activation will be\n  // conditionned based on the result of this condition. The condition is\n  // verified each time the `resize` event is triggered.\n\n\n  if (mediaCondition) {\n    // The media condition can be either a boolean value, a function, or,\n    // to simply the setup, an object with `min` and `max` property containing\n    // the minimal and maximal window width where the widget is activated.\n    if (mediaCondition instanceof Object) {\n      var _mediaCondition = mediaCondition,\n          min = _mediaCondition.min,\n          max = _mediaCondition.max;\n\n      mediaCondition = function __mediaCondition() {\n        var res = true;\n\n        var _widgets$getScreenSiz = widgets.getScreenSize(targetWindow),\n            _widgets$getScreenSiz2 = _slicedToArray(_widgets$getScreenSiz, 1),\n            width = _widgets$getScreenSiz2[0];\n\n        res = min != null ? res && width >= min : res;\n        res = max != null ? res && width <= max : res;\n        return res;\n      };\n    } // The media handler is registered on the `resize` event of the `window`\n    // object.\n\n\n    mediaHandler = function mediaHandler(element, widget) {\n      var conditionMatched = testCondition(mediaCondition, element);\n\n      if (conditionMatched && !widget.active) {\n        widget.activate();\n      } else if (!conditionMatched && widget.active) {\n        widget.deactivate();\n      }\n    };\n\n    widgets.subscribe(name, targetWindow, 'resize', function () {\n      instances.forEach(function (widget, element) {\n        return mediaHandler(element, widget);\n      });\n    });\n  } // The `handler` function is the function registered on specified event and\n  // will proceed to the creation of the widgets if the conditions are met.\n\n\n  var handler = function handler() {\n    var elements = targetDocument.querySelectorAll(selector);\n    (0, _widjetUtils.asArray)(elements).forEach(function (element) {\n      if (!canBeHandled(element, name)) {\n        return;\n      }\n\n      var widget = new _widget.default(element, elementHandle, (0, _widjetUtils.clone)(options), handledClass);\n      widget.init();\n      instances.set(element, widget); // The widgets activation state are resolved at creation\n\n      mediaCondition ? mediaHandler(element, widget) : widget.activate();\n      widgets.dispatch(\"\".concat(name, \":handled\"), {\n        element: element,\n        widget: widget\n      });\n      block && block.call(element, element, widget);\n    });\n  }; // For each event specified, the handler is registered as listener.\n  // A special case is the `init` event that simply mean to trigger the\n  // handler as soon a the function is called.\n\n\n  events.forEach(function (event) {\n    switch (event) {\n      case 'init':\n        handler();\n        break;\n\n      case 'load':\n      case 'resize':\n        widgets.subscribe(name, targetWindow, event, handler);\n        break;\n\n      default:\n        widgets.subscribe(name, targetDocument, event, handler);\n    }\n  });\n}\n/**\n * Returns whether the specified `element` has been handled by the specified\n * `widget` handler.\n *\n * @param  {HTMLElement} element the element to check whether\n *                               it was handled or not\n * @param  {string} widjet the name of the widget handler to check\n *                         against the element\n */\n\n\nwidgets.hasBeenHandled = function hasBeenHandled(element, widget) {\n  return this.widgetsFor(element, widget);\n};\n/**\n * A helper function used to dispatch an event from a given `source` or from\n * the `document` if no source is provided.\n *\n * @param  {HTMLElement} source the element onto which dispatch the event\n * @param  {string} type the name of the event to dispatch\n * @param  {Object} [properties={}] the properties of the event to dispatch\n */\n\n\nwidgets.dispatch = function dispatch(source, type) {\n  var properties = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n  if (typeof source === 'string') {\n    properties = type || {};\n    type = source;\n    source = document;\n  }\n\n  var event = (0, _widjetUtils.domEvent)(type, properties);\n\n  if (source.dispatchEvent) {\n    source.dispatchEvent(event);\n  } else {\n    source.fireEvent('on' + event.type, event);\n  }\n};\n/**\n * The `widgets.define` is used to create a new widget usable through the\n * `widgets` method. Basically, a widget is defined using a `name`, and\n * a definition function that either returns another function or an object.\n *\n * The definition function should have the following signature:\n *\n * ```js\n * function (options:Object):function|object\n * ```\n *\n * The `options` object will contains all the options passed to the `widgets`\n * method except the `on`, `if`, `unless` and `media` ones.\n *\n * If the definition function is returning a function, the function should have\n * the following signature:\n *\n * ```js\n * function (element:HTMLElement, widget:Widget):Disposable\n * ```\n *\n * In case of an object, it should have the following structure:\n *\n * ```js\n * {\n *  initialize: function () { ... },\n *  activate: function () { ... },\n *  deactivate: function () { ... },\n *  dispose: function () { ... }\n * }\n * ```\n *\n * Each functions of the object correspond to the hooks available in a widget\n * handler function.\n *\n * @param {string} name the widget name\n * @param {Object|function} blockOrPrototype the widgets' block callback\n *                                           or an object to use as the widget\n *                                           prototype\n */\n\n\nwidgets.define = function (name, blockOrPrototype) {\n  WIDGETS[name] = blockOrPrototype;\n};\n/**\n * Returns whether a widget is currently defined.\n * @param  {string} name the widget name\n * @return {boolean} whether the widget is defined or not\n */\n\n\nwidgets.defined = function (name) {\n  return WIDGETS[name] != null;\n};\n/**\n * Deletes a widget definition.\n *\n * @param  {String} name the name of the widget to delete\n */\n\n\nwidgets.delete = function (name) {\n  if (SUBSCRIPTIONS[name]) {\n    SUBSCRIPTIONS[name].forEach(function (subscription) {\n      return subscription.dispose();\n    });\n  }\n\n  widgets.release(name);\n  delete WIDGETS[name];\n};\n/**\n * Resets parts of all of widgets by deleting their definitions\n *\n * If no name is passed, all the definitions are deleted.\n *\n * @param {...string} names the names of the wigets to delete\n */\n\n\nwidgets.reset = function () {\n  for (var _len = arguments.length, names = new Array(_len), _key = 0; _key < _len; _key++) {\n    names[_key] = arguments[_key];\n  }\n\n  if (names.length === 0) {\n    names = Object.keys(WIDGETS);\n  }\n\n  names.forEach(function (name) {\n    widgets.delete(name);\n    INSTANCES[name] && INSTANCES[name].clear();\n    delete INSTANCES[name];\n  });\n};\n/**\n * Returns all or a specific widget for a given `element`.\n *\n * If no `widget` is specified all the widgets registered for the passed-in\n * element are returned.\n *\n * @param  {HTMLElement} element the element for which retrieving the widgets\n * @param  {string} widget a name of a specific widget class to retrieve\n * @return {Array<Widget>|Widget} the widget(s) associated to the element\n */\n\n\nwidgets.widgetsFor = function (element, widget) {\n  if (widget) {\n    return INSTANCES[widget] && INSTANCES[widget].get(element);\n  } else {\n    return Object.keys(INSTANCES).map(function (key) {\n      return INSTANCES[key];\n    }).filter(function (instances) {\n      return instances.has(element);\n    }).map(function (instances) {\n      return instances.get(element);\n    }).reduce(function (memo, arr) {\n      return memo.concat(arr);\n    }, []);\n  }\n};\n/**\n * Returns an array with the dimension of the passed-in window\n * @param  {Window} w the target window object\n * @return {array} the dimensions of the window\n */\n\n\nwidgets.getScreenSize = function (w) {\n  return [w.innerWidth, w.innerHeight];\n};\n/**\n * Subscribes an event listener to the specified events onto the specified\n * target and stores a subscription so that it can be unsubscribed later.\n *\n * @param  {string} name the name of the event making the subscription\n * @param  {HTMLElement} to the target element of the subscription\n * @param  {string} evt the target event of the subscription\n * @param  {function(e:Event):void} handler the listener of the subscription\n * @return {DisposableEvent} a disposable object to remove the subscription\n * @private\n */\n\n\nwidgets.subscribe = function (name, to, evt, handler) {\n  SUBSCRIPTIONS[name] || (SUBSCRIPTIONS[name] = []);\n  var subscription = new _widjetDisposables.DisposableEvent(to, evt, handler);\n  SUBSCRIPTIONS[name].push(subscription);\n  return subscription;\n};\n/**\n * The `widgets.release` method can be used to completely remove the widgets\n * of the given `name` from the page.\n * It's the widget responsibility to clean up its dependencies during\n * the `dispose` call.\n *\n * @param {...string} names\n */\n\n\nwidgets.release = function () {\n  for (var _len2 = arguments.length, names = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n    names[_key2] = arguments[_key2];\n  }\n\n  if (names.length === 0) {\n    names = Object.keys(INSTANCES);\n  }\n\n  names.forEach(function (name) {\n    INSTANCES[name] && INSTANCES[name].forEach(function (value) {\n      return value.dispose();\n    });\n  });\n};\n/**\n * Activates all the widgets instances of type `name`.\n *\n * @param  {...string} names [description]\n */\n\n\nwidgets.activate = function () {\n  for (var _len3 = arguments.length, names = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n    names[_key3] = arguments[_key3];\n  }\n\n  if (names.length === 0) {\n    names = Object.keys(INSTANCES);\n  }\n\n  names.forEach(function (name) {\n    INSTANCES[name] && INSTANCES[name].forEach(function (value) {\n      return value.activate();\n    });\n  });\n};\n/**\n * Deactivates all the widgets instances of type `name`.\n *\n * @param  {...string} names [description]\n */\n\n\nwidgets.deactivate = function () {\n  for (var _len4 = arguments.length, names = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n    names[_key4] = arguments[_key4];\n  }\n\n  if (names.length === 0) {\n    names = Object.keys(INSTANCES);\n  }\n\n  names.forEach(function (name) {\n    INSTANCES[name] && INSTANCES[name].forEach(function (value) {\n      return value.deactivate();\n    });\n  });\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJXSURHRVRTIiwiSU5TVEFOQ0VTIiwiU1VCU0NSSVBUSU9OUyIsIndpZGdldHMiLCJuYW1lIiwic2VsZWN0b3IiLCJvcHRpb25zIiwiYmxvY2siLCJFcnJvciIsImlmQ29uZCIsImlmIiwidW5sZXNzQ29uZCIsInVubGVzcyIsInRhcmdldEZyYW1lIiwiaGFuZGxlZENsYXNzIiwiZXZlbnRzIiwib24iLCJtZWRpYUNvbmRpdGlvbiIsIm1lZGlhIiwibWVkaWFIYW5kbGVyIiwiZGVmaW5lIiwiZWxlbWVudEhhbmRsZSIsInRhcmdldERvY3VtZW50IiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwiY29udGVudERvY3VtZW50IiwidGFyZ2V0V2luZG93IiwiY29udGVudFdpbmRvdyIsIndpbmRvdyIsInNwbGl0IiwiaW5zdGFuY2VzIiwiTWFwIiwidGVzdENvbmRpdGlvbiIsImNvbmRpdGlvbiIsImVsZW1lbnQiLCJjYW5CZUhhbmRsZWQiLCJ3aWRnZXQiLCJyZXMiLCJoYXNCZWVuSGFuZGxlZCIsIk9iamVjdCIsIm1pbiIsIm1heCIsIl9fbWVkaWFDb25kaXRpb24iLCJnZXRTY3JlZW5TaXplIiwid2lkdGgiLCJjb25kaXRpb25NYXRjaGVkIiwiYWN0aXZlIiwiYWN0aXZhdGUiLCJkZWFjdGl2YXRlIiwic3Vic2NyaWJlIiwiZm9yRWFjaCIsImhhbmRsZXIiLCJlbGVtZW50cyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJXaWRnZXQiLCJpbml0Iiwic2V0IiwiZGlzcGF0Y2giLCJjYWxsIiwiZXZlbnQiLCJ3aWRnZXRzRm9yIiwic291cmNlIiwidHlwZSIsInByb3BlcnRpZXMiLCJkaXNwYXRjaEV2ZW50IiwiZmlyZUV2ZW50IiwiYmxvY2tPclByb3RvdHlwZSIsImRlZmluZWQiLCJkZWxldGUiLCJzdWJzY3JpcHRpb24iLCJkaXNwb3NlIiwicmVsZWFzZSIsInJlc2V0IiwibmFtZXMiLCJsZW5ndGgiLCJrZXlzIiwiY2xlYXIiLCJnZXQiLCJtYXAiLCJrZXkiLCJmaWx0ZXIiLCJoYXMiLCJyZWR1Y2UiLCJtZW1vIiwiYXJyIiwiY29uY2F0IiwidyIsImlubmVyV2lkdGgiLCJpbm5lckhlaWdodCIsInRvIiwiZXZ0IiwiRGlzcG9zYWJsZUV2ZW50IiwicHVzaCIsInZhbHVlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7OztBQUVBOzs7QUFHQSxJQUFNQSxPQUFPLEdBQUcsRUFBaEI7QUFFQTs7Ozs7QUFJQSxJQUFNQyxTQUFTLEdBQUcsRUFBbEI7QUFFQTs7Ozs7QUFJQSxJQUFNQyxhQUFhLEdBQUcsRUFBdEI7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFzQmUsU0FBU0MsT0FBVCxDQUFpQkMsSUFBakIsRUFBdUJDLFFBQXZCLEVBQXNEO0FBQUEsTUFBckJDLE9BQXFCLHVFQUFYLEVBQVc7QUFBQSxNQUFQQyxLQUFPOztBQUNuRSxNQUFJUCxPQUFPLENBQUNJLElBQUQsQ0FBUCxJQUFpQixJQUFyQixFQUEyQjtBQUN6QixVQUFNLElBQUlJLEtBQUosa0NBQW9DSixJQUFwQyxPQUFOO0FBQ0QsR0FIa0UsQ0FLbkU7QUFDQTs7O0FBQ0EsTUFBTUssTUFBTSxHQUFHSCxPQUFPLENBQUNJLEVBQXZCO0FBQ0EsTUFBTUMsVUFBVSxHQUFHTCxPQUFPLENBQUNNLE1BQTNCO0FBQ0EsTUFBTUMsV0FBVyxHQUFHUCxPQUFPLENBQUNPLFdBQTVCO0FBQ0EsTUFBTUMsWUFBWSxhQUFNVixJQUFOLGFBQWxCO0FBQ0EsTUFBSVcsTUFBTSxHQUFHVCxPQUFPLENBQUNVLEVBQVIsSUFBYyxNQUEzQjtBQUNBLE1BQUlDLGNBQWMsR0FBR1gsT0FBTyxDQUFDWSxLQUE3QjtBQUNBLE1BQUlDLFlBQUo7QUFFQSxTQUFPYixPQUFPLENBQUNVLEVBQWY7QUFDQSxTQUFPVixPQUFPLENBQUNJLEVBQWY7QUFDQSxTQUFPSixPQUFPLENBQUNNLE1BQWY7QUFDQSxTQUFPTixPQUFPLENBQUNZLEtB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N0IsQ0FBbkI7QUFDRCxHQUZEO0FBR0QsQ0FMRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZG9tRXZlbnQsIGNsb25lLCBhc0FycmF5fSBmcm9tICd3aWRqZXQtdXRpbHMnO1xuaW1wb3J0IHtEaXNwb3NhYmxlRXZlbnR9IGZyb20gJ3dpZGpldC1kaXNwb3NhYmxlcyc7XG5pbXBvcnQgV2lkZ2V0IGZyb20gJy4vd2lkZ2V0JztcblxuLyoqXG4gKiBUaGUgYFdJREdFVFNgIG9iamVjdCBzdG9yZXMgYWxsIHRoZSByZWdpc3RlcmVkIHdpZGdldCBmYWN0b3JpZXMuXG4gKi9cbmNvbnN0IFdJREdFVFMgPSB7fTtcblxuLyoqXG4gKiBUaGUgYElOU1RBTkNFU2Agb2JqZWN0IHN0b3JlcyB0aGUgcmV0dXJuZWQgaW5zdGFuY2VzIG9mIHRoZSB2YXJpb3VzIHdpZGdldHMsXG4gKiBzdG9yZWQgYnkgd2lkZ2V0IHR5cGUgYW5kIHRoZW4gbWFwcGVkIHdpdGggdGhlaXIgdGFyZ2V0IERPTSBlbGVtZW50IGFzIGtleS5cbiAqL1xuY29uc3QgSU5TVEFOQ0VTID0ge307XG5cbi8qKlxuICogVGhlIGBTVUJTQ1JJUFRJT05TYCBvYmplY3Qgc3RvcmVzIGFsbCB0aGUgc3Vic2NyaXB0aW9ucyBvYmplY3QgY3JlYXRlZFxuICogdGhyb3VnaCB0aGUgYHdpZGdldHMuc3Vic2NyaWJlYCBmdW5jdGlvbi5cbiAqL1xuY29uc3QgU1VCU0NSSVBUSU9OUyA9IHt9O1xuXG4vKipcbiAqIFRoZSBgd2lkZ2V0c2AgZnVuY3Rpb24gaXMgYm90aCB0aGUgbWFpbiBtb2R1bGUgYW5kIHRoZSBmdW5jdGlvblxuICogdXNlZCB0byByZWdpc3RlciB0aGUgd2lkZ2V0cyB0byBhcHBseSBvbiBhIHBhZ2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgdGhlIG5hbWUgb2YgdGhlIHdpZGdldCB0byBhcHBseVxuICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIHRoZSBDU1Mgc2VsZWN0b3IgZm9yIHRoZSB0YXJnZXRzIG9mIHRoZSB3aWRnZVxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSB0aGUgYmFzZSBvcHRpb25zIGZvciB0aGlzIHdpZGdldCBhcHBsaWNhdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfEFycmF5PHN0cmluZz59IFtvcHRpb25zLm9uXSB0aGUgbGlzdCBvZiBldmVudHMgdGhhdCB3aWxsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlciB0aGUgYXBwbGljYXRpb25cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgd2lkZ2V0XG4gKiBAcGFyYW0ge2Z1bmN0aW9uKCk6Ym9vbGVhbn0gW29wdGlvbnMuaWZdIGEgZnVuY3Rpb24gdXNlIHRvIGRlZmluZSB3aGVuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGFwcGx5IHRoZSB3aWRnZXRcbiAqIEBwYXJhbSB7ZnVuY3Rpb24oKTpib29sZWFufSBbb3B0aW9ucy51bmxlc3NdIGEgZnVuY3Rpb24gdXNlIHRvIGRlZmluZSB3aGVuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBub3QgYXBwbHkgdGhlIHdpZGdldFxuICogQHBhcmFtIHtPYmplY3R8ZnVuY3Rpb259IFtvcHRpb25zLm1lZGlhXSBhIG1lZGlhIGNvbmRpdGlvbiB0byBhcHBseVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgd2lkZ2V0XG4gKiBAcGFyYW0ge09iamVjdHxmdW5jdGlvbn0gW29wdGlvbnMubWVkaWEubWluXSB0aGUgbWluaW11bSBzY3JlZW4gd2lkdGhcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0IHdoaWNoIHRoZSB3aWRnZXQgd2lsbCBhcHBseVxuICogQHBhcmFtIHtPYmplY3R8ZnVuY3Rpb259IFtvcHRpb25zLm1lZGlhLm1heF0gdGhlIG1heGltdW0gc2NyZWVuIHdpZHRoXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdCB3aGljaCB0aGUgd2lkZ2V0IHdpbGwgYXBwbHlcbiAqIEBwYXJhbSB7ZnVuY3Rpb24oZWw6SFRNTEVsZW1lbnQpOnZvaWR9IFtibG9ja11cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gd2lkZ2V0cyhuYW1lLCBzZWxlY3Rvciwgb3B0aW9ucyA9IHt9LCBibG9jaykge1xuICBpZiAoV0lER0VUU1tuYW1lXSA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZmluZCB3aWRnZXQgJyR7bmFtZX0nYCk7XG4gIH1cblxuICAvLyBUaGUgb3B0aW9ucyBzcGVjaWZpYyB0byB0aGUgd2lkZ2V0IHJlZ2lzdHJhdGlvbiBhbmQgYWN0aXZhdGlvbiBhcmVcbiAgLy8gZXh0cmFjdGVkIGZyb20gdGhlIG9wdGlvbnMgb2JqZWN0LlxuICBjb25zdCBpZkNvbmQgPSBvcHRpb25zLmlmO1xuICBjb25zdCB1bmxlc3NDb25kID0gb3B0aW9ucy51bmxlc3M7XG4gIGNvbnN0IHRhcmdldEZyYW1lID0gb3B0aW9ucy50YXJnZXRGcmFtZTtcbiAgY29uc3QgaGFuZGxlZENsYXNzID0gYCR7bmFtZX0taGFuZGxlZGA7XG4gIGxldCBldmVudHMgPSBvcHRpb25zLm9uIHx8ICdpbml0JztcbiAgbGV0IG1lZGlhQ29uZGl0aW9uID0gb3B0aW9ucy5tZWRpYTtcbiAgbGV0IG1lZGlhSGFuZGxlcjtcblxuICBkZWxldGUgb3B0aW9ucy5vbjtcbiAgZGVsZXRlIG9wdGlvbnMuaWY7XG4gIGRlbGV0ZSBvcHRpb25zLnVubGVzcztcbiAgZGVsZXRlIG9wdGlvbnMubWVkaWE7XG4gIGRlbGV0ZSBvcHRpb25zLnRhcmdldEZyYW1lO1xuXG4gIGNvbnN0IGRlZmluZSA9IFdJREdFVFNbbmFtZV07XG4gIGNvbnN0IGVsZW1lbnRIYW5kbGUgPSBkZWZpbmUob3B0aW9ucyk7XG5cbiAgY29uc3QgdGFyZ2V0RG9jdW1lbnQgPSB0YXJnZXRGcmFtZVxuICAgID8gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0YXJnZXRGcmFtZSkuY29udGVudERvY3VtZW50XG4gICAgOiBkb2N1bWVudDtcblxuICBjb25zdCB0YXJnZXRXaW5kb3cgPSB0YXJnZXRGcmFtZVxuICAgID8gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0YXJnZXRGcmFtZSkuY29udGVudFdpbmRvd1xuICAgIDogd2luZG93O1xuXG4gIC8vIEV2ZW50cyBjYW4gYmUgcGFzc2VkIGFzIGEgc3RyaW5nIHdpdGggZXZlbnQgbmFtZXMgc2VwYXJhdGVkIHdpdGggc3BhY2VzLlxuICBpZiAodHlwZW9mIGV2ZW50cyA9PT0gJ3N0cmluZycpIHsgZXZlbnRzID0gZXZlbnRzLnNwbGl0KC9cXHMrL2cpOyB9XG5cbiAgLy8gVGhlIHdpZGdldHMgaW5zdGFuY2VzIGFyZSBzdG9yZWQgaW4gYSBNYXAgd2l0aCB0aGUgRE9NIGVsZW1lbnQgdGhleVxuICAvLyB0YXJnZXQgYXMga2V5LiBUaGUgaW5zdGFuY2VzIGhhc2hlcyBhcmUgc3RvcmVkIHBlciB3aWRnZXQgdHlwZS5cbiAgY29uc3QgaW5zdGFuY2VzID0gSU5TVEFOQ0VTW25hbWVdIHx8IChJTlNUQU5DRVNbbmFtZV0gPSBuZXcgTWFwKCkpO1xuXG4gIC8vIFRoaXMgbWV0aG9kIGV4ZWN1dGUgYSB0ZXN0IGNvbmRpdGlvbiBmb3IgdGhlIGdpdmVuIGVsZW1lbnQuIFRoZSBjb25kaXRpb25cbiAgLy8gY2FuIGJlIGVpdGhlciBhIGZ1bmN0aW9uIG9yIGEgdmFsdWUgY29udmVydGVkIHRvIGJvb2xlYW4uXG4gIGZ1bmN0aW9uIHRlc3RDb25kaXRpb24oY29uZGl0aW9uLCBlbGVtZW50KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBjb25kaXRpb24gPT09ICdmdW5jdGlvbicgPyBjb25kaXRpb24oZWxlbWVudCkgOiAhIWNvbmRpdGlvbjtcbiAgfVxuXG4gIC8vIFRoaXMgbWV0aG9kIHdpbGwgdGVzdCBpZiBhbiBlbGVtZW50IGNhbiBiZSBoYW5kbGVkIGJ5IHRoZSBjdXJyZW50IHdpZGdldC5cbiAgLy8gSXQgd2lsbCB0ZXN0IGZvciBib3RoIHRoZSBoYW5kbGVkIGNsYXNzIHByZXNlbmNlIGFuZCB0aGUgd2lkZ2V0XG4gIC8vIGNvbmRpdGlvbnMuIE5vdGUgdGhhdCBpZiBib3RoIHRoZSBgaWZgIGFuZCBgdW5sZXNzYCBjb25kaXRpb25zXG4gIC8vIGFyZSBwYXNzZWQgaW4gdGhlIG9wdGlvbnMgb2JqZWN0IHRoZXkgd2lsbCBiZSB0ZXN0ZWQgYXMgYm90aCBwYXJ0XG4gIC8vIG9mIGEgc2luZ2xlIGAmJmAgY29uZGl0aW9uLlxuICBmdW5jdGlvbiBjYW5CZUhhbmRsZWQoZWxlbWVudCwgd2lkZ2V0KSB7XG4gICAgbGV0IHJlcyA9ICF3aWRnZXRzLmhhc0JlZW5IYW5kbGVkKGVsZW1lbnQsIHdpZGdldCk7XG4gICAgcmVzID0gaWZDb25kID8gcmVzICYmIHRlc3RDb25kaXRpb24oaWZDb25kLCBlbGVtZW50KSA6IHJlcztcbiAgICByZXMgPSB1bmxlc3NDb25kID8gcmVzICYmICF0ZXN0Q29uZGl0aW9uKHVubGVzc0NvbmQsIGVsZW1lbnQpIDogcmVzO1xuICAgIHJldHVybiByZXM7XG4gIH1cblxuICAvLyBJZiBhIG1lZGlhIGNvbmRpdGlvbiBoYXZlIGJlZW4gc3BlY2lmaWVkLCB0aGUgd2lkZ2V0IGFjdGl2YXRpb24gd2lsbCBiZVxuICAvLyBjb25kaXRpb25uZWQgYmFzZWQgb24gdGhlIHJlc3VsdCBvZiB0aGlzIGNvbmRpdGlvbi4gVGhlIGNvbmRpdGlvbiBpc1xuICAvLyB2ZXJpZmllZCBlYWNoIHRpbWUgdGhlIGByZXNpemVgIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgaWYgKG1lZGlhQ29uZGl0aW9uKSB7XG4gICAgLy8gVGhlIG1lZGlhIGNvbmRpdGlvbiBjYW4gYmUgZWl0aGVyIGEgYm9vbGVhbiB2YWx1ZSwgYSBmdW5jdGlvbiwgb3IsXG4gICAgLy8gdG8gc2ltcGx5IHRoZSBzZXR1cCwgYW4gb2JqZWN0IHdpdGggYG1pbmAgYW5kIGBtYXhgIHByb3BlcnR5IGNvbnRhaW5pbmdcbiAgICAvLyB0aGUgbWluaW1hbCBhbmQgbWF4aW1hbCB3aW5kb3cgd2lkdGggd2hlcmUgdGhlIHdpZGdldCBpcyBhY3RpdmF0ZWQuXG4gICAgaWYgKG1lZGlhQ29uZGl0aW9uIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICBjb25zdCB7bWluLCBtYXh9ID0gbWVkaWFDb25kaXRpb247XG4gICAgICBtZWRpYUNvbmRpdGlvbiA9IGZ1bmN0aW9uIF9fbWVkaWFDb25kaXRpb24oKSB7XG4gICAgICAgIGxldCByZXMgPSB0cnVlO1xuICAgICAgICBjb25zdCBbd2lkdGhdID0gd2lkZ2V0cy5nZXRTY3JlZW5TaXplKHRhcmdldFdpbmRvdyk7XG4gICAgICAgIHJlcyA9IG1pbiAhPSBudWxsID8gcmVzICYmIHdpZHRoID49IG1pbiA6IHJlcztcbiAgICAgICAgcmVzID0gbWF4ICE9IG51bGwgPyByZXMgJiYgd2lkdGggPD0gbWF4IDogcmVzO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBUaGUgbWVkaWEgaGFuZGxlciBpcyByZWdpc3RlcmVkIG9uIHRoZSBgcmVzaXplYCBldmVudCBvZiB0aGUgYHdpbmRvd2BcbiAgICAvLyBvYmplY3QuXG4gICAgbWVkaWFIYW5kbGVyID0gZnVuY3Rpb24oZWxlbWVudCwgd2lkZ2V0KSB7XG4gICAgICBjb25zdCBjb25kaXRpb25NYXRjaGVkID0gdGVzdENvbmRpdGlvbihtZWRpYUNvbmRpdGlvbiwgZWxlbWVudCk7XG5cbiAgICAgIGlmIChjb25kaXRpb25NYXRjaGVkICYmICF3aWRnZXQuYWN0aXZlKSB7XG4gICAgICAgIHdpZGdldC5hY3RpdmF0ZSgpO1xuICAgICAgfSBlbHNlIGlmICghY29uZGl0aW9uTWF0Y2hlZCAmJiB3aWRnZXQuYWN0aXZlKSB7XG4gICAgICAgIHdpZGdldC5kZWFjdGl2YXRlKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHdpZGdldHMuc3Vic2NyaWJlKG5hbWUsIHRhcmdldFdpbmRvdywgJ3Jlc2l6ZScsICgpID0+IHtcbiAgICAgIGluc3RhbmNlcy5mb3JFYWNoKCh3aWRnZXQsIGVsZW1lbnQpID0+IG1lZGlhSGFuZGxlcihlbGVtZW50LCB3aWRnZXQpKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFRoZSBgaGFuZGxlcmAgZnVuY3Rpb24gaXMgdGhlIGZ1bmN0aW9uIHJlZ2lzdGVyZWQgb24gc3BlY2lmaWVkIGV2ZW50IGFuZFxuICAvLyB3aWxsIHByb2NlZWQgdG8gdGhlIGNyZWF0aW9uIG9mIHRoZSB3aWRnZXRzIGlmIHRoZSBjb25kaXRpb25zIGFyZSBtZXQuXG4gIGNvbnN0IGhhbmRsZXIgPSBmdW5jdGlvbigpIHtcbiAgICBjb25zdCBlbGVtZW50cyA9IHRhcmdldERvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuXG4gICAgYXNBcnJheShlbGVtZW50cykuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgaWYgKCFjYW5CZUhhbmRsZWQoZWxlbWVudCwgbmFtZSkpIHsgcmV0dXJuOyB9XG5cbiAgICAgIGNvbnN0IHdpZGdldCA9IG5ldyBXaWRnZXQoXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIGVsZW1lbnRIYW5kbGUsXG4gICAgICAgIGNsb25lKG9wdGlvbnMpLFxuICAgICAgICBoYW5kbGVkQ2xhc3MpO1xuXG4gICAgICB3aWRnZXQuaW5pdCgpO1xuXG4gICAgICBpbnN0YW5jZXMuc2V0KGVsZW1lbnQsIHdpZGdldCk7XG5cbiAgICAgIC8vIFRoZSB3aWRnZXRzIGFjdGl2YXRpb24gc3RhdGUgYXJlIHJlc29sdmVkIGF0IGNyZWF0aW9uXG4gICAgICBtZWRpYUNvbmRpdGlvbiA/IG1lZGlhSGFuZGxlcihlbGVtZW50LCB3aWRnZXQpIDogd2lkZ2V0LmFjdGl2YXRlKCk7XG5cbiAgICAgIHdpZGdldHMuZGlzcGF0Y2goYCR7bmFtZX06aGFuZGxlZGAsIHtlbGVtZW50LCB3aWRnZXR9KTtcblxuICAgICAgYmxvY2sgJiYgYmxvY2suY2FsbChlbGVtZW50LCBlbGVtZW50LCB3aWRnZXQpO1xuICAgIH0pO1xuICB9O1xuXG4gIC8vIEZvciBlYWNoIGV2ZW50IHNwZWNpZmllZCwgdGhlIGhhbmRsZXIgaXMgcmVnaXN0ZXJlZCBhcyBsaXN0ZW5lci5cbiAgLy8gQSBzcGVjaWFsIGNhc2UgaXMgdGhlIGBpbml0YCBldmVudCB0aGF0IHNpbXBseSBtZWFuIHRvIHRyaWdnZXIgdGhlXG4gIC8vIGhhbmRsZXIgYXMgc29vbiBhIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQuXG4gIGV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgc3dpdGNoIChldmVudCkge1xuICAgICAgY2FzZSAnaW5pdCc6XG4gICAgICAgIGhhbmRsZXIoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdsb2FkJzpcbiAgICAgIGNhc2UgJ3Jlc2l6ZSc6XG4gICAgICAgIHdpZGdldHMuc3Vic2NyaWJlKG5hbWUsIHRhcmdldFdpbmRvdywgZXZlbnQsIGhhbmRsZXIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHdpZGdldHMuc3Vic2NyaWJlKG5hbWUsIHRhcmdldERvY3VtZW50LCBldmVudCwgaGFuZGxlcik7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBgZWxlbWVudGAgaGFzIGJlZW4gaGFuZGxlZCBieSB0aGUgc3BlY2lmaWVkXG4gKiBgd2lkZ2V0YCBoYW5kbGVyLlxuICpcbiAqIEBwYXJhbSAge0hUTUxFbGVtZW50fSBlbGVtZW50IHRoZSBlbGVtZW50IHRvIGNoZWNrIHdoZXRoZXJcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0IHdhcyBoYW5kbGVkIG9yIG5vdFxuICogQHBhcmFtICB7c3RyaW5nfSB3aWRqZXQgdGhlIG5hbWUgb2YgdGhlIHdpZGdldCBoYW5kbGVyIHRvIGNoZWNrXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICBhZ2FpbnN0IHRoZSBlbGVtZW50XG4gKi9cbndpZGdldHMuaGFzQmVlbkhhbmRsZWQgPSBmdW5jdGlvbiBoYXNCZWVuSGFuZGxlZChlbGVtZW50LCB3aWRnZXQpIHtcbiAgcmV0dXJuIHRoaXMud2lkZ2V0c0ZvcihlbGVtZW50LCB3aWRnZXQpO1xufTtcblxuLyoqXG4gKiBBIGhlbHBlciBmdW5jdGlvbiB1c2VkIHRvIGRpc3BhdGNoIGFuIGV2ZW50IGZyb20gYSBnaXZlbiBgc291cmNlYCBvciBmcm9tXG4gKiB0aGUgYGRvY3VtZW50YCBpZiBubyBzb3VyY2UgaXMgcHJvdmlkZWQuXG4gKlxuICogQHBhcmFtICB7SFRNTEVsZW1lbnR9IHNvdXJjZSB0aGUgZWxlbWVudCBvbnRvIHdoaWNoIGRpc3BhdGNoIHRoZSBldmVudFxuICogQHBhcmFtICB7c3RyaW5nfSB0eXBlIHRoZSBuYW1lIG9mIHRoZSBldmVudCB0byBkaXNwYXRjaFxuICogQHBhcmFtICB7T2JqZWN0fSBbcHJvcGVydGllcz17fV0gdGhlIHByb3BlcnRpZXMgb2YgdGhlIGV2ZW50IHRvIGRpc3BhdGNoXG4gKi9cbndpZGdldHMuZGlzcGF0Y2ggPSBmdW5jdGlvbiBkaXNwYXRjaChzb3VyY2UsIHR5cGUsIHByb3BlcnRpZXMgPSB7fSkge1xuICBpZiAodHlwZW9mIHNvdXJjZSA9PT0gJ3N0cmluZycpIHtcbiAgICBwcm9wZXJ0aWVzID0gdHlwZSB8fCB7fTtcbiAgICB0eXBlID0gc291cmNlO1xuICAgIHNvdXJjZSA9IGRvY3VtZW50O1xuICB9XG5cbiAgY29uc3QgZXZlbnQgPSBkb21FdmVudCh0eXBlLCBwcm9wZXJ0aWVzKTtcbiAgaWYgKHNvdXJjZS5kaXNwYXRjaEV2ZW50KSB7XG4gICAgc291cmNlLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICB9IGVsc2Uge1xuICAgIHNvdXJjZS5maXJlRXZlbnQoJ29uJyArIGV2ZW50LnR5cGUsIGV2ZW50KTtcbiAgfVxufTtcblxuLyoqXG4gKiBUaGUgYHdpZGdldHMuZGVmaW5lYCBpcyB1c2VkIHRvIGNyZWF0ZSBhIG5ldyB3aWRnZXQgdXNhYmxlIHRocm91Z2ggdGhlXG4gKiBgd2lkZ2V0c2AgbWV0aG9kLiBCYXNpY2FsbHksIGEgd2lkZ2V0IGlzIGRlZmluZWQgdXNpbmcgYSBgbmFtZWAsIGFuZFxuICogYSBkZWZpbml0aW9uIGZ1bmN0aW9uIHRoYXQgZWl0aGVyIHJldHVybnMgYW5vdGhlciBmdW5jdGlvbiBvciBhbiBvYmplY3QuXG4gKlxuICogVGhlIGRlZmluaXRpb24gZnVuY3Rpb24gc2hvdWxkIGhhdmUgdGhlIGZvbGxvd2luZyBzaWduYXR1cmU6XG4gKlxuICogYGBganNcbiAqIGZ1bmN0aW9uIChvcHRpb25zOk9iamVjdCk6ZnVuY3Rpb258b2JqZWN0XG4gKiBgYGBcbiAqXG4gKiBUaGUgYG9wdGlvbnNgIG9iamVjdCB3aWxsIGNvbnRhaW5zIGFsbCB0aGUgb3B0aW9ucyBwYXNzZWQgdG8gdGhlIGB3aWRnZXRzYFxuICogbWV0aG9kIGV4Y2VwdCB0aGUgYG9uYCwgYGlmYCwgYHVubGVzc2AgYW5kIGBtZWRpYWAgb25lcy5cbiAqXG4gKiBJZiB0aGUgZGVmaW5pdGlvbiBmdW5jdGlvbiBpcyByZXR1cm5pbmcgYSBmdW5jdGlvbiwgdGhlIGZ1bmN0aW9uIHNob3VsZCBoYXZlXG4gKiB0aGUgZm9sbG93aW5nIHNpZ25hdHVyZTpcbiAqXG4gKiBgYGBqc1xuICogZnVuY3Rpb24gKGVsZW1lbnQ6SFRNTEVsZW1lbnQsIHdpZGdldDpXaWRnZXQpOkRpc3Bvc2FibGVcbiAqIGBgYFxuICpcbiAqIEluIGNhc2Ugb2YgYW4gb2JqZWN0LCBpdCBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZTpcbiAqXG4gKiBgYGBqc1xuICoge1xuICogIGluaXRpYWxpemU6IGZ1bmN0aW9uICgpIHsgLi4uIH0sXG4gKiAgYWN0aXZhdGU6IGZ1bmN0aW9uICgpIHsgLi4uIH0sXG4gKiAgZGVhY3RpdmF0ZTogZnVuY3Rpb24gKCkgeyAuLi4gfSxcbiAqICBkaXNwb3NlOiBmdW5jdGlvbiAoKSB7IC4uLiB9XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBFYWNoIGZ1bmN0aW9ucyBvZiB0aGUgb2JqZWN0IGNvcnJlc3BvbmQgdG8gdGhlIGhvb2tzIGF2YWlsYWJsZSBpbiBhIHdpZGdldFxuICogaGFuZGxlciBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSB0aGUgd2lkZ2V0IG5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0fGZ1bmN0aW9ufSBibG9ja09yUHJvdG90eXBlIHRoZSB3aWRnZXRzJyBibG9jayBjYWxsYmFja1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYW4gb2JqZWN0IHRvIHVzZSBhcyB0aGUgd2lkZ2V0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVcbiAqL1xud2lkZ2V0cy5kZWZpbmUgPSBmdW5jdGlvbihuYW1lLCBibG9ja09yUHJvdG90eXBlKSB7XG4gIFdJREdFVFNbbmFtZV0gPSBibG9ja09yUHJvdG90eXBlO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgYSB3aWRnZXQgaXMgY3VycmVudGx5IGRlZmluZWQuXG4gKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWUgdGhlIHdpZGdldCBuYW1lXG4gKiBAcmV0dXJuIHtib29sZWFufSB3aGV0aGVyIHRoZSB3aWRnZXQgaXMgZGVmaW5lZCBvciBub3RcbiAqL1xud2lkZ2V0cy5kZWZpbmVkID0gZnVuY3Rpb24obmFtZSkge1xuICByZXR1cm4gV0lER0VUU1tuYW1lXSAhPSBudWxsO1xufTtcblxuLyoqXG4gKiBEZWxldGVzIGEgd2lkZ2V0IGRlZmluaXRpb24uXG4gKlxuICogQHBhcmFtICB7U3RyaW5nfSBuYW1lIHRoZSBuYW1lIG9mIHRoZSB3aWRnZXQgdG8gZGVsZXRlXG4gKi9cbndpZGdldHMuZGVsZXRlID0gZnVuY3Rpb24obmFtZSkge1xuICBpZiAoU1VCU0NSSVBUSU9OU1tuYW1lXSkge1xuICAgIFNVQlNDUklQVElPTlNbbmFtZV0uZm9yRWFjaChzdWJzY3JpcHRpb24gPT4gc3Vic2NyaXB0aW9uLmRpc3Bvc2UoKSk7XG4gIH1cbiAgd2lkZ2V0cy5yZWxlYXNlKG5hbWUpO1xuICBkZWxldGUgV0lER0VUU1tuYW1lXTtcbn07XG5cbi8qKlxuICogUmVzZXRzIHBhcnRzIG9mIGFsbCBvZiB3aWRnZXRzIGJ5IGRlbGV0aW5nIHRoZWlyIGRlZmluaXRpb25zXG4gKlxuICogSWYgbm8gbmFtZSBpcyBwYXNzZWQsIGFsbCB0aGUgZGVmaW5pdGlvbnMgYXJlIGRlbGV0ZWQuXG4gKlxuICogQHBhcmFtIHsuLi5zdHJpbmd9IG5hbWVzIHRoZSBuYW1lcyBvZiB0aGUgd2lnZXRzIHRvIGRlbGV0ZVxuICovXG53aWRnZXRzLnJlc2V0ID0gZnVuY3Rpb24oLi4ubmFtZXMpIHtcbiAgaWYgKG5hbWVzLmxlbmd0aCA9PT0gMCkgeyBuYW1lcyA9IE9iamVjdC5rZXlzKFdJREdFVFMpOyB9XG5cbiAgbmFtZXMuZm9yRWFjaChuYW1lID0+IHtcbiAgICB3aWRnZXRzLmRlbGV0ZShuYW1lKTtcbiAgICBJTlNUQU5DRVNbbmFtZV0gJiYgSU5TVEFOQ0VTW25hbWVdLmNsZWFyKCk7XG4gICAgZGVsZXRlIElOU1RBTkNFU1tuYW1lXTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYWxsIG9yIGEgc3BlY2lmaWMgd2lkZ2V0IGZvciBhIGdpdmVuIGBlbGVtZW50YC5cbiAqXG4gKiBJZiBubyBgd2lkZ2V0YCBpcyBzcGVjaWZpZWQgYWxsIHRoZSB3aWRnZXRzIHJlZ2lzdGVyZWQgZm9yIHRoZSBwYXNzZWQtaW5cbiAqIGVsZW1lbnQgYXJlIHJldHVybmVkLlxuICpcbiAqIEBwYXJhbSAge0hUTUxFbGVtZW50fSBlbGVtZW50IHRoZSBlbGVtZW50IGZvciB3aGljaCByZXRyaWV2aW5nIHRoZSB3aWRnZXRzXG4gKiBAcGFyYW0gIHtzdHJpbmd9IHdpZGdldCBhIG5hbWUgb2YgYSBzcGVjaWZpYyB3aWRnZXQgY2xhc3MgdG8gcmV0cmlldmVcbiAqIEByZXR1cm4ge0FycmF5PFdpZGdldD58V2lkZ2V0fSB0aGUgd2lkZ2V0KHMpIGFzc29jaWF0ZWQgdG8gdGhlIGVsZW1lbnRcbiAqL1xud2lkZ2V0cy53aWRnZXRzRm9yID0gZnVuY3Rpb24oZWxlbWVudCwgd2lkZ2V0KSB7XG4gIGlmICh3aWRnZXQpIHtcbiAgICByZXR1cm4gSU5TVEFOQ0VTW3dpZGdldF0gJiYgSU5TVEFOQ0VTW3dpZGdldF0uZ2V0KGVsZW1lbnQpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhJTlNUQU5DRVMpXG4gICAgICAubWFwKGtleSA9PiBJTlNUQU5DRVNba2V5XSlcbiAgICAgIC5maWx0ZXIoaW5zdGFuY2VzID0+IGluc3RhbmNlcy5oYXMoZWxlbWVudCkpXG4gICAgICAubWFwKGluc3RhbmNlcyA9PiBpbnN0YW5jZXMuZ2V0KGVsZW1lbnQpKVxuICAgICAgLnJlZHVjZSgobWVtbywgYXJyKSA9PiBtZW1vLmNvbmNhdChhcnIpLCBbXSk7XG4gIH1cbn07XG5cbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSB3aXRoIHRoZSBkaW1lbnNpb24gb2YgdGhlIHBhc3NlZC1pbiB3aW5kb3dcbiAqIEBwYXJhbSAge1dpbmRvd30gdyB0aGUgdGFyZ2V0IHdpbmRvdyBvYmplY3RcbiAqIEByZXR1cm4ge2FycmF5fSB0aGUgZGltZW5zaW9ucyBvZiB0aGUgd2luZG93XG4gKi9cbndpZGdldHMuZ2V0U2NyZWVuU2l6ZSA9IGZ1bmN0aW9uKHcpIHtcbiAgcmV0dXJuIFt3LmlubmVyV2lkdGgsIHcuaW5uZXJIZWlnaHRdO1xufTtcblxuLyoqXG4gKiBTdWJzY3JpYmVzIGFuIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBzcGVjaWZpZWQgZXZlbnRzIG9udG8gdGhlIHNwZWNpZmllZFxuICogdGFyZ2V0IGFuZCBzdG9yZXMgYSBzdWJzY3JpcHRpb24gc28gdGhhdCBpdCBjYW4gYmUgdW5zdWJzY3JpYmVkIGxhdGVyLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gbmFtZSB0aGUgbmFtZSBvZiB0aGUgZXZlbnQgbWFraW5nIHRoZSBzdWJzY3JpcHRpb25cbiAqIEBwYXJhbSAge0hUTUxFbGVtZW50fSB0byB0aGUgdGFyZ2V0IGVsZW1lbnQgb2YgdGhlIHN1YnNjcmlwdGlvblxuICogQHBhcmFtICB7c3RyaW5nfSBldnQgdGhlIHRhcmdldCBldmVudCBvZiB0aGUgc3Vic2NyaXB0aW9uXG4gKiBAcGFyYW0gIHtmdW5jdGlvbihlOkV2ZW50KTp2b2lkfSBoYW5kbGVyIHRoZSBsaXN0ZW5lciBvZiB0aGUgc3Vic2NyaXB0aW9uXG4gKiBAcmV0dXJuIHtEaXNwb3NhYmxlRXZlbnR9IGEgZGlzcG9zYWJsZSBvYmplY3QgdG8gcmVtb3ZlIHRoZSBzdWJzY3JpcHRpb25cbiAqIEBwcml2YXRlXG4gKi9cbndpZGdldHMuc3Vic2NyaWJlID0gZnVuY3Rpb24obmFtZSwgdG8sIGV2dCwgaGFuZGxlcikge1xuICBTVUJTQ1JJUFRJT05TW25hbWVdIHx8IChTVUJTQ1JJUFRJT05TW25hbWVdID0gW10pO1xuICBjb25zdCBzdWJzY3JpcHRpb24gPSBuZXcgRGlzcG9zYWJsZUV2ZW50KHRvLCBldnQsIGhhbmRsZXIpO1xuICBTVUJTQ1JJUFRJT05TW25hbWVdLnB1c2goc3Vic2NyaXB0aW9uKTtcbiAgcmV0dXJuIHN1YnNjcmlwdGlvbjtcbn07XG5cbi8qKlxuICogVGhlIGB3aWRnZXRzLnJlbGVhc2VgIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBjb21wbGV0ZWx5IHJlbW92ZSB0aGUgd2lkZ2V0c1xuICogb2YgdGhlIGdpdmVuIGBuYW1lYCBmcm9tIHRoZSBwYWdlLlxuICogSXQncyB0aGUgd2lkZ2V0IHJlc3BvbnNpYmlsaXR5IHRvIGNsZWFuIHVwIGl0cyBkZXBlbmRlbmNpZXMgZHVyaW5nXG4gKiB0aGUgYGRpc3Bvc2VgIGNhbGwuXG4gKlxuICogQHBhcmFtIHsuLi5zdHJpbmd9IG5hbWVzXG4gKi9cbndpZGdldHMucmVsZWFzZSA9IGZ1bmN0aW9uKC4uLm5hbWVzKSB7XG4gIGlmIChuYW1lcy5sZW5ndGggPT09IDApIHsgbmFtZXMgPSBPYmplY3Qua2V5cyhJTlNUQU5DRVMpOyB9XG4gIG5hbWVzLmZvckVhY2gobmFtZSA9PiB7XG4gICAgSU5TVEFOQ0VTW25hbWVdICYmIElOU1RBTkNFU1tuYW1lXS5mb3JFYWNoKHZhbHVlID0+IHZhbHVlLmRpc3Bvc2UoKSk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBBY3RpdmF0ZXMgYWxsIHRoZSB3aWRnZXRzIGluc3RhbmNlcyBvZiB0eXBlIGBuYW1lYC5cbiAqXG4gKiBAcGFyYW0gIHsuLi5zdHJpbmd9IG5hbWVzIFtkZXNjcmlwdGlvbl1cbiAqL1xud2lkZ2V0cy5hY3RpdmF0ZSA9IGZ1bmN0aW9uKC4uLm5hbWVzKSB7XG4gIGlmIChuYW1lcy5sZW5ndGggPT09IDApIHsgbmFtZXMgPSBPYmplY3Qua2V5cyhJTlNUQU5DRVMpOyB9XG4gIG5hbWVzLmZvckVhY2gobmFtZSA9PiB7XG4gICAgSU5TVEFOQ0VTW25hbWVdICYmIElOU1RBTkNFU1tuYW1lXS5mb3JFYWNoKHZhbHVlID0+IHZhbHVlLmFjdGl2YXRlKCkpO1xuICB9KTtcbn07XG5cbi8qKlxuICogRGVhY3RpdmF0ZXMgYWxsIHRoZSB3aWRnZXRzIGluc3RhbmNlcyBvZiB0eXBlIGBuYW1lYC5cbiAqXG4gKiBAcGFyYW0gIHsuLi5zdHJpbmd9IG5hbWVzIFtkZXNjcmlwdGlvbl1cbiAqL1xud2lkZ2V0cy5kZWFjdGl2YXRlID0gZnVuY3Rpb24oLi4ubmFtZXMpIHtcbiAgaWYgKG5hbWVzLmxlbmd0aCA9PT0gMCkgeyBuYW1lcyA9IE9iamVjdC5rZXlzKElOU1RBTkNFUyk7IH1cbiAgbmFtZXMuZm9yRWFjaChuYW1lID0+IHtcbiAgICBJTlNUQU5DRVNbbmFtZV0gJiYgSU5TVEFOQ0VTW25hbWVdLmZvckVhY2godmFsdWUgPT4gdmFsdWUuZGVhY3RpdmF0ZSgpKTtcbiAgfSk7XG59O1xuIl19","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar Widget =\n/*#__PURE__*/\nfunction () {\n  function Widget(element, handler, options, handledClass) {\n    _classCallCheck(this, Widget);\n\n    this.active = false;\n    this.element = element;\n    this.options = options;\n    this.handledClass = handledClass;\n\n    if (_typeof(handler) === 'object') {\n      this.onInitialize = handler.initialize;\n      this.onActivate = handler.activate;\n      this.onDeactivate = handler.deactivate;\n      this.onDispose = handler.dispose;\n    } else {\n      this.handler = handler;\n    }\n  }\n\n  _createClass(Widget, [{\n    key: \"activate\",\n    value: function activate() {\n      if (this.active) {\n        return;\n      }\n\n      this.onActivate && this.onActivate();\n      this.active = true;\n    }\n  }, {\n    key: \"deactivate\",\n    value: function deactivate() {\n      if (!this.active) {\n        return;\n      }\n\n      this.onDeactivate && this.onDeactivate();\n      this.active = false;\n    }\n  }, {\n    key: \"init\",\n    value: function init() {\n      if (this.initialized) {\n        return;\n      }\n\n      this.element.classList.add(this.handledClass);\n      var args = [this.element, this];\n\n      if (this.handler) {\n        this.disposable = this.handler.apply(this, args);\n      }\n\n      this.onInitialize && this.onInitialize();\n      this.initialized = true;\n    }\n  }, {\n    key: \"dispose\",\n    value: function dispose() {\n      if (this.disposed) {\n        return;\n      }\n\n      this.element.classList.remove(this.handledClass);\n      this.disposable && this.disposable.dispose();\n      this.onDispose && this.onDispose();\n      delete this.element;\n      delete this.handler;\n      delete this.handledClass;\n      delete this.disposable;\n      this.disposed = true;\n    }\n  }]);\n\n  return Widget;\n}();\n\nexports.default = Widget;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy93aWRnZXQuanMiXSwibmFtZXMiOlsiV2lkZ2V0IiwiZWxlbWVudCIsImhhbmRsZXIiLCJvcHRpb25zIiwiaGFuZGxlZENsYXNzIiwiYWN0aXZlIiwib25Jbml0aWFsaXplIiwiaW5pdGlhbGl6ZSIsIm9uQWN0aXZhdGUiLCJhY3RpdmF0ZSIsIm9uRGVhY3RpdmF0ZSIsImRlYWN0aXZhdGUiLCJvbkRpc3Bvc2UiLCJkaXNwb3NlIiwiaW5pdGlhbGl6ZWQiLCJjbGFzc0xpc3QiLCJhZGQiLCJhcmdzIiwiZGlzcG9zYWJsZSIsImFwcGx5IiwiZGlzcG9zZWQiLCJyZW1vdmUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztJQUFxQkEsTTs7O0FBQ25CLGtCQUFZQyxPQUFaLEVBQXFCQyxPQUFyQixFQUE4QkMsT0FBOUIsRUFBdUNDLFlBQXZDLEVBQXFEO0FBQUE7O0FBQ25ELFNBQUtDLE1BQUwsR0FBYyxLQUFkO0FBQ0EsU0FBS0osT0FBTCxHQUFlQSxPQUFmO0FBQ0EsU0FBS0UsT0FBTCxHQUFlQSxPQUFmO0FBQ0EsU0FBS0MsWUFBTCxHQUFvQkEsWUFBcEI7O0FBRUEsUUFBSSxRQUFPRixPQUFQLE1BQW1CLFFBQXZCLEVBQWlDO0FBQy9CLFdBQUtJLFlBQUwsR0FBb0JKLE9BQU8sQ0FBQ0ssVUFBNUI7QUFDQSxXQUFLQyxVQUFMLEdBQWtCTixPQUFPLENBQUNPLFFBQTFCO0FBQ0EsV0FBS0MsWUFBTCxHQUFvQlIsT0FBTyxDQUFDUyxVQUE1QjtBQUNBLFdBQUtDLFNBQUwsR0FBaUJWLE9BQU8sQ0FBQ1csT0FBekI7QUFDRCxLQUxELE1BS087QUFDTCxXQUFLWCxPQUFMLEdBQWVBLE9BQWY7QUFDRDtBQUNGOzs7OytCQUVVO0FBQ1QsVUFBSSxLQUFLRyxNQUFULEVBQWlCO0FBQUU7QUFBUzs7QUFFNUIsV0FBS0csVUFBTCxJQUFtQixLQUFLQSxVQUFMLEVBQW5CO0FBQ0EsV0FBS0gsTUFBTCxHQUFjLElBQWQ7QUFDRDs7O2lDQUVZO0FBQ1gsVUFBSSxDQUFDLEtBQUtBLE1BQVYsRUFBa0I7QUFBRTtBQUFTOztBQUU3QixXQUFLSyxZQUFMLElBQXFCLEtBQUtBLFlBQUwsRUFBckI7QUFDQSxXQUFLTCxNQUFMLEdBQWMsS0FBZDtBQUNEOzs7MkJBRU07QUFDTCxVQUFJLEtBQUtTLFdBQVQsRUFBc0I7QUFBRTtBQUFTOztBQUVqQyxXQUFLYixPQUFMLENBQWFjLFNBQWIsQ0FBdUJDLEdBQXZCLENBQTJCLEtBQUtaLFlBQWhDO0FBQ0EsVUFBTWEsSUFBSSxHQUFHLENBQUMsS0FBS2hCLE9BQU4sRUFBZSxJQUFmLENBQWI7O0FBQ0EsVUFBSSxLQUFLQyxPQUFULEVBQWtCO0FBQUUsYUFBS2dCLFVBQUwsR0FBa0IsS0FBS2hCLE9BQUwsQ0FBYWlCLEtBQWIsQ0FBbUIsSUFBbkIsRUFBeUJGLElBQXpCLENBQWxCO0FBQW1EOztBQUN2RSxXQUFLWCxZQUFMLElBQXFCLEtBQUtBLFlBQUwsRUFBckI7QUFFQSxXQUFLUSxXQUFMLEdBQW1CLElBQW5CO0FBQ0Q7Ozs4QkFFUztBQUNSLFVBQUksS0FBS00sUUFBVCxFQUFtQjtBQUFFO0FBQVM7O0FBRTlCLFdBQUtuQixPQUFMLENBQWFjLFNBQWIsQ0FBdUJNLE1BQXZCLENBQThCLEtBQUtqQixZQUFuQztBQUVBLFdBQUtjLFVBQUwsSUFBbUIsS0FBS0EsVUFBTCxDQUFnQkwsT0FBaEIsRUFBbkI7QUFDQSxXQUFLRCxTQUFMLElBQWtCLEtBQUtBLFNBQUwsRUFBbEI7QUFFQSxhQUFPLEtBQUtYLE9BQVo7QUFDQSxhQUFPLEtBQUtDLE9BQVo7QUFDQSxhQUFPLEtBQUtFLFlBQVo7QUFDQSxhQUFPLEtBQUtjLFVBQVo7QUFFQSxXQUFLRSxRQUFMLEdBQWdCLElBQWhCO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBjbGFzcyBXaWRnZXQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBoYW5kbGVyLCBvcHRpb25zLCBoYW5kbGVkQ2xhc3MpIHtcbiAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLmhhbmRsZWRDbGFzcyA9IGhhbmRsZWRDbGFzcztcblxuICAgIGlmICh0eXBlb2YgaGFuZGxlciA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHRoaXMub25Jbml0aWFsaXplID0gaGFuZGxlci5pbml0aWFsaXplO1xuICAgICAgdGhpcy5vbkFjdGl2YXRlID0gaGFuZGxlci5hY3RpdmF0ZTtcbiAgICAgIHRoaXMub25EZWFjdGl2YXRlID0gaGFuZGxlci5kZWFjdGl2YXRlO1xuICAgICAgdGhpcy5vbkRpc3Bvc2UgPSBoYW5kbGVyLmRpc3Bvc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXI7XG4gICAgfVxuICB9XG5cbiAgYWN0aXZhdGUoKSB7XG4gICAgaWYgKHRoaXMuYWN0aXZlKSB7IHJldHVybjsgfVxuXG4gICAgdGhpcy5vbkFjdGl2YXRlICYmIHRoaXMub25BY3RpdmF0ZSgpO1xuICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgfVxuXG4gIGRlYWN0aXZhdGUoKSB7XG4gICAgaWYgKCF0aGlzLmFjdGl2ZSkgeyByZXR1cm47IH1cblxuICAgIHRoaXMub25EZWFjdGl2YXRlICYmIHRoaXMub25EZWFjdGl2YXRlKCk7XG4gICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgfVxuXG4gIGluaXQoKSB7XG4gICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpIHsgcmV0dXJuOyB9XG5cbiAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZCh0aGlzLmhhbmRsZWRDbGFzcyk7XG4gICAgY29uc3QgYXJncyA9IFt0aGlzLmVsZW1lbnQsIHRoaXNdO1xuICAgIGlmICh0aGlzLmhhbmRsZXIpIHsgdGhpcy5kaXNwb3NhYmxlID0gdGhpcy5oYW5kbGVyLmFwcGx5KHRoaXMsIGFyZ3MpOyB9XG4gICAgdGhpcy5vbkluaXRpYWxpemUgJiYgdGhpcy5vbkluaXRpYWxpemUoKTtcblxuICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICB9XG5cbiAgZGlzcG9zZSgpIHtcbiAgICBpZiAodGhpcy5kaXNwb3NlZCkgeyByZXR1cm47IH1cblxuICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuaGFuZGxlZENsYXNzKTtcblxuICAgIHRoaXMuZGlzcG9zYWJsZSAmJiB0aGlzLmRpc3Bvc2FibGUuZGlzcG9zZSgpO1xuICAgIHRoaXMub25EaXNwb3NlICYmIHRoaXMub25EaXNwb3NlKCk7XG5cbiAgICBkZWxldGUgdGhpcy5lbGVtZW50O1xuICAgIGRlbGV0ZSB0aGlzLmhhbmRsZXI7XG4gICAgZGVsZXRlIHRoaXMuaGFuZGxlZENsYXNzO1xuICAgIGRlbGV0ZSB0aGlzLmRpc3Bvc2FibGU7XG5cbiAgICB0aGlzLmRpc3Bvc2VkID0gdHJ1ZTtcbiAgfVxufVxuIl19","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import EN from './locales/en';\nimport ES from './locales/es';\nimport FR from './locales/fr';\nimport DE from './locales/de';\nimport PT from './locales/pt';\n\nexport const LOCALES = {\n  en: EN,\n  es: ES,\n  fr: FR,\n  de: DE,\n  pt: PT,\n};\n","export default {\n  widgets: {\n    coordinates: {\n      error: \"Can't retrieve GPS coordinates for the provided address\",\n    },\n    validation: {\n      blank: \"This field cannot be blank\",\n      value_missing: \"This field cannot be blank\",\n      invalid_email: 'Please fill a valid email address',\n      password_confirmation_doesnt_match: 'Confirmation does not match password',\n      bad_input: 'Bad input',\n      pattern_mismatch: 'Value does not match the specified pattern',\n      range_overflow: 'Value exceeds the allowed range',\n      range_underflow: 'Value is below the allowed range',\n      too_long: 'The value is too long',\n      too_short: 'The value is too short',\n      email_mismatch: 'The value is not a valid email',\n      url_mismatch: 'The value is not a valid URL',\n    },\n    field_limit: {\n      remaining: \"Remaining characters: #{count}\",\n    },\n    file_preview: {\n      label: \"Browse…\",\n    },\n    table_header_sort: {\n      reset: 'Reset order',\n    },\n  },\n\n  settings_input: {\n    required: {\n      label: 'Required field',\n    },\n\n    collection: {\n      values: {\n        label: 'Possible values (comma separated list)',\n        placeholder: 'item 1, item 2, item 3',\n      },\n\n      multiple: {\n        label: 'Many choices available',\n      },\n    },\n\n    integer: {\n      default: {\n        label: 'Default Value',\n        placeholder: '1',\n      },\n\n      min: {\n        label: 'Minimum value',\n        placeholder: '0',\n      },\n\n      max: {\n        label: 'Maximum value',\n        placeholder: '100',\n      },\n\n      step: {\n        label: 'Step',\n        placeholder: '1',\n      },\n    },\n\n    float: {\n      default: {\n        label: 'Default Value',\n        placeholder: '1',\n      },\n\n      min: {\n        label: 'Minimum value',\n        placeholder: '0',\n      },\n\n      max: {\n        label: 'Maximum value',\n        placeholder: '100',\n      },\n\n      step: {\n        label: 'Step',\n        placeholder: '0.1',\n      },\n    },\n\n    string: {\n      limit: {\n        label: 'Size Limit',\n        placeholder: 'no limit',\n      },\n\n      textarea: {\n        label: 'Multiline text',\n      },\n    },\n  },\n  game: {\n    recaptcha: {\n      blank: 'Please complete the reCAPTCHA',\n      invalid: 'Invalid reCAPTCHA',\n    },\n\n    countdown: {\n      go: 'GO!',\n    },\n  },\n  infomil: {\n    invalid_card: 'Incorrect card number or PIN.',\n  },\n};\n","export default {\n  es: {\n    widgets: {\n      coordinates: {\n        error: \"No se puede recuperar las coordenadas GPS de la dirección indicada.\",\n      },\n      validation: {\n        blank: 'Este campo no puede estar vacío',\n        invalid_email: 'Introduce un email válido',\n      },\n    },\n    settings_input: {\n      required: {\n        label: 'Campo necesario',\n      },\n      collection: {\n        values: {\n          label: 'Posibles valores (lista separada por comas)',\n          placeholder: 'item 1, item 2, item 3',\n        },\n        multiple: {\n          label: 'Existen varias opciones',\n        },\n      },\n      integer: {\n        default: {\n          label: 'Valor predeterminado',\n          placeholder: '1',\n        },\n        min: {\n          label: 'Valor mínimo',\n          placeholder: '0',\n        },\n        max: {\n          label: 'Valor máximo',\n          placeholder: '100',\n        },\n        step: {\n          label: 'Pas',\n          placeholder: '1',\n        },\n      },\n      float: {\n        default: {\n          label: 'Valor predeterminado',\n          placeholder: '1',\n        },\n        min: {\n          label: 'Valor mínimo',\n          placeholder: '0',\n        },\n        max: {\n          label: 'Valor máximo',\n          placeholder: '100',\n        },\n        step: {\n          label: 'Intervalo',\n          placeholder: '0.1',\n        },\n      },\n      string: {\n        limit: {\n          label: 'Límite de tamaño',\n          placeholder: 'No existe limitación',\n        },\n        textarea: {\n          label: 'Texto sobre varias líneas',\n        }\n      }\n    },\n    stats: {\n      sales: \"Ventas\",\n      overall_sales: \"Ventas totales (están incluidos los cupones y gastos de envío)\",\n      split: \"Distribución por tipo de joya\",\n      options_split: \"Distribución\",\n    },\n  },\n};\n","export default {\n  labels: {\n    total: 'Total',\n  },\n  actions: {\n    remove_image: \"Supprimer l'image\",\n    remove_video: \"Supprimer la vidéo\",\n  },\n  enums: {\n    bon_ordre_sort_by: {\n      price_asc: 'Du moins cher au plus cher',\n      price_desc: 'Du plus cher au moins cher',\n      weight_asc: 'Du plus léger au plus lourd',\n      weight_desc: 'Du plus lourd au plus léger',\n    },\n    game_entries: {\n      id_type: {\n        no_type: 'Sans passer par une API GALEC',\n        infomil: 'Par API INFOMIL',\n        ciam: 'Par API CIAM',\n      },\n    },\n  },\n  sms_subscriptions: {\n    alert: {\n      title: \"C'est noté !\",\n      content: \"Vous serez désormais alerté 24h avant qu'une offre de l'une de ces catégories soit diffusée.\",\n    },\n    error_alert: {\n      title: \"Erreur durant l'enregistrement !\",\n    },\n  },\n  store_importer: {\n    config: {\n      separator: 'Caractère de séparation',\n      central: 'Colonne contenant le nom de la centrale',\n      province: 'Colonne contenant le nom du département',\n      store_name: 'Colonne contenant la raison sociale du magasin',\n      store_display_name: 'Colonne contenant le nom du magasin',\n      store_address: \"Colonne contenant l'adresse du magasin\",\n      store_city: 'Colonne contenant la ville du magasin',\n      store_postal_code: 'Colonne contenant le code postal du magasin',\n      store_id_number: 'Colonne contenant le code pannonceau du magasin',\n    }\n  },\n  game: {\n    graph_title: 'Participations journalières',\n    wheel: {\n      congratulation: 'Félicitations !',\n      win: \"<tspan x='287'>Vous venez de remporter...</tspan><tspan x='287' dy='28px' style='font-weight: bold;'>#{cash_prize}</tspan>\",\n      win_notice: \"<tspan x='287'>Vous allez recevoir le détail de votre gain</tspan><tspan x='287' dy='24px'>par mail afin de récupérer votre</tspan><tspan x='287' dy='24px'>lot dans votre magasin</tspan><tspan x='287' dy='24px'>#{store_name}</tspan>\",\n      loss: \"Perdu !\",\n      loss_message: \"<tspan x='287' dy='24px'>Revenez tenter votre chance</tspan><tspan x='287' dy='34px' style='font-weight: bold; font-size: 26px'>dès demain.</tspan><tspan x='287' dy='34px'>À bientôt !</tspan>\",\n    },\n    jackpot: {\n      congratulation: 'Gagné !',\n      win: \"<tspan x='287' dy='28px' style='font-weight: bold;'>#{cash_prize}</tspan>\",\n      win_notice: \"<tspan x='287' dy='24px'>Vous venez de remporter dans votre magasin </tspan><tspan x='287' dy='24px'>#{store_name}</tspan>\",\n      loss_title: \"Perdu !\",\n      loss_message: \"<tspan x='287' dy='24px'>Vous n'avez pas gagné cette fois-ci, vous pouvez tentez votre chance 1 fois par jour jusqu'au #{end_date}</tspan>\",\n      loss_message2: \"<tspan x='287' dy='24px'>Réessayez demain</tspan>\",\n    },\n    config: {\n      questions: {\n        _label: 'Questions',\n        question: 'Libellé de la question',\n        answers: {\n          _label: 'Réponses',\n          label: 'Libellé de la réponse',\n          valid_answer: 'Bonne réponse',\n        },\n      },\n      main_grid: {\n        _label: 'Grille principale',\n        count: 'Nombre de numéros gagnants',\n        max: 'Nombre de numéros dans la grille',\n        columns: 'Nombre de colonnes dans la grille',\n      },\n      extra_grid: {\n        _label: 'Grille complémentaire',\n        enable: 'Utiliser la grille complémentaire',\n        count: 'Nombre de numéros gagnants',\n        max: 'Nombre de numéros dans la grille',\n        columns: 'Nombre de colonnes dans la grille',\n      },\n      wheel_segments_count: 'Nombre de segments de la roue',\n      randomize_wheel_segments: 'Répartir les lots aléatoirement dans la roue',\n\n      basket_products: {\n        _label: 'Produits du panier',\n        name: 'Nom du produit',\n        price: 'Prix de vente (€)',\n        image: 'Image du produit',\n        day: 'Jour (vide = tous les jours)',\n      },\n      basket_size: 'Nombre maximum de produits dans le panier',\n      basket_min_size: 'Nombre minimum de produits dans le panier',\n      max_quantity: 'Quantité maximum par produit',\n      min_price: 'Prix minimum',\n      max_price: 'Prix maximum',\n\n      instruction: 'Consigne affichée au joueur',\n      sort_by: 'Critère de tri',\n      products: {\n        _label: 'Produits à ordonner',\n        name: 'Nom du produit',\n        price: 'Prix de vente (€)',\n        weight: 'Poids (en grammes)',\n        image: 'Image du produit',\n      },\n\n      leclerc_images: {\n        _label: 'Images des produits à toucher (marque E.Leclerc)',\n      },\n      national_brand_images: {\n        _label: 'Images des produits à éviter (marques nationales)',\n      },\n\n      duration_seconds: 'Durée de la partie (en secondes)',\n      good_targets_count: 'Part de bonnes cibles',\n      bad_targets_count: 'Part de mauvaises cibles',\n    },\n    graphic_config: {\n      home_page: {\n        _label: \"Bloc page d'accueil\",\n        logo: 'Logo du jeu',\n        background: 'Image de fond',\n        background_video: 'Vidéo de fond',\n        background_video_mobile: 'Vidéo de fond mobile',\n        background_call_to_play: 'Image de fond appel à participation',\n        image_dotation: 'Image de la dotation',\n        image_above_play: 'Image au-dessus du bouton jouer',\n        image_play_left: 'Image à gauche du bouton jouer',\n        image_play_right: 'Image à droite du bouton jouer',\n        image_mobile_decoration: 'Image décorative mobile (autour du 31)',\n        custom_css: 'CSS personalisé'\n      },\n      game_specific: {\n        _label: 'Paramètres graphiques spécifiques au jeu',\n        scratch_image: 'Image à gratter',\n        scratch_lost_image: 'Image ticket non gagnant',\n        wheel_loss_segment_background: 'Couleur du fond du segment perdu',\n        wheel_loss_segment_foreground: 'Couleur du texte du segment perdu',\n        wheel_background_result: 'Couleur du texte de résultat Gagné / Perdu',\n        wheel_outline: 'Image de contour de la roue',\n        wheel_pointer: 'Image du pointeur de la roue',\n        wheel_center: 'Image du centre de la roue',\n        background_jackpot_image: 'Contour du jeu',\n        lever_jackpot_image: 'Image du levier',\n        wheel_win_segment_image: 'Image du segment gagnant',\n        wheel_loose_segment_image: 'Image du segment perdu',\n        win_image: 'Image segment gagnant',\n        first_loose_image: 'Image segment perdu 1',\n        second_loose_image: 'Image segment perdu 2',\n        third_lost_image: 'Image segment perdu 3',\n        fourth_lost_image: 'Image segment perdu 4',\n        fifth_lost_image: 'Image segment perdu 5',\n        sixth_lost_image: 'Image segment perdu 6',\n        seventh_lost_image: 'Image segment perdu 7',\n\n        juste_prix_background_result: \"Couleur de fond de l'écran de résultat\",\n        juste_prix_product_image: 'Image du produit',\n        bon_ordre_background_result: \"Couleur de fond de l'écran de résultat\",\n        tir_cible_background_result: \"Couleur de fond de l'écran de résultat\",\n      },\n    },\n    already_played: 'Vous avez déjà participé à ce jeu',\n    unknown_account: 'Désolé, aucun compte ne correspond à cet email',\n\n    participation_code: {\n      invalid: 'Ce code de participation est invalide ou a déjà été utilisé.',\n      valid: 'Code validé, vous pouvez participer.',\n      blank: 'Veuillez saisir votre code de participation.',\n      error: 'Impossible de vérifier le code pour le moment, veuillez réessayer.',\n    },\n\n    recaptcha: {\n      blank: 'Veuillez valider le reCAPTCHA',\n      invalid: 'reCAPTCHA invalide',\n    },\n\n    countdown: {\n      go: 'GO !',\n    },\n\n    result: {\n      time: 'Votre temps : #{time}',\n    },\n    juste_prix: {\n      thanks: 'Merci pour votre participation !',\n      notice: 'Vous recevrez prochainement un email si vous faites partie des gagnants du jour.',\n    },\n    bon_ordre: {\n      placed: 'Positions correctes : #{placed}/#{total}',\n      thanks: 'Merci pour votre participation !',\n      notice: 'Vous recevrez prochainement un email si vous faites partie des gagnants du jour.',\n    },\n    tir_cible: {\n      thanks: 'Merci pour votre participation !',\n      score: 'Votre score : #{score} pts',\n      notice: 'Vous recevrez prochainement un email si vous faites partie des gagnants du jour.',\n    },\n  },\n  widgets: {\n    coordinates: {\n      error: \"Impossible de récupérer les coordonnées GPS de l'adresse indiquée.\",\n    },\n    validation: {\n      blank: 'Ce champ ne peut être vide',\n      value_missing: 'Ce champ ne peut être vide',\n      invalid_email: 'Saisissez une adresse email valide',\n      password_confirmation_doesnt_match: 'La confirmation ne correspond pas au mot de passe saisi',\n      bad_input: 'La saisie est invalide',\n      pattern_mismatch: 'La valeur saisie ne correspond pas au motif demandé',\n      range_overflow: 'La valeur excède la plage autorisée',\n      range_underflow: 'La valeur est sous la plage autorisée',\n      too_long: 'La valeur est trop longue',\n      too_short: 'La valeur est trop courte',\n      email_mismatch: \"La valeur saisie n'est pas un email valide\",\n      url_mismatch: \"La valeur saisie n'est pas une URL valide\",\n      unchecked: \"Accepter le règlement est obligatoire pour pouvoir participer\",\n    },\n    field_limit: {\n      remaining: \"Caractères restants : #{count}\",\n    },\n    file_preview: {\n      label: \"Parcourir…\",\n    },\n    table_header_sort: {\n      reset: 'Remettre à zéro le tri',\n    },\n  },\n\n  settings_input: {\n    required: {\n      label: 'Champ obligatoire',\n    },\n\n    collection: {\n      values: {\n        label: 'Valeurs possible (liste séparée par des virgules)',\n        placeholder: 'item 1, item 2, item 3',\n      },\n\n      multiple: {\n        label: 'Plusieurs choix possible',\n      },\n    },\n\n    integer: {\n      default: {\n        label: 'Valeur par défaut',\n        placeholder: '1',\n      },\n\n      min: {\n        label: 'Valeur minimum',\n        placeholder: '0',\n      },\n\n      max: {\n        label: 'Valeur maximum',\n        placeholder: '100',\n      },\n\n      step: {\n        label: 'Pas',\n        placeholder: '1',\n      },\n    },\n\n    float: {\n      default: {\n        label: 'Valeur par défaut',\n        placeholder: '1',\n      },\n\n      min: {\n        label: 'Valeur minimum',\n        placeholder: '0',\n      },\n\n      max: {\n        label: 'Valeur maximum',\n        placeholder: '100',\n      },\n\n      step: {\n        label: 'Pas',\n        placeholder: '0.1',\n      },\n    },\n\n    string: {\n      limit: {\n        label: 'Limite de taille',\n        placeholder: 'aucune limite',\n      },\n\n      textarea: {\n        label: 'Texte multiligne',\n      },\n    },\n  },\n  infomil: {\n    invalid_card: 'Numéro de carte ou code secret incorrect.',\n  },\n  calendar: {\n    graphic_configuration: {\n      calendar: {\n        _label: 'Page calendrier',\n        title: 'Titre de la page',\n        title_color: 'Couleur du titre',\n        background_image: 'Image de fond',\n        additional_title_image: 'Image additionel de titre',\n        cells: {\n          _label: 'Paramètres des cases',\n          display_months: 'Afficher le mois',\n          normal_text_color: 'Couleur du texte',\n          highlight_text_color: 'Couleur du texte des cases mises en avant',\n          normal_background_images: {\n            _label: 'Images de fond',\n          },\n          highlight_background_images: {\n            _label: 'Images de fond des cases mises en avant',\n          },\n        },\n        filler_cells: {\n          _label: 'Case de remplissage',\n          count: 'Nombre de cases',\n          images: {\n            _label: 'Images de la case',\n          },\n        },\n      },\n      offers: {\n        _label: 'Page offres',\n        background_image: \"Image d'arrière-plan\",\n        background_color: 'Couleur de fond',\n        color: 'Couleur du texte',\n        accent_color: 'Couleur de texte alternative',\n      },\n      home: {\n        _label: 'Bloc calendier de la Home',\n        title: 'Titre',\n        title_color: 'Couleur du titre',\n        content: 'Contenu',\n        content_color: 'Couleur du contenu',\n        background_image: 'Image de fond',\n        call_to_action: {\n          _label: \"Bouton d'action\",\n          label: 'Texte du bouton',\n          color: 'Couleur du texte',\n          background: 'Couleur du fond',\n          background_alt: '2nde Couleur du fond',\n          border: 'Couleur de la bordure',\n        },\n\n      },\n      alert: {\n        _label: 'Bloc alerte SMS',\n        title: 'Titre',\n        title_color: 'Couleur du titre',\n        content_color: 'Couleur du contenu',\n        background_image: 'Image de fond',\n        select_categories: {\n          _label: 'Étape thématique',\n          label: 'Libellé',\n          image: 'Image du badge',\n        },\n        fill_phone: {\n          _label: 'Étape téléphone',\n          label: 'Libellé',\n          image: 'Image du badge',\n        },\n        receive_alerts: {\n          _label: 'Étape finale',\n          label: 'Libellé',\n          image: 'Image du badge',\n        },\n        call_to_action: {\n          _label: \"Bouton d'action\",\n          label: 'Texte du bouton',\n          color: 'Couleur du texte',\n          background: 'Couleur du fond',\n          background_alt: '2nde Couleur du fond',\n          border: 'Couleur de la bordure',\n        },\n      },\n      alert_form: {\n        _label: 'Bloc formulaire alerte SMS',\n        background_color: 'Couleur de fond',\n        call_to_action: {\n          _label: \"Bouton d'action\",\n          label: 'Texte du bouton',\n          color: 'Couleur du texte',\n          background: 'Couleur du fond',\n          background_alt: '2nde Couleur du fond',\n          border: 'Couleur de la bordure',\n        },\n      },\n      home_ads: {\n        _label: 'Blocs additionnels de la home',\n        items: {\n          _label: 'Blocs',\n        },\n      },\n    },\n  },\n};\n","export default {\n  labels: {\n    total: 'Total',\n  },\n  actions: {\n    remove_image: \"Supprimer l'image\",\n    remove_video: \"Supprimer la vidéo\",\n  },\n  enums: {\n    game_entries: {\n      id_type: {\n        no_type: 'Sans passer par une API GALEC',\n        infomil: 'Par API INFOMIL',\n        ciam: 'Par API CIAM',\n      },\n    },\n  },\n  store_importer: {\n    config: {\n      separator: 'Caractère de séparation',\n      central: 'Colonne contenant le nom de la centrale',\n      province: 'Colonne contenant le nom du département',\n      store_name: 'Colonne contenant la raison sociale du magasin',\n      store_display_name: 'Colonne contenant le nom du magasin',\n      store_address: \"Colonne contenant l'adresse du magasin\",\n      store_city: 'Colonne contenant la ville du magasin',\n      store_postal_code: 'Colonne contenant le code postal du magasin',\n      store_id_number: 'Colonne contenant le code pannonceau du magasin',\n    }\n  },\n  game: {\n    graph_title: 'Participations journalières',\n    wheel: {\n      congratulation: 'Félicitations !',\n      win: \"<tspan x='287'>Vous venez de remporter...</tspan><tspan x='287' dy='28px' style='font-weight: bold;'>#{cash_prize}</tspan>\",\n      win_notice: \"<tspan x='287'>Vous allez recevoir le détail de votre gain</tspan><tspan x='287' dy='24px'>par mail afin de récupérer votre</tspan><tspan x='287' dy='24px'>lot dans votre magasin</tspan><tspan x='287' dy='24px'>E.Leclerc.</tspan>\",\n      loss: \"Perdu !\",\n      loss_message: \"<tspan x='287' dy='24px'>Revenez tenter votre chance</tspan><tspan x='287' dy='34px' style='font-weight: bold; font-size: 26px'>dès demain.</tspan><tspan x='287' dy='34px'>À bientôt !</tspan>\",\n    },\n    config: {\n      questions: {\n        _label: 'Questions',\n        question: 'Libellé de la question',\n        answers: {\n          _label: 'Réponses',\n          label: 'Libellé de la réponse',\n          valid_answer: 'Bonne réponse',\n        },\n      },\n      main_grid: {\n        _label: 'Grille principale',\n        count: 'Nombre de numéros gagnants',\n        max: 'Nombre de numéros dans la grille',\n        columns: 'Nombre de colonnes dans la grille',\n      },\n      extra_grid: {\n        _label: 'Grille complémentaire',\n        enable: 'Utiliser la grille complémentaire',\n        count: 'Nombre de numéros gagnants',\n        max: 'Nombre de numéros dans la grille',\n        columns: 'Nombre de colonnes dans la grille',\n      },\n      wheel_segments_count: 'Nombre de segments de la roue',\n      randomize_wheel_segments: 'Répartir les lots aléatoirement dans la roue',\n    },\n    graphic_config: {\n      home_page: {\n        _label: \"Bloc page d'accueil\",\n        logo: 'Logo du jeu',\n        background: 'Image de fond',\n        background_video: 'Vidéo de fond',\n        background_video_mobile: 'Vidéo de fond mobile',\n        background_call_to_play: 'Image de fond appel à participation',\n        image_dotation: 'Image de la dotation',\n        image_above_play: 'Image au-dessus du bouton jouer',\n        image_play_left: 'Image à gauche du bouton jouer',\n        image_play_right: 'Image à droite du bouton jouer',\n        image_mobile_decoration: 'Image décorative mobile (autour du 31)',\n        custom_css: 'CSS personalisé'\n      },\n      game_specific: {\n        _label: 'Paramètres graphiques spécifiques au jeu',\n        scratch_image: 'Image à gratter',\n        scratch_lost_image: 'Image ticket non gagnant',\n        wheel_loss_segment_background: 'Couleur du fond du segment perdu',\n        wheel_loss_segment_foreground: 'Couleur du texte du segment perdu',\n        wheel_outline: 'Image de contour de la roue',\n        wheel_pointer: 'Image du pointeur de la roue',\n        wheel_center: 'Image du centre de la roue'\n      },\n    },\n    already_played: 'Vous avez déjà participé à ce jeu',\n    unknown_account: 'Désolé, aucun compte ne correspond à cet email',\n\n    recaptcha: {\n      blank: 'Veuillez valider le reCAPTCHA',\n      invalid: 'reCAPTCHA invalide',\n    },\n\n    countdown: {\n      go: 'GO !',\n    },\n  },\n  widgets: {\n    coordinates: {\n      error: \"Impossible de récupérer les coordonnées GPS de l'adresse indiquée.\",\n    },\n    validation: {\n      blank: 'Ce champ ne peut être vide',\n      value_missing: 'Ce champ ne peut être vide',\n      invalid_email: 'Saisissez une adresse email valide',\n      password_confirmation_doesnt_match: 'La confirmation ne correspond pas au mot de passe saisi',\n      bad_input: 'La saisie est invalide',\n      pattern_mismatch: 'La valeur saisie ne correspond pas au motif demandé',\n      range_overflow: 'La valeur excède la plage autorisée',\n      range_underflow: 'La valeur est sous la plage autorisée',\n      too_long: 'La valeur est trop longue',\n      too_short: 'La valeur est trop courte',\n      email_mismatch: \"La valeur saisie n'est pas un email valide\",\n      url_mismatch: \"La valeur saisie n'est pas une URL valide\",\n      unchecked: \"Accepter le règlement est obligatoire pour pouvoir participer\",\n    },\n    field_limit: {\n      remaining: \"Caractères restants : #{count}\",\n    },\n    file_preview: {\n      label: \"Parcourir…\",\n    },\n    table_header_sort: {\n      reset: 'Remettre à zéro le tri',\n    },\n  },\n\n  settings_input: {\n    required: {\n      label: 'Champ obligatoire',\n    },\n\n    collection: {\n      values: {\n        label: 'Valeurs possible (liste séparée par des virgules)',\n        placeholder: 'item 1, item 2, item 3',\n      },\n\n      multiple: {\n        label: 'Plusieurs choix possible',\n      },\n    },\n\n    integer: {\n      default: {\n        label: 'Valeur par défaut',\n        placeholder: '1',\n      },\n\n      min: {\n        label: 'Valeur minimum',\n        placeholder: '0',\n      },\n\n      max: {\n        label: 'Valeur maximum',\n        placeholder: '100',\n      },\n\n      step: {\n        label: 'Pas',\n        placeholder: '1',\n      },\n    },\n\n    float: {\n      default: {\n        label: 'Valeur par défaut',\n        placeholder: '1',\n      },\n\n      min: {\n        label: 'Valeur minimum',\n        placeholder: '0',\n      },\n\n      max: {\n        label: 'Valeur maximum',\n        placeholder: '100',\n      },\n\n      step: {\n        label: 'Pas',\n        placeholder: '0.1',\n      },\n    },\n\n    string: {\n      limit: {\n        label: 'Limite de taille',\n        placeholder: 'aucune limite',\n      },\n\n      textarea: {\n        label: 'Texte multiligne',\n      },\n    },\n  },\n  infomil: {\n    invalid_card: 'Numéro de carte ou code secret incorrect.',\n  },\n};\n","export default {\n  labels: {\n    total: 'Total',\n  },\n  actions: {\n    remove_image: 'Remover a imagem',\n    remove_video: 'Remover o vídeo',\n  },\n  enums: {\n    bon_ordre_sort_by: {\n      price_asc: 'Do mais barato ao mais caro',\n      price_desc: 'Do mais caro ao mais barato',\n      weight_asc: 'Do mais leve ao mais pesado',\n      weight_desc: 'Do mais pesado ao mais leve',\n    },\n    game_entries: {\n      id_type: {\n        no_type: 'Sem passar por uma API GALEC',\n        infomil: 'Por API INFOMIL',\n        ciam: 'Por API CIAM',\n      },\n    },\n  },\n  sms_subscriptions: {\n    alert: {\n      title: 'Registado!',\n      content: 'A partir de agora, será alertado 24h antes de ser divulgada uma oferta de uma destas categorias.',\n    },\n    error_alert: {\n      title: 'Erro durante o registo!',\n    },\n  },\n  store_importer: {\n    config: {\n      separator: 'Caráter de separação',\n      central: 'Coluna com o nome da central',\n      province: 'Coluna com o nome do distrito',\n      store_name: 'Coluna com a denominação social da loja',\n      store_display_name: 'Coluna com o nome da loja',\n      store_address: 'Coluna com a morada da loja',\n      store_city: 'Coluna com a localidade da loja',\n      store_postal_code: 'Coluna com o código postal da loja',\n      store_id_number: 'Coluna com o código de insígnia da loja',\n    }\n  },\n  game: {\n    graph_title: 'Participações diárias',\n    wheel: {\n      congratulation: 'Parabéns!',\n      win: \"<tspan x='287'>Acaba de ganhar...</tspan><tspan x='287' dy='28px' style='font-weight: bold;'>#{cash_prize}</tspan>\",\n      win_notice: \"<tspan x='287'>Vai receber o detalhe do seu prémio</tspan><tspan x='287' dy='24px'>por e-mail para poder levantar o seu</tspan><tspan x='287' dy='24px'>prémio na sua loja</tspan><tspan x='287' dy='24px'>#{store_name}</tspan>\",\n      loss: 'Perdeu!',\n      loss_message: \"<tspan x='287' dy='24px'>Volte a tentar a sua sorte</tspan><tspan x='287' dy='34px' style='font-weight: bold; font-size: 26px'>amanhã.</tspan><tspan x='287' dy='34px'>Até breve!</tspan>\",\n    },\n    jackpot: {\n      congratulation: 'Ganhou!',\n      win: \"<tspan x='287' dy='28px' style='font-weight: bold;'>#{cash_prize}</tspan>\",\n      win_notice: \"<tspan x='287' dy='24px'>Acaba de ganhar na sua loja </tspan><tspan x='287' dy='24px'>#{store_name}</tspan>\",\n      loss_title: 'Perdeu!',\n      loss_message: \"<tspan x='287' dy='24px'>Desta vez não ganhou, pode tentar a sua sorte 1 vez por dia até #{end_date}</tspan>\",\n      loss_message2: \"<tspan x='287' dy='24px'>Tente novamente amanhã</tspan>\",\n    },\n    config: {\n      questions: {\n        _label: 'Perguntas',\n        question: 'Texto da pergunta',\n        answers: {\n          _label: 'Respostas',\n          label: 'Texto da resposta',\n          valid_answer: 'Resposta certa',\n        },\n      },\n      main_grid: {\n        _label: 'Grelha principal',\n        count: 'Número de números vencedores',\n        max: 'Número de números na grelha',\n        columns: 'Número de colunas na grelha',\n      },\n      extra_grid: {\n        _label: 'Grelha complementar',\n        enable: 'Utilizar a grelha complementar',\n        count: 'Número de números vencedores',\n        max: 'Número de números na grelha',\n        columns: 'Número de colunas na grelha',\n      },\n      wheel_segments_count: 'Número de segmentos da roda',\n      randomize_wheel_segments: 'Distribuir os prémios aleatoriamente na roda',\n\n      basket_products: {\n        _label: 'Produtos do cabaz',\n        name: 'Nome do produto',\n        price: 'Preço de venda (€)',\n        image: 'Imagem do produto',\n        day: 'Dia (vazio = todos os dias)',\n      },\n      basket_size: 'Número máximo de produtos no cabaz',\n      basket_min_size: 'Número mínimo de produtos no cabaz',\n      max_quantity: 'Quantidade máxima por produto',\n      min_price: 'Preço mínimo',\n      max_price: 'Preço máximo',\n\n      instruction: 'Instrução apresentada ao jogador',\n      sort_by: 'Critério de ordenação',\n      products: {\n        _label: 'Produtos a ordenar',\n        name: 'Nome do produto',\n        price: 'Preço de venda (€)',\n        weight: 'Peso (em gramas)',\n        image: 'Imagem do produto',\n      },\n\n      leclerc_images: {\n        _label: 'Imagens dos produtos a acertar (marca E.Leclerc)',\n      },\n      national_brand_images: {\n        _label: 'Imagens dos produtos a evitar (marcas nacionais)',\n      },\n\n      duration_seconds: 'Duração do jogo (em segundos)',\n      good_targets_count: 'Proporção de alvos certos',\n      bad_targets_count: 'Proporção de alvos errados',\n    },\n    graphic_config: {\n      home_page: {\n        _label: 'Bloco da página inicial',\n        logo: 'Logótipo do jogo',\n        background: 'Imagem de fundo',\n        background_video: 'Vídeo de fundo',\n        background_video_mobile: 'Vídeo de fundo para telemóvel',\n        background_call_to_play: 'Imagem de fundo do apelo à participação',\n        image_dotation: 'Imagem do prémio',\n        image_above_play: 'Imagem acima do botão jogar',\n        image_play_left: 'Imagem à esquerda do botão jogar',\n        image_play_right: 'Imagem à direita do botão jogar',\n        image_mobile_decoration: 'Imagem decorativa mobile (à volta do 31)',\n        custom_css: 'CSS personalizado'\n      },\n      game_specific: {\n        _label: 'Parâmetros gráficos específicos do jogo',\n        scratch_image: 'Imagem a raspar',\n        scratch_lost_image: 'Imagem do bilhete não premiado',\n        wheel_loss_segment_background: 'Cor de fundo do segmento perdedor',\n        wheel_loss_segment_foreground: 'Cor do texto do segmento perdedor',\n        wheel_background_result: 'Cor do texto do resultado Ganhou / Perdeu',\n        wheel_outline: 'Imagem do contorno da roda',\n        wheel_pointer: 'Imagem do ponteiro da roda',\n        wheel_center: 'Imagem do centro da roda',\n        background_jackpot_image: 'Contorno do jogo',\n        lever_jackpot_image: 'Imagem da alavanca',\n        wheel_win_segment_image: 'Imagem do segmento vencedor',\n        wheel_loose_segment_image: 'Imagem do segmento perdedor',\n        win_image: 'Imagem do segmento vencedor',\n        first_loose_image: 'Imagem do segmento perdedor 1',\n        second_loose_image: 'Imagem do segmento perdedor 2',\n        third_lost_image: 'Imagem do segmento perdedor 3',\n        fourth_lost_image: 'Imagem do segmento perdedor 4',\n        fifth_lost_image: 'Imagem do segmento perdedor 5',\n        sixth_lost_image: 'Imagem do segmento perdedor 6',\n        seventh_lost_image: 'Imagem do segmento perdedor 7',\n\n        juste_prix_background_result: 'Cor de fundo do ecrã de resultado',\n        juste_prix_product_image: 'Imagem do produto',\n        bon_ordre_background_result: 'Cor de fundo do ecrã de resultado',\n        tir_cible_background_result: 'Cor de fundo do ecrã de resultado',\n      },\n    },\n    already_played: 'Já participou neste jogo',\n    unknown_account: 'Lamentamos, não existe nenhuma conta associada a este e-mail',\n\n    participation_code: {\n      invalid: 'Este código de participação é inválido ou já foi utilizado.',\n      valid: 'Código validado, já pode participar.',\n      blank: 'Introduza o seu código de participação.',\n      error: 'De momento não é possível verificar o código. Tente novamente.',\n    },\n\n    recaptcha: {\n      blank: 'Valide o reCAPTCHA',\n      invalid: 'reCAPTCHA inválido',\n    },\n\n    countdown: {\n      go: 'GO!',\n    },\n\n    result: {\n      time: 'O seu tempo: #{time}',\n    },\n    juste_prix: {\n      thanks: 'Obrigado pela sua participação!',\n      notice: 'Receberá brevemente um e-mail caso seja o vencedor do dia!',\n    },\n    bon_ordre: {\n      placed: 'Posições corretas: #{placed}/#{total}',\n      thanks: 'Obrigado pela sua participação!',\n      notice: 'Receberá brevemente um e-mail caso seja o vencedor do dia!',\n    },\n    tir_cible: {\n      thanks: 'Obrigado pela sua participação!',\n      score: 'A sua pontuação: #{score} pts',\n      notice: 'Receberá brevemente um e-mail caso seja o vencedor do dia!',\n    },\n  },\n  widgets: {\n    coordinates: {\n      error: 'Não é possível obter as coordenadas GPS da morada indicada.',\n    },\n    validation: {\n      blank: 'Este campo não pode estar vazio',\n      value_missing: 'Este campo não pode estar vazio',\n      invalid_email: 'Introduza um endereço de e-mail válido',\n      password_confirmation_doesnt_match: 'A confirmação não corresponde à palavra-passe introduzida',\n      bad_input: 'O valor introduzido é inválido',\n      pattern_mismatch: 'O valor introduzido não corresponde ao formato pedido',\n      range_overflow: 'O valor excede o intervalo permitido',\n      range_underflow: 'O valor está abaixo do intervalo permitido',\n      too_long: 'O valor é demasiado longo',\n      too_short: 'O valor é demasiado curto',\n      email_mismatch: 'O valor introduzido não é um e-mail válido',\n      url_mismatch: 'O valor introduzido não é um URL válido',\n      unchecked: 'É obrigatório aceitar o regulamento para poder participar',\n    },\n    field_limit: {\n      remaining: 'Caracteres restantes: #{count}',\n    },\n    file_preview: {\n      label: 'Procurar…',\n    },\n    table_header_sort: {\n      reset: 'Repor a ordenação',\n    },\n  },\n\n  settings_input: {\n    required: {\n      label: 'Campo obrigatório',\n    },\n\n    collection: {\n      values: {\n        label: 'Valores possíveis (lista separada por vírgulas)',\n        placeholder: 'item 1, item 2, item 3',\n      },\n\n      multiple: {\n        label: 'Várias opções possíveis',\n      },\n    },\n\n    integer: {\n      default: {\n        label: 'Valor predefinido',\n        placeholder: '1',\n      },\n\n      min: {\n        label: 'Valor mínimo',\n        placeholder: '0',\n      },\n\n      max: {\n        label: 'Valor máximo',\n        placeholder: '100',\n      },\n\n      step: {\n        label: 'Incremento',\n        placeholder: '1',\n      },\n    },\n\n    float: {\n      default: {\n        label: 'Valor predefinido',\n        placeholder: '1',\n      },\n\n      min: {\n        label: 'Valor mínimo',\n        placeholder: '0',\n      },\n\n      max: {\n        label: 'Valor máximo',\n        placeholder: '100',\n      },\n\n      step: {\n        label: 'Incremento',\n        placeholder: '0.1',\n      },\n    },\n\n    string: {\n      limit: {\n        label: 'Limite de tamanho',\n        placeholder: 'sem limite',\n      },\n\n      textarea: {\n        label: 'Texto com várias linhas',\n      },\n    },\n  },\n  infomil: {\n    invalid_card: 'Número de cartão ou código secreto incorreto.',\n  },\n  calendar: {\n    graphic_configuration: {\n      calendar: {\n        _label: 'Página do calendário',\n        title: 'Título da página',\n        title_color: 'Cor do título',\n        background_image: 'Imagem de fundo',\n        additional_title_image: 'Imagem adicional do título',\n        cells: {\n          _label: 'Parâmetros das casas',\n          display_months: 'Mostrar o mês',\n          normal_text_color: 'Cor do texto',\n          highlight_text_color: 'Cor do texto das casas em destaque',\n          normal_background_images: {\n            _label: 'Imagens de fundo',\n          },\n          highlight_background_images: {\n            _label: 'Imagens de fundo das casas em destaque',\n          },\n        },\n        filler_cells: {\n          _label: 'Casa de preenchimento',\n          count: 'Número de casas',\n          images: {\n            _label: 'Imagens da casa',\n          },\n        },\n      },\n      offers: {\n        _label: 'Página de ofertas',\n        background_image: 'Imagem de fundo',\n        background_color: 'Cor de fundo',\n        color: 'Cor do texto',\n        accent_color: 'Cor de texto alternativa',\n      },\n      home: {\n        _label: 'Bloco do calendário da página inicial',\n        title: 'Título',\n        title_color: 'Cor do título',\n        content: 'Conteúdo',\n        content_color: 'Cor do conteúdo',\n        background_image: 'Imagem de fundo',\n        call_to_action: {\n          _label: 'Botão de ação',\n          label: 'Texto do botão',\n          color: 'Cor do texto',\n          background: 'Cor de fundo',\n          background_alt: '2.ª cor de fundo',\n          border: 'Cor do contorno',\n        },\n\n      },\n      alert: {\n        _label: 'Bloco de alerta SMS',\n        title: 'Título',\n        title_color: 'Cor do título',\n        content_color: 'Cor do conteúdo',\n        background_image: 'Imagem de fundo',\n        select_categories: {\n          _label: 'Etapa temática',\n          label: 'Texto',\n          image: 'Imagem do crachá',\n        },\n        fill_phone: {\n          _label: 'Etapa telemóvel',\n          label: 'Texto',\n          image: 'Imagem do crachá',\n        },\n        receive_alerts: {\n          _label: 'Etapa final',\n          label: 'Texto',\n          image: 'Imagem do crachá',\n        },\n        call_to_action: {\n          _label: 'Botão de ação',\n          label: 'Texto do botão',\n          color: 'Cor do texto',\n          background: 'Cor de fundo',\n          background_alt: '2.ª cor de fundo',\n          border: 'Cor do contorno',\n        },\n      },\n      alert_form: {\n        _label: 'Bloco do formulário de alerta SMS',\n        background_color: 'Cor de fundo',\n        call_to_action: {\n          _label: 'Botão de ação',\n          label: 'Texto do botão',\n          color: 'Cor do texto',\n          background: 'Cor de fundo',\n          background_alt: '2.ª cor de fundo',\n          border: 'Cor do contorno',\n        },\n      },\n      home_ads: {\n        _label: 'Blocos adicionais da página inicial',\n        items: {\n          _label: 'Blocos',\n        },\n      },\n    },\n  },\n};\n","import {LOCALES} from './locales';\n\n// Public\nexport default class I18n {\n  static attachToWindow() {\n    this.locale = document.querySelector('html').getAttribute('lang') || 'en';\n    let instance = new I18n(LOCALES, this.locale);\n    const t = instance.getHelper();\n    window.t = t;\n    window.I18n = this;\n\n    String.prototype.t = function(tokens) { return t(this, tokens); }\n  }\n\n  /* Public */\n\n  constructor(locales, defaultLanguage) {\n    if (locales == null) { locales = {}; }\n    this.locales = locales;\n    if (defaultLanguage == null) { defaultLanguage = 'en'; }\n    this.defaultLanguage = defaultLanguage;\n    this.languages = Object.keys(this.locales).sort();\n  }\n\n  // Returns a string from the locales.\n  // That function can be called either with or without a language:\n  //\n  // i18n.get (path.to.string')\n  // i18n.get ('fr', 'path.to.string')\n  //\n  // If the path lead to a dead end, the function return the last element\n  // in the path as a capitalized sentence.\n  //\n  // i18n.get (path.that.do_not_exist) # Do Not Exist\n  get(language, path, tokens) {\n    if (tokens == null) { tokens = {}; }\n    if ((path == null) || (typeof path === 'object')) {\n      [language, path, tokens] = Array.from([this.defaultLanguage, language, path]);\n    }\n\n    let lang = this.locales[language];\n\n    if (lang == null) { throw new Error(`Language ${language} not found`); }\n    let els = path.split('.');\n    for (let v of Array.from(els)) { lang = lang[v]; if (lang == null) { break; } }\n\n    if ((typeof lang === 'object') && (tokens.count != null)) {\n      lang = lang[tokens.count] != null ? lang[tokens.count] : lang.other;\n    }\n\n    // A path that resolves to a nested object (e.g. a \"_label\" group) rather\n    // than an actual translated string isn't a usable translation: treat it\n    // as missing instead of stringifying it to \"[object Object]\".\n    if ((typeof lang === 'object') && (lang != null)) { lang = null; }\n\n    if (lang == null) {\n      lang = els.slice(-1)[0].replace(/[-_]/g, ' ')\n                         .replace(/(^|\\s)(\\w)/g, (m,sp,s) => `${sp}${s.toUpperCase()}`);\n    }\n\n    return String(lang).replace(/\\#\\{([^\\}]+)\\}/g, function(token, key) {\n      if (tokens[key] == null) { return token; }\n      return tokens[key];\n  });\n  }\n\n  // Returns a helper function bound to the current instance that allow\n  // to retrieve localized string from the `I18n` instance as well as doing\n  // token substitution in the returned string.\n  //\n  // ```coffee\n  // _ = i18n.getHelper()\n  // _('path.to.string')\n  // _('path.to.string_with_token', token: 'token substitute')\n  // ```\n  getHelper() { return (path, tokens) => { if (tokens == null) { tokens = {}; } return this.get(path, tokens); }; }\n};\n","import {asArray, always, parent, getNode, compose, detachNode} from 'widjet-utils';\nimport {inputPredicate, attributePredicate} from 'widjet-validation/lib/utils';\nimport {validatePresence, nativeValidation} from 'widjet-validation/lib/validators';\n\nconst all = (...fns) => (i) => fns.every(f => f(i))\nconst numberPredicate = inputPredicate('number');\nconst checkboxPredicate = inputPredicate('checkbox');\nconst checkboxGroupPredicate = all(inputPredicate('checkbox'), (i) => i.matches('.form-check-input-group input'));\nconst radioPredicate = inputPredicate('radio');\nconst filePredicate = inputPredicate('file');\nconst requiredPredicate = (i) => i.classList.contains('required') || i.hasAttribute('required');\n\nconst GROUP_SELECTOR = '.form-group';\nconst INVALID_FEEDBACK_SELECTOR = '.invalid-feedback';\n\nconst PUNCT_RE = /[ -#%-\\x2A,-\\/:;\\x3F@\\x5B-\\x5D_\\x7B}\\u00A1\\u00A7\\u00AB\\u00B6\\u00B7\\u00BB\\u00BF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E3B\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]/;\n\nconst passwordPredicate = (i) =>\n  i.type == 'password'\n  && /password\\]$/.test(i.name)\n  && i.matches('.sign_up input, .new_user input, .edit_user input')\nconst passwordConfirmationPredicate = (i) =>\n  i.type == 'password'\n  && /password_confirmation\\]$/.test(i.name)\n\nfunction validatePassword(i18n, value, input) {\n  if(!input.value && input.required) {\n    return validatePresence(i18n, value, input);\n  }\n\n  if(!input.value && !input.required) {\n    return null;\n  }\n\n  const res = [];\n\n  if(value.length < 8) { res.push(0); }\n  if(!/[A-Z]/.test(value)) { res.push(1); }\n  if(!/[a-z]/.test(value)) { res.push(2); }\n  if(!/[0-9]/.test(value)) { res.push(3); }\n  if(!PUNCT_RE.test(value)) { res.push(4); }\n\n  return res.length > 0 ? res : null;\n}\n\nfunction matchPassword(i18n, value, input) {\n  const passwordInput = document.querySelector('input[name$=\"password]\"]');\n\n  if(!input.value && !passwordInput.value && !input.required) {\n    return null;\n  } else {\n    const presence = validatePresence(i18n, value, input);\n    if(presence) { return presence; }\n  }\n\n  return passwordInput.value != input.value\n    ? 'password_confirmation_doesnt_match'\n    : null;\n}\n\nfunction resetPasswordCriterium() {\n  getPasswordCriterium().forEach(li => li.className = '');\n}\n\nfunction flagPasswordCriterium(flags) {\n  getPasswordCriterium().forEach((li, i) => {\n    if(flags.includes(i)) {\n      li.classList.add('is-invalid');\n    } else {\n      li.classList.add('is-valid');\n    }\n  });\n}\n\nfunction getPasswordCriterium() {\n  return asArray(document.querySelectorAll('.password-validation-criterium li'));\n}\n\nfunction validateImagePresence(subValidator=()=>null) {\n  return (i18n, value, input) => {\n    const controls = parent(input, '.form-group');\n    const currentValue = controls.querySelector('.current-value img');\n    return currentValue ? null : subValidator(i18n, value, input);\n  }\n}\n\nexport default {\n  validators: [\n    [passwordPredicate, validatePassword],\n    [passwordConfirmationPredicate, matchPassword],\n    [all(numberPredicate, requiredPredicate), validatePresence],\n    [\n      all(checkboxGroupPredicate, requiredPredicate),\n      (i18n, v, i) => {\n        const inputs = asArray(document.querySelectorAll(`[name=\"${i.getAttribute('name')}\"]`));\n        return inputs.some(i => i.checked) ? null : i18n('unchecked_in_group')\n      }\n    ],\n    [\n      all(checkboxPredicate, requiredPredicate),\n      (i18n, v, i) => v ? null : i18n('unchecked')\n    ],\n    [\n      all(filePredicate, requiredPredicate),\n      validateImagePresence(validatePresence)\n    ],\n    [\n      requiredPredicate,\n      (i18n,v,i) => {\n        const res = validatePresence(i18n,v,i) || nativeValidation(i18n,v,i);\n        return res;\n      }\n    ],\n  ],\n  clean(input) {\n    if(passwordPredicate(input)) {\n      resetPasswordCriterium();\n    }\n    const group = parent(input, GROUP_SELECTOR);\n    if(group) {\n      group.classList.remove('is-valid');\n      group.classList.remove('is-invalid');\n\n      const prevError = group.querySelector(INVALID_FEEDBACK_SELECTOR);\n      if (prevError) { detachNode(prevError); }\n    }\n    input.classList.remove('is-valid');\n    input.classList.remove('is-invalid');\n  },\n  onSuccess(input) {\n    if(passwordPredicate(input)) {\n      flagPasswordCriterium([]);\n    }\n    const group = parent(input, GROUP_SELECTOR);\n    if(group) {\n      group.classList.add('is-valid');\n    }\n    if(!radioPredicate(input)) {\n      input.classList.add('is-valid');\n    }\n  },\n  onError(input, res) {\n    if(passwordPredicate(input)) {\n      if(typeof res != 'string') {\n        const group = parent(input, GROUP_SELECTOR);\n        if(group) {\n          group.classList.add('is-invalid');\n        }\n        input.classList.add('is-invalid');\n\n        flagPasswordCriterium(res);\n        return;\n      } else {\n        flagPasswordCriterium([0,1,2,3,4]);\n      }\n    }\n    const group = parent(input, GROUP_SELECTOR);\n    if(group) {\n      group.classList.add('is-invalid');\n\n      const prevError = group.querySelector(INVALID_FEEDBACK_SELECTOR);\n      if (prevError) { detachNode(prevError); }\n\n      const error = getNode(`<div class='invalid-feedback d-block'>${`widgets.validation.${res}`.t()}</div>`);\n      group.appendChild(error);\n    }\n    if(!radioPredicate(input)) {\n      input.classList.add('is-invalid');\n    }\n  }\n}\n","import {asArray} from 'widjet-utils';\nimport {DisposableEvent} from 'widjet-disposables';\n\nconst SLEEP_RE = /sleep-(\\d+)/;\n\nexport function cleanupAnimations(el) {\n  asArray(el.classList).forEach((c) => {\n    if (/animate__/.test(c)) {\n      el.classList.remove(c);\n    }\n  });\n}\n\nexport function animate(el, animation) {\n  let match, delay, speed;\n\n  if(animation instanceof Object) {\n    delay = animation.delay;\n    speed = animation.speed;\n    animation = animation.animation;\n  }\n\n  return new Promise((resolve, reject) => {\n    cleanupAnimations(el);\n    if((match = animation.match(SLEEP_RE)) != null) {\n      setTimeout(resolve, parseInt(match[1], 10));\n    } else {\n      el.classList.add(`animate__${animation}`);\n      el.classList.add('animate__animated');\n\n      if(delay) { el.classList.add(`animate__delay-${delay}s`); }\n      if(speed) { el.classList.add(`animate__${speed}`); }\n\n      const animationEnd = new DisposableEvent(el, 'animationend', () => {\n        animationEnd.dispose();\n        resolve();\n      })\n    }\n  });\n}\n\nexport function queue(el, animations, repeat=0) {\n  return animations.reduce((p, a) => {\n    return p.then(() => {\n      return animate(el, a);\n    });\n  }, Promise.resolve()).then(() => {\n    repeat--;\n    if(repeat >= 0) {\n      return queue(el, animations, repeat);\n    }\n  });\n}\n","// html and body are both 100% high with overflow-x hidden, which makes either\n// of them the scrolling element depending on the browser: reset all of them\nexport function scrollToTop() {\n  window.scrollTo(0, 0);\n  document.documentElement.scrollTop = 0;\n  document.body.scrollTop = 0;\n}\n","/*!\n * Chartkick.js v5.0.1\n * Create beautiful charts with one line of JavaScript\n * https://github.com/ankane/chartkick.js\n * MIT License\n */\n\nfunction isArray(variable) {\n  return Object.prototype.toString.call(variable) === \"[object Array]\";\n}\n\nfunction isFunction(variable) {\n  return variable instanceof Function;\n}\n\nfunction isPlainObject(variable) {\n  // protect against prototype pollution, defense 2\n  return Object.prototype.toString.call(variable) === \"[object Object]\" && !isFunction(variable) && variable instanceof Object;\n}\n\n// https://github.com/madrobby/zepto/blob/master/src/zepto.js\nfunction extend(target, source) {\n  for (var key in source) {\n    // protect against prototype pollution, defense 1\n    if (key === \"__proto__\") { continue; }\n\n    if (isPlainObject(source[key]) || isArray(source[key])) {\n      if (isPlainObject(source[key]) && !isPlainObject(target[key])) {\n        target[key] = {};\n      }\n      if (isArray(source[key]) && !isArray(target[key])) {\n        target[key] = [];\n      }\n      extend(target[key], source[key]);\n    } else if (source[key] !== undefined) {\n      target[key] = source[key];\n    }\n  }\n}\n\nfunction merge(obj1, obj2) {\n  var target = {};\n  extend(target, obj1);\n  extend(target, obj2);\n  return target;\n}\n\nvar DATE_PATTERN = /^(\\d\\d\\d\\d)(?:-)?(\\d\\d)(?:-)?(\\d\\d)$/i;\n\nfunction negativeValues(series) {\n  for (var i = 0; i < series.length; i++) {\n    var data = series[i].data;\n    for (var j = 0; j < data.length; j++) {\n      if (data[j][1] < 0) {\n        return true;\n      }\n    }\n  }\n  return false;\n}\n\nfunction toStr(obj) {\n  return \"\" + obj;\n}\n\nfunction toFloat(obj) {\n  return parseFloat(obj);\n}\n\nfunction toDate(obj) {\n  if (obj instanceof Date) {\n    return obj;\n  } else if (typeof obj === \"number\") {\n    return new Date(obj * 1000); // ms\n  } else {\n    var s = toStr(obj);\n    var matches = s.match(DATE_PATTERN);\n    if (matches) {\n      var year = parseInt(matches[1], 10);\n      var month = parseInt(matches[2], 10) - 1;\n      var day = parseInt(matches[3], 10);\n      return new Date(year, month, day);\n    } else {\n      // try our best to get the str into iso8601\n      // TODO be smarter about this\n      var str = s.replace(/ /, \"T\").replace(\" \", \"\").replace(\"UTC\", \"Z\");\n      // Date.parse returns milliseconds if valid and NaN if invalid\n      return new Date(Date.parse(str) || s);\n    }\n  }\n}\n\nfunction toArr(obj) {\n  if (isArray(obj)) {\n    return obj;\n  } else {\n    var arr = [];\n    for (var i in obj) {\n      if (Object.prototype.hasOwnProperty.call(obj, i)) {\n        arr.push([i, obj[i]]);\n      }\n    }\n    return arr;\n  }\n}\n\nfunction jsOptionsFunc(defaultOptions, hideLegend, setTitle, setMin, setMax, setStacked, setXtitle, setYtitle) {\n  return function (chart, opts, chartOptions) {\n    var series = chart.data;\n    var options = merge({}, defaultOptions);\n    options = merge(options, chartOptions || {});\n\n    if (chart.singleSeriesFormat || \"legend\" in opts) {\n      hideLegend(options, opts.legend, chart.singleSeriesFormat);\n    }\n\n    if (opts.title) {\n      setTitle(options, opts.title);\n    }\n\n    // min\n    if (\"min\" in opts) {\n      setMin(options, opts.min);\n    } else if (!negativeValues(series)) {\n      setMin(options, 0);\n    }\n\n    // max\n    if (opts.max) {\n      setMax(options, opts.max);\n    }\n\n    if (\"stacked\" in opts) {\n      setStacked(options, opts.stacked);\n    }\n\n    if (opts.colors) {\n      options.colors = opts.colors;\n    }\n\n    if (opts.xtitle) {\n      setXtitle(options, opts.xtitle);\n    }\n\n    if (opts.ytitle) {\n      setYtitle(options, opts.ytitle);\n    }\n\n    // merge library last\n    options = merge(options, opts.library || {});\n\n    return options;\n  };\n}\n\nfunction sortByTime(a, b) {\n  return a[0].getTime() - b[0].getTime();\n}\n\nfunction sortByNumberSeries(a, b) {\n  return a[0] - b[0];\n}\n\n// needed since sort() without arguments does string comparison\nfunction sortByNumber(a, b) {\n  return a - b;\n}\n\nfunction every(values, fn) {\n  for (var i = 0; i < values.length; i++) {\n    if (!fn(values[i])) {\n      return false;\n    }\n  }\n  return true;\n}\n\nfunction isDay(timeUnit) {\n  return timeUnit === \"day\" || timeUnit === \"week\" || timeUnit === \"month\" || timeUnit === \"year\";\n}\n\nfunction calculateTimeUnit(values, maxDay) {\n  if ( maxDay === void 0 ) maxDay = false;\n\n  if (values.length === 0) {\n    return null;\n  }\n\n  var minute = every(values, function (d) { return d.getMilliseconds() === 0 && d.getSeconds() === 0; });\n  if (!minute) {\n    return null;\n  }\n\n  var hour = every(values, function (d) { return d.getMinutes() === 0; });\n  if (!hour) {\n    return \"minute\";\n  }\n\n  var day = every(values, function (d) { return d.getHours() === 0; });\n  if (!day) {\n    return \"hour\";\n  }\n\n  if (maxDay) {\n    return \"day\";\n  }\n\n  var month = every(values, function (d) { return d.getDate() === 1; });\n  if (!month) {\n    var dayOfWeek = values[0].getDay();\n    var week = every(values, function (d) { return d.getDay() === dayOfWeek; });\n    return (week ? \"week\" : \"day\");\n  }\n\n  var year = every(values, function (d) { return d.getMonth() === 0; });\n  if (!year) {\n    return \"month\";\n  }\n\n  return \"year\";\n}\n\nfunction isDate(obj) {\n  return !isNaN(toDate(obj)) && toStr(obj).length >= 6;\n}\n\nfunction isNumber(obj) {\n  return typeof obj === \"number\";\n}\n\nvar byteSuffixes = [\"bytes\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\"];\n\nfunction formatValue(pre, value, options, axis) {\n  pre = pre || \"\";\n  if (options.prefix) {\n    if (value < 0) {\n      value = value * -1;\n      pre += \"-\";\n    }\n    pre += options.prefix;\n  }\n\n  var suffix = options.suffix || \"\";\n  var precision = options.precision;\n  var round = options.round;\n\n  if (options.byteScale) {\n    var positive = value >= 0;\n    if (!positive) {\n      value *= -1;\n    }\n\n    var baseValue = axis ? options.byteScale : value;\n\n    var suffixIdx;\n    if (baseValue >= 1152921504606846976) {\n      value /= 1152921504606846976;\n      suffixIdx = 6;\n    } else if (baseValue >= 1125899906842624) {\n      value /= 1125899906842624;\n      suffixIdx = 5;\n    } else if (baseValue >= 1099511627776) {\n      value /= 1099511627776;\n      suffixIdx = 4;\n    } else if (baseValue >= 1073741824) {\n      value /= 1073741824;\n      suffixIdx = 3;\n    } else if (baseValue >= 1048576) {\n      value /= 1048576;\n      suffixIdx = 2;\n    } else if (baseValue >= 1024) {\n      value /= 1024;\n      suffixIdx = 1;\n    } else {\n      suffixIdx = 0;\n    }\n\n    // TODO handle manual precision case\n    if (precision === undefined && round === undefined) {\n      if (value >= 1023.5) {\n        if (suffixIdx < byteSuffixes.length - 1) {\n          value = 1.0;\n          suffixIdx += 1;\n        }\n      }\n      precision = value >= 1000 ? 4 : 3;\n    }\n    suffix = \" \" + byteSuffixes[suffixIdx];\n\n    // flip value back\n    if (!positive) {\n      value *= -1;\n    }\n  }\n\n  if (precision !== undefined && round !== undefined) {\n    throw Error(\"Use either round or precision, not both\");\n  }\n\n  if (!axis) {\n    if (precision !== undefined) {\n      value = value.toPrecision(precision);\n      if (!options.zeros) {\n        value = parseFloat(value);\n      }\n    }\n\n    if (round !== undefined) {\n      if (round < 0) {\n        var num = Math.pow(10, -1 * round);\n        value = parseInt((1.0 * value / num).toFixed(0)) * num;\n      } else {\n        value = value.toFixed(round);\n        if (!options.zeros) {\n          value = parseFloat(value);\n        }\n      }\n    }\n  }\n\n  if (options.thousands || options.decimal) {\n    value = toStr(value);\n    var parts = value.split(\".\");\n    value = parts[0];\n    if (options.thousands) {\n      value = value.replace(/\\B(?=(\\d{3})+(?!\\d))/g, options.thousands);\n    }\n    if (parts.length > 1) {\n      value += (options.decimal || \".\") + parts[1];\n    }\n  }\n\n  return pre + value + suffix;\n}\n\nfunction seriesOption(chart, series, option) {\n  if (option in series) {\n    return series[option];\n  } else if (option in chart.options) {\n    return chart.options[option];\n  }\n  return null;\n}\n\nvar baseOptions = {\n  maintainAspectRatio: false,\n  animation: false,\n  plugins: {\n    legend: {},\n    tooltip: {\n      displayColors: false,\n      callbacks: {}\n    },\n    title: {\n      font: {\n        size: 20\n      },\n      color: \"#333\"\n    }\n  },\n  interaction: {}\n};\n\nvar defaultOptions$2 = {\n  scales: {\n    y: {\n      ticks: {\n        maxTicksLimit: 4\n      },\n      title: {\n        font: {\n          size: 16\n        },\n        color: \"#333\"\n      },\n      grid: {}\n    },\n    x: {\n      grid: {\n        drawOnChartArea: false\n      },\n      title: {\n        font: {\n          size: 16\n        },\n        color: \"#333\"\n      },\n      time: {},\n      ticks: {}\n    }\n  }\n};\n\n// http://there4.io/2012/05/02/google-chart-color-list/\nvar defaultColors = [\n  \"#3366CC\", \"#DC3912\", \"#FF9900\", \"#109618\", \"#990099\", \"#3B3EAC\", \"#0099C6\",\n  \"#DD4477\", \"#66AA00\", \"#B82E2E\", \"#316395\", \"#994499\", \"#22AA99\", \"#AAAA11\",\n  \"#6633CC\", \"#E67300\", \"#8B0707\", \"#329262\", \"#5574A6\", \"#651067\"\n];\n\nfunction hideLegend$2(options, legend, hideLegend) {\n  if (legend !== undefined) {\n    options.plugins.legend.display = !!legend;\n    if (legend && legend !== true) {\n      options.plugins.legend.position = legend;\n    }\n  } else if (hideLegend) {\n    options.plugins.legend.display = false;\n  }\n}\n\nfunction setTitle$2(options, title) {\n  options.plugins.title.display = true;\n  options.plugins.title.text = title;\n}\n\nfunction setMin$2(options, min) {\n  if (min !== null) {\n    options.scales.y.min = toFloat(min);\n  }\n}\n\nfunction setMax$2(options, max) {\n  options.scales.y.max = toFloat(max);\n}\n\nfunction setBarMin$1(options, min) {\n  if (min !== null) {\n    options.scales.x.min = toFloat(min);\n  }\n}\n\nfunction setBarMax$1(options, max) {\n  options.scales.x.max = toFloat(max);\n}\n\nfunction setStacked$2(options, stacked) {\n  options.scales.x.stacked = !!stacked;\n  options.scales.y.stacked = !!stacked;\n}\n\nfunction setXtitle$2(options, title) {\n  options.scales.x.title.display = true;\n  options.scales.x.title.text = title;\n}\n\nfunction setYtitle$2(options, title) {\n  options.scales.y.title.display = true;\n  options.scales.y.title.text = title;\n}\n\n// https://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb\nfunction addOpacity(hex, opacity) {\n  var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n  return result ? \"rgba(\" + parseInt(result[1], 16) + \", \" + parseInt(result[2], 16) + \", \" + parseInt(result[3], 16) + \", \" + opacity + \")\" : hex;\n}\n\nfunction notnull(x) {\n  return x !== null && x !== undefined;\n}\n\nfunction setLabelSize(chart, data, options) {\n  var maxLabelSize = Math.ceil(chart.element.offsetWidth / 4.0 / data.labels.length);\n  if (maxLabelSize > 25) {\n    maxLabelSize = 25;\n  } else if (maxLabelSize < 10) {\n    maxLabelSize = 10;\n  }\n  if (!options.scales.x.ticks.callback) {\n    options.scales.x.ticks.callback = function (value) {\n      value = toStr(this.getLabelForValue(value));\n      if (value.length > maxLabelSize) {\n        return value.substring(0, maxLabelSize - 2) + \"...\";\n      } else {\n        return value;\n      }\n    };\n  }\n}\n\nfunction calculateScale(series) {\n  var scale = 1;\n  var max = maxAbsY(series);\n  while (max >= 1024) {\n    scale *= 1024;\n    max /= 1024;\n  }\n  return scale;\n}\n\nfunction setFormatOptions$1(chart, options, chartType) {\n  // options to apply to x and r values for scatter and bubble\n  var numericOptions = {\n    thousands: chart.options.thousands,\n    decimal: chart.options.decimal\n  };\n\n  // options to apply to y value\n  var formatOptions = merge({\n    prefix: chart.options.prefix,\n    suffix: chart.options.suffix,\n    precision: chart.options.precision,\n    round: chart.options.round,\n    zeros: chart.options.zeros\n  }, numericOptions);\n\n  if (chart.options.bytes) {\n    var series = chart.data;\n    if (chartType === \"pie\") {\n      series = [{data: series}];\n    }\n\n    // set step size\n    formatOptions.byteScale = calculateScale(series);\n  }\n\n  if (chartType !== \"pie\") {\n    var axis = options.scales.y;\n    if (chartType === \"bar\") {\n      axis = options.scales.x;\n    }\n\n    if (formatOptions.byteScale) {\n      if (!axis.ticks.stepSize) {\n        axis.ticks.stepSize = formatOptions.byteScale / 2;\n      }\n      if (!axis.ticks.maxTicksLimit) {\n        axis.ticks.maxTicksLimit = 4;\n      }\n    }\n\n    if (!axis.ticks.callback) {\n      axis.ticks.callback = function (value) {\n        return formatValue(\"\", value, formatOptions, true);\n      };\n    }\n\n    if ((chartType === \"scatter\" || chartType === \"bubble\") && !options.scales.x.ticks.callback) {\n      options.scales.x.ticks.callback = function (value) {\n        return formatValue(\"\", value, numericOptions, true);\n      };\n    }\n  }\n\n  if (!options.plugins.tooltip.callbacks.label) {\n    if (chartType === \"scatter\") {\n      options.plugins.tooltip.callbacks.label = function (context) {\n        var label = context.dataset.label || '';\n        if (label) {\n          label += ': ';\n        }\n\n        var dataPoint = context.parsed;\n        return label + '(' + formatValue('', dataPoint.x, numericOptions) + ', ' + formatValue('', dataPoint.y, formatOptions) + ')';\n      };\n    } else if (chartType === \"bubble\") {\n      options.plugins.tooltip.callbacks.label = function (context) {\n        var label = context.dataset.label || '';\n        if (label) {\n          label += ': ';\n        }\n        var dataPoint = context.raw;\n        return label + '(' + formatValue('', dataPoint.x, numericOptions) + ', ' + formatValue('', dataPoint.y, formatOptions) + ', ' + formatValue('', dataPoint.v, numericOptions) + ')';\n      };\n    } else if (chartType === \"pie\") {\n      // need to use separate label for pie charts\n      options.plugins.tooltip.callbacks.label = function (context) {\n        return formatValue('', context.parsed, formatOptions);\n      };\n    } else {\n      var valueLabel = chartType === \"bar\" ? \"x\" : \"y\";\n      options.plugins.tooltip.callbacks.label = function (context) {\n        // don't show null values for stacked charts\n        if (context.parsed[valueLabel] === null) {\n          return;\n        }\n\n        var label = context.dataset.label || '';\n        if (label) {\n          label += ': ';\n        }\n        return formatValue(label, context.parsed[valueLabel], formatOptions);\n      };\n    }\n  }\n\n  // avoid formatting x-axis labels\n  // by default, Chart.js applies locale\n  if ((chartType === \"line\" || chartType === \"area\") && chart.xtype === \"number\") {\n    if (!options.scales.x.ticks.callback) {\n      options.scales.x.ticks.callback = function (value) {\n        return toStr(value);\n      };\n    }\n\n    if (!options.plugins.tooltip.callbacks.title) {\n      options.plugins.tooltip.callbacks.title = function (context) {\n        return toStr(context[0].parsed.x);\n      };\n    }\n  }\n}\n\nfunction maxAbsY(series) {\n  var max = 0;\n  for (var i = 0; i < series.length; i++) {\n    var data = series[i].data;\n    for (var j = 0; j < data.length; j++) {\n      var v = Math.abs(data[j][1]);\n      if (v > max) {\n        max = v;\n      }\n    }\n  }\n  return max;\n}\n\nfunction maxR(series) {\n  // start at zero since radius must be positive\n  var max = 0;\n  for (var i = 0; i < series.length; i++) {\n    var data = series[i].data;\n    for (var j = 0; j < data.length; j++) {\n      var v = data[j][2];\n      if (v > max) {\n        max = v;\n      }\n    }\n  }\n  return max;\n}\n\nvar jsOptions$2 = jsOptionsFunc(merge(baseOptions, defaultOptions$2), hideLegend$2, setTitle$2, setMin$2, setMax$2, setStacked$2, setXtitle$2, setYtitle$2);\n\nfunction prepareDefaultData(chart) {\n  var series = chart.data;\n  var rows = {};\n  var keys = [];\n  var labels = [];\n  var values = [];\n\n  for (var i = 0; i < series.length; i++) {\n    var data = series[i].data;\n\n    for (var j = 0; j < data.length; j++) {\n      var d = data[j];\n      var key = chart.xtype === \"datetime\" ? d[0].getTime() : d[0];\n      if (!rows[key]) {\n        rows[key] = new Array(series.length);\n        keys.push(key);\n      }\n      rows[key][i] = d[1];\n    }\n  }\n\n  if (chart.xtype === \"datetime\" || chart.xtype === \"number\") {\n    keys.sort(sortByNumber);\n  }\n\n  for (var i$1 = 0; i$1 < series.length; i$1++) {\n    values.push([]);\n  }\n\n  for (var i$2 = 0; i$2 < keys.length; i$2++) {\n    var key$1 = keys[i$2];\n\n    var label = chart.xtype === \"datetime\" ? new Date(key$1) : key$1;\n    labels.push(label);\n\n    var row = rows[key$1];\n    for (var j$1 = 0; j$1 < series.length; j$1++) {\n      var v = row[j$1];\n      // Chart.js doesn't like undefined\n      values[j$1].push(v === undefined ? null : v);\n    }\n  }\n\n  return {\n    labels: labels,\n    values: values\n  };\n}\n\nfunction prepareBubbleData(chart) {\n  var series = chart.data;\n  var values = [];\n  var max = maxR(series);\n\n  for (var i = 0; i < series.length; i++) {\n    var data = series[i].data;\n    var points = [];\n    for (var j = 0; j < data.length; j++) {\n      var v = data[j];\n      points.push({\n        x: v[0],\n        y: v[1],\n        r: v[2] * 20 / max,\n        // custom attribute, for tooltip\n        v: v[2]\n      });\n    }\n    values.push(points);\n  }\n\n  return {\n    labels: [],\n    values: values\n  };\n}\n\n// scatter or numeric line/area\nfunction prepareNumberData(chart) {\n  var series = chart.data;\n  var values = [];\n\n  for (var i = 0; i < series.length; i++) {\n    var data = series[i].data;\n\n    data.sort(sortByNumberSeries);\n\n    var points = [];\n    for (var j = 0; j < data.length; j++) {\n      var v = data[j];\n      points.push({\n        x: v[0],\n        y: v[1]\n      });\n    }\n    values.push(points);\n  }\n\n  return {\n    labels: [],\n    values: values\n  };\n}\n\nfunction prepareData(chart, chartType) {\n  if (chartType === \"bubble\") {\n    return prepareBubbleData(chart);\n  } else if (chart.xtype === \"number\" && chartType !== \"bar\" && chartType !== \"column\") {\n    return prepareNumberData(chart);\n  } else {\n    return prepareDefaultData(chart);\n  }\n}\n\nfunction createDataTable(chart, options, chartType) {\n  var ref = prepareData(chart, chartType);\n  var labels = ref.labels;\n  var values = ref.values;\n\n  var series = chart.data;\n  var datasets = [];\n  var colors = chart.options.colors || defaultColors;\n  for (var i = 0; i < series.length; i++) {\n    var s = series[i];\n\n    // use colors for each bar for single series format\n    var color = (void 0);\n    var backgroundColor = (void 0);\n    if (chart.options.colors && chart.singleSeriesFormat && (chartType === \"bar\" || chartType === \"column\") && !s.color && isArray(chart.options.colors) && !isArray(chart.options.colors[0])) {\n      color = colors;\n      backgroundColor = [];\n      for (var j = 0; j < colors.length; j++) {\n        backgroundColor[j] = addOpacity(color[j], 0.5);\n      }\n    } else {\n      color = s.color || colors[i];\n      backgroundColor = chartType !== \"line\" ? addOpacity(color, 0.5) : color;\n    }\n\n    var dataset = {\n      label: s.name || \"\",\n      data: values[i],\n      fill: chartType === \"area\",\n      borderColor: color,\n      backgroundColor: backgroundColor,\n      borderWidth: 2\n    };\n\n    var pointChart = chartType === \"line\" || chartType === \"area\" || chartType === \"scatter\" || chartType === \"bubble\";\n    if (pointChart) {\n      dataset.pointBackgroundColor = color;\n      dataset.pointHoverBackgroundColor = color;\n      dataset.pointHitRadius = 50;\n    }\n\n    if (chartType === \"bubble\") {\n      dataset.pointBackgroundColor = backgroundColor;\n      dataset.pointHoverBackgroundColor = backgroundColor;\n      dataset.pointHoverBorderWidth = 2;\n    }\n\n    if (s.stack) {\n      dataset.stack = s.stack;\n    }\n\n    var curve = seriesOption(chart, s, \"curve\");\n    if (curve === false) {\n      dataset.tension = 0;\n    } else if (pointChart) {\n      dataset.tension = 0.4;\n    }\n\n    var points = seriesOption(chart, s, \"points\");\n    if (points === false) {\n      dataset.pointRadius = 0;\n      dataset.pointHoverRadius = 0;\n    }\n\n    dataset = merge(dataset, chart.options.dataset || {});\n    dataset = merge(dataset, s.library || {});\n    dataset = merge(dataset, s.dataset || {});\n\n    datasets.push(dataset);\n  }\n\n  var xmin = chart.options.xmin;\n  var xmax = chart.options.xmax;\n\n  if (chart.xtype === \"datetime\") {\n    if (notnull(xmin)) {\n      options.scales.x.min = toDate(xmin).getTime();\n    }\n    if (notnull(xmax)) {\n      options.scales.x.max = toDate(xmax).getTime();\n    }\n  } else if (chart.xtype === \"number\") {\n    if (notnull(xmin)) {\n      options.scales.x.min = xmin;\n    }\n    if (notnull(xmax)) {\n      options.scales.x.max = xmax;\n    }\n  }\n\n  if (chart.xtype === \"datetime\") {\n    var timeUnit = calculateTimeUnit(labels);\n\n    // for empty datetime chart\n    if (labels.length === 0) {\n      if (notnull(xmin)) {\n        labels.push(toDate(xmin));\n      }\n      if (notnull(xmax)) {\n        labels.push(toDate(xmax));\n      }\n    }\n\n    if (labels.length > 0) {\n      var minTime = (notnull(xmin) ? toDate(xmin) : labels[0]).getTime();\n      var maxTime = (notnull(xmax) ? toDate(xmax) : labels[0]).getTime();\n\n      for (var i$1 = 1; i$1 < labels.length; i$1++) {\n        var value = labels[i$1].getTime();\n        if (value < minTime) {\n          minTime = value;\n        }\n        if (value > maxTime) {\n          maxTime = value;\n        }\n      }\n\n      var timeDiff = (maxTime - minTime) / (86400 * 1000.0);\n\n      if (!options.scales.x.time.unit) {\n        var step;\n        if (timeUnit === \"year\" || timeDiff > 365 * 10) {\n          options.scales.x.time.unit = \"year\";\n          step = 365;\n        } else if (timeUnit === \"month\" || timeDiff > 30 * 10) {\n          options.scales.x.time.unit = \"month\";\n          step = 30;\n        } else if (timeUnit === \"week\" || timeUnit === \"day\" || timeDiff > 10) {\n          options.scales.x.time.unit = \"day\";\n          step = 1;\n        } else if (timeUnit === \"hour\" || timeDiff > 0.5) {\n          options.scales.x.time.displayFormats = {hour: \"MMM d, h a\"};\n          options.scales.x.time.unit = \"hour\";\n          step = 1 / 24.0;\n        } else if (timeUnit === \"minute\") {\n          options.scales.x.time.displayFormats = {minute: \"h:mm a\"};\n          options.scales.x.time.unit = \"minute\";\n          step = 1 / 24.0 / 60.0;\n        }\n\n        if (step && timeDiff > 0) {\n          // width not available for hidden elements\n          var width = chart.element.offsetWidth;\n          if (width > 0) {\n            var unitStepSize = Math.ceil(timeDiff / step / (width / 100.0));\n            if (timeUnit === \"week\" && step === 1) {\n              unitStepSize = Math.ceil(unitStepSize / 7.0) * 7;\n            }\n            options.scales.x.ticks.stepSize = unitStepSize;\n          }\n        }\n      }\n\n      if (!options.scales.x.time.tooltipFormat) {\n        if (timeUnit === \"year\") {\n          options.scales.x.time.tooltipFormat = \"yyyy\";\n        } else if (timeUnit === \"month\") {\n          options.scales.x.time.tooltipFormat = \"MMM yyyy\";\n        } else if (timeUnit === \"week\" || timeUnit === \"day\") {\n          options.scales.x.time.tooltipFormat = \"PP\";\n        } else if (timeUnit === \"hour\") {\n          options.scales.x.time.tooltipFormat = \"MMM d, h a\";\n        } else if (timeUnit === \"minute\") {\n          options.scales.x.time.tooltipFormat = \"h:mm a\";\n        }\n      }\n    }\n  }\n\n  return {\n    labels: labels,\n    datasets: datasets\n  };\n}\n\nvar defaultExport$2 = function defaultExport(library) {\n  this.name = \"chartjs\";\n  this.library = library;\n};\n\ndefaultExport$2.prototype.renderLineChart = function renderLineChart (chart, chartType) {\n  if (!chartType) {\n    chartType = \"line\";\n  }\n\n  var chartOptions = {};\n\n  var options = jsOptions$2(chart, merge(chartOptions, chart.options));\n  setFormatOptions$1(chart, options, chartType);\n\n  var data = createDataTable(chart, options, chartType);\n\n  if (chart.xtype === \"number\") {\n    options.scales.x.type = options.scales.x.type || \"linear\";\n    options.scales.x.position = options.scales.x.position || \"bottom\";\n  } else {\n    options.scales.x.type = chart.xtype === \"string\" ? \"category\" : \"time\";\n  }\n\n  this.drawChart(chart, \"line\", data, options);\n};\n\ndefaultExport$2.prototype.renderPieChart = function renderPieChart (chart) {\n  var options = merge({}, baseOptions);\n  if (chart.options.donut) {\n    options.cutout = \"50%\";\n  }\n\n  if (\"legend\" in chart.options) {\n    hideLegend$2(options, chart.options.legend);\n  }\n\n  if (chart.options.title) {\n    setTitle$2(options, chart.options.title);\n  }\n\n  options = merge(options, chart.options.library || {});\n  setFormatOptions$1(chart, options, \"pie\");\n\n  var labels = [];\n  var values = [];\n  for (var i = 0; i < chart.data.length; i++) {\n    var point = chart.data[i];\n    labels.push(point[0]);\n    values.push(point[1]);\n  }\n\n  var dataset = {\n    data: values,\n    backgroundColor: chart.options.colors || defaultColors\n  };\n  dataset = merge(dataset, chart.options.dataset || {});\n\n  var data = {\n    labels: labels,\n    datasets: [dataset]\n  };\n\n  this.drawChart(chart, \"pie\", data, options);\n};\n\ndefaultExport$2.prototype.renderColumnChart = function renderColumnChart (chart, chartType) {\n  var options;\n  if (chartType === \"bar\") {\n    var barOptions = merge(baseOptions, defaultOptions$2);\n    barOptions.indexAxis = \"y\";\n\n    // ensure gridlines have proper orientation\n    barOptions.scales.x.grid.drawOnChartArea = true;\n    barOptions.scales.y.grid.drawOnChartArea = false;\n    delete barOptions.scales.y.ticks.maxTicksLimit;\n\n    options = jsOptionsFunc(barOptions, hideLegend$2, setTitle$2, setBarMin$1, setBarMax$1, setStacked$2, setXtitle$2, setYtitle$2)(chart, chart.options);\n  } else {\n    options = jsOptions$2(chart, chart.options);\n  }\n  setFormatOptions$1(chart, options, chartType);\n  var data = createDataTable(chart, options, \"column\");\n  if (chartType !== \"bar\") {\n    setLabelSize(chart, data, options);\n  }\n  if (!(\"mode\" in options.interaction)) {\n    options.interaction.mode = \"index\";\n  }\n  this.drawChart(chart, \"bar\", data, options);\n};\n\ndefaultExport$2.prototype.renderAreaChart = function renderAreaChart (chart) {\n  this.renderLineChart(chart, \"area\");\n};\n\ndefaultExport$2.prototype.renderBarChart = function renderBarChart (chart) {\n  this.renderColumnChart(chart, \"bar\");\n};\n\ndefaultExport$2.prototype.renderScatterChart = function renderScatterChart (chart, chartType) {\n  chartType = chartType || \"scatter\";\n\n  var options = jsOptions$2(chart, chart.options);\n  setFormatOptions$1(chart, options, chartType);\n\n  if (!(\"showLine\" in options)) {\n    options.showLine = false;\n  }\n\n  var data = createDataTable(chart, options, chartType);\n\n  options.scales.x.type = options.scales.x.type || \"linear\";\n  options.scales.x.position = options.scales.x.position || \"bottom\";\n\n  // prevent grouping hover and tooltips\n  if (!(\"mode\" in options.interaction)) {\n    options.interaction.mode = \"nearest\";\n  }\n\n  this.drawChart(chart, chartType, data, options);\n};\n\ndefaultExport$2.prototype.renderBubbleChart = function renderBubbleChart (chart) {\n  this.renderScatterChart(chart, \"bubble\");\n};\n\ndefaultExport$2.prototype.destroy = function destroy (chart) {\n  if (chart.chart) {\n    chart.chart.destroy();\n  }\n};\n\ndefaultExport$2.prototype.drawChart = function drawChart (chart, type, data, options) {\n  this.destroy(chart);\n  if (chart.destroyed) { return; }\n\n  var chartOptions = {\n    type: type,\n    data: data,\n    options: options\n  };\n\n  if (chart.options.code) {\n    window.console.log(\"new Chart(ctx, \" + JSON.stringify(chartOptions) + \");\");\n  }\n\n  chart.element.innerHTML = \"<canvas></canvas>\";\n  var ctx = chart.element.getElementsByTagName(\"CANVAS\")[0];\n  chart.chart = new this.library(ctx, chartOptions);\n};\n\nvar defaultOptions$1 = {\n  chart: {},\n  xAxis: {\n    title: {\n      text: null\n    },\n    labels: {\n      style: {\n        fontSize: \"12px\"\n      }\n    }\n  },\n  yAxis: {\n    title: {\n      text: null\n    },\n    labels: {\n      style: {\n        fontSize: \"12px\"\n      }\n    }\n  },\n  title: {\n    text: null\n  },\n  credits: {\n    enabled: false\n  },\n  legend: {\n    borderWidth: 0\n  },\n  tooltip: {\n    style: {\n      fontSize: \"12px\"\n    }\n  },\n  plotOptions: {\n    areaspline: {},\n    area: {},\n    series: {\n      marker: {}\n    }\n  },\n  time: {\n    useUTC: false\n  }\n};\n\nfunction hideLegend$1(options, legend, hideLegend) {\n  if (legend !== undefined) {\n    options.legend.enabled = !!legend;\n    if (legend && legend !== true) {\n      if (legend === \"top\" || legend === \"bottom\") {\n        options.legend.verticalAlign = legend;\n      } else {\n        options.legend.layout = \"vertical\";\n        options.legend.verticalAlign = \"middle\";\n        options.legend.align = legend;\n      }\n    }\n  } else if (hideLegend) {\n    options.legend.enabled = false;\n  }\n}\n\nfunction setTitle$1(options, title) {\n  options.title.text = title;\n}\n\nfunction setMin$1(options, min) {\n  options.yAxis.min = min;\n}\n\nfunction setMax$1(options, max) {\n  options.yAxis.max = max;\n}\n\nfunction setStacked$1(options, stacked) {\n  var stackedValue = stacked ? (stacked === true ? \"normal\" : stacked) : null;\n  options.plotOptions.series.stacking = stackedValue;\n  options.plotOptions.area.stacking = stackedValue;\n  options.plotOptions.areaspline.stacking = stackedValue;\n}\n\nfunction setXtitle$1(options, title) {\n  options.xAxis.title.text = title;\n}\n\nfunction setYtitle$1(options, title) {\n  options.yAxis.title.text = title;\n}\n\nvar jsOptions$1 = jsOptionsFunc(defaultOptions$1, hideLegend$1, setTitle$1, setMin$1, setMax$1, setStacked$1, setXtitle$1, setYtitle$1);\n\nfunction setFormatOptions(chart, options, chartType) {\n  var formatOptions = {\n    prefix: chart.options.prefix,\n    suffix: chart.options.suffix,\n    thousands: chart.options.thousands,\n    decimal: chart.options.decimal,\n    precision: chart.options.precision,\n    round: chart.options.round,\n    zeros: chart.options.zeros\n  };\n\n  // skip when axis is an array (like with min/max)\n  if (chartType !== \"pie\" && !isArray(options.yAxis) && !options.yAxis.labels.formatter) {\n    options.yAxis.labels.formatter = function () {\n      return formatValue(\"\", this.value, formatOptions);\n    };\n  }\n\n  if (!options.tooltip.pointFormatter && !options.tooltip.pointFormat) {\n    options.tooltip.pointFormatter = function () {\n      return '<span style=\"color:' + this.color + '\">\\u25CF</span> ' + formatValue(this.series.name + ': <b>', this.y, formatOptions) + '</b><br/>';\n    };\n  }\n}\n\nvar defaultExport$1 = function defaultExport(library) {\n  this.name = \"highcharts\";\n  this.library = library;\n};\n\ndefaultExport$1.prototype.renderLineChart = function renderLineChart (chart, chartType) {\n  chartType = chartType || \"spline\";\n  var chartOptions = {};\n  if (chartType === \"areaspline\") {\n    chartOptions = {\n      plotOptions: {\n        areaspline: {\n          stacking: \"normal\"\n        },\n        area: {\n          stacking: \"normal\"\n        },\n        series: {\n          marker: {\n            enabled: false\n          }\n        }\n      }\n    };\n  }\n\n  if (chart.options.curve === false) {\n    if (chartType === \"areaspline\") {\n      chartType = \"area\";\n    } else if (chartType === \"spline\") {\n      chartType = \"line\";\n    }\n  }\n\n  var options = jsOptions$1(chart, chart.options, chartOptions);\n  if (chart.xtype === \"number\") {\n    options.xAxis.type = options.xAxis.type || \"linear\";\n  } else {\n    options.xAxis.type = chart.xtype === \"string\" ? \"category\" : \"datetime\";\n  }\n  if (!options.chart.type) {\n    options.chart.type = chartType;\n  }\n  setFormatOptions(chart, options, chartType);\n\n  var series = chart.data;\n  for (var i = 0; i < series.length; i++) {\n    series[i].name = series[i].name || \"Value\";\n    var data = series[i].data;\n    if (chart.xtype === \"datetime\") {\n      for (var j = 0; j < data.length; j++) {\n        data[j][0] = data[j][0].getTime();\n      }\n    } else if (chart.xtype === \"number\") {\n      data.sort(sortByNumberSeries);\n    }\n    series[i].marker = {symbol: \"circle\"};\n    if (chart.options.points === false) {\n      series[i].marker.enabled = false;\n    }\n  }\n\n  this.drawChart(chart, series, options);\n};\n\ndefaultExport$1.prototype.renderScatterChart = function renderScatterChart (chart) {\n  var options = jsOptions$1(chart, chart.options, {});\n  options.chart.type = \"scatter\";\n  this.drawChart(chart, chart.data, options);\n};\n\ndefaultExport$1.prototype.renderPieChart = function renderPieChart (chart) {\n  var chartOptions = merge(defaultOptions$1, {});\n\n  if (chart.options.colors) {\n    chartOptions.colors = chart.options.colors;\n  }\n  if (chart.options.donut) {\n    chartOptions.plotOptions = {pie: {innerSize: \"50%\"}};\n  }\n\n  if (\"legend\" in chart.options) {\n    hideLegend$1(chartOptions, chart.options.legend);\n  }\n\n  if (chart.options.title) {\n    setTitle$1(chartOptions, chart.options.title);\n  }\n\n  var options = merge(chartOptions, chart.options.library || {});\n  setFormatOptions(chart, options, \"pie\");\n  var series = [{\n    type: \"pie\",\n    name: chart.options.label || \"Value\",\n    data: chart.data\n  }];\n\n  this.drawChart(chart, series, options);\n};\n\ndefaultExport$1.prototype.renderColumnChart = function renderColumnChart (chart, chartType) {\n  chartType = chartType || \"column\";\n  var series = chart.data;\n  var options = jsOptions$1(chart, chart.options);\n  var rows = [];\n  var categories = [];\n  options.chart.type = chartType;\n  setFormatOptions(chart, options, chartType);\n\n  for (var i = 0; i < series.length; i++) {\n    var s = series[i];\n\n    for (var j = 0; j < s.data.length; j++) {\n      var d = s.data[j];\n      if (!rows[d[0]]) {\n        rows[d[0]] = new Array(series.length);\n        categories.push(d[0]);\n      }\n      rows[d[0]][i] = d[1];\n    }\n  }\n\n  if (chart.xtype === \"number\") {\n    categories.sort(sortByNumber);\n  }\n\n  options.xAxis.categories = categories;\n\n  var newSeries = [];\n  for (var i$1 = 0; i$1 < series.length; i$1++) {\n    var d$1 = [];\n    for (var j$1 = 0; j$1 < categories.length; j$1++) {\n      d$1.push(rows[categories[j$1]][i$1] || 0);\n    }\n\n    var d2 = {\n      name: series[i$1].name || \"Value\",\n      data: d$1\n    };\n    if (series[i$1].stack) {\n      d2.stack = series[i$1].stack;\n    }\n\n    newSeries.push(d2);\n  }\n\n  this.drawChart(chart, newSeries, options);\n};\n\ndefaultExport$1.prototype.renderBarChart = function renderBarChart (chart) {\n  this.renderColumnChart(chart, \"bar\");\n};\n\ndefaultExport$1.prototype.renderAreaChart = function renderAreaChart (chart) {\n  this.renderLineChart(chart, \"areaspline\");\n};\n\ndefaultExport$1.prototype.destroy = function destroy (chart) {\n  if (chart.chart) {\n    chart.chart.destroy();\n  }\n};\n\ndefaultExport$1.prototype.drawChart = function drawChart (chart, data, options) {\n  this.destroy(chart);\n  if (chart.destroyed) { return; }\n\n  options.chart.renderTo = chart.element.id;\n  options.series = data;\n\n  if (chart.options.code) {\n    window.console.log(\"new Highcharts.Chart(\" + JSON.stringify(options) + \");\");\n  }\n\n  chart.chart = new this.library.Chart(options);\n};\n\nvar loaded = {};\nvar callbacks = [];\n\n// Set chart options\nvar defaultOptions = {\n  chartArea: {},\n  fontName: \"'Lucida Grande', 'Lucida Sans Unicode', Verdana, Arial, Helvetica, sans-serif\",\n  pointSize: 6,\n  legend: {\n    textStyle: {\n      fontSize: 12,\n      color: \"#444\"\n    },\n    alignment: \"center\",\n    position: \"right\"\n  },\n  curveType: \"function\",\n  hAxis: {\n    textStyle: {\n      color: \"#666\",\n      fontSize: 12\n    },\n    titleTextStyle: {},\n    gridlines: {\n      color: \"transparent\"\n    },\n    baselineColor: \"#ccc\",\n    viewWindow: {}\n  },\n  vAxis: {\n    textStyle: {\n      color: \"#666\",\n      fontSize: 12\n    },\n    titleTextStyle: {},\n    baselineColor: \"#ccc\",\n    viewWindow: {}\n  },\n  tooltip: {\n    textStyle: {\n      color: \"#666\",\n      fontSize: 12\n    }\n  }\n};\n\nfunction hideLegend(options, legend, hideLegend) {\n  if (legend !== undefined) {\n    var position;\n    if (!legend) {\n      position = \"none\";\n    } else if (legend === true) {\n      position = \"right\";\n    } else {\n      position = legend;\n    }\n    options.legend.position = position;\n  } else if (hideLegend) {\n    options.legend.position = \"none\";\n  }\n}\n\nfunction setTitle(options, title) {\n  options.title = title;\n  options.titleTextStyle = {color: \"#333\", fontSize: \"20px\"};\n}\n\nfunction setMin(options, min) {\n  options.vAxis.viewWindow.min = min;\n}\n\nfunction setMax(options, max) {\n  options.vAxis.viewWindow.max = max;\n}\n\nfunction setBarMin(options, min) {\n  options.hAxis.viewWindow.min = min;\n}\n\nfunction setBarMax(options, max) {\n  options.hAxis.viewWindow.max = max;\n}\n\nfunction setStacked(options, stacked) {\n  options.isStacked = stacked || false;\n}\n\nfunction setXtitle(options, title) {\n  options.hAxis.title = title;\n  options.hAxis.titleTextStyle.italic = false;\n}\n\nfunction setYtitle(options, title) {\n  options.vAxis.title = title;\n  options.vAxis.titleTextStyle.italic = false;\n}\n\nvar jsOptions = jsOptionsFunc(defaultOptions, hideLegend, setTitle, setMin, setMax, setStacked, setXtitle, setYtitle);\n\nfunction resize(callback) {\n  if (window.attachEvent) {\n    window.attachEvent(\"onresize\", callback);\n  } else if (window.addEventListener) {\n    window.addEventListener(\"resize\", callback, true);\n  }\n  callback();\n}\n\nvar defaultExport = function defaultExport(library) {\n  this.name = \"google\";\n  this.library = library;\n};\n\ndefaultExport.prototype.renderLineChart = function renderLineChart (chart) {\n    var this$1$1 = this;\n\n  this.waitForLoaded(chart, function () {\n    var chartOptions = {};\n\n    if (chart.options.curve === false) {\n      chartOptions.curveType = \"none\";\n    }\n\n    if (chart.options.points === false) {\n      chartOptions.pointSize = 0;\n    }\n\n    var options = jsOptions(chart, chart.options, chartOptions);\n    var data = this$1$1.createDataTable(chart.data, chart.xtype);\n\n    this$1$1.drawChart(chart, \"LineChart\", data, options);\n  });\n};\n\ndefaultExport.prototype.renderPieChart = function renderPieChart (chart) {\n    var this$1$1 = this;\n\n  this.waitForLoaded(chart, function () {\n    var chartOptions = {\n      chartArea: {\n        top: \"10%\",\n        height: \"80%\"\n      },\n      legend: {}\n    };\n    if (chart.options.colors) {\n      chartOptions.colors = chart.options.colors;\n    }\n    if (chart.options.donut) {\n      chartOptions.pieHole = 0.5;\n    }\n    if (\"legend\" in chart.options) {\n      hideLegend(chartOptions, chart.options.legend);\n    }\n    if (chart.options.title) {\n      setTitle(chartOptions, chart.options.title);\n    }\n    var options = merge(merge(defaultOptions, chartOptions), chart.options.library || {});\n\n    var data = new this$1$1.library.visualization.DataTable();\n    data.addColumn(\"string\", \"\");\n    data.addColumn(\"number\", \"Value\");\n    data.addRows(chart.data);\n\n    this$1$1.drawChart(chart, \"PieChart\", data, options);\n  });\n};\n\ndefaultExport.prototype.renderColumnChart = function renderColumnChart (chart) {\n    var this$1$1 = this;\n\n  this.waitForLoaded(chart, function () {\n    var options = jsOptions(chart, chart.options);\n    var data = this$1$1.createDataTable(chart.data, chart.xtype);\n\n    this$1$1.drawChart(chart, \"ColumnChart\", data, options);\n  });\n};\n\ndefaultExport.prototype.renderBarChart = function renderBarChart (chart) {\n    var this$1$1 = this;\n\n  this.waitForLoaded(chart, function () {\n    var chartOptions = {\n      hAxis: {\n        gridlines: {\n          color: \"#ccc\"\n        }\n      }\n    };\n    var options = jsOptionsFunc(defaultOptions, hideLegend, setTitle, setBarMin, setBarMax, setStacked, setXtitle, setYtitle)(chart, chart.options, chartOptions);\n    var data = this$1$1.createDataTable(chart.data, chart.xtype);\n\n    this$1$1.drawChart(chart, \"BarChart\", data, options);\n  });\n};\n\ndefaultExport.prototype.renderAreaChart = function renderAreaChart (chart) {\n    var this$1$1 = this;\n\n  this.waitForLoaded(chart, function () {\n    var chartOptions = {\n      isStacked: true,\n      pointSize: 0,\n      areaOpacity: 0.5\n    };\n\n    var options = jsOptions(chart, chart.options, chartOptions);\n    var data = this$1$1.createDataTable(chart.data, chart.xtype);\n\n    this$1$1.drawChart(chart, \"AreaChart\", data, options);\n  });\n};\n\ndefaultExport.prototype.renderGeoChart = function renderGeoChart (chart) {\n    var this$1$1 = this;\n\n  this.waitForLoaded(chart, \"geochart\", function () {\n    var chartOptions = {\n      legend: \"none\",\n      colorAxis: {\n        colors: chart.options.colors || [\"#f6c7b6\", \"#ce502d\"]\n      }\n    };\n    var options = merge(merge(defaultOptions, chartOptions), chart.options.library || {});\n\n    var data = new this$1$1.library.visualization.DataTable();\n    data.addColumn(\"string\", \"\");\n    data.addColumn(\"number\", chart.options.label || \"Value\");\n    data.addRows(chart.data);\n\n    this$1$1.drawChart(chart, \"GeoChart\", data, options);\n  });\n};\n\ndefaultExport.prototype.renderScatterChart = function renderScatterChart (chart) {\n    var this$1$1 = this;\n\n  this.waitForLoaded(chart, function () {\n    var chartOptions = {};\n    var options = jsOptions(chart, chart.options, chartOptions);\n\n    var series = chart.data;\n    var rows2 = [];\n    for (var i = 0; i < series.length; i++) {\n      series[i].name = series[i].name || \"Value\";\n      var d = series[i].data;\n      for (var j = 0; j < d.length; j++) {\n        var row = new Array(series.length + 1);\n        row[0] = d[j][0];\n        row[i + 1] = d[j][1];\n        rows2.push(row);\n      }\n    }\n\n    var data = new this$1$1.library.visualization.DataTable();\n    data.addColumn(\"number\", \"\");\n    for (var i$1 = 0; i$1 < series.length; i$1++) {\n      data.addColumn(\"number\", series[i$1].name);\n    }\n    data.addRows(rows2);\n\n    this$1$1.drawChart(chart, \"ScatterChart\", data, options);\n  });\n};\n\ndefaultExport.prototype.renderTimeline = function renderTimeline (chart) {\n    var this$1$1 = this;\n\n  this.waitForLoaded(chart, \"timeline\", function () {\n    var chartOptions = {\n      legend: \"none\"\n    };\n\n    if (chart.options.colors) {\n      chartOptions.colors = chart.options.colors;\n    }\n    var options = merge(merge(defaultOptions, chartOptions), chart.options.library || {});\n\n    var data = new this$1$1.library.visualization.DataTable();\n    data.addColumn({type: \"string\", id: \"Name\"});\n    data.addColumn({type: \"date\", id: \"Start\"});\n    data.addColumn({type: \"date\", id: \"End\"});\n    data.addRows(chart.data);\n\n    chart.element.style.lineHeight = \"normal\";\n\n    this$1$1.drawChart(chart, \"Timeline\", data, options);\n  });\n};\n\n// TODO remove resize events\ndefaultExport.prototype.destroy = function destroy (chart) {\n  if (chart.chart) {\n    chart.chart.clearChart();\n  }\n};\n\ndefaultExport.prototype.drawChart = function drawChart (chart, type, data, options) {\n  this.destroy(chart);\n  if (chart.destroyed) { return; }\n\n  if (chart.options.code) {\n    window.console.log(\"var data = new google.visualization.DataTable(\" + data.toJSON() + \");\\nvar chart = new google.visualization.\" + type + \"(element);\\nchart.draw(data, \" + JSON.stringify(options) + \");\");\n  }\n\n  chart.chart = new this.library.visualization[type](chart.element);\n  resize(function () {\n    chart.chart.draw(data, options);\n  });\n};\n\ndefaultExport.prototype.waitForLoaded = function waitForLoaded (chart, pack, callback) {\n    var this$1$1 = this;\n\n  if (!callback) {\n    callback = pack;\n    pack = \"corechart\";\n  }\n\n  callbacks.push({pack: pack, callback: callback});\n\n  if (loaded[pack]) {\n    this.runCallbacks();\n  } else {\n    loaded[pack] = true;\n\n    // https://groups.google.com/forum/#!topic/google-visualization-api/fMKJcyA2yyI\n    var loadOptions = {\n      packages: [pack],\n      callback: function () { this$1$1.runCallbacks(); }\n    };\n    var config = chart.__config();\n    if (config.language) {\n      loadOptions.language = config.language;\n    }\n    if (pack === \"geochart\" && config.mapsApiKey) {\n      loadOptions.mapsApiKey = config.mapsApiKey;\n    }\n\n    this.library.charts.load(\"current\", loadOptions);\n  }\n};\n\ndefaultExport.prototype.runCallbacks = function runCallbacks () {\n  for (var i = 0; i < callbacks.length; i++) {\n    var cb = callbacks[i];\n    var call = this.library.visualization && ((cb.pack === \"corechart\" && this.library.visualization.LineChart) || (cb.pack === \"timeline\" && this.library.visualization.Timeline) || (cb.pack === \"geochart\" && this.library.visualization.GeoChart));\n    if (call) {\n      cb.callback();\n      callbacks.splice(i, 1);\n      i--;\n    }\n  }\n};\n\n// cant use object as key\ndefaultExport.prototype.createDataTable = function createDataTable (series, columnType) {\n  var rows = [];\n  var sortedLabels = [];\n  for (var i = 0; i < series.length; i++) {\n    var s = series[i];\n    series[i].name = series[i].name || \"Value\";\n\n    for (var j = 0; j < s.data.length; j++) {\n      var d = s.data[j];\n      var key = columnType === \"datetime\" ? d[0].getTime() : d[0];\n      if (!rows[key]) {\n        rows[key] = new Array(series.length);\n        sortedLabels.push(key);\n      }\n      rows[key][i] = d[1];\n    }\n  }\n\n  var rows2 = [];\n  var values = [];\n  for (var j$1 = 0; j$1 < sortedLabels.length; j$1++) {\n    var i$1 = sortedLabels[j$1];\n    var value = (void 0);\n    if (columnType === \"datetime\") {\n      value = new Date(i$1);\n      values.push(value);\n    } else {\n      value = i$1;\n    }\n    rows2.push([value].concat(rows[i$1]));\n  }\n\n  var day = true;\n  if (columnType === \"datetime\") {\n    rows2.sort(sortByTime);\n\n    var timeUnit = calculateTimeUnit(values, true);\n    day = isDay(timeUnit);\n  } else if (columnType === \"number\") {\n    rows2.sort(sortByNumberSeries);\n\n    for (var i$2 = 0; i$2 < rows2.length; i$2++) {\n      rows2[i$2][0] = toStr(rows2[i$2][0]);\n    }\n\n    columnType = \"string\";\n  }\n\n  // create datatable\n  var data = new this.library.visualization.DataTable();\n  columnType = columnType === \"datetime\" && day ? \"date\" : columnType;\n  data.addColumn(columnType, \"\");\n  for (var i$3 = 0; i$3 < series.length; i$3++) {\n    data.addColumn(\"number\", series[i$3].name);\n  }\n  data.addRows(rows2);\n\n  return data;\n};\n\nvar adapters = [];\n\nfunction getAdapterType(library) {\n  if (library) {\n    if (library.product === \"Highcharts\") {\n      return defaultExport$1;\n    } else if (library.charts) {\n      return defaultExport;\n    } else if (isFunction(library)) {\n      return defaultExport$2;\n    }\n  }\n  throw new Error(\"Unknown adapter\");\n}\n\nfunction addAdapter(library) {\n  var adapterType = getAdapterType(library);\n\n  for (var i = 0; i < adapters.length; i++) {\n    if (adapters[i].library === library) {\n      return;\n    }\n  }\n\n  adapters.push(new adapterType(library));\n}\n\nfunction loadAdapters() {\n  if (\"Chart\" in window) {\n    addAdapter(window.Chart);\n  }\n\n  if (\"Highcharts\" in window) {\n    addAdapter(window.Highcharts);\n  }\n\n  if (window.google && window.google.charts) {\n    addAdapter(window.google);\n  }\n}\n\n// TODO remove chartType if cross-browser way\n// to get the name of the chart class\nfunction callAdapter(chartType, chart) {\n  var fnName = \"render\" + chartType;\n  var adapterName = chart.options.adapter;\n\n  loadAdapters();\n\n  for (var i = 0; i < adapters.length; i++) {\n    var adapter = adapters[i];\n    if ((!adapterName || adapterName === adapter.name) && isFunction(adapter[fnName])) {\n      chart.adapter = adapter.name;\n      chart.__adapterObject = adapter;\n      return adapter[fnName](chart);\n    }\n  }\n\n  if (adapters.length > 0) {\n    throw new Error(\"No charting library found for \" + chartType);\n  } else {\n    throw new Error(\"No charting libraries found - be sure to include one before your charts\");\n  }\n}\n\nvar Chartkick = {\n  charts: {},\n  configure: function (options) {\n    for (var key in options) {\n      if (Object.prototype.hasOwnProperty.call(options, key)) {\n        Chartkick.config[key] = options[key];\n      }\n    }\n  },\n  setDefaultOptions: function (opts) {\n    Chartkick.options = opts;\n  },\n  eachChart: function (callback) {\n    for (var chartId in Chartkick.charts) {\n      if (Object.prototype.hasOwnProperty.call(Chartkick.charts, chartId)) {\n        callback(Chartkick.charts[chartId]);\n      }\n    }\n  },\n  destroyAll: function () {\n    for (var chartId in Chartkick.charts) {\n      if (Object.prototype.hasOwnProperty.call(Chartkick.charts, chartId)) {\n        Chartkick.charts[chartId].destroy();\n        delete Chartkick.charts[chartId];\n      }\n    }\n  },\n  config: {},\n  options: {},\n  adapters: adapters,\n  addAdapter: addAdapter,\n  use: function (adapter) {\n    addAdapter(adapter);\n    return Chartkick;\n  }\n};\n\nfunction formatSeriesBubble(data) {\n  var r = [];\n  for (var i = 0; i < data.length; i++) {\n    r.push([toFloat(data[i][0]), toFloat(data[i][1]), toFloat(data[i][2])]);\n  }\n  return r;\n}\n\n// casts data to proper type\n// sorting is left to adapters\nfunction formatSeriesData(data, keyType) {\n  if (keyType === \"bubble\") {\n    return formatSeriesBubble(data);\n  }\n\n  var keyFunc;\n  if (keyType === \"number\") {\n    keyFunc = toFloat;\n  } else if (keyType === \"datetime\") {\n    keyFunc = toDate;\n  } else {\n    keyFunc = toStr;\n  }\n\n  var r = [];\n  for (var i = 0; i < data.length; i++) {\n    r.push([keyFunc(data[i][0]), toFloat(data[i][1])]);\n  }\n  return r;\n}\n\nfunction detectXType(series, noDatetime, options) {\n  if (dataEmpty(series)) {\n    if ((options.xmin || options.xmax) && (!options.xmin || isDate(options.xmin)) && (!options.xmax || isDate(options.xmax))) {\n      return \"datetime\";\n    } else {\n      return \"number\";\n    }\n  } else if (detectXTypeWithFunction(series, isNumber)) {\n    return \"number\";\n  } else if (!noDatetime && detectXTypeWithFunction(series, isDate)) {\n    return \"datetime\";\n  } else {\n    return \"string\";\n  }\n}\n\nfunction detectXTypeWithFunction(series, func) {\n  for (var i = 0; i < series.length; i++) {\n    var data = toArr(series[i].data);\n    for (var j = 0; j < data.length; j++) {\n      if (!func(data[j][0])) {\n        return false;\n      }\n    }\n  }\n  return true;\n}\n\n// creates a shallow copy of each element of the array\n// elements are expected to be objects\nfunction copySeries(series) {\n  var newSeries = [];\n  for (var i = 0; i < series.length; i++) {\n    var copy = {};\n    for (var j in series[i]) {\n      if (Object.prototype.hasOwnProperty.call(series[i], j)) {\n        copy[j] = series[i][j];\n      }\n    }\n    newSeries.push(copy);\n  }\n  return newSeries;\n}\n\nfunction processSeries(chart, keyType, noDatetime) {\n  var opts = chart.options;\n  var series = chart.rawData;\n\n  // see if one series or multiple\n  chart.singleSeriesFormat = !isArray(series) || !isPlainObject(series[0]);\n  if (chart.singleSeriesFormat) {\n    series = [{name: opts.label, data: series}];\n  }\n\n  // convert to array\n  // must come before dataEmpty check\n  series = copySeries(series);\n  for (var i = 0; i < series.length; i++) {\n    series[i].data = toArr(series[i].data);\n  }\n\n  chart.xtype = keyType || (opts.discrete ? \"string\" : detectXType(series, noDatetime, opts));\n\n  // right format\n  for (var i$1 = 0; i$1 < series.length; i$1++) {\n    series[i$1].data = formatSeriesData(series[i$1].data, chart.xtype);\n  }\n\n  return series;\n}\n\nfunction processSimple(chart) {\n  var perfectData = toArr(chart.rawData);\n  for (var i = 0; i < perfectData.length; i++) {\n    perfectData[i] = [toStr(perfectData[i][0]), toFloat(perfectData[i][1])];\n  }\n  return perfectData;\n}\n\nfunction dataEmpty(data, chartType) {\n  if (chartType === \"PieChart\" || chartType === \"GeoChart\" || chartType === \"Timeline\") {\n    return data.length === 0;\n  } else {\n    for (var i = 0; i < data.length; i++) {\n      if (data[i].data.length > 0) {\n        return false;\n      }\n    }\n    return true;\n  }\n}\n\nfunction addDownloadButton(chart) {\n  var download = chart.options.download;\n  if (download === true) {\n    download = {};\n  } else if (typeof download === \"string\") {\n    download = {filename: download};\n  }\n\n  var link = document.createElement(\"a\");\n  link.download = download.filename || \"chart.png\";\n  link.style.position = \"absolute\";\n  link.style.top = \"20px\";\n  link.style.right = \"20px\";\n  link.style.zIndex = 1000;\n  link.style.lineHeight = \"20px\";\n  link.target = \"_blank\"; // for safari\n\n  var image = document.createElement(\"img\");\n  // icon from Font Awesome, modified to set fill color\n  var svg = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><!--! Font Awesome Free 6.2.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path fill=\\\"#CCCCCC\\\" d=\\\"M344 240h-56L287.1 152c0-13.25-10.75-24-24-24h-16C234.7 128 223.1 138.8 223.1 152L224 240h-56c-9.531 0-18.16 5.656-22 14.38C142.2 263.1 143.9 273.3 150.4 280.3l88.75 96C243.7 381.2 250.1 384 256.8 384c7.781-.3125 13.25-2.875 17.75-7.844l87.25-96c6.406-7.031 8.031-17.19 4.188-25.88S353.5 240 344 240zM256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 464c-114.7 0-208-93.31-208-208S141.3 48 256 48s208 93.31 208 208S370.7 464 256 464z\\\"/></svg>\";\n  image.src = \"data:image/svg+xml;utf8,\" + (encodeURIComponent(svg));\n  image.alt = \"Download\";\n  image.style.width = \"20px\";\n  image.style.height = \"20px\";\n  image.style.border = \"none\";\n  link.appendChild(image);\n\n  var element = chart.element;\n  element.style.position = \"relative\";\n\n  chart.__downloadAttached = true;\n\n  // mouseenter\n  chart.__enterEvent = element.addEventListener(\"mouseover\", function (e) {\n    var related = e.relatedTarget;\n    // check download option again to ensure it wasn't changed\n    if ((!related || (related !== this && !this.contains(related))) && chart.options.download) {\n      link.href = chart.toImage(download);\n      element.appendChild(link);\n    }\n  });\n\n  // mouseleave\n  chart.__leaveEvent = element.addEventListener(\"mouseout\", function (e) {\n    var related = e.relatedTarget;\n    if (!related || (related !== this && !this.contains(related))) {\n      if (link.parentNode) {\n        link.parentNode.removeChild(link);\n      }\n    }\n  });\n}\n\nvar pendingRequests = [];\nvar runningRequests = 0;\nvar maxRequests = 4;\n\nfunction pushRequest(url, success, error) {\n  pendingRequests.push([url, success, error]);\n  runNext();\n}\n\nfunction runNext() {\n  if (runningRequests < maxRequests) {\n    var request = pendingRequests.shift();\n    if (request) {\n      runningRequests++;\n      getJSON(request[0], request[1], request[2]);\n      runNext();\n    }\n  }\n}\n\nfunction requestComplete() {\n  runningRequests--;\n  runNext();\n}\n\nfunction getJSON(url, success, error) {\n  var xhr = new XMLHttpRequest();\n  xhr.open(\"GET\", url, true);\n  xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n  xhr.onload = function () {\n    requestComplete();\n    if (xhr.status === 200) {\n      success(JSON.parse(xhr.responseText));\n    } else {\n      error(xhr.statusText);\n    }\n  };\n  xhr.send();\n}\n\n// helpers\n\nfunction setText(element, text) {\n  element.textContent = text;\n}\n\n// TODO remove prefix for all messages\nfunction chartError(element, message, noPrefix) {\n  if (!noPrefix) {\n    message = \"Error Loading Chart: \" + message;\n  }\n  setText(element, message);\n  element.style.color = \"#ff0000\";\n}\n\nfunction errorCatcher(chart) {\n  try {\n    chart.__render();\n  } catch (err) {\n    chartError(chart.element, err.message);\n    throw err;\n  }\n}\n\nfunction fetchDataSource(chart, dataSource, showLoading) {\n  // only show loading message for urls and callbacks\n  if (showLoading && chart.options.loading && (typeof dataSource === \"string\" || typeof dataSource === \"function\")) {\n    setText(chart.element, chart.options.loading);\n  }\n\n  if (typeof dataSource === \"string\") {\n    pushRequest(dataSource, function (data) {\n      chart.rawData = data;\n      errorCatcher(chart);\n    }, function (message) {\n      chartError(chart.element, message);\n    });\n  } else if (typeof dataSource === \"function\") {\n    try {\n      dataSource(function (data) {\n        chart.rawData = data;\n        errorCatcher(chart);\n      }, function (message) {\n        chartError(chart.element, message, true);\n      });\n    } catch (err) {\n      chartError(chart.element, err, true);\n    }\n  } else {\n    chart.rawData = dataSource;\n    errorCatcher(chart);\n  }\n}\n\nfunction renderChart(chartType, chart) {\n  if (dataEmpty(chart.data, chartType)) {\n    var message = chart.options.empty || (chart.options.messages && chart.options.messages.empty) || \"No data\";\n    setText(chart.element, message);\n  } else {\n    callAdapter(chartType, chart);\n    // TODO add downloadSupported method to adapter\n    if (chart.options.download && !chart.__downloadAttached && chart.adapter === \"chartjs\") {\n      addDownloadButton(chart);\n    }\n  }\n}\n\nfunction getElement(element) {\n  if (typeof element === \"string\") {\n    var elementId = element;\n    element = document.getElementById(element);\n    if (!element) {\n      throw new Error(\"No element with id \" + elementId);\n    }\n  }\n  return element;\n}\n\n// define classes\n\nvar Chart = function Chart(element, dataSource, options) {\n  this.element = getElement(element);\n  this.options = merge(Chartkick.options, options || {});\n  this.dataSource = dataSource;\n\n  // TODO handle charts without an id for eachChart and destroyAll\n  if (this.element.id) {\n    Chartkick.charts[this.element.id] = this;\n  }\n\n  fetchDataSource(this, dataSource, true);\n\n  if (this.options.refresh) {\n    this.startRefresh();\n  }\n};\n\nChart.prototype.getElement = function getElement () {\n  return this.element;\n};\n\nChart.prototype.getDataSource = function getDataSource () {\n  return this.dataSource;\n};\n\nChart.prototype.getData = function getData () {\n  return this.data;\n};\n\nChart.prototype.getOptions = function getOptions () {\n  return this.options;\n};\n\nChart.prototype.getChartObject = function getChartObject () {\n  return this.chart;\n};\n\nChart.prototype.getAdapter = function getAdapter () {\n  return this.adapter;\n};\n\nChart.prototype.updateData = function updateData (dataSource, options) {\n  this.dataSource = dataSource;\n  if (options) {\n    this.__updateOptions(options);\n  }\n  fetchDataSource(this, dataSource, true);\n};\n\nChart.prototype.setOptions = function setOptions (options) {\n  this.__updateOptions(options);\n  this.redraw();\n};\n\nChart.prototype.redraw = function redraw () {\n  fetchDataSource(this, this.rawData);\n};\n\nChart.prototype.refreshData = function refreshData () {\n  if (typeof this.dataSource === \"string\") {\n    // prevent browser from caching\n    var sep = this.dataSource.indexOf(\"?\") === -1 ? \"?\" : \"&\";\n    var url = this.dataSource + sep + \"_=\" + (new Date()).getTime();\n    fetchDataSource(this, url);\n  } else if (typeof this.dataSource === \"function\") {\n    fetchDataSource(this, this.dataSource);\n  }\n};\n\nChart.prototype.startRefresh = function startRefresh () {\n    var this$1$1 = this;\n\n  var refresh = this.options.refresh;\n\n  if (refresh && typeof this.dataSource !== \"string\" && typeof this.dataSource !== \"function\") {\n    throw new Error(\"Data source must be a URL or callback for refresh\");\n  }\n\n  if (!this.intervalId) {\n    if (refresh) {\n      this.intervalId = setInterval(function () {\n        this$1$1.refreshData();\n      }, refresh * 1000);\n    } else {\n      throw new Error(\"No refresh interval\");\n    }\n  }\n};\n\nChart.prototype.stopRefresh = function stopRefresh () {\n  if (this.intervalId) {\n    clearInterval(this.intervalId);\n    this.intervalId = null;\n  }\n};\n\nChart.prototype.toImage = function toImage (download) {\n  // TODO move logic to adapter\n  if (this.adapter === \"chartjs\") {\n    if (download && download.background && download.background !== \"transparent\") {\n      // https://stackoverflow.com/questions/30464750/chartjs-line-chart-set-background-color\n      var canvas = this.chart.canvas;\n      var ctx = this.chart.ctx;\n      var tmpCanvas = document.createElement(\"canvas\");\n      var tmpCtx = tmpCanvas.getContext(\"2d\");\n      tmpCanvas.width = ctx.canvas.width;\n      tmpCanvas.height = ctx.canvas.height;\n      tmpCtx.fillStyle = download.background;\n      tmpCtx.fillRect(0, 0, tmpCanvas.width, tmpCanvas.height);\n      tmpCtx.drawImage(canvas, 0, 0);\n      return tmpCanvas.toDataURL(\"image/png\");\n    } else {\n      return this.chart.toBase64Image();\n    }\n  } else {\n    throw new Error(\"Feature only available for Chart.js\");\n  }\n};\n\nChart.prototype.destroy = function destroy () {\n  this.destroyed = true;\n  this.stopRefresh();\n\n  if (this.__adapterObject) {\n    this.__adapterObject.destroy(this);\n  }\n\n  if (this.__enterEvent) {\n    this.element.removeEventListener(\"mouseover\", this.__enterEvent);\n  }\n\n  if (this.__leaveEvent) {\n    this.element.removeEventListener(\"mouseout\", this.__leaveEvent);\n  }\n};\n\nChart.prototype.__updateOptions = function __updateOptions (options) {\n  var updateRefresh = options.refresh && options.refresh !== this.options.refresh;\n  this.options = merge(Chartkick.options, options);\n  if (updateRefresh) {\n    this.stopRefresh();\n    this.startRefresh();\n  }\n};\n\nChart.prototype.__render = function __render () {\n  this.data = this.__processData();\n  renderChart(this.__chartName(), this);\n};\n\nChart.prototype.__config = function __config () {\n  return Chartkick.config;\n};\n\nvar LineChart = /*@__PURE__*/(function (Chart) {\n  function LineChart () {\n    Chart.apply(this, arguments);\n  }\n\n  if ( Chart ) LineChart.__proto__ = Chart;\n  LineChart.prototype = Object.create( Chart && Chart.prototype );\n  LineChart.prototype.constructor = LineChart;\n\n  LineChart.prototype.__processData = function __processData () {\n    return processSeries(this);\n  };\n\n  LineChart.prototype.__chartName = function __chartName () {\n    return \"LineChart\";\n  };\n\n  return LineChart;\n}(Chart));\n\nvar PieChart = /*@__PURE__*/(function (Chart) {\n  function PieChart () {\n    Chart.apply(this, arguments);\n  }\n\n  if ( Chart ) PieChart.__proto__ = Chart;\n  PieChart.prototype = Object.create( Chart && Chart.prototype );\n  PieChart.prototype.constructor = PieChart;\n\n  PieChart.prototype.__processData = function __processData () {\n    return processSimple(this);\n  };\n\n  PieChart.prototype.__chartName = function __chartName () {\n    return \"PieChart\";\n  };\n\n  return PieChart;\n}(Chart));\n\nvar ColumnChart = /*@__PURE__*/(function (Chart) {\n  function ColumnChart () {\n    Chart.apply(this, arguments);\n  }\n\n  if ( Chart ) ColumnChart.__proto__ = Chart;\n  ColumnChart.prototype = Object.create( Chart && Chart.prototype );\n  ColumnChart.prototype.constructor = ColumnChart;\n\n  ColumnChart.prototype.__processData = function __processData () {\n    return processSeries(this, null, true);\n  };\n\n  ColumnChart.prototype.__chartName = function __chartName () {\n    return \"ColumnChart\";\n  };\n\n  return ColumnChart;\n}(Chart));\n\nvar BarChart = /*@__PURE__*/(function (Chart) {\n  function BarChart () {\n    Chart.apply(this, arguments);\n  }\n\n  if ( Chart ) BarChart.__proto__ = Chart;\n  BarChart.prototype = Object.create( Chart && Chart.prototype );\n  BarChart.prototype.constructor = BarChart;\n\n  BarChart.prototype.__processData = function __processData () {\n    return processSeries(this, null, true);\n  };\n\n  BarChart.prototype.__chartName = function __chartName () {\n    return \"BarChart\";\n  };\n\n  return BarChart;\n}(Chart));\n\nvar AreaChart = /*@__PURE__*/(function (Chart) {\n  function AreaChart () {\n    Chart.apply(this, arguments);\n  }\n\n  if ( Chart ) AreaChart.__proto__ = Chart;\n  AreaChart.prototype = Object.create( Chart && Chart.prototype );\n  AreaChart.prototype.constructor = AreaChart;\n\n  AreaChart.prototype.__processData = function __processData () {\n    return processSeries(this);\n  };\n\n  AreaChart.prototype.__chartName = function __chartName () {\n    return \"AreaChart\";\n  };\n\n  return AreaChart;\n}(Chart));\n\nvar GeoChart = /*@__PURE__*/(function (Chart) {\n  function GeoChart () {\n    Chart.apply(this, arguments);\n  }\n\n  if ( Chart ) GeoChart.__proto__ = Chart;\n  GeoChart.prototype = Object.create( Chart && Chart.prototype );\n  GeoChart.prototype.constructor = GeoChart;\n\n  GeoChart.prototype.__processData = function __processData () {\n    return processSimple(this);\n  };\n\n  GeoChart.prototype.__chartName = function __chartName () {\n    return \"GeoChart\";\n  };\n\n  return GeoChart;\n}(Chart));\n\nvar ScatterChart = /*@__PURE__*/(function (Chart) {\n  function ScatterChart () {\n    Chart.apply(this, arguments);\n  }\n\n  if ( Chart ) ScatterChart.__proto__ = Chart;\n  ScatterChart.prototype = Object.create( Chart && Chart.prototype );\n  ScatterChart.prototype.constructor = ScatterChart;\n\n  ScatterChart.prototype.__processData = function __processData () {\n    return processSeries(this, \"number\");\n  };\n\n  ScatterChart.prototype.__chartName = function __chartName () {\n    return \"ScatterChart\";\n  };\n\n  return ScatterChart;\n}(Chart));\n\nvar BubbleChart = /*@__PURE__*/(function (Chart) {\n  function BubbleChart () {\n    Chart.apply(this, arguments);\n  }\n\n  if ( Chart ) BubbleChart.__proto__ = Chart;\n  BubbleChart.prototype = Object.create( Chart && Chart.prototype );\n  BubbleChart.prototype.constructor = BubbleChart;\n\n  BubbleChart.prototype.__processData = function __processData () {\n    return processSeries(this, \"bubble\");\n  };\n\n  BubbleChart.prototype.__chartName = function __chartName () {\n    return \"BubbleChart\";\n  };\n\n  return BubbleChart;\n}(Chart));\n\nvar Timeline = /*@__PURE__*/(function (Chart) {\n  function Timeline () {\n    Chart.apply(this, arguments);\n  }\n\n  if ( Chart ) Timeline.__proto__ = Chart;\n  Timeline.prototype = Object.create( Chart && Chart.prototype );\n  Timeline.prototype.constructor = Timeline;\n\n  Timeline.prototype.__processData = function __processData () {\n    var data = this.rawData;\n    for (var i = 0; i < data.length; i++) {\n      data[i][1] = toDate(data[i][1]);\n      data[i][2] = toDate(data[i][2]);\n    }\n    return data;\n  };\n\n  Timeline.prototype.__chartName = function __chartName () {\n    return \"Timeline\";\n  };\n\n  return Timeline;\n}(Chart));\n\nChartkick.LineChart = LineChart;\nChartkick.PieChart = PieChart;\nChartkick.ColumnChart = ColumnChart;\nChartkick.BarChart = BarChart;\nChartkick.AreaChart = AreaChart;\nChartkick.GeoChart = GeoChart;\nChartkick.ScatterChart = ScatterChart;\nChartkick.BubbleChart = BubbleChart;\nChartkick.Timeline = Timeline;\n\n// not ideal, but allows for simpler integration\nif (typeof window !== \"undefined\" && !window.Chartkick) {\n  window.Chartkick = Chartkick;\n\n  // clean up previous charts before Turbolinks loads new page\n  document.addEventListener(\"turbolinks:before-render\", function () {\n    if (Chartkick.config.autoDestroy !== false) {\n      Chartkick.destroyAll();\n    }\n  });\n\n  // clean up previous charts before Turbo loads new page\n  document.addEventListener(\"turbo:before-render\", function () {\n    if (Chartkick.config.autoDestroy !== false) {\n      Chartkick.destroyAll();\n    }\n  });\n\n  // use setTimeout so charting library can come later in same JS file\n  setTimeout(function () {\n    window.dispatchEvent(new Event(\"chartkick:load\"));\n  }, 0);\n}\n\n// backwards compatibility for esm require\nChartkick.default = Chartkick;\n\nexport { Chartkick as default };\n","import widgets from 'widjet';\nimport {queue} from '../utils/animations';\n\nwidgets.define('animation-queue', (options) => (el) => {\n  const animations = JSON.parse(el.dataset.animations);\n  let repeat = parseInt(el.dataset.animationRepeat, 10);\n\n  if(isNaN(repeat)) { repeat = 0; }\n  if(repeat < 0) { repeat = Number.POSITIVE_INFINITY; }\n\n  queue(el, animations, repeat);\n});\n","import widgets from 'widjet';\nimport {getNode} from 'widjet-utils';\nimport {DisposableEvent} from 'widjet-disposables';\n\nwidgets.define('remote-form', (options) => (el) => {\n  const method = el.method;\n  const action = el.action;\n\n  const onError = (data) => {\n    if (data.errors != null) {\n      for (let k in data.errors) {\n        const v = data.errors[k];\n        el.parentNode.insertBefore(getNode(`\\\n<span class='alert alert-danger alert-dismissible'>\n  <button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>\n  ${v}\n</span>\\\n`));\n      }\n    }\n  };\n\n  return new DisposableEvent(el, 'submit', (e) => {\n    e.preventDefault();\n    e.stopPropagation();\n\n    const handleSuccess = window[el.dataset.handleSuccess];\n    const handleError = window[el.dataset.handleError];\n\n    const alert = el.parentNode.querySelector('.alert')\n    if(alert) { alert.remove(); }\n\n    el.classList.add('loading');\n\n    const formData = new FormData(el);\n    const body = {};\n\n    for(let e of formData.entries()) {\n      body[e[0]] = e[1] == '1';\n    }\n\n    const options = {\n      method,\n      body: JSON.stringify(body),\n      headers: {\n        'Content-Type': 'application/json',\n        'Accept': 'application/json',\n        'X-CSRF-Token': document.querySelector('meta[name=\"csrf-token\"]').content,\n      },\n    };\n\n    return fetch(action, options)\n    .then((res) => res.json())\n    .then((res) => {\n      handleSuccess && handleSuccess(res);\n      el.classList.remove('loading');\n    })\n    .catch((err) => handleError && handleError(err));\n  });\n});\n","import widgets from 'widjet';\nimport {getNode} from 'widjet-utils';\nimport {DisposableEvent} from 'widjet-disposables';\n\nwidgets.define('remote-link', (options) => (el) => {\n  const method = el.dataset.method;\n  const body = el.dataset.body ? el.dataset.body : '';\n  const url = el.getAttribute('href');\n\n  const onError = (data) => {\n    if (data.errors != null) {\n      for (let k in data.errors) {\n        const v = data.errors[k];\n        el.parentNode.insertBefore(getNode(`\\\n<span class='alert alert-danger alert-dismissible'>\n  <button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>\n  ${v}\n</span>\\\n`));\n      }\n    }\n  };\n\n  return new DisposableEvent(el, 'click', (e) => {\n    e.preventDefault();\n    e.stopPropagation();\n\n    const handleSuccess = window[el.dataset.handleSuccess];\n    const handleError = window[el.dataset.handleError];\n\n    const alert = el.parentNode.querySelector('.alert')\n    if(alert) { alert.remove(); }\n\n    el.classList.add('loading');\n\n    const options = {\n      method,\n      headers: {\n        'Content-Type': 'application/json',\n        'Accept': 'application/json',\n        'X-CSRF-Token': document.querySelector('meta[name=\"csrf-token\"]').content,\n      },\n    };\n\n    if(method != 'get') {\n      options.body = body\n    }\n\n    return fetch(url, options)\n    .then((res) => res.json())\n    .then((res) => {\n      handleSuccess && handleSuccess(res, el);\n      el.classList.remove('loading');\n    })\n    .catch((err) => handleError && handleError(err, el));\n  });\n});\n","import widgets from 'widjet';\n\n// Must match the md breakpoint, under which the mobile video is used\nconst MOBILE_QUERY = '(max-width: 767.98px)';\n\n// Background video of the home game block: plays the desktop (data-src) or\n// mobile (data-src-mobile) video depending on the screen width, so only the\n// displayed one is downloaded, and switches when crossing the breakpoint.\n// With no video for the current width, the block falls back to its\n// background image. The block takes the video's own ratio (--video-ratio).\nwidgets.define('background-video', () => (video) => {\n  const block = video.parentNode;\n  const mobile = window.matchMedia(MOBILE_QUERY);\n\n  const useBackgroundImage = (enabled) => {\n    block.classList.toggle('game--with-video', !enabled);\n    block.classList.toggle('bg-main--play', enabled);\n    block.style.backgroundImage = enabled && block.dataset.background ? `url(${block.dataset.background})` : '';\n    video.hidden = enabled;\n  };\n\n  const update = () => {\n    const src = mobile.matches ? video.dataset.srcMobile : video.dataset.src;\n\n    if (!src) {\n      video.pause();\n      video.removeAttribute('src');\n      video.load();\n      useBackgroundImage(true);\n      return;\n    }\n\n    useBackgroundImage(false);\n\n    if (video.getAttribute('src') !== src) {\n      block.style.removeProperty('--video-ratio');\n      video.src = src;\n      video.play().catch(() => {});\n    }\n  };\n\n  video.addEventListener('loadedmetadata', () => {\n    block.style.setProperty('--video-ratio', `${video.videoWidth} / ${video.videoHeight}`);\n  });\n\n  mobile.addEventListener('change', update);\n  update();\n});\n","/* eslint no-console:0 */\n// This file is automatically compiled by Webpack, along with any other files\n// present in this directory. You're encouraged to place your actual application logic in\n// a relevant structure within app/javascript and only use these pack files to reference\n// that code so it'll be compiled.\n//\n// To reference this file, add <%= javascript_include_tag 'application' %> to the appropriate\n// layout file, like app/views/layouts/application.html.erb\n\n\n// Uncomment to copy all static images under ../images to the output folder and reference\n// them with the image_pack_tag helper in views (e.g <%= image_pack_tag 'rails.png' %>)\n// or the `imagePath` JavaScript helper below.\n//\n// const images = require.context('../images', true)\n// const imagePath = (name) => images(name, true)\n\nimport FastClick from '../../../vendor/assets/javascripts/fastclick';\nFastClick.attach(document.body);\n\nimport Rails from '@rails/ujs';\nRails.start();\n\nimport I18n from '../js/utils/i18n';\nI18n.attachToWindow();\n\nimport widgets from 'widjet';\nimport {merge, parent} from 'widjet-utils';\nimport Bootstrap from 'bootstrap/dist/js/bootstrap.js';\nimport 'widjet-validation';\nimport VALIDATION_OPTIONS from '../js/widgets/validation';\nimport '../js/widgets/animations';\nimport '../js/widgets/remote-form';\nimport '../js/widgets/remote-link';\nimport '../js/widgets/background-video';\nimport {scrollToTop} from '../js/utils/scroll-top';\nimport 'chartkick';\n\nwindow.Bootstrap = Bootstrap;\n\nconst isMobile = () => window.innerWidth < 992;\nconst isInTemplate = el => parent(el, '.tpl') != null;\nconst isMobileOrInTemplate = el => isMobile() || isInTemplate(el);\n\nconst DEFAULT_EVENTS = 'init load page:load turbolinks:load nested:fieldAdded json-form:ready';\n\n// Mobile: every page starts at the top, instead of keeping the scroll position\n// the visitor had before (e.g. the footer of the previous page)\nif (isMobile()) {\n  try { window.history.scrollRestoration = 'manual'; } catch (e) { /* not supported */ }\n  scrollToTop();\n  window.addEventListener('pageshow', scrollToTop);\n}\n\nconst DEFAULT_CONFIG = () => ({\n  on: DEFAULT_EVENTS,\n  unless: isInTemplate,\n});\n\nwidgets('remote-link', '.remote-link', DEFAULT_CONFIG());\nwidgets('remote-form', 'form.remote-form', DEFAULT_CONFIG());\n\nwidgets('live-validation', 'input, select, textarea', merge({\n  events: 'input change blur',\n  inputBuffer: 500,\n}, merge(DEFAULT_CONFIG(), VALIDATION_OPTIONS)));\nwidgets('form-validation', 'form', merge(DEFAULT_CONFIG(), VALIDATION_OPTIONS));\nwidgets('animation-queue', '[data-animations]', DEFAULT_CONFIG());\nwidgets('background-video', 'video[data-background-video]', DEFAULT_CONFIG());\n\ndocument.addEventListener('DOMContentLoaded', (e) => {\n  FastClick.attach(document.body);\n});"],"names":["bottom","right","left","auto","basePlacements","start","end","clippingParents","viewport","popper","reference","variationPlacements","reduce","acc","placement","concat","beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite","modifierPhases","getNodeName","element","nodeName","toLowerCase","getWindow","node","window","toString","ownerDocument","defaultView","isElement","Element","isHTMLElement","HTMLElement","isShadowRoot","ShadowRoot","name","enabled","phase","fn","_ref","state","Object","keys","elements","forEach","style","styles","attributes","assign","value","removeAttribute","setAttribute","effect","_ref2","initialStyles","position","options","strategy","top","margin","arrow","hasOwnProperty","property","attribute","requires","getBasePlacement","split","Math","max","min","round","getBoundingClientRect","includeScale","rect","scaleX","scaleY","offsetHeight","offsetWidth","width","height","x","y","getLayoutRect","clientRect","abs","offsetLeft","offsetTop","contains","parent","child","rootNode","getRootNode","next","isSameNode","parentNode","host","getComputedStyle","isTableElement","indexOf","getDocumentElement","document","documentElement","getParentNode","assignedSlot","getTrueOffsetParent","offsetParent","getOffsetParent","isFirefox","navigator","userAgent","currentNode","css","transform","perspective","contain","willChange","filter","getContainingBlock","getMainAxisFromPlacement","within","mergePaddingObject","paddingObject","expandToHashMap","hashMap","key","_state$modifiersData$","arrowElement","popperOffsets","modifiersData","basePlacement","axis","len","padding","rects","toPaddingObject","arrowRect","minProp","maxProp","endDiff","startDiff","arrowOffsetParent","clientSize","clientHeight","clientWidth","centerToReference","center","offset","axisProp","centerOffset","_options$element","querySelector","requiresIfExists","getVariation","unsetSides","mapToStyles","_Object$assign2","popperRect","variation","offsets","gpuAcceleration","adaptive","roundOffsets","isFixed","_offsets$x","_offsets$y","_ref3","hasX","hasY","sideX","sideY","win","heightProp","widthProp","visualViewport","_Object$assign","commonStyles","_ref4","dpr","devicePixelRatio","roundOffsetsByDPR","_ref5","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","data","passive","instance","_options$scroll","scroll","_options$resize","resize","scrollParents","scrollParent","addEventListener","update","removeEventListener","hash","getOppositePlacement","replace","matched","getOppositeVariationPlacement","getWindowScroll","scrollLeft","pageXOffset","scrollTop","pageYOffset","getWindowScrollBarX","isScrollParent","_getComputedStyle","overflow","overflowX","overflowY","test","getScrollParent","body","listScrollParents","list","_element$ownerDocumen","isBody","target","updatedList","rectToClientRect","getClientRectFromMixedType","clippingParent","html","getViewportRect","clientTop","clientLeft","getInnerBoundingClientRect","winScroll","scrollWidth","scrollHeight","direction","getDocumentRect","computeOffsets","commonX","commonY","mainAxis","detectOverflow","_options","_options$placement","_options$boundary","boundary","_options$rootBoundary","rootBoundary","_options$elementConte","elementContext","_options$altBoundary","altBoundary","_options$padding","altContext","clippingClientRect","mainClippingParents","clipperElement","getClippingParents","firstClippingParent","clippingRect","accRect","getClippingRect","contextElement","referenceClientRect","popperClientRect","elementClientRect","overflowOffsets","offsetData","multiply","_skip","_options$mainAxis","checkMainAxis","_options$altAxis","altAxis","checkAltAxis","specifiedFallbackPlacements","fallbackPlacements","_options$flipVariatio","flipVariations","allowedAutoPlacements","preferredPlacement","oppositePlacement","getExpandedFallbackPlacements","placements","_options$allowedAutoP","allowedPlacements","length","overflows","sort","a","b","computeAutoPlacement","referenceRect","checksMap","Map","makeFallbackChecks","firstFittingPlacement","i","_basePlacement","isStartVariation","isVertical","mainVariationSide","altVariationSide","checks","push","every","check","set","_loop","_i","fittingPlacement","find","get","slice","reset","getSideOffsets","preventedOffsets","isAnySideFullyClipped","some","side","preventOverflow","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","_options$offset","invertDistance","skidding","distance","distanceAndSkiddingToXY","_data$state$placement","_options$tether","tether","_options$tetherOffset","tetherOffset","isBasePlacement","tetherOffsetValue","normalizedTetherOffsetValue","offsetModifierState","_offsetModifierState$","mainSide","altSide","additive","minLen","maxLen","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","clientOffset","offsetModifierValue","tetherMax","preventedOffset","_offsetModifierState$2","_mainSide","_altSide","_offset","_len","_min","_max","isOriginSide","_offsetModifierValue","_tetherMin","_tetherMax","_preventedOffset","v","withinMaxClamp","getCompositeRect","elementOrVirtualElement","isOffsetParentAnElement","offsetParentIsScaled","isElementScaled","order","modifiers","map","visited","Set","result","modifier","add","dep","has","depModifier","DEFAULT_OPTIONS","areValidElements","arguments","args","Array","_key","popperGenerator","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","defaultOptions","pending","orderedModifiers","effectCleanupFns","isDestroyed","setOptions","setOptionsAction","cleanupModifierEffects","merged","orderModifiers","current","existing","m","_ref3$options","cleanupFn","forceUpdate","_state$elements","index","_state$orderedModifie","_state$orderedModifie2","Promise","resolve","then","undefined","destroy","onFirstUpdate","createPopper","eventListeners","this","Rails","linkClickSelector","buttonClickSelector","selector","exclude","inputChangeSelector","formSubmitSelector","formInputClickSelector","formDisableSelector","formEnableSelector","fileInputSelector","linkDisableSelector","buttonDisableSelector","call","nonce","loadCSPNonce","ref","content","cspNonce","expando","prototype","matches","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","getData","setData","$","querySelectorAll","csrfParam","csrfToken","meta","CSRFProtection","xhr","token","setRequestHeader","refreshCSRFTokens","param","input","CustomEvent","fire","preventDefault","event","params","evt","createEvent","initCustomEvent","bubbles","cancelable","detail","Event","defaultPrevented","defineProperty","obj","dispatchEvent","stopEverything","e","stopPropagation","stopImmediatePropagation","delegate","eventType","handler","AcceptHeaders","createXHR","prepareOptions","processResponse","text","xml","json","script","ajax","response","responseText","getResponseHeader","floor","status","success","statusText","error","complete","beforeSend","readyState","XMLHttpRequest","OPENED","send","url","location","href","type","toUpperCase","dataType","accept","done","open","crossDomain","withCredentials","onreadystatechange","DONE","parser","match","JSON","parse","createElement","head","appendChild","removeChild","DOMParser","parseFromString","isCrossDomain","originAnchor","urlAnchor","protocol","toArray","serializeElement","additionalParam","inputs","disabled","option","selected","checked","encodeURIComponent","join","formElements","form","el","allowAction","handleConfirm","confirm","message","answer","callback","getAttribute","disableFormElement","disableFormElements","disableLinkElement","enableFormElement","enableFormElements","enableLinkElement","isXhrRedirect","handleDisabledElement","enableElement","disableElement","replacement","innerHTML","originalText","handleMethod","formContent","link","method","action","display","click","isRemote","handleRemote","button","enctype","FormData","append","formSubmitButtonClick","formNoValidate","preventInsignificantClick","insignificantMetaClick","metaKey","ctrlKey","jQuery","rails","Error","ajaxPrefilter","originalOptions","_rails_loaded","setTimeout","module","exports","FastClick","layer","oldOnClick","self","trackingClick","trackingClickStart","targetElement","touchStartX","touchStartY","lastTouchIdentifier","touchBoundary","nodeType","TypeError","onClick","apply","onMouse","onTouchStart","onTouchEnd","onTouchCancel","notNeeded","deviceIsAndroid","capture","rmv","Node","hijacked","adv","propagationStopped","onclick","deviceIsIOS","deviceIsIOS4","deviceIsIOSWithBadTarget","needsClick","className","needsFocus","readOnly","sendClick","clickEvent","touch","activeElement","blur","changedTouches","initMouseEvent","screenX","screenY","clientX","clientY","forwardedTouchEvent","focus","setSelectionRange","updateScrollParent","parentElement","fastClickScrollParent","fastClickLastScrollTop","getTargetElementFromEventTarget","eventTarget","TEXT_NODE","selection","targetTouches","getSelection","rangeCount","isCollapsed","identifier","timeStamp","pageX","pageY","lastClickTime","touchHasMoved","findControl","labelElement","control","htmlFor","getElementById","forElement","targetTagName","cancelNextClick","elementFromPoint","tagName","permitted","metaViewport","ontouchstart","msTouchAction","attach","define","Popper","_interopNamespace","__esModule","n","create","k","d","getOwnPropertyDescriptor","enumerable","default","freeze","Popper__namespace","TRANSITION_END","getSelector","hrefAttr","includes","startsWith","trim","getSelectorFromElement","getElementFromSelector","triggerTransitionEnd","jquery","getElement","typeCheckConfig","componentName","config","configTypes","expectedTypes","valueType","RegExp","isVisible","getClientRects","getPropertyValue","isDisabled","ELEMENT_NODE","classList","hasAttribute","findShadowRoot","attachShadow","root","noop","reflow","getjQuery","DOMContentLoadedCallbacks","isRTL","dir","defineJQueryPlugin","plugin","NAME","JQUERY_NO_CONFLICT","jQueryInterface","Constructor","noConflict","execute","executeAfterTransition","transitionElement","waitForTransition","emulatedDuration","transitionDuration","transitionDelay","floatTransitionDuration","Number","parseFloat","floatTransitionDelay","getTransitionDurationFromElement","called","getNextActiveElement","shouldGetNext","isCycleAllowed","listLength","namespaceRegex","stripNameRegex","stripUidRegex","eventRegistry","uidEvent","customEvents","mouseenter","mouseleave","customEventsRegex","nativeEvents","getUidEvent","uid","getEvent","findHandler","events","delegationSelector","uidEventList","originalHandler","normalizeParams","originalTypeEvent","delegationFn","delegation","typeEvent","getTypeEvent","addHandler","oneOff","wrapFn","relatedTarget","delegateTarget","handlers","previousFn","domElements","EventHandler","off","bootstrapDelegationHandler","bootstrapHandler","removeHandler","Boolean","on","one","inNamespace","isNamespace","elementEvent","namespace","storeElementEvent","handlerKey","removeNamespacedHandlers","keyHandlers","trigger","isNative","jQueryEvent","nativeDispatch","isPropagationStopped","isImmediatePropagationStopped","isDefaultPrevented","initEvent","elementMap","Data","instanceMap","size","console","from","remove","delete","BaseComponent","constructor","_element","DATA_KEY","dispose","EVENT_KEY","getOwnPropertyNames","propertyName","_queueCallback","isAnimated","static","getInstance","VERSION","enableDismissTrigger","component","closest","getOrCreateInstance","EVENT_KEY$c","EVENT_CLOSE","EVENT_CLOSED","Alert","close","_destroyElement","each","SELECTOR_DATA_TOGGLE$5","Button","toggle","normalizeData","val","normalizeDataKey","chr","Manipulator","setDataAttribute","removeDataAttribute","getDataAttributes","dataset","pureKey","charAt","getDataAttribute","SelectorEngine","findOne","children","parents","ancestor","prev","previous","previousElementSibling","nextElementSibling","focusableChildren","focusables","NAME$b","EVENT_KEY$a","DATA_API_KEY$6","Default$a","interval","keyboard","slide","pause","wrap","DefaultType$a","ORDER_NEXT","ORDER_PREV","DIRECTION_LEFT","DIRECTION_RIGHT","KEY_TO_DIRECTION","EVENT_SLIDE","EVENT_SLID","EVENT_KEYDOWN","EVENT_MOUSEENTER","EVENT_MOUSELEAVE","EVENT_TOUCHSTART","EVENT_TOUCHMOVE","EVENT_TOUCHEND","EVENT_POINTERDOWN","EVENT_POINTERUP","EVENT_DRAG_START","EVENT_LOAD_DATA_API$2","EVENT_CLICK_DATA_API$5","CLASS_NAME_ACTIVE$2","SELECTOR_ACTIVE_ITEM","Carousel","super","_items","_interval","_activeElement","_isPaused","_isSliding","touchTimeout","touchDeltaX","_config","_getConfig","_indicatorsElement","_touchSupported","maxTouchPoints","_pointerEvent","PointerEvent","_addEventListeners","Default","_slide","nextWhenVisible","hidden","cycle","clearInterval","_updateInterval","setInterval","visibilityState","bind","to","activeIndex","_getItemIndex","_handleSwipe","absDeltax","_keydown","_addTouchEventListeners","hasPointerPenTouch","pointerType","touches","move","clearTimeout","itemImg","_getItemByOrder","isNext","_triggerSlideEvent","eventDirectionName","targetIndex","fromIndex","_setActiveIndicatorElement","activeIndicator","indicators","parseInt","elementInterval","defaultInterval","directionOrOrder","_directionToOrder","activeElementIndex","nextElement","nextElementIndex","isCycling","directionalClassName","orderClassName","_orderToDirection","triggerSlidEvent","completeCallBack","ride","carouselInterface","slideIndex","dataApiClickHandler","carousels","NAME$a","DATA_KEY$9","EVENT_KEY$9","Default$9","DefaultType$9","EVENT_SHOW$5","EVENT_SHOWN$5","EVENT_HIDE$5","EVENT_HIDDEN$5","EVENT_CLICK_DATA_API$4","CLASS_NAME_SHOW$7","CLASS_NAME_COLLAPSE","CLASS_NAME_COLLAPSING","CLASS_NAME_COLLAPSED","CLASS_NAME_DEEPER_CHILDREN","SELECTOR_DATA_TOGGLE$4","Collapse","_isTransitioning","_triggerArray","toggleList","elem","filterElement","foundElem","_selector","_initializeChildren","_addAriaAndCollapsedClass","_isShown","hide","show","activesData","actives","container","tempActiveData","elemActive","dimension","_getDimension","scrollSize","triggerArrayLength","triggerArray","isOpen","NAME$9","EVENT_KEY$8","DATA_API_KEY$4","ESCAPE_KEY$2","SPACE_KEY","ARROW_UP_KEY","ARROW_DOWN_KEY","REGEXP_KEYDOWN","EVENT_HIDE$4","EVENT_HIDDEN$4","EVENT_SHOW$4","EVENT_SHOWN$4","EVENT_CLICK_DATA_API$3","EVENT_KEYDOWN_DATA_API","EVENT_KEYUP_DATA_API","CLASS_NAME_SHOW$6","SELECTOR_DATA_TOGGLE$3","SELECTOR_MENU","PLACEMENT_TOP","PLACEMENT_TOPEND","PLACEMENT_BOTTOM","PLACEMENT_BOTTOMEND","PLACEMENT_RIGHT","PLACEMENT_LEFT","Default$8","popperConfig","autoClose","DefaultType$8","Dropdown","_popper","_menu","_getMenuElement","_inNavbar","_detectNavbar","DefaultType","getParentFromElement","_createPopper","_completeHide","referenceElement","_getPopperConfig","isDisplayStatic","_getPlacement","parentDropdown","isEnd","_getOffset","popperData","defaultBsPopperConfig","_selectMenuItem","items","toggles","context","composedPath","isMenuTarget","isActive","getToggleButton","clearMenus","dataApiKeydownHandler","SELECTOR_FIXED_CONTENT","SELECTOR_STICKY_CONTENT","ScrollBarHelper","getWidth","documentWidth","innerWidth","_disableOverFlow","_setElementAttributes","calculatedValue","_saveInitialAttribute","styleProp","scrollbarWidth","_applyManipulationCallback","_resetElementAttributes","actualValue","removeProperty","callBack","isOverflowing","Default$7","rootElement","clickCallback","DefaultType$7","NAME$8","CLASS_NAME_SHOW$5","EVENT_MOUSEDOWN","Backdrop","_isAppended","_append","_getElement","_emulateAnimation","backdrop","Default$6","trapElement","autofocus","DefaultType$6","EVENT_KEY$7","EVENT_FOCUSIN$1","EVENT_KEYDOWN_TAB","TAB_NAV_BACKWARD","FocusTrap","_isActive","_lastTabNavDirection","activate","_handleFocusin","_handleKeydown","deactivate","shiftKey","NAME$6","EVENT_KEY$6","ESCAPE_KEY$1","Default$5","DefaultType$5","EVENT_HIDE$3","EVENT_HIDE_PREVENTED","EVENT_HIDDEN$3","EVENT_SHOW$3","EVENT_SHOWN$3","EVENT_RESIZE","EVENT_CLICK_DISMISS","EVENT_KEYDOWN_DISMISS$1","EVENT_MOUSEUP_DISMISS","EVENT_MOUSEDOWN_DISMISS","EVENT_CLICK_DATA_API$2","CLASS_NAME_OPEN","CLASS_NAME_SHOW$4","CLASS_NAME_STATIC","Modal","_dialog","_backdrop","_initializeBackDrop","_focustrap","_initializeFocusTrap","_ignoreBackdropClick","_scrollBar","_isAnimated","_adjustDialog","_setEscapeEvent","_setResizeEvent","_showBackdrop","_showElement","_hideModal","htmlElement","handleUpdate","modalBody","_triggerBackdropTransition","_resetAdjustments","currentTarget","isModalOverflowing","isBodyOverflowing","paddingLeft","paddingRight","showEvent","allReadyOpen","NAME$5","EVENT_KEY$5","DATA_API_KEY$2","EVENT_LOAD_DATA_API$1","Default$4","DefaultType$4","CLASS_NAME_SHOW$3","OPEN_SELECTOR","EVENT_SHOW$2","EVENT_SHOWN$2","EVENT_HIDE$2","EVENT_HIDDEN$2","EVENT_CLICK_DATA_API$1","EVENT_KEYDOWN_DISMISS","Offcanvas","visibility","uriAttributes","SAFE_URL_PATTERN","DATA_URL_PATTERN","allowedAttribute","allowedAttributeList","attributeName","nodeValue","regExp","attributeRegex","sanitizeHtml","unsafeHtml","allowList","sanitizeFn","createdDocument","elementName","attributeList","allowedAttributes","NAME$4","EVENT_KEY$4","DISALLOWED_ATTRIBUTES","DefaultType$3","animation","template","title","delay","customClass","sanitize","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","Default$3","area","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","img","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","Event$2","HIDE","HIDDEN","SHOW","SHOWN","INSERTED","CLICK","FOCUSIN","FOCUSOUT","MOUSEENTER","MOUSELEAVE","CLASS_NAME_FADE$2","CLASS_NAME_SHOW$2","HOVER_STATE_SHOW","HOVER_STATE_OUT","SELECTOR_TOOLTIP_INNER","SELECTOR_MODAL","EVENT_MODAL_HIDE","TRIGGER_HOVER","TRIGGER_FOCUS","Tooltip","_isEnabled","_timeout","_hoverState","_activeTrigger","tip","_setListeners","enable","disable","toggleEnabled","_initializeOnDelegatedTarget","_isWithActiveTrigger","_enter","_leave","getTipElement","_hideModalHandler","_disposePopper","isWithContent","shadowRoot","isInTheDom","getTitle","tipId","prefix","random","getUID","attachment","_getAttachment","_addAttachmentClass","_resolvePossibleFunction","prevHoverState","_cleanTipClass","setContent","_sanitizeAndSetContent","templateElement","setElementContent","textContent","updateAttachment","_getDelegateConfig","_handlePopperPlacementChange","_getBasicClassPrefix","eventIn","eventOut","_fixTitle","originalTitleType","dataAttributes","dataAttr","basicClassPrefixRegex","tabClass","tClass","EVENT_KEY$3","Default$2","DefaultType$2","Event$1","Popover","_getContent","NAME$2","EVENT_KEY$2","Default$1","DefaultType$1","EVENT_ACTIVATE","EVENT_SCROLL","EVENT_LOAD_DATA_API","CLASS_NAME_DROPDOWN_ITEM","CLASS_NAME_ACTIVE$1","SELECTOR_NAV_LINKS","SELECTOR_LIST_ITEMS","SELECTOR_LINK_ITEMS","METHOD_POSITION","ScrollSpy","_scrollElement","_offsets","_targets","_activeTarget","_scrollHeight","_process","refresh","autoMethod","offsetMethod","offsetBase","_getScrollTop","_getScrollHeight","targetSelector","targetBCR","item","_getOffsetHeight","innerHeight","maxScroll","_activate","_clear","queries","listGroup","navItem","spy","EVENT_KEY$1","EVENT_HIDE$1","EVENT_HIDDEN$1","EVENT_SHOW$1","EVENT_SHOWN$1","EVENT_CLICK_DATA_API","CLASS_NAME_ACTIVE","CLASS_NAME_FADE$1","CLASS_NAME_SHOW$1","SELECTOR_ACTIVE","SELECTOR_ACTIVE_UL","Tab","listElement","itemSelector","hideEvent","active","isTransitioning","_transitionComplete","dropdownChild","dropdownElement","dropdown","EVENT_MOUSEOVER","EVENT_MOUSEOUT","EVENT_FOCUSIN","EVENT_FOCUSOUT","EVENT_HIDE","EVENT_HIDDEN","EVENT_SHOW","EVENT_SHOWN","CLASS_NAME_HIDE","CLASS_NAME_SHOW","CLASS_NAME_SHOWING","autohide","Toast","_hasMouseInteraction","_hasKeyboardInteraction","_clearTimeout","_maybeScheduleHide","_onInteraction","isInteracting","factory","_typeof","Symbol","iterator","_possibleConstructorReturn","ReferenceError","_assertThisInitialized","_getPrototypeOf","o","setPrototypeOf","getPrototypeOf","__proto__","_inherits","subClass","superClass","writable","configurable","_setPrototypeOf","_classCallCheck","_defineProperties","props","descriptor","_createClass","protoProps","staticProps","DisposableEvent","CompositeDisposable","Disposable","block","_Disposable","_this","disposables","disposable","splice","_Disposable2","listener","_this2","merge","c","_k","clone","object","copy","curry","_curry","curryN","compose","_len3","fns","_key3","pop","_len4","_key4","reduceRight","memo","pipe","_len5","_key5","_len6","_key6","clearNodeCache","previewNodes","getNode","getNodes","previewNode","nodes","asArray","childNodes","cloneNode","outerHTML","nodeIndex","detachNode","animate","duration","step","getTime","Date","passed","progress","delta","cos","PI","swing","requestAnimationFrame","eachParent","nodeAndParents","addDelegatedEventListener","_widjetDisposables","overriddenStop","overriddenStopImmediate","decorateEvent","matchedTarget","domEvent","createEventObject","newEvent","mapEach","fill","log","inputName","asDataAttributes","asPair","when","init","tail","last","never","always","identity","curry4","curry3","curry2","curry1","_slicedToArray","arr","isArray","_arrayWithHoles","_arr","_n","_d","_e","_s","err","_iterableToArrayLimit","_nonIterableRest","curryArgs","concatArgs","predicates","_len2","values","_key2","doWhen","_head2","predicate","collection","suffix","_len7","_key7","maps","firstElementChild","parentNodes","appendData","domEventImplementation","cancelBubble","_widjet","_interopRequireDefault","_widjetUtils","_validators","newObj","desc","_interopRequireWildcard","_resolvers","getValidator","validators","resolvers","i18n","onSuccess","onError","defaultErrorFeedback","clean","defaultCleanFeedback","validator","validate","silent","res","prevError","insertBefore","inputBuffer","validateSelfAndForm","validateExcept","validateOnInit","buffer","timeout","fieldSelector","reducer","dispatch","hasErrors","_utils","_default","inputPredicate","files","selectPredicate","optionValues","types","multiple","attributePredicate","attr","nativeValidation","validatePresence","validateChecked","validateEmail","validateAccept","getFileValidator","results","file","f","checkValidity","MESSAGES","validity","labelForValidity","badInput","customError","patternMismatch","rangeOverflow","rangeUnderflow","stepMismatch","tooLong","tooShort","typeMismatch","email","valueMissing","re","escDot","widgets","_widget","WIDGETS","INSTANCES","SUBSCRIPTIONS","mediaHandler","ifCond","if","unlessCond","unless","targetFrame","handledClass","mediaCondition","media","elementHandle","targetDocument","contentDocument","targetWindow","contentWindow","instances","testCondition","condition","canBeHandled","widget","hasBeenHandled","_mediaCondition","getScreenSize","conditionMatched","subscribe","widgetsFor","source","properties","fireEvent","blockOrPrototype","defined","subscription","release","names","clear","w","Widget","onInitialize","initialize","onActivate","onDeactivate","onDispose","initialized","disposed","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","getter","definition","prop","r","toStringTag","LOCALES","en","coordinates","validation","blank","value_missing","invalid_email","password_confirmation_doesnt_match","bad_input","pattern_mismatch","range_overflow","range_underflow","too_long","too_short","email_mismatch","url_mismatch","field_limit","remaining","file_preview","label","table_header_sort","settings_input","required","placeholder","integer","float","string","limit","textarea","game","recaptcha","invalid","countdown","go","infomil","invalid_card","es","stats","sales","overall_sales","options_split","fr","labels","total","actions","remove_image","remove_video","enums","bon_ordre_sort_by","price_asc","price_desc","weight_asc","weight_desc","game_entries","id_type","no_type","ciam","sms_subscriptions","alert","error_alert","store_importer","separator","central","province","store_name","store_display_name","store_address","store_city","store_postal_code","store_id_number","graph_title","wheel","congratulation","win_notice","loss","loss_message","jackpot","loss_title","loss_message2","questions","_label","question","answers","valid_answer","main_grid","count","columns","extra_grid","wheel_segments_count","randomize_wheel_segments","basket_products","price","image","day","basket_size","basket_min_size","max_quantity","min_price","max_price","instruction","sort_by","products","weight","leclerc_images","national_brand_images","duration_seconds","good_targets_count","bad_targets_count","graphic_config","home_page","logo","background","background_video","background_video_mobile","background_call_to_play","image_dotation","image_above_play","image_play_left","image_play_right","image_mobile_decoration","custom_css","game_specific","scratch_image","scratch_lost_image","wheel_loss_segment_background","wheel_loss_segment_foreground","wheel_background_result","wheel_outline","wheel_pointer","wheel_center","background_jackpot_image","lever_jackpot_image","wheel_win_segment_image","wheel_loose_segment_image","win_image","first_loose_image","second_loose_image","third_lost_image","fourth_lost_image","fifth_lost_image","sixth_lost_image","seventh_lost_image","juste_prix_background_result","juste_prix_product_image","bon_ordre_background_result","tir_cible_background_result","already_played","unknown_account","participation_code","valid","time","juste_prix","thanks","notice","bon_ordre","placed","tir_cible","score","unchecked","calendar","graphic_configuration","title_color","background_image","additional_title_image","cells","display_months","normal_text_color","highlight_text_color","normal_background_images","highlight_background_images","filler_cells","images","offers","background_color","color","accent_color","home","content_color","call_to_action","background_alt","border","select_categories","fill_phone","receive_alerts","alert_form","home_ads","de","pt","I18n","locales","defaultLanguage","languages","locale","t","getHelper","String","tokens","language","path","lang","els","other","sp","all","numberPredicate","checkboxPredicate","checkboxGroupPredicate","radioPredicate","filePredicate","requiredPredicate","GROUP_SELECTOR","INVALID_FEEDBACK_SELECTOR","PUNCT_RE","passwordPredicate","flagPasswordCriterium","flags","getPasswordCriterium","passwordInput","subValidator","validateImagePresence","group","SLEEP_RE","speed","reject","cleanupAnimations","animationEnd","queue","animations","repeat","scrollToTop","scrollTo","variable","isFunction","Function","isPlainObject","extend","obj1","obj2","animationRepeat","isNaN","POSITIVE_INFINITY","handleSuccess","handleError","entries","stringify","headers","fetch","video","mobile","matchMedia","useBackgroundImage","backgroundImage","src","srcMobile","load","play","setProperty","videoWidth","videoHeight","DATE_PATTERN","toStr","toFloat","toDate","year","month","str","toArr","jsOptionsFunc","hideLegend","setTitle","setMin","setMax","setStacked","setXtitle","setYtitle","chart","opts","chartOptions","series","singleSeriesFormat","legend","j","negativeValues","stacked","colors","xtitle","ytitle","library","sortByTime","sortByNumberSeries","sortByNumber","calculateTimeUnit","maxDay","getMilliseconds","getSeconds","getMinutes","getHours","getDate","dayOfWeek","getDay","getMonth","isDate","isNumber","byteSuffixes","formatValue","precision","byteScale","positive","suffixIdx","baseValue","toPrecision","zeros","num","pow","toFixed","thousands","decimal","parts","seriesOption","baseOptions","maintainAspectRatio","plugins","tooltip","displayColors","callbacks","font","interaction","defaultOptions$2","scales","ticks","maxTicksLimit","grid","drawOnChartArea","defaultColors","hideLegend$2","setTitle$2","setBarMin$1","setBarMax$1","setStacked$2","setXtitle$2","setYtitle$2","addOpacity","hex","opacity","exec","notnull","setFormatOptions$1","chartType","numericOptions","formatOptions","bytes","scale","maxAbsY","calculateScale","stepSize","dataPoint","parsed","raw","valueLabel","xtype","jsOptions$2","createDataTable","maxR","points","prepareBubbleData","prepareNumberData","rows","i$1","i$2","key$1","row","j$1","prepareDefaultData","prepareData","datasets","backgroundColor","borderColor","borderWidth","pointChart","pointBackgroundColor","pointHoverBackgroundColor","pointHitRadius","pointHoverBorderWidth","stack","tension","pointRadius","pointHoverRadius","xmin","xmax","timeUnit","minTime","maxTime","timeDiff","unit","displayFormats","hour","minute","unitStepSize","ceil","tooltipFormat","defaultExport$2","renderLineChart","drawChart","renderPieChart","donut","cutout","point","renderColumnChart","barOptions","indexAxis","maxLabelSize","getLabelForValue","substring","setLabelSize","mode","renderAreaChart","renderBarChart","renderScatterChart","showLine","renderBubbleChart","destroyed","ctx","getElementsByTagName","defaultOptions$1","xAxis","fontSize","yAxis","credits","plotOptions","areaspline","marker","useUTC","hideLegend$1","verticalAlign","layout","align","setTitle$1","jsOptions$1","stackedValue","stacking","setFormatOptions","formatter","pointFormatter","pointFormat","defaultExport$1","curve","symbol","pie","innerSize","categories","newSeries","d$1","d2","renderTo","id","Chart","loaded","chartArea","fontName","pointSize","textStyle","alignment","curveType","hAxis","titleTextStyle","gridlines","baselineColor","viewWindow","vAxis","setBarMin","setBarMax","isStacked","italic","jsOptions","defaultExport","this$1$1","waitForLoaded","pieHole","visualization","DataTable","addColumn","addRows","areaOpacity","renderGeoChart","colorAxis","rows2","renderTimeline","lineHeight","clearChart","toJSON","draw","attachEvent","pack","runCallbacks","loadOptions","packages","__config","mapsApiKey","charts","cb","LineChart","Timeline","GeoChart","columnType","sortedLabels","i$3","adapters","addAdapter","adapterType","product","getAdapterType","Chartkick","configure","setDefaultOptions","eachChart","chartId","destroyAll","use","adapter","formatSeriesData","keyType","formatSeriesBubble","keyFunc","detectXTypeWithFunction","func","processSeries","noDatetime","rawData","copySeries","discrete","dataEmpty","detectXType","processSimple","perfectData","pendingRequests","runningRequests","runNext","request","shift","onload","setText","chartError","noPrefix","errorCatcher","__render","fetchDataSource","dataSource","showLoading","loading","renderChart","empty","messages","fnName","adapterName","Highcharts","google","__adapterObject","callAdapter","download","__downloadAttached","filename","zIndex","alt","__enterEvent","related","toImage","__leaveEvent","addDownloadButton","elementId","startRefresh","getDataSource","getOptions","getChartObject","getAdapter","updateData","__updateOptions","redraw","refreshData","sep","intervalId","stopRefresh","canvas","tmpCanvas","tmpCtx","getContext","fillStyle","fillRect","drawImage","toDataURL","toBase64Image","updateRefresh","__processData","__chartName","PieChart","ColumnChart","BarChart","AreaChart","ScatterChart","BubbleChart","autoDestroy","attachToWindow","Bootstrap","isInTemplate","history","scrollRestoration","DEFAULT_CONFIG","VALIDATION_OPTIONS"],"sourceRoot":""}