EASYAIuniappNewUI/node_modules/@tuniao/tnui-vue3-uniapp/components/popup/src/popup.ts
2025-02-08 18:50:38 +08:00

123 lines
2.7 KiB
TypeScript

import { UPDATE_MODEL_EVENT, ZIndex } from '../../../constants'
import { buildProps, isBoolean } from '../../../utils'
import { useComponentSafeAreaInsetBottomProp } from '../../base/composables/use-component-common-props'
import { overlayProps } from '../../overlay'
import type { ExtractPropTypes } from 'vue'
export const popupOpenDirection = [
'top',
'bottom',
'left',
'right',
'center',
] as const
export const popupCloseBtnPosition = [
'left-top',
'right-top',
'left-bottom',
'right-bottom',
] as const
export const popupProps = buildProps({
/**
* @description 控制弹框是否显示
*/
modelValue: Boolean,
/**
* @description 弹框打开的方向
*/
openDirection: {
type: String,
values: popupOpenDirection,
default: 'center',
},
/**
* @description 弹窗的宽度,在 openDirection 为 left 或 right 或 center 时生效
*/
width: {
type: [String, Number],
},
/**
* @description 弹窗的高度,在 openDirection 为 top 或 bottom 或 center 时生效
*/
height: {
type: [String, Number],
},
/**
* @description 弹框的内容的背景颜色
*/
bgColor: {
type: String,
default: '#fff',
},
/**
* @description 弹框的内容的圆角
*/
radius: {
type: [String, Number],
default: 15,
},
/**
* @description 是否显示overlay遮罩层
*/
overlay: {
type: Boolean,
default: true,
},
/**
* @description overlay遮罩层的透明度
*/
overlayOpacity: overlayProps['opacity'],
/**
* @description 点击overlay关闭弹框
*/
overlayCloseable: {
type: Boolean,
default: true,
},
/**
* @description 是否显示关闭按钮
*/
closeBtn: Boolean,
/**
* @description 关闭按钮的位置
*/
closeBtnPosition: {
type: String,
values: popupCloseBtnPosition,
default: 'right-top',
},
/**
* @description 底部是否开启安全区域
*/
safeAreaInsetBottom: useComponentSafeAreaInsetBottomProp,
/**
* @description zIndex
*/
zIndex: {
type: Number,
default: ZIndex.popup,
},
/**
* @description 距离顶部的距离,在 openDirection 为 top 或 left 或 right 时生效,默认单位为`px`
*/
top: {
type: [String, Number],
},
})
export const popupEmits = {
[UPDATE_MODEL_EVENT]: (value: boolean) => isBoolean(value),
open: () => true,
close: () => true,
['overlay-click']: () => true,
}
export type PopupProps = ExtractPropTypes<typeof popupProps>
export type PopupEmits = typeof popupEmits
export type PopupOpenDirection = (typeof popupOpenDirection)[number]
export type PopupCloseBtnPosition = (typeof popupCloseBtnPosition)[number]