{"version":3,"file":"ClassicPopover-BIyLKorz.mjs","names":[],"sources":["../src/components/misc/ClassicPopover.vue","../src/components/misc/ClassicPopover.vue"],"sourcesContent":["<template>\n  <Teleport to=\"#app\">\n    <div\n      v-show=\"displayPopover\"\n      :id=\"'popover' + target\"\n      ref=\"popover\"\n      popover\n      tabindex=\"0\"\n      class=\"octopus-popover border position-fixed\"\n      :class=\"[\n        displayPopover ? 'd-block': '',\n        onlyClick ? 'octopus-dropdown' : '',\n        popoverClass]\"\n      :style=\"positionInlineStyle\"\n      @mouseenter=\"overPopover = true\"\n      @mouseleave=\"\n        overPopover = false;\n        clearData();\n      \"\n    >\n      <div v-if=\"title\" class=\"bg-secondary-light p-2\">\n        {{ title }}\n      </div>\n      <div class=\"p-2\">\n        <slot>{{ content }}</slot>\n      </div>\n    </div>\n  </Teleport>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, nextTick, onMounted, onUnmounted, Ref, ref, useTemplateRef, watch } from 'vue';\nimport { useRouter } from 'vue-router';\n\n//Props \nconst props = defineProps({\n  content: { type: String, default: \"\" },\n  title: { type: String, default: \"\" },\n  target: { type: String, required: true },\n  disable: { type: Boolean, default: false },\n  onlyClick: { type: Boolean, default: false },\n  onlyMouse: { type: Boolean, default: false },\n  isFixed: { type: Boolean, default: false },\n  /** @deprecated No longer needed. The popover is teleported to body and always uses position:fixed. */\n  relativeClass: { type: String, default: undefined },\n  leftPos: { type: Boolean, default: false },\n  topPos: { type: Boolean, default: false },\n  popoverClass: { type: String, default: undefined },\n  isTopLayer: { type: Boolean, default: false },\n  /** @deprecated No longer needed. If set to true, max height of popover will not overflow from parent */\n  constrainHeight: { type: Boolean, default: true },\n  /** Force z-index */\n  zIndex: { type: Number, default: undefined }\n})\n\n//Emits\nconst emit = defineEmits([\"updateVisibility\"]);\n\n\n//Data\nconst show = ref(false);\nconst isClick = ref(false);\nconst openedByHover = ref(false);\nconst posX = ref(0);\nconst posY = ref(0);\nconst targetElement: Ref<HTMLElement | null> = ref(null);\nconst overPopover = ref(false);\nconst isTabAction = ref(false);\nconst maxHeight = ref('80dvh');\nconst clearTimeout: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined);\nconst popoverRef = useTemplateRef('popover');\n\n\n//Composables\nconst router = useRouter();\n\n//Computed\nconst popoverId = computed(() => \"popover\" + props.target);\nconst positionInlineStyle = computed(() => ({\n  left: `${posX.value}px`,\n  top: `${posY.value}px`,\n  'max-height': maxHeight.value,\n  'z-index': props.zIndex ?? 10\n}));\nconst displayPopover = computed(() => show.value && !props.disable);\nconst isTopLayerPopover = computed(() => (props.isTopLayer || \"octopus-modal\"===props.relativeClass) && Object.hasOwn(HTMLElement.prototype, \"popover\"));\n\n\n//Watch\nwatch(displayPopover, async () => {\n  if(!isTopLayerPopover.value){return;}\n  if(displayPopover.value){\n    (popoverRef.value as HTMLElement).showPopover();\n  }else{\n    (popoverRef.value as HTMLElement).hidePopover();\n  }\n});\nwatch(show, async () => {\n  emit(\"updateVisibility\", show.value);\n  if (show.value) {\n    window.addEventListener(\"keyup\", addAccessibilityControl);\n  } else {\n    window.removeEventListener(\"keyup\", addAccessibilityControl);\n  }\n});\nwatch(isClick, async () => {\n  // Only add global click listener if opened by click (not hover)\n  if (isClick.value && !openedByHover.value) {\n    window.addEventListener(\"click\", handleOutsideClick, true);\n  } else {\n    window.removeEventListener(\"click\", handleOutsideClick, true);\n  }\n});\n\nonMounted(()=>init())\n\nonUnmounted(()=>removeListeners())\n\n\n//Methods\nfunction handleOutsideClick(event: MouseEvent): void {\n  const target = event.target as HTMLElement;\n  const popover = popoverRef?.value as HTMLElement;\n  const targetEl = targetElement.value;\n\n  // Check if click is outside both the popover and the target element\n  if (\n    popover &&\n    !popover.contains(target) &&\n    targetEl &&\n    !targetEl.contains(target)\n  ) {\n    clearClick();\n  }\n}\nfunction addAccessibilityControl(event: KeyboardEvent): void {\n  if (!event || null === event) {\n    return;\n  }\n  if (\"Tab\" !== event.key) {\n    return;\n  }\n  const myElement = event.target as HTMLElement;\n  const parent = popoverRef?.value as HTMLElement;\n  if (parent?.contains(myElement)) {\n    isTabAction.value = true;\n  } else {\n    clearClick();\n  }\n}\nfunction init() {\n  targetElement.value = document.getElementById(props.target);\n  if (targetElement.value) {\n    if (!props.onlyClick) {\n      targetElement.value.addEventListener( \"mouseenter\",setPopoverData);\n      targetElement.value.addEventListener(\"mouseleave\",clearDataTimeout);\n    }\n    if (!props.onlyMouse) {\n      targetElement.value.addEventListener(\"click\", setPopoverData);\n    }\n    targetElement.value.addEventListener(\"focusout\", clearDataBlur);\n  }\n}\nfunction removeListeners() {\n  if (targetElement.value) {\n    if (!props.onlyClick) {\n      targetElement.value.removeEventListener(\"mouseenter\",setPopoverData,);\n      targetElement.value.removeEventListener(\"mouseleave\",clearDataTimeout,);\n    }\n    if (!props.onlyMouse) {\n      targetElement.value.removeEventListener(\"click\", setPopoverData);\n    }\n    targetElement.value.removeEventListener(\"focusout\", clearDataBlur);\n  }\n}\nfunction handleClickEvent(e: MouseEvent | PointerEvent){\n  if (show.value && isClick.value && e.target !== popoverRef.value && !popoverRef.value?.contains(e.target)) {\n    isClick.value = false;\n    clearData();\n    return -1;\n  }\n  if (show.value && isTopLayerPopover.value) {\n    const popover = popoverRef?.value as HTMLElement;\n    popover.showPopover();\n    isClick.value = true;\n    return -1;\n  }\n  isClick.value = true;\n  return 0;\n}\nfunction handleLeftPos(rectElement: DOMRect, parentLeft: number, sizeAvailable: number, sizePopover: number){\n  const elementRightRelative = rectElement.right - parentLeft;\n  const hasPlaceRightButton = (sizeAvailable - (sizeAvailable - elementRightRelative)) > sizePopover;\n  if(hasPlaceRightButton){\n    posX.value =\n    rectElement.right -\n    parentLeft -\n    sizePopover;\n  }else{\n    posX.value =parentLeft;\n  }\n}\nfunction handleRightPos(rectElement: DOMRect, parentLeft: number, sizeAvailable: number, sizePopover: number){\n  const elementLeftRelative = rectElement.left - parentLeft;\n  const hasPlaceRightButton = (sizeAvailable - elementLeftRelative) > sizePopover;\n  if(hasPlaceRightButton){\n    posX.value = elementLeftRelative;\n  }else{\n    posX.value = sizeAvailable - sizePopover + parentLeft;\n  }\n}\nfunction setPopoverData(e: MouseEvent | PointerEvent) {\n  clearInterval(clearTimeout.value as unknown as number);\n  if (props.disable || !e || !e.target) {\n    return;\n  }\n  if (\"click\" === e.type && -1 === handleClickEvent(e)) {\n    return;\n  }\n  // Track if opened by hover (mouseenter) vs click\n  if (e.type === \"mouseenter\") {\n    openedByHover.value = true;\n  }\n  show.value = true;\n  const popover = popoverRef?.value as HTMLElement;\n  // The popover is teleported to <body> and uses position:fixed, so\n  // getBoundingClientRect() coordinates map directly to viewport coordinates.\n  const rectElement = (e.target as HTMLElement).getBoundingClientRect();\n  popover.style.display = \"block\";\n  const sizePopover = popover.clientWidth;\n  if (props.leftPos) {\n    handleLeftPos(rectElement, 0, window.innerWidth, sizePopover);\n  } else {\n    handleRightPos(rectElement, 0, window.innerWidth, sizePopover);\n  }\n  posX.value = Math.max(0, posX.value);\n  const yPosParent = props.topPos ? rectElement.top : rectElement.bottom;\n  const yGap = props.topPos\n    ? -5 - popover.clientHeight\n    : 5;\n  posY.value = Math.max(0, yPosParent + yGap);\n  maxHeight.value = (window.innerHeight - posY.value) + \"px\";\n}\n\nfunction clearDataBlur(e: FocusEvent) {\n  if (isTabAction.value) {\n    isTabAction.value = false;\n    return;\n  }\n  //Exception timepicker in popover\n  const result = Array.from(e?.target?.classList ?? []).findIndex((val) => { return val.startsWith(\"dp__\");});\n  if (-1!==result) {\n    return;\n  }\n\n  const parent = popoverRef?.value as HTMLElement;\n  if (!e.relatedTarget) {\n    if (parent !== null && parent.contains(e.target)) {\n      return;\n    }\n    return clearClick();\n  }\n  const myElement = e.relatedTarget as HTMLElement;\n  if (popoverId.value === myElement.id) {\n    return;\n  }\n  if (null === parent || !parent.contains(myElement)) {\n    return clearClick();\n  }\n  if (\n    null === myElement.classList ||\n    !myElement.classList.contains(\"octopus-dropdown-item\")\n  ) {\n    return;\n  }\n  if (!(myElement as HTMLAnchorElement).href) {\n    return clearClick();\n  }\n  if (myElement.classList.contains(\"realLink\")) {\n    myElement.click();\n  } else {\n    router.push((myElement as HTMLAnchorElement).pathname);\n  }\n  nextTick(() => {\n    isClick.value = false;\n    clearData();\n  });\n}\nfunction clearClick() {\n  isClick.value = false;\n  clearData();\n}\nfunction clearDataTimeout() {\n  clearTimeout.value = setTimeout(() => {\n    if (!overPopover.value) {\n      clearData();\n    }\n    clearTimeout.value=undefined;\n  }, 500);\n}\nfunction clearData() {\n  // Allow closing if opened by hover, even if clicked afterwards\n  if (isClick.value && !openedByHover.value) {\n    return;\n  }\n  show.value = false;\n  posX.value = 0;\n  posY.value = 0;\n  openedByHover.value = false;\n}\n\n//Expose\ndefineExpose({\n  clearClick\n});\n</script>\n\n<style lang=\"scss\">\n.octopus-popover {\n  background: var(--octopus-background);\n  border-radius: var(--octopus-border-radius);\n  overflow: auto;\n  margin: 0 !important;\n  z-index: 10;\n\n  &.popover-z-index {\n    z-index: 9999;\n  }\n\n  &.octopus-dropdown {\n    min-width: 200px;\n\n    .octopus-dropdown-item {\n      display: flex;\n      justify-content: center;\n      color: var(--octopus-color-text);\n      width: 100%;\n      padding: 0.25rem 1rem;\n      font-weight: 400;\n      text-decoration: none;\n      white-space: nowrap;\n      background-color: transparent;\n      border: 0;\n\n      &:disabled {\n        background: var(--octopus-secondary-darker);\n      }\n\n      &:is(:hover, :focus){\n        color: var(--octopus-popover-dropdown-item-color-fg-hover);\n        background: var(--octopus-popover-dropdown-item-color-bg-hover);\n      }\n    }\n\n    hr {\n      margin: 0.5rem 0;\n      overflow: hidden;\n      border-top: 1px solid var(--octopus-border-default);\n      opacity: 1;\n    }\n  }\n}\n</style>\n","<template>\n  <Teleport to=\"#app\">\n    <div\n      v-show=\"displayPopover\"\n      :id=\"'popover' + target\"\n      ref=\"popover\"\n      popover\n      tabindex=\"0\"\n      class=\"octopus-popover border position-fixed\"\n      :class=\"[\n        displayPopover ? 'd-block': '',\n        onlyClick ? 'octopus-dropdown' : '',\n        popoverClass]\"\n      :style=\"positionInlineStyle\"\n      @mouseenter=\"overPopover = true\"\n      @mouseleave=\"\n        overPopover = false;\n        clearData();\n      \"\n    >\n      <div v-if=\"title\" class=\"bg-secondary-light p-2\">\n        {{ title }}\n      </div>\n      <div class=\"p-2\">\n        <slot>{{ content }}</slot>\n      </div>\n    </div>\n  </Teleport>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, nextTick, onMounted, onUnmounted, Ref, ref, useTemplateRef, watch } from 'vue';\nimport { useRouter } from 'vue-router';\n\n//Props \nconst props = defineProps({\n  content: { type: String, default: \"\" },\n  title: { type: String, default: \"\" },\n  target: { type: String, required: true },\n  disable: { type: Boolean, default: false },\n  onlyClick: { type: Boolean, default: false },\n  onlyMouse: { type: Boolean, default: false },\n  isFixed: { type: Boolean, default: false },\n  /** @deprecated No longer needed. The popover is teleported to body and always uses position:fixed. */\n  relativeClass: { type: String, default: undefined },\n  leftPos: { type: Boolean, default: false },\n  topPos: { type: Boolean, default: false },\n  popoverClass: { type: String, default: undefined },\n  isTopLayer: { type: Boolean, default: false },\n  /** @deprecated No longer needed. If set to true, max height of popover will not overflow from parent */\n  constrainHeight: { type: Boolean, default: true },\n  /** Force z-index */\n  zIndex: { type: Number, default: undefined }\n})\n\n//Emits\nconst emit = defineEmits([\"updateVisibility\"]);\n\n\n//Data\nconst show = ref(false);\nconst isClick = ref(false);\nconst openedByHover = ref(false);\nconst posX = ref(0);\nconst posY = ref(0);\nconst targetElement: Ref<HTMLElement | null> = ref(null);\nconst overPopover = ref(false);\nconst isTabAction = ref(false);\nconst maxHeight = ref('80dvh');\nconst clearTimeout: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined);\nconst popoverRef = useTemplateRef('popover');\n\n\n//Composables\nconst router = useRouter();\n\n//Computed\nconst popoverId = computed(() => \"popover\" + props.target);\nconst positionInlineStyle = computed(() => ({\n  left: `${posX.value}px`,\n  top: `${posY.value}px`,\n  'max-height': maxHeight.value,\n  'z-index': props.zIndex ?? 10\n}));\nconst displayPopover = computed(() => show.value && !props.disable);\nconst isTopLayerPopover = computed(() => (props.isTopLayer || \"octopus-modal\"===props.relativeClass) && Object.hasOwn(HTMLElement.prototype, \"popover\"));\n\n\n//Watch\nwatch(displayPopover, async () => {\n  if(!isTopLayerPopover.value){return;}\n  if(displayPopover.value){\n    (popoverRef.value as HTMLElement).showPopover();\n  }else{\n    (popoverRef.value as HTMLElement).hidePopover();\n  }\n});\nwatch(show, async () => {\n  emit(\"updateVisibility\", show.value);\n  if (show.value) {\n    window.addEventListener(\"keyup\", addAccessibilityControl);\n  } else {\n    window.removeEventListener(\"keyup\", addAccessibilityControl);\n  }\n});\nwatch(isClick, async () => {\n  // Only add global click listener if opened by click (not hover)\n  if (isClick.value && !openedByHover.value) {\n    window.addEventListener(\"click\", handleOutsideClick, true);\n  } else {\n    window.removeEventListener(\"click\", handleOutsideClick, true);\n  }\n});\n\nonMounted(()=>init())\n\nonUnmounted(()=>removeListeners())\n\n\n//Methods\nfunction handleOutsideClick(event: MouseEvent): void {\n  const target = event.target as HTMLElement;\n  const popover = popoverRef?.value as HTMLElement;\n  const targetEl = targetElement.value;\n\n  // Check if click is outside both the popover and the target element\n  if (\n    popover &&\n    !popover.contains(target) &&\n    targetEl &&\n    !targetEl.contains(target)\n  ) {\n    clearClick();\n  }\n}\nfunction addAccessibilityControl(event: KeyboardEvent): void {\n  if (!event || null === event) {\n    return;\n  }\n  if (\"Tab\" !== event.key) {\n    return;\n  }\n  const myElement = event.target as HTMLElement;\n  const parent = popoverRef?.value as HTMLElement;\n  if (parent?.contains(myElement)) {\n    isTabAction.value = true;\n  } else {\n    clearClick();\n  }\n}\nfunction init() {\n  targetElement.value = document.getElementById(props.target);\n  if (targetElement.value) {\n    if (!props.onlyClick) {\n      targetElement.value.addEventListener( \"mouseenter\",setPopoverData);\n      targetElement.value.addEventListener(\"mouseleave\",clearDataTimeout);\n    }\n    if (!props.onlyMouse) {\n      targetElement.value.addEventListener(\"click\", setPopoverData);\n    }\n    targetElement.value.addEventListener(\"focusout\", clearDataBlur);\n  }\n}\nfunction removeListeners() {\n  if (targetElement.value) {\n    if (!props.onlyClick) {\n      targetElement.value.removeEventListener(\"mouseenter\",setPopoverData,);\n      targetElement.value.removeEventListener(\"mouseleave\",clearDataTimeout,);\n    }\n    if (!props.onlyMouse) {\n      targetElement.value.removeEventListener(\"click\", setPopoverData);\n    }\n    targetElement.value.removeEventListener(\"focusout\", clearDataBlur);\n  }\n}\nfunction handleClickEvent(e: MouseEvent | PointerEvent){\n  if (show.value && isClick.value && e.target !== popoverRef.value && !popoverRef.value?.contains(e.target)) {\n    isClick.value = false;\n    clearData();\n    return -1;\n  }\n  if (show.value && isTopLayerPopover.value) {\n    const popover = popoverRef?.value as HTMLElement;\n    popover.showPopover();\n    isClick.value = true;\n    return -1;\n  }\n  isClick.value = true;\n  return 0;\n}\nfunction handleLeftPos(rectElement: DOMRect, parentLeft: number, sizeAvailable: number, sizePopover: number){\n  const elementRightRelative = rectElement.right - parentLeft;\n  const hasPlaceRightButton = (sizeAvailable - (sizeAvailable - elementRightRelative)) > sizePopover;\n  if(hasPlaceRightButton){\n    posX.value =\n    rectElement.right -\n    parentLeft -\n    sizePopover;\n  }else{\n    posX.value =parentLeft;\n  }\n}\nfunction handleRightPos(rectElement: DOMRect, parentLeft: number, sizeAvailable: number, sizePopover: number){\n  const elementLeftRelative = rectElement.left - parentLeft;\n  const hasPlaceRightButton = (sizeAvailable - elementLeftRelative) > sizePopover;\n  if(hasPlaceRightButton){\n    posX.value = elementLeftRelative;\n  }else{\n    posX.value = sizeAvailable - sizePopover + parentLeft;\n  }\n}\nfunction setPopoverData(e: MouseEvent | PointerEvent) {\n  clearInterval(clearTimeout.value as unknown as number);\n  if (props.disable || !e || !e.target) {\n    return;\n  }\n  if (\"click\" === e.type && -1 === handleClickEvent(e)) {\n    return;\n  }\n  // Track if opened by hover (mouseenter) vs click\n  if (e.type === \"mouseenter\") {\n    openedByHover.value = true;\n  }\n  show.value = true;\n  const popover = popoverRef?.value as HTMLElement;\n  // The popover is teleported to <body> and uses position:fixed, so\n  // getBoundingClientRect() coordinates map directly to viewport coordinates.\n  const rectElement = (e.target as HTMLElement).getBoundingClientRect();\n  popover.style.display = \"block\";\n  const sizePopover = popover.clientWidth;\n  if (props.leftPos) {\n    handleLeftPos(rectElement, 0, window.innerWidth, sizePopover);\n  } else {\n    handleRightPos(rectElement, 0, window.innerWidth, sizePopover);\n  }\n  posX.value = Math.max(0, posX.value);\n  const yPosParent = props.topPos ? rectElement.top : rectElement.bottom;\n  const yGap = props.topPos\n    ? -5 - popover.clientHeight\n    : 5;\n  posY.value = Math.max(0, yPosParent + yGap);\n  maxHeight.value = (window.innerHeight - posY.value) + \"px\";\n}\n\nfunction clearDataBlur(e: FocusEvent) {\n  if (isTabAction.value) {\n    isTabAction.value = false;\n    return;\n  }\n  //Exception timepicker in popover\n  const result = Array.from(e?.target?.classList ?? []).findIndex((val) => { return val.startsWith(\"dp__\");});\n  if (-1!==result) {\n    return;\n  }\n\n  const parent = popoverRef?.value as HTMLElement;\n  if (!e.relatedTarget) {\n    if (parent !== null && parent.contains(e.target)) {\n      return;\n    }\n    return clearClick();\n  }\n  const myElement = e.relatedTarget as HTMLElement;\n  if (popoverId.value === myElement.id) {\n    return;\n  }\n  if (null === parent || !parent.contains(myElement)) {\n    return clearClick();\n  }\n  if (\n    null === myElement.classList ||\n    !myElement.classList.contains(\"octopus-dropdown-item\")\n  ) {\n    return;\n  }\n  if (!(myElement as HTMLAnchorElement).href) {\n    return clearClick();\n  }\n  if (myElement.classList.contains(\"realLink\")) {\n    myElement.click();\n  } else {\n    router.push((myElement as HTMLAnchorElement).pathname);\n  }\n  nextTick(() => {\n    isClick.value = false;\n    clearData();\n  });\n}\nfunction clearClick() {\n  isClick.value = false;\n  clearData();\n}\nfunction clearDataTimeout() {\n  clearTimeout.value = setTimeout(() => {\n    if (!overPopover.value) {\n      clearData();\n    }\n    clearTimeout.value=undefined;\n  }, 500);\n}\nfunction clearData() {\n  // Allow closing if opened by hover, even if clicked afterwards\n  if (isClick.value && !openedByHover.value) {\n    return;\n  }\n  show.value = false;\n  posX.value = 0;\n  posY.value = 0;\n  openedByHover.value = false;\n}\n\n//Expose\ndefineExpose({\n  clearClick\n});\n</script>\n\n<style lang=\"scss\">\n.octopus-popover {\n  background: var(--octopus-background);\n  border-radius: var(--octopus-border-radius);\n  overflow: auto;\n  margin: 0 !important;\n  z-index: 10;\n\n  &.popover-z-index {\n    z-index: 9999;\n  }\n\n  &.octopus-dropdown {\n    min-width: 200px;\n\n    .octopus-dropdown-item {\n      display: flex;\n      justify-content: center;\n      color: var(--octopus-color-text);\n      width: 100%;\n      padding: 0.25rem 1rem;\n      font-weight: 400;\n      text-decoration: none;\n      white-space: nowrap;\n      background-color: transparent;\n      border: 0;\n\n      &:disabled {\n        background: var(--octopus-secondary-darker);\n      }\n\n      &:is(:hover, :focus){\n        color: var(--octopus-popover-dropdown-item-color-fg-hover);\n        background: var(--octopus-popover-dropdown-item-color-bg-hover);\n      }\n    }\n\n    hr {\n      margin: 0.5rem 0;\n      overflow: hidden;\n      border-top: 1px solid var(--octopus-border-default);\n      opacity: 1;\n    }\n  }\n}\n</style>\n"],"mappings":"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"}