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
32 KiB

{"ast":null,"code":"import { defineComponent, inject, ref, computed, nextTick, watch, onMounted, onUpdated, createVNode } from 'vue';\nimport { useDocumentVisibility, useWindowFocus, useResizeObserver } from '@vueuse/core';\nimport '../../../utils/index.mjs';\nimport '../../../constants/index.mjs';\nimport { ElIcon } from '../../icon/index.mjs';\nimport { ArrowLeft, ArrowRight, Close } from '@element-plus/icons-vue';\nimport '../../../hooks/index.mjs';\nimport TabBar from './tab-bar2.mjs';\nimport { tabsRootContextKey } from './constants.mjs';\nimport { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\nimport { mutable } from '../../../utils/typescript.mjs';\nimport { throwError } from '../../../utils/error.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { capitalize } from '../../../utils/strings.mjs';\nimport { EVENT_CODE } from '../../../constants/aria.mjs';\nconst tabNavProps = buildProps({\n panes: {\n type: definePropType(Array),\n default: () => mutable([])\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});\nconst tabNavEmits = {\n tabClick: (tab, tabName, ev) => ev instanceof Event,\n tabRemove: (tab, ev) => ev instanceof Event\n};\nconst COMPONENT_NAME = \"ElTabNav\";\nconst TabNav = defineComponent({\n name: COMPONENT_NAME,\n props: tabNavProps,\n emits: tabNavEmits,\n setup(props, {\n expose,\n emit\n }) {\n const rootTabs = inject(tabsRootContextKey);\n if (!rootTabs) throwError(COMPONENT_NAME, `<el-tabs><tab-nav /></el-tabs>`);\n const ns = useNamespace(\"tabs\");\n const visibility = useDocumentVisibility();\n const focused = useWindowFocus();\n const navScroll$ = ref();\n const nav$ = ref();\n const el$ = ref();\n const tabBarRef = ref();\n const scrollable = ref(false);\n const navOffset = ref(0);\n const isFocus = ref(false);\n const focusable = ref(true);\n const sizeName = computed(() => [\"top\", \"bottom\"].includes(rootTabs.props.tabPosition) ? \"width\" : \"height\");\n const navStyle = computed(() => {\n const dir = sizeName.value === \"width\" ? \"X\" : \"Y\";\n return {\n transform: `translate${dir}(-${navOffset.value}px)`\n };\n });\n const scrollPrev = () => {\n if (!navScroll$.value) return;\n const containerSize = navScroll$.value[`offset${capitalize(sizeName.value)}`];\n const currentOffset = navOffset.value;\n if (!currentOffset) return;\n const newOffset = currentOffset > containerSize ? currentOffset - containerSize : 0;\n navOffset.value = newOffset;\n };\n const scrollNext = () => {\n if (!navScroll$.value || !nav$.value) return;\n const navSize = nav$.value[`offset${capitalize(sizeName.value)}`];\n const containerSize = navScroll$.value[`offset${capitalize(sizeName.value)}`];\n const currentOffset = navOffset.value;\n if (navSize - currentOffset <= containerSize) return;\n const newOffset = navSize - currentOffset > containerSize * 2 ? currentOffset + containerSize : navSize - containerSize;\n navOffset.value = newOffset;\n };\n const scrollToActiveTab = async () => {\n const nav = nav$.value;\n if (!scrollable.value || !el$.value || !navScroll$.value || !nav) return;\n await nextTick();\n const activeTab = el$.value.querySelector(\".is-active\");\n if (!activeTab) return;\n const navScroll = navScroll$.value;\n const isHorizontal = [\"top\", \"bottom\"].includes(rootTabs.props.tabPosition);\n const activeTabBounding = activeTab.getBoundingClientRect();\n const navScrollBounding = navScroll.getBoundingClientRect();\n const maxOffset = isHorizontal ? nav.offsetWidth - navScrollBounding.width : nav.offsetHeight - navScrollBounding.height;\n const currentOffset = navOffset.value;\n let newOffset = currentOffset;\n if (isHorizontal) {\n if (activeTabBounding.left < navScrollBounding.left) {\n newOffset = currentOffset - (navScrollBounding.left - activeTabBounding.left);\n }\n if (activeTabBounding.right > navScrollBounding.right) {\n newOffset = currentOffset + activeTabBounding.right - navScrollBounding.right;\n }\n } else {\n if (activeTabBounding.top < navScrollBounding.top) {\n newOffset = currentOffset - (navScrollBounding.top - activeTabBounding.top);\n }\n if (activeTabBounding.bottom > navScrollBounding.bottom) {\n newOffset = currentOffset + (activeTabBounding.bottom - navScrollBounding.bottom);\n }\n }\n newOffset = Math.max(newOffset, 0);\n navOffset.value = Math.min(newOffset, maxOffset);\n };\n const update = () => {\n var _a;\n if (!nav$.value || !navScroll$.value) return;\n props.stretch && ((_a = tabBarRef.value) == null ? void 0 : _a.update());\n const navSize = nav$.value[`offset${capitalize(sizeName.value)}`];\n const containerSize = navScroll$.value[`offset${capitalize(sizeName.value)}`];\n const currentOffset = navOffset.value;\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 const changeTab = e => {\n const code = e.code;\n const {\n up,\n down,\n left,\n right\n } = EVENT_CODE;\n if (![up, down, left, right].includes(code)) return;\n const tabList = Array.from(e.currentTarget.querySelectorAll(\"[role=tab]:not(.is-disabled)\"));\n const currentIndex = tabList.indexOf(e.target);\n let nextIndex;\n if (code === left || code === up) {\n if (currentIndex === 0) {\n nextIndex = tabList.length - 1;\n } else {\n nextIndex = currentIndex - 1;\n }\n } else {\n if (currentIndex < tabList.length - 1) {\n nextIndex = currentIndex + 1;\n } else {\n nextIndex = 0;\n }\n }\n tabList[nextIndex].focus({\n preventScroll: true\n });\n tabList[nextIndex].click();\n setFocus();\n };\n const setFocus = () => {\n if (focusable.value) isFocus.value = true;\n };\n const removeFocus = () => isFocus.value = false;\n watch(visibility, visibility2 => {\n if (visibility2 === \"hidden\") {\n focusable.value = false;\n } else if (visibility2 === \"visible\") {\n setTimeout(() => focusable.value = true, 50);\n }\n });\n watch(focused, focused2 => {\n if (focused2) {\n setTimeout(() => focusable.value = true, 50);\n } else {\n focusable.value = false;\n }\n });\n useResizeObserver(el$, update);\n onMounted(() => setTimeout(() => scrollToActiveTab(), 0));\n onUpdated(() => update());\n expose({\n scrollToActiveTab,\n removeFocus\n });\n return () => {\n const scrollBtn = scrollable.value ? [createVNode(\"span\", {\n \"class\": [ns.e(\"nav-prev\"), ns.is(\"disabled\", !scrollable.value.prev)],\n \"onClick\": scrollPrev\n }, [createVNode(ElIcon, null, {\n default: () => [createVNode(ArrowLeft, null, null)]\n })]), createVNode(\"span\", {\n \"class\": [ns.e(\"nav-next\"), ns.is(\"disabled\", !scrollable.value.next)],\n \"onClick\": scrollNext\n }, [createVNode(ElIcon, null, {\n default: () => [createVNode(ArrowRight, null, null)]\n })])] : null;\n const tabs = props.panes.map((pane, index) => {\n var _a, _b, _c, _d;\n const uid = pane.uid;\n const disabled = pane.props.disabled;\n const tabName = (_b = (_a = pane.props.name) != null ? _a : pane.index) != null ? _b : `${index}`;\n const closable = !disabled && (pane.isClosable || props.editable);\n pane.index = `${index}`;\n const btnClose = closable ? createVNode(ElIcon, {\n \"class\": \"is-icon-close\",\n \"onClick\": ev => emit(\"tabRemove\", pane, ev)\n }, {\n default: () => [createVNode(Close, null, null)]\n }) : null;\n const tabLabelContent = ((_d = (_c = pane.slots).label) == null ? void 0 : _d.call(_c)) || pane.props.label;\n const tabindex = !disabled && pane.active ? 0 : -1;\n return createVNode(\"div\", {\n \"ref\": `tab-${uid}`,\n \"class\": [ns.e(\"item\"), ns.is(rootTabs.props.tabPosition), ns.is(\"active\", pane.active), ns.is(\"disabled\", disabled), ns.is(\"closable\", closable), ns.is(\"focus\", isFocus.value)],\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 => {\n removeFocus();\n emit(\"tabClick\", pane, tabName, ev);\n },\n \"onKeydown\": ev => {\n if (closable && (ev.code === EVENT_CODE.delete || ev.code === EVENT_CODE.backspace)) {\n emit(\"tabRemove\", pane, ev);\n }\n }\n }, [...[tabLabelContent, btnClose]]);\n });\n return createVNode(\"div\", {\n \"ref\": el$,\n \"class\": [ns.e(\"nav-wrap\"), ns.is(\"scrollable\", !!scrollable.value), ns.is(rootTabs.props.tabPosition)]\n }, [scrollBtn, createVNode(\"div\", {\n \"class\": ns.e(\"nav-scroll\"),\n \"ref\": navScroll$\n }, [createVNode(\"div\", {\n \"class\": [ns.e(\"nav\"), ns.is(rootTabs.props.tabPosition), ns.is(\"stretch\", props.stretch && [\"top\", \"bottom\"].includes(rootTabs.props.tabPosition))],\n \"ref\": nav$,\n \"style\": navStyle.value,\n \"role\": \"tablist\",\n \"onKeydown\": changeTab\n }, [...[!props.type ? createVNode(TabBar, {\n \"ref\": tabBarRef,\n \"tabs\": [...props.panes]\n }, null) : null, tabs]])])]);\n };\n }\n});\nexport { TabNav as default, tabNavEmits, tabNavProps };","map":{"version":3,"names":["tabNavProps","buildProps","panes","type","definePropType","Array","default","mutable","currentName","String","Number","editable","Boolean","values","stretch","tabNavEmits","tabClick","tab","tabName","ev","Event","tabRemove","COMPONENT_NAME","TabNav","defineComponent","name","props","emits","expose","emit","rootTabs","inject","tabsRootContextKey","throwError","ns","useNamespace","visibility","useDocumentVisibility","focused","useWindowFocus","navScroll$","ref","nav$","el$","tabBarRef","scrollable","navOffset","isFocus","focusable","sizeName","computed","includes","tabPosition","navStyle","dir","value","transform","containerSize","capitalize","currentOffset","newOffset","scrollNext","navSize","scrollToActiveTab","nav","nextTick","activeTab","querySelector","navScroll","isHorizontal","activeTabBounding","getBoundingClientRect","navScrollBounding","left","right","top","bottom","Math","min","maxOffset","update","_a","prev","next","changeTab","e","code","down","EVENT_CODE","up","tabList","from","currentTarget","querySelectorAll","currentIndex","indexOf","target","nextIndex","length","focus","preventScroll","click","setFocus","removeFocus","watch","visibility2","focused2","setTimeout","useResizeObserver","scrollBtn","createVNode","is","scrollPrev","ElIcon","ArrowLeft","ArrowRight","tabs","map","pane","index","_b","_c","_d","uid","disabled","closable","isClosable","btnClose","Close","tabLabelContent","slots","label","call","tabindex","active","onFocus","onBlur","delete","backspace","TabBar"],"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 watch,\n} from 'vue'\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 { useNamespace } from '@element-plus/hooks'\nimport TabBar from './tab-bar.vue'\nimport { tabsRootContextKey } from './constants'\n\nimport type { CSSProperties, ExtractPropTypes } from 'vue'\nimport type { TabsPaneContext } from './constants'\nimport type { TabPaneName } 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 type: {\n type: String,\n values: ['card', 'border-card', ''],\n default: '',\n },\n stretch: Boolean,\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 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\n const tabBarRef = ref<InstanceType<typeof TabBar>>()\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 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 = (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({ 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 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 <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 = !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) => emit('tabRemove', 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-${uid}`}\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 if (\n closable &&\n (ev.code === EVENT_CODE.delete ||\n ev.code === EVENT_CODE.backspace)\n ) {\n emit('tabRemove', 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 ? (\n <TabBar ref={tabBarRef} tabs={[...props.panes]} />\n ) : null,\n tabs,\n ]}\n </div>\n </div>\n </div>\n )\n }\n },\n})\n\nexport type TabNavInstance = InstanceType<typeof TabNav> & {\n scrollToActiveTab: () => Promise<void>\n removeFocus: () => void\n}\nexport default TabNav\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}