{"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  watch,\n} from 'vue'\nimport {\n  useDocumentVisibility,\n  useResizeObserver,\n  useWindowFocus,\n} from '@vueuse/core'\nimport { LtIcon } from '@lit-element/components/icon'\nimport {\n  buildProps,\n  capitalize,\n  definePropType,\n  mutable,\n  throwError,\n} from '@lit-element/utils'\nimport { EVENT_CODE } from '@lit-element/constants'\nimport { useNamespace } from '@lit-element/hooks'\nimport { ArrowLeft, ArrowRight, Close } from '@inte-cloud/icons-vue'\nimport TabBar from './tab-bar.vue'\nimport { tabsRootContextKey } from './constants'\n\nimport type { CSSProperties, ExtractPropTypes } from 'vue'\nimport type { TabsPaneContext } from './constants'\nimport type { TabPaneName } from './tabs'\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 TabNavEmits = typeof tabNavEmits\n\nconst COMPONENT_NAME = 'LtTabNav'\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, `<lt-tabs><tab-nav /></lt-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\n    const tabBarRef = ref<InstanceType<typeof TabBar>>()\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 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 = async () => {\n      const nav = nav$.value\n      if (!scrollable.value || !el$.value || !navScroll$.value || !nav) return\n\n      await nextTick()\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      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 = (e: KeyboardEvent) => {\n      const code = e.code\n\n      const { up, down, left, right } = EVENT_CODE\n      if (![up, down, left, right].includes(code)) return\n\n      // 左右上下键更换tab\n      const tabList = Array.from(\n        (e.currentTarget as HTMLDivElement).querySelectorAll<HTMLDivElement>(\n          '[role=tab]:not(.is-disabled)'\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({ 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    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            <span\n              class={[\n                ns.e('nav-prev'),\n                ns.is('disabled', !scrollable.value.prev),\n              ]}\n              onClick={scrollPrev}\n            >\n              <LtIcon>\n                <ArrowLeft />\n              </LtIcon>\n            </span>,\n            <span\n              class={[\n                ns.e('nav-next'),\n                ns.is('disabled', !scrollable.value.next),\n              ]}\n              onClick={scrollNext}\n            >\n              <LtIcon>\n                <ArrowRight />\n              </LtIcon>\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 = !disabled && (pane.isClosable || props.editable)\n        pane.index = `${index}`\n\n        const btnClose = closable ? (\n          <LtIcon\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          </LtIcon>\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={`tab-${uid}`}\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      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            <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            >\n              {...[\n                !props.type ? (\n                  <TabBar ref={tabBarRef} tabs={[...props.panes]} />\n                ) : null,\n                tabs,\n              ]}\n            </div>\n          </div>\n        </div>\n      )\n    }\n  },\n})\n\nexport type TabNavInstance = InstanceType<typeof TabNav> & {\n  scrollToActiveTab: () => Promise<void>\n  removeFocus: () => void\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","visibility","focused","useWindowFocus","navScroll$","nav$","el$","tabBarRef","ref","scrollable","navOffset","isFocus","focusable","sizeName","navStyle","computed","dir","value","transform","scrollPrev","newOffset","currentOffset","containerSize","scrollNext","navSize","scrollToActiveTab","nav","nextTick","navScroll","includes","navScrollBounding","maxOffset","isHorizontal","activeTabBounding","left","top","bottom","update","next","changeTab","e","up","down","right","tabList","currentIndex","nextIndex","preventScroll","setFocus","removeFocus","watch","setTimeout","useResizeObserver","onUpdated","_createVNode","ns","is","LtIcon","ArrowRight","pane","index","closable","btnClose","Close","tabLabelContent","tabPosition","tabindex","onFocus","scrollBtn","tabs"],"mappings":"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"}