{"version":3,"file":"scrollbar2.mjs","sources":["../../../../../../../packages/components/scrollbar/src/scrollbar.vue"],"sourcesContent":["<script lang=\"ts\">\nimport {\n  computed,\n  defineComponent,\n  inject,\n  nextTick,\n  onBeforeUnmount,\n  onMounted,\n  provide,\n  ref,\n  unref,\n} from 'vue'\nimport { addResizeListener, removeResizeListener } from '@tav-ui/utils/event/index'\nimport Button from '@tav-ui/components/button'\nimport Bar from './bar'\nimport { scrollbarProps } from './types'\nimport { toObject } from './util'\nimport type { Emitter } from '@tav-ui/utils'\n\nexport default defineComponent({\n  name: 'TaScrollbar',\n  components: { Bar, Button },\n  inheritAttrs: false,\n  props: scrollbarProps,\n  setup(props) {\n    const sizeWidth = ref('0')\n    const sizeHeight = ref('0')\n    const moveX = ref(0)\n    const moveY = ref(0)\n    const wrap = ref<HTMLElement>()\n    const resize = ref()\n    const isBackTopShow = ref<boolean>(false)\n\n    provide('scroll-bar-wrap', wrap)\n\n    const style = computed(() => {\n      if (Array.isArray(props.wrapStyle)) return toObject(props.wrapStyle)\n\n      return props.wrapStyle\n    })\n\n    const handleScroll = () => {\n      if (!props.native && wrap.value) {\n        moveY.value = (wrap.value.scrollTop * 100) / wrap.value.clientHeight\n        moveX.value = (wrap.value.scrollLeft * 100) / wrap.value.clientWidth\n\n        if (props.backTopVisibilityHeight && moveY.value > props.backTopVisibilityHeight) {\n          isBackTopShow.value = true\n        } else {\n          isBackTopShow.value = false\n        }\n      }\n    }\n\n    const update = () => {\n      if (!wrap.value) return\n      const heightPercentage = (wrap.value.clientHeight * 100) / wrap.value.scrollHeight\n      const widthPercentage = (wrap.value.clientWidth * 100) / wrap.value.scrollWidth\n\n      sizeHeight.value = heightPercentage < 100 ? `${heightPercentage}%` : ''\n      sizeWidth.value = widthPercentage < 100 ? `${widthPercentage}%` : ''\n    }\n\n    const handleBackTopClick = () => {\n      if (wrap.value) wrap.value.scrollTop = 0\n    }\n\n    onMounted(() => {\n      if (props.native) return\n      nextTick(update)\n      inject<Emitter>('modalEmitter')?.on('redoThumbHeight', () => {\n        nextTick(update)\n      })\n\n      if (!props.noresize) {\n        addResizeListener(unref(resize), update)\n        wrap.value && addResizeListener(wrap.value, update)\n        addEventListener('resize', update)\n      }\n    })\n\n    onBeforeUnmount(() => {\n      if (props.native) return\n      if (!props.noresize) {\n        removeResizeListener(unref(resize), update)\n        wrap.value && removeResizeListener(wrap.value, update)\n        removeEventListener('resize', update)\n      }\n    })\n\n    return {\n      moveX,\n      moveY,\n      sizeWidth,\n      sizeHeight,\n      style,\n      wrap,\n      resize,\n      update,\n      handleScroll,\n      isBackTopShow,\n      handleBackTopClick,\n    }\n  },\n})\n</script>\n<template>\n  <div :class=\"['scrollbar', containerClass]\">\n    <div\n      ref=\"wrap\"\n      :class=\"[wrapClass, 'scrollbar__wrap', native ? '' : 'scrollbar__wrap--hidden-default']\"\n      :style=\"style\"\n      @scroll=\"handleScroll\"\n    >\n      <component :is=\"tag\" ref=\"resize\" :class=\"['scrollbar__view', viewClass]\" :style=\"viewStyle\">\n        <slot />\n        <Button\n          v-if=\"isBackTopShow\"\n          type=\"text\"\n          pre-icon=\"ant-design:vertical-align-top-outlined\"\n          :icon-size=\"18\"\n          style=\"\n            min-width: auto;\n            position: absolute;\n            right: 15px;\n            bottom: 7px;\n            width: 30px;\n            height: 30px !important;\n            overflow: hidden;\n            color: #fff;\n            background-color: #00000073;\n            border-radius: 50%;\n            transition: all 0.3s;\n            cursor: pointer;\n            display: flex;\n            justify-content: center;\n            align-items: center;\n          \"\n          @click=\"handleBackTopClick\"\n        />\n      </component>\n    </div>\n    <template v-if=\"!native\">\n      <bar :move=\"moveX\" :size=\"sizeWidth\" />\n      <bar vertical :move=\"moveY\" :size=\"sizeHeight\" />\n    </template>\n  </div>\n</template>\n"],"names":["Button","_createElementBlock","_normalizeClass","_createElementVNode","_normalizeStyle","_openBlock","_createBlock","_resolveDynamicComponent","_renderSlot","_createCommentVNode","_Fragment","_createVNode"],"mappings":"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"}