{"version":3,"file":"tab.mjs","sources":["../../../../../../../packages/components/tab/src/tab.tsx"],"sourcesContent":["import {\n  computed,\n  defineComponent,\n  getCurrentInstance,\n  nextTick,\n  provide,\n  ref,\n  watch,\n  watchEffect,\n} from 'vue'\nimport { normalizeClass, normalizeStyle, stringifyStyle } from '@vue/shared'\nimport {\n  TAB_STATUS_KEY,\n  useBaseId,\n  useExpose,\n  useNamespace,\n  useParent,\n} from '@xzx-design/hooks'\nimport { doubleRaf, pick } from '@xzx-design/utils'\nimport { TABS_KEY } from '@xzx-design/components/tabs'\nimport { SwipeItem } from '@xzx-design/components/swipe'\nimport { tabProps } from './types/tab'\nimport { TabTitle } from './tab-title'\n\nimport type { ComponentInstance } from 'vue'\n\nexport default defineComponent({\n  name: 'XzxTab',\n  __name: 'XzxTab',\n  props: tabProps,\n  setup(props, { slots }) {\n    const id = useBaseId()\n    const inited = ref(false)\n    const instance = getCurrentInstance()\n    const { parent, index } = useParent(TABS_KEY)\n\n    const { e, em } = useNamespace('tab')\n\n    if (!parent) {\n      if (process.env.NODE_ENV !== 'production') {\n        console.error('[XzxDesign] <Tab> must be a child component of <Tabs>.')\n      }\n      return\n    }\n\n    const getName = () => props.name ?? index.value\n\n    const init = () => {\n      inited.value = true\n\n      if (parent.props.lazyRender) {\n        nextTick(() => {\n          parent.onRendered(getName(), props.title)\n        })\n      }\n    }\n\n    const active = computed(() => {\n      const isActive = getName() === parent.currentName.value\n\n      if (isActive && !inited.value) {\n        init()\n      }\n\n      return isActive\n    })\n\n    // see: https://github.com/vant-ui/vant/issues/11763\n    const parsedClass = ref('')\n    const parsedStyle = ref<string | undefined>('')\n    watchEffect(() => {\n      const { titleClass, titleStyle } = props\n      parsedClass.value = titleClass ? normalizeClass(titleClass) : ''\n      parsedStyle.value =\n        titleStyle && typeof titleStyle !== 'string'\n          ? stringifyStyle(normalizeStyle(titleStyle))\n          : titleStyle\n    })\n\n    const renderTitle = (\n      onClickTab: (\n        instance: ComponentInstance<any>,\n        index: number,\n        event: MouseEvent\n      ) => void\n    ) => (\n      <TabTitle\n        key={id}\n        v-slots={{ title: slots.title }}\n        id={`${parent.id}-${index.value}`}\n        ref={parent.setTitleRefs(index.value)}\n        style={parsedStyle.value}\n        class={parsedClass.value}\n        isActive={active.value}\n        controls={id}\n        scrollable={parent.scrollable.value}\n        activeColor={parent.props.titleActiveColor}\n        inactiveColor={parent.props.titleInactiveColor}\n        onClick={(event: MouseEvent) =>\n          onClickTab(instance!.proxy!, index.value, event)\n        }\n        {...pick(parent.props, ['type', 'color', 'shrink'])}\n        {...pick(props, ['dot', 'badge', 'title', 'disabled', 'showZeroBadge'])}\n      />\n    )\n\n    const hasInactiveClass = ref(!active.value)\n\n    watch(active, (val) => {\n      if (val) {\n        hasInactiveClass.value = false\n      } else {\n        // mark tab as inactive until the active tab is rendered\n        // to avoid incorrect scroll position or other render issue\n        // https://github.com/youzan/vant/issues/11050\n        doubleRaf(() => {\n          hasInactiveClass.value = true\n        })\n      }\n    })\n\n    watch(\n      () => props.title,\n      () => {\n        parent.setLine()\n        parent.scrollIntoView()\n      }\n    )\n\n    provide(TAB_STATUS_KEY, active)\n\n    useExpose({\n      id,\n      renderTitle,\n    })\n\n    return () => {\n      const label = `${parent.id}-${index.value}`\n      const { animated, scrollspy, lazyRender, swipeable } = parent.props\n\n      if (!slots.default && !animated) {\n        return\n      }\n\n      const show = scrollspy || active.value\n\n      if (animated || swipeable) {\n        return (\n          <SwipeItem\n            id={id}\n            role=\"tabpanel\"\n            class={[\n              e('panel-wrapper'),\n              hasInactiveClass.value && em('panel-wrapper', 'inactive'),\n            ]}\n            tabindex={active.value ? 0 : -1}\n            aria-hidden={!active.value}\n            aria-labelledby={label}\n            data-allow-mismatch=\"attribute\"\n          >\n            <div class={e('panel')}>{slots.default?.()}</div>\n          </SwipeItem>\n        )\n      }\n\n      const shouldRender = inited.value || scrollspy || !lazyRender\n      const Content = shouldRender ? slots.default?.() : null\n\n      return (\n        <div\n          v-show={show}\n          id={id}\n          role=\"tabpanel\"\n          class={e('panel')}\n          tabindex={show ? 0 : -1}\n          aria-labelledby={label}\n          data-allow-mismatch=\"attribute\"\n        >\n          {Content}\n        </div>\n      )\n    }\n  },\n})\n"],"names":["defineComponent","name","__name","props","tabProps","setup","slots","id","useBaseId","inited","ref","instance","getCurrentInstance","parent","index","useParent","TABS_KEY","e","em","useNamespace","process","env","NODE_ENV","console","error","getName","value","init","lazyRender","nextTick","onRendered","title","active","computed","isActive","currentName","parsedClass","parsedStyle","watchEffect","titleClass","titleStyle","normalizeClass","stringifyStyle","normalizeStyle","renderTitle","onClickTab","_createVNode","TabTitle","_mergeProps","setTitleRefs","scrollable","titleActiveColor","titleInactiveColor","event","proxy","pick","hasInactiveClass","watch","val","doubleRaf","setLine","scrollIntoView","provide","TAB_STATUS_KEY","useExpose","label","animated","scrollspy","swipeable","default","show","SwipeItem","_a","shouldRender","Content","_withDirectives","_vShow"],"mappings":"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"}