diff --git a/packages/components/popper/index.ts b/packages/components/popper/index.ts index 5b5a6ea79f..a0904bde71 100644 --- a/packages/components/popper/index.ts +++ b/packages/components/popper/index.ts @@ -16,6 +16,3 @@ export * from './src/content' export * from './src/arrow' export type { Placement, Options } from '@popperjs/core' -export type ElPopperArrowInstance = InstanceType -export type ElPopperArrowTrigger = InstanceType -export type ElPopperArrowContent = InstanceType diff --git a/packages/components/popper/src/arrow.ts b/packages/components/popper/src/arrow.ts index c289d1ab3e..85605e1e53 100644 --- a/packages/components/popper/src/arrow.ts +++ b/packages/components/popper/src/arrow.ts @@ -1,12 +1,23 @@ import { buildProps } from '@element-plus/utils' import type { ExtractPropTypes } from 'vue' +import type Arrow from './arrow.vue' -export const usePopperArrowProps = buildProps({ +export const popperArrowProps = buildProps({ arrowOffset: { type: Number, default: 5, }, } as const) +export type PopperArrowProps = ExtractPropTypes -export type UsePopperArrowProps = ExtractPropTypes +export type PopperArrowInstance = InstanceType + +/** @deprecated use `popperArrowProps` instead, and it will be deprecated in the next major version */ +export const usePopperArrowProps = popperArrowProps + +/** @deprecated use `PopperArrowProps` instead, and it will be deprecated in the next major version */ +export type UsePopperArrowProps = PopperArrowProps + +/** @deprecated use `PopperArrowInstance` instead, and it will be deprecated in the next major version */ +export type ElPopperArrowInstance = PopperArrowInstance diff --git a/packages/components/popper/src/arrow.vue b/packages/components/popper/src/arrow.vue index 4aea40948a..7914b80e79 100644 --- a/packages/components/popper/src/arrow.vue +++ b/packages/components/popper/src/arrow.vue @@ -6,14 +6,14 @@ import { inject, onBeforeUnmount, watch } from 'vue' import { useNamespace } from '@element-plus/hooks' import { POPPER_CONTENT_INJECTION_KEY } from '@element-plus/tokens' -import { usePopperArrowProps } from './arrow' +import { popperArrowProps } from './arrow' defineOptions({ name: 'ElPopperArrow', inheritAttrs: false, }) -const props = defineProps(usePopperArrowProps) +const props = defineProps(popperArrowProps) const ns = useNamespace('popper') const { arrowOffset, arrowRef } = inject( diff --git a/packages/components/popper/src/content.ts b/packages/components/popper/src/content.ts index 098e137ca2..54b43b42d1 100644 --- a/packages/components/popper/src/content.ts +++ b/packages/components/popper/src/content.ts @@ -3,12 +3,21 @@ import { buildProps, definePropType } from '@element-plus/utils' import type { ExtractPropTypes, StyleValue } from 'vue' import type { Options, Placement } from '@popperjs/core' +import type { Measurable } from '@element-plus/tokens' +import type Content from './content.vue' type ClassObjectType = Record type ClassType = string | ClassObjectType | ClassType[] const POSITIONING_STRATEGIES = ['fixed', 'absolute'] as const -export const usePopperCoreConfigProps = buildProps({ + +export interface CreatePopperInstanceParams { + referenceEl: Measurable + popperContentEl: HTMLElement + arrowEl: HTMLElement | undefined +} + +export const popperCoreConfigProps = buildProps({ boundariesPadding: { type: Number, default: 0, @@ -40,12 +49,19 @@ export const usePopperCoreConfigProps = buildProps({ default: 'absolute', }, } as const) +export type PopperCoreConfigProps = ExtractPropTypes< + typeof popperCoreConfigProps +> -export const usePopperContentProps = buildProps({ - ...usePopperCoreConfigProps, +export const popperContentProps = buildProps({ + ...popperCoreConfigProps, id: String, - style: { type: definePropType([String, Array, Object]) }, - className: { type: definePropType([String, Array, Object]) }, + style: { + type: definePropType([String, Array, Object]), + }, + className: { + type: definePropType([String, Array, Object]), + }, effect: { type: String, default: 'dark', @@ -87,19 +103,33 @@ export const usePopperContentProps = buildProps({ virtualTriggering: Boolean, zIndex: Number, } as const) +export type PopperContentProps = ExtractPropTypes -export const usePopperContentEmits = [ - 'mouseenter', - 'mouseleave', - 'focus', - 'blur', - 'close', -] +export const popperContentEmits = { + mouseenter: (evt: MouseEvent) => evt instanceof MouseEvent, + mouseleave: (evt: MouseEvent) => evt instanceof MouseEvent, + focus: () => true, + blur: () => true, + close: () => true, +} +export type PopperContentEmits = typeof popperContentEmits -export type UsePopperContentProps = ExtractPropTypes< - typeof usePopperContentProps -> +export type PopperContentInstance = InstanceType -export type UsePopperCoreConfigProps = ExtractPropTypes< - typeof usePopperCoreConfigProps -> +/** @deprecated use `popperCoreConfigProps` instead, and it will be deprecated in the next major version */ +export const usePopperCoreConfigProps = popperCoreConfigProps + +/** @deprecated use `popperContentProps` instead, and it will be deprecated in the next major version */ +export const usePopperContentProps = popperContentProps + +/** @deprecated use `popperContentEmits` instead, and it will be deprecated in the next major version */ +export const usePopperContentEmits = popperContentEmits + +/** @deprecated use `PopperCoreConfigProps` instead, and it will be deprecated in the next major version */ +export type UsePopperCoreConfigProps = PopperCoreConfigProps + +/** @deprecated use `PopperContentProps` instead, and it will be deprecated in the next major version */ +export type UsePopperContentProps = PopperContentProps + +/** @deprecated use `PopperContentInstance` instead, and it will be deprecated in the next major version */ +export type ElPopperArrowContent = PopperContentInstance diff --git a/packages/components/popper/src/content.vue b/packages/components/popper/src/content.vue index 24a1a03fba..cc5b9b2aaa 100644 --- a/packages/components/popper/src/content.vue +++ b/packages/components/popper/src/content.vue @@ -24,7 +24,6 @@