Files
2026-01-05 12:47:14 +08:00

134 lines
4.3 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import type { TextareaOnBlurEvent, TextareaOnConfirmEvent, TextareaOnFocusEvent, TextareaOnInputEvent } from '@uni-helper/uni-app-types'
import type { ExtractPropTypes, PropType, StyleValue } from 'vue'
import { BLUR_EVENT, CHANGE_EVENT, CONFIRM_EVENT, FOCUS_EVENT, INPUT_EVENT, UPDATE_MODEL_EVENT } from '../_constants'
import type { ClassType } from '../_utils'
import { commonProps, isString, makeNumberProp, makeStringProp, nullableBooleanProp, truthProp } from '../_utils'
import type { InputAlignType } from '../input'
import type { TextareaAdjustKeyboardTo, TextareaAutosizeObject, TextareaConfirmType } from './type'
export const textareaProps = {
...commonProps,
/**
* @description 输入值,支持双向绑定
*/
modelValue: String,
/**
* @description 文本位置,可选值left,center,right
*/
textAlign: String as PropType<InputAlignType>,
/**
* @description textarea是否展示输入字符。须配合max-length使用
*/
limitShow: Boolean,
/**
* @description 限制最长输入字符
*/
maxLength: [String, Number],
/**
* @description textarea的高度优先级高于autosize属性 仅支持 H5
*/
rows: [String, Number],
/**
* @description 文本域自定义类名
*/
textareaClass: {
type: [String, Object, Array] as PropType<ClassType>,
default: '',
},
/**
* @description 文本域自定义样式
*/
textareaStyle: {
type: [String, Object, Array] as PropType<StyleValue>,
default: '',
},
/**
* @description 设置占位提示文字
*/
placeholder: String,
/**
* @description 指定 placeholder 的样式
*/
placeholderStyle: makeStringProp(''),
/**
* @description 指定 placeholder 的样式类
*/
placeholderClass: makeStringProp('textarea-placeholder'),
/**
* @description 只读属性
*/
readonly: Boolean,
/**
* @description 禁用属性
*/
disabled: nullableBooleanProp,
/**
* @description 是否自适应内容高度,也可传入对象
*/
autosize: {
type: [Boolean, Object] as PropType<boolean | TextareaAutosizeObject>,
default: false,
},
/**
* @description 自动获取焦点
*/
autofocus: Boolean,
/**
* @description 指定光标与键盘的距离。取textarea距离底部的距离和cursor-spacing指定的距离的最小值作为光标与键盘的距离
*/
cursorSpacing: makeNumberProp(0),
/**
* @description 指定focus时的光标位置
*/
cursor: makeNumberProp(-1),
/**
* @description 是否显示键盘上方带有”完成“按钮那一栏
*/
showConfirmBar: truthProp,
/**
* @description 光标起始位置自动聚集时有效需与selection-end搭配使用
*/
selectionStart: makeNumberProp(-1),
/**
* @description 光标结束位置自动聚集时有效需与selection-start搭配使用
*/
selectionEnd: makeNumberProp(-1),
/**
* @description 键盘弹起时,是否自动上推页面
*/
adjustPosition: truthProp,
/**
* @description focus时点击页面的时候不收起键盘
*/
holdKeyboard: Boolean,
/**
* @description 是否去掉 iOS 下的默认内边距
*/
disableDefaultPadding: Boolean,
/**
* @description 设置键盘右下角按钮的文字,可选值 `send` `search` `next` `go` `done` `return`
*/
confirmType: makeStringProp<TextareaConfirmType>('return'),
/**
* @description 点击键盘右下角按钮时是否保持键盘不收起
*/
confirmHold: Boolean,
/**
* @description 键盘对齐位置,可选值 `cursor` `bottom`
*/
adjustKeyboardTo: makeStringProp<TextareaAdjustKeyboardTo>('cursor'),
}
export type TextareaProps = ExtractPropTypes<typeof textareaProps>
export const textareaEmits = {
[BLUR_EVENT]: (evt: TextareaOnBlurEvent) => evt instanceof Object,
[FOCUS_EVENT]: (evt: TextareaOnFocusEvent) => evt instanceof Object,
[CHANGE_EVENT]: (val1?: string, val2?: string | Event) => isString(val1) && (isString(val2) || (val2 instanceof Object)),
[UPDATE_MODEL_EVENT]: (val1?: string, val2?: string | Event) => isString(val1) && (isString(val2) || (val2 instanceof Object)),
[CONFIRM_EVENT]: (evt: TextareaOnConfirmEvent) => evt instanceof Object,
[INPUT_EVENT]: (val: string, evt: TextareaOnInputEvent) => isString(val) && evt instanceof Object,
}
export type TextareaEmits = typeof textareaEmits