{"version":3,"file":"tabs.mjs","sources":["../../../../../../../packages/components/tabs/src/tabs.tsx"],"sourcesContent":["import {\n  computed,\n  defineComponent,\n  nextTick,\n  onActivated,\n  reactive,\n  ref,\n  watch,\n} from 'vue'\nimport {\n  onMountedOrActivated,\n  onPopupReopen,\n  route,\n  useBaseId,\n  useChildren,\n  useEventListener,\n  useExpose,\n  useNamespace,\n  useRect,\n  useRefs,\n  useScrollParent,\n  useVisibilityChange,\n} from '@xzx-design/hooks'\nimport {\n  addUnit,\n  callInterceptor,\n  isDef,\n  isHidden,\n  setRootScrollTop,\n  unitToPx,\n  windowWidth,\n} from '@xzx-design/utils'\nimport Sticky from '@xzx-design/components/sticky'\nimport Divider from '@xzx-design/components/divider'\nimport { tabsEmits, tabsProps } from './types/tabs'\nimport { TABS_KEY } from './types'\nimport { getElementTop, scrollLeftTo, scrollTopTo } from './utils'\nimport TabsContent from './tabs-content'\n\nimport type {\n  CSSProperties,\n  ComponentInstance,\n  ComponentPublicInstance,\n} from 'vue'\nimport type { Numeric } from '@xzx-design/utils'\nimport type { RouteProps } from '@xzx-design/hooks'\nimport type { Router } from 'vue-router'\n\nexport default defineComponent({\n  name: 'XzxTabs',\n  __name: 'XzxTabs',\n  props: tabsProps,\n  emits: Object.keys(tabsEmits),\n  setup(props, { emit, slots }) {\n    const { b, e, em, m } = useNamespace('tabs')\n\n    let tabHeight: number\n    let lockScroll: boolean\n    let stickyFixed: boolean\n    let cancelScrollLeftToRaf: (() => void) | undefined\n    let cancelScrollTopToRaf: (() => void) | undefined\n\n    const root: any = ref<HTMLElement>()\n    const navRef = ref<HTMLElement>()\n    const wrapRef = ref<HTMLElement>()\n    const contentRef = ref<ComponentInstance<any>>()\n\n    const id = useBaseId()\n    const scroller = useScrollParent(root)\n    const [titleRefs, setTitleRefs] = useRefs<ComponentInstance<any>>()\n    const { children, linkChildren } = useChildren(TABS_KEY)\n\n    const state = reactive({\n      inited: false,\n      position: '',\n      lineStyle: {} as CSSProperties,\n      currentIndex: -1,\n    })\n\n    // whether the nav is scrollable\n    const scrollable = computed(\n      () =>\n        children.length > +props.swipeThreshold ||\n        !props.ellipsis ||\n        props.shrink\n    )\n\n    const navStyle = computed(() => ({\n      borderColor: props.color,\n      background: props.background,\n    }))\n\n    const getTabName = (tab: ComponentInstance<any>, index: number): Numeric =>\n      tab.name ?? index\n\n    // eslint-disable-next-line vue/return-in-computed-property\n    const currentName = computed(() => {\n      const activeTab = children[state.currentIndex]\n\n      if (activeTab) {\n        return getTabName(activeTab, state.currentIndex)\n      }\n    })\n\n    const offsetTopPx: any = computed(() => unitToPx(props.offsetTop))\n\n    const scrollOffset = computed(() => {\n      if (props.sticky) {\n        return offsetTopPx.value + tabHeight\n      }\n      return 0\n    })\n\n    // scroll active tab into view\n    const scrollIntoView = (immediate?: boolean) => {\n      const nav = navRef.value\n      const titles = titleRefs.value\n\n      if (!scrollable.value || !nav || !titles || !titles[state.currentIndex]) {\n        return\n      }\n\n      const title = titles[state.currentIndex].$el\n      const to = title.offsetLeft - (nav.offsetWidth - title.offsetWidth) / 2\n\n      if (cancelScrollLeftToRaf) cancelScrollLeftToRaf()\n      cancelScrollLeftToRaf = scrollLeftTo(\n        nav,\n        to,\n        immediate ? 0 : +props.duration\n      )\n    }\n\n    // update nav bar style\n    const setLine = () => {\n      const shouldAnimate = state.inited\n\n      nextTick(() => {\n        const titles = titleRefs.value\n\n        if (\n          !titles ||\n          !titles[state.currentIndex] ||\n          props.type !== 'line' ||\n          isHidden(root.value!)\n        ) {\n          return\n        }\n\n        const title = titles[state.currentIndex].$el\n        const { lineWidth, lineHeight } = props\n        const left = title.offsetLeft + title.offsetWidth / 2\n\n        const lineStyle: CSSProperties = {\n          width: addUnit(lineWidth),\n          backgroundColor: props.color,\n          transform: `translateX(${left}px) translateX(-50%)`,\n        }\n\n        if (shouldAnimate) {\n          lineStyle.transitionDuration = `${props.duration}s`\n        }\n\n        if (isDef(lineHeight)) {\n          const height = addUnit(lineHeight)\n          lineStyle.height = height\n          lineStyle.borderRadius = height\n        }\n\n        state.lineStyle = lineStyle\n      })\n    }\n\n    const findAvailableTab = (index: number) => {\n      const diff = index < state.currentIndex ? -1 : 1\n\n      while (index >= 0 && index < children.length) {\n        if (!children[index].disabled) {\n          return index\n        }\n\n        index += diff\n      }\n    }\n\n    const setCurrentIndex = (\n      currentIndex: number,\n      skipScrollIntoView?: boolean\n    ) => {\n      const newIndex = findAvailableTab(currentIndex)\n\n      if (!isDef(newIndex)) {\n        return\n      }\n\n      const newTab = children[newIndex]\n      const newName = getTabName(newTab, newIndex)\n      const shouldEmitChange = state.currentIndex !== null\n\n      if (state.currentIndex !== newIndex) {\n        state.currentIndex = newIndex\n\n        if (!skipScrollIntoView) {\n          scrollIntoView()\n        }\n        setLine()\n      }\n\n      if (newName !== props.active) {\n        emit('update:active', newName)\n\n        if (shouldEmitChange) {\n          emit('change', newName, newTab.title)\n        }\n      }\n\n      // scroll to correct position\n      if (stickyFixed && !props.scrollspy) {\n        setRootScrollTop(\n          Math.ceil(getElementTop(root.value!) - offsetTopPx.value)\n        )\n      }\n    }\n\n    // correct the index of active tab\n    const setCurrentIndexByName = (\n      name: Numeric,\n      skipScrollIntoView?: boolean\n    ) => {\n      const matched = children.find(\n        (tab, index) => getTabName(tab, index) === name\n      )\n\n      const index = matched ? children.indexOf(matched) : 0\n      setCurrentIndex(index, skipScrollIntoView)\n    }\n\n    const scrollToCurrentContent = (immediate = false) => {\n      if (props.scrollspy) {\n        const target = children[state.currentIndex].$el\n\n        if (target && scroller.value) {\n          const to = getElementTop(target, scroller.value) - scrollOffset.value\n\n          lockScroll = true\n\n          if (cancelScrollTopToRaf) cancelScrollTopToRaf()\n          cancelScrollTopToRaf = scrollTopTo(\n            scroller.value,\n            to,\n            immediate ? 0 : +props.duration,\n            () => {\n              lockScroll = false\n            }\n          )\n        }\n      }\n    }\n\n    // emit event when clicked\n    const onClickTab = (\n      item: ComponentInstance<any>,\n      index: number,\n      event: MouseEvent\n    ) => {\n      const { title, disabled } = children[index]\n      const name = getTabName(children[index], index)\n\n      if (!disabled) {\n        callInterceptor(props.beforeChange, {\n          args: [name],\n          done: () => {\n            setCurrentIndex(index)\n            scrollToCurrentContent()\n          },\n        })\n\n        route(item as ComponentPublicInstance<RouteProps> & { $router: Router })\n      }\n\n      emit('clickTab', {\n        name,\n        title,\n        event,\n        disabled,\n      })\n    }\n\n    const onStickyScroll = (params: {\n      isFixed: boolean\n      scrollTop: number\n    }) => {\n      stickyFixed = params.isFixed\n      emit('scroll', params)\n    }\n\n    const scrollTo = (name: Numeric) => {\n      nextTick(() => {\n        setCurrentIndexByName(name)\n        scrollToCurrentContent(true)\n      })\n    }\n\n    const getCurrentIndexOnScroll = () => {\n      for (const [index, child] of children.entries()) {\n        const { top } = useRect(child.$el)\n\n        if (top > scrollOffset.value) {\n          return index === 0 ? 0 : index - 1\n        }\n      }\n\n      return children.length - 1\n    }\n\n    const onScroll = () => {\n      if (props.scrollspy && !lockScroll) {\n        const index = getCurrentIndexOnScroll()\n        setCurrentIndex(index)\n      }\n    }\n\n    const renderLine = () => {\n      if (props.type === 'line' && children.length) {\n        return <div class={e('line')} style={state.lineStyle} />\n      }\n    }\n\n    const renderHeader = () => {\n      const { type, sticky } = props\n\n      const Header = [\n        <div ref={sticky ? undefined : wrapRef} class={[e('wrap')]}>\n          <div\n            ref={navRef}\n            role=\"tablist\"\n            // class={bem('nav', [\n            //   type,\n            //   { shrink: props.shrink, complete: scrollable.value },\n            // ])}\n            class={[\n              e('nav'),\n              em('nav', type),\n              props.shrink && em('nav', 'shrink'),\n              scrollable.value && em('nav', 'complete'),\n            ]}\n            style={navStyle.value}\n            aria-orientation=\"horizontal\"\n          >\n            {slots['nav-left']?.()}\n            {children.map((item) => item.renderTitle(onClickTab))}\n            {renderLine()}\n            {slots['nav-right']?.()}\n          </div>\n        </div>,\n        slots['nav-bottom']?.(),\n        props.border && <Divider margin={false} />,\n      ]\n\n      if (sticky) {\n        return <div ref={wrapRef}>{Header}</div>\n      }\n      return Header\n    }\n\n    const resize = () => {\n      setLine()\n\n      nextTick(() => {\n        scrollIntoView(true)\n        contentRef.value?.swipeRef?.value?.resize()\n      })\n    }\n\n    watch(\n      () => [props.color, props.duration, props.lineWidth, props.lineHeight],\n      setLine\n    )\n    watch(windowWidth, resize)\n\n    watch(\n      () => props.active,\n      (value) => {\n        if (value !== currentName.value) {\n          setCurrentIndexByName(value)\n        }\n      }\n    )\n\n    watch(\n      () => children.length,\n      () => {\n        if (state.inited) {\n          setCurrentIndexByName(props.active)\n          setLine()\n          nextTick(() => {\n            scrollIntoView(true)\n          })\n        }\n      }\n    )\n\n    const init = () => {\n      setCurrentIndexByName(props.active, true)\n      nextTick(() => {\n        state.inited = true\n        if (wrapRef.value) {\n          tabHeight = useRect(wrapRef.value).height\n        }\n        scrollIntoView(true)\n      })\n    }\n\n    const onRendered = (name: Numeric, title?: string) =>\n      emit('rendered', name, title)\n\n    useExpose({\n      resize,\n      scrollTo,\n    })\n\n    onActivated(setLine)\n    onPopupReopen(setLine)\n    onMountedOrActivated(init)\n    useVisibilityChange(root, setLine)\n    useEventListener('scroll', onScroll, {\n      target: scroller,\n      passive: true,\n    })\n\n    linkChildren({\n      id,\n      props,\n      setLine,\n      scrollable,\n      onRendered,\n      currentName,\n      setTitleRefs,\n      scrollIntoView,\n    })\n\n    return () => (\n      <div ref={root} class={[b(), m(props.type)]}>\n        {props.showHeader ? (\n          props.sticky ? (\n            <Sticky\n              container={root.value}\n              offsetTop={offsetTopPx.value}\n              onScroll={onStickyScroll}\n            >\n              {renderHeader()}\n            </Sticky>\n          ) : (\n            renderHeader()\n          )\n        ) : null}\n        <TabsContent\n          ref={contentRef}\n          count={children.length}\n          inited={state.inited}\n          animated={props.animated}\n          duration={props.duration}\n          swipeable={props.swipeable}\n          lazyRender={props.lazyRender}\n          currentIndex={state.currentIndex}\n          onChange={setCurrentIndex}\n        >\n          {slots.default?.()}\n        </TabsContent>\n      </div>\n    )\n  },\n})\n"],"names":["_isSlot","s","Object","prototype","toString","call","_isVNode","defineComponent","name","__name","props","tabsProps","emits","keys","tabsEmits","setup","emit","slots","b","e","em","m","useNamespace","tabHeight","lockScroll","stickyFixed","cancelScrollLeftToRaf","cancelScrollTopToRaf","root","ref","navRef","wrapRef","contentRef","id","useBaseId","scroller","useScrollParent","titleRefs","setTitleRefs","useRefs","children","linkChildren","useChildren","TABS_KEY","state","reactive","inited","position","lineStyle","currentIndex","scrollable","computed","length","swipeThreshold","ellipsis","shrink","navStyle","borderColor","color","background","getTabName","tab","index","currentName","activeTab","offsetTopPx","unitToPx","offsetTop","scrollOffset","sticky","value","scrollIntoView","immediate","nav","titles","title","$el","to","offsetLeft","offsetWidth","scrollLeftTo","duration","setLine","shouldAnimate","nextTick","type","isHidden","lineWidth","lineHeight","left","width","addUnit","backgroundColor","transform","transitionDuration","isDef","height","borderRadius","findAvailableTab","diff","disabled","setCurrentIndex","skipScrollIntoView","newIndex","newTab","newName","shouldEmitChange","active","scrollspy","setRootScrollTop","Math","ceil","getElementTop","setCurrentIndexByName","matched","find","indexOf","scrollToCurrentContent","target","scrollTopTo","onClickTab","item","event","callInterceptor","beforeChange","args","done","route","onStickyScroll","params","isFixed","scrollTo","getCurrentIndexOnScroll","child","entries","top","useRect","onScroll","renderLine","_createVNode","renderHeader","Header","undefined","map","renderTitle","border","Divider","resize","swipeRef","watch","windowWidth","init","onRendered","useExpose","onActivated","onPopupReopen","onMountedOrActivated","useVisibilityChange","useEventListener","passive","_slot","showHeader","Sticky","default","TabsContent","animated","swipeable","lazyRender"],"mappings":"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"}