{"version":3,"file":"tab-bar.vue2.mjs","sources":["../../../../../packages/components/tabs/src/tab-bar.vue"],"sourcesContent":["<template>\n  <div\n    ref=\"bar$\"\n    :class=\"['el-tabs__active-bar', `is-${rootTabs.props.tabPosition}`]\"\n    :style=\"barStyle\"\n  ></div>\n</template>\n<script lang=\"ts\">\nimport {\n  defineComponent,\n  inject,\n  getCurrentInstance,\n  watch,\n  nextTick,\n  ref,\n} from 'vue'\nimport { capitalize } from '@vue/shared'\nimport { useResizeObserver } from '@vueuse/core'\nimport { tabsRootContextKey } from '@element-ultra/tokens'\nimport { throwError } from '@element-ultra/utils'\nimport { tabBar } from './tab-bar'\n\nimport type { CSSProperties } from 'vue'\n\nconst COMPONENT_NAME = 'ElTabBar'\nexport default defineComponent({\n  name: COMPONENT_NAME,\n  props: tabBar,\n\n  setup(props) {\n    const instance = getCurrentInstance()!\n    const rootTabs = inject(tabsRootContextKey)\n    if (!rootTabs) throwError(COMPONENT_NAME, 'must use with ElTabs')\n\n    const bar$ = ref<HTMLDivElement>()\n    const barStyle = ref()\n\n    const getBarStyle = (): CSSProperties => {\n      let offset = 0\n      let tabSize = 0\n\n      const sizeName = ['top', 'bottom'].includes(rootTabs.props.tabPosition)\n        ? 'width'\n        : 'height'\n      const sizeDir = sizeName === 'width' ? 'x' : 'y'\n\n      props.tabs.every((tab) => {\n        const $el = instance.parent?.refs?.[\n          `tab-${tab.paneName}`\n        ] as HTMLElement\n        if (!$el) return false\n\n        if (!tab.active) {\n          return true\n        }\n\n        tabSize = $el[`client${capitalize(sizeName)}`]\n        const position = sizeDir === 'x' ? 'left' : 'top'\n        offset =\n          $el.getBoundingClientRect()[position] -\n          ($el.parentElement?.getBoundingClientRect()[position] ?? 0)\n        const tabStyles = window.getComputedStyle($el)\n\n        if (sizeName === 'width') {\n          if (props.tabs.length > 1) {\n            tabSize -=\n              parseFloat(tabStyles.paddingLeft) +\n              parseFloat(tabStyles.paddingRight)\n          }\n          offset += parseFloat(tabStyles.paddingLeft)\n        }\n        return false\n      })\n\n      return {\n        [sizeName]: `${tabSize}px`,\n        transform: `translate${capitalize(sizeDir)}(${offset}px)`,\n      }\n    }\n\n    const update = () => (barStyle.value = getBarStyle())\n\n    watch(\n      () => props.tabs,\n      async () => {\n        await nextTick()\n        update()\n      },\n      { immediate: true }\n    )\n    useResizeObserver(bar$, () => update())\n\n    return {\n      bar$,\n      rootTabs,\n      barStyle,\n      update,\n    }\n  },\n})\n</script>\n"],"names":[],"mappings":"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"}