{"version":3,"file":"scrollbar.vue2.mjs","sources":["../../../../../packages/components/scrollbar/src/scrollbar.vue"],"sourcesContent":["<template>\n  <div\n    :class=\"ns.b()\"\n    @mouseenter=\"handleMouseEnter\"\n    @mouseleave=\"handleMouseLeave\"\n  >\n    <!-- 滚动容器 start -->\n    <div\n      ref=\"wrapRef\"\n      :class=\"scrollbarWrapClass\"\n      :style=\"scrollbarWrapStyle\"\n      @scroll.passive=\"handleScroll\"\n    >\n      <!-- 视图容器 start -->\n      <component :style=\"viewStyle\" :class=\"_viewClass\" :is=\"tag\" ref=\"viewRef\">\n        <slot />\n      </component>\n      <!-- 视图容器 end -->\n    </div>\n    <!-- 滚动容器 end -->\n\n    <!-- 滚动条 -->\n    <Bars ref=\"barsRef\" :z-index=\"zIndex\" @scroll-to=\"scrollTo\" />\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useNamespace } from '@element-ultra/hooks'\nimport { useResizeObserver } from '@vueuse/core'\nimport {\n  computed,\n  CSSProperties,\n  onBeforeUnmount,\n  onMounted,\n  shallowRef\n} from 'vue'\nimport { scrollbarProps, scrollbarEmits } from './scrollbar'\nimport useScroll from './use-scroll'\nimport Bars from './bars.vue'\n\nconst props = defineProps(scrollbarProps)\n\nconst emit = defineEmits(scrollbarEmits)\n\nconst ns = useNamespace('scrollbar')\n\nconst _viewClass = computed(() => {\n  const { viewClass } = props\n  let ret: string[] = [ns.e('view')]\n  if (Array.isArray(viewClass)) {\n    ret = [...ret, ...viewClass]\n  } else if (viewClass) {\n    ret.push(viewClass)\n  }\n  return ret\n})\n\nconst barsRef = shallowRef<InstanceType<typeof Bars>>()\nconst wrapRef = shallowRef<HTMLElement>()\nconst viewRef = shallowRef<HTMLElement>()\n\nconst scrollbarWrapClass = computed(() => {\n  return [ns.e('wrap'), props.wrapClass]\n})\n\nconst scrollbarWrapStyle = computed(() => {\n  const style: CSSProperties = {}\n  if (props.maxHeight) {\n    style.maxHeight = props.maxHeight\n  } else {\n    style.height = '100%'\n  }\n\n  Object.assign(style, props.wrapStyle)\n\n  return style\n})\n\nconst scrollTo = (ctx: { left?: number; top?: number }) => {\n  wrapRef.value?.scrollTo(ctx)\n}\n\nconst updateBar = useScroll({\n  wrapper: wrapRef\n})\n\nconst handleScroll = () => {\n  updateBar(state => {\n    emit('scroll', state.wrapState)\n    barsRef.value?.update(state)\n  })\n}\n\n// 需要监听滚动容器和视图容器的size变化重新更新滚动条样式\n// @ts-ignore\nconst contentResizeObserver = useResizeObserver(wrapRef, ([entry]) => {\n  emit('view-resize', entry.contentRect)\n  handleScroll()\n})\n// @ts-ignore\nconst resizeObserver = useResizeObserver(viewRef, () => {\n  handleScroll()\n})\n\nconst handleMouseEnter = () => {\n  barsRef.value?.setHovered(true)\n}\n\nconst handleMouseLeave = () => {\n  barsRef.value?.setHovered(false)\n}\n\nonMounted(() => {\n  handleScroll()\n})\n\nonBeforeUnmount(() => {\n  contentResizeObserver.stop()\n  resizeObserver.stop()\n})\n\ndefineExpose({\n  scrollTo,\n  wrapRef,\n  viewRef\n})\n</script>\n"],"names":[],"mappings":"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"}