@hi-ui/input 4.0.0-alpha.6 → 4.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +79 -7
- package/lib/cjs/Input.js +97 -83
- package/lib/cjs/Input.js.map +1 -1
- package/lib/cjs/MockInput.js +154 -0
- package/lib/cjs/MockInput.js.map +1 -0
- package/lib/cjs/index.js +7 -1
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/styles/index.scss.js +2 -2
- package/lib/cjs/use-input.js +129 -0
- package/lib/cjs/use-input.js.map +1 -0
- package/lib/cjs/utils/index.js +192 -0
- package/lib/cjs/utils/index.js.map +1 -0
- package/lib/esm/Input.js +97 -82
- package/lib/esm/Input.js.map +1 -1
- package/lib/esm/MockInput.js +132 -0
- package/lib/esm/MockInput.js.map +1 -0
- package/lib/esm/index.js +3 -1
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/styles/index.scss.js +2 -2
- package/lib/esm/use-input.js +119 -0
- package/lib/esm/use-input.js.map +1 -0
- package/lib/esm/utils/index.js +176 -0
- package/lib/esm/utils/index.js.map +1 -0
- package/lib/types/Input.d.ts +23 -42
- package/lib/types/MockInput.d.ts +134 -0
- package/lib/types/index.d.ts +2 -0
- package/lib/types/use-input.d.ts +78 -0
- package/lib/types/utils/index.d.ts +9 -1
- package/package.json +14 -11
@@ -0,0 +1,119 @@
|
|
1
|
+
/** @LICENSE
|
2
|
+
* @hi-ui/input
|
3
|
+
* https://github.com/XiaoMi/hiui/tree/master/packages/ui/input#readme
|
4
|
+
*
|
5
|
+
* Copyright (c) HIUI <mi-hiui@xiaomi.com>.
|
6
|
+
*
|
7
|
+
* This source code is licensed under the MIT license found in the
|
8
|
+
* LICENSE file in the root directory of this source tree.
|
9
|
+
*/
|
10
|
+
import { useCallback, useState, useMemo } from 'react';
|
11
|
+
import { useUncontrolledState } from '@hi-ui/use-uncontrolled-state';
|
12
|
+
import { useLatestCallback } from '@hi-ui/use-latest';
|
13
|
+
import { setAttrStatus } from '@hi-ui/dom-utils';
|
14
|
+
import { pure, format, formatAmount } from './utils/index.js';
|
15
|
+
|
16
|
+
var useInput = function useInput(_ref) {
|
17
|
+
var name = _ref.name,
|
18
|
+
_ref$autoFocus = _ref.autoFocus,
|
19
|
+
autoFocus = _ref$autoFocus === void 0 ? false : _ref$autoFocus,
|
20
|
+
_ref$disabled = _ref.disabled,
|
21
|
+
disabled = _ref$disabled === void 0 ? false : _ref$disabled,
|
22
|
+
_ref$readOnly = _ref.readOnly,
|
23
|
+
readOnly = _ref$readOnly === void 0 ? false : _ref$readOnly,
|
24
|
+
maxLength = _ref.maxLength,
|
25
|
+
placeholder = _ref.placeholder,
|
26
|
+
_ref$defaultValue = _ref.defaultValue,
|
27
|
+
defaultValue = _ref$defaultValue === void 0 ? '' : _ref$defaultValue,
|
28
|
+
valueProp = _ref.value,
|
29
|
+
onChange = _ref.onChange,
|
30
|
+
onFocus = _ref.onFocus,
|
31
|
+
onBlur = _ref.onBlur,
|
32
|
+
_ref$trimValueOnBlur = _ref.trimValueOnBlur,
|
33
|
+
trimValueOnBlur = _ref$trimValueOnBlur === void 0 ? false : _ref$trimValueOnBlur,
|
34
|
+
_ref$type = _ref.type,
|
35
|
+
type = _ref$type === void 0 ? 'text' : _ref$type,
|
36
|
+
clearElementRef = _ref.clearElementRef; // Object.is 避免 trimValueOnBlur 和 点击 clearIcon 触发 2 次相同的 onCHange
|
37
|
+
|
38
|
+
var _useUncontrolledState = useUncontrolledState(defaultValue, valueProp, onChange, Object.is),
|
39
|
+
value = _useUncontrolledState[0],
|
40
|
+
tryChangeValue = _useUncontrolledState[1];
|
41
|
+
|
42
|
+
var handleChange = useCallback(function (evt, trim) {
|
43
|
+
if (trim === void 0) {
|
44
|
+
trim = false;
|
45
|
+
}
|
46
|
+
|
47
|
+
evt.persist();
|
48
|
+
var nextValue = evt.target.value;
|
49
|
+
var valueTrue = pure(nextValue, type); // 防溢出,保证 onChange 拿到的是值是最新的 formatted value
|
50
|
+
|
51
|
+
var value = format(nextValue, type);
|
52
|
+
|
53
|
+
if (trim) {
|
54
|
+
valueTrue = valueTrue.trim();
|
55
|
+
value = value.trim();
|
56
|
+
}
|
57
|
+
|
58
|
+
var event = Object.create(evt);
|
59
|
+
event.target = Object.assign(Object.assign({}, evt.target), {
|
60
|
+
value: value
|
61
|
+
});
|
62
|
+
tryChangeValue(valueTrue, event);
|
63
|
+
}, [tryChangeValue, type]);
|
64
|
+
|
65
|
+
var _useState = useState(autoFocus),
|
66
|
+
focused = _useState[0],
|
67
|
+
setFocused = _useState[1];
|
68
|
+
|
69
|
+
var handleFocus = useLatestCallback(function (evt) {
|
70
|
+
setFocused(true);
|
71
|
+
onFocus === null || onFocus === void 0 ? void 0 : onFocus(evt);
|
72
|
+
});
|
73
|
+
var handleBlur = useLatestCallback(function (event) {
|
74
|
+
var relatedTarget = event.relatedTarget; // 拦截 clearIcon 点击清空,阻止其触发 input 失焦
|
75
|
+
|
76
|
+
if (clearElementRef && clearElementRef.current && clearElementRef.current === relatedTarget) {
|
77
|
+
return;
|
78
|
+
}
|
79
|
+
|
80
|
+
setFocused(false); // amount 自动添加小数
|
81
|
+
|
82
|
+
if (type === 'amount') {
|
83
|
+
event.target.value = formatAmount(value, true);
|
84
|
+
handleChange(event, trimValueOnBlur);
|
85
|
+
} else if (trimValueOnBlur) {
|
86
|
+
handleChange(event, true);
|
87
|
+
}
|
88
|
+
|
89
|
+
onBlur === null || onBlur === void 0 ? void 0 : onBlur(event);
|
90
|
+
});
|
91
|
+
var nativeInputProps = useMemo(function () {
|
92
|
+
return {
|
93
|
+
name: name,
|
94
|
+
disabled: disabled,
|
95
|
+
readOnly: readOnly,
|
96
|
+
autoFocus: autoFocus,
|
97
|
+
placeholder: placeholder,
|
98
|
+
maxLength: maxLength,
|
99
|
+
'data-focused': setAttrStatus(focused)
|
100
|
+
};
|
101
|
+
}, [disabled, readOnly, autoFocus, placeholder, maxLength, name, focused]);
|
102
|
+
var getInputProps = useCallback(function () {
|
103
|
+
return Object.assign(Object.assign({}, nativeInputProps), {
|
104
|
+
value: format(value, type),
|
105
|
+
onChange: handleChange,
|
106
|
+
onFocus: handleFocus,
|
107
|
+
onBlur: handleBlur
|
108
|
+
});
|
109
|
+
}, [value, type, handleChange, handleFocus, handleBlur, nativeInputProps]);
|
110
|
+
return {
|
111
|
+
focused: focused,
|
112
|
+
value: value,
|
113
|
+
tryChangeValue: tryChangeValue,
|
114
|
+
getInputProps: getInputProps
|
115
|
+
};
|
116
|
+
};
|
117
|
+
|
118
|
+
export { useInput };
|
119
|
+
//# sourceMappingURL=use-input.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"use-input.js","sources":["../../src/use-input.ts"],"sourcesContent":[null],"names":["useInput","name","autoFocus","disabled","readOnly","maxLength","placeholder","defaultValue","valueProp","value","onChange","onFocus","onBlur","trimValueOnBlur","type","clearElementRef","useUncontrolledState","Object","is","tryChangeValue","handleChange","useCallback","evt","trim","persist","nextValue","target","valueTrue","pure","format","event","create","useState","focused","setFocused","handleFocus","useLatestCallback","handleBlur","relatedTarget","current","formatAmount","nativeInputProps","useMemo","setAttrStatus","getInputProps"],"mappings":"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"}
|
@@ -0,0 +1,176 @@
|
|
1
|
+
/** @LICENSE
|
2
|
+
* @hi-ui/input
|
3
|
+
* https://github.com/XiaoMi/hiui/tree/master/packages/ui/input#readme
|
4
|
+
*
|
5
|
+
* Copyright (c) HIUI <mi-hiui@xiaomi.com>.
|
6
|
+
*
|
7
|
+
* This source code is licensed under the MIT license found in the
|
8
|
+
* LICENSE file in the root directory of this source tree.
|
9
|
+
*/
|
10
|
+
|
11
|
+
/**
|
12
|
+
* 格式化身份证
|
13
|
+
*/
|
14
|
+
var formatId = function formatId(val) {
|
15
|
+
val = val.replace(/[^a-zA-Z0-9]/g, '');
|
16
|
+
var len = val.length;
|
17
|
+
|
18
|
+
if (val === '' || len < 7) {
|
19
|
+
return val;
|
20
|
+
}
|
21
|
+
|
22
|
+
if (len < 11) {
|
23
|
+
return val.slice(0, 6) + ' ' + val.slice(6, 10);
|
24
|
+
} else if (len < 15) {
|
25
|
+
return val.slice(0, 6) + ' ' + val.slice(6, 10) + ' ' + val.slice(10, 14);
|
26
|
+
} else {
|
27
|
+
return val.slice(0, 6) + ' ' + val.slice(6, 10) + ' ' + val.slice(10, 14) + ' ' + val.slice(14, 18);
|
28
|
+
}
|
29
|
+
};
|
30
|
+
|
31
|
+
var pureId = function pureId(val) {
|
32
|
+
var tmp = val.replace(/[^\d|.]/g, '');
|
33
|
+
return tmp.slice(0, 18);
|
34
|
+
};
|
35
|
+
/**
|
36
|
+
* 格式化手机号
|
37
|
+
*/
|
38
|
+
|
39
|
+
|
40
|
+
var formatTel = function formatTel(val) {
|
41
|
+
val = val.replace(/\D/g, '');
|
42
|
+
var len = val.length;
|
43
|
+
|
44
|
+
if (val === '' || len < 4) {
|
45
|
+
return val;
|
46
|
+
}
|
47
|
+
|
48
|
+
if (len < 8) {
|
49
|
+
return val.slice(0, 3) + ' ' + val.slice(3, 7);
|
50
|
+
} else {
|
51
|
+
return val.slice(0, 3) + ' ' + val.slice(3, 7) + ' ' + val.slice(7, 11);
|
52
|
+
}
|
53
|
+
};
|
54
|
+
|
55
|
+
var pureTel = function pureTel(val) {
|
56
|
+
var tmp = val.replace(/[^\d|.]/g, '');
|
57
|
+
return tmp.slice(0, 11);
|
58
|
+
};
|
59
|
+
/**
|
60
|
+
* 格式化银行卡号
|
61
|
+
*/
|
62
|
+
|
63
|
+
|
64
|
+
var formatCard = function formatCard(val) {
|
65
|
+
val = val.replace(/\D/g, '');
|
66
|
+
var len = val.length;
|
67
|
+
|
68
|
+
if (val === '' || val.length < 5) {
|
69
|
+
return val;
|
70
|
+
}
|
71
|
+
|
72
|
+
if (len < 9) {
|
73
|
+
return val.slice(0, 4) + ' ' + val.slice(4, 8);
|
74
|
+
} else if (len < 13) {
|
75
|
+
return val.slice(0, 4) + ' ' + val.slice(4, 8) + ' ' + val.slice(8, 12);
|
76
|
+
} else if (len < 17) {
|
77
|
+
return val.slice(0, 4) + ' ' + val.slice(4, 8) + ' ' + val.slice(8, 12) + ' ' + val.slice(12, 16);
|
78
|
+
} else {
|
79
|
+
return val.slice(0, 4) + ' ' + val.slice(4, 8) + ' ' + val.slice(8, 12) + ' ' + val.slice(12, 16) + ' ' + val.slice(16, 19);
|
80
|
+
}
|
81
|
+
};
|
82
|
+
|
83
|
+
var pureCard = function pureCard(val) {
|
84
|
+
var tmp = val.replace(/[^\d|.]/g, '');
|
85
|
+
return tmp.slice(0, 19);
|
86
|
+
};
|
87
|
+
/**
|
88
|
+
* 金额自动生成小数
|
89
|
+
* @param {string} val 需要处理的值
|
90
|
+
*/
|
91
|
+
|
92
|
+
|
93
|
+
var formatAmount = function formatAmount(val, fill) {
|
94
|
+
if (fill === void 0) {
|
95
|
+
fill = false;
|
96
|
+
}
|
97
|
+
|
98
|
+
val = val.replace(/[^\d|.|,]/g, '').replace(/(\.\d*?)(\.|,).*/, function (_, $1) {
|
99
|
+
return $1;
|
100
|
+
});
|
101
|
+
|
102
|
+
if (fill) {
|
103
|
+
if (!val) return val;
|
104
|
+
return val.indexOf('.') > -1 ? val : val + '.00';
|
105
|
+
}
|
106
|
+
|
107
|
+
return val;
|
108
|
+
};
|
109
|
+
|
110
|
+
var pureAmount = function pureAmount(val) {
|
111
|
+
var tmp = val.replace(/[^\d|.]/g, '');
|
112
|
+
return tmp;
|
113
|
+
};
|
114
|
+
|
115
|
+
var formatEmail = function formatEmail(val) {
|
116
|
+
return val.replace(/\W/g, '');
|
117
|
+
};
|
118
|
+
|
119
|
+
var pureEmail = function pureEmail(val) {
|
120
|
+
return val;
|
121
|
+
};
|
122
|
+
/**
|
123
|
+
* 输入规则
|
124
|
+
*/
|
125
|
+
|
126
|
+
|
127
|
+
var format = function format(val, type) {
|
128
|
+
switch (type) {
|
129
|
+
case 'id':
|
130
|
+
return formatId(val);
|
131
|
+
|
132
|
+
case 'tel':
|
133
|
+
return formatTel(val);
|
134
|
+
|
135
|
+
case 'card':
|
136
|
+
return formatCard(val);
|
137
|
+
|
138
|
+
case 'email':
|
139
|
+
return formatEmail(val);
|
140
|
+
|
141
|
+
case 'amount':
|
142
|
+
return formatAmount(val);
|
143
|
+
|
144
|
+
default:
|
145
|
+
return val;
|
146
|
+
}
|
147
|
+
};
|
148
|
+
/**
|
149
|
+
* 净化规则
|
150
|
+
*/
|
151
|
+
|
152
|
+
|
153
|
+
var pure = function pure(val, type) {
|
154
|
+
switch (type) {
|
155
|
+
case 'id':
|
156
|
+
return pureId(val);
|
157
|
+
|
158
|
+
case 'tel':
|
159
|
+
return pureTel(val);
|
160
|
+
|
161
|
+
case 'card':
|
162
|
+
return pureCard(val);
|
163
|
+
|
164
|
+
case 'email':
|
165
|
+
return pureEmail(val);
|
166
|
+
|
167
|
+
case 'amount':
|
168
|
+
return pureAmount(val);
|
169
|
+
|
170
|
+
default:
|
171
|
+
return val;
|
172
|
+
}
|
173
|
+
};
|
174
|
+
|
175
|
+
export { format, formatAmount, formatCard, formatEmail, formatId, formatTel, pure, pureAmount, pureCard, pureEmail, pureId, pureTel };
|
176
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/utils/index.ts"],"sourcesContent":[null],"names":["formatId","val","replace","len","length","slice","pureId","tmp","formatTel","pureTel","formatCard","pureCard","formatAmount","fill","_","$1","indexOf","pureAmount","formatEmail","pureEmail","format","type","pure"],"mappings":"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"}
|
package/lib/types/Input.d.ts
CHANGED
@@ -1,25 +1,17 @@
|
|
1
1
|
import React from 'react';
|
2
|
+
import { HiBaseAppearanceEnum, HiBaseHTMLFieldProps } from '@hi-ui/core';
|
2
3
|
/**
|
3
|
-
*
|
4
|
+
* 输入框
|
5
|
+
*
|
6
|
+
* @TODO:
|
7
|
+
* 1. size api 确认
|
8
|
+
* 2. 修改类名结构
|
9
|
+
* 3. 支持带数字展示
|
10
|
+
* 4. InputGroup 模式支持
|
11
|
+
* 5. 手动聚焦支持额外配置
|
4
12
|
*/
|
5
13
|
export declare const Input: React.ForwardRefExoticComponent<InputProps & React.RefAttributes<HTMLInputElement | null>>;
|
6
|
-
export interface InputProps {
|
7
|
-
/**
|
8
|
-
* 组件默认的选择器类
|
9
|
-
*/
|
10
|
-
prefixCls?: string;
|
11
|
-
/**
|
12
|
-
* 组件的语义化 Role 属性
|
13
|
-
*/
|
14
|
-
role?: string;
|
15
|
-
/**
|
16
|
-
* 组件的注入选择器类
|
17
|
-
*/
|
18
|
-
className?: string;
|
19
|
-
/**
|
20
|
-
* 组件的注入样式
|
21
|
-
*/
|
22
|
-
style?: React.CSSProperties;
|
14
|
+
export interface InputProps extends HiBaseHTMLFieldProps<'input'> {
|
23
15
|
/**
|
24
16
|
* 开启输入框只读
|
25
17
|
*/
|
@@ -32,10 +24,6 @@ export interface InputProps {
|
|
32
24
|
* 开启输入框自动聚焦
|
33
25
|
*/
|
34
26
|
autoFocus?: boolean;
|
35
|
-
/**
|
36
|
-
* 输入框字段名称
|
37
|
-
*/
|
38
|
-
name?: string;
|
39
27
|
/**
|
40
28
|
* 设置输入框的值
|
41
29
|
*/
|
@@ -47,17 +35,17 @@ export interface InputProps {
|
|
47
35
|
/**
|
48
36
|
* 设置输入框类型,支持原生 input 的 type 属性所有值
|
49
37
|
*/
|
50
|
-
type?: 'text' | '
|
38
|
+
type?: 'text' | 'id' | 'tel' | 'card' | 'amount' | 'email' | string;
|
51
39
|
/**
|
52
40
|
* 输入最大长度
|
53
41
|
*/
|
54
42
|
maxLength?: number;
|
55
43
|
/**
|
56
|
-
*
|
44
|
+
* 输入框前置外部内容
|
57
45
|
*/
|
58
46
|
prepend?: React.ReactNode;
|
59
47
|
/**
|
60
|
-
*
|
48
|
+
* 输入框后置外部内容
|
61
49
|
*/
|
62
50
|
append?: React.ReactNode;
|
63
51
|
/**
|
@@ -73,40 +61,33 @@ export interface InputProps {
|
|
73
61
|
*/
|
74
62
|
clearable?: boolean;
|
75
63
|
/**
|
76
|
-
*
|
64
|
+
* 开启失焦时触发对值的 trim,将触发 onChange 给用户
|
77
65
|
*/
|
78
|
-
|
66
|
+
trimValueOnBlur?: boolean;
|
79
67
|
/**
|
80
|
-
*
|
68
|
+
* 清除按钮展示的触发形态
|
81
69
|
*/
|
82
|
-
|
70
|
+
clearableTrigger?: 'always' | 'hover';
|
83
71
|
/**
|
84
72
|
* 输入框占位符
|
85
73
|
*/
|
86
74
|
placeholder?: string;
|
87
75
|
/**
|
88
76
|
* 设置展现形式
|
77
|
+
* 其中 `underline` 内部使用,不对外提供支持(风格去线型化:由线性过渡到面性)
|
89
78
|
*/
|
90
|
-
appearance?:
|
79
|
+
appearance?: HiBaseAppearanceEnum | 'underline';
|
91
80
|
/**
|
92
|
-
*
|
81
|
+
* 设置尺寸
|
93
82
|
*/
|
94
83
|
size?: 'sm' | 'md' | 'lg';
|
95
84
|
/**
|
96
85
|
* 值改变时的回调
|
97
86
|
*/
|
98
|
-
onChange?: (evt: React.ChangeEvent<HTMLInputElement
|
99
|
-
/**
|
100
|
-
* 获得焦点时的回调
|
101
|
-
*/
|
102
|
-
onFocus?: (evt: React.FocusEvent<HTMLInputElement>) => void;
|
103
|
-
/**
|
104
|
-
* 失去焦点时的回调
|
105
|
-
*/
|
106
|
-
onBlur?: (evt: React.FocusEvent<HTMLInputElement>) => void;
|
87
|
+
onChange?: (evt: React.ChangeEvent<HTMLInputElement>, value: string) => void;
|
107
88
|
}
|
108
89
|
/**
|
109
|
-
*
|
90
|
+
* 模拟伪装目标事件 target
|
110
91
|
*
|
111
92
|
* @param target
|
112
93
|
* @param evt
|
@@ -114,4 +95,4 @@ export interface InputProps {
|
|
114
95
|
* @param targetValue
|
115
96
|
* @returns
|
116
97
|
*/
|
117
|
-
export declare function onChangeMock(onChange: (event: React.ChangeEvent<HTMLInputElement
|
98
|
+
export declare function onChangeMock(onChange: (event: React.ChangeEvent<HTMLInputElement>, value: string) => void, evt: React.ChangeEvent<HTMLInputElement> | React.MouseEvent<HTMLElement>, target: HTMLInputElement | null, targetValue: string): void;
|
@@ -0,0 +1,134 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import type { HiBaseAppearanceEnum, HiBaseDataItem, HiBaseHTMLFieldProps } from '@hi-ui/core';
|
3
|
+
/**
|
4
|
+
* 支持自定义渲染输入框内容,暂时仅供内部 Picker 类组件使用,不对外提供
|
5
|
+
*/
|
6
|
+
export declare const MockInput: React.ForwardRefExoticComponent<Omit<Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "key" | keyof React.HTMLAttributes<HTMLDivElement>>, "disabled" | "readOnly" | "placeholder" | "defaultValue" | "value" | "onChange" | "type" | "focused" | "onSelect" | "title" | "size" | "prefix" | "data" | "onClick" | "appearance" | "suffix" | "clearableTrigger" | "clearable" | "displayRender"> & {
|
7
|
+
prefixCls?: string | undefined;
|
8
|
+
role?: string | undefined;
|
9
|
+
} & {
|
10
|
+
/**
|
11
|
+
* 设置当前多选值
|
12
|
+
*/
|
13
|
+
value?: React.ReactText | undefined;
|
14
|
+
/**
|
15
|
+
* 设置当前多选值默认值
|
16
|
+
*/
|
17
|
+
defaultValue?: React.ReactText | undefined;
|
18
|
+
/**
|
19
|
+
* 多选值改变时的回调
|
20
|
+
*/
|
21
|
+
onChange?: ((value: React.ReactText, item: any) => void) | undefined;
|
22
|
+
/**
|
23
|
+
* 是否可清空
|
24
|
+
*/
|
25
|
+
clearable?: boolean | undefined;
|
26
|
+
/**
|
27
|
+
* 清除按钮展示的触发形态
|
28
|
+
*/
|
29
|
+
clearableTrigger?: "always" | "hover" | undefined;
|
30
|
+
/**
|
31
|
+
* 是否禁止使用
|
32
|
+
*/
|
33
|
+
disabled?: boolean | undefined;
|
34
|
+
/**
|
35
|
+
* 自定义选择后触发器所展示的内容
|
36
|
+
*/
|
37
|
+
displayRender?: ((item: HiBaseDataItem) => React.ReactNode) | undefined;
|
38
|
+
/**
|
39
|
+
* 输入框占位符
|
40
|
+
*/
|
41
|
+
placeholder?: string | undefined;
|
42
|
+
/**
|
43
|
+
* 输入框后置内容
|
44
|
+
*/
|
45
|
+
suffix?: React.ReactNode;
|
46
|
+
/**
|
47
|
+
* 点击 Input 时触发回调
|
48
|
+
*/
|
49
|
+
onClick?: ((event: React.MouseEvent<HTMLDivElement>) => void) | undefined;
|
50
|
+
/**
|
51
|
+
* 展示数据源
|
52
|
+
*/
|
53
|
+
data?: HiBaseDataItem[] | undefined;
|
54
|
+
/**
|
55
|
+
* 是否聚焦
|
56
|
+
*/
|
57
|
+
focused?: boolean | undefined;
|
58
|
+
/**
|
59
|
+
* 开启输入框只读
|
60
|
+
*/
|
61
|
+
readOnly?: boolean | undefined;
|
62
|
+
/**
|
63
|
+
* 设置展现形式
|
64
|
+
*/
|
65
|
+
appearance?: HiBaseAppearanceEnum | undefined;
|
66
|
+
/**
|
67
|
+
* 设置输入框尺寸
|
68
|
+
*/
|
69
|
+
size?: "sm" | "md" | "lg" | undefined;
|
70
|
+
} & {
|
71
|
+
invalid?: boolean | undefined;
|
72
|
+
} & React.RefAttributes<HTMLDivElement | null>>;
|
73
|
+
export declare type MockInputProps = HiBaseHTMLFieldProps<'div', {
|
74
|
+
/**
|
75
|
+
* 设置当前多选值
|
76
|
+
*/
|
77
|
+
value?: React.ReactText;
|
78
|
+
/**
|
79
|
+
* 设置当前多选值默认值
|
80
|
+
*/
|
81
|
+
defaultValue?: React.ReactText;
|
82
|
+
/**
|
83
|
+
* 多选值改变时的回调
|
84
|
+
*/
|
85
|
+
onChange?: (value: React.ReactText, item: any) => void;
|
86
|
+
/**
|
87
|
+
* 是否可清空
|
88
|
+
*/
|
89
|
+
clearable?: boolean;
|
90
|
+
/**
|
91
|
+
* 清除按钮展示的触发形态
|
92
|
+
*/
|
93
|
+
clearableTrigger?: 'always' | 'hover';
|
94
|
+
/**
|
95
|
+
* 是否禁止使用
|
96
|
+
*/
|
97
|
+
disabled?: boolean;
|
98
|
+
/**
|
99
|
+
* 自定义选择后触发器所展示的内容
|
100
|
+
*/
|
101
|
+
displayRender?: (item: HiBaseDataItem) => React.ReactNode;
|
102
|
+
/**
|
103
|
+
* 输入框占位符
|
104
|
+
*/
|
105
|
+
placeholder?: string;
|
106
|
+
/**
|
107
|
+
* 输入框后置内容
|
108
|
+
*/
|
109
|
+
suffix?: React.ReactNode;
|
110
|
+
/**
|
111
|
+
* 点击 Input 时触发回调
|
112
|
+
*/
|
113
|
+
onClick?: (event: React.MouseEvent<HTMLDivElement>) => void;
|
114
|
+
/**
|
115
|
+
* 展示数据源
|
116
|
+
*/
|
117
|
+
data?: HiBaseDataItem[];
|
118
|
+
/**
|
119
|
+
* 是否聚焦
|
120
|
+
*/
|
121
|
+
focused?: boolean;
|
122
|
+
/**
|
123
|
+
* 开启输入框只读
|
124
|
+
*/
|
125
|
+
readOnly?: boolean;
|
126
|
+
/**
|
127
|
+
* 设置展现形式
|
128
|
+
*/
|
129
|
+
appearance?: HiBaseAppearanceEnum;
|
130
|
+
/**
|
131
|
+
* 设置输入框尺寸
|
132
|
+
*/
|
133
|
+
size?: 'sm' | 'md' | 'lg';
|
134
|
+
}>;
|
package/lib/types/index.d.ts
CHANGED
@@ -0,0 +1,78 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
export declare const useInput: ({ name, autoFocus, disabled, readOnly, maxLength, placeholder, defaultValue, value: valueProp, onChange, onFocus, onBlur, trimValueOnBlur, type, clearElementRef, }: UseInputProps) => {
|
3
|
+
focused: boolean;
|
4
|
+
value: string;
|
5
|
+
tryChangeValue: (stateOrFunction: React.SetStateAction<string>, ...args: any[]) => void;
|
6
|
+
getInputProps: () => {
|
7
|
+
value: string;
|
8
|
+
onChange: (evt: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>, trim?: any) => void;
|
9
|
+
onFocus: (evt: React.FocusEvent<HTMLInputElement | HTMLTextAreaElement>) => void;
|
10
|
+
onBlur: (event: React.FocusEvent<HTMLInputElement | HTMLTextAreaElement>) => void;
|
11
|
+
name: string | undefined;
|
12
|
+
disabled: boolean;
|
13
|
+
readOnly: boolean;
|
14
|
+
autoFocus: boolean;
|
15
|
+
placeholder: string | undefined;
|
16
|
+
maxLength: number | undefined;
|
17
|
+
'data-focused': "" | undefined;
|
18
|
+
};
|
19
|
+
};
|
20
|
+
export interface UseInputProps {
|
21
|
+
/**
|
22
|
+
* 开启输入框只读
|
23
|
+
*/
|
24
|
+
readOnly?: boolean;
|
25
|
+
/**
|
26
|
+
* 是否禁用
|
27
|
+
*/
|
28
|
+
disabled?: boolean;
|
29
|
+
/**
|
30
|
+
* 开启输入框自动聚焦
|
31
|
+
*/
|
32
|
+
autoFocus?: boolean;
|
33
|
+
/**
|
34
|
+
* 输入框字段名称
|
35
|
+
*/
|
36
|
+
name?: string;
|
37
|
+
/**
|
38
|
+
* 设置输入框的值
|
39
|
+
*/
|
40
|
+
value?: string;
|
41
|
+
/**
|
42
|
+
* 设置输入框的默认值
|
43
|
+
*/
|
44
|
+
defaultValue?: string;
|
45
|
+
/**
|
46
|
+
* 输入最大长度
|
47
|
+
*/
|
48
|
+
maxLength?: number;
|
49
|
+
/**
|
50
|
+
* 再失焦时触发对值的 trim onChange 给用户
|
51
|
+
*/
|
52
|
+
trimValueOnBlur?: boolean;
|
53
|
+
/**
|
54
|
+
* 输入框占位符
|
55
|
+
*/
|
56
|
+
placeholder?: string;
|
57
|
+
/**
|
58
|
+
* 值改变时的回调
|
59
|
+
*/
|
60
|
+
onChange?: (value: string, evt: React.ChangeEvent<any>) => void;
|
61
|
+
/**
|
62
|
+
* 输入框聚焦时的回调
|
63
|
+
*/
|
64
|
+
onFocus?: (evt: React.FocusEvent<any>) => void;
|
65
|
+
/**
|
66
|
+
* 输入框失焦时的回调
|
67
|
+
*/
|
68
|
+
onBlur?: (evt: React.FocusEvent<any>) => void;
|
69
|
+
/**
|
70
|
+
* 设置输入框类型,支持原生 input 的 type 属性所有值
|
71
|
+
*/
|
72
|
+
type?: 'text' | 'id' | 'tel' | 'card' | 'amount' | 'email' | string;
|
73
|
+
/** 。暂不对外暴露
|
74
|
+
* @private
|
75
|
+
*/
|
76
|
+
clearElementRef?: any;
|
77
|
+
}
|
78
|
+
export declare type useInputReturn = ReturnType<typeof useInput>;
|
@@ -17,7 +17,15 @@ export declare const pureCard: (val: string) => string;
|
|
17
17
|
* 金额自动生成小数
|
18
18
|
* @param {string} val 需要处理的值
|
19
19
|
*/
|
20
|
-
export declare const formatAmount: (val: string) => string;
|
20
|
+
export declare const formatAmount: (val: string, fill?: boolean) => string;
|
21
21
|
export declare const pureAmount: (val: string) => string;
|
22
22
|
export declare const formatEmail: (val: string) => string;
|
23
23
|
export declare const pureEmail: (val: string) => string;
|
24
|
+
/**
|
25
|
+
* 输入规则
|
26
|
+
*/
|
27
|
+
export declare const format: (val: string, type: string) => string;
|
28
|
+
/**
|
29
|
+
* 净化规则
|
30
|
+
*/
|
31
|
+
export declare const pure: (val: string, type: string) => string;
|