@qsxy/element-plus-react 1.0.1 → 1.0.3
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/dist/Alert/Alert.d.ts +7 -0
- package/dist/Alert/Alert.js +98 -0
- package/dist/Alert/index.d.ts +2 -0
- package/dist/Alert/index.js +1 -0
- package/dist/Alert/typings.d.ts +45 -0
- package/dist/Alert/typings.js +1 -0
- package/dist/Calendar/Calendar.js +12 -3
- package/dist/Calendar/Footer.js +4 -2
- package/dist/Calendar/QuarterPanel.d.ts +4 -0
- package/dist/Calendar/QuarterPanel.js +109 -0
- package/dist/Calendar/WeekPanel.js +1 -1
- package/dist/Calendar/typings.d.ts +1 -1
- package/dist/Card/Card.js +13 -6
- package/dist/Card/typings.d.ts +1 -1
- package/dist/Cascader/Cascader.js +1 -1
- package/dist/Cascader/useCascader.d.ts +0 -14
- package/dist/Cascader/useCascader.js +33 -32
- package/dist/Checkbox/Checkbox.js +3 -2
- package/dist/ConfigProvider/ConfigProvider.js +2 -24
- package/dist/ConfigProvider/ConfigProviderContext.js +1 -1
- package/dist/ConfigProvider/typings.d.ts +1 -1
- package/dist/Container/Main.d.ts +1 -1
- package/dist/Container/typings.d.ts +1 -1
- package/dist/DatePicker/DatePicker.js +38 -12
- package/dist/DatePicker/DateRangePicker.js +27 -9
- package/dist/DatePicker/main.js +1 -1
- package/dist/DatePicker/typings.d.ts +1 -1
- package/dist/DateTimePicker/DateTimePicker.js +2 -2
- package/dist/Dialog/Dialog.js +5 -12
- package/dist/Input/Input.js +190 -149
- package/dist/Input/InputRange.js +1 -1
- package/dist/Input/TextArea.js +87 -12
- package/dist/Input/typings.d.ts +56 -5
- package/dist/Input/useComposition.d.ts +23 -0
- package/dist/Input/useComposition.js +63 -0
- package/dist/Input/utils.d.ts +7 -0
- package/dist/Input/utils.js +95 -0
- package/dist/InputNumber/InputNumber.js +351 -141
- package/dist/InputNumber/typings.d.ts +16 -2
- package/dist/Loading/Loading.js +5 -2
- package/dist/Menu/Menu.js +25 -1
- package/dist/Menu/MenuItem.js +4 -2
- package/dist/Menu/SubMenu.js +2 -2
- package/dist/Menu/SubMenuCollapseTransition.js +14 -9
- package/dist/Menu/typings.d.ts +2 -1
- package/dist/Message/Message.js +51 -23
- package/dist/Message/index.js +8 -10
- package/dist/Message/typings.d.ts +8 -5
- package/dist/MessageBox/MessageBox.js +52 -30
- package/dist/MessageBox/index.d.ts +2 -1
- package/dist/MessageBox/index.js +4 -2
- package/dist/MessageBox/typings.d.ts +3 -0
- package/dist/Notification/Notification.js +26 -19
- package/dist/Select/Option.js +30 -14
- package/dist/Select/SelectContext.d.ts +5 -5
- package/dist/Select/SelectContext.js +2 -1
- package/dist/Select/SelectCore.d.ts +2 -2
- package/dist/Select/SelectCore.js +172 -449
- package/dist/Select/SelectDropdown.js +85 -155
- package/dist/Select/index.d.ts +1 -1
- package/dist/Select/typings.d.ts +52 -22
- package/dist/Select/useSelect.d.ts +128 -0
- package/dist/Select/useSelect.js +524 -0
- package/dist/Space/Space.d.ts +4 -0
- package/dist/Space/Space.js +128 -0
- package/dist/Space/SpaceItem.d.ts +7 -0
- package/dist/Space/SpaceItem.js +14 -0
- package/dist/Space/index.d.ts +3 -0
- package/dist/Space/index.js +2 -0
- package/dist/Space/typings.d.ts +26 -0
- package/dist/Space/typings.js +1 -0
- package/dist/Space/useSpace.d.ts +7 -0
- package/dist/Space/useSpace.js +104 -0
- package/dist/Statistic/Statistic.d.ts +4 -0
- package/dist/Statistic/Statistic.js +92 -0
- package/dist/Statistic/index.d.ts +2 -0
- package/dist/Statistic/index.js +1 -0
- package/dist/Statistic/typings.d.ts +28 -0
- package/dist/Statistic/typings.js +1 -0
- package/dist/Switch/Switch.js +2 -2
- package/dist/Table/Table.js +3 -0
- package/dist/Table/typings.d.ts +2 -0
- package/dist/Table/util.js +6 -5
- package/dist/Tag/Tag.js +22 -17
- package/dist/Tag/typings.d.ts +1 -1
- package/dist/Text/Text.d.ts +4 -0
- package/dist/Text/Text.js +84 -0
- package/dist/Text/index.d.ts +2 -0
- package/dist/Text/index.js +1 -0
- package/dist/Text/typings.d.ts +15 -0
- package/dist/Text/typings.js +1 -0
- package/dist/TimePicker/TimePicker.js +2 -2
- package/dist/Tree/CollapseTransition.d.ts +7 -0
- package/dist/Tree/CollapseTransition.js +60 -0
- package/dist/Tree/Tree.d.ts +3 -140
- package/dist/Tree/Tree.js +350 -77
- package/dist/Tree/TreeContext.d.ts +9 -0
- package/dist/Tree/TreeContext.js +14 -0
- package/dist/Tree/TreeNode.d.ts +5 -3
- package/dist/Tree/TreeNode.js +321 -331
- package/dist/Tree/TreeNodeContent.d.ts +9 -0
- package/dist/Tree/TreeNodeContent.js +22 -0
- package/dist/Tree/index.d.ts +3 -8
- package/dist/Tree/index.js +1 -4
- package/dist/Tree/model/node.d.ts +62 -0
- package/dist/Tree/model/node.js +601 -0
- package/dist/Tree/model/tree-store.d.ts +52 -0
- package/dist/Tree/model/tree-store.js +510 -0
- package/dist/Tree/model/useDragNode.d.ts +30 -0
- package/dist/Tree/model/useDragNode.js +293 -0
- package/dist/Tree/model/useKeydown.d.ts +0 -0
- package/dist/Tree/model/useKeydown.js +104 -0
- package/dist/Tree/model/useNodeExpandEventBroadcast.d.ts +15 -0
- package/dist/Tree/model/useNodeExpandEventBroadcast.js +54 -0
- package/dist/Tree/model/util.d.ts +7 -0
- package/dist/Tree/model/util.js +24 -0
- package/dist/Tree/typings.d.ts +225 -114
- package/dist/TreeSelect/TreeSelect.d.ts +2 -10
- package/dist/TreeSelect/TreeSelect.js +90 -566
- package/dist/TreeSelect/TreeSelectOption.d.ts +6 -0
- package/dist/TreeSelect/TreeSelectOption.js +62 -0
- package/dist/TreeSelect/cacheOptions.d.ts +9 -0
- package/dist/TreeSelect/cacheOptions.js +22 -0
- package/dist/TreeSelect/index.d.ts +0 -1
- package/dist/TreeSelect/typings.d.ts +11 -63
- package/dist/TreeSelect/useSelect.d.ts +125 -0
- package/dist/TreeSelect/useSelect.js +104 -0
- package/dist/TreeSelect/useTree.d.ts +130 -0
- package/dist/TreeSelect/useTree.js +285 -0
- package/dist/TreeSelect/utils.d.ts +10 -0
- package/dist/TreeSelect/utils.js +38 -0
- package/dist/Upload/UploadContent.js +2 -0
- package/dist/Upload/ajax.js +3 -0
- package/dist/Upload/typings.d.ts +4 -0
- package/dist/Util/aria.d.ts +25 -0
- package/dist/Util/aria.js +118 -0
- package/dist/Util/base.d.ts +5 -0
- package/dist/Util/base.js +140 -1
- package/dist/config/Constants.d.ts +3 -0
- package/dist/config/Constants.js +8 -0
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.js +1 -0
- package/dist/hooks/popperPropsUtils.js +1 -1
- package/dist/hooks/treePropsUtils.d.ts +3 -3
- package/dist/hooks/treePropsUtils.js +2 -2
- package/dist/hooks/useCalcInputWidth.d.ts +8 -0
- package/dist/{Tree/useUnmount.js → hooks/useCalcInputWidth.js} +23 -27
- package/dist/hooks/useComposition.d.ts +16 -0
- package/dist/hooks/useComposition.js +39 -0
- package/dist/hooks/useConfigProvider.d.ts +27 -0
- package/dist/hooks/useConfigProvider.js +78 -0
- package/dist/hooks/useCursor.d.ts +2 -0
- package/dist/hooks/useCursor.js +52 -0
- package/dist/hooks/useFocusController.d.ts +27 -0
- package/dist/hooks/useFocusController.js +72 -0
- package/dist/hooks/useResizeObserver.js +6 -6
- package/dist/index.css +1 -1
- package/dist/index.d.ts +18 -11
- package/dist/index.js +11 -5
- package/dist/locale/en.d.ts +15 -0
- package/dist/locale/en.js +15 -0
- package/dist/locale/zhCn.d.ts +15 -0
- package/dist/locale/zhCn.js +15 -0
- package/package.json +1 -1
- package/theme-chalk/alert.scss +115 -0
- package/theme-chalk/aside.scss +8 -8
- package/theme-chalk/button-group.scss +80 -80
- package/theme-chalk/button.scss +304 -304
- package/theme-chalk/calendar/date-table.scss +164 -164
- package/theme-chalk/calendar/index.scss +1 -0
- package/theme-chalk/calendar/quarter-table.scss +78 -0
- package/theme-chalk/checkbox.scss +34 -0
- package/theme-chalk/color/index.scss +20 -20
- package/theme-chalk/common/transition.scss +142 -142
- package/theme-chalk/common/var.scss +1 -1
- package/theme-chalk/container.scss +14 -14
- package/theme-chalk/dark/css-vars.scss +39 -39
- package/theme-chalk/dark/var.scss +225 -225
- package/theme-chalk/date-picker.scss +12 -12
- package/theme-chalk/drawer.scss +1 -0
- package/theme-chalk/footer.scss +12 -12
- package/theme-chalk/header.scss +12 -12
- package/theme-chalk/index.scss +4 -0
- package/theme-chalk/input/input-range.scss +2 -1
- package/theme-chalk/input/input.scss +298 -437
- package/theme-chalk/input/input.scss--bak +578 -0
- package/theme-chalk/input-number.bak +172 -0
- package/theme-chalk/input-number.scss +192 -172
- package/theme-chalk/link.scss +87 -87
- package/theme-chalk/main.scss +14 -14
- package/theme-chalk/menu.scss +353 -353
- package/theme-chalk/message.scss +104 -178
- package/theme-chalk/mixins/_button.scss +224 -224
- package/theme-chalk/mixins/_col.scss +33 -33
- package/theme-chalk/mixins/_var.scss +67 -67
- package/theme-chalk/mixins/config.scss +5 -5
- package/theme-chalk/mixins/function.scss +99 -99
- package/theme-chalk/mixins/mixins.scss +240 -240
- package/theme-chalk/mixins/utils.scss +39 -39
- package/theme-chalk/notification.bak +156 -0
- package/theme-chalk/notification.scss +109 -156
- package/theme-chalk/popper.scss +104 -104
- package/theme-chalk/radio-button.scss +169 -169
- package/theme-chalk/select/index.scss +222 -191
- package/theme-chalk/select/index.scss--bak +247 -0
- package/theme-chalk/select/option-group.scss +2 -2
- package/theme-chalk/select/option.scss +2 -2
- package/theme-chalk/select/select-dropdown.scss +2 -2
- package/theme-chalk/space.scss +20 -0
- package/theme-chalk/statistic.scss +35 -0
- package/theme-chalk/switch.scss +300 -300
- package/theme-chalk/tag.scss +150 -172
- package/theme-chalk/tag.scss--bak +203 -0
- package/theme-chalk/text.scss +48 -0
- package/theme-chalk/transition.scss +34 -4
- package/theme-chalk/tree-select.scss +41 -25
- package/theme-chalk/tree.scss +136 -0
- package/theme-chalk/var.scss +83 -83
- package/dist/Tree/DirectoryTree.d.ts +0 -15
- package/dist/Tree/DirectoryTree.js +0 -183
- package/dist/Tree/DropIndicator.d.ts +0 -8
- package/dist/Tree/DropIndicator.js +0 -34
- package/dist/Tree/Indent.d.ts +0 -9
- package/dist/Tree/Indent.js +0 -25
- package/dist/Tree/MotionTreeNode.d.ts +0 -14
- package/dist/Tree/MotionTreeNode.js +0 -125
- package/dist/Tree/NodeList.d.ts +0 -50
- package/dist/Tree/NodeList.js +0 -301
- package/dist/Tree/RCTree.d.ts +0 -248
- package/dist/Tree/RCTree.js +0 -1216
- package/dist/Tree/contextTypes.d.ts +0 -69
- package/dist/Tree/contextTypes.js +0 -9
- package/dist/Tree/typings.tsx--bak +0 -245
- package/dist/Tree/useUnmount.d.ts +0 -5
- package/dist/Tree/util.d.ts +0 -51
- package/dist/Tree/util.js +0 -303
- package/dist/Tree/utils/conductUtil.d.ts +0 -17
- package/dist/Tree/utils/conductUtil.js +0 -209
- package/dist/Tree/utils/dictUtil.d.ts +0 -13
- package/dist/Tree/utils/dictUtil.js +0 -75
- package/dist/Tree/utils/diffUtil.d.ts +0 -7
- package/dist/Tree/utils/diffUtil.js +0 -48
- package/dist/Tree/utils/dropIndicator.d.ts +0 -11
- package/dist/Tree/utils/dropIndicator.js +0 -36
- package/dist/Tree/utils/iconUtil.d.ts +0 -5
- package/dist/Tree/utils/iconUtil.js +0 -62
- package/dist/Tree/utils/keyUtil.d.ts +0 -2
- package/dist/Tree/utils/keyUtil.js +0 -3
- package/dist/Tree/utils/motion.d.ts +0 -10
- package/dist/Tree/utils/motion.js +0 -54
- package/dist/Tree/utils/pickAttrs.d.ts +0 -11
- package/dist/Tree/utils/pickAttrs.js +0 -51
- package/dist/Tree/utils/treeUtil.d.ts +0 -86
- package/dist/Tree/utils/treeUtil.js +0 -364
- package/dist/TreeSelect/Utils.d.ts +0 -3
- package/dist/TreeSelect/Utils.js +0 -20
package/dist/Input/typings.d.ts
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { BaseProps, FormControlBaseProps, NativeProps, TypeAttributes } from '../types/common';
|
|
3
3
|
export type LiteralUnion<T extends U, U> = T | (U & {});
|
|
4
|
-
export type ValueType =
|
|
4
|
+
export type ValueType = string | number;
|
|
5
|
+
export interface ModelModifiers {
|
|
6
|
+
trim?: boolean;
|
|
7
|
+
number?: boolean;
|
|
8
|
+
lazy?: boolean;
|
|
9
|
+
}
|
|
5
10
|
export type BaseInputRef = {
|
|
6
11
|
/** 获取值 */
|
|
7
12
|
getValue: () => ValueType;
|
|
@@ -14,6 +19,8 @@ export type BaseInputRef = {
|
|
|
14
19
|
focus: () => void;
|
|
15
20
|
/** 使 input 组件失去焦点 */
|
|
16
21
|
blur: () => void;
|
|
22
|
+
/** 选中所有文本 */
|
|
23
|
+
select?: () => void;
|
|
17
24
|
showClear?: (value: ValueType) => void;
|
|
18
25
|
hideClear?: () => void;
|
|
19
26
|
};
|
|
@@ -24,14 +31,17 @@ export type InputRef = {
|
|
|
24
31
|
export type TextareaRef = {
|
|
25
32
|
input: HTMLTextAreaElement;
|
|
26
33
|
} & BaseInputRef;
|
|
27
|
-
export interface InputProps extends FormControlBaseProps<
|
|
34
|
+
export interface InputProps extends FormControlBaseProps<string | number>, BaseProps, NativeProps, Omit<React.AllHTMLAttributes<HTMLInputElement>, 'value' | 'defaultValue' | 'size' | 'prefix' | 'type' | 'onInput' | 'onChange' | 'style' | 'children'> {
|
|
28
35
|
size?: TypeAttributes.Size;
|
|
36
|
+
value?: string | number;
|
|
29
37
|
/** 初始值 */
|
|
30
|
-
defaultValue?:
|
|
38
|
+
defaultValue?: string | number;
|
|
31
39
|
/**
|
|
32
40
|
* text,textarea 和其他原生 input 的 type 值
|
|
33
41
|
* ref: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#%3Cinput%3E_types */
|
|
34
42
|
type?: LiteralUnion<'color' | 'date' | 'datetime-local' | 'email' | 'file' | 'hidden' | 'image' | 'number' | 'password' | 'range' | 'search' | 'tel' | 'text' | 'time' | 'url' | 'week', string>;
|
|
43
|
+
/** 输入框唯一标识 */
|
|
44
|
+
id?: string;
|
|
35
45
|
/** 输入框头部内容,只对 type="text" 有效 */
|
|
36
46
|
prefix?: React.ReactElement<any> | string | number;
|
|
37
47
|
/** 输入框尾部内容,只对 type="text" 有效 */
|
|
@@ -42,6 +52,8 @@ export interface InputProps extends FormControlBaseProps<ValueType>, BaseProps,
|
|
|
42
52
|
append?: React.ReactElement | string | number;
|
|
43
53
|
/** 是否可清空 */
|
|
44
54
|
clearable?: boolean;
|
|
55
|
+
/** 指定输入值的格式。(只有当 type 是"text"时才能工作) */
|
|
56
|
+
formatter?: (value: ValueType) => string;
|
|
45
57
|
/** 是否显示切换密码图标 */
|
|
46
58
|
showPassword?: boolean;
|
|
47
59
|
/** 是否纯文本模式,即无边框 */
|
|
@@ -66,12 +78,44 @@ export interface InputProps extends FormControlBaseProps<ValueType>, BaseProps,
|
|
|
66
78
|
minLength?: number;
|
|
67
79
|
/** 是否显示统计字数, 只在 type 为 'text' 或 'textarea' 的时候生效 */
|
|
68
80
|
showWordLimit?: boolean;
|
|
81
|
+
/** 字数统计的位置,仅当 show-word-limit 为 true 时生效。 */
|
|
82
|
+
wordLimitPosition?: 'inside' | 'outside';
|
|
69
83
|
/** 是否隐藏值 */
|
|
70
84
|
hiddenValue?: boolean;
|
|
85
|
+
/** 原生属性 autocomplete */
|
|
86
|
+
autocomplete?: string;
|
|
87
|
+
/** 原生属性 tabindex */
|
|
88
|
+
tabindex?: number;
|
|
89
|
+
/** 原生属性 aria-label */
|
|
90
|
+
ariaLabel?: string;
|
|
91
|
+
/** 原生属性 form */
|
|
92
|
+
form?: string;
|
|
93
|
+
/** 原生属性 autofocus */
|
|
94
|
+
autofocus?: boolean;
|
|
95
|
+
/** 原生属性 inputmode */
|
|
96
|
+
inputmode?: 'none' | 'text' | 'decimal' | 'numeric' | 'tel' | 'search' | 'email' | 'url';
|
|
97
|
+
/** 容器的 role 属性 */
|
|
98
|
+
containerRole?: string;
|
|
99
|
+
/** 是否触发表单验证 */
|
|
100
|
+
validateEvent?: boolean;
|
|
101
|
+
/** 修饰符 */
|
|
102
|
+
modelModifiers?: ModelModifiers;
|
|
71
103
|
/** 在点击由 clearable 属性生成的清空按钮时触发 */
|
|
72
104
|
onClear?: (e: React.MouseEvent) => void;
|
|
73
105
|
/** 在 Input 值改变时触发 */
|
|
74
106
|
onChange?: (value: ValueType, event?: React.ChangeEvent) => void;
|
|
107
|
+
/** 在 Input 输入时触发 */
|
|
108
|
+
onInput?: (value: ValueType) => void;
|
|
109
|
+
/** 在 Input 获得焦点时触发 */
|
|
110
|
+
onFocus?: (event: React.FocusEvent) => void;
|
|
111
|
+
/** 在 Input 失去焦点时触发 */
|
|
112
|
+
onBlur?: (event: React.FocusEvent) => void;
|
|
113
|
+
/** 在 Input 按下键盘时触发 */
|
|
114
|
+
onKeyDown?: (event: React.KeyboardEvent) => void;
|
|
115
|
+
/** 鼠标进入时触发 */
|
|
116
|
+
onMouseEnter?: (event: React.MouseEvent) => void;
|
|
117
|
+
/** 鼠标离开时触发 */
|
|
118
|
+
onMouseLeave?: (event: React.MouseEvent) => void;
|
|
75
119
|
}
|
|
76
120
|
export interface InputGroupProps extends BaseProps, NativeProps {
|
|
77
121
|
/** 输入框前置内容,只对 type="text" 有效 */
|
|
@@ -79,7 +123,7 @@ export interface InputGroupProps extends BaseProps, NativeProps {
|
|
|
79
123
|
/** 输入框后置内容,只对 type="text" 有效 */
|
|
80
124
|
append?: React.ReactElement | string | number;
|
|
81
125
|
}
|
|
82
|
-
export interface TextareaProps extends Omit<React.AllHTMLAttributes<HTMLInputElement>, 'defaultValue' | 'size' | 'prefix' | 'type' | 'onInput' | 'onChange' | 'style' | 'children'>, FormControlBaseProps<ValueType>, BaseProps, NativeProps {
|
|
126
|
+
export interface TextareaProps extends Omit<React.AllHTMLAttributes<HTMLInputElement>, 'value' | 'defaultValue' | 'size' | 'prefix' | 'type' | 'onInput' | 'onChange' | 'style' | 'children'>, FormControlBaseProps<ValueType>, BaseProps, NativeProps {
|
|
83
127
|
/** 初始值 */
|
|
84
128
|
defaultValue?: ValueType;
|
|
85
129
|
/** 表单校验错误提示 */
|
|
@@ -90,13 +134,20 @@ export interface TextareaProps extends Omit<React.AllHTMLAttributes<HTMLInputEle
|
|
|
90
134
|
plain?: boolean;
|
|
91
135
|
rows?: number;
|
|
92
136
|
/** input自定义内联样式 */
|
|
93
|
-
|
|
137
|
+
inputStyle?: React.CSSProperties;
|
|
94
138
|
/** 最大输入长度 */
|
|
95
139
|
maxLength?: number;
|
|
96
140
|
/** 原生属性,最小输入长度 */
|
|
97
141
|
minLength?: number;
|
|
98
142
|
/** 是否显示统计字数, 只在 type 为 'text' 或 'textarea' 的时候生效 */
|
|
99
143
|
showWordLimit?: boolean;
|
|
144
|
+
/** 控制是否能被用户缩放 */
|
|
145
|
+
resize?: 'none' | 'both' | 'horizontal' | 'vertical';
|
|
146
|
+
/** 高度是否自适应,可以接受一个对象,比如: { minRows: 2, maxRows: 6 } */
|
|
147
|
+
autosize?: boolean | {
|
|
148
|
+
minRows?: number;
|
|
149
|
+
maxRows?: number;
|
|
150
|
+
};
|
|
100
151
|
/** 在 Input 值改变时触发 */
|
|
101
152
|
onChange?: (value: ValueType, event?: React.ChangeEvent) => void;
|
|
102
153
|
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ChangeEventHandler, CompositionEventHandler, KeyboardEventHandler } from 'react';
|
|
2
|
+
import { InputProps, TextareaProps } from './typings';
|
|
3
|
+
interface useCompositionProps {
|
|
4
|
+
value: string;
|
|
5
|
+
maxLength: number;
|
|
6
|
+
onChange: InputProps['onChange'];
|
|
7
|
+
onKeyDown: InputProps['onKeyDown'] | TextareaProps['onKeyDown'];
|
|
8
|
+
onPressEnter: InputProps['onProgress'];
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Handle input text like Chinese
|
|
12
|
+
* chrome: compositionstart -> onChange -> compositionend
|
|
13
|
+
* other browser: compositionstart -> compositionend -> onChange
|
|
14
|
+
*/
|
|
15
|
+
export declare function useComposition({ value, maxLength, onChange, onKeyDown, onPressEnter }: useCompositionProps): {
|
|
16
|
+
compositionValue: string;
|
|
17
|
+
triggerValueChange: typeof onChange;
|
|
18
|
+
handleCompositionStart: CompositionEventHandler<HTMLInputElement | HTMLTextAreaElement>;
|
|
19
|
+
handleCompositionEnd: CompositionEventHandler<HTMLInputElement | HTMLTextAreaElement>;
|
|
20
|
+
handleValueChange: ChangeEventHandler<HTMLInputElement | HTMLTextAreaElement>;
|
|
21
|
+
handleKeyDown: KeyboardEventHandler<HTMLInputElement | HTMLTextAreaElement>;
|
|
22
|
+
};
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
2
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
4
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
5
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
6
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
7
|
+
import { useRef, useState } from 'react';
|
|
8
|
+
/**
|
|
9
|
+
* Handle input text like Chinese
|
|
10
|
+
* chrome: compositionstart -> onChange -> compositionend
|
|
11
|
+
* other browser: compositionstart -> compositionend -> onChange
|
|
12
|
+
*/
|
|
13
|
+
export function useComposition(_ref) {
|
|
14
|
+
var value = _ref.value,
|
|
15
|
+
maxLength = _ref.maxLength,
|
|
16
|
+
onChange = _ref.onChange,
|
|
17
|
+
onKeyDown = _ref.onKeyDown,
|
|
18
|
+
onPressEnter = _ref.onPressEnter;
|
|
19
|
+
var refIsComposition = useRef(false);
|
|
20
|
+
var _useState = useState(''),
|
|
21
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
22
|
+
compositionValue = _useState2[0],
|
|
23
|
+
setCompositionValue = _useState2[1];
|
|
24
|
+
var triggerValueChange = function triggerValueChange(newValue, e) {
|
|
25
|
+
if (onChange &&
|
|
26
|
+
// Prevents onchange from being triggered twice
|
|
27
|
+
newValue !== value && (maxLength === undefined || newValue.length <= maxLength)) {
|
|
28
|
+
onChange(newValue, e);
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
return {
|
|
32
|
+
compositionValue: compositionValue,
|
|
33
|
+
triggerValueChange: triggerValueChange,
|
|
34
|
+
handleCompositionStart: function handleCompositionStart() {
|
|
35
|
+
refIsComposition.current = true;
|
|
36
|
+
},
|
|
37
|
+
handleCompositionEnd: function handleCompositionEnd(e) {
|
|
38
|
+
setCompositionValue(undefined);
|
|
39
|
+
triggerValueChange(e.target.value, e);
|
|
40
|
+
},
|
|
41
|
+
handleValueChange: function handleValueChange(e) {
|
|
42
|
+
var newValue = e.target.value;
|
|
43
|
+
if (!refIsComposition.current) {
|
|
44
|
+
// if e.type is compositionend event, the following content will trigger
|
|
45
|
+
compositionValue && setCompositionValue(undefined);
|
|
46
|
+
triggerValueChange(newValue, e);
|
|
47
|
+
} else {
|
|
48
|
+
refIsComposition.current = false;
|
|
49
|
+
setCompositionValue(newValue);
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
handleKeyDown: function handleKeyDown(e) {
|
|
53
|
+
var keyCode = e.key;
|
|
54
|
+
if (!refIsComposition.current) {
|
|
55
|
+
onKeyDown === null || onKeyDown === void 0 || onKeyDown(e);
|
|
56
|
+
if (keyCode === 'Enter') {
|
|
57
|
+
onPressEnter === null || onPressEnter === void 0 || onPressEnter(e);
|
|
58
|
+
// normalizeHandler && triggerValueChange(normalizeHandler('onPressEnter')(e.target.value), e);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
type TextAreaHeight = {
|
|
2
|
+
height: string;
|
|
3
|
+
minHeight?: string;
|
|
4
|
+
};
|
|
5
|
+
export declare function calcTextareaHeight(targetElement: HTMLTextAreaElement, minRows?: number, maxRows?: number): TextAreaHeight;
|
|
6
|
+
export declare const looseToNumber: (val: any) => any;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
2
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
4
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
5
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
6
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
7
|
+
import { isNumber } from "../Util/base";
|
|
8
|
+
var hiddenTextarea = undefined;
|
|
9
|
+
var HIDDEN_STYLE = {
|
|
10
|
+
height: '0',
|
|
11
|
+
visibility: 'hidden',
|
|
12
|
+
overflow: /firefox/i.test(window.navigator.userAgent) ? '' : 'hidden',
|
|
13
|
+
position: 'absolute',
|
|
14
|
+
'z-index': '-1000',
|
|
15
|
+
top: '0',
|
|
16
|
+
right: '0'
|
|
17
|
+
};
|
|
18
|
+
var CONTEXT_STYLE = ['letter-spacing', 'line-height', 'padding-top', 'padding-bottom', 'font-family', 'font-weight', 'font-size', 'text-rendering', 'text-transform', 'width', 'text-indent', 'padding-left', 'padding-right', 'border-width', 'box-sizing', 'word-break'];
|
|
19
|
+
function calculateNodeStyling(targetElement) {
|
|
20
|
+
var style = window.getComputedStyle(targetElement);
|
|
21
|
+
var boxSizing = style.getPropertyValue('box-sizing');
|
|
22
|
+
var paddingSize = Number.parseFloat(style.getPropertyValue('padding-bottom')) + Number.parseFloat(style.getPropertyValue('padding-top'));
|
|
23
|
+
var borderSize = Number.parseFloat(style.getPropertyValue('border-bottom-width')) + Number.parseFloat(style.getPropertyValue('border-top-width'));
|
|
24
|
+
var contextStyle = CONTEXT_STYLE.map(function (name) {
|
|
25
|
+
return [name, style.getPropertyValue(name)];
|
|
26
|
+
});
|
|
27
|
+
return {
|
|
28
|
+
contextStyle: contextStyle,
|
|
29
|
+
paddingSize: paddingSize,
|
|
30
|
+
borderSize: borderSize,
|
|
31
|
+
boxSizing: boxSizing
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
export function calcTextareaHeight(targetElement) {
|
|
35
|
+
var _hiddenTextarea$paren;
|
|
36
|
+
var minRows = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
|
|
37
|
+
var maxRows = arguments.length > 2 ? arguments[2] : undefined;
|
|
38
|
+
if (!hiddenTextarea) {
|
|
39
|
+
var _targetElement$parent;
|
|
40
|
+
hiddenTextarea = document.createElement('textarea');
|
|
41
|
+
((_targetElement$parent = targetElement.parentNode) !== null && _targetElement$parent !== void 0 ? _targetElement$parent : document.body).appendChild(hiddenTextarea);
|
|
42
|
+
}
|
|
43
|
+
var _calculateNodeStyling = calculateNodeStyling(targetElement),
|
|
44
|
+
paddingSize = _calculateNodeStyling.paddingSize,
|
|
45
|
+
borderSize = _calculateNodeStyling.borderSize,
|
|
46
|
+
boxSizing = _calculateNodeStyling.boxSizing,
|
|
47
|
+
contextStyle = _calculateNodeStyling.contextStyle;
|
|
48
|
+
contextStyle.forEach(function (_ref) {
|
|
49
|
+
var _hiddenTextarea;
|
|
50
|
+
var _ref2 = _slicedToArray(_ref, 2),
|
|
51
|
+
key = _ref2[0],
|
|
52
|
+
value = _ref2[1];
|
|
53
|
+
return (_hiddenTextarea = hiddenTextarea) === null || _hiddenTextarea === void 0 ? void 0 : _hiddenTextarea.style.setProperty(key, value);
|
|
54
|
+
});
|
|
55
|
+
Object.entries(HIDDEN_STYLE).forEach(function (_ref3) {
|
|
56
|
+
var _hiddenTextarea2;
|
|
57
|
+
var _ref4 = _slicedToArray(_ref3, 2),
|
|
58
|
+
key = _ref4[0],
|
|
59
|
+
value = _ref4[1];
|
|
60
|
+
return (_hiddenTextarea2 = hiddenTextarea) === null || _hiddenTextarea2 === void 0 ? void 0 : _hiddenTextarea2.style.setProperty(key, value, 'important');
|
|
61
|
+
});
|
|
62
|
+
hiddenTextarea.value = targetElement.value || targetElement.placeholder || '';
|
|
63
|
+
var height = hiddenTextarea.scrollHeight;
|
|
64
|
+
var result = {};
|
|
65
|
+
if (boxSizing === 'border-box') {
|
|
66
|
+
height = height + borderSize;
|
|
67
|
+
} else if (boxSizing === 'content-box') {
|
|
68
|
+
height = height - paddingSize;
|
|
69
|
+
}
|
|
70
|
+
hiddenTextarea.value = '';
|
|
71
|
+
var singleRowHeight = hiddenTextarea.scrollHeight - paddingSize;
|
|
72
|
+
if (isNumber(minRows)) {
|
|
73
|
+
var minHeight = singleRowHeight * minRows;
|
|
74
|
+
if (boxSizing === 'border-box') {
|
|
75
|
+
minHeight = minHeight + paddingSize + borderSize;
|
|
76
|
+
}
|
|
77
|
+
height = Math.max(minHeight, height);
|
|
78
|
+
result.minHeight = "".concat(minHeight, "px");
|
|
79
|
+
}
|
|
80
|
+
if (isNumber(maxRows)) {
|
|
81
|
+
var maxHeight = singleRowHeight * maxRows;
|
|
82
|
+
if (boxSizing === 'border-box') {
|
|
83
|
+
maxHeight = maxHeight + paddingSize + borderSize;
|
|
84
|
+
}
|
|
85
|
+
height = Math.min(maxHeight, height);
|
|
86
|
+
}
|
|
87
|
+
result.height = "".concat(height, "px");
|
|
88
|
+
(_hiddenTextarea$paren = hiddenTextarea.parentNode) === null || _hiddenTextarea$paren === void 0 || _hiddenTextarea$paren.removeChild(hiddenTextarea);
|
|
89
|
+
hiddenTextarea = undefined;
|
|
90
|
+
return result;
|
|
91
|
+
}
|
|
92
|
+
export var looseToNumber = function looseToNumber(val) {
|
|
93
|
+
var n = Number.parseFloat(val);
|
|
94
|
+
return Number.isNaN(n) ? val : n;
|
|
95
|
+
};
|