{"version":3,"file":"tab-bar.mjs","sources":["../../../../../../packages/components/tabs/src/tab-bar.vue"],"sourcesContent":["<template>\n  <div\n    ref=\"barRef\"\n    :class=\"[ns.e('active-bar'), ns.is(rootTabs.props.tabPosition)]\"\n    :style=\"barStyle\"\n    data-test-name=\"tab-bar\"\n    data-test-variant=\"\"\n    data-test-state=\"\"\n  />\n</template>\n\n<script lang=\"ts\" setup>\nimport { getCurrentInstance, inject, nextTick, ref, watch } from 'vue'\nimport { useResizeObserver } from '@vueuse/core'\nimport { capitalize, throwError } from '@bigin/utils'\nimport { tabsRootContextKey } from '@bigin/tokens'\nimport { useNamespace } from '@bigin/hooks'\nimport { tabBarProps } from './tab-bar'\n\nimport type { CSSProperties } from 'vue'\n\nconst COMPONENT_NAME = 'BTabBar'\n\ndefineOptions({\n  name: COMPONENT_NAME,\n})\nconst props = defineProps(tabBarProps)\n\nconst instance = getCurrentInstance()!\nconst rootTabs = inject(tabsRootContextKey)\nif (!rootTabs) throwError(COMPONENT_NAME, '<b-tabs><b-tab-bar /></b-tabs>')\n\nconst ns = useNamespace('tabs')\n\nconst barRef = ref<HTMLDivElement>()\nconst barStyle = ref<CSSProperties>()\n\nconst getBarStyle = (): CSSProperties => {\n  let offset = 0\n  let tabSize = 0\n\n  const sizeName = ['top', 'bottom'].includes(rootTabs.props.tabPosition)\n    ? 'width'\n    : 'height'\n  const sizeDir = sizeName === 'width' ? 'x' : 'y'\n\n  props.tabs.every((tab) => {\n    const $el = instance.parent?.refs?.[`tab-${tab.uid}`] as HTMLElement\n    if (!$el) return false\n\n    if (!tab.active) {\n      return true\n    }\n\n    tabSize = $el[`client${capitalize(sizeName)}`]\n    const position = sizeDir === 'x' ? 'left' : 'top'\n\n    offset =\n      $el[`offset${capitalize(position)}`] -\n      ($el.parentElement?.[`offset${capitalize(position)}`] ?? 0)\n\n    const scrollwrapEl = $el.closest('.is-scrollable')\n    if (scrollwrapEl) {\n      const scrollWrapStyle = window.getComputedStyle(scrollwrapEl)\n      offset += Number.parseFloat(\n        scrollWrapStyle[`padding${capitalize(position)}`]\n      )\n    }\n\n    const tabStyles = window.getComputedStyle($el)\n\n    if (sizeName === 'width') {\n      if (props.tabs.length > 1) {\n        tabSize -=\n          Number.parseFloat(tabStyles.paddingLeft) +\n          Number.parseFloat(tabStyles.paddingRight)\n      }\n      offset += Number.parseFloat(tabStyles.paddingLeft)\n    }\n    return false\n  })\n\n  return {\n    [sizeName]: `${tabSize}px`,\n    transform: `translate${capitalize(sizeDir)}(${offset}px)`,\n  }\n}\n\nconst update = () => (barStyle.value = getBarStyle())\n\nwatch(\n  () => props.tabs,\n  async () => {\n    await nextTick()\n    update()\n  },\n  { immediate: true }\n)\nuseResizeObserver(barRef, () => update())\n\ndefineExpose({\n  /** @description tab root html element */\n  ref: barRef,\n  /** @description method to manually update tab bar style */\n  update,\n})\n</script>\n"],"names":[],"mappings":"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"}