element-plus
Version:
A Component Library for Vue 3
1 lines • 5.53 kB
Source Map (JSON)
{"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 />\n</template>\n<script lang=\"ts\">\nimport {\n defineComponent,\n getCurrentInstance,\n inject,\n nextTick,\n ref,\n watch,\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 Number.parseFloat(tabStyles.paddingLeft) +\n Number.parseFloat(tabStyles.paddingRight)\n }\n offset += Number.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","_createElementBlock","_normalizeClass","_normalizeStyle"],"mappings":"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"}