{"version":3,"file":"scrollbar2.mjs","sources":["../../../../../../packages/components/scrollbar/src/scrollbar.vue"],"sourcesContent":["<template>\n  <div ref=\"scrollbar$\" :class=\"ns.b()\">\n    <div\n      ref=\"wrap$\"\n      :class=\"[\n        wrapClass,\n        ns.e('wrap'),\n        { [ns.em('wrap', 'hidden-default')]: !native },\n      ]\"\n      :style=\"style\"\n      @scroll=\"handleScroll\"\n    >\n      <component\n        :is=\"tag\"\n        ref=\"resize$\"\n        :class=\"[ns.e('view'), viewClass]\"\n        :style=\"viewStyle\"\n      >\n        <slot />\n      </component>\n    </div>\n    <template v-if=\"!native\">\n      <bar\n        ref=\"barRef\"\n        :height=\"sizeHeight\"\n        :width=\"sizeWidth\"\n        :always=\"always\"\n        :ratio-x=\"ratioX\"\n        :ratio-y=\"ratioY\"\n      />\n    </template>\n  </div>\n</template>\n<script lang=\"ts\">\nimport {\n  computed,\n  defineComponent,\n  nextTick,\n  onMounted,\n  provide,\n  ref,\n  watch,\n  reactive,\n} from 'vue'\nimport { useResizeObserver, useEventListener } from '@vueuse/core'\nimport { isNumber, debugWarn, addUnit } from '@element-plus/utils'\nimport { scrollbarContextKey } from '@element-plus/tokens'\nimport { useNamespace } from '@element-plus/hooks'\nimport Bar from './bar.vue'\n\nimport { scrollbarProps, scrollbarEmits } from './scrollbar'\nimport type { StyleValue, CSSProperties } from 'vue'\n\nexport default defineComponent({\n  name: 'ElScrollbar',\n  components: {\n    Bar,\n  },\n  props: scrollbarProps,\n  emits: scrollbarEmits,\n\n  setup(props, { emit }) {\n    const ns = useNamespace('scrollbar')\n\n    let stopResizeObserver: (() => void) | undefined = undefined\n    let stopResizeListener: (() => void) | undefined = undefined\n\n    const scrollbar$ = ref<HTMLDivElement>()\n    const wrap$ = ref<HTMLDivElement>()\n    const resize$ = ref<HTMLElement>()\n\n    const sizeWidth = ref('0')\n    const sizeHeight = ref('0')\n    const barRef = ref()\n    const moveX = ref(0)\n    const moveY = ref(0)\n    const ratioY = ref(1)\n    const ratioX = ref(1)\n    const SCOPE = 'ElScrollbar'\n    const GAP = 4 // top 2 + bottom 2 of bar instance\n\n    const style = computed<StyleValue>(() => {\n      const style: CSSProperties = {}\n      if (props.height) style.height = addUnit(props.height)\n      if (props.maxHeight) style.maxHeight = addUnit(props.maxHeight)\n      return [props.wrapStyle, style]\n    })\n\n    const handleScroll = () => {\n      if (wrap$.value) {\n        barRef.value?.handleScroll(wrap$.value)\n\n        emit('scroll', {\n          scrollTop: wrap$.value.scrollTop,\n          scrollLeft: wrap$.value.scrollLeft,\n        })\n      }\n    }\n\n    const setScrollTop = (value: number) => {\n      if (!isNumber(value)) {\n        debugWarn(SCOPE, 'value must be a number')\n        return\n      }\n      wrap$.value!.scrollTop = value\n    }\n\n    const setScrollLeft = (value: number) => {\n      if (!isNumber(value)) {\n        debugWarn(SCOPE, 'value must be a number')\n        return\n      }\n      wrap$.value!.scrollLeft = value\n    }\n\n    const update = () => {\n      if (!wrap$.value) return\n      const offsetHeight = wrap$.value.offsetHeight - GAP\n      const offsetWidth = wrap$.value.offsetWidth - GAP\n\n      const originalHeight = offsetHeight ** 2 / wrap$.value.scrollHeight\n      const originalWidth = offsetWidth ** 2 / wrap$.value.scrollWidth\n      const height = Math.max(originalHeight, props.minSize)\n      const width = Math.max(originalWidth, props.minSize)\n\n      ratioY.value =\n        originalHeight /\n        (offsetHeight - originalHeight) /\n        (height / (offsetHeight - height))\n      ratioX.value =\n        originalWidth /\n        (offsetWidth - originalWidth) /\n        (width / (offsetWidth - width))\n\n      sizeHeight.value = height + GAP < offsetHeight ? `${height}px` : ''\n      sizeWidth.value = width + GAP < offsetWidth ? `${width}px` : ''\n    }\n\n    watch(\n      () => props.noresize,\n      (noresize) => {\n        if (noresize) {\n          stopResizeObserver?.()\n          stopResizeListener?.()\n        } else {\n          ;({ stop: stopResizeObserver } = useResizeObserver(resize$, update))\n          stopResizeListener = useEventListener('resize', update)\n        }\n      },\n      { immediate: true }\n    )\n\n    watch(\n      () => [props.maxHeight, props.height],\n      () => {\n        if (!props.native)\n          nextTick(() => {\n            update()\n            if (wrap$.value) {\n              barRef.value?.handleScroll(wrap$.value)\n            }\n          })\n      }\n    )\n\n    provide(\n      scrollbarContextKey,\n      reactive({\n        scrollbarElement: scrollbar$,\n        wrapElement: wrap$,\n      })\n    )\n\n    onMounted(() => {\n      if (!props.native) nextTick(() => update())\n    })\n\n    return {\n      ns,\n      scrollbar$,\n      wrap$,\n      resize$,\n      barRef,\n      moveX,\n      moveY,\n      ratioX,\n      ratioY,\n      sizeWidth,\n      sizeHeight,\n      style,\n      update,\n      handleScroll,\n      setScrollTop,\n      setScrollLeft,\n    }\n  },\n})\n</script>\n"],"names":["_resolveComponent","_openBlock","_normalizeClass","_createElementVNode","_normalizeStyle","_createBlock","_resolveDynamicComponent","_withCtx","_renderSlot"],"mappings":"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"}