diff --git a/packages/components/teleport/__tests__/teleport.spec.ts b/packages/components/teleport/__tests__/teleport.spec.ts new file mode 100644 index 0000000000..ceaa927458 --- /dev/null +++ b/packages/components/teleport/__tests__/teleport.spec.ts @@ -0,0 +1,40 @@ +import { mount } from '@vue/test-utils' +import Teleport from '../src/teleport.vue' + +const AXIOM = 'rem is the best girl' + +describe('', () => { + let wrapper + beforeEach(() => { + wrapper = mount(Teleport, { + slots: { default: () => AXIOM }, + }) + }) + + afterEach(() => { + wrapper.unmount() + }) + + it('should render slot correctly', () => { + expect(wrapper.text()).toBe('') + expect(document.body.textContent).toBe(AXIOM) + expect(wrapper.vm.containerRef).toBeDefined() + }) + + describe('props', () => { + it('should be able to set customized style', async () => { + const style = { + color: 'red', + } + + await wrapper.setProps({ style }) + expect(getComputedStyle(wrapper.vm?.containerRef).color).toBe(style.color) + }) + + it('should be able to set z-index', async () => { + const zIndex = '10000' + await wrapper.setProps({ zIndex }) + expect(getComputedStyle(wrapper.vm?.containerRef).zIndex).toBe(zIndex) + }) + }) +}) diff --git a/packages/components/teleport/index.ts b/packages/components/teleport/index.ts new file mode 100644 index 0000000000..607dcc348e --- /dev/null +++ b/packages/components/teleport/index.ts @@ -0,0 +1,8 @@ +import { withInstall } from '@element-plus/utils/with-install' +import Teleport from './src/teleport.vue' + +export const ElTeleport = withInstall(Teleport) + +export default ElTeleport + +export * from './src/teleport' diff --git a/packages/components/teleport/src/teleport.ts b/packages/components/teleport/src/teleport.ts new file mode 100644 index 0000000000..b1b75eadce --- /dev/null +++ b/packages/components/teleport/src/teleport.ts @@ -0,0 +1,19 @@ +import { buildProps, definePropType } from '@element-plus/utils/props' + +import type { ExtractPropTypes, StyleValue } from 'vue' + +export const elTeleportProps = buildProps({ + container: { + type: definePropType([String, Object]), + default: 'body', + }, + style: { + type: definePropType([String, Array, Object]), + }, + zIndex: { + type: String, + default: '2000', + }, +}) + +export type ElTeleportProps = ExtractPropTypes diff --git a/packages/components/teleport/src/teleport.vue b/packages/components/teleport/src/teleport.vue new file mode 100644 index 0000000000..513f5db645 --- /dev/null +++ b/packages/components/teleport/src/teleport.vue @@ -0,0 +1,36 @@ + + + diff --git a/packages/components/teleport/style/css.ts b/packages/components/teleport/style/css.ts new file mode 100644 index 0000000000..7475d66381 --- /dev/null +++ b/packages/components/teleport/style/css.ts @@ -0,0 +1 @@ +/* Empty file for avoiding plugin error */ diff --git a/packages/components/teleport/style/index.ts b/packages/components/teleport/style/index.ts new file mode 100644 index 0000000000..7475d66381 --- /dev/null +++ b/packages/components/teleport/style/index.ts @@ -0,0 +1 @@ +/* Empty file for avoiding plugin error */ diff --git a/packages/hooks/use-popper/index.ts b/packages/hooks/use-popper/index.ts index 65d4635250..bf4768dd86 100644 --- a/packages/hooks/use-popper/index.ts +++ b/packages/hooks/use-popper/index.ts @@ -134,8 +134,8 @@ export const usePopperProps = { } export const usePopperHook = () => { - const vm = getCurrentInstance() - const props: ExtractPropTypes = vm.props as any + const vm = getCurrentInstance()! + const props: ExtractPropTypes = vm.proxy?.$props as any const { slots } = vm const arrowRef = ref(null)