UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 16.3 kB
{"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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"}