{"version":3,"file":"index.mjs","sources":["../../../../../../../packages/components/tabs/src/TabNavList/index.tsx"],"sourcesContent":["import type { CustomSlotsType } from '@antdv/types';\nimport type { CSSProperties } from 'vue';\nimport type { ExtraContentProps, TabSizeMap } from '../interface';\nimport { useRefs, useState } from '@antdv/hooks';\nimport { classNames, raf, toPx } from '@antdv/utils';\nimport { ResizeObserver } from '@antdv/vue-components';\nimport { pick } from 'lodash-es';\n\nimport {\n  computed,\n  defineComponent,\n  onBeforeUnmount,\n  shallowRef,\n  watch,\n  watchEffect,\n} from 'vue';\nimport useOffsets from '../hooks/useOffsets';\nimport { useRafState } from '../hooks/useRaf';\nimport useSyncState from '../hooks/useSyncState';\nimport useTouchMove from '../hooks/useTouchMove';\n\nimport { tabNavListProps } from '../props';\nimport { useInjectTabs } from '../TabContext';\nimport AddButton from './AddButton';\nimport OperationNode from './OperationNode';\nimport TabNode from './TabNode';\n\nconst DEFAULT_SIZE = { width: 0, height: 0, left: 0, top: 0, right: 0 };\n\nfunction getTabSize(tab: HTMLElement, containerRect: { x: number; y: number }) {\n  // tabListRef\n  const { offsetWidth, offsetHeight, offsetTop, offsetLeft } = tab;\n  const { width, height, x, y } = tab.getBoundingClientRect();\n\n  // Use getBoundingClientRect to avoid decimal inaccuracy\n  if (Math.abs(width - offsetWidth) < 1)\n    return [width, height, x - containerRect.x, y - containerRect.y];\n\n  return [offsetWidth, offsetHeight, offsetLeft, offsetTop];\n}\n\nexport default defineComponent({\n  compatConfig: { MODE: 3 },\n  name: 'TabNavList',\n  inheritAttrs: false,\n  props: tabNavListProps(),\n  slots: Object as CustomSlotsType<{\n    moreIcon?: any\n    leftExtra?: any\n    rightExtra?: any\n    tabBarExtraContent?: any\n    default?: any\n  }>,\n  emits: ['tabClick', 'tabScroll'],\n  setup(props, { attrs, slots }) {\n    const { tabs, prefixCls } = useInjectTabs();\n    const tabsWrapperRef = shallowRef<HTMLDivElement>();\n    const tabListRef = shallowRef<HTMLDivElement>();\n    const operationsRef = shallowRef<{ $el: HTMLDivElement }>();\n    const innerAddButtonRef = shallowRef();\n    const [setRef, btnRefs] = useRefs();\n    const tabPositionTopOrBottom = computed(\n      () => props.tabPosition === 'top' || props.tabPosition === 'bottom',\n    );\n\n    const [transformLeft, setTransformLeft] = useSyncState(0, (next, prev) => {\n      if (tabPositionTopOrBottom.value && props.onTabScroll)\n        props.onTabScroll({ direction: next > prev ? 'left' : 'right' });\n    });\n    const [transformTop, setTransformTop] = useSyncState(0, (next, prev) => {\n      if (!tabPositionTopOrBottom.value && props.onTabScroll)\n        props.onTabScroll({ direction: next > prev ? 'top' : 'bottom' });\n    });\n\n    const [wrapperScrollWidth, setWrapperScrollWidth] = useState<number>(0);\n    const [wrapperScrollHeight, setWrapperScrollHeight] = useState<number>(0);\n    const [wrapperWidth, setWrapperWidth] = useState<number>(null);\n    const [wrapperHeight, setWrapperHeight] = useState<number>(null);\n    const [addWidth, setAddWidth] = useState<number>(0);\n    const [addHeight, setAddHeight] = useState<number>(0);\n\n    const [tabSizes, setTabSizes] = useRafState<TabSizeMap>(new Map());\n    const tabOffsets = useOffsets(tabs, tabSizes);\n    // ========================== Util =========================\n    const operationsHiddenClassName = computed(() => `${prefixCls.value}-nav-operations-hidden`);\n\n    const transformMin = shallowRef(0);\n    const transformMax = shallowRef(0);\n\n    watchEffect(() => {\n      if (!tabPositionTopOrBottom.value) {\n        transformMin.value = Math.min(0, wrapperHeight.value - wrapperScrollHeight.value);\n        transformMax.value = 0;\n      } else if (props.rtl) {\n        transformMin.value = 0;\n        transformMax.value = Math.max(0, wrapperScrollWidth.value - wrapperWidth.value);\n      } else {\n        transformMin.value = Math.min(0, wrapperWidth.value - wrapperScrollWidth.value);\n        transformMax.value = 0;\n      }\n    });\n\n    const alignInRange = (value: number): number => {\n      if (value < transformMin.value)\n        return transformMin.value;\n\n      if (value > transformMax.value)\n        return transformMax.value;\n\n      return value;\n    };\n\n    // ========================= Mobile ========================\n    const touchMovingRef = shallowRef<any>();\n    const [lockAnimation, setLockAnimation] = useState<number>();\n\n    const doLockAnimation = () => {\n      setLockAnimation(Date.now());\n    };\n\n    const clearTouchMoving = () => {\n      clearTimeout(touchMovingRef.value);\n    };\n    const doMove = (setState: (fn: (val: number) => number) => void, offset: number) => {\n      setState((value: number) => {\n        const newValue = alignInRange(value + offset);\n\n        return newValue;\n      });\n    };\n    useTouchMove(tabsWrapperRef, (offsetX, offsetY) => {\n      if (tabPositionTopOrBottom.value) {\n        // Skip scroll if place is enough\n        if (wrapperWidth.value >= wrapperScrollWidth.value)\n          return false;\n\n        doMove(setTransformLeft, offsetX);\n      } else {\n        if (wrapperHeight.value >= wrapperScrollHeight.value)\n          return false;\n\n        doMove(setTransformTop, offsetY);\n      }\n\n      clearTouchMoving();\n      doLockAnimation();\n\n      return true;\n    });\n\n    watch(lockAnimation, () => {\n      clearTouchMoving();\n      if (lockAnimation.value) {\n        touchMovingRef.value = setTimeout(() => {\n          setLockAnimation(0);\n        }, 100);\n      }\n    });\n\n    // ========================= Scroll ========================\n    const scrollToTab = (key = props.activeKey) => {\n      const tabOffset = tabOffsets.value.get(key) || {\n        width: 0,\n        height: 0,\n        left: 0,\n        right: 0,\n        top: 0,\n      };\n\n      if (tabPositionTopOrBottom.value) {\n        // ============ Align with top & bottom ============\n        let newTransform = transformLeft.value;\n\n        // RTL\n        if (props.rtl) {\n          if (tabOffset.right < transformLeft.value)\n            newTransform = tabOffset.right;\n          else if (tabOffset.right + tabOffset.width > transformLeft.value + wrapperWidth.value)\n            newTransform = tabOffset.right + tabOffset.width - wrapperWidth.value;\n        } else if (tabOffset.left < -transformLeft.value) { // LTR\n          newTransform = -tabOffset.left;\n        } else if (tabOffset.left + tabOffset.width > -transformLeft.value + wrapperWidth.value) {\n          newTransform = -(tabOffset.left + tabOffset.width - wrapperWidth.value);\n        }\n\n        setTransformTop(0);\n        setTransformLeft(alignInRange(newTransform));\n      } else {\n        // ============ Align with left & right ============\n        let newTransform = transformTop.value;\n\n        if (tabOffset.top < -transformTop.value)\n          newTransform = -tabOffset.top;\n        else if (tabOffset.top + tabOffset.height > -transformTop.value + wrapperHeight.value)\n          newTransform = -(tabOffset.top + tabOffset.height - wrapperHeight.value);\n\n        setTransformLeft(0);\n        setTransformTop(alignInRange(newTransform));\n      }\n    };\n\n    const visibleStart = shallowRef(0);\n    const visibleEnd = shallowRef(0);\n\n    watchEffect(() => {\n      let unit: 'width' | 'height';\n      let position: 'left' | 'top' | 'right';\n      let transformSize: number;\n      let basicSize: number;\n      let tabContentSize: number;\n      let addSize: number;\n      const tabOffsetsValue = tabOffsets.value;\n      if (['top', 'bottom'].includes(props.tabPosition)) {\n        unit = 'width';\n        basicSize = wrapperWidth.value;\n        tabContentSize = wrapperScrollWidth.value;\n        addSize = addWidth.value;\n        position = props.rtl ? 'right' : 'left';\n        transformSize = Math.abs(transformLeft.value);\n      } else {\n        unit = 'height';\n        basicSize = wrapperHeight.value;\n        tabContentSize = wrapperScrollWidth.value;\n        addSize = addHeight.value;\n        position = 'top';\n        transformSize = -transformTop.value;\n      }\n      let mergedBasicSize = basicSize;\n      if (tabContentSize + addSize > basicSize && tabContentSize < basicSize)\n        mergedBasicSize = basicSize - addSize;\n\n      const tabsVal = tabs.value;\n      if (!tabsVal.length)\n        return ([visibleStart.value, visibleEnd.value] = [0, 0]);\n\n      const len = tabsVal.length;\n      let endIndex = len;\n      for (let i = 0; i < len; i += 1) {\n        const offset = tabOffsetsValue.get(tabsVal[i].key) || DEFAULT_SIZE;\n        if (offset[position] + offset[unit] > transformSize + mergedBasicSize) {\n          endIndex = i - 1;\n          break;\n        }\n      }\n      let startIndex = 0;\n      for (let i = len - 1; i >= 0; i -= 1) {\n        const offset = tabOffsetsValue.get(tabsVal[i].key) || DEFAULT_SIZE;\n        if (offset[position] < transformSize) {\n          startIndex = i + 1;\n          break;\n        }\n      }\n\n      return ([visibleStart.value, visibleEnd.value] = [startIndex, endIndex]);\n    });\n\n    const updateTabSizes = () => {\n      setTabSizes(() => {\n        const newSizes: TabSizeMap = new Map();\n        const listRect = tabListRef.value?.getBoundingClientRect();\n        tabs.value.forEach(({ key }) => {\n          const btnRef = btnRefs.value.get(key);\n          const btnNode = (btnRef as any)?.$el || btnRef;\n          if (btnNode) {\n            const [width, height, left, top] = getTabSize(btnNode, listRect);\n            newSizes.set(key, { width, height, left, top });\n          }\n        });\n        return newSizes;\n      });\n    };\n\n    watch(\n      () => tabs.value.map(tab => tab.key).join('%%'),\n      () => {\n        updateTabSizes();\n      },\n      { flush: 'post' },\n    );\n\n    const onListHolderResize = () => {\n      // Update wrapper records\n      const offsetWidth = tabsWrapperRef.value?.offsetWidth || 0;\n      const offsetHeight = tabsWrapperRef.value?.offsetHeight || 0;\n      const addDom = innerAddButtonRef.value?.$el || {};\n      const newAddWidth = addDom.offsetWidth || 0;\n      const newAddHeight = addDom.offsetHeight || 0;\n      setWrapperWidth(offsetWidth);\n      setWrapperHeight(offsetHeight);\n      setAddWidth(newAddWidth);\n      setAddHeight(newAddHeight);\n\n      const newWrapperScrollWidth = (tabListRef.value?.offsetWidth || 0) - newAddWidth;\n      const newWrapperScrollHeight = (tabListRef.value?.offsetHeight || 0) - newAddHeight;\n\n      setWrapperScrollWidth(newWrapperScrollWidth);\n      setWrapperScrollHeight(newWrapperScrollHeight);\n\n      // Update buttons records\n      updateTabSizes();\n    };\n\n    // ======================== Dropdown =======================\n    const hiddenTabs = computed(() => [\n      ...tabs.value.slice(0, visibleStart.value),\n      ...tabs.value.slice(visibleEnd.value + 1),\n    ]);\n\n    // =================== Link & Operations ===================\n    const [inkStyle, setInkStyle] = useState<CSSProperties>();\n\n    const activeTabOffset = computed(() => tabOffsets.value.get(props.activeKey));\n\n    // Delay set ink style to avoid remove tab blink\n    const inkBarRafRef = shallowRef<number>();\n    const cleanInkBarRaf = () => {\n      raf.cancel(inkBarRafRef.value);\n    };\n\n    watch([activeTabOffset, tabPositionTopOrBottom, () => props.rtl], () => {\n      const newInkStyle: CSSProperties = {};\n\n      if (activeTabOffset.value) {\n        if (tabPositionTopOrBottom.value) {\n          if (props.rtl)\n            newInkStyle.right = toPx(activeTabOffset.value.right);\n          else\n            newInkStyle.left = toPx(activeTabOffset.value.left);\n\n          newInkStyle.width = toPx(activeTabOffset.value.width);\n        } else {\n          newInkStyle.top = toPx(activeTabOffset.value.top);\n          newInkStyle.height = toPx(activeTabOffset.value.height);\n        }\n      }\n\n      cleanInkBarRaf();\n      inkBarRafRef.value = raf(() => {\n        setInkStyle(newInkStyle);\n      });\n    });\n\n    watch(\n      [() => props.activeKey, activeTabOffset, tabOffsets, tabPositionTopOrBottom],\n      () => {\n        scrollToTab();\n      },\n      { flush: 'post' },\n    );\n\n    watch(\n      [() => props.rtl, () => props.tabBarGutter, () => props.activeKey, () => tabs.value],\n      () => {\n        onListHolderResize();\n      },\n      { flush: 'post' },\n    );\n\n    const ExtraContent = ({ position, prefixCls, extra }: ExtraContentProps) => {\n      if (!extra) return null;\n      const content = extra?.({ position });\n      return content ? <div class={`${prefixCls}-extra-content`}>{content}</div> : null;\n    };\n\n    onBeforeUnmount(() => {\n      clearTouchMoving();\n      cleanInkBarRaf();\n    });\n\n    return () => {\n      const {\n        id,\n        animated,\n        activeKey,\n        rtl,\n        editable,\n        locale,\n        tabPosition,\n        tabBarGutter,\n        onTabClick,\n      } = props;\n      const { class: className, style } = attrs;\n      const pre = prefixCls.value;\n      // ========================= Render ========================\n      const hasDropdown = !!hiddenTabs.value.length;\n      const wrapPrefix = `${pre}-nav-wrap`;\n      let pingLeft: boolean;\n      let pingRight: boolean;\n      let pingTop: boolean;\n      let pingBottom: boolean;\n\n      if (tabPositionTopOrBottom.value) {\n        if (rtl) {\n          pingRight = transformLeft.value > 0;\n          pingLeft = transformLeft.value + wrapperWidth.value < wrapperScrollWidth.value;\n        } else {\n          pingLeft = transformLeft.value < 0;\n          pingRight = -transformLeft.value + wrapperWidth.value < wrapperScrollWidth.value;\n        }\n      } else {\n        pingTop = transformTop.value < 0;\n        pingBottom = -transformTop.value + wrapperHeight.value < wrapperScrollHeight.value;\n      }\n\n      const tabNodeStyle: CSSProperties = {};\n      if (tabPosition === 'top' || tabPosition === 'bottom') {\n        tabNodeStyle[rtl ? 'marginRight' : 'marginLeft']\n          = typeof tabBarGutter === 'number' ? `${tabBarGutter}px` : tabBarGutter;\n      } else {\n        tabNodeStyle.marginTop\n          = typeof tabBarGutter === 'number' ? `${tabBarGutter}px` : tabBarGutter;\n      }\n\n      const tabNodes = tabs.value.map((tab, i) => {\n        const { key } = tab;\n        return (\n          <TabNode\n            id={id}\n            prefixCls={pre}\n            key={key}\n            tab={tab}\n            /* first node should not have margin left */\n            style={i === 0 ? undefined : tabNodeStyle}\n            closable={tab.closable}\n            editable={editable}\n            active={key === activeKey}\n            removeAriaLabel={locale?.removeAriaLabel}\n            ref={setRef(key)}\n            onClick={(e) => {\n              onTabClick(key, e);\n            }}\n            onFocus={() => {\n              scrollToTab(key);\n              doLockAnimation();\n              if (!tabsWrapperRef.value)\n                return;\n\n              // Focus element will make scrollLeft change which we should reset back\n              if (!rtl)\n                tabsWrapperRef.value.scrollLeft = 0;\n\n              tabsWrapperRef.value.scrollTop = 0;\n            }}\n            v-slots={slots}\n          >\n          </TabNode>\n        );\n      });\n      return (\n        <div\n          role=\"tablist\"\n          class={classNames(`${pre}-nav`, className)}\n          style={style as CSSProperties}\n          onKeydown={() => {\n            // No need animation when use keyboard\n            doLockAnimation();\n          }}\n        >\n          <ExtraContent position=\"left\" prefixCls={pre} extra={slots.leftExtra} />\n\n          <ResizeObserver onResize={onListHolderResize}>\n            <div\n              class={classNames(wrapPrefix, {\n                [`${wrapPrefix}-ping-left`]: pingLeft,\n                [`${wrapPrefix}-ping-right`]: pingRight,\n                [`${wrapPrefix}-ping-top`]: pingTop,\n                [`${wrapPrefix}-ping-bottom`]: pingBottom,\n              })}\n              ref={tabsWrapperRef}\n            >\n              <ResizeObserver onResize={onListHolderResize}>\n                <div\n                  ref={tabListRef}\n                  class={`${pre}-nav-list`}\n                  style={{\n                    transform: `translate(${transformLeft.value}px, ${transformTop.value}px)`,\n                    transition: lockAnimation.value ? 'none' : undefined,\n                  }}\n                >\n                  {tabNodes}\n                  <AddButton\n                    ref={innerAddButtonRef}\n                    prefixCls={pre}\n                    locale={locale}\n                    editable={editable}\n                    style={{\n                      ...(tabNodes.length === 0 ? undefined : tabNodeStyle),\n                      visibility: hasDropdown ? 'hidden' : null,\n                    }}\n                  />\n\n                  <div\n                    class={classNames(`${pre}-ink-bar`, {\n                      [`${pre}-ink-bar-animated`]: animated.inkBar,\n                    })}\n                    style={inkStyle.value}\n                  />\n                </div>\n              </ResizeObserver>\n            </div>\n          </ResizeObserver>\n          <OperationNode\n            {...props}\n            removeAriaLabel={locale?.removeAriaLabel}\n            v-slots={pick(slots, ['moreIcon'])}\n            ref={operationsRef}\n            prefixCls={pre}\n            tabs={hiddenTabs.value}\n            class={!hasDropdown && operationsHiddenClassName.value}\n          />\n\n          <ExtraContent position=\"right\" prefixCls={pre} extra={slots.rightExtra} />\n          <ExtraContent position=\"right\" prefixCls={pre} extra={slots.tabBarExtraContent} />\n        </div>\n      );\n    };\n  },\n});\n"],"names":["DEFAULT_SIZE","width","height","left","top","right","getTabSize","tab","containerRect","offsetWidth","offsetHeight","offsetTop","offsetLeft","x","y","getBoundingClientRect","Math","abs","compatConfig","MODE","name","inheritAttrs","props","tabNavListProps","slots","Object","emits","setup","attrs","tabs","prefixCls","useInjectTabs","tabsWrapperRef","shallowRef","tabListRef","operationsRef","innerAddButtonRef","setRef","btnRefs","useRefs","tabPositionTopOrBottom","computed","tabPosition","transformLeft","setTransformLeft","useSyncState","next","prev","value","onTabScroll","direction","transformTop","setTransformTop","wrapperScrollWidth","setWrapperScrollWidth","useState","wrapperScrollHeight","setWrapperScrollHeight","wrapperWidth","setWrapperWidth","wrapperHeight","setWrapperHeight","addWidth","setAddWidth","addHeight","setAddHeight","tabSizes","setTabSizes","useRafState","Map","tabOffsets","useOffsets","operationsHiddenClassName","transformMin","transformMax","watchEffect","min","rtl","max","alignInRange","touchMovingRef","lockAnimation","setLockAnimation","doLockAnimation","Date","now","clearTouchMoving","clearTimeout","doMove","setState","offset","newValue","useTouchMove","offsetX","offsetY","watch","setTimeout","scrollToTab","key","activeKey","tabOffset","get","newTransform","visibleStart","visibleEnd","unit","position","transformSize","basicSize","tabContentSize","addSize","tabOffsetsValue","includes","mergedBasicSize","tabsVal","length","len","endIndex","i","startIndex","updateTabSizes","newSizes","listRect","forEach","btnRef","btnNode","$el","set","map","join","flush","onListHolderResize","addDom","newAddWidth","newAddHeight","newWrapperScrollWidth","newWrapperScrollHeight","hiddenTabs","slice","inkStyle","setInkStyle","activeTabOffset","inkBarRafRef","cleanInkBarRaf","raf","cancel","newInkStyle","toPx","tabBarGutter","ExtraContent","extra","content","_createVNode","onBeforeUnmount","id","animated","editable","locale","onTabClick","class","className","style","pre","hasDropdown","wrapPrefix","pingLeft","pingRight","pingTop","pingBottom","tabNodeStyle","marginTop","tabNodes","TabNode","undefined","closable","removeAriaLabel","e","onFocus","scrollLeft","scrollTop","classNames","onKeydown","leftExtra","ResizeObserver","default","transform","transition","AddButton","visibility","inkBar","OperationNode","pick","rightExtra","tabBarExtraContent"],"mappings":"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"}