You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1 line
22 KiB
1 line
22 KiB
{"version":3,"file":"tab-nav.mjs","sources":["../../../../../../packages/components/tabs/src/tab-nav.ts"],"sourcesContent":["import {\n h,\n defineComponent,\n ref,\n inject,\n computed,\n onUpdated,\n onMounted,\n watch,\n} from 'vue'\nimport { NOOP, capitalize } from '@vue/shared'\nimport {\n useResizeObserver,\n useDocumentVisibility,\n useWindowFocus,\n} from '@vueuse/core'\nimport { buildProps, definePropType, mutable } from '@element-plus/utils/props'\nimport { EVENT_CODE } from '@element-plus/utils/aria'\nimport { throwError } from '@element-plus/utils/error'\nimport { ElIcon } from '@element-plus/components/icon'\nimport { ArrowLeft, ArrowRight, Close } from '@element-plus/icons-vue'\nimport { tabsRootContextKey } from '@element-plus/tokens'\nimport TabBar from './tab-bar.vue'\nimport type { ExtractPropTypes, CSSProperties } from 'vue'\nimport type { TabsPaneContext } from '@element-plus/tokens'\nexport interface Scrollable {\n next?: boolean\n prev?: number\n}\n\nexport const tabNavProps = buildProps({\n panes: {\n type: definePropType<TabsPaneContext[]>(Array),\n default: () => mutable([] as const),\n },\n currentName: {\n type: String,\n default: '',\n },\n editable: Boolean,\n onTabClick: {\n type: definePropType<\n (tab: TabsPaneContext, tabName: string, ev: Event) => void\n >(Function),\n default: NOOP,\n },\n onTabRemove: {\n type: definePropType<(tab: TabsPaneContext, ev: Event) => void>(Function),\n default: NOOP,\n },\n type: {\n type: String,\n values: ['card', 'border-card', ''],\n default: '',\n },\n stretch: Boolean,\n} as const)\n\nexport type TabNavProps = ExtractPropTypes<typeof tabNavProps>\n\nconst COMPONENT_NAME = 'ElTabNav'\nexport default defineComponent({\n name: COMPONENT_NAME,\n props: tabNavProps,\n\n setup(props, { expose }) {\n const visibility = useDocumentVisibility()\n const focused = useWindowFocus()\n\n const rootTabs = inject(tabsRootContextKey)\n if (!rootTabs)\n throwError(COMPONENT_NAME, `ElTabNav must be nested inside ElTabs`)\n\n const scrollable = ref<false | Scrollable>(false)\n const navOffset = ref(0)\n const isFocus = ref(false)\n const focusable = ref(true)\n\n const navScroll$ = ref<HTMLDivElement>()\n const nav$ = ref<HTMLDivElement>()\n const el$ = ref<HTMLDivElement>()\n\n const sizeName = computed(() =>\n ['top', 'bottom'].includes(rootTabs.props.tabPosition)\n ? 'width'\n : 'height'\n )\n const navStyle = computed<CSSProperties>(() => {\n const dir = sizeName.value === 'width' ? 'X' : 'Y'\n return {\n transform: `translate${dir}(-${navOffset.value}px)`,\n }\n })\n\n const scrollPrev = () => {\n if (!navScroll$.value) return\n\n const containerSize =\n navScroll$.value[`offset${capitalize(sizeName.value)}`]\n const currentOffset = navOffset.value\n\n if (!currentOffset) return\n\n const newOffset =\n currentOffset > containerSize ? currentOffset - containerSize : 0\n\n navOffset.value = newOffset\n }\n\n const scrollNext = () => {\n if (!navScroll$.value || !nav$.value) return\n\n const navSize = nav$.value[`offset${capitalize(sizeName.value)}`]\n const containerSize =\n navScroll$.value[`offset${capitalize(sizeName.value)}`]\n const currentOffset = navOffset.value\n\n if (navSize - currentOffset <= containerSize) return\n\n const newOffset =\n navSize - currentOffset > containerSize * 2\n ? currentOffset + containerSize\n : navSize - containerSize\n\n navOffset.value = newOffset\n }\n\n const scrollToActiveTab = () => {\n const nav = nav$.value\n if (!scrollable.value || !el$.value || !navScroll$.value || !nav) return\n\n const activeTab = el$.value.querySelector('.is-active')\n if (!activeTab) return\n\n const navScroll = navScroll$.value\n const isHorizontal = ['top', 'bottom'].includes(\n rootTabs.props.tabPosition\n )\n const activeTabBounding = activeTab.getBoundingClientRect()\n const navScrollBounding = navScroll.getBoundingClientRect()\n const maxOffset = isHorizontal\n ? nav.offsetWidth - navScrollBounding.width\n : nav.offsetHeight - navScrollBounding.height\n const currentOffset = navOffset.value\n let newOffset = currentOffset\n\n if (isHorizontal) {\n if (activeTabBounding.left < navScrollBounding.left) {\n newOffset =\n currentOffset - (navScrollBounding.left - activeTabBounding.left)\n }\n if (activeTabBounding.right > navScrollBounding.right) {\n newOffset =\n currentOffset + activeTabBounding.right - navScrollBounding.right\n }\n } else {\n if (activeTabBounding.top < navScrollBounding.top) {\n newOffset =\n currentOffset - (navScrollBounding.top - activeTabBounding.top)\n }\n if (activeTabBounding.bottom > navScrollBounding.bottom) {\n newOffset =\n currentOffset +\n (activeTabBounding.bottom - navScrollBounding.bottom)\n }\n }\n newOffset = Math.max(newOffset, 0)\n navOffset.value = Math.min(newOffset, maxOffset)\n }\n\n const update = () => {\n if (!nav$.value || !navScroll$.value) return\n\n const navSize = nav$.value[`offset${capitalize(sizeName.value)}`]\n const containerSize =\n navScroll$.value[`offset${capitalize(sizeName.value)}`]\n const currentOffset = navOffset.value\n\n if (containerSize < navSize) {\n const currentOffset = navOffset.value\n scrollable.value = scrollable.value || {}\n scrollable.value.prev = currentOffset\n scrollable.value.next = currentOffset + containerSize < navSize\n if (navSize - currentOffset < containerSize) {\n navOffset.value = navSize - containerSize\n }\n } else {\n scrollable.value = false\n if (currentOffset > 0) {\n navOffset.value = 0\n }\n }\n }\n\n const changeTab = (e: KeyboardEvent) => {\n const code = e.code\n\n const { up, down, left, right } = EVENT_CODE\n if (![up, down, left, right].includes(code)) return\n\n // 左右上下键更换tab\n const tabList = Array.from(\n (e.currentTarget as HTMLDivElement).querySelectorAll<HTMLDivElement>(\n '[role=tab]'\n )\n )\n const currentIndex = tabList.indexOf(e.target as HTMLDivElement)\n\n let nextIndex: number\n if (code === left || code === up) {\n // left\n if (currentIndex === 0) {\n // first\n nextIndex = tabList.length - 1\n } else {\n nextIndex = currentIndex - 1\n }\n } else {\n // right\n if (currentIndex < tabList.length - 1) {\n // not last\n nextIndex = currentIndex + 1\n } else {\n nextIndex = 0\n }\n }\n tabList[nextIndex].focus() // 改变焦点元素\n tabList[nextIndex].click() // 选中下一个tab\n setFocus()\n }\n\n const setFocus = () => {\n if (focusable.value) isFocus.value = true\n }\n const removeFocus = () => (isFocus.value = false)\n\n watch(visibility, (visibility) => {\n if (visibility === 'hidden') {\n focusable.value = false\n } else if (visibility === 'visible') {\n setTimeout(() => (focusable.value = true), 50)\n }\n })\n watch(focused, (focused) => {\n if (focused) {\n setTimeout(() => (focusable.value = true), 50)\n } else {\n focusable.value = false\n }\n })\n\n useResizeObserver(el$, update)\n\n onMounted(() => setTimeout(() => scrollToActiveTab(), 0))\n onUpdated(() => update())\n\n expose({\n scrollToActiveTab,\n removeFocus,\n })\n\n return () => {\n const scrollBtn = scrollable.value\n ? [\n h(\n 'span',\n {\n class: [\n 'el-tabs__nav-prev',\n scrollable.value.prev ? '' : 'is-disabled',\n ],\n onClick: scrollPrev,\n },\n [h(ElIcon, {}, { default: () => h(ArrowLeft) })]\n ),\n h(\n 'span',\n {\n class: [\n 'el-tabs__nav-next',\n scrollable.value.next ? '' : 'is-disabled',\n ],\n onClick: scrollNext,\n },\n [h(ElIcon, {}, { default: () => h(ArrowRight) })]\n ),\n ]\n : null\n\n const tabs = props.panes.map((pane, index) => {\n const tabName = pane.props.name || pane.index || `${index}`\n const closable = pane.isClosable || props.editable\n pane.index = `${index}`\n\n const btnClose = closable\n ? h(\n ElIcon,\n {\n class: 'is-icon-close',\n onClick: (ev: MouseEvent) => props.onTabRemove(pane, ev),\n },\n { default: () => h(Close) }\n )\n : null\n\n const tabLabelContent =\n pane.instance.slots.label?.() || pane.props.label\n const tabindex = pane.active ? 0 : -1\n\n return h(\n 'div',\n {\n class: {\n 'el-tabs__item': true,\n [`is-${rootTabs.props.tabPosition}`]: true,\n 'is-active': pane.active,\n 'is-disabled': pane.props.disabled,\n 'is-closable': closable,\n 'is-focus': isFocus,\n },\n id: `tab-${tabName}`,\n key: `tab-${tabName}`,\n 'aria-controls': `pane-${tabName}`,\n role: 'tab',\n 'aria-selected': pane.active,\n ref: `tab-${tabName}`,\n tabindex,\n onFocus: () => setFocus(),\n onBlur: () => removeFocus(),\n onClick: (ev: MouseEvent) => {\n removeFocus()\n props.onTabClick(pane, tabName, ev)\n },\n onKeydown: (ev: KeyboardEvent) => {\n if (\n closable &&\n (ev.code === EVENT_CODE.delete ||\n ev.code === EVENT_CODE.backspace)\n ) {\n props.onTabRemove(pane, ev)\n }\n },\n },\n [tabLabelContent, btnClose]\n )\n })\n\n return h(\n 'div',\n {\n ref: el$,\n class: [\n 'el-tabs__nav-wrap',\n scrollable.value ? 'is-scrollable' : '',\n `is-${rootTabs.props.tabPosition}`,\n ],\n },\n [\n scrollBtn,\n h(\n 'div',\n {\n class: 'el-tabs__nav-scroll',\n ref: navScroll$,\n },\n [\n h(\n 'div',\n {\n class: [\n 'el-tabs__nav',\n `is-${rootTabs.props.tabPosition}`,\n props.stretch &&\n ['top', 'bottom'].includes(rootTabs.props.tabPosition)\n ? 'is-stretch'\n : '',\n ],\n ref: nav$,\n style: navStyle.value,\n role: 'tablist',\n onKeydown: changeTab,\n },\n [\n !props.type\n ? h(TabBar, {\n tabs: [...props.panes],\n })\n : null,\n tabs,\n ]\n ),\n ]\n ),\n ]\n )\n }\n },\n})\n"],"names":["TabBar"],"mappings":"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"} |