UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 6.61 kB
{"version":3,"file":"tab-bar2.mjs","sources":["../../../../../../packages/components/tabs/src/tab-bar.vue"],"sourcesContent":["<template>\n <div\n v-if=\"renderActiveBar\"\n ref=\"barRef\"\n :class=\"[ns.e('active-bar'), ns.is(rootTabs!.props.tabPosition)]\"\n :style=\"barStyle\"\n />\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject, nextTick, onBeforeUnmount, ref, watch } from 'vue'\nimport { useResizeObserver } from '@vueuse/core'\nimport { capitalize, isUndefined, throwError } from '@element-plus/utils'\nimport { useNamespace } from '@element-plus/hooks'\nimport { tabsRootContextKey } from './constants'\nimport { tabBarProps } from './tab-bar'\n\nimport type { CSSProperties } from 'vue'\n\nconst COMPONENT_NAME = 'ElTabBar'\ndefineOptions({\n name: COMPONENT_NAME,\n})\nconst props = defineProps(tabBarProps)\n\nconst rootTabs = inject(tabsRootContextKey)\nif (!rootTabs) throwError(COMPONENT_NAME, '<el-tabs><el-tab-bar /></el-tabs>')\n\nconst ns = useNamespace('tabs')\n\nconst barRef = ref<HTMLDivElement>()\nconst barStyle = ref<CSSProperties>()\n/**\n * when defaultValue is not set, the bar is always shown.\n *\n * when defaultValue is set, the bar will be hidden until style is calculated\n * to avoid the bar showing in the wrong position on initial render.\n */\nconst renderActiveBar = computed(\n () =>\n isUndefined(rootTabs.props.defaultValue) ||\n Boolean(barStyle.value?.transform)\n)\n\nconst 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 const position = sizeDir === 'x' ? 'left' : 'top'\n\n props.tabs.every((tab) => {\n if (isUndefined(tab.paneName)) return false\n const $el = props.tabRefs[tab.paneName]\n if (!$el) return false\n\n if (!tab.active) {\n return true\n }\n\n offset = $el[`offset${capitalize(position)}`]\n tabSize = $el[`client${capitalize(sizeName)}`]\n\n const tabStyles = window.getComputedStyle($el)\n\n if (sizeName === 'width') {\n tabSize -=\n Number.parseFloat(tabStyles.paddingLeft) +\n Number.parseFloat(tabStyles.paddingRight)\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\nconst update = () => (barStyle.value = getBarStyle())\n\nconst tabObservers = [] as ReturnType<typeof useResizeObserver>[]\nconst observerTabs = () => {\n tabObservers.forEach((observer) => observer.stop())\n tabObservers.length = 0\n\n Object.values(props.tabRefs).forEach((tab) => {\n tabObservers.push(useResizeObserver(tab, update))\n })\n}\n\nwatch(\n () => props.tabs,\n async () => {\n await nextTick()\n update()\n\n observerTabs()\n },\n { immediate: true }\n)\nconst barObserver = useResizeObserver(barRef, () => update())\n\nonBeforeUnmount(() => {\n tabObservers.forEach((observer) => observer.stop())\n tabObservers.length = 0\n barObserver.stop()\n})\n\ndefineExpose({\n /** @description tab root html element */\n ref: barRef,\n /** @description method to manually update tab bar style */\n update,\n})\n</script>\n"],"names":["_openBlock","_createElementBlock","_normalizeClass","_unref","_normalizeStyle"],"mappings":"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"}