{"version":3,"file":"hotspots.js","mappings":"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","sources":["webpack://flagmaps/./node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","webpack://flagmaps/./node_modules/@floating-ui/core/dist/floating-ui.core.mjs","webpack://flagmaps/./node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","webpack://flagmaps/./node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","webpack://flagmaps/./resources/javascript/src/Hotspot.js","webpack://flagmaps/./resources/javascript/src/Hotspots.js","webpack://flagmaps/./resources/javascript/hotspots.js"],"sourcesContent":["/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n  x: v,\n  y: v\n});\nconst oppositeSideMap = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nconst oppositeAlignmentMap = {\n  start: 'end',\n  end: 'start'\n};\nfunction clamp(start, value, end) {\n  return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n  return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n  return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n  return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n  return axis === 'y' ? 'height' : 'width';\n}\nfunction getSideAxis(placement) {\n  return ['top', 'bottom'].includes(getSide(placement)) ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n  return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n  if (rtl === void 0) {\n    rtl = false;\n  }\n  const alignment = getAlignment(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const length = getAxisLength(alignmentAxis);\n  let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n  if (rects.reference[length] > rects.floating[length]) {\n    mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n  }\n  return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n  const oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n  return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\n}\nfunction getSideList(side, isStart, rtl) {\n  const lr = ['left', 'right'];\n  const rl = ['right', 'left'];\n  const tb = ['top', 'bottom'];\n  const bt = ['bottom', 'top'];\n  switch (side) {\n    case 'top':\n    case 'bottom':\n      if (rtl) return isStart ? rl : lr;\n      return isStart ? lr : rl;\n    case 'left':\n    case 'right':\n      return isStart ? tb : bt;\n    default:\n      return [];\n  }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n  const alignment = getAlignment(placement);\n  let list = getSideList(getSide(placement), direction === 'start', rtl);\n  if (alignment) {\n    list = list.map(side => side + \"-\" + alignment);\n    if (flipAlignment) {\n      list = list.concat(list.map(getOppositeAlignmentPlacement));\n    }\n  }\n  return list;\n}\nfunction getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\n}\nfunction expandPaddingObject(padding) {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0,\n    ...padding\n  };\n}\nfunction getPaddingObject(padding) {\n  return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n    top: padding,\n    right: padding,\n    bottom: padding,\n    left: padding\n  };\n}\nfunction rectToClientRect(rect) {\n  return {\n    ...rect,\n    top: rect.y,\n    left: rect.x,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height\n  };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n  let {\n    reference,\n    floating\n  } = _ref;\n  const sideAxis = getSideAxis(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const alignLength = getAxisLength(alignmentAxis);\n  const side = getSide(placement);\n  const isVertical = sideAxis === 'y';\n  const commonX = reference.x + reference.width / 2 - floating.width / 2;\n  const commonY = reference.y + reference.height / 2 - floating.height / 2;\n  const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n  let coords;\n  switch (side) {\n    case 'top':\n      coords = {\n        x: commonX,\n        y: reference.y - floating.height\n      };\n      break;\n    case 'bottom':\n      coords = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n    case 'right':\n      coords = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n    case 'left':\n      coords = {\n        x: reference.x - floating.width,\n        y: commonY\n      };\n      break;\n    default:\n      coords = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n  switch (getAlignment(placement)) {\n    case 'start':\n      coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n    case 'end':\n      coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n  }\n  return coords;\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n  const {\n    placement = 'bottom',\n    strategy = 'absolute',\n    middleware = [],\n    platform\n  } = config;\n  const validMiddleware = middleware.filter(Boolean);\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n  let rects = await platform.getElementRects({\n    reference,\n    floating,\n    strategy\n  });\n  let {\n    x,\n    y\n  } = computeCoordsFromPlacement(rects, placement, rtl);\n  let statefulPlacement = placement;\n  let middlewareData = {};\n  let resetCount = 0;\n  for (let i = 0; i < validMiddleware.length; i++) {\n    const {\n      name,\n      fn\n    } = validMiddleware[i];\n    const {\n      x: nextX,\n      y: nextY,\n      data,\n      reset\n    } = await fn({\n      x,\n      y,\n      initialPlacement: placement,\n      placement: statefulPlacement,\n      strategy,\n      middlewareData,\n      rects,\n      platform,\n      elements: {\n        reference,\n        floating\n      }\n    });\n    x = nextX != null ? nextX : x;\n    y = nextY != null ? nextY : y;\n    middlewareData = {\n      ...middlewareData,\n      [name]: {\n        ...middlewareData[name],\n        ...data\n      }\n    };\n    if (reset && resetCount <= 50) {\n      resetCount++;\n      if (typeof reset === 'object') {\n        if (reset.placement) {\n          statefulPlacement = reset.placement;\n        }\n        if (reset.rects) {\n          rects = reset.rects === true ? await platform.getElementRects({\n            reference,\n            floating,\n            strategy\n          }) : reset.rects;\n        }\n        ({\n          x,\n          y\n        } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n      }\n      i = -1;\n    }\n  }\n  return {\n    x,\n    y,\n    placement: statefulPlacement,\n    strategy,\n    middlewareData\n  };\n};\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n  var _await$platform$isEle;\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    x,\n    y,\n    platform,\n    rects,\n    elements,\n    strategy\n  } = state;\n  const {\n    boundary = 'clippingAncestors',\n    rootBoundary = 'viewport',\n    elementContext = 'floating',\n    altBoundary = false,\n    padding = 0\n  } = evaluate(options, state);\n  const paddingObject = getPaddingObject(padding);\n  const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n  const element = elements[altBoundary ? altContext : elementContext];\n  const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n    element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n    boundary,\n    rootBoundary,\n    strategy\n  }));\n  const rect = elementContext === 'floating' ? {\n    ...rects.floating,\n    x,\n    y\n  } : rects.reference;\n  const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n  const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n    x: 1,\n    y: 1\n  } : {\n    x: 1,\n    y: 1\n  };\n  const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n    elements,\n    rect,\n    offsetParent,\n    strategy\n  }) : rect);\n  return {\n    top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n    bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n    left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n    right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n  };\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n  name: 'arrow',\n  options,\n  async fn(state) {\n    const {\n      x,\n      y,\n      placement,\n      rects,\n      platform,\n      elements,\n      middlewareData\n    } = state;\n    // Since `element` is required, we don't Partial<> the type.\n    const {\n      element,\n      padding = 0\n    } = evaluate(options, state) || {};\n    if (element == null) {\n      return {};\n    }\n    const paddingObject = getPaddingObject(padding);\n    const coords = {\n      x,\n      y\n    };\n    const axis = getAlignmentAxis(placement);\n    const length = getAxisLength(axis);\n    const arrowDimensions = await platform.getDimensions(element);\n    const isYAxis = axis === 'y';\n    const minProp = isYAxis ? 'top' : 'left';\n    const maxProp = isYAxis ? 'bottom' : 'right';\n    const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n    const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n    const startDiff = coords[axis] - rects.reference[axis];\n    const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n    let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n    // DOM platform can return `window` as the `offsetParent`.\n    if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n      clientSize = elements.floating[clientProp] || rects.floating[length];\n    }\n    const centerToReference = endDiff / 2 - startDiff / 2;\n\n    // If the padding is large enough that it causes the arrow to no longer be\n    // centered, modify the padding so that it is centered.\n    const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n    const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n    const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n    // Make sure the arrow doesn't overflow the floating element if the center\n    // point is outside the floating element's bounds.\n    const min$1 = minPadding;\n    const max = clientSize - arrowDimensions[length] - maxPadding;\n    const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n    const offset = clamp(min$1, center, max);\n\n    // If the reference is small enough that the arrow's padding causes it to\n    // to point to nothing for an aligned placement, adjust the offset of the\n    // floating element itself. To ensure `shift()` continues to take action,\n    // a single reset is performed when this is true.\n    const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n    const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n    return {\n      [axis]: coords[axis] + alignmentOffset,\n      data: {\n        [axis]: offset,\n        centerOffset: center - offset - alignmentOffset,\n        ...(shouldAddOffset && {\n          alignmentOffset\n        })\n      },\n      reset: shouldAddOffset\n    };\n  }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n  const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n  return allowedPlacementsSortedByAlignment.filter(placement => {\n    if (alignment) {\n      return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n    }\n    return true;\n  });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'autoPlacement',\n    options,\n    async fn(state) {\n      var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n      const {\n        rects,\n        middlewareData,\n        placement,\n        platform,\n        elements\n      } = state;\n      const {\n        crossAxis = false,\n        alignment,\n        allowedPlacements = placements,\n        autoAlignment = true,\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n      const currentPlacement = placements$1[currentIndex];\n      if (currentPlacement == null) {\n        return {};\n      }\n      const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n      // Make `computeCoords` start from the right place.\n      if (placement !== currentPlacement) {\n        return {\n          reset: {\n            placement: placements$1[0]\n          }\n        };\n      }\n      const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n      const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n        placement: currentPlacement,\n        overflows: currentOverflows\n      }];\n      const nextPlacement = placements$1[currentIndex + 1];\n\n      // There are more placements to check.\n      if (nextPlacement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: nextPlacement\n          }\n        };\n      }\n      const placementsSortedByMostSpace = allOverflows.map(d => {\n        const alignment = getAlignment(d.placement);\n        return [d.placement, alignment && crossAxis ?\n        // Check along the mainAxis and main crossAxis side.\n        d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n        // Check only the mainAxis.\n        d.overflows[0], d.overflows];\n      }).sort((a, b) => a[1] - b[1]);\n      const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n      // Aligned placements should not check their opposite crossAxis\n      // side.\n      getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n      const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n      if (resetPlacement !== placement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: resetPlacement\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'flip',\n    options,\n    async fn(state) {\n      var _middlewareData$arrow, _middlewareData$flip;\n      const {\n        placement,\n        middlewareData,\n        rects,\n        initialPlacement,\n        platform,\n        elements\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true,\n        fallbackPlacements: specifiedFallbackPlacements,\n        fallbackStrategy = 'bestFit',\n        fallbackAxisSideDirection = 'none',\n        flipAlignment = true,\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n\n      // If a reset by the arrow was caused due to an alignment offset being\n      // added, we should skip any logic now since `flip()` has already done its\n      // work.\n      // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n      if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n        return {};\n      }\n      const side = getSide(placement);\n      const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n      const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n      const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n      if (!specifiedFallbackPlacements && fallbackAxisSideDirection !== 'none') {\n        fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n      }\n      const placements = [initialPlacement, ...fallbackPlacements];\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const overflows = [];\n      let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n      if (checkMainAxis) {\n        overflows.push(overflow[side]);\n      }\n      if (checkCrossAxis) {\n        const sides = getAlignmentSides(placement, rects, rtl);\n        overflows.push(overflow[sides[0]], overflow[sides[1]]);\n      }\n      overflowsData = [...overflowsData, {\n        placement,\n        overflows\n      }];\n\n      // One or more sides is overflowing.\n      if (!overflows.every(side => side <= 0)) {\n        var _middlewareData$flip2, _overflowsData$filter;\n        const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n        const nextPlacement = placements[nextIndex];\n        if (nextPlacement) {\n          // Try next placement and re-run the lifecycle.\n          return {\n            data: {\n              index: nextIndex,\n              overflows: overflowsData\n            },\n            reset: {\n              placement: nextPlacement\n            }\n          };\n        }\n\n        // First, find the candidates that fit on the mainAxis side of overflow,\n        // then find the placement that fits the best on the main crossAxis side.\n        let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n        // Otherwise fallback.\n        if (!resetPlacement) {\n          switch (fallbackStrategy) {\n            case 'bestFit':\n              {\n                var _overflowsData$map$so;\n                const placement = (_overflowsData$map$so = overflowsData.map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$map$so[0];\n                if (placement) {\n                  resetPlacement = placement;\n                }\n                break;\n              }\n            case 'initialPlacement':\n              resetPlacement = initialPlacement;\n              break;\n          }\n        }\n        if (placement !== resetPlacement) {\n          return {\n            reset: {\n              placement: resetPlacement\n            }\n          };\n        }\n      }\n      return {};\n    }\n  };\n};\n\nfunction getSideOffsets(overflow, rect) {\n  return {\n    top: overflow.top - rect.height,\n    right: overflow.right - rect.width,\n    bottom: overflow.bottom - rect.height,\n    left: overflow.left - rect.width\n  };\n}\nfunction isAnySideFullyClipped(overflow) {\n  return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'hide',\n    options,\n    async fn(state) {\n      const {\n        rects\n      } = state;\n      const {\n        strategy = 'referenceHidden',\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      switch (strategy) {\n        case 'referenceHidden':\n          {\n            const overflow = await detectOverflow(state, {\n              ...detectOverflowOptions,\n              elementContext: 'reference'\n            });\n            const offsets = getSideOffsets(overflow, rects.reference);\n            return {\n              data: {\n                referenceHiddenOffsets: offsets,\n                referenceHidden: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        case 'escaped':\n          {\n            const overflow = await detectOverflow(state, {\n              ...detectOverflowOptions,\n              altBoundary: true\n            });\n            const offsets = getSideOffsets(overflow, rects.floating);\n            return {\n              data: {\n                escapedOffsets: offsets,\n                escaped: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        default:\n          {\n            return {};\n          }\n      }\n    }\n  };\n};\n\nfunction getBoundingRect(rects) {\n  const minX = min(...rects.map(rect => rect.left));\n  const minY = min(...rects.map(rect => rect.top));\n  const maxX = max(...rects.map(rect => rect.right));\n  const maxY = max(...rects.map(rect => rect.bottom));\n  return {\n    x: minX,\n    y: minY,\n    width: maxX - minX,\n    height: maxY - minY\n  };\n}\nfunction getRectsByLine(rects) {\n  const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n  const groups = [];\n  let prevRect = null;\n  for (let i = 0; i < sortedRects.length; i++) {\n    const rect = sortedRects[i];\n    if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n      groups.push([rect]);\n    } else {\n      groups[groups.length - 1].push(rect);\n    }\n    prevRect = rect;\n  }\n  return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'inline',\n    options,\n    async fn(state) {\n      const {\n        placement,\n        elements,\n        rects,\n        platform,\n        strategy\n      } = state;\n      // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n      // ClientRect's bounds, despite the event listener being triggered. A\n      // padding of 2 seems to handle this issue.\n      const {\n        padding = 2,\n        x,\n        y\n      } = evaluate(options, state);\n      const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n      const clientRects = getRectsByLine(nativeClientRects);\n      const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n      const paddingObject = getPaddingObject(padding);\n      function getBoundingClientRect() {\n        // There are two rects and they are disjoined.\n        if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n          // Find the first rect in which the point is fully inside.\n          return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n        }\n\n        // There are 2 or more connected rects.\n        if (clientRects.length >= 2) {\n          if (getSideAxis(placement) === 'y') {\n            const firstRect = clientRects[0];\n            const lastRect = clientRects[clientRects.length - 1];\n            const isTop = getSide(placement) === 'top';\n            const top = firstRect.top;\n            const bottom = lastRect.bottom;\n            const left = isTop ? firstRect.left : lastRect.left;\n            const right = isTop ? firstRect.right : lastRect.right;\n            const width = right - left;\n            const height = bottom - top;\n            return {\n              top,\n              bottom,\n              left,\n              right,\n              width,\n              height,\n              x: left,\n              y: top\n            };\n          }\n          const isLeftSide = getSide(placement) === 'left';\n          const maxRight = max(...clientRects.map(rect => rect.right));\n          const minLeft = min(...clientRects.map(rect => rect.left));\n          const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n          const top = measureRects[0].top;\n          const bottom = measureRects[measureRects.length - 1].bottom;\n          const left = minLeft;\n          const right = maxRight;\n          const width = right - left;\n          const height = bottom - top;\n          return {\n            top,\n            bottom,\n            left,\n            right,\n            width,\n            height,\n            x: left,\n            y: top\n          };\n        }\n        return fallback;\n      }\n      const resetRects = await platform.getElementRects({\n        reference: {\n          getBoundingClientRect\n        },\n        floating: elements.floating,\n        strategy\n      });\n      if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n        return {\n          reset: {\n            rects: resetRects\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n  const {\n    placement,\n    platform,\n    elements\n  } = state;\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n  const side = getSide(placement);\n  const alignment = getAlignment(placement);\n  const isVertical = getSideAxis(placement) === 'y';\n  const mainAxisMulti = ['left', 'top'].includes(side) ? -1 : 1;\n  const crossAxisMulti = rtl && isVertical ? -1 : 1;\n  const rawValue = evaluate(options, state);\n  let {\n    mainAxis,\n    crossAxis,\n    alignmentAxis\n  } = typeof rawValue === 'number' ? {\n    mainAxis: rawValue,\n    crossAxis: 0,\n    alignmentAxis: null\n  } : {\n    mainAxis: 0,\n    crossAxis: 0,\n    alignmentAxis: null,\n    ...rawValue\n  };\n  if (alignment && typeof alignmentAxis === 'number') {\n    crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n  }\n  return isVertical ? {\n    x: crossAxis * crossAxisMulti,\n    y: mainAxis * mainAxisMulti\n  } : {\n    x: mainAxis * mainAxisMulti,\n    y: crossAxis * crossAxisMulti\n  };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n  if (options === void 0) {\n    options = 0;\n  }\n  return {\n    name: 'offset',\n    options,\n    async fn(state) {\n      var _middlewareData$offse, _middlewareData$arrow;\n      const {\n        x,\n        y,\n        placement,\n        middlewareData\n      } = state;\n      const diffCoords = await convertValueToCoords(state, options);\n\n      // If the placement is the same and the arrow caused an alignment offset\n      // then we don't need to change the positioning coordinates.\n      if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n        return {};\n      }\n      return {\n        x: x + diffCoords.x,\n        y: y + diffCoords.y,\n        data: {\n          ...diffCoords,\n          placement\n        }\n      };\n    }\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'shift',\n    options,\n    async fn(state) {\n      const {\n        x,\n        y,\n        placement\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = false,\n        limiter = {\n          fn: _ref => {\n            let {\n              x,\n              y\n            } = _ref;\n            return {\n              x,\n              y\n            };\n          }\n        },\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const crossAxis = getSideAxis(getSide(placement));\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      if (checkMainAxis) {\n        const minSide = mainAxis === 'y' ? 'top' : 'left';\n        const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n        const min = mainAxisCoord + overflow[minSide];\n        const max = mainAxisCoord - overflow[maxSide];\n        mainAxisCoord = clamp(min, mainAxisCoord, max);\n      }\n      if (checkCrossAxis) {\n        const minSide = crossAxis === 'y' ? 'top' : 'left';\n        const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n        const min = crossAxisCoord + overflow[minSide];\n        const max = crossAxisCoord - overflow[maxSide];\n        crossAxisCoord = clamp(min, crossAxisCoord, max);\n      }\n      const limitedCoords = limiter.fn({\n        ...state,\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      });\n      return {\n        ...limitedCoords,\n        data: {\n          x: limitedCoords.x - x,\n          y: limitedCoords.y - y\n        }\n      };\n    }\n  };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    options,\n    fn(state) {\n      const {\n        x,\n        y,\n        placement,\n        rects,\n        middlewareData\n      } = state;\n      const {\n        offset = 0,\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true\n      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const crossAxis = getSideAxis(placement);\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      const rawOffset = evaluate(offset, state);\n      const computedOffset = typeof rawOffset === 'number' ? {\n        mainAxis: rawOffset,\n        crossAxis: 0\n      } : {\n        mainAxis: 0,\n        crossAxis: 0,\n        ...rawOffset\n      };\n      if (checkMainAxis) {\n        const len = mainAxis === 'y' ? 'height' : 'width';\n        const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n        const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n        if (mainAxisCoord < limitMin) {\n          mainAxisCoord = limitMin;\n        } else if (mainAxisCoord > limitMax) {\n          mainAxisCoord = limitMax;\n        }\n      }\n      if (checkCrossAxis) {\n        var _middlewareData$offse, _middlewareData$offse2;\n        const len = mainAxis === 'y' ? 'width' : 'height';\n        const isOriginSide = ['top', 'left'].includes(getSide(placement));\n        const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n        const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n        if (crossAxisCoord < limitMin) {\n          crossAxisCoord = limitMin;\n        } else if (crossAxisCoord > limitMax) {\n          crossAxisCoord = limitMax;\n        }\n      }\n      return {\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      };\n    }\n  };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'size',\n    options,\n    async fn(state) {\n      const {\n        placement,\n        rects,\n        platform,\n        elements\n      } = state;\n      const {\n        apply = () => {},\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const side = getSide(placement);\n      const alignment = getAlignment(placement);\n      const isYAxis = getSideAxis(placement) === 'y';\n      const {\n        width,\n        height\n      } = rects.floating;\n      let heightSide;\n      let widthSide;\n      if (side === 'top' || side === 'bottom') {\n        heightSide = side;\n        widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n      } else {\n        widthSide = side;\n        heightSide = alignment === 'end' ? 'top' : 'bottom';\n      }\n      const overflowAvailableHeight = height - overflow[heightSide];\n      const overflowAvailableWidth = width - overflow[widthSide];\n      const noShift = !state.middlewareData.shift;\n      let availableHeight = overflowAvailableHeight;\n      let availableWidth = overflowAvailableWidth;\n      if (isYAxis) {\n        const maximumClippingWidth = width - overflow.left - overflow.right;\n        availableWidth = alignment || noShift ? min(overflowAvailableWidth, maximumClippingWidth) : maximumClippingWidth;\n      } else {\n        const maximumClippingHeight = height - overflow.top - overflow.bottom;\n        availableHeight = alignment || noShift ? min(overflowAvailableHeight, maximumClippingHeight) : maximumClippingHeight;\n      }\n      if (noShift && !alignment) {\n        const xMin = max(overflow.left, 0);\n        const xMax = max(overflow.right, 0);\n        const yMin = max(overflow.top, 0);\n        const yMax = max(overflow.bottom, 0);\n        if (isYAxis) {\n          availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n        } else {\n          availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n        }\n      }\n      await apply({\n        ...state,\n        availableWidth,\n        availableHeight\n      });\n      const nextDimensions = await platform.getDimensions(elements.floating);\n      if (width !== nextDimensions.width || height !== nextDimensions.height) {\n        return {\n          reset: {\n            rects: true\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n","function getNodeName(node) {\n  if (isNode(node)) {\n    return (node.nodeName || '').toLowerCase();\n  }\n  // Mocked nodes in testing environments may not be instances of Node. By\n  // returning `#document` an infinite loop won't occur.\n  // https://github.com/floating-ui/floating-ui/issues/2317\n  return '#document';\n}\nfunction getWindow(node) {\n  var _node$ownerDocument;\n  return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n  var _ref;\n  return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n  return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n  return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n  return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n  // Browsers without `ShadowRoot` support.\n  if (typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n  return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nfunction isOverflowElement(element) {\n  const {\n    overflow,\n    overflowX,\n    overflowY,\n    display\n  } = getComputedStyle(element);\n  return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !['inline', 'contents'].includes(display);\n}\nfunction isTableElement(element) {\n  return ['table', 'td', 'th'].includes(getNodeName(element));\n}\nfunction isContainingBlock(element) {\n  const webkit = isWebKit();\n  const css = getComputedStyle(element);\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  return css.transform !== 'none' || css.perspective !== 'none' || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || ['transform', 'perspective', 'filter'].some(value => (css.willChange || '').includes(value)) || ['paint', 'layout', 'strict', 'content'].some(value => (css.contain || '').includes(value));\n}\nfunction getContainingBlock(element) {\n  let currentNode = getParentNode(element);\n  while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    if (isContainingBlock(currentNode)) {\n      return currentNode;\n    } else {\n      currentNode = getParentNode(currentNode);\n    }\n  }\n  return null;\n}\nfunction isWebKit() {\n  if (typeof CSS === 'undefined' || !CSS.supports) return false;\n  return CSS.supports('-webkit-backdrop-filter', 'none');\n}\nfunction isLastTraversableNode(node) {\n  return ['html', 'body', '#document'].includes(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n  if (isElement(element)) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n  return {\n    scrollLeft: element.pageXOffset,\n    scrollTop: element.pageYOffset\n  };\n}\nfunction getParentNode(node) {\n  if (getNodeName(node) === 'html') {\n    return node;\n  }\n  const result =\n  // Step into the shadow DOM of the parent of a slotted node.\n  node.assignedSlot ||\n  // DOM Element detected.\n  node.parentNode ||\n  // ShadowRoot detected.\n  isShadowRoot(node) && node.host ||\n  // Fallback.\n  getDocumentElement(node);\n  return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n  const parentNode = getParentNode(node);\n  if (isLastTraversableNode(parentNode)) {\n    return node.ownerDocument ? node.ownerDocument.body : node.body;\n  }\n  if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n    return parentNode;\n  }\n  return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n  var _node$ownerDocument2;\n  if (list === void 0) {\n    list = [];\n  }\n  if (traverseIframes === void 0) {\n    traverseIframes = true;\n  }\n  const scrollableAncestor = getNearestOverflowAncestor(node);\n  const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n  const win = getWindow(scrollableAncestor);\n  if (isBody) {\n    return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], win.frameElement && traverseIframes ? getOverflowAncestors(win.frameElement) : []);\n  }\n  return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isWebKit };\n","import { rectToClientRect, autoPlacement as autoPlacement$1, shift as shift$1, flip as flip$1, size as size$1, hide as hide$1, arrow as arrow$1, inline as inline$1, limitShift as limitShift$1, computePosition as computePosition$1 } from '@floating-ui/core';\nexport { detectOverflow, offset } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle, isHTMLElement, isElement, getWindow, isWebKit, getDocumentElement, getNodeName, isOverflowElement, getNodeScroll, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n  const css = getComputedStyle(element);\n  // In testing environments, the `width` and `height` properties are empty\n  // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n  let width = parseFloat(css.width) || 0;\n  let height = parseFloat(css.height) || 0;\n  const hasOffset = isHTMLElement(element);\n  const offsetWidth = hasOffset ? element.offsetWidth : width;\n  const offsetHeight = hasOffset ? element.offsetHeight : height;\n  const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n  if (shouldFallback) {\n    width = offsetWidth;\n    height = offsetHeight;\n  }\n  return {\n    width,\n    height,\n    $: shouldFallback\n  };\n}\n\nfunction unwrapElement(element) {\n  return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n  const domElement = unwrapElement(element);\n  if (!isHTMLElement(domElement)) {\n    return createCoords(1);\n  }\n  const rect = domElement.getBoundingClientRect();\n  const {\n    width,\n    height,\n    $\n  } = getCssDimensions(domElement);\n  let x = ($ ? round(rect.width) : rect.width) / width;\n  let y = ($ ? round(rect.height) : rect.height) / height;\n\n  // 0, NaN, or Infinity should always fallback to 1.\n\n  if (!x || !Number.isFinite(x)) {\n    x = 1;\n  }\n  if (!y || !Number.isFinite(y)) {\n    y = 1;\n  }\n  return {\n    x,\n    y\n  };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n  const win = getWindow(element);\n  if (!isWebKit() || !win.visualViewport) {\n    return noOffsets;\n  }\n  return {\n    x: win.visualViewport.offsetLeft,\n    y: win.visualViewport.offsetTop\n  };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n  if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n    return false;\n  }\n  return isFixed;\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n  if (isFixedStrategy === void 0) {\n    isFixedStrategy = false;\n  }\n  const clientRect = element.getBoundingClientRect();\n  const domElement = unwrapElement(element);\n  let scale = createCoords(1);\n  if (includeScale) {\n    if (offsetParent) {\n      if (isElement(offsetParent)) {\n        scale = getScale(offsetParent);\n      }\n    } else {\n      scale = getScale(element);\n    }\n  }\n  const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n  let x = (clientRect.left + visualOffsets.x) / scale.x;\n  let y = (clientRect.top + visualOffsets.y) / scale.y;\n  let width = clientRect.width / scale.x;\n  let height = clientRect.height / scale.y;\n  if (domElement) {\n    const win = getWindow(domElement);\n    const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n    let currentWin = win;\n    let currentIFrame = currentWin.frameElement;\n    while (currentIFrame && offsetParent && offsetWin !== currentWin) {\n      const iframeScale = getScale(currentIFrame);\n      const iframeRect = currentIFrame.getBoundingClientRect();\n      const css = getComputedStyle(currentIFrame);\n      const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n      const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n      x *= iframeScale.x;\n      y *= iframeScale.y;\n      width *= iframeScale.x;\n      height *= iframeScale.y;\n      x += left;\n      y += top;\n      currentWin = getWindow(currentIFrame);\n      currentIFrame = currentWin.frameElement;\n    }\n  }\n  return rectToClientRect({\n    width,\n    height,\n    x,\n    y\n  });\n}\n\nconst topLayerSelectors = [':popover-open', ':modal'];\nfunction isTopLayer(floating) {\n  return topLayerSelectors.some(selector => {\n    try {\n      return floating.matches(selector);\n    } catch (e) {\n      return false;\n    }\n  });\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n  let {\n    elements,\n    rect,\n    offsetParent,\n    strategy\n  } = _ref;\n  const isFixed = strategy === 'fixed';\n  const documentElement = getDocumentElement(offsetParent);\n  const topLayer = elements ? isTopLayer(elements.floating) : false;\n  if (offsetParent === documentElement || topLayer && isFixed) {\n    return rect;\n  }\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  let scale = createCoords(1);\n  const offsets = createCoords(0);\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isHTMLElement(offsetParent)) {\n      const offsetRect = getBoundingClientRect(offsetParent);\n      scale = getScale(offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    }\n  }\n  return {\n    width: rect.width * scale.x,\n    height: rect.height * scale.y,\n    x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x,\n    y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y\n  };\n}\n\nfunction getClientRects(element) {\n  return Array.from(element.getClientRects());\n}\n\nfunction getWindowScrollBarX(element) {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  return getBoundingClientRect(getDocumentElement(element)).left + getNodeScroll(element).scrollLeft;\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n  const html = getDocumentElement(element);\n  const scroll = getNodeScroll(element);\n  const body = element.ownerDocument.body;\n  const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n  const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n  let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n  const y = -scroll.scrollTop;\n  if (getComputedStyle(body).direction === 'rtl') {\n    x += max(html.clientWidth, body.clientWidth) - width;\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\nfunction getViewportRect(element, strategy) {\n  const win = getWindow(element);\n  const html = getDocumentElement(element);\n  const visualViewport = win.visualViewport;\n  let width = html.clientWidth;\n  let height = html.clientHeight;\n  let x = 0;\n  let y = 0;\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n    const visualViewportBased = isWebKit();\n    if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n  const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n  const top = clientRect.top + element.clientTop;\n  const left = clientRect.left + element.clientLeft;\n  const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n  const width = element.clientWidth * scale.x;\n  const height = element.clientHeight * scale.y;\n  const x = left * scale.x;\n  const y = top * scale.y;\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n  let rect;\n  if (clippingAncestor === 'viewport') {\n    rect = getViewportRect(element, strategy);\n  } else if (clippingAncestor === 'document') {\n    rect = getDocumentRect(getDocumentElement(element));\n  } else if (isElement(clippingAncestor)) {\n    rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n  } else {\n    const visualOffsets = getVisualOffsets(element);\n    rect = {\n      ...clippingAncestor,\n      x: clippingAncestor.x - visualOffsets.x,\n      y: clippingAncestor.y - visualOffsets.y\n    };\n  }\n  return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n  const parentNode = getParentNode(element);\n  if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n    return false;\n  }\n  return getComputedStyle(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n  const cachedResult = cache.get(element);\n  if (cachedResult) {\n    return cachedResult;\n  }\n  let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n  let currentContainingBlockComputedStyle = null;\n  const elementIsFixed = getComputedStyle(element).position === 'fixed';\n  let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    const computedStyle = getComputedStyle(currentNode);\n    const currentNodeIsContaining = isContainingBlock(currentNode);\n    if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n      currentContainingBlockComputedStyle = null;\n    }\n    const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && ['absolute', 'fixed'].includes(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n    if (shouldDropCurrentNode) {\n      // Drop non-containing blocks.\n      result = result.filter(ancestor => ancestor !== currentNode);\n    } else {\n      // Record last containing block for next iteration.\n      currentContainingBlockComputedStyle = computedStyle;\n    }\n    currentNode = getParentNode(currentNode);\n  }\n  cache.set(element, result);\n  return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n  let {\n    element,\n    boundary,\n    rootBoundary,\n    strategy\n  } = _ref;\n  const elementClippingAncestors = boundary === 'clippingAncestors' ? getClippingElementAncestors(element, this._c) : [].concat(boundary);\n  const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n  const firstClippingAncestor = clippingAncestors[0];\n  const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\n    const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);\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  }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\n  return {\n    width: clippingRect.right - clippingRect.left,\n    height: clippingRect.bottom - clippingRect.top,\n    x: clippingRect.left,\n    y: clippingRect.top\n  };\n}\n\nfunction getDimensions(element) {\n  const {\n    width,\n    height\n  } = getCssDimensions(element);\n  return {\n    width,\n    height\n  };\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  const documentElement = getDocumentElement(offsetParent);\n  const isFixed = strategy === 'fixed';\n  const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  const offsets = createCoords(0);\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isOffsetParentAnElement) {\n      const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n  const x = rect.left + scroll.scrollLeft - offsets.x;\n  const y = rect.top + scroll.scrollTop - offsets.y;\n  return {\n    x,\n    y,\n    width: rect.width,\n    height: rect.height\n  };\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n  if (!isHTMLElement(element) || getComputedStyle(element).position === 'fixed') {\n    return null;\n  }\n  if (polyfill) {\n    return polyfill(element);\n  }\n  return element.offsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n  const window = getWindow(element);\n  if (!isHTMLElement(element) || isTopLayer(element)) {\n    return window;\n  }\n  let offsetParent = getTrueOffsetParent(element, polyfill);\n  while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n    offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n  }\n  if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static' && !isContainingBlock(offsetParent))) {\n    return window;\n  }\n  return offsetParent || getContainingBlock(element) || window;\n}\n\nconst getElementRects = async function (data) {\n  const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n  const getDimensionsFn = this.getDimensions;\n  return {\n    reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n    floating: {\n      x: 0,\n      y: 0,\n      ...(await getDimensionsFn(data.floating))\n    }\n  };\n};\n\nfunction isRTL(element) {\n  return getComputedStyle(element).direction === 'rtl';\n}\n\nconst platform = {\n  convertOffsetParentRelativeRectToViewportRelativeRect,\n  getDocumentElement,\n  getClippingRect,\n  getOffsetParent,\n  getElementRects,\n  getClientRects,\n  getDimensions,\n  getScale,\n  isElement,\n  isRTL\n};\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n  let io = null;\n  let timeoutId;\n  const root = getDocumentElement(element);\n  function cleanup() {\n    var _io;\n    clearTimeout(timeoutId);\n    (_io = io) == null || _io.disconnect();\n    io = null;\n  }\n  function refresh(skip, threshold) {\n    if (skip === void 0) {\n      skip = false;\n    }\n    if (threshold === void 0) {\n      threshold = 1;\n    }\n    cleanup();\n    const {\n      left,\n      top,\n      width,\n      height\n    } = element.getBoundingClientRect();\n    if (!skip) {\n      onMove();\n    }\n    if (!width || !height) {\n      return;\n    }\n    const insetTop = floor(top);\n    const insetRight = floor(root.clientWidth - (left + width));\n    const insetBottom = floor(root.clientHeight - (top + height));\n    const insetLeft = floor(left);\n    const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n    const options = {\n      rootMargin,\n      threshold: max(0, min(1, threshold)) || 1\n    };\n    let isFirstUpdate = true;\n    function handleObserve(entries) {\n      const ratio = entries[0].intersectionRatio;\n      if (ratio !== threshold) {\n        if (!isFirstUpdate) {\n          return refresh();\n        }\n        if (!ratio) {\n          timeoutId = setTimeout(() => {\n            refresh(false, 1e-7);\n          }, 100);\n        } else {\n          refresh(false, ratio);\n        }\n      }\n      isFirstUpdate = false;\n    }\n\n    // Older browsers don't support a `document` as the root and will throw an\n    // error.\n    try {\n      io = new IntersectionObserver(handleObserve, {\n        ...options,\n        // Handle <iframe>s\n        root: root.ownerDocument\n      });\n    } catch (e) {\n      io = new IntersectionObserver(handleObserve, options);\n    }\n    io.observe(element);\n  }\n  refresh(true);\n  return cleanup;\n}\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    ancestorScroll = true,\n    ancestorResize = true,\n    elementResize = typeof ResizeObserver === 'function',\n    layoutShift = typeof IntersectionObserver === 'function',\n    animationFrame = false\n  } = options;\n  const referenceEl = unwrapElement(reference);\n  const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...getOverflowAncestors(floating)] : [];\n  ancestors.forEach(ancestor => {\n    ancestorScroll && ancestor.addEventListener('scroll', update, {\n      passive: true\n    });\n    ancestorResize && ancestor.addEventListener('resize', update);\n  });\n  const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n  let reobserveFrame = -1;\n  let resizeObserver = null;\n  if (elementResize) {\n    resizeObserver = new ResizeObserver(_ref => {\n      let [firstEntry] = _ref;\n      if (firstEntry && firstEntry.target === referenceEl && resizeObserver) {\n        // Prevent update loops when using the `size` middleware.\n        // https://github.com/floating-ui/floating-ui/issues/1740\n        resizeObserver.unobserve(floating);\n        cancelAnimationFrame(reobserveFrame);\n        reobserveFrame = requestAnimationFrame(() => {\n          var _resizeObserver;\n          (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);\n        });\n      }\n      update();\n    });\n    if (referenceEl && !animationFrame) {\n      resizeObserver.observe(referenceEl);\n    }\n    resizeObserver.observe(floating);\n  }\n  let frameId;\n  let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n  if (animationFrame) {\n    frameLoop();\n  }\n  function frameLoop() {\n    const nextRefRect = getBoundingClientRect(reference);\n    if (prevRefRect && (nextRefRect.x !== prevRefRect.x || nextRefRect.y !== prevRefRect.y || nextRefRect.width !== prevRefRect.width || nextRefRect.height !== prevRefRect.height)) {\n      update();\n    }\n    prevRefRect = nextRefRect;\n    frameId = requestAnimationFrame(frameLoop);\n  }\n  update();\n  return () => {\n    var _resizeObserver2;\n    ancestors.forEach(ancestor => {\n      ancestorScroll && ancestor.removeEventListener('scroll', update);\n      ancestorResize && ancestor.removeEventListener('resize', update);\n    });\n    cleanupIo == null || cleanupIo();\n    (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();\n    resizeObserver = null;\n    if (animationFrame) {\n      cancelAnimationFrame(frameId);\n    }\n  };\n}\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = autoPlacement$1;\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = shift$1;\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = flip$1;\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = size$1;\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = hide$1;\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = arrow$1;\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = inline$1;\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = limitShift$1;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n */\nconst computePosition = (reference, floating, options) => {\n  // This caches the expensive `getClippingElementAncestors` function so that\n  // multiple lifecycle resets re-use the same result. It only lives for a\n  // single call. If other functions become expensive, we can add them as well.\n  const cache = new Map();\n  const mergedOptions = {\n    platform,\n    ...options\n  };\n  const platformWithCache = {\n    ...mergedOptions.platform,\n    _c: cache\n  };\n  return computePosition$1(reference, floating, {\n    ...mergedOptions,\n    platform: platformWithCache\n  });\n};\n\nexport { arrow, autoPlacement, autoUpdate, computePosition, flip, hide, inline, limitShift, platform, shift, size };\n","import { computePosition, arrow, shift, offset, flip } from '@floating-ui/dom'\n\n/**\n * Front End Hotspot Class\n */\nexport default class Hotspot\n{\n    /**\n     * Constructor\n     *\n     * @param {HTMLElement} element Hotspot element\n     */\n    constructor(element)\n    {\n        this.element = element\n\n        this.button = this.element.querySelector('.hotspot__button')\n        this.content = this.element.querySelector(`#${ this.button.getAttribute('aria-describedby') }`)\n        this.arrow = this.content.querySelector('.hotspot__arrow')\n\n        this.positionData = JSON.parse(this.element.getAttribute('data-hotspot-positions'))\n\n        this.bind()\n    }\n\n    /**\n     * Bind event handlers\n     */\n    bind()\n    {\n        this.button.addEventListener('click', async event => {\n            event.preventDefault()\n            await this.togglePopover()\n        })\n    }\n\n    /**\n     * Get the default X position\n     *\n     * @returns {Number}\n     */\n    getDefaultXPosition()\n    {\n        return this.positionData.default[0]\n    }\n\n    /**\n     * Get the default Y position\n     * @returns {Number}\n     */\n    getDefaultYPosition()\n    {\n        return this.positionData.default[1]\n    }\n\n    /**\n     * Get the X position for a certain media-query\n     * If none found - use the default\n     *\n     * @param {String|undefined} mediaQuery\n     * @returns {Number}\n     */\n    getXPositionForMediaQuery(mediaQuery)\n    {\n        if (typeof mediaQuery == 'undefined') {\n            return this.getDefaultXPosition()\n        }\n\n        for (let maxWidth in this.positionData) {\n            if (mediaQuery == maxWidth) {\n                return this.positionData[maxWidth][0]\n            }\n        }\n\n        return this.getDefaultXPosition()\n    }\n\n    /**\n     * Get the Y position for a certain media-query\n     * If none found - use the default\n     *\n     * @param {String|undefined} mediaQuery\n     * @returns {Number}\n     */\n    getYPositionForMediaQuery(mediaQuery)\n    {\n        if (typeof mediaQuery == 'undefined') {\n            return this.getDefaultYPosition()\n        }\n\n        for (let maxWidth in this.positionData) {\n            if (mediaQuery == maxWidth) {\n                return this.positionData[maxWidth][1]\n            }\n        }\n\n        return this.getDefaultYPosition()\n    }\n\n    /**\n     * Set the x/y position for the hotspot for a given media query\n     * If the hotspot is outside the bounding box - hide it\n     *\n     * @param {String|undefined} mediaQuery\n     * @returns {undefined}\n     */\n    setPositionStyles(mediaQuery)\n    {\n        const x = this.getXPositionForMediaQuery(mediaQuery)\n        const y = this.getYPositionForMediaQuery(mediaQuery)\n\n        if (x == -1 || y == -1) {\n            this.hide()\n            return\n        }\n\n        this.element.style.left = `${x}%`\n        this.element.style.top = `${y}%`\n\n        this.show()\n    }\n\n    /**\n     * Show the hotspot\n     */\n    show()\n    {\n        this.element.style.display = 'list-item'\n    }\n\n    /**\n     * Hide the hotspot\n     */\n    hide()\n    {\n        this.element.style.display = 'none'\n    }\n\n    /**\n     * Toggle the hotspot content popover\n     *\n     * @returns {undefined}\n     */\n    async togglePopover()\n    {\n        if (this.content.style.display === 'block') {\n            this.content.style.display = 'none'\n            this.content.classList.remove('hotspot__content--active')\n            return\n        }\n\n        this.content.style.display = this.content.style.display === 'block' ? 'none' : 'block'\n\n        const openHotspots = document.querySelectorAll('.hotspot__content--active')\n\n        for (let hotspot of openHotspots) {\n            hotspot.style.display = 'none'\n            hotspot.classList.remove('hotspot__content--active')\n        }\n\n        const { x, y, placement, middlewareData: { arrow: arrowData } } = await computePosition(\n            this.button,\n            this.content,\n            {\n                placement: 'right',\n                middleware: [\n                    offset(25),\n                    flip(),\n                    shift(),\n                    arrow({\n                        element: this.arrow,\n                    }),\n                ]\n            }\n        )\n\n        this.setPlacementClass(placement)\n\n        this.arrow.style.left = arrowData.x != null ? `${arrowData.x}px` : ''\n        this.arrow.style.top = arrowData.y != null ? `${arrowData.y}px` : ''\n\n        this.content.classList.add('hotspot__content--active')\n        this.content.style.top = `${y}px`\n        this.content.style.left = `${x}px`\n    }\n\n    /**\n     * Set / Unset a placement class on the hotspot\n     *\n     * @param {String} placement placement from Floating UI\n     */\n    setPlacementClass(placement)\n    {\n        const base = 'hotspot__content-position'\n\n        this.content.classList.remove(\n            `${base}--top`,\n            `${base}--top-start`,\n            `${base}--top-end`,\n            `${base}--right`,\n            `${base}--right-start`,\n            `${base}--right-end`,\n            `${base}--bottom`,\n            `${base}--bottom-start`,\n            `${base}--bottom-end`,\n            `${base}--left`,\n            `${base}--left-start`,\n            `${base}--left-end`,\n        )\n\n        this.content.classList.add(`${base}--${placement}`)\n    }\n}\n","import Hotspot from \"./Hotspot\"\n\n/**\n * Hotspots manager class\n */\nexport default class Hotspots\n{\n    /**\n     * Constructor\n     *\n     * @param {HTMLElement} element The wrapping image div\n     */\n    constructor(element)\n    {\n        this.element = element\n        this.hotspots = []\n        this.currentSrc = null\n        this.mediaQueries = []\n\n        this.registerHotspots()\n\n        const pictureElement = this.element.querySelector('picture');\n\n        // We only care if the crop change\n        if (pictureElement) {\n            this.setupPictureChangeObserver()\n        } else {\n            this.repositionHotspots()\n        }\n    }\n\n    /**\n     * Register the hotspots into an array\n     */\n    registerHotspots()\n    {\n        const hotspots = this.element.querySelectorAll('ul.hotspots > li.hotspot')\n\n        for (let hotspot of hotspots) {\n            this.hotspots.push(new Hotspot(hotspot))\n        }\n    }\n\n    /**\n     * Setup the logic to change the positions of hotspots if the image is a\n     * picture element - ie when the image crop changes\n     */\n    setupPictureChangeObserver()\n    {\n        const picture = this.element.querySelector('picture')\n        const sources = picture.querySelectorAll('source')\n\n        let initialMediaMatch\n\n        for (const source of sources) {\n            let mediaQuery = source.getAttribute('media')\n            let mq = window.matchMedia(mediaQuery)\n\n            this.mediaQueries.push(mq)\n\n            if (mq.matches) {\n                initialMediaMatch = mq\n            }\n\n            mq.addEventListener('change', event => {\n                let updated = false\n\n                // Loop through the sorted (hopefully) media queries - the first match should\n                // be the one we're interested in\n                for (const _mq of this.mediaQueries) {\n                    if (_mq.matches) {\n                        this.repositionHotspots(_mq.media)\n                        updated = true\n                        break\n                    }\n                }\n\n                if (!updated) {\n                    this.repositionHotspots()\n                }\n            })\n        }\n\n        // Sort the queries smallest size first\n        this.mediaQueries.sort((mq1, mq2) => {\n            const mq1Size = mq1.media.match(/\\d+/)[0]\n            const mq2Size = mq2.media.match(/\\d+/)[0]\n\n            return mq1Size - mq2Size\n        })\n\n        // Loop through the sorted (hopefully) media queries - the first match should\n        // be the one we're interested in\n        for (const _mq of this.mediaQueries) {\n            if (_mq.matches) {\n                initialMediaMatch = _mq\n                break\n            }\n        }\n\n        this.repositionHotspots(initialMediaMatch?.media)\n    }\n\n    /**\n     * Reposition the hotspots - with an optional mediaquery\n     * @param {String|undefined} forMediaQuery\n     */\n    repositionHotspots(forMediaQuery)\n    {\n        for (let hotspot of this.hotspots) {\n            hotspot.setPositionStyles(forMediaQuery)\n        }\n    }\n}\n","import Hotspots from './src/Hotspots'\n\nwindow.D3R = window.D3R || {}\nwindow.D3R.Hotspots = []\n\nwindow.D3R.InitHotspots = () => {\n    const hotspots = document.querySelectorAll('.image-with-hotspots');\n\n    for (let imageWithHotspots of hotspots) {\n        window.D3R.Hotspots.push(new Hotspots(imageWithHotspots))\n    }\n}\n\nwindow.D3R.InitHotspots()\n"],"names":["Math","min","max","round","createCoords","floor","v","x","y","oppositeSideMap","left","right","bottom","top","oppositeAlignmentMap","start","end","clamp","value","param","placement","split","axis","getAxisLength","includes","getAlignmentAxis","replace","alignment","getOppositePlacement","side","padding","expandPaddingObject","rect","width","height","computeCoordsFromPlacement","_ref","rtl","reference","floating","sideAxis","alignmentAxis","alignLength","isVertical","commonX","commonY","commonAlign","coords","async","detectOverflow","state","options","_await$platform$isEle","platform","rects","elements","strategy","boundary","rootBoundary","elementContext","altBoundary","paddingObject","element","clippingClientRect","getClippingRect","isElement","contextElement","getDocumentElement","offsetParent","getOffsetParent","offsetScale","getScale","elementClientRect","convertOffsetParentRelativeRectToViewportRelativeRect","offset","name","fn","_middlewareData$offse","_middlewareData$arrow","middlewareData","diffCoords","isRTL","mainAxisMulti","crossAxisMulti","rawValue","mainAxis","crossAxis","convertValueToCoords","arrow","alignmentOffset","data","getNodeName","node","isNode","nodeName","toLowerCase","getWindow","_node$ownerDocument","ownerDocument","defaultView","window","document","documentElement","Node","Element","isHTMLElement","HTMLElement","isShadowRoot","ShadowRoot","isOverflowElement","overflow","overflowX","overflowY","display","getComputedStyle","test","isTableElement","isContainingBlock","webkit","isWebKit","css","transform","perspective","containerType","backdropFilter","filter","some","willChange","contain","CSS","supports","isLastTraversableNode","getNodeScroll","scrollLeft","scrollTop","pageXOffset","pageYOffset","getParentNode","result","assignedSlot","parentNode","host","getNearestOverflowAncestor","body","list","traverseIframes","_node$ownerDocument2","scrollableAncestor","isBody","win","concat","visualViewport","frameElement","getCssDimensions","parseFloat","hasOffset","offsetWidth","offsetHeight","shouldFallback","$","unwrapElement","domElement","getBoundingClientRect","Number","isFinite","noOffsets","getVisualOffsets","offsetLeft","offsetTop","includeScale","isFixedStrategy","clientRect","scale","visualOffsets","isFixed","floatingOffsetParent","shouldAddVisualOffsets","offsetWin","currentWin","currentIFrame","iframeScale","iframeRect","clientLeft","paddingLeft","clientTop","paddingTop","topLayerSelectors","isTopLayer","selector","matches","e","getWindowScrollBarX","getClientRectFromClippingAncestor","clippingAncestor","html","clientWidth","clientHeight","visualViewportBased","getViewportRect","scroll","scrollWidth","scrollHeight","direction","getDocumentRect","getInnerBoundingClientRect","hasFixedPositionAncestor","stopNode","position","getRectRelativeToOffsetParent","isOffsetParentAnElement","offsets","offsetRect","getTrueOffsetParent","polyfill","currentNode","getContainingBlock","topLayer","clippingAncestors","cache","cachedResult","get","el","currentContainingBlockComputedStyle","elementIsFixed","computedStyle","currentNodeIsContaining","ancestor","set","getClippingElementAncestors","this","_c","firstClippingAncestor","clippingRect","reduce","accRect","getElementRects","getOffsetParentFn","getDimensionsFn","getDimensions","getClientRects","Array","from","checkMainAxis","checkCrossAxis","limiter","detectOverflowOptions","mainAxisCoord","crossAxisCoord","maxSide","limitedCoords","_middlewareData$flip","initialPlacement","fallbackPlacements","specifiedFallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","flipAlignment","isBasePlacement","oppositePlacement","getExpandedPlacements","push","isStart","lr","rl","tb","bt","getSideList","map","getOppositeAxisPlacements","placements","overflows","overflowsData","flip","sides","length","mainAlignmentSide","every","_middlewareData$flip2","_overflowsData$filter","nextIndex","index","nextPlacement","reset","resetPlacement","d","sort","a","b","_overflowsData$map$so","acc","arrowDimensions","isYAxis","minProp","maxProp","clientProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","largestPossiblePadding","minPadding","maxPadding","min$1","center","shouldAddOffset","centerOffset","Map","mergedOptions","platformWithCache","config","middleware","validMiddleware","Boolean","statefulPlacement","resetCount","i","nextX","nextY","computePosition","_regeneratorRuntime","t","r","Object","prototype","n","hasOwnProperty","o","defineProperty","Symbol","iterator","c","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","type","arg","call","h","l","f","s","GeneratorFunction","GeneratorFunctionPrototype","p","getPrototypeOf","values","g","defineIteratorMethods","forEach","_invoke","AsyncIterator","invoke","_typeof","resolve","__await","then","callInvokeWithMethodAndArg","Error","done","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","return","TypeError","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","isNaN","displayName","isGeneratorFunction","constructor","mark","setPrototypeOf","__proto__","awrap","Promise","keys","reverse","pop","prev","charAt","slice","stop","rval","handle","complete","finish","catch","delegateYield","asyncGeneratorStep","gen","reject","_next","_throw","key","info","error","_asyncToGenerator","self","args","arguments","apply","err","undefined","_defineProperties","target","props","descriptor","_toPropertyKey","toPrimitive","String","_toPrimitive","Hotspot","Constructor","instance","_classCallCheck","button","querySelector","content","getAttribute","positionData","JSON","parse","bind","protoProps","_this","addEventListener","_callee","event","_context","preventDefault","togglePopover","_x","default","mediaQuery","getDefaultXPosition","maxWidth","getDefaultYPosition","getXPositionForMediaQuery","getYPositionForMediaQuery","style","show","hide","_togglePopover","_callee2","openHotspots","_iterator","_step","hotspot","_yield$computePositio","arrowData","_context2","classList","remove","querySelectorAll","_createForOfIteratorHelper","shift","setPlacementClass","add","base","Hotspots","hotspots","currentSrc","mediaQueries","registerHotspots","setupPictureChangeObserver","repositionHotspots","_initialMediaMatch","initialMediaMatch","_step2","_iterator2","mq","matchMedia","_step4","updated","_iterator4","_mq","media","mq1","mq2","match","_step3","_iterator3","forMediaQuery","_step5","_iterator5","setPositionStyles","D3R","InitHotspots","imageWithHotspots"],"sourceRoot":""}