UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 31.2 kB
{"version":3,"file":"tab-nav.mjs","sources":["../../../../../../packages/components/tabs/src/tab-nav.tsx"],"sourcesContent":["import {\n computed,\n defineComponent,\n inject,\n nextTick,\n onMounted,\n onUpdated,\n ref,\n shallowRef,\n triggerRef,\n watch,\n} from 'vue'\nimport {\n useDocumentVisibility,\n useElementSize,\n useResizeObserver,\n useWindowFocus,\n} from '@vueuse/core'\nimport {\n buildProps,\n capitalize,\n definePropType,\n getEventCode,\n mutable,\n rAF,\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 { useNamespace } from '@element-plus/hooks'\nimport useWheel from '@element-plus/components/virtual-list/src/hooks/use-wheel'\nimport { clamp } from 'lodash-unified'\nimport TabBar from './tab-bar.vue'\nimport { tabsRootContextKey } from './constants'\n\nimport type {\n CSSProperties,\n ComponentPublicInstance,\n ExtractPropTypes,\n ExtractPublicPropTypes,\n} from 'vue'\nimport type { TabBarInstance } from './tab-bar'\nimport type { TabPaneName, TabsPaneContext } from './constants'\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 type: {\n type: String,\n values: ['card', 'border-card', ''],\n default: '',\n },\n stretch: Boolean,\n /**\n * @description tab-nav tabindex\n */\n tabindex: {\n type: [String, Number],\n default: undefined,\n },\n} as const)\n\nexport const tabNavEmits = {\n tabClick: (tab: TabsPaneContext, tabName: TabPaneName, ev: Event) =>\n ev instanceof Event,\n tabRemove: (tab: TabsPaneContext, ev: Event) => ev instanceof Event,\n}\n\nexport type TabNavProps = ExtractPropTypes<typeof tabNavProps>\nexport type TabNavPropsPublic = ExtractPublicPropTypes<typeof tabNavProps>\nexport type TabNavEmits = typeof tabNavEmits\n\nconst COMPONENT_NAME = 'ElTabNav'\nconst TabNav = defineComponent({\n name: COMPONENT_NAME,\n props: tabNavProps,\n emits: tabNavEmits,\n setup(props, { expose, emit }) {\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 const tabRefsMap = ref<{ [key: TabPaneName]: HTMLDivElement }>({})\n\n const tabBarRef = ref<TabBarInstance>()\n\n const scrollable = ref<false | Scrollable>(false)\n const navOffset = ref(0)\n const isFocus = ref(false)\n const focusable = ref(true)\n const tracker = shallowRef()\n\n const isHorizontal = computed(() =>\n ['top', 'bottom'].includes(rootTabs.props.tabPosition)\n )\n\n const sizeName = computed(() => (isHorizontal.value ? 'width' : 'height'))\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 { width: navContainerWidth, height: navContainerHeight } =\n useElementSize(navScroll$)\n const { width: navWidth, height: navHeight } = useElementSize(\n nav$,\n { width: 0, height: 0 },\n { box: 'border-box' }\n )\n\n const navContainerSize = computed(() =>\n isHorizontal.value ? navContainerWidth.value : navContainerHeight.value\n )\n const navSize = computed(() =>\n isHorizontal.value ? navWidth.value : navHeight.value\n )\n\n const { onWheel } = useWheel(\n {\n atStartEdge: computed(() => navOffset.value <= 0),\n atEndEdge: computed(\n () => navSize.value - navOffset.value <= navContainerSize.value\n ),\n layout: computed(() =>\n isHorizontal.value ? 'horizontal' : 'vertical'\n ),\n },\n (offset) => {\n navOffset.value = clamp(\n navOffset.value + offset,\n 0,\n navSize.value - navContainerSize.value\n )\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 = tabRefsMap.value[props.currentName]\n if (!activeTab) return\n\n const navScroll = navScroll$.value\n\n const activeTabBounding = activeTab.getBoundingClientRect()\n const navScrollBounding = navScroll.getBoundingClientRect()\n const maxOffset = isHorizontal.value\n ? nav.offsetWidth - navScrollBounding.width\n : nav.offsetHeight - navScrollBounding.height\n const currentOffset = navOffset.value\n let newOffset = currentOffset\n\n if (isHorizontal.value) {\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 props.stretch && tabBarRef.value?.update()\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 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 = (event: KeyboardEvent) => {\n const code = getEventCode(event)\n let step = 0\n\n switch (code) {\n case EVENT_CODE.left:\n case EVENT_CODE.up:\n step = -1\n break\n case EVENT_CODE.right:\n case EVENT_CODE.down:\n step = 1\n break\n default:\n return\n }\n\n const tabList = Array.from(\n (\n event.currentTarget as HTMLDivElement\n ).querySelectorAll<HTMLDivElement>('[role=tab]:not(.is-disabled)')\n )\n const currentIndex = tabList.indexOf(event.target as HTMLDivElement)\n let nextIndex = currentIndex + step\n\n if (nextIndex < 0) {\n nextIndex = tabList.length - 1\n } else if (nextIndex >= tabList.length) {\n nextIndex = 0\n }\n\n tabList[nextIndex].focus({ preventScroll: true }) // 改变焦点元素\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 const setRefs = (\n el: Element | ComponentPublicInstance | null,\n key: TabPaneName\n ) => {\n tabRefsMap.value[key] = el as HTMLDivElement\n }\n\n const focusActiveTab = async () => {\n await nextTick()\n\n const activeTab = tabRefsMap.value[props.currentName]\n activeTab?.focus({ preventScroll: true })\n }\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$, () => {\n rAF(update)\n })\n\n onMounted(() => setTimeout(() => scrollToActiveTab(), 0))\n onUpdated(() => update())\n\n expose({\n scrollToActiveTab,\n removeFocus,\n focusActiveTab,\n tabListRef: nav$,\n tabBarRef,\n scheduleRender: () => triggerRef(tracker),\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 uid = pane.uid\n const disabled = pane.props.disabled\n const tabName = pane.props.name ?? pane.index ?? `${index}`\n const closable =\n !disabled &&\n (pane.isClosable || (pane.props.closable !== false && 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\n // @ts-ignore\n onClick={(ev: MouseEvent) => emit('tabRemove', pane, ev)}\n >\n <Close />\n </ElIcon>\n ) : null\n\n const tabLabelContent = pane.slots.label?.() || pane.props.label\n const tabindex =\n !disabled && pane.active\n ? (props.tabindex ?? rootTabs.props.tabindex)\n : -1\n\n return (\n <div\n ref={(el) => setRefs(el, 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-${uid}`}\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 emit('tabClick', pane, tabName, ev)\n }}\n onKeydown={(ev: KeyboardEvent) => {\n const code = getEventCode(ev)\n if (\n closable &&\n (code === EVENT_CODE.delete || code === EVENT_CODE.backspace)\n ) {\n emit('tabRemove', pane, ev)\n }\n }}\n >\n {...[tabLabelContent, btnClose]}\n </div>\n )\n })\n\n // By tracking the value property, we can schedule a job to re-render `TabNav` when needed.\n // Unlike `instance.update`, the scheduler ensures the job is queued only once even if we trigger it multiple times.\n tracker.value\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 {props.panes.length > 0 ? (\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 onWheel={onWheel}\n >\n {...[\n !props.type ? (\n <TabBar\n ref={tabBarRef}\n tabs={[...props.panes]}\n tabRefs={tabRefsMap.value}\n />\n ) : null,\n tabs,\n ]}\n </div>\n ) : null}\n </div>\n </div>\n )\n }\n },\n})\n\nexport type TabNavInstance = InstanceType<typeof TabNav> & {\n scrollToActiveTab: () => Promise<void>\n removeFocus: () => void\n focusActiveTab: () => void\n scheduleRender: () => void\n tabListRef: HTMLDivElement | undefined\n tabBarRef: TabBarInstance | undefined\n}\n\nexport default TabNav\n"],"names":["tabNavProps","buildProps","panes","type","definePropType","Array","default","mutable","currentName","String","Number","editable","Boolean","values","stretch","tabindex","undefined","tabNavEmits","tabClick","tab","tabName","ev","Event","tabRemove","COMPONENT_NAME","TabNav","defineComponent","name","props","emits","setup","expose","emit","rootTabs","inject","tabsRootContextKey","throwError","ns","useNamespace","visibility","useDocumentVisibility","focused","useWindowFocus","navScroll$","ref","nav$","el$","tabRefsMap","tabBarRef","scrollable","navOffset","isFocus","focusable","tracker","shallowRef","isHorizontal","computed","includes","tabPosition","sizeName","value","navStyle","dir","transform","width","navContainerWidth","height","navContainerHeight","useElementSize","navWidth","navHeight","box","navContainerSize","navSize","onWheel","useWheel","atStartEdge","atEndEdge","layout","offset","clamp","scrollPrev","containerSize","capitalize","currentOffset","newOffset","scrollNext","scrollToActiveTab","nav","nextTick","activeTab","navScroll","activeTabBounding","getBoundingClientRect","navScrollBounding","maxOffset","offsetWidth","offsetHeight","left","right","top","bottom","Math","max","min","update","prev","next","changeTab","event","code","getEventCode","step","EVENT_CODE","up","down","tabList","from","currentTarget","querySelectorAll","currentIndex","indexOf","target","nextIndex","length","focus","preventScroll","click","setFocus","removeFocus","setRefs","el","key","focusActiveTab","watch","setTimeout","useResizeObserver","rAF","onMounted","onUpdated","tabListRef","scheduleRender","triggerRef","scrollBtn","_createVNode","e","is","ElIcon","ArrowLeft","ArrowRight","tabs","map","pane","index","uid","disabled","closable","isClosable","btnClose","Close","tabLabelContent","slots","label","active","onFocus","onBlur","delete","backspace","TabBar"],"mappings":"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"}