{"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 '@hd-front-end/utils'\nimport { EVENT_CODE } from '@hd-front-end/constants'\nimport { ElIcon } from '@hd-front-end/components/icon'\nimport { ArrowLeft, ArrowRight, Close } from '@element-plus/icons-vue'\nimport { useNamespace } from '@hd-front-end/hooks'\nimport useWheel from '@hd-front-end/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      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            // 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              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","tabNavEmits","tabClick","tab","tabName","ev","Event","tabRemove","COMPONENT_NAME","TabNav","defineComponent","name","props","emits","setup","expose","emit","rootTabs","inject","tabsRootContextKey","throwError","ns","useNamespace","visibility","useDocumentVisibility","focused","useWindowFocus","navScroll$","ref","nav$","el$","tabRefsMap","tabBarRef","scrollable","navOffset","isFocus","focusable","tracker","shallowRef","isHorizontal","computed","includes","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","nav","nextTick","activeTab","navScroll","activeTabBounding","getBoundingClientRect","navScrollBounding","maxOffset","offsetWidth","offsetHeight","left","right","top","bottom","Math","max","min","update","prev","next","changeTab","event","code","getEventCode","step","EVENT_CODE","up","down","tabList","from","currentTarget","querySelectorAll","currentIndex","indexOf","target","nextIndex","length","focus","preventScroll","click","setFocus","removeFocus","setRefs","el","key","focusActiveTab","watch","setTimeout","useResizeObserver","onMounted","onUpdated","tabListRef","scheduleRender","triggerRef","scrollBtn","_createVNode","e","is","ElIcon","ArrowLeft","ArrowRight","tabs","map","pane","index","uid","disabled","closable","isClosable","btnClose","Close","tabLabelContent","slots","label","tabindex","active","onFocus","onBlur","delete","backspace","TabBar"],"mappings":"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"}