{"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  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} 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      let step = 0\n\n      switch (event.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            // 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={(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              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      // 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","tabNavEmits","tabClick","tab","tabName","ev","Event","tabRemove","COMPONENT_NAME","TabNav","defineComponent","name","props","emits","expose","emit","ns","useNamespace","visibility","useDocumentVisibility","focused","useWindowFocus","navScroll$","ref","nav$","el$","tabRefsMap","tabBarRef","scrollable","navOffset","isFocus","focusable","tracker","shallowRef","isHorizontal","computed","includes","rootTabs","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","activeTab","navScroll","maxOffset","activeTabBounding","right","top","bottom","navScrollBounding","max","update","prev","changeTab","event","step","EVENT_CODE","left","currentIndex","tabList","nextIndex","preventScroll","click","setFocus","key","focusActiveTab","focus","watch","_createVNode","useResizeObserver","setTimeout","onUpdated","tabListRef","scheduleRender","triggerRef","e","is","pane","index","uid","disabled","closable","isClosable","btnClose","setRefs","el","tabLabelContent"],"mappings":"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"}