ant-design-vue/components/dropdown/props.ts

89 lines
2.3 KiB
TypeScript

import { tuple } from '../_util/type';
import type { PropType } from 'vue';
import PropTypes from '../_util/vue-types';
import buttonTypes from '../button/buttonTypes';
import type { MouseEventHandler } from '../_util/EventInterface';
type Align = {
points?: [string, string];
offset?: [number, number];
targetOffset?: [number, number];
overflow?: {
adjustX?: boolean;
adjustY?: boolean;
};
useCssRight?: boolean;
useCssBottom?: boolean;
useCssTransform?: boolean;
};
export type DropdownArrowOptions = {
pointAtCenter?: boolean;
};
const dropdownProps = () => ({
arrow: {
type: [Boolean, Object] as PropType<boolean | DropdownArrowOptions>,
default: undefined,
},
trigger: {
type: [Array, String] as PropType<
('click' | 'hover' | 'contextmenu')[] | 'click' | 'hover' | 'contextmenu'
>,
},
overlay: PropTypes.any,
visible: { type: Boolean, default: undefined },
disabled: { type: Boolean, default: undefined },
align: { type: Object as PropType<Align> },
getPopupContainer: Function,
prefixCls: String,
transitionName: String,
placement: PropTypes.oneOf(
tuple(
'topLeft',
'topCenter',
'top',
'topRight',
'bottomLeft',
'bottomCenter',
'bottom',
'bottomRight',
),
),
overlayClassName: String,
overlayStyle: PropTypes.style,
forceRender: { type: Boolean, default: undefined },
mouseEnterDelay: Number,
mouseLeaveDelay: Number,
openClassName: String,
minOverlayWidthMatchTrigger: { type: Boolean, default: undefined },
destroyPopupOnHide: { type: Boolean, default: undefined },
onVisibleChange: {
type: Function as PropType<(val: boolean) => void>,
},
'onUpdate:visible': {
type: Function as PropType<(val: boolean) => void>,
},
});
const buttonTypesProps = buttonTypes();
const dropdownButtonProps = () => ({
...dropdownProps(),
type: buttonTypesProps.type,
size: PropTypes.oneOf(tuple('small', 'large')),
htmlType: buttonTypesProps.htmlType,
href: String,
disabled: { type: Boolean, default: undefined },
prefixCls: String,
icon: PropTypes.any,
title: String,
loading: buttonTypesProps.loading,
onClick: {
type: Function as PropType<MouseEventHandler>,
},
});
export { dropdownProps, dropdownButtonProps };
export default dropdownProps;