2024-01-29 09:26:07 +08:00

52 lines
1.3 KiB
JavaScript

import { h, defineComponent, inject, watchEffect } from 'vue';
import { throwError, warnOnce } from "../../_utils/index.mjs";
import { tabsInjectionKey } from "./interface.mjs";
export const tabPaneProps = {
tab: [String, Number, Object, Function],
name: {
type: [String, Number],
required: true
},
disabled: Boolean,
displayDirective: {
type: String,
default: 'if'
},
closable: {
type: Boolean,
default: undefined
},
tabProps: Object,
/** @deprecated */
label: [String, Number, Object, Function]
};
export default defineComponent({
__TAB_PANE__: true,
name: 'TabPane',
alias: ['TabPanel'],
props: tabPaneProps,
setup(props) {
if (process.env.NODE_ENV !== 'production') {
watchEffect(() => {
if (props.label !== undefined) {
warnOnce('tab-pane', '`label` is deprecated, please use `tab` instead.');
}
});
}
const NTab = inject(tabsInjectionKey, null);
if (!NTab) {
throwError('tab-pane', '`n-tab-pane` must be placed inside `n-tabs`.');
}
return {
style: NTab.paneStyleRef,
class: NTab.paneClassRef,
mergedClsPrefix: NTab.mergedClsPrefixRef
};
},
render() {
return h("div", {
class: [`${this.mergedClsPrefix}-tab-pane`, this.class],
style: this.style
}, this.$slots);
}
});