{"version":3,"file":"tab-nav.mjs","sources":["../../../../../../packages/components/tabs/src/tab-nav.ts"],"sourcesContent":["import {\n  computed,\n  defineComponent,\n  h,\n  inject,\n  onMounted,\n  onUpdated,\n  ref,\n  watch,\n} from 'vue'\nimport { NOOP, capitalize } from '@vue/shared'\nimport {\n  useDocumentVisibility,\n  useResizeObserver,\n  useWindowFocus,\n} from '@vueuse/core'\nimport {\n  buildProps,\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 TabBar from './tab-bar.vue'\nimport type { CSSProperties, ExtractPropTypes } 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, Number],\n    default: '',\n  },\n  editable: Boolean,\n  onTabClick: {\n    type: definePropType<\n      (tab: TabsPaneContext, tabName: string | number, 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":[],"mappings":"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"}