UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 23.4 kB
{"version":3,"file":"tab-nav.mjs","sources":["../../../../../../packages/components/tabs/src/tab-nav.tsx"],"sourcesContent":["// @ts-nocheck\nimport {\n computed,\n defineComponent,\n getCurrentInstance,\n inject,\n nextTick,\n onMounted,\n onUpdated,\n ref,\n watch,\n} from 'vue'\nimport { NOOP } from '@vue/shared'\nimport {\n useDocumentVisibility,\n useResizeObserver,\n useWindowFocus,\n} from '@vueuse/core'\nimport {\n buildProps,\n capitalize,\n definePropType,\n mutable,\n throwError,\n} from '@element-plus/utils'\nimport { EVENT_CODE } from '@element-plus/constants'\nimport { ElIcon } from '@element-plus/components/icon'\nimport { ArrowLeft, ArrowRight, Close } from '@element-plus/icons-vue'\nimport { tabsRootContextKey } from '@element-plus/tokens'\nimport { useNamespace } from '@element-plus/hooks'\nimport TabBar from './tab-bar.vue'\nimport type { CSSProperties, ExtractPropTypes } from 'vue'\nimport type { TabsPaneContext } from '@element-plus/tokens'\nimport type { TabPanelName } from './tabs'\n\ninterface 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, Number],\n default: '',\n },\n editable: Boolean,\n onTabClick: {\n type: definePropType<\n (tab: TabsPaneContext, tabName: TabPanelName, 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'\nconst TabNav = defineComponent({\n name: COMPONENT_NAME,\n props: tabNavProps,\n\n setup(props, { expose }) {\n const vm = getCurrentInstance()!\n\n const rootTabs = inject(tabsRootContextKey)\n if (!rootTabs) throwError(COMPONENT_NAME, `<el-tabs><tab-nav /></el-tabs>`)\n\n const ns = useNamespace('tabs')\n const visibility = useDocumentVisibility()\n const focused = useWindowFocus()\n\n const navScroll$ = ref<HTMLDivElement>()\n const nav$ = ref<HTMLDivElement>()\n const el$ = ref<HTMLDivElement>()\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 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 = async () => {\n const nav = nav$.value\n if (!scrollable.value || !el$.value || !navScroll$.value || !nav) return\n\n await nextTick()\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]:not(.is-disabled)'\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 watch(\n () => props.panes,\n () => vm.update(),\n { flush: 'post' }\n )\n\n return () => {\n const scrollBtn = scrollable.value\n ? [\n <span\n class={[\n ns.e('nav-prev'),\n ns.is('disabled', !scrollable.value.prev),\n ]}\n onClick={scrollPrev}\n >\n <ElIcon>\n <ArrowLeft />\n </ElIcon>\n </span>,\n <span\n class={[\n ns.e('nav-next'),\n ns.is('disabled', !scrollable.value.next),\n ]}\n onClick={scrollNext}\n >\n <ElIcon>\n <ArrowRight />\n </ElIcon>\n </span>,\n ]\n : null\n\n const tabs = props.panes.map((pane, index) => {\n const disabled = pane.props.disabled\n const tabName = pane.props.name ?? pane.index ?? `${index}`\n const closable = !disabled && (pane.isClosable || props.editable)\n pane.index = `${index}`\n\n const btnClose = closable ? (\n <ElIcon\n class=\"is-icon-close\"\n // `onClick` not exist when generate dts\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n onClick={(ev: MouseEvent) => props.onTabRemove(pane, ev)}\n >\n <Close />\n </ElIcon>\n ) : null\n\n const tabLabelContent = pane.slots.label?.() || pane.props.label\n const tabindex = !disabled && pane.active ? 0 : -1\n\n return (\n <div\n ref={`tab-${tabName}`}\n class={[\n ns.e('item'),\n ns.is(rootTabs.props.tabPosition),\n ns.is('active', pane.active),\n ns.is('disabled', disabled),\n ns.is('closable', closable),\n ns.is('focus', isFocus.value),\n ]}\n id={`tab-${tabName}`}\n key={`tab-${tabName}`}\n aria-controls={`pane-${tabName}`}\n role=\"tab\"\n aria-selected={pane.active}\n tabindex={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 </div>\n )\n })\n\n return (\n <div\n ref={el$}\n class={[\n ns.e('nav-wrap'),\n ns.is('scrollable', !!scrollable.value),\n ns.is(rootTabs.props.tabPosition),\n ]}\n >\n {scrollBtn}\n <div class={ns.e('nav-scroll')} ref={navScroll$}>\n <div\n class={[\n ns.e('nav'),\n ns.is(rootTabs.props.tabPosition),\n ns.is(\n 'stretch',\n props.stretch &&\n ['top', 'bottom'].includes(rootTabs.props.tabPosition)\n ),\n ]}\n ref={nav$}\n style={navStyle.value}\n role=\"tablist\"\n onKeydown={changeTab}\n >\n {...[\n !props.type ? <TabBar tabs={[...props.panes]} /> : null,\n tabs,\n ]}\n </div>\n </div>\n </div>\n )\n }\n },\n})\n\nexport type TabNavInstance = InstanceType<typeof TabNav>\nexport default TabNav\n"],"names":["TabBar","tabNavProps","panes","type","definePropType","Array","default","currentName","String","editable","Boolean","onTabClick","onTabRemove","values","stretch","COMPONENT_NAME","TabNav","defineComponent","name","props","expose","vm","getCurrentInstance","throwError","ns","visibility","useDocumentVisibility","focused","useWindowFocus","navScroll$","ref","nav$","el$","scrollable","navOffset","isFocus","focusable","sizeName","computed","dir","transform","scrollPrev","value","containerSize","newOffset","currentOffset","scrollNext","navSize","capitalize","scrollToActiveTab","nav","activeTab","activeTabBounding","navScrollBounding","maxOffset","isHorizontal","right","top","bottom","update","prev","changeTab","code","up","EVENT_CODE","currentIndex","nextIndex","tabList","focus","setFocus","watch","_createVNode","useResizeObserver","setTimeout","onUpdated","removeFocus","flush","scrollBtn","map","pane","disabled","isClosable","index","btnClose","closable","ev","tabName","is","rootTabs","tabLabelContent"],"mappings":"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"}