{
  "version": 3,
  "sources": ["../../assets/js/popover.js", "../../assets/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs", "../../assets/node_modules/@floating-ui/core/dist/floating-ui.core.mjs", "../../assets/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs", "../../assets/node_modules/@floating-ui/dom/dist/floating-ui.dom.esm.js", "../../assets/js/select.js", "../../assets/js/loading.js", "../../assets/js/tooltip.js", "../../assets/js/flash.js", "../../assets/js/index.js"],
  "sourcesContent": ["import { ViewHook } from \"phoenix_live_view\";\nimport {\n  computePosition,\n  offset,\n  flip,\n  shift,\n  autoUpdate,\n  size,\n} from \"@floating-ui/dom\";\n\nexport default class Popover extends ViewHook {\n  expanded = false;\n  name = \"popover\";\n  placement = \"bottom-start\";\n  defaultPlacement = \"bottom-start\";\n  activePlacement = \"bottom-start\";\n  strategy = \"absolute\"; // floating-ui strategy\n  event_trigger = \"click\"; // \"click\" | \"hover\" | \"focus\"\n  currentIndex = -1;\n  expand_popover = false; // expand popover to match width of trigger\n  focus_selected = true;\n\n  #outside_listener;\n  #clear_floating;\n\n  mounted() {\n    this.defaultPlacement = this.el.dataset.placement || this.placement;\n    this.activePlacement = this.defaultPlacement;\n    this.placement = this.defaultPlacement;\n    this.strategy = this.el.dataset.strategy || this.strategy;\n    this.event_trigger = this.el.dataset.trigger || this.event_trigger;\n    this.cacheElements();\n\n    this.refreshExpanded();\n\n    if (this.event_trigger === \"click\") {\n      // Trigger click handler\n      this.trigger?.addEventListener(\"click\", () => {\n        if (this.expanded) {\n          this.closePopover();\n        } else {\n          this.openPopover({ placement: this.getOpenPlacement() });\n        }\n\n        this.refreshExpanded();\n      });\n    } else if (this.event_trigger === \"hover\") {\n      // Trigger hover handler\n      this.trigger?.addEventListener(\"mouseenter\", () => {\n        this.openPopover();\n        this.refreshExpanded();\n      });\n\n      this.trigger?.addEventListener(\"mouseleave\", () => {\n        this.closePopover();\n        this.refreshExpanded();\n      });\n    } else if (this.event_trigger === \"focus\") {\n      // Trigger focus handler\n      this.trigger?.addEventListener(\"focus\", () => {\n        this.openPopover();\n        this.refreshExpanded();\n      });\n\n      this.trigger?.addEventListener(\"blur\", () => {\n        this.closePopover();\n        this.refreshExpanded();\n      });\n    }\n\n    // Keydown handler\n    this.el.addEventListener(\"keydown\", this.handleContainerKeyDown.bind(this));\n    this.trigger?.addEventListener(\n      \"keydown\",\n      this.handleTriggerKeyDown.bind(this),\n    );\n\n    this.#outside_listener = (event) => {\n      const target = event.target;\n      const clickedOnTrigger = this.trigger?.contains(target);\n      const clickedOnPopup = this.popup?.contains(target);\n      if (!clickedOnTrigger && !clickedOnPopup && this.expanded) {\n        this.closePopover();\n      }\n    };\n\n    this.initFloatingUI();\n  }\n\n  listenOutside() {\n    document.addEventListener(\"click\", this.#outside_listener);\n  }\n\n  removeOutsideListener() {\n    document.removeEventListener(\"click\", this.#outside_listener);\n  }\n\n  updated() {\n    this.cacheElements();\n    this.restoreExpanded();\n    this.refreshFloatingUI();\n  }\n\n  destroyed() {\n    document.removeEventListener(\"click\", this.#outside_listener);\n\n    if (this.#clear_floating) {\n      this.#clear_floating();\n    }\n  }\n\n  handleTriggerKeyDown(event) {\n    if (!this.expanded && (event.key === \"ArrowDown\" || event.key === \"ArrowUp\")) {\n      event.preventDefault();\n      this.openPopover({ placement: this.getPlacementForKey(event.key) });\n      return;\n    }\n\n    if (!this.expanded && this.isPrintableKeyEvent(event)) {\n      const handled = this.handleTriggerTypeahead(event);\n      if (handled) {\n        event.preventDefault();\n      }\n    }\n  }\n\n  handleContainerKeyDown(event) {\n    if (!this.expanded) return;\n\n    switch (event.key) {\n      case \"Escape\":\n        event.preventDefault();\n        this.closePopover();\n        this.trigger?.focus();\n        break;\n      case \"ArrowDown\":\n      case \"ArrowUp\":\n      case \"Home\":\n      case \"End\":\n        this.handleArrowNavigation(event);\n        break;\n      case \"Enter\":\n        this.handleKeyEnter(event);\n\n        break;\n      case \"Tab\":\n        this.closePopover();\n        break;\n      default:\n        if (this.isPrintableKeyEvent(event)) {\n          const handled = this.handlePrintableKey(event);\n          if (handled) {\n            event.preventDefault();\n          }\n        }\n    }\n  }\n\n  handleKeyEnter(event) {\n    // see select.js for example\n  }\n\n  handleTriggerTypeahead(_event) {\n    return false;\n  }\n\n  handlePrintableKey(_event) {\n    return false;\n  }\n\n  handleArrowNavigation(event) {\n    if (!this.expanded) return;\n\n    const visibleItems = this.getNavigableItems();\n    const itemCount = visibleItems.length;\n\n    if (itemCount === 0) return;\n\n    event.preventDefault();\n\n    let newIndex = this.currentIndex;\n\n    switch (event.key) {\n      case \"ArrowDown\":\n        newIndex = (this.currentIndex + 1) % itemCount;\n        break;\n      case \"ArrowUp\":\n        newIndex = (this.currentIndex - 1 + itemCount) % itemCount;\n        break;\n      case \"Home\":\n        newIndex = 0;\n        break;\n      case \"End\":\n        newIndex = itemCount - 1;\n        break;\n    }\n\n    this.setCurrentItemByIndex(newIndex, visibleItems);\n  }\n\n  initFloatingUI() {\n    if (this.#clear_floating) {\n      this.#clear_floating();\n    }\n    if (!this.trigger || !this.popup) {\n      return;\n    }\n    this.#clear_floating = autoUpdate(this.trigger, this.popup, () => {\n      this.refreshFloatingUI();\n    });\n  }\n\n  refreshFloatingUI() {\n    const expand_popover = this.expand_popover;\n    const popup = this.popup;\n    computePosition(this.trigger, this.popup, {\n      placement: this.activePlacement,\n      strategy: this.strategy,\n      middleware: [\n        offset(8),\n        flip(),\n        shift(),\n        size({\n          apply({ rects }) {\n            if (expand_popover) {\n              popup.style.width = `${rects.reference.width}px`;\n            }\n          },\n        }),\n      ],\n    }).then(({ x, y, strategy }) => {\n      Object.assign(this.popup.style, {\n        left: `${x}px`,\n        top: `${y}px`,\n        position: strategy,\n      });\n    });\n  }\n\n  closePopover() {\n    this.trigger?.setAttribute(\"aria-expanded\", \"false\");\n    this.popup?.setAttribute(\"aria-hidden\", \"true\");\n\n    this.expanded = false;\n    this.currentIndex = -1;\n    this.activePlacement = this.defaultPlacement;\n\n    this.onPopupClosed();\n    this.removeOutsideListener();\n  }\n\n  onPopupOpened() {}\n\n  onPopupClosed() {\n    if (\n      this.popup?.contains(document.activeElement) ||\n      this.trigger?.contains(document.activeElement)\n    ) {\n      this.focusElement(this.trigger);\n    }\n  }\n\n  openPopover(options = {}) {\n    this.activePlacement = options.placement || this.getOpenPlacement();\n    this.trigger?.setAttribute(\"aria-expanded\", \"true\");\n    this.popup?.setAttribute(\"aria-hidden\", \"false\");\n\n    this.focusElement(this.popup);\n    this.expanded = true;\n    this.currentIndex = this.getInitialNavigationIndex(this.getNavigableItems());\n\n    this.onPopupOpened();\n    this.listenOutside();\n  }\n\n  log(msg, data) {\n    console.log(`${this.name}: ${msg}`, data);\n  }\n\n  refreshExpanded() {\n    this.expanded = this.trigger?.getAttribute(\"aria-expanded\") == \"true\";\n  }\n\n  restoreExpanded() {\n    if (this.expanded) {\n      this.openPopover({ placement: this.activePlacement });\n    } else {\n      this.closePopover();\n    }\n  }\n\n  cacheElements() {\n    this.trigger = this.el.querySelector(\"[aria-haspopup],[role='combobox']\");\n    this.popup = this.el.querySelector(\"[role='menu'],[role='listbox']\");\n    this.items =\n      this.popup?.querySelectorAll(\"[role='option'],[role='menuitem']\") ?? [];\n  }\n\n  getOpenPlacement() {\n    return this.defaultPlacement;\n  }\n\n  getPlacementForKey(_key) {\n    return this.defaultPlacement;\n  }\n\n  getNavigableItems() {\n    return Array.from(this.items).filter(\n      (item) =>\n        item.style.display !== \"none\" &&\n        item.getAttribute(\"aria-disabled\") !== \"true\" &&\n        item.getAttribute(\"aria-hidden\") !== \"true\",\n    );\n  }\n\n  getInitialNavigationIndex(items) {\n    return items.length > 0 ? 0 : -1;\n  }\n\n  setCurrentItemByIndex(index, items = this.getNavigableItems()) {\n    const itemCount = items.length;\n    if (itemCount === 0 || index < 0 || index >= itemCount) {\n      this.currentIndex = -1;\n      return null;\n    }\n\n    items.forEach((item, itemIndex) => {\n      if (itemIndex === index) {\n        item.setAttribute(\"aria-selected\", \"true\");\n        item.setAttribute(\"tabindex\", \"0\");\n        if (this.focus_selected) {\n          this.focusElement(item);\n        }\n        this.scrollItemIntoView(item);\n      } else {\n        item.setAttribute(\"tabindex\", \"-1\");\n        item.removeAttribute(\"aria-selected\");\n      }\n    });\n\n    this.currentIndex = index;\n    return items[index];\n  }\n\n  isPrintableKeyEvent(event) {\n    return (\n      event.key.length === 1 &&\n      !event.altKey &&\n      !event.ctrlKey &&\n      !event.metaKey\n    );\n  }\n\n  focusElement(element) {\n    if (!element) {\n      return;\n    }\n\n    if (typeof element.focus === \"function\") {\n      try {\n        element.focus({ preventScroll: true });\n      } catch {\n        element.focus();\n      }\n    }\n  }\n\n  scrollItemIntoView(item) {\n    if (!item || !this.popup) {\n      return;\n    }\n\n    const popupRect = this.popup.getBoundingClientRect();\n    const itemRect = item.getBoundingClientRect();\n\n    if (itemRect.top < popupRect.top) {\n      this.popup.scrollTop -= popupRect.top - itemRect.top;\n    } else if (itemRect.bottom > popupRect.bottom) {\n      this.popup.scrollTop += itemRect.bottom - popupRect.bottom;\n    }\n  }\n}\n", "/**\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}\nconst yAxisSides = /*#__PURE__*/new Set(['top', 'bottom']);\nfunction getSideAxis(placement) {\n  return yAxisSides.has(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}\nconst lrPlacement = ['left', 'right'];\nconst rlPlacement = ['right', 'left'];\nconst tbPlacement = ['top', 'bottom'];\nconst btPlacement = ['bottom', 'top'];\nfunction getSideList(side, isStart, rtl) {\n  switch (side) {\n    case 'top':\n    case 'bottom':\n      if (rtl) return isStart ? rlPlacement : lrPlacement;\n      return isStart ? lrPlacement : rlPlacement;\n    case 'left':\n    case 'right':\n      return isStart ? tbPlacement : btPlacement;\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  const {\n    x,\n    y,\n    width,\n    height\n  } = rect;\n  return {\n    width,\n    height,\n    top: y,\n    left: x,\n    right: x + width,\n    bottom: y + height,\n    x,\n    y\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    x,\n    y,\n    width: rects.floating.width,\n    height: rects.floating.height\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 initialSideAxis = getSideAxis(initialPlacement);\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      const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none';\n      if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {\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          const ignoreCrossAxisOverflow = checkCrossAxis === 'alignment' ? initialSideAxis !== getSideAxis(nextPlacement) : false;\n          if (!ignoreCrossAxisOverflow ||\n          // We leave the current main axis only if every placement on that axis\n          // overflows the main axis.\n          overflowsData.every(d => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) {\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\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$filter2;\n                const placement = (_overflowsData$filter2 = overflowsData.filter(d => {\n                  if (hasFallbackAxisSideDirection) {\n                    const currentSideAxis = getSideAxis(d.placement);\n                    return currentSideAxis === initialSideAxis ||\n                    // Create a bias to the `y` side axis due to horizontal\n                    // reading directions favoring greater width.\n                    currentSideAxis === 'y';\n                  }\n                  return true;\n                }).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$filter2[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\nconst originSides = /*#__PURE__*/new Set(['left', 'top']);\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 = originSides.has(side) ? -1 : 1;\n  const crossAxisMulti = rtl && isVertical ? -1 : 1;\n  const rawValue = evaluate(options, state);\n\n  // eslint-disable-next-line prefer-const\n  let {\n    mainAxis,\n    crossAxis,\n    alignmentAxis\n  } = typeof rawValue === 'number' ? {\n    mainAxis: rawValue,\n    crossAxis: 0,\n    alignmentAxis: null\n  } : {\n    mainAxis: rawValue.mainAxis || 0,\n    crossAxis: rawValue.crossAxis || 0,\n    alignmentAxis: rawValue.alignmentAxis\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          enabled: {\n            [mainAxis]: checkMainAxis,\n            [crossAxis]: checkCrossAxis\n          }\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 = originSides.has(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 \u2014\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      var _state$middlewareData, _state$middlewareData2;\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 maximumClippingHeight = height - overflow.top - overflow.bottom;\n      const maximumClippingWidth = width - overflow.left - overflow.right;\n      const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n      const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n      const noShift = !state.middlewareData.shift;\n      let availableHeight = overflowAvailableHeight;\n      let availableWidth = overflowAvailableWidth;\n      if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {\n        availableWidth = maximumClippingWidth;\n      }\n      if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {\n        availableHeight = 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 hasWindow() {\n  return typeof window !== 'undefined';\n}\nfunction 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  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n  if (!hasWindow() || typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n  return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nconst invalidOverflowDisplayValues = /*#__PURE__*/new Set(['inline', 'contents']);\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) && !invalidOverflowDisplayValues.has(display);\n}\nconst tableElements = /*#__PURE__*/new Set(['table', 'td', 'th']);\nfunction isTableElement(element) {\n  return tableElements.has(getNodeName(element));\n}\nconst topLayerSelectors = [':popover-open', ':modal'];\nfunction isTopLayer(element) {\n  return topLayerSelectors.some(selector => {\n    try {\n      return element.matches(selector);\n    } catch (_e) {\n      return false;\n    }\n  });\n}\nconst transformProperties = ['transform', 'translate', 'scale', 'rotate', 'perspective'];\nconst willChangeValues = ['transform', 'translate', 'scale', 'rotate', 'perspective', 'filter'];\nconst containValues = ['paint', 'layout', 'strict', 'content'];\nfunction isContainingBlock(elementOrCss) {\n  const webkit = isWebKit();\n  const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  // https://drafts.csswg.org/css-transforms-2/#individual-transforms\n  return transformProperties.some(value => css[value] ? css[value] !== 'none' : false) || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || willChangeValues.some(value => (css.willChange || '').includes(value)) || containValues.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 if (isTopLayer(currentNode)) {\n      return null;\n    }\n    currentNode = getParentNode(currentNode);\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}\nconst lastTraversableNodeNames = /*#__PURE__*/new Set(['html', 'body', '#document']);\nfunction isLastTraversableNode(node) {\n  return lastTraversableNodeNames.has(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.scrollX,\n    scrollTop: element.scrollY\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    const frameElement = getFrameElement(win);\n    return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);\n  }\n  return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n}\nfunction getFrameElement(win) {\n  return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getFrameElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isTopLayer, isWebKit };\n", "import { rectToClientRect, arrow as arrow$1, autoPlacement as autoPlacement$1, detectOverflow as detectOverflow$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1, computePosition as computePosition$1 } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle as getComputedStyle$1, isHTMLElement, isElement, getWindow, isWebKit, getFrameElement, getNodeScroll, getDocumentElement, isTopLayer, getNodeName, isOverflowElement, 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$1(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 = getFrameElement(currentWin);\n    while (currentIFrame && offsetParent && offsetWin !== currentWin) {\n      const iframeScale = getScale(currentIFrame);\n      const iframeRect = currentIFrame.getBoundingClientRect();\n      const css = getComputedStyle$1(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 = getFrameElement(currentWin);\n    }\n  }\n  return rectToClientRect({\n    width,\n    height,\n    x,\n    y\n  });\n}\n\n// If <html> has a CSS width greater than the viewport, then this will be\n// incorrect for RTL.\nfunction getWindowScrollBarX(element, rect) {\n  const leftScroll = getNodeScroll(element).scrollLeft;\n  if (!rect) {\n    return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;\n  }\n  return rect.left + leftScroll;\n}\n\nfunction getHTMLOffset(documentElement, scroll) {\n  const htmlRect = documentElement.getBoundingClientRect();\n  const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect);\n  const y = htmlRect.top + scroll.scrollTop;\n  return {\n    x,\n    y\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  const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\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 + htmlOffset.x,\n    y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y\n  };\n}\n\nfunction getClientRects(element) {\n  return Array.from(element.getClientRects());\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$1(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\n// Safety check: ensure the scrollbar space is reasonable in case this\n// calculation is affected by unusual styles.\n// Most scrollbars leave 15-18px of space.\nconst SCROLLBAR_MAX = 25;\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  const windowScrollbarX = getWindowScrollBarX(html);\n  // <html> `overflow: hidden` + `scrollbar-gutter: stable` reduces the\n  // visual width of the <html> but this is not considered in the size\n  // of `html.clientWidth`.\n  if (windowScrollbarX <= 0) {\n    const doc = html.ownerDocument;\n    const body = doc.body;\n    const bodyStyles = getComputedStyle(body);\n    const bodyMarginInline = doc.compatMode === 'CSS1Compat' ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;\n    const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);\n    if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) {\n      width -= clippingStableScrollbarWidth;\n    }\n  } else if (windowScrollbarX <= SCROLLBAR_MAX) {\n    // If the <body> scrollbar is on the left, the width needs to be extended\n    // by the scrollbar amount so there isn't extra space on the right.\n    width += windowScrollbarX;\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\nconst absoluteOrFixed = /*#__PURE__*/new Set(['absolute', 'fixed']);\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      x: clippingAncestor.x - visualOffsets.x,\n      y: clippingAncestor.y - visualOffsets.y,\n      width: clippingAncestor.width,\n      height: clippingAncestor.height\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$1(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$1(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$1(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 && absoluteOrFixed.has(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' ? isTopLayer(element) ? [] : 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\n  // If the <body> scrollbar appears on the left (e.g. RTL systems). Use\n  // Firefox with layout.scrollbar.side = 3 in about:config to test this.\n  function setLeftRTLScrollbarOffset() {\n    offsets.x = getWindowScrollBarX(documentElement);\n  }\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      setLeftRTLScrollbarOffset();\n    }\n  }\n  if (isFixed && !isOffsetParentAnElement && documentElement) {\n    setLeftRTLScrollbarOffset();\n  }\n  const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n  const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;\n  const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;\n  return {\n    x,\n    y,\n    width: rect.width,\n    height: rect.height\n  };\n}\n\nfunction isStaticPositioned(element) {\n  return getComputedStyle$1(element).position === 'static';\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n  if (!isHTMLElement(element) || getComputedStyle$1(element).position === 'fixed') {\n    return null;\n  }\n  if (polyfill) {\n    return polyfill(element);\n  }\n  let rawOffsetParent = element.offsetParent;\n\n  // Firefox returns the <html> element as the offsetParent if it's non-static,\n  // while Chrome and Safari return the <body> element. The <body> element must\n  // be used to perform the correct calculations even if the <html> element is\n  // non-static.\n  if (getDocumentElement(element) === rawOffsetParent) {\n    rawOffsetParent = rawOffsetParent.ownerDocument.body;\n  }\n  return rawOffsetParent;\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 win = getWindow(element);\n  if (isTopLayer(element)) {\n    return win;\n  }\n  if (!isHTMLElement(element)) {\n    let svgOffsetParent = getParentNode(element);\n    while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {\n      if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {\n        return svgOffsetParent;\n      }\n      svgOffsetParent = getParentNode(svgOffsetParent);\n    }\n    return win;\n  }\n  let offsetParent = getTrueOffsetParent(element, polyfill);\n  while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {\n    offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n  }\n  if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {\n    return win;\n  }\n  return offsetParent || getContainingBlock(element) || win;\n}\n\nconst getElementRects = async function (data) {\n  const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n  const getDimensionsFn = this.getDimensions;\n  const floatingDimensions = await getDimensionsFn(data.floating);\n  return {\n    reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n    floating: {\n      x: 0,\n      y: 0,\n      width: floatingDimensions.width,\n      height: floatingDimensions.height\n    }\n  };\n};\n\nfunction isRTL(element) {\n  return getComputedStyle$1(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\nfunction rectsAreEqual(a, b) {\n  return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\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 elementRectForRootMargin = element.getBoundingClientRect();\n    const {\n      left,\n      top,\n      width,\n      height\n    } = elementRectForRootMargin;\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          // If the reference is clipped, the ratio is 0. Throttle the refresh\n          // to prevent an infinite loop of updates.\n          timeoutId = setTimeout(() => {\n            refresh(false, 1e-7);\n          }, 1000);\n        } else {\n          refresh(false, ratio);\n        }\n      }\n      if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {\n        // It's possible that even though the ratio is reported as 1, the\n        // element is not actually fully within the IntersectionObserver's root\n        // area anymore. This can happen under performance constraints. This may\n        // be a bug in the browser's IntersectionObserver implementation. To\n        // work around this, we compare the element's bounding rect now with\n        // what it was at the time we created the IntersectionObserver. If they\n        // are not equal then the element moved, so we refresh.\n        refresh();\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 && !rectsAreEqual(prevRefRect, nextRefRect)) {\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 * 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 */\nconst detectOverflow = detectOverflow$1;\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 = offset$1;\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 \u2014\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, detectOverflow, flip, hide, inline, limitShift, offset, platform, shift, size };\n", "import { ViewHook } from \"phoenix_live_view\";\nimport {\n  autoUpdate,\n  computePosition,\n  flip,\n  offset,\n  shift,\n  size,\n} from \"@floating-ui/dom\";\n\nexport default class Select extends ViewHook {\n  expanded = false;\n  placement = \"bottom-start\";\n  activePlacement = \"bottom-start\";\n  strategy = \"absolute\";\n  currentIndex = -1;\n  expandPopover = true;\n  focusSelected = false;\n\n  #clearFloating;\n  #outsideListener;\n  #triggerClickHandler;\n  #triggerKeyDownHandler;\n  #containerKeyDownHandler;\n  #popupClickHandler;\n  #searchInputHandler;\n  #searchKeyDownHandler;\n  #typeaheadBuffer = \"\";\n  #typeaheadTimeout;\n\n  mounted() {\n    this.placement = this.el.dataset.placement || this.placement;\n    this.activePlacement = this.placement;\n\n    this.cacheElements();\n    this.refreshExpanded();\n\n    this.#triggerClickHandler = this.handleTriggerClick.bind(this);\n    this.#triggerKeyDownHandler = this.handleTriggerKeyDown.bind(this);\n    this.#containerKeyDownHandler = this.handleContainerKeyDown.bind(this);\n    this.#popupClickHandler = this.handlePopupClick.bind(this);\n    this.#searchInputHandler = this.handleSearchInput.bind(this);\n    this.#searchKeyDownHandler = this.handleSearchKeyDown.bind(this);\n\n    this.trigger?.addEventListener(\"click\", this.#triggerClickHandler);\n    this.trigger?.addEventListener(\"keydown\", this.#triggerKeyDownHandler);\n    this.el.addEventListener(\"keydown\", this.#containerKeyDownHandler);\n    this.popup?.addEventListener(\"click\", this.#popupClickHandler);\n    this.search?.addEventListener(\"keydown\", this.#searchKeyDownHandler);\n\n    this.#outsideListener = (event) => {\n      const target = event.target;\n      const clickedOnTrigger = this.trigger?.contains(target);\n      const clickedOnPopup = this.popup?.contains(target);\n\n      if (!clickedOnTrigger && !clickedOnPopup && this.expanded) {\n        this.closePopover();\n      }\n    };\n\n    this.initFloatingUI();\n    this.ensureOptionMetadata();\n    this.selectDefaultValue();\n  }\n\n  updated() {\n    this.cacheElements();\n    this.ensureOptionMetadata();\n    this.restoreExpanded();\n    this.syncValueFromDataset();\n    this.refreshFloatingUI();\n  }\n\n  destroyed() {\n    this.trigger?.removeEventListener(\"click\", this.#triggerClickHandler);\n    this.trigger?.removeEventListener(\"keydown\", this.#triggerKeyDownHandler);\n    this.el.removeEventListener(\"keydown\", this.#containerKeyDownHandler);\n    this.popup?.removeEventListener(\"click\", this.#popupClickHandler);\n    this.search?.removeEventListener(\"keydown\", this.#searchKeyDownHandler);\n    this.search?.removeEventListener(\"input\", this.#searchInputHandler);\n    document.removeEventListener(\"click\", this.#outsideListener);\n\n    if (this.#clearFloating) {\n      this.#clearFloating();\n    }\n\n    this.resetTypeahead();\n  }\n\n  cacheElements() {\n    this.trigger = this.el.querySelector(\"[aria-haspopup],[role='combobox']\");\n    this.popup = this.el.querySelector(\"[role='menu'],[role='listbox']\");\n    this.items =\n      this.popup?.querySelectorAll(\"[role='option'],[role='menuitem']\") ?? [];\n    this.search = this.el.querySelector(\"input[type='text'][role='combobox']\");\n    this.hiddenInput = this.el.querySelector(\"input[type='hidden']\");\n    this.label = this.el.querySelector(\"[data-pui='selected-label']\");\n  }\n\n  refreshExpanded() {\n    this.expanded = this.trigger?.getAttribute(\"aria-expanded\") === \"true\";\n  }\n\n  restoreExpanded() {\n    if (this.expanded) {\n      this.openPopover({ placement: this.activePlacement });\n    } else {\n      this.closePopover();\n    }\n  }\n\n  handleTriggerClick() {\n    if (this.expanded) {\n      this.closePopover();\n    } else {\n      this.openPopover({ placement: this.placement });\n    }\n\n    this.refreshExpanded();\n  }\n\n  handleTriggerKeyDown(event) {\n    if (!this.expanded && (event.key === \"ArrowDown\" || event.key === \"ArrowUp\")) {\n      event.preventDefault();\n      this.openPopover({ placement: this.getPlacementForKey(event.key) });\n      return;\n    }\n\n    if (!this.expanded && this.isPrintableKeyEvent(event)) {\n      const handled = this.handleTriggerTypeahead(event);\n      if (handled) {\n        event.preventDefault();\n      }\n    }\n  }\n\n  handleContainerKeyDown(event) {\n    if (!this.expanded) {\n      return;\n    }\n\n    switch (event.key) {\n      case \"Escape\":\n        event.preventDefault();\n        this.closePopover();\n        this.focusElement(this.trigger);\n        break;\n      case \"ArrowDown\":\n      case \"ArrowUp\":\n      case \"Home\":\n      case \"End\":\n        this.handleArrowNavigation(event);\n        break;\n      case \"Enter\":\n        this.handleKeyEnter(event);\n        break;\n      case \"Tab\":\n        this.closePopover();\n        break;\n      default:\n        if (this.isPrintableKeyEvent(event)) {\n          const handled = this.handlePrintableKey(event);\n          if (handled) {\n            event.preventDefault();\n          }\n        }\n    }\n  }\n\n  handleArrowNavigation(event) {\n    const visibleItems = this.getNavigableItems();\n    const itemCount = visibleItems.length;\n\n    if (itemCount === 0) {\n      return;\n    }\n\n    event.preventDefault();\n\n    let newIndex = this.currentIndex;\n\n    switch (event.key) {\n      case \"ArrowDown\":\n        newIndex = (this.currentIndex + 1) % itemCount;\n        break;\n      case \"ArrowUp\":\n        newIndex = (this.currentIndex - 1 + itemCount) % itemCount;\n        break;\n      case \"Home\":\n        newIndex = 0;\n        break;\n      case \"End\":\n        newIndex = itemCount - 1;\n        break;\n    }\n\n    this.setCurrentItemByIndex(newIndex, visibleItems);\n  }\n\n  handleKeyEnter(event) {\n    if (this.currentIndex < 0) {\n      return;\n    }\n\n    event.preventDefault();\n    const visibleItems = this.getNavigableItems();\n    const currentItem = visibleItems[this.currentIndex];\n\n    if (currentItem) {\n      this.selectItem(currentItem);\n    }\n  }\n\n  handlePopupClick(event) {\n    const item = event.target?.closest(\"[role='option'],[role='menuitem']\");\n    if (item && this.popup?.contains(item)) {\n      this.selectItem(item);\n    }\n  }\n\n  handleSearchInput(event) {\n    event.stopPropagation();\n\n    const query = event.target.value.toLowerCase();\n\n    this.currentIndex = -1;\n    this.items.forEach((item) => {\n      const itemText = (item.dataset.label || item.textContent).trim().toLowerCase();\n      const matches = itemText.includes(query);\n      item.setAttribute(\"aria-hidden\", String(!matches));\n    });\n\n    const visibleItems = this.getNavigableItems();\n    const nextIndex = this.getInitialNavigationIndex(visibleItems);\n    this.setCurrentItemByIndex(nextIndex, visibleItems);\n  }\n\n  handleSearchKeyDown(event) {\n    switch (event.key) {\n      case \"ArrowDown\":\n      case \"ArrowUp\":\n      case \"Home\":\n      case \"End\":\n      case \"Enter\":\n      case \"Escape\":\n        this.handleContainerKeyDown(event);\n        event.stopPropagation();\n        break;\n    }\n  }\n\n  handleTriggerTypeahead(event) {\n    const item = this.findTypeaheadMatch(event.key);\n\n    if (!item) {\n      return false;\n    }\n\n    this.selectItem(item, { close: false });\n    return true;\n  }\n\n  handlePrintableKey(event) {\n    if (event.target === this.search) {\n      return false;\n    }\n\n    const visibleItems = this.getNavigableItems();\n    const item = this.findTypeaheadMatch(event.key, visibleItems);\n\n    if (!item) {\n      return false;\n    }\n\n    const itemIndex = visibleItems.findIndex((visibleItem) => visibleItem === item);\n    this.setCurrentItemByIndex(itemIndex, visibleItems);\n    this.selectItem(item, { close: false, focusTrigger: false });\n    return true;\n  }\n\n  getPlacementForKey(key) {\n    if (key === \"ArrowUp\") {\n      return \"top-start\";\n    }\n\n    return this.placement;\n  }\n\n  getNavigableItems() {\n    return Array.from(this.items).filter(\n      (item) =>\n        item.style.display !== \"none\" &&\n        item.getAttribute(\"aria-disabled\") !== \"true\" &&\n        item.getAttribute(\"aria-hidden\") !== \"true\",\n    );\n  }\n\n  getInitialNavigationIndex(items) {\n    const selectedValue = this.hiddenInput?.value;\n    const selectedIndex = items.findIndex(\n      (item) => item.dataset.value === selectedValue,\n    );\n\n    return selectedIndex >= 0 ? selectedIndex : (items.length > 0 ? 0 : -1);\n  }\n\n  setCurrentItemByIndex(index, items = this.getNavigableItems()) {\n    const itemCount = items.length;\n\n    if (itemCount === 0 || index < 0 || index >= itemCount) {\n      this.currentIndex = -1;\n      this.clearActiveItems();\n      this.setActiveDescendant(null);\n      return null;\n    }\n\n    items.forEach((item, itemIndex) => {\n      item.setAttribute(\"tabindex\", itemIndex === index ? \"0\" : \"-1\");\n      item.dataset.active = String(itemIndex === index);\n\n      if (itemIndex === index) {\n        if (this.focusSelected) {\n          this.focusElement(item);\n        }\n        this.scrollItemIntoView(item);\n      }\n    });\n\n    this.currentIndex = index;\n    this.setActiveDescendant(items[index]);\n    return items[index];\n  }\n\n  syncValueFromDataset() {\n    const serverValue = this.el.dataset.value;\n\n    if (!this.hiddenInput) {\n      return;\n    }\n\n    if (serverValue !== undefined && this.hiddenInput.value !== serverValue) {\n      const serverItem = Array.from(this.items).find(\n        (item) => item.dataset.value === serverValue,\n      );\n\n      if (serverItem) {\n        this.selectItem(serverItem, { close: false, focusTrigger: false });\n      } else {\n        this.hiddenInput.value = serverValue;\n        this.updatePlaceholder();\n      }\n    }\n  }\n\n  ensureOptionMetadata() {\n    this.items.forEach((item, index) => {\n      if (!item.id) {\n        item.id = `${this.el.id || \"pui-select\"}-option-${index}`;\n      }\n\n      if (!item.dataset.label) {\n        item.dataset.label = item.textContent.trim();\n      }\n\n      item.setAttribute(\"tabindex\", \"-1\");\n    });\n  }\n\n  selectDefaultValue() {\n    const defaultValue = this.el.dataset.value;\n\n    if (!defaultValue) {\n      return;\n    }\n\n    const defaultItem = Array.from(this.items).find(\n      (item) => item.dataset.value === defaultValue,\n    );\n\n    if (defaultItem) {\n      this.selectItem(defaultItem, { close: false, focusTrigger: false });\n    }\n  }\n\n  selectItem(itemEl, options = {}) {\n    const { close = true, focusTrigger = true } = options;\n\n    if (this.hiddenInput) {\n      const newValue = itemEl.dataset.value;\n      if (newValue && this.hiddenInput.value !== newValue) {\n        this.hiddenInput.value = newValue;\n        this.hiddenInput.dispatchEvent(new Event(\"change\", { bubbles: true }));\n      }\n    }\n\n    this.setSelectedItem(itemEl);\n    this.updatePlaceholder();\n\n    if (close) {\n      this.closePopover();\n    } else if (focusTrigger) {\n      this.focusElement(this.trigger);\n    }\n  }\n\n  setSelectedItem(selectedItem) {\n    this.items.forEach((item) => {\n      const isSelected = item === selectedItem;\n      item.setAttribute(\"aria-selected\", String(isSelected));\n      item.setAttribute(\"tabindex\", isSelected ? \"0\" : \"-1\");\n    });\n\n    this.setActiveDescendant(selectedItem);\n  }\n\n  clearActiveItems() {\n    this.items.forEach((item) => {\n      delete item.dataset.active;\n    });\n  }\n\n  updatePlaceholder() {\n    const selectedItem = Array.from(this.items).find(\n      (item) => item.dataset.value === this.hiddenInput?.value,\n    );\n\n    if (this.label) {\n      this.label.textContent = selectedItem ? selectedItem.textContent : \"\";\n    }\n  }\n\n  setActiveDescendant(item) {\n    const activeId = item?.id;\n\n    if (activeId) {\n      this.trigger?.setAttribute(\"aria-activedescendant\", activeId);\n      this.search?.setAttribute(\"aria-activedescendant\", activeId);\n      return;\n    }\n\n    this.trigger?.removeAttribute(\"aria-activedescendant\");\n    this.search?.removeAttribute(\"aria-activedescendant\");\n  }\n\n  clearSearch() {\n    if (this.search) {\n      this.search.value = \"\";\n    }\n\n    this.items.forEach((item) => {\n      item.removeAttribute(\"aria-hidden\");\n    });\n\n    this.resetTypeahead();\n  }\n\n  openPopover(options = {}) {\n    this.activePlacement = options.placement || this.placement;\n    this.trigger?.setAttribute(\"aria-expanded\", \"true\");\n    this.popup?.setAttribute(\"aria-hidden\", \"false\");\n\n    this.expanded = true;\n    const visibleItems = this.getNavigableItems();\n    this.currentIndex = this.getInitialNavigationIndex(visibleItems);\n    this.setCurrentItemByIndex(this.currentIndex, visibleItems);\n\n    if (this.search) {\n      this.search.setAttribute(\"aria-expanded\", \"true\");\n      this.search.addEventListener(\"input\", this.#searchInputHandler);\n      this.focusElement(this.search);\n    } else {\n      this.focusElement(this.popup);\n    }\n\n    this.listenOutside();\n    this.refreshFloatingUI();\n  }\n\n  closePopover() {\n    this.trigger?.setAttribute(\"aria-expanded\", \"false\");\n    this.popup?.setAttribute(\"aria-hidden\", \"true\");\n    this.search?.setAttribute(\"aria-expanded\", \"false\");\n    this.search?.removeEventListener(\"input\", this.#searchInputHandler);\n\n    this.expanded = false;\n    this.currentIndex = -1;\n    this.activePlacement = this.placement;\n    this.clearActiveItems();\n\n    if (this.search) {\n      this.clearSearch();\n    }\n\n    this.setActiveDescendant(\n      Array.from(this.items).find(\n        (item) => item.dataset.value === this.hiddenInput?.value,\n      ),\n    );\n\n    if (\n      this.popup?.contains(document.activeElement) ||\n      this.trigger?.contains(document.activeElement)\n    ) {\n      this.focusElement(this.trigger);\n    }\n\n    this.removeOutsideListener();\n  }\n\n  initFloatingUI() {\n    if (this.#clearFloating) {\n      this.#clearFloating();\n    }\n\n    if (!this.trigger || !this.popup) {\n      return;\n    }\n\n    this.#clearFloating = autoUpdate(this.trigger, this.popup, () => {\n      this.refreshFloatingUI();\n    });\n  }\n\n  refreshFloatingUI() {\n    if (!this.trigger || !this.popup) {\n      return;\n    }\n\n    const popup = this.popup;\n    const expandPopover = this.expandPopover;\n    computePosition(this.trigger, this.popup, {\n      placement: this.activePlacement,\n      strategy: this.strategy,\n      middleware: [\n        offset(8),\n        flip(),\n        shift(),\n        size({\n          apply({ rects }) {\n            if (expandPopover) {\n              popup.style.width = `${rects.reference.width}px`;\n            }\n          },\n        }),\n      ],\n    }).then(({ x, y, strategy }) => {\n      Object.assign(this.popup.style, {\n        left: `${x}px`,\n        top: `${y}px`,\n        position: strategy,\n      });\n    });\n  }\n\n  listenOutside() {\n    document.addEventListener(\"click\", this.#outsideListener);\n  }\n\n  removeOutsideListener() {\n    document.removeEventListener(\"click\", this.#outsideListener);\n  }\n\n  findTypeaheadMatch(key, items = Array.from(this.items)) {\n    const normalizedKey = key.toLowerCase();\n    const navigableItems = items.filter(\n      (item) =>\n        item.getAttribute(\"aria-hidden\") !== \"true\" &&\n        item.getAttribute(\"aria-disabled\") !== \"true\",\n    );\n\n    if (navigableItems.length === 0) {\n      return null;\n    }\n\n    this.#typeaheadBuffer = `${this.#typeaheadBuffer}${normalizedKey}`;\n    this.resetTypeaheadTimer();\n\n    const currentValue = this.hiddenInput?.value;\n    const startIndex = navigableItems.findIndex(\n      (item) => item.dataset.value === currentValue,\n    );\n    const orderedItems = [\n      ...navigableItems.slice(startIndex + 1),\n      ...navigableItems.slice(0, startIndex + 1),\n    ];\n\n    return (\n      orderedItems.find((item) =>\n        item.dataset.label.toLowerCase().startsWith(this.#typeaheadBuffer),\n      ) ||\n      orderedItems.find((item) =>\n        item.dataset.label.toLowerCase().startsWith(normalizedKey),\n      ) ||\n      null\n    );\n  }\n\n  resetTypeaheadTimer() {\n    window.clearTimeout(this.#typeaheadTimeout);\n    this.#typeaheadTimeout = window.setTimeout(() => {\n      this.resetTypeahead();\n    }, 700);\n  }\n\n  resetTypeahead() {\n    this.#typeaheadBuffer = \"\";\n    window.clearTimeout(this.#typeaheadTimeout);\n  }\n\n  isPrintableKeyEvent(event) {\n    return (\n      event.key.length === 1 &&\n      !event.altKey &&\n      !event.ctrlKey &&\n      !event.metaKey\n    );\n  }\n\n  focusElement(element) {\n    if (!element || typeof element.focus !== \"function\") {\n      return;\n    }\n\n    try {\n      element.focus({ preventScroll: true });\n    } catch {\n      element.focus();\n    }\n  }\n\n  scrollItemIntoView(item) {\n    if (!item || !this.popup) {\n      return;\n    }\n\n    const popupRect = this.popup.getBoundingClientRect();\n    const itemRect = item.getBoundingClientRect();\n\n    if (itemRect.top < popupRect.top) {\n      this.popup.scrollTop -= popupRect.top - itemRect.top;\n    } else if (itemRect.bottom > popupRect.bottom) {\n      this.popup.scrollTop += itemRect.bottom - popupRect.bottom;\n    }\n  }\n}\n", "import { ViewHook } from \"phoenix_live_view\";\n\nState = {\n  IDLE: 0,\n  STARTING: 1,\n};\n\nexport default class LoadingBar extends ViewHook {\n  progress = 0;\n\n  delay = 300;\n  delayTimer = null;\n  raf = null;\n  state = State.IDLE;\n  #boundShow = null;\n  #boundHide = null;\n\n  mounted() {\n    this.progressEl = this.el.querySelector(\"#loadingbar-progress\");\n    this.delay = parseInt(this.el.dataset.delay || \"0\") || this.delay;\n\n    this.#boundShow = this._show.bind(this);\n    this.#boundHide = this._hide.bind(this);\n    this.state = State.IDLE;\n\n    window.addEventListener(\"phx:page-loading-start\", this.#boundShow);\n    window.addEventListener(\"phx:page-loading-stop\", this.#boundHide);\n  }\n\n  _show(info) {\n    this._clear();\n\n    this.delayTimer = setTimeout(() => {\n      if (this.state === State.IDLE) {\n        this.state = State.STARTING;\n        this._start();\n      }\n    }, this.delay);\n  }\n\n  _start() {\n    let lastTime = performance.now();\n\n    const step = (now) => {\n      const dt = now - lastTime;\n      lastTime = now;\n      if (this.progress < 50) {\n        const delta = (100 - this.progress) * 0.01 * (dt / 16);\n        this.progress = Math.min(this.progress + delta, 50);\n      } else if (this.progress < 90) {\n        const delta = (100 - this.progress) * 0.0025 * (dt / 16);\n        this.progress = Math.min(this.progress + delta, 90);\n      } else if (this.progress < 99) {\n        const delta = (100 - this.progress) * 0.0005 * (dt / 16);\n        this.progress = Math.min(this.progress + delta, 99);\n      }\n\n      this.progressEl.style.width = `${this.progress}%`;\n      this.raf = requestAnimationFrame(step);\n    };\n\n    this.raf = requestAnimationFrame(step);\n  }\n\n  _reset() {\n    this.progressEl.style.transition = \"none\";\n    this.progressEl.style.width = \"0%\";\n    this.progressEl.offsetHeight; // force reflow\n    this.progressEl.style.transition = \"\";\n    this.progress = 0;\n\n    this._clear();\n\n    this.state = State.IDLE;\n\n    cancelAnimationFrame(this.raf);\n  }\n\n  _hide(info) {\n    this.state = State.IDLE;\n    this._clear();\n\n    if (this.progress > 0) {\n      this.progress = 100;\n      this.progressEl.style.width = \"100%\";\n    }\n\n    setTimeout(() => {\n      this._reset();\n    }, 500);\n  }\n\n  _clear() {\n    if (this.delayTimer) {\n      clearTimeout(this.delayTimer);\n      this.delayTimer = null;\n    }\n  }\n\n  destroyed() {\n    window.removeEventListener(\"phx:page-loading-start\", this.#boundShow);\n    window.removeEventListener(\"phx:page-loading-stop\", this.#boundHide);\n  }\n}\n", "import { ViewHook } from \"phoenix_live_view\";\nimport {\n  computePosition,\n  offset,\n  flip,\n  shift,\n  autoUpdate,\n  arrow,\n} from \"@floating-ui/dom\";\n\nexport default class Tooltip extends ViewHook {\n  placement = \"top\";\n  delay = 300;\n  hovering = false;\n  #clear_floating;\n\n  #enterBind;\n  #leaveBind;\n  leaveTimeout = null;\n\n  mounted() {\n    this.trigger = this.el.querySelector(':scope > :not([role=\"tooltip\"])');\n    this.tooltip = this.el.querySelector(':scope > [role=\"tooltip\"]');\n    this.arrow = this.el.querySelector(\n      ':scope > [role=\"tooltip\"] > [data-arrow]',\n    );\n    // this attribute controlled on client side, prevent liveview patching this attr\n    this.js().ignoreAttributes(this.tooltip, [\"aria-*\", \"data-*\", \"style\"]);\n\n    this.placement = this.el.dataset.placement || this.placement;\n    this.delay = this.el.dataset.delay || this.delay;\n    this.#clear_floating = autoUpdate(this.trigger, this.tooltip, () => {\n      this._calculatePosition();\n    });\n\n    this.#enterBind = this._onMouseEnter.bind(this);\n    this.#leaveBind = this._onMouseLeave.bind(this);\n\n    this.el?.addEventListener(\"mouseenter\", this.#enterBind);\n    this.el?.addEventListener(\"mouseleave\", this.#leaveBind);\n  }\n\n  updated() {\n    this.setHidden(this.hovering ? false : true);\n\n    this._calculatePosition();\n  }\n\n  destroyed() {\n    if (this.#clear_floating) {\n      this.#clear_floating();\n    }\n\n    this.el?.removeEventListener(\"mouseenter\", this.#enterBind);\n    this.el?.removeEventListener(\"mouseleave\", this.#leaveBind);\n  }\n\n  setHidden(hidden) {\n    requestAnimationFrame(() => {\n      this.tooltip?.setAttribute(\"aria-hidden\", hidden ? \"true\" : \"false\");\n    });\n  }\n\n  _onMouseEnter(e) {\n    this.hovering = true;\n    if (this.leaveTimeout) clearTimeout(this.leaveTimeout);\n    this.setHidden(false);\n  }\n\n  _onMouseLeave(e) {\n    if (this.leaveTimeout) clearTimeout(this.leaveTimeout);\n    this.hovering = false;\n    this.leaveTimeout = setTimeout(() => {\n      this.setHidden(true);\n    }, this.delay);\n  }\n\n  _calculatePosition(data) {\n    computePosition(this.trigger, this.tooltip, {\n      placement: this.placement,\n      strategy: \"fixed\",\n      middleware: [offset(8), flip(), shift(), arrow({ element: this.arrow })],\n    }).then(({ x, y, strategy, middlewareData, placement }) => {\n      Object.assign(this.tooltip.style, {\n        left: `${x}px`,\n        top: `${y}px`,\n        position: strategy,\n      });\n      if (middlewareData.arrow) {\n        const { x, y } = middlewareData.arrow;\n\n        const p = placement.split(\"-\").at(0) ?? null;\n        const arrowPlacement = {\n          top: \"bottom\",\n          left: \"right\",\n          right: \"left\",\n          bottom: \"top\",\n        };\n\n        const style = {\n          left: x != null ? `${x}px` : \"\",\n          top: y != null ? `${y}px` : \"\",\n        };\n\n        style[arrowPlacement[p]] = \"-4px\";\n\n        Object.assign(this.arrow.style, style);\n      }\n    });\n  }\n}\n", "import { ViewHook } from \"phoenix_live_view\";\n\nexport default class FlashGroup extends ViewHook {\n  max_flashes = 3;\n  flash_timeout = 5;\n  #timers = new Map();\n  #pausedTimers = new Map();\n\n  mounted() {\n    this._updateFlashList();\n    this.max_flashes = this.el.dataset.maxFlashes || this.max_flashes;\n    this.flash_timeout = this.el.dataset.flashTimeout || this.flash_timeout;\n\n    this.el.addEventListener(\n      \"mouseenter\",\n      this._onContainerMouseEnter.bind(this),\n    );\n    this.el.addEventListener(\n      \"mouseleave\",\n      this._onContainerMouseLeave.bind(this),\n    );\n  }\n\n  updated() {\n    this._updateFlashList();\n  }\n\n  destroyed() {\n    this.#timers.forEach((timerObj) => clearTimeout(timerObj.timer));\n    this.#timers.clear();\n\n    this.el.removeEventListener(\n      \"mouseenter\",\n      this._onContainerMouseEnter.bind(this),\n    );\n    this.el.removeEventListener(\n      \"mouseleave\",\n      this._onContainerMouseLeave.bind(this),\n    );\n  }\n\n  _onContainerMouseEnter() {\n    this._pauseAllTimers();\n  }\n\n  _onContainerMouseLeave() {\n    this._resumeAllTimers();\n  }\n\n  _onClose(event) {\n    const flash = event.currentTarget.closest('[role=\"alert\"]');\n\n    this._removeFlash(flash);\n  }\n\n  _removeFlash(flash) {\n    if (this.liveSocket?.isConnected()) {\n      this.pushEvent(\"lv:clear-flash\", { value: flash.dataset.flashId });\n    }\n\n    const flashId = flash.dataset.flashId;\n\n    // Clear timer if exists\n    if (this.#timers.has(flashId)) {\n      const timerObj = this.#timers.get(flashId);\n      clearTimeout(timerObj.timer);\n      this.#timers.delete(flashId);\n    }\n\n    flash.style.transition =\n      \"transform 100ms ease-in-out, opacity 100ms ease-in-out\";\n    flash.style.transform = \"scale(0.9)\";\n    flash.style.opacity = \"0\";\n\n    const animationEndHandler = () => {\n      flash.removeEventListener(\"transitionend\", animationEndHandler);\n      flash.remove();\n      this._updateFlashList();\n    };\n\n    flash.addEventListener(\"transitionend\", animationEndHandler);\n  }\n\n  _startTimerForFlash(flash) {\n    const flashId = flash.dataset.flashId;\n    let duration = parseInt(flash.dataset.duration);\n\n    if (duration === -1) {\n      return;\n    }\n\n    const flashTimeout =\n      (!isNaN(duration) ? duration : this.flash_timeout) * 1000;\n\n    if (this.#timers.has(flashId)) {\n      const existingTimer = this.#timers.get(flashId);\n      clearTimeout(existingTimer.timer);\n    }\n\n    const remainingTime = this.#pausedTimers.has(flashId)\n      ? this.#pausedTimers.get(flashId)\n      : flashTimeout;\n\n    const startTime = Date.now();\n\n    const timer = setTimeout(() => {\n      this._removeFlash(flash);\n    }, remainingTime);\n\n    this.#timers.set(flashId, { timer, startTime, timeout: flashTimeout });\n\n    if (this.#pausedTimers.has(flashId)) {\n      this.#pausedTimers.delete(flashId);\n    }\n  }\n\n  _pauseAllTimers() {\n    this.#timers.forEach((timerObj, flashId) => {\n      clearTimeout(timerObj.timer);\n\n      const elapsed = Date.now() - timerObj.startTime;\n      const remainingTime = Math.max(0, timerObj.timeout - elapsed);\n\n      this.#pausedTimers.set(flashId, remainingTime);\n    });\n\n    this.#timers.clear();\n  }\n\n  _resumeAllTimers() {\n    this.#pausedTimers.forEach((remainingTime, flashId) => {\n      const flash = this.el.querySelector(`[data-flash-id=\"${flashId}\"]`);\n      if (flash) {\n        const duration = parseInt(flash.dataset.duration);\n\n        if (duration !== -1) {\n          const flashTimeout =\n            (!isNaN(duration) ? duration : this.flash_timeout) * 1000;\n          const startTime = Date.now();\n          const timer = setTimeout(() => {\n            this._removeFlash(flash);\n          }, remainingTime);\n\n          this.#timers.set(flashId, {\n            timer,\n            startTime,\n            timeout: flashTimeout,\n          });\n        }\n      }\n    });\n\n    this.#pausedTimers.clear();\n  }\n\n  _updateFlashList() {\n    this.flash = this.el.querySelectorAll('[role=\"alert\"]');\n    const position = this.el.dataset.position;\n\n    this.flash.forEach((flash, index) => {\n      flash.dataset.index = index;\n      flash.dataset.position = position;\n      flash.style.setProperty(\"--flash-index\", index);\n\n      if (flash.phxPrivate?.[\"JS:ignore_attrs\"] == null) {\n        this.js().ignoreAttributes(flash, [\"aria-*\", \"data-visible\", \"style\"]);\n      }\n\n      if (index === 0 && flash.dataset.visible !== \"true\") {\n        flash.setAttribute(\"aria-hidden\", \"true\");\n        flash.style.transition = \"none\";\n        flash.style.setProperty(\n          \"--flash-offset-y\",\n          position.startsWith(\"bottom-\") ? \"200%\" : \"-200%\",\n        );\n      }\n      flash.dataset.visible = \"true\";\n\n      const height = flash.offsetHeight;\n\n      const offsetY = Array.from(this.flash)\n        .slice(0, index)\n        .reduce((acc, item) => acc + item.offsetHeight + 10, 0);\n\n      flash.style.setProperty(\"--flash-height\", `${height}px`);\n\n      flash.setAttribute(\"aria-hidden\", \"false\");\n      requestAnimationFrame(() => {\n        flash.style.transition = \"\";\n        flash.style.setProperty(\n          \"--flash-offset-y\",\n          position.startsWith(\"bottom-\") ? `${-offsetY}px` : `${offsetY}px`,\n        );\n      });\n\n      // Flash close button\n      const closeButton = flash.querySelector(\"button[data-close]\");\n      if (closeButton?.dataset.close == \"\") {\n        closeButton?.addEventListener(\"click\", this._onClose.bind(this));\n        closeButton.dataset.close = \"true\";\n      }\n\n      const flashId = flash.dataset.flashId;\n      if (!this.#timers.has(flashId)) {\n        this._startTimerForFlash(flash);\n      }\n    });\n  }\n}\n", "import Popover from \"./popover\";\nimport Select from \"./select\";\nimport LoadingBar from \"./loading\";\nimport Tooltip from \"./tooltip\";\nimport FlashGroup from \"./flash\";\n\nexport const Hooks = {\n  \"PUI.LoadingBar\": LoadingBar,\n  \"PUI.Popover\": Popover,\n  \"PUI.Select\": Select,\n  \"PUI.Tooltip\": Tooltip,\n  \"PUI.FlashGroup\": FlashGroup,\n};\n\nexport { Popover, Select, LoadingBar, Tooltip, FlashGroup };\n"],
  "mappings": "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",
  "names": ["platform", "max", "offset", "platform", "placements", "sides", "side", "placement", "overflow", "platform", "x", "y", "min", "max", "platform", "getComputedStyle", "getComputedStyle", "offset", "shift", "flip", "size", "arrow", "computePosition", "computePosition", "offset", "flip", "shift", "size", "ViewHook", "ViewHook", "computePosition", "offset", "flip", "shift", "size", "ViewHook", "ViewHook", "ViewHook", "computePosition", "offset", "flip", "shift", "arrow", "x", "y", "ViewHook"]
}
