{"version":3,"file":"tab-bar2.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-plus/tokens'\nimport { throwError } from '@element-plus/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":["_openBlock"],"mappings":";;;;;;;;;;AAwBA,MAAM,iBAAiB;AACvB,MAAK,YAAa,gBAAa;AAAA,EAC7B,MAAM;AAAA,EACN,OAAO;AAAA,EAEP,MAAM,OAAO;AACX,UAAM,WAAW;AACjB,UAAM,WAAW,OAAO;AACxB,QAAI,CAAC;AAAU,iBAAW,gBAAgB;AAE1C,UAAM,OAAO;AACb,UAAM,WAAW;AAEjB,UAAM,cAAc,MAAqB;AACvC,UAAI,SAAS;AACb,UAAI,UAAU;AAEd,YAAM,WAAW,CAAC,OAAO,UAAU,SAAS,SAAS,MAAM,eACvD,UACA;AACJ,YAAM,UAAU,aAAa,UAAU,MAAM;AAE7C,YAAM,KAAK,MAAM,CAAC,QAAQ;AACxB,cAAM,MAAM;AAGZ;AAAU;AAEV,iBAAS;AACP,iBAAO;AAAA;AAGT;AACA,oDAA4C;AAC5C,yDAEG;AACH,cAAM;AAEN;AACE,oBAAU,KAAK,SAAS;AACtB,kCACa;AACU;AAEzB;AAA+B;AAEjC;AAAO;AAGT;AAAO;AACU,QACf,uBAAuB;AAAuB;AAAA;AAIlD;AAEA,UACE,MAAM;AAEJ;AACA;AAAA;AAIJ,4BAAwB;AAExB;AAAO;AACL,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA;AAAA;;SA9FE;AAAM,SACJA;AAAA,IACL;AAAe;;;;;;;;"}