import { computed, toRef } from 'vue' import { useComponentColor, useNamespace } from '../../../../hooks' import type { CSSProperties } from 'vue' import type { PickerProps } from '../picker' export type PickerOperationBtnType = 'cancel' | 'confirm' export type PickerOperationBtnClass = ( type: PickerOperationBtnType, disabled: boolean ) => string export type PickerOperationBtnStyle = ( type: PickerOperationBtnType ) => CSSProperties export const usePickerCustomStyle = (props: PickerProps) => { const ns = useNamespace('picker') // 解析颜色 const [cancelColorClass, cancelColorStyle] = useComponentColor( toRef(props, 'cancelColor'), 'text' ) const [confirmColorClass, confirmColorStyle] = useComponentColor( toRef(props, 'confirmColor'), 'text' ) // 遮罩的透明度 const overlayOpacity = computed(() => { return props.mask ? 0.5 : 0 }) // 取消/确认按钮对应的类 const operationBtnClass = computed(() => { return (type: PickerOperationBtnType, disabled: boolean) => { const cls: string[] = [ ns.e('operation-btn'), ns.em('operation-btn', type), ] if (!props.allowConfirmBeforeScrollEnd && disabled) { cls.push(ns.em('operation-btn', 'disabled')) } if (type === 'cancel') { if (cancelColorClass.value) cls.push(cancelColorClass.value) } else if (type === 'confirm') { if (confirmColorClass.value) cls.push(confirmColorClass.value) } return cls.join(' ') } }) // 取消/确认按钮对应的样式 const operationBtnStyle = computed(() => { return (type: PickerOperationBtnType) => { const style: CSSProperties = {} if (type === 'cancel') { if (!cancelColorClass.value) style.color = cancelColorStyle.value || 'var(--tn-color-danger)' } else if (type === 'confirm') { if (!confirmColorClass.value) style.color = confirmColorStyle.value || 'var(--tn-color-primary)' } return style } }) return { ns, overlayOpacity, operationBtnClass, operationBtnStyle, } }