{"version":3,"file":"tab-nav.mjs","sources":["../../../../../packages/components/tabs/src/tab-nav.ts"],"sourcesContent":["import {\n  h,\n  defineComponent,\n  ref,\n  inject,\n  computed,\n  onUpdated,\n  onMounted,\n  watch,\n  type PropType\n} from 'vue'\nimport { NOOP, capitalize } from '@vue/shared'\nimport {\n  useResizeObserver,\n  useDocumentVisibility,\n  useWindowFocus\n} from '@vueuse/core'\nimport {\n  throwError\n} from '@element-ultra/utils'\nimport { EVENT_CODE } from '@element-ultra/shared'\nimport { ElIcon } from '@element-ultra/components/icon'\nimport { ArrowLeft, ArrowRight, Close } from 'icon-ultra'\nimport { tabsRootContextKey } from '@element-ultra/tokens'\nimport TabBar from './tab-bar.vue'\nimport type {  CSSProperties } from 'vue'\nimport type { TabsPaneContext } from '@element-ultra/tokens'\nexport interface Scrollable {\n  next?: boolean\n  prev?: number\n}\n\nconst COMPONENT_NAME = 'ElTabNav'\nexport default defineComponent({\n  name: COMPONENT_NAME,\n  props: {\n    panes: {\n      type: Array as PropType<TabsPaneContext[]>,\n      default: () => []\n    },\n    currentName: {\n      type: [String, Number],\n      default: ''\n    },\n    editable: Boolean,\n    onTabClick: {\n      type: Function as PropType<\n        (tab: TabsPaneContext, tabName: string | number, ev: Event) => void\n      >,\n      default: NOOP\n    },\n    onTabRemove: {\n      type: Function as PropType<(tab: TabsPaneContext, ev: Event) => void>,\n      default: NOOP\n    },\n    type: {\n      type: String as PropType<'card' | 'border-card' | ''>,\n      default: ''\n    },\n    stretch: Boolean\n  },\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 = EVENT_CODE.up\n      const down = EVENT_CODE.down\n      const left = EVENT_CODE.left\n      const right = EVENT_CODE.right\n      if (![up, down, left, right].includes(code as any)) 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 || tabName\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":["currentOffset","visibility","focused"],"mappings":"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"}