Files
ctms/frontend/node_modules/element-plus/es/components/tabs/src/tabs.mjs.map
T

1 line
15 KiB
Plaintext

{"version":3,"file":"tabs.mjs","sources":["../../../../../../packages/components/tabs/src/tabs.tsx"],"sourcesContent":["import {\n computed,\n createVNode,\n defineComponent,\n getCurrentInstance,\n nextTick,\n provide,\n ref,\n renderSlot,\n watch,\n} from 'vue'\nimport { omit } from 'lodash-unified'\nimport {\n buildProps,\n definePropType,\n getEventCode,\n isNumber,\n isString,\n isUndefined,\n} from '@element-plus/utils'\nimport { EVENT_CODE, UPDATE_MODEL_EVENT } from '@element-plus/constants'\nimport ElIcon from '@element-plus/components/icon'\nimport { Plus } from '@element-plus/icons-vue'\nimport { useNamespace, useOrderedChildren } from '@element-plus/hooks'\nimport { tabsRootContextKey } from './constants'\nimport TabNav from './tab-nav'\n\nimport type { ExtractPropTypes, VNode, __ExtractPublicPropTypes } from 'vue'\nimport type { Awaitable } from '@element-plus/utils'\nimport type { TabNavInstance } from './tab-nav'\nimport type { TabPaneName, TabsPaneContext } from './constants'\n\nexport const tabsProps = buildProps({\n /**\n * @description type of Tab\n */\n type: {\n type: String,\n values: ['card', 'border-card', ''],\n default: '',\n },\n /**\n * @description whether Tab is closable\n */\n closable: Boolean,\n /**\n * @description whether Tab is addable\n */\n addable: Boolean,\n /**\n * @description binding value, name of the selected tab\n */\n modelValue: {\n type: [String, Number],\n },\n /**\n * @description initial value when `model-value` is not set\n */\n defaultValue: {\n type: [String, Number],\n },\n /**\n * @description whether Tab is addable and closable\n */\n editable: Boolean,\n /**\n * @description position of tabs\n */\n tabPosition: {\n type: String,\n values: ['top', 'right', 'bottom', 'left'],\n default: 'top',\n },\n /**\n * @description hook function before switching tab. If `false` is returned or a `Promise` is returned and then is rejected, switching will be prevented\n */\n beforeLeave: {\n type: definePropType<\n (newName: TabPaneName, oldName: TabPaneName) => Awaitable<void | boolean>\n >(Function),\n default: () => true,\n },\n /**\n * @description whether width of tab automatically fits its container\n */\n stretch: Boolean,\n /**\n * @description tabs tabindex\n */\n tabindex: {\n type: [String, Number],\n default: 0,\n },\n} as const)\nexport type TabsProps = ExtractPropTypes<typeof tabsProps>\nexport type TabsPropsPublic = __ExtractPublicPropTypes<typeof tabsProps>\n\nconst isPaneName = (value: unknown): value is string | number =>\n isString(value) || isNumber(value)\n\nexport const tabsEmits = {\n [UPDATE_MODEL_EVENT]: (name: TabPaneName) => isPaneName(name),\n tabClick: (pane: TabsPaneContext, ev: Event) => ev instanceof Event,\n tabChange: (name: TabPaneName) => isPaneName(name),\n edit: (paneName: TabPaneName | undefined, action: 'remove' | 'add') =>\n ['remove', 'add'].includes(action),\n tabRemove: (name: TabPaneName) => isPaneName(name),\n tabAdd: () => true,\n}\nexport type TabsEmits = typeof tabsEmits\n\nexport type TabsPanes = Record<number, TabsPaneContext>\n\nconst Tabs = defineComponent({\n name: 'ElTabs',\n\n props: tabsProps,\n emits: tabsEmits,\n\n setup(props, { emit, slots, expose }) {\n const ns = useNamespace('tabs')\n\n const isVertical = computed(() =>\n ['left', 'right'].includes(props.tabPosition)\n )\n\n const {\n children: panes,\n addChild: registerPane,\n removeChild: unregisterPane,\n ChildrenSorter: PanesSorter,\n } = useOrderedChildren<TabsPaneContext>(getCurrentInstance()!, 'ElTabPane')\n\n const nav$ = ref<TabNavInstance>()\n const currentName = ref<TabPaneName>(\n (isUndefined(props.modelValue) ? props.defaultValue : props.modelValue) ??\n '0'\n )\n\n const setCurrentName = async (value?: TabPaneName, trigger = false) => {\n // should do nothing.\n if (currentName.value === value || isUndefined(value)) return\n\n try {\n let canLeave\n if (props.beforeLeave) {\n const result = props.beforeLeave(value, currentName.value)\n canLeave = result instanceof Promise ? await result : result\n } else {\n canLeave = true\n }\n\n if (canLeave !== false) {\n const isFocusInsidePane = panes.value\n .find((item) => item.paneName === currentName.value)\n ?.isFocusInsidePane()\n\n currentName.value = value\n if (trigger) {\n emit(UPDATE_MODEL_EVENT, value)\n emit('tabChange', value)\n }\n\n nav$.value?.removeFocus?.()\n if (isFocusInsidePane) {\n nav$.value?.focusActiveTab()\n }\n }\n } catch {}\n }\n\n const handleTabClick = (\n tab: TabsPaneContext,\n tabName: TabPaneName,\n event: Event\n ) => {\n if (tab.props.disabled) return\n emit('tabClick', tab, event)\n setCurrentName(tabName, true)\n }\n\n const handleTabRemove = (pane: TabsPaneContext, ev: Event) => {\n if (pane.props.disabled || isUndefined(pane.props.name)) return\n ev.stopPropagation()\n emit('edit', pane.props.name, 'remove')\n emit('tabRemove', pane.props.name)\n }\n\n const handleTabAdd = () => {\n emit('edit', undefined, 'add')\n emit('tabAdd')\n }\n\n const handleKeydown = (event: KeyboardEvent) => {\n const code = getEventCode(event)\n if ([EVENT_CODE.enter, EVENT_CODE.numpadEnter].includes(code))\n handleTabAdd()\n }\n\n const swapChildren = (\n vnode: VNode & {\n el: HTMLDivElement\n children: VNode<HTMLDivElement>[]\n }\n ) => {\n const actualFirstChild = vnode.el.firstChild!\n const firstChild = ['bottom', 'right'].includes(props.tabPosition)\n ? vnode.children[0].el!\n : vnode.children[1].el!\n\n if (actualFirstChild !== firstChild) {\n actualFirstChild.before(firstChild)\n }\n }\n\n watch(\n () => props.modelValue,\n (modelValue) => setCurrentName(modelValue)\n )\n\n watch(currentName, async () => {\n await nextTick()\n nav$.value?.scrollToActiveTab()\n })\n\n provide(tabsRootContextKey, {\n props,\n currentName,\n registerPane,\n unregisterPane,\n nav$,\n })\n\n expose({\n currentName,\n get tabNavRef() {\n return omit(nav$.value, ['scheduleRender'])\n },\n })\n\n return () => {\n const addSlot = slots['add-icon']\n const newButton =\n props.editable || props.addable ? (\n <div\n class={[\n ns.e('new-tab'),\n isVertical.value && ns.e('new-tab-vertical'),\n ]}\n tabindex={props.tabindex}\n onClick={handleTabAdd}\n onKeydown={handleKeydown}\n >\n {addSlot ? (\n renderSlot(slots, 'add-icon')\n ) : (\n <ElIcon class={ns.is('icon-plus')}>\n <Plus />\n </ElIcon>\n )}\n </div>\n ) : null\n\n const tabNav = () => (\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 )\n\n const header = (\n <div\n class={[\n ns.e('header'),\n isVertical.value && ns.e('header-vertical'),\n ns.is(props.tabPosition),\n ]}\n >\n {createVNode(PanesSorter, null, {\n default: tabNav,\n $stable: true,\n })}\n {newButton}\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 // @ts-ignore\n onVnodeMounted={swapChildren}\n onVnodeUpdated={swapChildren}\n >\n {panels}\n {header}\n </div>\n )\n }\n },\n})\n\nexport type TabsInstance = InstanceType<typeof Tabs> & {\n currentName: TabPaneName\n tabNavRef: TabNavInstance | undefined\n}\n\nexport default Tabs\n"],"names":["tabsProps","buildProps","type","values","default","closable","addable","Boolean","modelValue","String","defaultValue","editable","tabPosition","beforeLeave","definePropType","stretch","tabindex","name","ev","tabChange","edit","tabRemove","tabAdd","defineComponent","props","emits","emit","expose","children","addChild","removeChild","ChildrenSorter","PanesSorter","getCurrentInstance","nav$","currentName","setCurrentName","value","result","Promise","canLeave","panes","handleTabClick","event","tabName","_createVNode","disabled","isUndefined","stopPropagation","pane","handleTabAdd","undefined","handleKeydown","getEventCode","EVENT_CODE","enter","swapChildren","vnode","firstChild","actualFirstChild","watch","registerPane"],"mappings":"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"}