{"version":3,"file":"affix2.mjs","sources":["../../../../../../packages/components/affix/src/affix.vue"],"sourcesContent":["<template>\n  <div ref=\"root\" :class=\"ns.b()\" :style=\"rootStyle\">\n    <div :class=\"{ [ns.m('fixed')]: fixed }\" :style=\"affixStyle\">\n      <slot />\n    </div>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, onMounted, ref, shallowRef, watch, watchEffect } from 'vue'\nimport {\n  useElementBounding,\n  useEventListener,\n  useWindowSize,\n} from '@vueuse/core'\nimport { addUnit, getScrollContainer, throwError } from '@element-plus/utils'\nimport { useNamespace } from '@element-plus/hooks'\nimport { affixEmits, affixProps } from './affix'\nimport type { CSSProperties } from 'vue'\n\nconst COMPONENT_NAME = 'ElAffix'\ndefineOptions({\n  name: COMPONENT_NAME,\n})\n\nconst props = defineProps(affixProps)\nconst emit = defineEmits(affixEmits)\n\nconst ns = useNamespace('affix')\n\nconst target = shallowRef<HTMLElement>()\nconst root = shallowRef<HTMLDivElement>()\nconst scrollContainer = shallowRef<HTMLElement | Window>()\nconst { height: windowHeight } = useWindowSize()\nconst {\n  height: rootHeight,\n  width: rootWidth,\n  top: rootTop,\n  bottom: rootBottom,\n  update: updateRoot,\n} = useElementBounding(root, { windowScroll: false })\nconst targetRect = useElementBounding(target)\n\nconst fixed = ref(false)\nconst scrollTop = ref(0)\nconst transform = ref(0)\n\nconst rootStyle = computed<CSSProperties>(() => {\n  return {\n    height: fixed.value ? `${rootHeight.value}px` : '',\n    width: fixed.value ? `${rootWidth.value}px` : '',\n  }\n})\n\nconst affixStyle = computed<CSSProperties>(() => {\n  if (!fixed.value) return {}\n\n  const offset = props.offset ? addUnit(props.offset) : 0\n  return {\n    height: `${rootHeight.value}px`,\n    width: `${rootWidth.value}px`,\n    top: props.position === 'top' ? offset : '',\n    bottom: props.position === 'bottom' ? offset : '',\n    transform: transform.value ? `translateY(${transform.value}px)` : '',\n    zIndex: props.zIndex,\n  }\n})\n\nconst update = () => {\n  if (!scrollContainer.value) return\n\n  scrollTop.value =\n    scrollContainer.value instanceof Window\n      ? document.documentElement.scrollTop\n      : scrollContainer.value.scrollTop || 0\n\n  const { position, target, offset } = props\n  const rootHeightOffset = offset + rootHeight.value\n\n  if (position === 'top') {\n    if (target) {\n      const difference = targetRect.bottom.value - rootHeightOffset\n      fixed.value = offset > rootTop.value && targetRect.bottom.value > 0\n      transform.value = difference < 0 ? difference : 0\n    } else {\n      fixed.value = offset > rootTop.value\n    }\n  } else if (target) {\n    const difference =\n      windowHeight.value - targetRect.top.value - rootHeightOffset\n    fixed.value =\n      windowHeight.value - offset < rootBottom.value &&\n      windowHeight.value > targetRect.top.value\n    transform.value = difference < 0 ? -difference : 0\n  } else {\n    fixed.value = windowHeight.value - offset < rootBottom.value\n  }\n}\n\nconst handleScroll = () => {\n  updateRoot()\n  emit('scroll', {\n    scrollTop: scrollTop.value,\n    fixed: fixed.value,\n  })\n}\n\nwatch(fixed, (val) => emit('change', val))\n\nonMounted(() => {\n  if (props.target) {\n    target.value =\n      document.querySelector<HTMLElement>(props.target) ?? undefined\n    if (!target.value)\n      throwError(COMPONENT_NAME, `Target does not exist: ${props.target}`)\n  } else {\n    target.value = document.documentElement\n  }\n  scrollContainer.value = getScrollContainer(root.value!, true)\n  updateRoot()\n})\n\nuseEventListener(scrollContainer, 'scroll', handleScroll)\nwatchEffect(update)\n\ndefineExpose({\n  /** @description update affix status */\n  update,\n  /** @description update rootRect info */\n  updateRoot,\n})\n</script>\n"],"names":["target"],"mappings":"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"}