1 line
27 KiB
Plaintext
1 line
27 KiB
Plaintext
{"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 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$, update)\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","tab","tabRemove","COMPONENT_NAME","TabNav","defineComponent","name","props","emits","emit","rootTabs","throwError","ns","visibility","useDocumentVisibility","focused","useWindowFocus","navScroll$","ref","nav$","el$","tabRefsMap","tabBarRef","scrollable","navOffset","isFocus","focusable","tracker","shallowRef","isHorizontal","value","dir","transform","width","navContainerWidth","height","navContainerHeight","useElementSize","box","computed","navWidth","onWheel","useWheel","atStartEdge","atEndEdge","scrollPrev","containerSize","newOffset","currentOffset","scrollNext","scrollToActiveTab","nav","activeTab","navScroll","activeTabBounding","getBoundingClientRect","navScrollBounding","maxOffset","top","max","update","navSize","next","changeTab","event","step","EVENT_CODE","nextIndex","tabList","length","preventScroll","click","setFocus","setRefs","key","focusActiveTab","watch","_createVNode","useResizeObserver","setTimeout","onUpdated","expose","tabListRef","scheduleRender","index","pane","closable","disabled","btnClose","ev","delete","tabLabelContent"],"mappings":"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"} |