{"version":3,"file":"tabs.mjs","sources":["../../../../../../packages/components/tabs/src/tabs.tsx"],"sourcesContent":["import {\n  Fragment,\n  computed,\n  defineComponent,\n  getCurrentInstance,\n  nextTick,\n  onMounted,\n  onUpdated,\n  provide,\n  ref,\n  renderSlot,\n  watch,\n} from 'vue'\nimport { NOOP } from '@vue/shared'\nimport {\n  buildProps,\n  definePropType,\n  isFunction,\n  isNumber,\n  isPromise,\n  isString,\n} from '@element-plus/utils'\nimport {\n  EVENT_CODE,\n  INPUT_EVENT,\n  UPDATE_MODEL_EVENT,\n} from '@element-plus/constants'\nimport ElIcon from '@element-plus/components/icon'\nimport { Plus } from '@element-plus/icons-vue'\nimport { tabsRootContextKey } from '@element-plus/tokens'\nimport { useDeprecated, useNamespace } from '@element-plus/hooks'\nimport TabNav from './tab-nav'\nimport type { TabNavInstance } from './tab-nav'\nimport type { TabsPaneContext } from '@element-plus/tokens'\n\nimport type {\n  Component,\n  ComponentInternalInstance,\n  ExtractPropTypes,\n  Ref,\n  VNode,\n} from 'vue'\nimport type { Awaitable } from '@element-plus/utils'\n\nexport type TabPanelName = string | number\n\nexport const tabsProps = buildProps({\n  type: {\n    type: String,\n    values: ['card', 'border-card', ''],\n    default: '',\n  },\n  activeName: {\n    type: [String, Number],\n    default: '',\n  },\n  closable: Boolean,\n  addable: Boolean,\n  modelValue: {\n    type: [String, Number],\n    default: '',\n  },\n  editable: Boolean,\n  tabPosition: {\n    type: String,\n    values: ['top', 'right', 'bottom', 'left'],\n    default: 'top',\n  },\n  beforeLeave: {\n    type: definePropType<\n      (\n        newName: TabPanelName,\n        oldName: TabPanelName\n      ) => Awaitable<void | boolean>\n    >(Function),\n    default: () => true,\n  },\n  stretch: Boolean,\n} as const)\nexport type TabsProps = ExtractPropTypes<typeof tabsProps>\n\nconst isPanelName = (value: unknown): value is string | number =>\n  isString(value) || isNumber(value)\n\nexport const tabsEmits = {\n  [UPDATE_MODEL_EVENT]: (name: TabPanelName) => isPanelName(name),\n  /** @deprecated use `tab-change` instead */\n  [INPUT_EVENT]: (name: TabPanelName) => isPanelName(name),\n  'tab-click': (pane: TabsPaneContext, ev: Event) => ev instanceof Event,\n  'tab-change': (name: TabPanelName) => isPanelName(name),\n  edit: (paneName: TabPanelName | undefined, action: 'remove' | 'add') =>\n    ['remove', 'add'].includes(action),\n  'tab-remove': (name: TabPanelName) => isPanelName(name),\n  'tab-add': () => true,\n}\nexport type TabsEmits = typeof tabsEmits\n\nconst getPaneInstanceFromSlot = (\n  vnode: VNode,\n  paneInstanceList: ComponentInternalInstance[] = []\n) => {\n  const children = (vnode.children || []) as ArrayLike<VNode>\n  Array.from(children).forEach((node) => {\n    let type = node.type\n    type = (type as Component).name || type\n    if (type === 'ElTabPane' && node.component) {\n      paneInstanceList.push(node.component)\n    } else if (type === Fragment || type === 'template') {\n      getPaneInstanceFromSlot(node, paneInstanceList)\n    }\n  })\n  return paneInstanceList\n}\n\nexport default defineComponent({\n  name: 'ElTabs',\n\n  props: tabsProps,\n  emits: tabsEmits,\n\n  setup(props, { emit, slots, expose }) {\n    const instance = getCurrentInstance()!\n\n    useDeprecated(\n      {\n        scope: 'el-tabs',\n        type: 'Event',\n        from: 'input',\n        replacement: 'tab-change',\n        version: '2.5.0',\n        ref: 'https://element-plus.org/en-US/component/tabs.html#tabs-events',\n      },\n      computed(() => isFunction(instance.vnode.props?.onInput))\n    )\n\n    const ns = useNamespace('tabs')\n\n    const nav$ = ref<TabNavInstance>()\n    const panes: Ref<TabsPaneContext[]> = ref([])\n    const currentName = ref(props.modelValue || props.activeName || '0')\n\n    const paneStatesMap: Record<number, TabsPaneContext> = {}\n\n    const updatePaneInstances = (isForceUpdate = false) => {\n      if (slots.default) {\n        const children = instance.subTree.children as ArrayLike<VNode>\n        const content = Array.from(children).find(\n          ({ props }) => props?.class === ns.e('content')\n        )\n        if (!content) return\n\n        const paneInstanceList: TabsPaneContext[] = getPaneInstanceFromSlot(\n          content\n        ).map((paneComponent) => paneStatesMap[paneComponent.uid])\n\n        const panesChanged = !(\n          paneInstanceList.length === panes.value.length &&\n          paneInstanceList.every(\n            (pane, index) => pane.uid === panes.value[index].uid\n          )\n        )\n\n        if (isForceUpdate || panesChanged) {\n          panes.value = paneInstanceList\n        }\n      } else if (panes.value.length !== 0) {\n        panes.value = []\n      }\n    }\n\n    const changeCurrentName = (value: TabPanelName) => {\n      currentName.value = value\n      /** @deprecated use `tab-change` instead */\n      emit(INPUT_EVENT, value)\n      emit(UPDATE_MODEL_EVENT, value)\n      emit('tab-change', value)\n    }\n\n    const setCurrentName = (value: TabPanelName) => {\n      // should do nothing.\n      if (currentName.value === value) return\n\n      const canLeave = props.beforeLeave?.(value, currentName.value)\n      if (isPromise(canLeave)) {\n        canLeave.then(\n          () => {\n            changeCurrentName(value)\n\n            // call exposed function, Vue doesn't support expose in typescript yet.\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-expect-error\n            nav$.value?.removeFocus?.()\n          },\n          // ignore promise rejection in `before-leave` hook\n          NOOP\n        )\n      } else if (canLeave !== false) {\n        changeCurrentName(value)\n      }\n    }\n\n    const handleTabClick = (\n      tab: TabsPaneContext,\n      tabName: TabPanelName,\n      event: Event\n    ) => {\n      if (tab.props.disabled) return\n      setCurrentName(tabName)\n      emit('tab-click', tab, event)\n    }\n\n    const handleTabRemove = (pane: TabsPaneContext, ev: Event) => {\n      if (pane.props.disabled) return\n      ev.stopPropagation()\n      emit('edit', pane.props.name, 'remove')\n      emit('tab-remove', pane.props.name)\n    }\n\n    const handleTabAdd = () => {\n      emit('edit', undefined, 'add')\n      emit('tab-add')\n    }\n\n    onUpdated(() => updatePaneInstances())\n    onMounted(() => updatePaneInstances())\n\n    watch(\n      () => props.activeName,\n      (modelValue) => setCurrentName(modelValue)\n    )\n\n    watch(\n      () => props.modelValue,\n      (modelValue) => setCurrentName(modelValue)\n    )\n\n    watch(currentName, async () => {\n      updatePaneInstances(true)\n      await nextTick()\n      await nav$.value?.$nextTick()\n\n      // call exposed function, Vue doesn't support expose in typescript yet.\n      // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n      // @ts-expect-error\n      nav$.value?.scrollToActiveTab()\n    })\n\n    provide(tabsRootContextKey, {\n      props,\n      currentName,\n      updatePaneState: (pane) => (paneStatesMap[pane.uid] = pane),\n    })\n\n    expose({\n      currentName,\n    })\n\n    return () => {\n      const newButton =\n        props.editable || props.addable ? (\n          <span\n            class={ns.e('new-tab')}\n            tabindex=\"0\"\n            onClick={handleTabAdd}\n            onKeydown={(ev: KeyboardEvent) => {\n              if (ev.code === EVENT_CODE.enter) handleTabAdd()\n            }}\n          >\n            <ElIcon class={ns.is('icon-plus')}>\n              <Plus />\n            </ElIcon>\n          </span>\n        ) : null\n\n      const header = (\n        <div class={[ns.e('header'), ns.is(props.tabPosition)]}>\n          {newButton}\n          <TabNav\n            ref={nav$}\n            currentName={currentName.value}\n            editable={props.editable}\n            type={props.type}\n            panes={panes.value}\n            stretch={props.stretch}\n            onTabClick={handleTabClick}\n            onTabRemove={handleTabRemove}\n          />\n        </div>\n      )\n\n      const panels = (\n        <div class={ns.e('content')}>{renderSlot(slots, 'default')}</div>\n      )\n\n      return (\n        <div\n          class={[\n            ns.b(),\n            ns.m(props.tabPosition),\n            {\n              [ns.m('card')]: props.type === 'card',\n              [ns.m('border-card')]: props.type === 'border-card',\n            },\n          ]}\n        >\n          {...props.tabPosition !== 'bottom'\n            ? [header, panels]\n            : [panels, header]}\n        </div>\n      )\n    }\n  },\n})\n"],"names":["tabsProps","buildProps","type","String","values","default","activeName","Number","closable","Boolean","addable","modelValue","editable","tabPosition","beforeLeave","definePropType","Function","stretch","name","edit","isPanelName","getPaneInstanceFromSlot","vnode","children","Array","forEach","node","paneInstanceList","props","emits","setup","emit","slots","expose","instance","getCurrentInstance","useDeprecated","scope","from","replacement","version","ref","computed","ns","nav$","paneStatesMap","content","class","panesChanged","isForceUpdate","panes","length","changeCurrentName","currentName","setCurrentName","value","canLeave","isPromise","NOOP","handleTabClick","tabName","tab","disabled","handleTabRemove","ev","pane","handleTabAdd","onUpdated","onMounted","watch","updatePaneInstances","_createVNode","provide","tabsRootContextKey","updatePaneState","newButton","e"],"mappings":"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"}