{"version":3,"file":"tab-nav-bar.mjs","sources":["../../../components/tabs/tab-nav-bar.tsx"],"sourcesContent":["import { defineComponent, PropType, computed, VNode, nextTick, ref, watch, onMounted } from 'vue';\nimport tabProps from './props';\n\n// hooks\nimport { usePrefixClass, useResizeObserver } from '@tdesign/shared-hooks';\n\nimport { debounce } from 'lodash-es';\n\nexport default defineComponent({\n  props: {\n    navs: {\n      type: Array as PropType<VNode[]>,\n    },\n    placement: tabProps.placement,\n    value: tabProps.value,\n  },\n  setup(props) {\n    const COMPONENT_NAME = usePrefixClass('tabs');\n    const classPrefix = usePrefixClass();\n    const barRef = ref<HTMLElement>();\n    const navBarClass = computed(() => {\n      return [`${COMPONENT_NAME.value}__bar`, `${classPrefix.value}-is-${props.placement}`];\n    });\n    const navBarStyle = ref(null);\n    const getStyle = () => {\n      const isVertical = ['left', 'right'].includes(props.placement.toLowerCase());\n      const [sizePropName, offsetPropName] = isVertical ? ['height', 'top'] : ['width', 'left'];\n      let offset = 0;\n      let i = 0;\n      for (; i < props.navs.length; i++) {\n        if (props.navs[i].props.value === props.value) {\n          break;\n        }\n        if (props.navs[i]?.el) {\n          const sizeWithUnit = getComputedStyle(props.navs[i].el as Element)[sizePropName as 'width' | 'left'];\n          const size = parseFloat(sizeWithUnit);\n          offset += size;\n        }\n      }\n      if (!props.navs[i]) return {};\n      return {\n        [offsetPropName]: `${offset}px`,\n        [sizePropName]: props.navs[i].el\n          ? getComputedStyle(props.navs[i].el as Element)[sizePropName as 'width' | 'left']\n          : '0px',\n      };\n    };\n    const update = () => (navBarStyle.value = getStyle());\n\n    onMounted(() => {\n      nextTick(() => {\n        update();\n      });\n    });\n\n    watch([() => props.navs, () => props.value, () => props.placement], () => {\n      nextTick(() => {\n        update();\n      });\n    });\n\n    useResizeObserver(\n      barRef,\n      debounce(() => {\n        update();\n        // 数值大了动画不流畅，小了会频繁触发，所以在合适区间里选择一个值\n      }, 35),\n    );\n    return () => {\n      return <div class={navBarClass.value} style={navBarStyle.value} ref={barRef}></div>;\n    };\n  },\n});\n"],"names":["defineComponent","props","navs","type","Array","placement","tabProps","value","setup","COMPONENT_NAME","usePrefixClass","classPrefix","barRef","ref","navBarClass","computed","concat","navBarStyle","getStyle","isVertical","includes","toLowerCase","_ref","_ref2","_slicedToArray","sizePropName","offsetPropName","offset","i","length","_props$navs$i","el","sizeWithUnit","getComputedStyle","size","parseFloat","_defineProperty","update","onMounted","nextTick","watch","useResizeObserver","debounce","_createVNode"],"mappings":"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"}