{"version":3,"file":"tab-nav.mjs","sources":["../../../../../../packages/components/tabs/src/tab-nav.tsx"],"sourcesContent":["import {\n  computed,\n  defineComponent,\n  getCurrentInstance,\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 {\n  buildProps,\n  capitalize,\n  definePropType,\n  mutable,\n  throwError,\n} from '@bigin/utils'\nimport { EVENT_CODE } from '@bigin/constants'\nimport { BButton } from '@bigin/components/button'\nimport { BIcon } from '@bigin/components/icon'\nimport { ChevronLeft, ChevronRight, Close } from '@bigin/icons-vue'\nimport { tabsRootContextKey } from '@bigin/tokens'\nimport { useNamespace } from '@bigin/hooks'\nimport TabBar from './tab-bar.vue'\nimport type { CSSProperties, ExtractPropTypes } from 'vue'\nimport type { TabsPaneContext } from '@bigin/tokens'\nimport type { TabPanelName } 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: ['separator', 'segment', 'large-segment', ''],\n    default: '',\n  },\n  stretch: Boolean,\n  center: Boolean,\n} as const)\n\nexport const tabNavEmits = {\n  tabClick: (tab: TabsPaneContext, tabName: TabPanelName, 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 = 'BTabNav'\nconst TabNav = defineComponent({\n  name: COMPONENT_NAME,\n  props: tabNavProps,\n  emits: tabNavEmits,\n  setup(props, { expose, emit }) {\n    const vm = getCurrentInstance()!\n\n    const rootTabs = inject(tabsRootContextKey)\n    if (!rootTabs) throwError(COMPONENT_NAME, `<b-tabs><tab-nav /></b-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 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      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        const currentOffset = navOffset.value\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      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()\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    watch(\n      () => props.panes,\n      () => vm.update(),\n      { flush: 'post' }\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              <BIcon>\n                <ChevronLeft />\n              </BIcon>\n            </span>,\n            <span\n              class={[\n                ns.e('nav-next'),\n                ns.is('disabled', !scrollable.value.next),\n              ]}\n              onClick={scrollNext}\n            >\n              <BIcon>\n                <ChevronRight />\n              </BIcon>\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          <BButton\n            class=\"is-icon-close\"\n            xxsmall\n            ghost\n            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        ) : 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            <div class={[ns.e('item-inner')]}>\n              {...[tabLabelContent, btnClose]}\n            </div>\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          data-test-name={'tab-nav'}\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                ns.is(\n                  'center',\n                  props.center &&\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 ? <TabBar tabs={[...props.panes]} /> : null,\n                tabs,\n              ]}\n            </div>\n          </div>\n        </div>\n      )\n    }\n  },\n})\n\nexport type TabNavInstance = InstanceType<typeof TabNav>\nexport default TabNav\n"],"names":["tabNavProps","buildProps","panes","type","definePropType","Array","default","mutable","currentName","String","Number","editable","Boolean","values","stretch","center","tabNavEmits","tabClick","tab","tabName","ev","Event","tabRemove","COMPONENT_NAME","TabNav","defineComponent","name","props","emits","setup","expose","emit","vm","getCurrentInstance","rootTabs","inject","tabsRootContextKey","throwError","ns","useNamespace","visibility","useDocumentVisibility","focused","useWindowFocus","navScroll$","ref","nav$","el$","scrollable","navOffset","isFocus","focusable","sizeName","computed","includes","tabPosition","navStyle","dir","value","transform","scrollPrev","containerSize","capitalize","currentOffset","newOffset","scrollNext","navSize","scrollToActiveTab","nav","nextTick","activeTab","querySelector","navScroll","isHorizontal","activeTabBounding","getBoundingClientRect","navScrollBounding","maxOffset","offsetWidth","width","offsetHeight","height","left","right","top","bottom","Math","max","min","update","prev","next","changeTab","e","code","up","down","EVENT_CODE","tabList","from","currentTarget","querySelectorAll","currentIndex","indexOf","target","nextIndex","length","focus","preventScroll","click","setFocus","removeFocus","watch","setTimeout","useResizeObserver","onMounted","onUpdated","flush","scrollBtn","_createVNode","is","tabs","map","pane","index","uid","disabled","closable","isClosable","btnClose","Close","tabLabelContent","slots","label","tabindex","active","delete","backspace"],"mappings":"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"}