@hi-ui/input 4.0.0-alpha.24 → 4.0.0-alpha.28

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.
@@ -11,6 +11,7 @@ import { useCallback, useState, useMemo } from 'react';
11
11
  import { useUncontrolledState } from '@hi-ui/use-uncontrolled-state';
12
12
  import { useLatestCallback } from '@hi-ui/use-latest';
13
13
  import { setAttrStatus } from '@hi-ui/dom-utils';
14
+ import { pure, format, formatAmount } from './utils/index.js';
14
15
 
15
16
  var useInput = function useInput(_ref) {
16
17
  var name = _ref.name,
@@ -29,16 +30,37 @@ var useInput = function useInput(_ref) {
29
30
  onFocus = _ref.onFocus,
30
31
  onBlur = _ref.onBlur,
31
32
  _ref$trimValueOnBlur = _ref.trimValueOnBlur,
32
- trimValueOnBlur = _ref$trimValueOnBlur === void 0 ? false : _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
33
37
 
34
- var _useUncontrolledState = useUncontrolledState(defaultValue, valueProp, onChange),
38
+ var _useUncontrolledState = useUncontrolledState(defaultValue, valueProp, onChange, Object.is),
35
39
  value = _useUncontrolledState[0],
36
40
  tryChangeValue = _useUncontrolledState[1];
37
41
 
38
- var handleChange = useCallback(function (evt) {
42
+ var handleChange = useCallback(function (evt, trim) {
43
+ if (trim === void 0) {
44
+ trim = false;
45
+ }
46
+
47
+ evt.persist();
39
48
  var nextValue = evt.target.value;
40
- tryChangeValue(nextValue, evt);
41
- }, [tryChangeValue]);
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]);
42
64
 
43
65
  var _useState = useState(autoFocus),
44
66
  focused = _useState[0],
@@ -49,11 +71,19 @@ var useInput = function useInput(_ref) {
49
71
  onFocus === null || onFocus === void 0 ? void 0 : onFocus(evt);
50
72
  });
51
73
  var handleBlur = useLatestCallback(function (event) {
52
- setFocused(false);
74
+ var relatedTarget = event.relatedTarget; // 拦截 clear 情况 触发 input 失焦
75
+
76
+ if (clearElementRef && clearElementRef.current && clearElementRef.current === relatedTarget) {
77
+ return;
78
+ }
79
+
80
+ setFocused(false); // amount 自动添加小数
53
81
 
54
- if (trimValueOnBlur) {
55
- var nextValue = event.target.value;
56
- tryChangeValue(nextValue.trim(), event);
82
+ if (type === 'amount') {
83
+ event.target.value = formatAmount(value, true);
84
+ handleChange(event, trimValueOnBlur);
85
+ } else if (trimValueOnBlur) {
86
+ handleChange(event, true);
57
87
  }
58
88
 
59
89
  onBlur === null || onBlur === void 0 ? void 0 : onBlur(event);
@@ -71,12 +101,12 @@ var useInput = function useInput(_ref) {
71
101
  }, [disabled, readOnly, autoFocus, placeholder, maxLength, name, focused]);
72
102
  var getInputProps = useCallback(function () {
73
103
  return Object.assign(Object.assign({}, nativeInputProps), {
74
- value: value,
104
+ value: format(value, type),
75
105
  onChange: handleChange,
76
106
  onFocus: handleFocus,
77
107
  onBlur: handleBlur
78
108
  });
79
- }, [value, handleChange, handleFocus, handleBlur, nativeInputProps]);
109
+ }, [value, type, handleChange, handleFocus, handleBlur, nativeInputProps]);
80
110
  return {
81
111
  focused: focused,
82
112
  value: value,
@@ -1 +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","useUncontrolledState","tryChangeValue","handleChange","useCallback","evt","nextValue","target","useState","focused","setFocused","handleFocus","useLatestCallback","handleBlur","event","trim","nativeInputProps","useMemo","setAttrStatus","getInputProps"],"mappings":";;;;;;;;;;;;;;IAKaA,QAAQ,GAAG,SAAXA,QAAW,KAAA;MACtBC,YAAAA;4BACAC;MAAAA,wCAAY;2BACZC;MAAAA,sCAAW;2BACXC;MAAAA,sCAAW;MACXC,iBAAAA;MACAC,mBAAAA;+BACAC;MAAAA,8CAAe;MACRC,iBAAPC;MACAC,gBAAAA;MACAC,eAAAA;MACAC,cAAAA;kCACAC;MAAAA,oDAAkB;;8BAEcC,oBAAoB,CAACP,YAAD,EAAeC,SAAf,EAA0BE,QAA1B;MAA7CD,KAAP;MAAcM,cAAd;;MAEMC,YAAY,GAAGC,WAAW,CAC9B,UAACC,GAAD;QACQC,SAAS,GAAGD,GAAG,CAACE,MAAJF,CAAWT;AAC7BM,IAAAA,cAAc,CAACI,SAAD,EAAYD,GAAZ,CAAdH;AAH4B,GAAA,EAK9B,CAACA,cAAD,CAL8B;;kBAQFM,QAAQ,CAACnB,SAAD;MAA/BoB,OAAP;MAAgBC,UAAhB;;MAEMC,WAAW,GAAGC,iBAAiB,CACnC,UAACP,GAAD;AACEK,IAAAA,UAAU,CAAC,IAAD,CAAVA;AACAZ,IAAAA,OAAO,SAAPA,IAAAA,OAAO,WAAPA,SAAAA,GAAAA,OAAO,CAAGO,GAAH,CAAPP;AAHiC,GAAA;MAO/Be,UAAU,GAAGD,iBAAiB,CAClC,UAACE,KAAD;AACEJ,IAAAA,UAAU,CAAC,KAAD,CAAVA;;QAEIV,iBAAiB;UACbM,SAAS,GAAGQ,KAAK,CAACP,MAANO,CAAalB;AAC/BM,MAAAA,cAAc,CAACI,SAAS,CAACS,IAAVT,EAAD,EAAmBQ,KAAnB,CAAdZ;;;AAGFH,IAAAA,MAAM,SAANA,IAAAA,MAAM,WAANA,SAAAA,GAAAA,MAAM,CAAGe,KAAH,CAANf;AATgC,GAAA;MAa9BiB,gBAAgB,GAAGC,OAAO,CAC9B;WAAO;AACL7B,MAAAA,IAAI,EAAJA,IADK;AAELE,MAAAA,QAAQ,EAARA,QAFK;AAGLC,MAAAA,QAAQ,EAARA,QAHK;AAILF,MAAAA,SAAS,EAATA,SAJK;AAKLI,MAAAA,WAAW,EAAXA,WALK;AAMLD,MAAAA,SAAS,EAATA,SANK;sBAOW0B,aAAa,CAACT,OAAD;AAPxB;AADuB,GAAA,EAU9B,CAACnB,QAAD,EAAWC,QAAX,EAAqBF,SAArB,EAAgCI,WAAhC,EAA6CD,SAA7C,EAAwDJ,IAAxD,EAA8DqB,OAA9D,CAV8B;MAa1BU,aAAa,GAAGf,WAAW,CAAC;2CAE3BY;AACHpB,MAAAA,KAAK,EAALA;AACAC,MAAAA,QAAQ,EAAEM;AACVL,MAAAA,OAAO,EAAEa;AACTZ,MAAAA,MAAM,EAAEc;;AANqB,GAAA,EAQ9B,CAACjB,KAAD,EAAQO,YAAR,EAAsBQ,WAAtB,EAAmCE,UAAnC,EAA+CG,gBAA/C,CAR8B;SAU1B;AACLP,IAAAA,OAAO,EAAPA,OADK;AAELb,IAAAA,KAAK,EAALA,KAFK;AAGLM,IAAAA,cAAc,EAAdA,cAHK;AAILiB,IAAAA,aAAa,EAAbA;AAJK;;;"}
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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"}
@@ -1,7 +1,14 @@
1
1
  import React from 'react';
2
2
  import { HiBaseHTMLFieldProps } from '@hi-ui/core';
3
3
  /**
4
- * TODO: What is Input
4
+ * 输入框
5
+ *
6
+ * @TODO:
7
+ * 1. size api 确认
8
+ * 2. 修改类名结构
9
+ * 3. 支持带数字展示
10
+ * 4. InputGroup 模式支持
11
+ * 5. 手动聚焦支持额外配置
5
12
  */
6
13
  export declare const Input: React.ForwardRefExoticComponent<InputProps & React.RefAttributes<HTMLInputElement | null>>;
7
14
  export interface InputProps extends HiBaseHTMLFieldProps<'input'> {
@@ -17,10 +24,6 @@ export interface InputProps extends HiBaseHTMLFieldProps<'input'> {
17
24
  * 开启输入框自动聚焦
18
25
  */
19
26
  autoFocus?: boolean;
20
- /**
21
- * 输入框字段名称
22
- */
23
- name?: string;
24
27
  /**
25
28
  * 设置输入框的值
26
29
  */
@@ -32,17 +35,17 @@ export interface InputProps extends HiBaseHTMLFieldProps<'input'> {
32
35
  /**
33
36
  * 设置输入框类型,支持原生 input 的 type 属性所有值
34
37
  */
35
- type?: 'text' | 'number' | string;
38
+ type?: 'text' | 'id' | 'tel' | 'card' | 'amount' | 'email' | string;
36
39
  /**
37
40
  * 输入最大长度
38
41
  */
39
42
  maxLength?: number;
40
43
  /**
41
- * 输入框前置外部标签
44
+ * 输入框前置外部内容
42
45
  */
43
46
  prepend?: React.ReactNode;
44
47
  /**
45
- * 输入框后置外部标签
48
+ * 输入框后置外部内容
46
49
  */
47
50
  append?: React.ReactNode;
48
51
  /**
@@ -58,17 +61,13 @@ export interface InputProps extends HiBaseHTMLFieldProps<'input'> {
58
61
  */
59
62
  clearable?: boolean;
60
63
  /**
61
- * 再失焦时触发对值的 trim onChange 给用户
64
+ * 开启失焦时触发对值的 trim,将触发 onChange 给用户
62
65
  */
63
66
  trimValueOnBlur?: boolean;
64
67
  /**
65
68
  * 清除按钮展示的触发形态
66
69
  */
67
70
  clearableTrigger?: 'always' | 'hover';
68
- /**
69
- * 开启动画浮动提示
70
- */
71
- floatLabel?: React.ReactNode;
72
71
  /**
73
72
  * 输入框占位符
74
73
  */
@@ -79,13 +78,13 @@ export interface InputProps extends HiBaseHTMLFieldProps<'input'> {
79
78
  */
80
79
  appearance?: 'outline' | 'unset' | 'filled' | 'underline';
81
80
  /**
82
- * 设置输入框尺寸
81
+ * 设置尺寸
83
82
  */
84
83
  size?: 'sm' | 'md' | 'lg';
85
84
  /**
86
85
  * 值改变时的回调
87
86
  */
88
- onChange?: (evt: React.ChangeEvent<HTMLInputElement>) => void;
87
+ onChange?: (evt: React.ChangeEvent<HTMLInputElement>, value: string) => void;
89
88
  }
90
89
  /**
91
90
  * 模拟伪装目标事件 target
@@ -96,4 +95,4 @@ export interface InputProps extends HiBaseHTMLFieldProps<'input'> {
96
95
  * @param targetValue
97
96
  * @returns
98
97
  */
99
- export declare function onChangeMock(onChange: (event: React.ChangeEvent<HTMLInputElement>) => void, evt: React.ChangeEvent<HTMLInputElement> | React.MouseEvent<HTMLElement>, target: HTMLInputElement | null, targetValue: string): void;
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;
@@ -3,7 +3,7 @@ import type { HiBaseDataItem, HiBaseHTMLFieldProps } from '@hi-ui/core';
3
3
  /**
4
4
  * 支持自定义渲染输入框内容,暂时仅供内部 Picker 类组件使用,不对外提供
5
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" | "focused" | "type" | "onSelect" | "title" | "size" | "prefix" | "data" | "onClick" | "appearance" | "suffix" | "clearableTrigger" | "clearable" | "displayRender"> & {
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
7
  prefixCls?: string | undefined;
8
8
  role?: string | undefined;
9
9
  } & {
@@ -18,7 +18,7 @@ export declare const MockInput: React.ForwardRefExoticComponent<Omit<Pick<React.
18
18
  /**
19
19
  * 多选值改变时的回调
20
20
  */
21
- onChange?: ((values: React.ReactText) => void) | undefined;
21
+ onChange?: ((value: React.ReactText, item: any) => void) | undefined;
22
22
  /**
23
23
  * 是否可清空
24
24
  */
@@ -82,7 +82,7 @@ export declare type MockInputProps = HiBaseHTMLFieldProps<'div', {
82
82
  /**
83
83
  * 多选值改变时的回调
84
84
  */
85
- onChange?: (values: React.ReactText) => void;
85
+ onChange?: (value: React.ReactText, item: any) => void;
86
86
  /**
87
87
  * 是否可清空
88
88
  */
@@ -2,10 +2,17 @@ import React from 'react';
2
2
  import { HiBaseHTMLFieldProps } from '@hi-ui/core';
3
3
  import { UseInputProps } from './use-input';
4
4
  /**
5
- * TODO: What is TextArea
5
+ * 动态文本域输入框
6
+ *
7
+ * @TODO:
8
+ * 1. 支持带数字展示
9
+ * 2. 支持自适应行高大小
10
+ * 3. 支持清空按钮
11
+ * 4. 支持最大最小行支持
12
+ * 5. 手动聚焦支持额外配置
6
13
  */
7
14
  export declare const TextArea: React.ForwardRefExoticComponent<TextAreaProps & React.RefAttributes<HTMLTextAreaElement | null>>;
8
- export interface TextAreaProps extends HiBaseHTMLFieldProps<'textarea'>, Omit<UseInputProps, 'onFocus' | 'onBlur' | 'onChange'> {
15
+ export interface TextAreaProps extends HiBaseHTMLFieldProps<'textarea'>, Omit<UseInputProps, 'onFocus' | 'onBlur' | 'onChange' | 'type'> {
9
16
  /**
10
17
  * 设置输入框尺寸
11
18
  */
@@ -1,11 +1,11 @@
1
1
  import React from 'react';
2
- export declare const useInput: ({ name, autoFocus, disabled, readOnly, maxLength, placeholder, defaultValue, value: valueProp, onChange, onFocus, onBlur, trimValueOnBlur, }: UseInputProps) => {
2
+ export declare const useInput: ({ name, autoFocus, disabled, readOnly, maxLength, placeholder, defaultValue, value: valueProp, onChange, onFocus, onBlur, trimValueOnBlur, type, clearElementRef, }: UseInputProps) => {
3
3
  focused: boolean;
4
4
  value: string;
5
5
  tryChangeValue: (stateOrFunction: React.SetStateAction<string>, ...args: any[]) => void;
6
6
  getInputProps: () => {
7
7
  value: string;
8
- onChange: (evt: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => void;
8
+ onChange: (evt: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>, trim?: any) => void;
9
9
  onFocus: (evt: React.FocusEvent<HTMLInputElement | HTMLTextAreaElement>) => void;
10
10
  onBlur: (event: React.FocusEvent<HTMLInputElement | HTMLTextAreaElement>) => void;
11
11
  name: string | undefined;
@@ -66,5 +66,13 @@ export interface UseInputProps {
66
66
  * 输入框失焦时的回调
67
67
  */
68
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;
69
77
  }
70
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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hi-ui/input",
3
- "version": "4.0.0-alpha.24",
3
+ "version": "4.0.0-alpha.28",
4
4
  "description": "A sub-package for @hi-ui/hiui.",
5
5
  "keywords": [],
6
6
  "author": "HIUI <mi-hiui@xiaomi.com>",
@@ -44,23 +44,23 @@
44
44
  },
45
45
  "dependencies": {
46
46
  "@hi-ui/classname": "^4.0.0-alpha.3",
47
- "@hi-ui/core": "^4.0.0-alpha.14",
48
- "@hi-ui/core-css": "^4.0.0-alpha.10",
47
+ "@hi-ui/core": "^4.0.0-alpha.17",
48
+ "@hi-ui/core-css": "^4.0.0-alpha.13",
49
49
  "@hi-ui/dom-utils": "^4.0.0-alpha.6",
50
50
  "@hi-ui/env": "^4.0.0-alpha.5",
51
- "@hi-ui/icons": "^4.0.0-alpha.20",
51
+ "@hi-ui/icons": "^4.0.0-alpha.24",
52
52
  "@hi-ui/use-latest": "^4.0.0-alpha.4",
53
53
  "@hi-ui/use-merge-refs": "^4.0.0-alpha.4",
54
54
  "@hi-ui/use-uncontrolled-state": "^4.0.0-alpha.12"
55
55
  },
56
56
  "peerDependencies": {
57
- "react": "^17.0.1",
58
- "react-dom": "^17.0.1"
57
+ "react": ">=16.8.6",
58
+ "react-dom": ">=16.8.6"
59
59
  },
60
60
  "devDependencies": {
61
61
  "@hi-ui/hi-build": "^4.0.0-alpha.4",
62
62
  "react": "^17.0.1",
63
63
  "react-dom": "^17.0.1"
64
64
  },
65
- "gitHead": "dbe7ec19bc067527f0cfcf8c71100619fc98cc72"
65
+ "gitHead": "88a8b8aa1b659b247bfca62f2f8ba594c25b90f6"
66
66
  }