@tendaui/components 1.0.0
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/LICENSE +21 -0
- package/README.md +176 -0
- package/alert/Alert.tsx +147 -0
- package/alert/defaultProps.ts +3 -0
- package/alert/index.ts +9 -0
- package/alert/style/css.js +1 -0
- package/alert/style/index.js +1 -0
- package/alert/type.ts +44 -0
- package/badge/Badge.tsx +85 -0
- package/badge/defaultProps.ts +10 -0
- package/badge/index.ts +9 -0
- package/badge/style/css.js +1 -0
- package/badge/style/index.js +1 -0
- package/badge/type.ts +51 -0
- package/button/Button.tsx +95 -0
- package/button/defaultProps.ts +13 -0
- package/button/index.ts +7 -0
- package/button/style/css.js +1 -0
- package/button/style/index.js +1 -0
- package/button/type.ts +82 -0
- package/checkbox/Checkbox.tsx +19 -0
- package/checkbox/CheckboxGroup.tsx +207 -0
- package/checkbox/defaultProps.ts +14 -0
- package/checkbox/index.ts +10 -0
- package/checkbox/style/css.js +1 -0
- package/checkbox/style/index.js +1 -0
- package/checkbox/type.ts +117 -0
- package/common/Check.tsx +131 -0
- package/common/FakeArrow.tsx +36 -0
- package/common/PluginContainer.tsx +21 -0
- package/common/Portal.tsx +67 -0
- package/common.ts +76 -0
- package/config-provider/ConfigContext.tsx +21 -0
- package/config-provider/ConfigProvider.tsx +53 -0
- package/config-provider/index.ts +9 -0
- package/config-provider/type.ts +1062 -0
- package/dialog/Dialog.tsx +254 -0
- package/dialog/DialogCard.tsx +152 -0
- package/dialog/defaultProps.ts +25 -0
- package/dialog/hooks/useDialogDrag.ts +50 -0
- package/dialog/hooks/useDialogEsc.ts +31 -0
- package/dialog/hooks/useDialogPosition.ts +36 -0
- package/dialog/hooks/useLockStyle.ts +54 -0
- package/dialog/index.ts +13 -0
- package/dialog/plugin.tsx +78 -0
- package/dialog/style/css.js +1 -0
- package/dialog/style/index.js +1 -0
- package/dialog/type.ts +241 -0
- package/dialog/utils.ts +4 -0
- package/form/Form.tsx +136 -0
- package/form/FormContext.tsx +64 -0
- package/form/FormItem.tsx +554 -0
- package/form/FormList.tsx +303 -0
- package/form/const.ts +6 -0
- package/form/defaultProps.ts +26 -0
- package/form/formModel.ts +117 -0
- package/form/hooks/interface.ts +20 -0
- package/form/hooks/useForm.ts +122 -0
- package/form/hooks/useFormItemInitialData.ts +95 -0
- package/form/hooks/useFormItemStyle.tsx +122 -0
- package/form/hooks/useInstance.tsx +275 -0
- package/form/hooks/useWatch.ts +42 -0
- package/form/index.ts +11 -0
- package/form/style/css.js +1 -0
- package/form/style/index.js +1 -0
- package/form/type.ts +519 -0
- package/form/utils/index.ts +69 -0
- package/hooks/useAttach.ts +24 -0
- package/hooks/useCommonClassName.ts +45 -0
- package/hooks/useConfig.ts +3 -0
- package/hooks/useControlled.ts +39 -0
- package/hooks/useDefaultProps.ts +16 -0
- package/hooks/useDomCallback.ts +13 -0
- package/hooks/useDomRefCallback.ts +12 -0
- package/hooks/useDragSorter.tsx +151 -0
- package/hooks/useEventCallback.ts +47 -0
- package/hooks/useGlobalConfig.ts +14 -0
- package/hooks/useGlobalIcon.ts +14 -0
- package/hooks/useLastest.ts +13 -0
- package/hooks/useLayoutEffect.ts +7 -0
- package/hooks/useMouseEvent.ts +142 -0
- package/hooks/useMutationObserver.ts +56 -0
- package/hooks/usePopper.ts +189 -0
- package/hooks/useRipple.ts +0 -0
- package/hooks/useSetState.ts +25 -0
- package/hooks/useVirtualScroll.ts +246 -0
- package/hooks/useWindowSize.ts +31 -0
- package/index.ts +70 -0
- package/input/Input.tsx +383 -0
- package/input/InputGroup.tsx +29 -0
- package/input/defaultProps.ts +22 -0
- package/input/index.ts +11 -0
- package/input/style/css.js +1 -0
- package/input/style/index.js +1 -0
- package/input/type.ts +219 -0
- package/loading/Gradient.tsx +36 -0
- package/loading/Loading.tsx +169 -0
- package/loading/circleAdapter.ts +44 -0
- package/loading/defaultProps.ts +12 -0
- package/loading/index.ts +13 -0
- package/loading/style/css.js +1 -0
- package/loading/style/index.js +1 -0
- package/loading/type.ts +71 -0
- package/loading/utils/setStyle.ts +13 -0
- package/myform/index.ts +0 -0
- package/notification/Notify.ts +24 -0
- package/notification/NotifyContainer.tsx +90 -0
- package/notification/NotifyContext.tsx +173 -0
- package/notification/NotifyItem.tsx +121 -0
- package/notification/index.ts +3 -0
- package/notification/style/css.js +1 -0
- package/notification/style/index.js +1 -0
- package/notification/type.ts +23 -0
- package/package.json +52 -0
- package/popup/Popup.tsx +264 -0
- package/popup/defaultProps.ts +13 -0
- package/popup/hooks/useTrigger.ts +276 -0
- package/popup/index.ts +6 -0
- package/popup/style/css.js +1 -0
- package/popup/style/index.js +1 -0
- package/popup/type.ts +130 -0
- package/portal/Portal.tsx +63 -0
- package/portal/index.ts +1 -0
- package/select/Option.tsx +162 -0
- package/select/OptionGroup.tsx +30 -0
- package/select/PopupContent.tsx +271 -0
- package/select/Select.tsx +586 -0
- package/select/defaultProps.ts +27 -0
- package/select/hooks/useOptions.ts +120 -0
- package/select/hooks/usePanelVirtualScroll.ts +111 -0
- package/select/index.ts +9 -0
- package/select/style/css.js +1 -0
- package/select/style/index.js +2 -0
- package/select/type.ts +382 -0
- package/select/utils/helper.ts +256 -0
- package/select-input/SelectInput.tsx +98 -0
- package/select-input/defaultProps.ts +15 -0
- package/select-input/hook/useMultiple.tsx +100 -0
- package/select-input/hook/useOverlayInnerStyle.ts +84 -0
- package/select-input/hook/useSingle.tsx +112 -0
- package/select-input/index.ts +6 -0
- package/select-input/interface.ts +18 -0
- package/select-input/style/css.js +1 -0
- package/select-input/style/index.js +1 -0
- package/select-input/type.ts +280 -0
- package/space/defaultProps.ts +0 -0
- package/space/index.ts +0 -0
- package/space/type.ts +0 -0
- package/style/index.js +2 -0
- package/styles/_global.scss +39 -0
- package/styles/_vars.scss +386 -0
- package/styles/components/alert/_index.scss +175 -0
- package/styles/components/alert/_vars.scss +39 -0
- package/styles/components/badge/_index.scss +70 -0
- package/styles/components/badge/_vars.scss +25 -0
- package/styles/components/button/_index.scss +511 -0
- package/styles/components/button/_mixins.scss +39 -0
- package/styles/components/button/_vars.scss +122 -0
- package/styles/components/checkbox/_index.scss +158 -0
- package/styles/components/checkbox/_mixin.scss +0 -0
- package/styles/components/checkbox/_var.scss +60 -0
- package/styles/components/dialog/_animate.scss +135 -0
- package/styles/components/dialog/_index.scss +311 -0
- package/styles/components/dialog/_mixins.scss +0 -0
- package/styles/components/dialog/_vars.scss +59 -0
- package/styles/components/form/_index.scss +174 -0
- package/styles/components/form/_mixins.scss +76 -0
- package/styles/components/form/_vars.scss +100 -0
- package/styles/components/input/_index.scss +349 -0
- package/styles/components/input/_map.scss +0 -0
- package/styles/components/input/_mixins.scss +116 -0
- package/styles/components/input/_vars.scss +134 -0
- package/styles/components/loading/_index.scss +112 -0
- package/styles/components/loading/_vars.scss +39 -0
- package/styles/components/notification/_index.scss +160 -0
- package/styles/components/notification/_mixins.scss +12 -0
- package/styles/components/notification/_vars.scss +59 -0
- package/styles/components/popup/_index.scss +82 -0
- package/styles/components/popup/_mixin.scss +149 -0
- package/styles/components/popup/_var.scss +31 -0
- package/styles/components/select/_index.scss +290 -0
- package/styles/components/select/_var.scss +65 -0
- package/styles/components/select-input/_index.scss +5 -0
- package/styles/components/select-input/_var.scss +3 -0
- package/styles/components/switch/_index.scss +279 -0
- package/styles/components/switch/_mixins.scss +0 -0
- package/styles/components/switch/_vars.scss +61 -0
- package/styles/components/tag/_index.scss +316 -0
- package/styles/components/tag/_var.scss +85 -0
- package/styles/components/tag-input/_index.scss +163 -0
- package/styles/components/tag-input/_vars.scss +16 -0
- package/styles/globals.css +250 -0
- package/styles/mixins/_focus.scss +7 -0
- package/styles/mixins/_layout.scss +32 -0
- package/styles/mixins/_reset.scss +10 -0
- package/styles/mixins/_scrollbar.scss +31 -0
- package/styles/mixins/_text.scss +48 -0
- package/styles/rillple.css +16 -0
- package/styles/scrollbar.css +42 -0
- package/styles/themes/_dark.scss +191 -0
- package/styles/themes/_font.scss +79 -0
- package/styles/themes/_index.scss +5 -0
- package/styles/themes/_light.scss +190 -0
- package/styles/themes/_radius.scss +9 -0
- package/styles/themes/_size.scss +68 -0
- package/styles/themes.css +66 -0
- package/styles/utilities/_animation.scss +57 -0
- package/styles/utilities/_tips.scss +9 -0
- package/switch/Switch.tsx +120 -0
- package/switch/defaultProps.ts +3 -0
- package/switch/index.ts +7 -0
- package/switch/style/css.js +1 -0
- package/switch/style/index.js +1 -0
- package/switch/type.ts +46 -0
- package/tag/Tag.tsx +149 -0
- package/tag/defaultProps.ts +19 -0
- package/tag/index.ts +8 -0
- package/tag/style/css.js +1 -0
- package/tag/style/index.js +1 -0
- package/tag/type.ts +170 -0
- package/tag-input/TagInput.tsx +215 -0
- package/tag-input/defaultProps.ts +15 -0
- package/tag-input/hooks/useHover.ts +28 -0
- package/tag-input/hooks/useTagList.tsx +131 -0
- package/tag-input/hooks/useTagScroll.ts +105 -0
- package/tag-input/index.ts +9 -0
- package/tag-input/style/css.js +1 -0
- package/tag-input/style/index.js +1 -0
- package/tag-input/type.ts +224 -0
- package/tag-input/useTagList.tsx +131 -0
- package/utils/composeRefs.ts +14 -0
- package/utils/dom.ts +29 -0
- package/utils/forwardRefWithStatics.ts +12 -0
- package/utils/getScrollbarWidth.ts +11 -0
- package/utils/helper.ts +161 -0
- package/utils/isFragment.ts +22 -0
- package/utils/listener.ts +37 -0
- package/utils/noop.ts +3 -0
- package/utils/parentTNode.ts +38 -0
- package/utils/parseTNode.ts +38 -0
- package/utils/react-render.ts +108 -0
- package/utils/ref.ts +6 -0
- package/utils/refs.ts +81 -0
- package/utils/style.ts +60 -0
- package/utils/transition.ts +28 -0
package/form/type.ts
ADDED
|
@@ -0,0 +1,519 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
import { IsEmailOptions } from 'validator/es/lib/isEmail';
|
|
5
|
+
import { IsURLOptions } from 'validator/es/lib/isURL';
|
|
6
|
+
import { TNode, FormResetEvent, FormSubmitEvent } from '../common';
|
|
7
|
+
|
|
8
|
+
export interface TdFormProps<FormData extends Data = Data> {
|
|
9
|
+
/**
|
|
10
|
+
* 是否在表单标签字段右侧显示冒号
|
|
11
|
+
* @default false
|
|
12
|
+
*/
|
|
13
|
+
colon?: boolean;
|
|
14
|
+
/**
|
|
15
|
+
* 是否禁用整个表单
|
|
16
|
+
*/
|
|
17
|
+
disabled?: boolean;
|
|
18
|
+
/**
|
|
19
|
+
* 表单错误信息配置,示例:`{ idcard: '请输入正确的身份证号码', max: '字符长度不能超过 ${max}' }`
|
|
20
|
+
*/
|
|
21
|
+
errorMessage?: FormErrorMessage;
|
|
22
|
+
/**
|
|
23
|
+
* 经 `Form.useForm()` 创建的 form 控制实例
|
|
24
|
+
*/
|
|
25
|
+
form?: FormInstanceFunctions;
|
|
26
|
+
/**
|
|
27
|
+
* 允许表单统一控制禁用状态的自定义组件名称列表。默认会有组件库的全部输入类组件:TInput、TInputNumber、TCascader、TSelect、TOption、TSwitch、TCheckbox、TCheckboxGroup、TRadio、TRadioGroup、TTreeSelect、TDatePicker、TTimePicker、TUpload、TTransfer、TSlider。对于自定义组件,组件内部需要包含可以控制表单禁用状态的变量 `formDisabled`。示例:`['CustomUpload', 'CustomInput']`
|
|
28
|
+
*/
|
|
29
|
+
formControlledComponents?: Array<string>;
|
|
30
|
+
/**
|
|
31
|
+
* 表单原生的id属性,支持用于配合非表单内的按钮通过form属性来触发表单事件
|
|
32
|
+
*/
|
|
33
|
+
id?: string;
|
|
34
|
+
/**
|
|
35
|
+
* 表单初始数据,重置时所需初始数据,优先级小于 FormItem 设置的 initialData
|
|
36
|
+
*/
|
|
37
|
+
initialData?: object;
|
|
38
|
+
/**
|
|
39
|
+
* 表单字段标签对齐方式:左对齐、右对齐、顶部对齐
|
|
40
|
+
* @default right
|
|
41
|
+
*/
|
|
42
|
+
labelAlign?: 'left' | 'right' | 'top';
|
|
43
|
+
/**
|
|
44
|
+
* 可以整体设置label标签宽度,默认为100px
|
|
45
|
+
* @default '100px'
|
|
46
|
+
*/
|
|
47
|
+
labelWidth?: string | number;
|
|
48
|
+
/**
|
|
49
|
+
* 表单布局,有两种方式:纵向布局 和 行内布局
|
|
50
|
+
* @default vertical
|
|
51
|
+
*/
|
|
52
|
+
layout?: 'vertical' | 'inline';
|
|
53
|
+
/**
|
|
54
|
+
* 是否阻止表单提交默认事件(表单提交默认事件会刷新页面),设置为 `true` 可以避免刷新
|
|
55
|
+
* @default true
|
|
56
|
+
*/
|
|
57
|
+
preventSubmitDefault?: boolean;
|
|
58
|
+
/**
|
|
59
|
+
* 是否显示必填符号(*),默认显示
|
|
60
|
+
*/
|
|
61
|
+
requiredMark?: boolean;
|
|
62
|
+
/**
|
|
63
|
+
* 表单必填符号(*)显示位置
|
|
64
|
+
*/
|
|
65
|
+
requiredMarkPosition?: 'left' | 'right';
|
|
66
|
+
/**
|
|
67
|
+
* 重置表单的方式,值为 empty 表示重置表单为空,值为 initial 表示重置表单数据为初始值
|
|
68
|
+
* @default empty
|
|
69
|
+
*/
|
|
70
|
+
resetType?: 'empty' | 'initial';
|
|
71
|
+
/**
|
|
72
|
+
* 表单字段校验规则
|
|
73
|
+
*/
|
|
74
|
+
rules?: FormRules<FormData>;
|
|
75
|
+
/**
|
|
76
|
+
* 表单校验不通过时,是否自动滚动到第一个校验不通过的字段,平滑滚动或是瞬间直达。值为空则表示不滚动
|
|
77
|
+
*/
|
|
78
|
+
scrollToFirstError?: '' | 'smooth' | 'auto';
|
|
79
|
+
/**
|
|
80
|
+
* 校验不通过时,是否显示错误提示信息,统一控制全部表单项。如果希望控制单个表单项,请给 FormItem 设置该属性
|
|
81
|
+
* @default true
|
|
82
|
+
*/
|
|
83
|
+
showErrorMessage?: boolean;
|
|
84
|
+
/**
|
|
85
|
+
* 校验状态图标,值为 `true` 显示默认图标,默认图标有 成功、失败、警告 等,不同的状态图标不同。`statusIcon` 值为 `false`,不显示图标。`statusIcon` 值类型为渲染函数,则可以自定义右侧状态图标
|
|
86
|
+
*/
|
|
87
|
+
statusIcon?: boolean | TNode<TdFormItemProps>;
|
|
88
|
+
/**
|
|
89
|
+
* 【讨论中】当校验结果只有告警信息时,是否触发 `submit` 提交事件
|
|
90
|
+
* @default false
|
|
91
|
+
*/
|
|
92
|
+
submitWithWarningMessage?: boolean;
|
|
93
|
+
/**
|
|
94
|
+
* 是否支持使用数字作为表单键值,在1.9.3版本后表单组件支持数字作为键值,若仍需要保留数字作为数组下标,请关闭此API
|
|
95
|
+
* @default true
|
|
96
|
+
*/
|
|
97
|
+
supportNumberKey?: boolean;
|
|
98
|
+
/**
|
|
99
|
+
* 表单重置时触发
|
|
100
|
+
*/
|
|
101
|
+
onReset?: (context: { e?: FormResetEvent }) => void;
|
|
102
|
+
/**
|
|
103
|
+
* 表单提交时触发。其中 `context.validateResult` 表示校验结果,`context.firstError` 表示校验不通过的第一个规则提醒。`context.validateResult` 值为 `true` 表示校验通过;如果校验不通过,`context.validateResult` 值为校验结果列表。<br />【注意】⚠️ 默认情况,输入框按下 Enter 键会自动触发提交事件,如果希望禁用这个默认行为,可以给输入框添加 enter 事件,并在事件中设置 `e.preventDefault()`
|
|
104
|
+
*/
|
|
105
|
+
onSubmit?: (context: SubmitContext<FormData>) => void;
|
|
106
|
+
/**
|
|
107
|
+
* 字段值更新时触发的回调事件
|
|
108
|
+
*/
|
|
109
|
+
onValuesChange?: (
|
|
110
|
+
changedValues: Record<string, unknown>,
|
|
111
|
+
allValues: Record<string, unknown>,
|
|
112
|
+
) => void;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/** 组件实例方法 */
|
|
116
|
+
export interface FormInstanceFunctions<FormData extends Data = Data> {
|
|
117
|
+
/**
|
|
118
|
+
* 清空校验结果。可使用 fields 指定清除部分字段的校验结果,fields 值为空则表示清除所有字段校验结果。清除邮箱校验结果示例:`clearValidate(['email'])`
|
|
119
|
+
*/
|
|
120
|
+
clearValidate: (fields?: Array<keyof FormData>) => void;
|
|
121
|
+
/**
|
|
122
|
+
* 获取 form dom 元素
|
|
123
|
+
*/
|
|
124
|
+
currentElement?: HTMLFormElement;
|
|
125
|
+
/**
|
|
126
|
+
* 获取 form dom 元素
|
|
127
|
+
*/
|
|
128
|
+
getCurrentElement?: () => HTMLFormElement;
|
|
129
|
+
/**
|
|
130
|
+
* 获取单个字段值
|
|
131
|
+
*/
|
|
132
|
+
getFieldValue: (field: NamePath) => unknown;
|
|
133
|
+
/**
|
|
134
|
+
* 获取一组字段名对应的值,当调用 getFieldsValue(true) 时返回所有表单数据
|
|
135
|
+
*/
|
|
136
|
+
getFieldsValue: getFieldsValue<FormData>;
|
|
137
|
+
/**
|
|
138
|
+
* 重置表单,表单里面没有重置按钮`<button type=\"reset\" />`时可以使用该方法,默认重置全部字段为空,该方法会触发 `reset` 事件。<br />如果表单属性 `resetType='empty'` 或者 `reset.type='empty'` 会重置为空;<br />如果表单属性 `resetType='initial'` 或者 `reset.type='initial'` 会重置为表单初始值。<br />`reset.fields` 用于设置具体重置哪些字段,示例:`reset({ type: 'initial', fields: ['name', 'age'] })`
|
|
139
|
+
*/
|
|
140
|
+
reset: (params?: FormResetParams<FormData>) => void;
|
|
141
|
+
/**
|
|
142
|
+
* 设置多组字段状态
|
|
143
|
+
*/
|
|
144
|
+
setFields: (fields: FieldData[]) => void;
|
|
145
|
+
/**
|
|
146
|
+
* 设置表单字段值
|
|
147
|
+
*/
|
|
148
|
+
setFieldsValue: (field: Data) => void;
|
|
149
|
+
/**
|
|
150
|
+
* 设置自定义校验结果,如远程校验信息直接呈现。注意需要在组件挂载结束后使用该方法。`FormData` 指表单数据泛型
|
|
151
|
+
*/
|
|
152
|
+
setValidateMessage: (message: FormValidateMessage<FormData>) => void;
|
|
153
|
+
/**
|
|
154
|
+
* 获取校验结果
|
|
155
|
+
*/
|
|
156
|
+
getValidateMessage: (
|
|
157
|
+
fields?: Array<keyof FormData>,
|
|
158
|
+
) => Array<FormRule> | void;
|
|
159
|
+
/**
|
|
160
|
+
* 提交表单,表单里面没有提交按钮`<button type=\"submit\" />`时可以使用该方法。`showErrorMessage` 表示是否在提交校验不通过时显示校验不通过的原因,默认显示。该方法会触发 `submit` 事件
|
|
161
|
+
*/
|
|
162
|
+
submit: (params?: { showErrorMessage?: boolean }) => void;
|
|
163
|
+
/**
|
|
164
|
+
* 校验函数,包含错误文本提示等功能。泛型 `FormData` 表示表单数据 TS 类型。<br/>【关于参数】`params.fields` 表示校验字段,如果设置了 `fields`,本次校验将仅对这些字段进行校验。`params.trigger` 表示本次触发校验的范围,'params.trigger = blur' 表示只触发校验规则设定为 trigger='blur' 的字段,'params.trigger = change' 表示只触发校验规则设定为 trigger='change' 的字段,默认触发全范围校验。`params.showErrorMessage` 表示校验结束后是否显示错误文本提示,默认显示。<br />【关于返回值】返回值为 true 表示校验通过;如果校验不通过,返回值为校验结果列表
|
|
165
|
+
*/
|
|
166
|
+
validate: (
|
|
167
|
+
params?: FormValidateParams,
|
|
168
|
+
) => Promise<FormValidateResult<FormData>>;
|
|
169
|
+
/**
|
|
170
|
+
* 纯净的校验函数,仅返回校验结果,不对组件进行任何操作。泛型 `FormData` 表示表单数据 TS 类型。参数和返回值含义同 `validate` 方法
|
|
171
|
+
*/
|
|
172
|
+
validateOnly: (
|
|
173
|
+
params?: Pick<FormValidateParams, 'fields' | 'trigger'>,
|
|
174
|
+
) => Promise<FormValidateResult<FormData>>;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
export interface TdFormItemProps {
|
|
178
|
+
/**
|
|
179
|
+
* label 原生属性
|
|
180
|
+
* @default ''
|
|
181
|
+
*/
|
|
182
|
+
for?: string;
|
|
183
|
+
/**
|
|
184
|
+
* 表单项说明内容
|
|
185
|
+
*/
|
|
186
|
+
help?: TNode;
|
|
187
|
+
/**
|
|
188
|
+
* 表单初始数据,重置时所需初始数据
|
|
189
|
+
*/
|
|
190
|
+
initialData?: InitialData;
|
|
191
|
+
/**
|
|
192
|
+
* 字段标签名称
|
|
193
|
+
* @default ''
|
|
194
|
+
*/
|
|
195
|
+
label?: TNode;
|
|
196
|
+
/**
|
|
197
|
+
* 表单字段标签对齐方式:左对齐、右对齐、顶部对齐。默认使用 Form 的对齐方式,优先级高于 Form.labelAlign
|
|
198
|
+
*/
|
|
199
|
+
labelAlign?: 'left' | 'right' | 'top';
|
|
200
|
+
/**
|
|
201
|
+
* 可以整体设置标签宽度,优先级高于 Form.labelWidth
|
|
202
|
+
*/
|
|
203
|
+
labelWidth?: string | number;
|
|
204
|
+
/**
|
|
205
|
+
* 表单字段名称
|
|
206
|
+
*/
|
|
207
|
+
name?: NamePath;
|
|
208
|
+
/**
|
|
209
|
+
* 是否显示必填符号(*),优先级高于 Form.requiredMark
|
|
210
|
+
*/
|
|
211
|
+
requiredMark?: boolean;
|
|
212
|
+
/**
|
|
213
|
+
* 表单字段校验规则
|
|
214
|
+
*/
|
|
215
|
+
rules?: Array<FormRule>;
|
|
216
|
+
/**
|
|
217
|
+
* null
|
|
218
|
+
* @default false
|
|
219
|
+
*/
|
|
220
|
+
shouldUpdate?: boolean | ((prevValue, curValue) => boolean);
|
|
221
|
+
/**
|
|
222
|
+
* 校验不通过时,是否显示错误提示信息,优先级高于 `Form.showErrorMessage`
|
|
223
|
+
*/
|
|
224
|
+
showErrorMessage?: boolean;
|
|
225
|
+
/**
|
|
226
|
+
* 校验状态,可在需要完全自主控制校验状态时使用
|
|
227
|
+
* @default ''
|
|
228
|
+
*/
|
|
229
|
+
status?: 'error' | 'warning' | 'success' | 'validating';
|
|
230
|
+
/**
|
|
231
|
+
* 校验状态图标,值为 `true` 显示默认图标,默认图标有 成功、失败、警告 等,不同的状态图标不同。`statusIcon` 值为 `false`,不显示图标。`statusIcon` 值类型为渲染函数,则可以自定义右侧状态图标。优先级高级 Form 的 statusIcon
|
|
232
|
+
*/
|
|
233
|
+
statusIcon?: TNode;
|
|
234
|
+
/**
|
|
235
|
+
* 是否显示校验成功的边框,默认不显示
|
|
236
|
+
* @default false
|
|
237
|
+
*/
|
|
238
|
+
successBorder?: boolean;
|
|
239
|
+
/**
|
|
240
|
+
* 自定义提示内容,样式跟随 `status` 变动,可在需要完全自主控制校验规则时使用
|
|
241
|
+
*/
|
|
242
|
+
tips?: TNode;
|
|
243
|
+
/**
|
|
244
|
+
* 当用户交互产生数据变化时触发,用于格式化数据
|
|
245
|
+
*/
|
|
246
|
+
valueFormat?: FormItemFormatType;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
export interface TdFormListProps {
|
|
250
|
+
/**
|
|
251
|
+
* 渲染函数
|
|
252
|
+
*/
|
|
253
|
+
children?: (
|
|
254
|
+
fields: FormListField[],
|
|
255
|
+
operation: FormListFieldOperation,
|
|
256
|
+
) => React.ReactNode;
|
|
257
|
+
/**
|
|
258
|
+
* 设置子元素默认值,如果与 FormItem 的 initialData 冲突则以 FormItem 为准
|
|
259
|
+
*/
|
|
260
|
+
initialData?: Array<any>;
|
|
261
|
+
/**
|
|
262
|
+
* 表单字段名称
|
|
263
|
+
*/
|
|
264
|
+
name?: NamePath;
|
|
265
|
+
/**
|
|
266
|
+
* 表单字段校验规则
|
|
267
|
+
*/
|
|
268
|
+
rules?: { [field in keyof FormData]: Array<FormRule> } | Array<FormRule>;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
export interface FormRule {
|
|
272
|
+
/**
|
|
273
|
+
* 内置校验方法,校验值类型是否为布尔类型,示例:`{ boolean: true, message: '数据类型必须是布尔类型' }`
|
|
274
|
+
*/
|
|
275
|
+
boolean?: boolean;
|
|
276
|
+
/**
|
|
277
|
+
* 内置校验方法,校验值是否为日期格式,[参数文档](https://github.com/validatorjs/validator.js),示例:`{ date: { delimiters: '-' }, message: '日期分隔线必须是短横线(-)' }`
|
|
278
|
+
*/
|
|
279
|
+
date?: boolean | IsDateOptions;
|
|
280
|
+
/**
|
|
281
|
+
* 内置校验方法,校验值是否为邮件格式,[参数文档](https://github.com/validatorjs/validator.js),示例:`{ email: { ignore_max_length: true }, message: '请输入正确的邮箱地址' }`
|
|
282
|
+
*/
|
|
283
|
+
email?: boolean | IsEmailOptions;
|
|
284
|
+
/**
|
|
285
|
+
* 内置校验方法,校验值是否属于枚举值中的值。示例:`{ enum: ['primary', 'info', 'warning'], message: '值只能是 primary/info/warning 中的一种' }`
|
|
286
|
+
*/
|
|
287
|
+
enum?: Array<string>;
|
|
288
|
+
/**
|
|
289
|
+
* 内置校验方法,校验值是否为身份证号码,组件校验正则为 `/^(\\d{18,18}|\\d{15,15}|\\d{17,17}x)$/i`,示例:`{ idcard: true, message: '请输入正确的身份证号码' }`
|
|
290
|
+
*/
|
|
291
|
+
idcard?: boolean;
|
|
292
|
+
/**
|
|
293
|
+
* 内置校验方法,校验值固定长度,如:len: 10 表示值的字符长度只能等于 10 ,中文表示 2 个字符,英文为 1 个字符。示例:`{ len: 10, message: '内容长度不对' }`。<br />如果希望字母和中文都是同样的长度,示例:`{ validator: (val) => val.length === 10, message: '内容文本长度只能是 10 个字' }`
|
|
294
|
+
*/
|
|
295
|
+
len?: number | boolean;
|
|
296
|
+
/**
|
|
297
|
+
* 内置校验方法,校验值最大长度,如:max: 100 表示值最多不能超过 100 个字符,中文表示 2 个字符,英文为 1 个字符。示例:`{ max: 10, message: '内容超出' }`。<br />如果希望字母和中文都是同样的长度,示例:`{ validator: (val) => val.length <= 10, message: '内容文本长度不能超过 10 个字' }`<br />如果数据类型数字(Number),则自动变为数字大小的比对
|
|
298
|
+
*/
|
|
299
|
+
max?: number | boolean;
|
|
300
|
+
/**
|
|
301
|
+
* 校验未通过时呈现的错误信息,值为空则不显示
|
|
302
|
+
* @default ''
|
|
303
|
+
*/
|
|
304
|
+
message?: string;
|
|
305
|
+
/**
|
|
306
|
+
* 内置校验方法,校验值最小长度,如:min: 10 表示值最多不能少于 10 个字符,中文表示 2 个字符,英文为 1 个字符。示例:`{ min: 10, message: '内容长度不够' }`。<br />如果希望字母和中文都是同样的长度,示例:`{ validator: (val) => val.length >= 10, message: '内容文本长度至少为 10 个字' }`。<br />如果数据类型数字(Number),则自动变为数字大小的比对
|
|
307
|
+
*/
|
|
308
|
+
min?: number | boolean;
|
|
309
|
+
/**
|
|
310
|
+
* 内置校验方法,校验值是否为数字(1.2 、 1e5 都算数字),示例:`{ number: true, message: '请输入数字' }`
|
|
311
|
+
*/
|
|
312
|
+
number?: boolean;
|
|
313
|
+
/**
|
|
314
|
+
* 内置校验方法,校验值是否符合正则表达式匹配结果,示例:`{ pattern: /@qq.com/, message: '请输入 QQ 邮箱' }`
|
|
315
|
+
*/
|
|
316
|
+
pattern?: RegExp;
|
|
317
|
+
/**
|
|
318
|
+
* 内置校验方法,校验值是否已经填写。该值为 true,默认显示必填标记,可通过设置 `requiredMark: false` 隐藏必填标记
|
|
319
|
+
*/
|
|
320
|
+
required?: boolean;
|
|
321
|
+
/**
|
|
322
|
+
* 内置校验方法,校验值是否为手机号码,校验正则为 `/^1[3-9]\d{9}$/`,示例:`{ telnumber: true, message: '请输入正确的手机号码' }`
|
|
323
|
+
*/
|
|
324
|
+
telnumber?: boolean;
|
|
325
|
+
/**
|
|
326
|
+
* 校验触发方式
|
|
327
|
+
* @default change
|
|
328
|
+
*/
|
|
329
|
+
trigger?: ValidateTriggerType;
|
|
330
|
+
/**
|
|
331
|
+
* 校验未通过时呈现的错误信息类型,有 告警信息提示 和 错误信息提示 等两种
|
|
332
|
+
* @default error
|
|
333
|
+
*/
|
|
334
|
+
type?: 'error' | 'warning';
|
|
335
|
+
/**
|
|
336
|
+
* 内置校验方法,校验值是否为网络链接地址,[参数文档](https://github.com/validatorjs/validator.js),示例:`{ url: { protocols: ['http','https','ftp'] }, message: '请输入正确的 Url 地址' }`
|
|
337
|
+
*/
|
|
338
|
+
url?: boolean | IsURLOptions;
|
|
339
|
+
/**
|
|
340
|
+
* 自定义校验规则,示例:`{ validator: (val) => val.length > 0, message: '请输入内容'}`
|
|
341
|
+
*/
|
|
342
|
+
validator?: CustomValidator;
|
|
343
|
+
/**
|
|
344
|
+
* 内置校验方法,校验值是否为空格。示例:`{ whitespace: true, message: '值不能为空' }`
|
|
345
|
+
*/
|
|
346
|
+
whitespace?: boolean;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
export interface FormErrorMessage {
|
|
350
|
+
/**
|
|
351
|
+
* 布尔类型校验不通过时的表单项显示文案,全局配置默认是:`'${name}数据类型必须是布尔类型'`
|
|
352
|
+
* @default ''
|
|
353
|
+
*/
|
|
354
|
+
boolean?: string;
|
|
355
|
+
/**
|
|
356
|
+
* 日期校验规则不通过时的表单项显示文案,全局配置默认是:`'请输入正确的${name}'`
|
|
357
|
+
* @default ''
|
|
358
|
+
*/
|
|
359
|
+
date?: string;
|
|
360
|
+
/**
|
|
361
|
+
* 枚举值校验规则不通过时的表单项显示文案,全局配置默认是:`${name}只能是${validate}等`
|
|
362
|
+
* @default ''
|
|
363
|
+
*/
|
|
364
|
+
enum?: string;
|
|
365
|
+
/**
|
|
366
|
+
* 身份证号码校验不通过时的表单项显示文案,全局配置默认是:`'请输入正确的${name}'`
|
|
367
|
+
* @default ''
|
|
368
|
+
*/
|
|
369
|
+
idcard?: string;
|
|
370
|
+
/**
|
|
371
|
+
* 值长度校验不通过时的表单项显示文案,全局配置默认是:`'${name}字符长度必须是 ${validate}'`
|
|
372
|
+
* @default ''
|
|
373
|
+
*/
|
|
374
|
+
len?: string;
|
|
375
|
+
/**
|
|
376
|
+
* 值的长度太长或值本身太大时,校验不通过的表单项显示文案,全局配置默认是:`'${name}字符长度不能超过 ${validate} 个字符,一个中文等于两个字符'`
|
|
377
|
+
* @default ''
|
|
378
|
+
*/
|
|
379
|
+
max?: string;
|
|
380
|
+
/**
|
|
381
|
+
* 值的长度太短或值本身太小时,校验不通过的表单项显示文案,全局配置默认是:`'${name}字符长度不能少于 ${validate} 个字符,一个中文等于两个字符'`
|
|
382
|
+
* @default ''
|
|
383
|
+
*/
|
|
384
|
+
min?: string;
|
|
385
|
+
/**
|
|
386
|
+
* 数字类型校验不通过时的表单项显示文案,全局配置默认是:`'${name}必须是数字'`
|
|
387
|
+
* @default ''
|
|
388
|
+
*/
|
|
389
|
+
number?: string;
|
|
390
|
+
/**
|
|
391
|
+
* 正则表达式校验不通过时的表单项显示文案,全局配置默认是:`'请输入正确的${name}'`
|
|
392
|
+
* @default ''
|
|
393
|
+
*/
|
|
394
|
+
pattern?: string;
|
|
395
|
+
/**
|
|
396
|
+
* 没有填写必填项时的表单项显示文案,全局配置默认是:`'${name}必填'`
|
|
397
|
+
* @default ''
|
|
398
|
+
*/
|
|
399
|
+
required?: string;
|
|
400
|
+
/**
|
|
401
|
+
* 手机号号码校验不通过时的表单项显示文案,全局配置默认是:`'请输入正确的${name}'`
|
|
402
|
+
* @default ''
|
|
403
|
+
*/
|
|
404
|
+
telnumber?: string;
|
|
405
|
+
/**
|
|
406
|
+
* 链接校验规则不通过时的表单项显示文案,全局配置默认是:`'请输入正确的${name}'`
|
|
407
|
+
* @default ''
|
|
408
|
+
*/
|
|
409
|
+
url?: string;
|
|
410
|
+
/**
|
|
411
|
+
* 自定义校验规则校验不通过时的表单项显示文案,全局配置默认是:'${name}不符合要求'
|
|
412
|
+
* @default ''
|
|
413
|
+
*/
|
|
414
|
+
validator?: string;
|
|
415
|
+
/**
|
|
416
|
+
* 值为空格校验不通过时表单项显示文案,全局配置默认是:`'${name}不能为空`
|
|
417
|
+
* @default ''
|
|
418
|
+
*/
|
|
419
|
+
whitespace?: string;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
export type FormRules<T extends Data> = {
|
|
423
|
+
[field in keyof T]?: Array<FormRule>;
|
|
424
|
+
};
|
|
425
|
+
|
|
426
|
+
export interface SubmitContext<T extends Data = Data> {
|
|
427
|
+
e?: FormSubmitEvent;
|
|
428
|
+
validateResult: FormValidateResult<T>;
|
|
429
|
+
firstError?: string;
|
|
430
|
+
fields?: any;
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
export type FormValidateResult<T> = boolean | ValidateResultObj<T>;
|
|
434
|
+
|
|
435
|
+
export type ValidateResultObj<T> = {
|
|
436
|
+
[key in keyof T]: boolean | ValidateResultList;
|
|
437
|
+
};
|
|
438
|
+
|
|
439
|
+
export type ValidateResultList = Array<AllValidateResult>;
|
|
440
|
+
|
|
441
|
+
export type AllValidateResult = CustomValidateObj | ValidateResultType;
|
|
442
|
+
|
|
443
|
+
export interface ValidateResultType extends FormRule {
|
|
444
|
+
result: boolean;
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
export type ValidateResult<T> = { [key in keyof T]: boolean | ErrorList };
|
|
448
|
+
|
|
449
|
+
export type ErrorList = Array<FormRule>;
|
|
450
|
+
|
|
451
|
+
export interface getFieldsValue<T> {
|
|
452
|
+
(nameList: true): T;
|
|
453
|
+
(nameList: any[]): Record<keyof T, unknown>;
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
export interface FormResetParams<FormData> {
|
|
457
|
+
type?: 'initial' | 'empty';
|
|
458
|
+
fields?: Array<keyof FormData>;
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
export interface FieldData {
|
|
462
|
+
name: NamePath;
|
|
463
|
+
value?: unknown;
|
|
464
|
+
status?: string;
|
|
465
|
+
validateMessage?: { type?: string; message?: string };
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
export type FormValidateMessage<FormData> = {
|
|
469
|
+
[field in keyof FormData]: FormItemValidateMessage[];
|
|
470
|
+
};
|
|
471
|
+
|
|
472
|
+
export interface FormItemValidateMessage {
|
|
473
|
+
type: 'warning' | 'error';
|
|
474
|
+
message: string;
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
export interface FormValidateParams {
|
|
478
|
+
fields?: Array<string>;
|
|
479
|
+
showErrorMessage?: boolean;
|
|
480
|
+
trigger?: ValidateTriggerType;
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
export type ValidateTriggerType = 'blur' | 'change' | 'submit' | 'all';
|
|
484
|
+
|
|
485
|
+
export type Data = { [key: string]: any };
|
|
486
|
+
|
|
487
|
+
export type FormItemFormatType = (value: any) => any;
|
|
488
|
+
|
|
489
|
+
export type InitialData = any;
|
|
490
|
+
|
|
491
|
+
export type NamePath = string | number | Array<string | number>;
|
|
492
|
+
|
|
493
|
+
export type FormListField = { key: number; name: number; isListField: boolean };
|
|
494
|
+
|
|
495
|
+
export type FormListFieldOperation = {
|
|
496
|
+
add: (defaultValue?: any, insertIndex?: number) => void;
|
|
497
|
+
remove: (index: number | number[]) => void;
|
|
498
|
+
move: (from: number, to: number) => void;
|
|
499
|
+
};
|
|
500
|
+
|
|
501
|
+
export interface IsDateOptions {
|
|
502
|
+
format: string;
|
|
503
|
+
strictMode: boolean;
|
|
504
|
+
delimiters: string[];
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
export type CustomValidator = (
|
|
508
|
+
val: ValueType,
|
|
509
|
+
) => CustomValidateResolveType | Promise<CustomValidateResolveType>;
|
|
510
|
+
|
|
511
|
+
export type CustomValidateResolveType = boolean | CustomValidateObj;
|
|
512
|
+
|
|
513
|
+
export interface CustomValidateObj {
|
|
514
|
+
result: boolean;
|
|
515
|
+
message: string;
|
|
516
|
+
type?: 'error' | 'warning' | 'success';
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
export type ValueType = any;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { has, get, isObject, isArray, isEmpty } from "lodash-es";
|
|
2
|
+
import type { NamePath } from "../type";
|
|
3
|
+
|
|
4
|
+
// 获取 formMap 管理的数据
|
|
5
|
+
export function getMapValue(name: NamePath, formMapRef: React.RefObject<Map<NamePath, React.RefObject<unknown>>>) {
|
|
6
|
+
if (!formMapRef.current) return;
|
|
7
|
+
|
|
8
|
+
// 提取所有 map key
|
|
9
|
+
const mapKeys = [...formMapRef.current.keys()];
|
|
10
|
+
// 转译为字符串后比对 key 兼容数组格式
|
|
11
|
+
const key = mapKeys.find((key) => String(key) === String(name));
|
|
12
|
+
// 拿到 key 引用地址获取 value
|
|
13
|
+
return formMapRef.current.get(key);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
// { user: { name: '' } } => [['user', 'name']]
|
|
17
|
+
// 不处理数组类型
|
|
18
|
+
// { user: [{ name: '' }]} => [['user']]
|
|
19
|
+
export function objectToArray(obj: Record<string | number, unknown>) {
|
|
20
|
+
const result: (string | number)[][] = [];
|
|
21
|
+
|
|
22
|
+
function traverse(current: unknown, path: string[] = []) {
|
|
23
|
+
if (isObject(current) && !isArray(current) && !isEmpty(current)) {
|
|
24
|
+
Object.keys(current).forEach((key) => {
|
|
25
|
+
traverse(current[key], [...path, key]);
|
|
26
|
+
});
|
|
27
|
+
} else {
|
|
28
|
+
result.push(path);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
traverse(obj);
|
|
33
|
+
return result;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// 将数据整理成对象,数组 name 转化嵌套对象: ['user', 'name'] => { user: { name: '' } }
|
|
37
|
+
export function calcFieldValue(name: NamePath, value: unknown, isFormList = true) {
|
|
38
|
+
if (Array.isArray(name)) {
|
|
39
|
+
if (isFormList) {
|
|
40
|
+
const fieldValue = name.reduceRight((prev, curr) => {
|
|
41
|
+
const arr = [];
|
|
42
|
+
if (/^\d+$/.test(String(curr))) arr[curr] = prev;
|
|
43
|
+
return arr.length ? arr : { [curr]: prev };
|
|
44
|
+
}, value);
|
|
45
|
+
return { ...(fieldValue as Record<string, unknown>) };
|
|
46
|
+
}
|
|
47
|
+
return name.reduceRight((prev, curr, currentIndex) => {
|
|
48
|
+
if (currentIndex === name.length - 1) {
|
|
49
|
+
return { [curr]: value };
|
|
50
|
+
}
|
|
51
|
+
return { [curr]: prev };
|
|
52
|
+
}, {});
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return { [name]: value };
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// 通过对象数据类型获取 map 引用: { user: { name: '' } } => formMap.get(['user', 'name'])
|
|
59
|
+
export function travelMapFromObject(
|
|
60
|
+
obj: Record<string, unknown>,
|
|
61
|
+
formMapRef: React.RefObject<Map<NamePath, React.RefObject<unknown>>>,
|
|
62
|
+
callback: (...args: unknown[]) => unknown
|
|
63
|
+
) {
|
|
64
|
+
for (const [mapName, formItemRef] of formMapRef.current.entries()) {
|
|
65
|
+
if (has(obj, mapName)) {
|
|
66
|
+
callback(formItemRef, get(obj, mapName));
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { useMemo } from "react";
|
|
2
|
+
import { AttachNode } from "../common";
|
|
3
|
+
import useConfig from "./useConfig";
|
|
4
|
+
|
|
5
|
+
const defaultAttach = "body";
|
|
6
|
+
/**
|
|
7
|
+
* useAttach
|
|
8
|
+
*
|
|
9
|
+
* 挂载节点 优先级:
|
|
10
|
+
*
|
|
11
|
+
* props attach -> globalConfig.attach.component -> globalConfig.attach -> default = 'body'
|
|
12
|
+
*/
|
|
13
|
+
const useAttach = (name: string, attach: AttachNode | undefined) => {
|
|
14
|
+
const globalConfig = useConfig();
|
|
15
|
+
|
|
16
|
+
const attachVal = useMemo<AttachNode>(
|
|
17
|
+
() => attach || globalConfig?.attach?.[name] || globalConfig?.attach || defaultAttach,
|
|
18
|
+
[name, attach, globalConfig?.attach]
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
return attachVal;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export default useAttach;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { useMemo } from "react";
|
|
2
|
+
import useConfig from "./useConfig";
|
|
3
|
+
|
|
4
|
+
export default function useCommonClassName() {
|
|
5
|
+
const { classPrefix } = useConfig();
|
|
6
|
+
|
|
7
|
+
return useMemo(() => {
|
|
8
|
+
const names = {
|
|
9
|
+
SIZE: {
|
|
10
|
+
default: "",
|
|
11
|
+
xs: `${classPrefix}-size-xs`,
|
|
12
|
+
small: `${classPrefix}-size-s`,
|
|
13
|
+
medium: `${classPrefix}-size-m`,
|
|
14
|
+
large: `${classPrefix}-size-l`,
|
|
15
|
+
xl: `${classPrefix}-size-xl`,
|
|
16
|
+
block: `${classPrefix}-size-full-width`
|
|
17
|
+
},
|
|
18
|
+
STATUS: {
|
|
19
|
+
loading: `${classPrefix}-is-loading`,
|
|
20
|
+
disabled: `${classPrefix}-is-disabled`,
|
|
21
|
+
focused: `${classPrefix}-is-focused`,
|
|
22
|
+
success: `${classPrefix}-is-success`,
|
|
23
|
+
error: `${classPrefix}-is-error`,
|
|
24
|
+
warning: `${classPrefix}-is-warning`,
|
|
25
|
+
selected: `${classPrefix}-is-selected`,
|
|
26
|
+
active: `${classPrefix}-is-active`,
|
|
27
|
+
checked: `${classPrefix}-is-checked`,
|
|
28
|
+
current: `${classPrefix}-is-current`,
|
|
29
|
+
hidden: `${classPrefix}-is-hidden`,
|
|
30
|
+
visible: `${classPrefix}-is-visible`,
|
|
31
|
+
expanded: `${classPrefix}-is-expanded`,
|
|
32
|
+
indeterminate: `${classPrefix}-is-indeterminate`
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
return {
|
|
36
|
+
SIZE: names.SIZE,
|
|
37
|
+
STATUS: names.STATUS,
|
|
38
|
+
sizeClassNames: names.SIZE,
|
|
39
|
+
statusClassNames: names.STATUS,
|
|
40
|
+
classPrefix
|
|
41
|
+
};
|
|
42
|
+
}, [classPrefix]);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export type CommonClassNameType = ReturnType<typeof useCommonClassName>;
|