@tendaui/components 1.2.4 → 1.3.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/_util/scroll.ts +9 -0
- package/alert/_example/base.tsx +13 -0
- package/alert/_example/collapse.tsx +15 -0
- package/badge/_example/base.tsx +10 -0
- package/badge/_example/count.tsx +29 -0
- package/badge/_example/custom-color.tsx +32 -0
- package/badge/_example/dot.tsx +26 -0
- package/badge/_example/max-count.tsx +26 -0
- package/badge/_example/offset.tsx +29 -0
- package/badge/_example/shape.tsx +32 -0
- package/badge/_example/show-zero.tsx +23 -0
- package/badge/_example/size.tsx +35 -0
- package/badge/_example/standalone.tsx +14 -0
- package/badge/_example/text-count.tsx +26 -0
- package/badge/_example/with-button.tsx +23 -0
- package/button/_example/block.tsx +18 -0
- package/button/_example/disabled.tsx +22 -0
- package/button/_example/ghost.tsx +21 -0
- package/button/_example/link.tsx +15 -0
- package/button/_example/loading.tsx +19 -0
- package/button/_example/shape.tsx +18 -0
- package/button/_example/size.tsx +18 -0
- package/button/_example/suffix.tsx +16 -0
- package/button/_example/theme.tsx +14 -0
- package/button/_example/variant-base.tsx +24 -0
- package/button/_example/variant-dashed.tsx +24 -0
- package/button/_example/variant-outline.tsx +24 -0
- package/button/_example/variant-text.tsx +24 -0
- package/checkbox/_example/base.tsx +8 -0
- package/checkbox/_example/controlled.tsx +11 -0
- package/checkbox/_example/group-disabled.tsx +13 -0
- package/checkbox/_example/group-with-check-all.tsx +22 -0
- package/checkbox/_example/group-with-max.tsx +17 -0
- package/checkbox/_example/group-with-options.tsx +18 -0
- package/checkbox/_example/group.tsx +17 -0
- package/checkbox/_example/states.tsx +19 -0
- package/color-picker/ColorPicker.tsx +16 -2
- package/color-picker/_example/base.tsx +12 -0
- package/color-picker/_example/borderless.tsx +17 -0
- package/color-picker/_example/clearable.tsx +12 -0
- package/color-picker/_example/disabled.tsx +17 -0
- package/color-picker/_example/formats.tsx +30 -0
- package/color-picker/_example/manual-input.tsx +39 -0
- package/color-picker/_example/recent-colors.tsx +19 -0
- package/color-picker/_example/swatch-colors.tsx +28 -0
- package/color-picker/_example/with-alpha.tsx +21 -0
- package/color-picker/components/panel/format/inputs.tsx +1 -1
- package/color-picker/components/panel/index.tsx +13 -0
- package/color-picker/components/trigger.tsx +64 -13
- package/color-picker/defaultProps.ts +4 -1
- package/color-picker/utils/color-picker/cmyk.ts +5 -5
- package/color-picker/utils/color-picker/draggable.ts +14 -15
- package/color-picker/utils/color-picker/format.ts +21 -26
- package/color-picker/utils/color-picker/gradient.ts +35 -41
- package/color-picker/utils/color-picker/types.ts +4 -4
- package/config-provider/ConfigContext.tsx +1 -0
- package/config-provider/ConfigProvider.tsx +18 -1
- package/config-provider/type.ts +5 -0
- package/dialog/_example/base.tsx +27 -0
- package/dialog/_example/confirm-loading.tsx +32 -0
- package/dialog/_example/custom-buttons.tsx +24 -0
- package/dialog/_example/full-screen.tsx +26 -0
- package/dialog/_example/hide-buttons.tsx +39 -0
- package/dialog/_example/modeless.tsx +25 -0
- package/dialog/_example/placement.tsx +40 -0
- package/dialog/_example/plugin-example.tsx +69 -0
- package/dialog/_example/themes.tsx +41 -0
- package/drawer/Drawer.tsx +17 -9
- package/drawer/_example/custom-header-footer.tsx +29 -0
- package/drawer/_example/default.tsx +20 -0
- package/drawer/_example/events.tsx +53 -0
- package/drawer/_example/no-footer.tsx +20 -0
- package/drawer/_example/no-overlay.tsx +20 -0
- package/drawer/_example/placement.tsx +43 -0
- package/drawer/_example/size-draggable.tsx +26 -0
- package/drawer/_example/size.tsx +40 -0
- package/drawer/defaultProps.ts +1 -1
- package/fireworks/Fireworks.tsx +1 -10
- package/fireworks/index.ts +0 -1
- package/fireworks/type.ts +0 -1
- package/form/_example/complex.tsx +76 -0
- package/form/_example/default.tsx +58 -0
- package/form/_example/disabled.tsx +26 -0
- package/form/_example/form-list.tsx +74 -0
- package/form/_example/inline-layout.tsx +20 -0
- package/form/_example/label-align.tsx +46 -0
- package/form/_example/methods.tsx +66 -0
- package/form/_example/validation.tsx +71 -0
- package/form/hooks/useFormItemStyle.tsx +19 -7
- package/form/index.ts +20 -2
- package/global-config/default-config.ts +28 -28
- package/global-config/locale/ar_KW.ts +176 -187
- package/global-config/locale/en_US.ts +180 -195
- package/global-config/locale/it_IT.ts +174 -197
- package/global-config/locale/ja_JP.ts +178 -193
- package/global-config/locale/ko_KR.ts +178 -193
- package/global-config/locale/ru_RU.ts +189 -200
- package/global-config/locale/zh_CN.ts +179 -193
- package/global-config/locale/zh_TW.ts +178 -192
- package/global-config/mobile/default-config.ts +3 -3
- package/global-config/mobile/locale/ar_KW.ts +76 -77
- package/global-config/mobile/locale/en_US.ts +76 -77
- package/global-config/mobile/locale/it_IT.ts +76 -77
- package/global-config/mobile/locale/ja_JP.ts +64 -65
- package/global-config/mobile/locale/ko_KR.ts +64 -65
- package/global-config/mobile/locale/ru_RU.ts +76 -77
- package/global-config/mobile/locale/zh_CN.ts +64 -65
- package/global-config/mobile/locale/zh_TW.ts +64 -65
- package/global-config/t.ts +12 -12
- package/hooks/useDebounce.ts +27 -0
- package/hooks/useLastest.ts +6 -2
- package/hooks/useResizeObserve.ts +0 -1
- package/index.ts +1 -1
- package/input/Input.tsx +53 -10
- package/input/_example/auto-width.tsx +14 -0
- package/input/_example/borderless.tsx +17 -0
- package/input/_example/clearable.tsx +14 -0
- package/input/_example/default.tsx +10 -0
- package/input/_example/disabled-readonly.tsx +12 -0
- package/input/_example/events.tsx +42 -0
- package/input/_example/group.tsx +14 -0
- package/input/_example/label-suffix.tsx +12 -0
- package/input/_example/max-length.tsx +11 -0
- package/input/_example/password.tsx +14 -0
- package/input/_example/sizes.tsx +12 -0
- package/input/_example/status.tsx +13 -0
- package/input/_example/text-align.tsx +12 -0
- package/input/_example/with-icon.tsx +13 -0
- package/input/type.ts +3 -0
- package/input/useLengthLimit.ts +122 -0
- package/input-number/_example/align.tsx +23 -0
- package/input-number/_example/auto-width.tsx +8 -0
- package/input-number/_example/default.tsx +8 -0
- package/input-number/_example/events.tsx +45 -0
- package/input-number/_example/format.tsx +27 -0
- package/input-number/_example/large-number.tsx +17 -0
- package/input-number/_example/min-max.tsx +14 -0
- package/input-number/_example/sizes.tsx +35 -0
- package/input-number/_example/status.tsx +65 -0
- package/input-number/_example/step-and-decimal.tsx +14 -0
- package/input-number/_example/themes.tsx +21 -0
- package/input-number/_example/with-suffix.tsx +12 -0
- package/ip-input/_example/controlled.tsx +26 -0
- package/ip-input/_example/default.tsx +12 -0
- package/ip-input/_example/full-featured.tsx +32 -0
- package/ip-input/_example/ipv6.tsx +23 -0
- package/ip-input/_example/keyboard-navigation.tsx +19 -0
- package/ip-input/_example/paste-demo.tsx +23 -0
- package/ip-input/_example/states.tsx +21 -0
- package/ip-input/_example/with-cidr.tsx +23 -0
- package/layout/_example/combine-left.tsx +54 -0
- package/layout/_example/combine-right.tsx +54 -0
- package/layout/_example/custom-aside-width.tsx +56 -0
- package/layout/_example/custom-height.tsx +45 -0
- package/layout/_example/double-sidebar.tsx +57 -0
- package/layout/_example/side-navigation-right.tsx +51 -0
- package/layout/_example/side-navigation.tsx +51 -0
- package/layout/_example/top-navigation.tsx +41 -0
- package/list/_example/async-loading.tsx +46 -0
- package/list/_example/default.tsx +23 -0
- package/list/_example/header-footer.tsx +40 -0
- package/list/_example/multiline.tsx +24 -0
- package/list/_example/scroll-loading.tsx +69 -0
- package/list/_example/sizes.tsx +45 -0
- package/list/_example/split.tsx +36 -0
- package/list/_example/stripe.tsx +24 -0
- package/list/_example/virtual-scroll.tsx +51 -0
- package/list/_example/with-image.tsx +26 -0
- package/loading/_example/default.tsx +6 -0
- package/loading/_example/delay.tsx +53 -0
- package/loading/_example/fullscreen.tsx +29 -0
- package/loading/_example/inherit-color.tsx +24 -0
- package/loading/_example/no-overlay.tsx +15 -0
- package/loading/_example/sizes.tsx +25 -0
- package/loading/_example/with-text.tsx +12 -0
- package/loading/_example/wrapper.tsx +30 -0
- package/notification/_example/default.tsx +31 -0
- package/notification/_example/long-content.tsx +37 -0
- package/notification/_example/stacking.tsx +40 -0
- package/notification/_example/types.tsx +78 -0
- package/notification/_example/usage-example.tsx +62 -0
- package/package.json +4 -3
- package/popup/Popup.tsx +17 -5
- package/popup/_example/controlled.tsx +32 -0
- package/popup/_example/custom-content.tsx +64 -0
- package/popup/_example/default.tsx +19 -0
- package/popup/_example/delay.tsx +35 -0
- package/popup/_example/disabled.tsx +17 -0
- package/popup/_example/no-arrow.tsx +17 -0
- package/popup/_example/placements.tsx +61 -0
- package/popup/_example/triggers.tsx +26 -0
- package/radio/_example/allow-uncheck.tsx +19 -0
- package/radio/_example/button-style.tsx +40 -0
- package/radio/_example/controlled.tsx +13 -0
- package/radio/_example/default.tsx +13 -0
- package/radio/_example/group-disabled.tsx +22 -0
- package/radio/_example/group-with-options.tsx +20 -0
- package/radio/_example/group.tsx +19 -0
- package/radio/_example/sizes.tsx +37 -0
- package/radio/_example/states.tsx +20 -0
- package/select/_example/collapsed.tsx +30 -0
- package/select/_example/creatable.tsx +36 -0
- package/select/_example/custom-content.tsx +26 -0
- package/select/_example/default.tsx +29 -0
- package/select/_example/disabled.tsx +20 -0
- package/select/_example/filterable.tsx +27 -0
- package/select/_example/group-options.tsx +44 -0
- package/select/_example/label-suffix.tsx +24 -0
- package/select/_example/loading.tsx +19 -0
- package/select/_example/multiple.tsx +31 -0
- package/select/_example/sizes.tsx +20 -0
- package/select/_example/status.tsx +27 -0
- package/slider/Slider.tsx +13 -5
- package/slider/_example/custom-label.tsx +19 -0
- package/slider/_example/default.tsx +14 -0
- package/slider/_example/disabled.tsx +17 -0
- package/slider/_example/marks.tsx +31 -0
- package/slider/_example/range.tsx +16 -0
- package/slider/_example/step.tsx +14 -0
- package/slider/_example/vertical.tsx +26 -0
- package/slider/_example/with-input-number.tsx +21 -0
- package/slider/type.ts +1 -1
- package/styles/_vars.scss +16 -0
- package/styles/components/button/_index.scss +3 -3
- package/styles/components/dialog/_index.scss +18 -20
- package/styles/components/drawer/_index.scss +4 -3
- package/styles/components/drawer/_var.scss +1 -1
- package/styles/components/form/_index.scss +7 -6
- package/styles/components/input/_mixins.scss +7 -5
- package/styles/components/input-number/_index.scss +13 -12
- package/styles/components/list/_index.scss +5 -5
- package/styles/components/notification/_index.scss +4 -4
- package/styles/components/slider/_index.scss +8 -8
- package/styles/components/switch/_index.scss +98 -15
- package/styles/components/table/_index.scss +37 -29
- package/styles/components/tabs/_index.scss +8 -9
- package/styles/components/tooltip/_index.scss +104 -0
- package/styles/components/tooltip/_vars.scss +23 -0
- package/switch/_example/async-change.tsx +25 -0
- package/switch/_example/before-change.tsx +22 -0
- package/switch/_example/controlled.tsx +14 -0
- package/switch/_example/custom-value.tsx +21 -0
- package/switch/_example/default.tsx +6 -0
- package/switch/_example/disabled.tsx +25 -0
- package/switch/_example/loading.tsx +17 -0
- package/switch/_example/sizes.tsx +21 -0
- package/switch/_example/with-label.tsx +21 -0
- package/tab/TabPanel.tsx +9 -6
- package/tab/_example/addable.tsx +45 -0
- package/tab/_example/card-theme.tsx +22 -0
- package/tab/_example/default.tsx +22 -0
- package/tab/_example/disabled.tsx +38 -0
- package/tab/_example/lazy.tsx +25 -0
- package/tab/_example/placement.tsx +36 -0
- package/tab/_example/removable.tsx +31 -0
- package/tab/_example/sizes.tsx +31 -0
- package/tab/_example/with-action.tsx +26 -0
- package/table/Cell.tsx +3 -6
- package/table/Ellipsis.tsx +73 -0
- package/table/_example/alignment.tsx +46 -0
- package/table/_example/auto-width.tsx +47 -0
- package/table/_example/bordered-stripe-hover.tsx +42 -0
- package/table/_example/bordered.tsx +42 -0
- package/table/_example/cell-click.tsx +52 -0
- package/table/_example/complex.tsx +82 -0
- package/table/_example/custom-cell.tsx +68 -0
- package/table/_example/custom-empty.tsx +37 -0
- package/table/_example/custom-row-class-name.tsx +57 -0
- package/table/_example/default.tsx +42 -0
- package/table/_example/ellipsis.tsx +56 -0
- package/table/_example/empty.tsx +28 -0
- package/table/_example/fixed-width.tsx +48 -0
- package/table/_example/hover.tsx +42 -0
- package/table/_example/row-click.tsx +52 -0
- package/table/_example/sizes.tsx +57 -0
- package/table/_example/stripe.tsx +42 -0
- package/table/_example/vertical-align.tsx +110 -0
- package/table/hooks/useTableClassName.ts +3 -3
- package/table/index.ts +2 -0
- package/table/type.ts +1 -0
- package/tag/Tag.tsx +1 -1
- package/tag/_example/closable.tsx +44 -0
- package/tag/_example/default.tsx +17 -0
- package/tag/_example/disabled.tsx +19 -0
- package/tag/_example/sizes.tsx +18 -0
- package/tag/_example/variants.tsx +37 -0
- package/tag-input/_example/collapsed.tsx +27 -0
- package/tag-input/_example/controlled-uncontrolled.tsx +26 -0
- package/tag-input/_example/default.tsx +15 -0
- package/tag-input/_example/disabled-readonly.tsx +21 -0
- package/tag-input/_example/events.tsx +64 -0
- package/tag-input/_example/excess-display.tsx +27 -0
- package/tag-input/_example/max-tags.tsx +22 -0
- package/tag-input/_example/sizes.tsx +21 -0
- package/tag-input/_example/status.tsx +37 -0
- package/tag-input/_example/with-label.tsx +23 -0
- package/tag-input/hooks/useTagList.tsx +1 -1
- package/tooltip/Tooltip.tsx +76 -0
- package/tooltip/_example/base.tsx +26 -0
- package/tooltip/_example/custom-content.tsx +47 -0
- package/tooltip/_example/placement.tsx +33 -0
- package/tooltip/_example/theme.tsx +34 -0
- package/tooltip/defaultProps.ts +14 -0
- package/tooltip/index.ts +7 -0
- package/tooltip/style/index.js +1 -0
- package/tooltip/type.ts +99 -0
- package/utils/log/index.ts +1 -1
- package/utils/log/log.ts +2 -3
- package/utils/log/types.ts +1 -4
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Form, Input } from "@tendaui/react";
|
|
3
|
+
|
|
4
|
+
const { FormItem } = Form;
|
|
5
|
+
|
|
6
|
+
const LabelAlignForm = () => (
|
|
7
|
+
<div style={{ display: "flex", flexDirection: "column", gap: "32px", width: 500 }}>
|
|
8
|
+
<div>
|
|
9
|
+
<h4 style={{ marginBottom: "12px", color: "#666" }}>左对齐</h4>
|
|
10
|
+
<Form labelAlign="left" labelWidth={100}>
|
|
11
|
+
<FormItem label="用户名" name="username1">
|
|
12
|
+
<Input placeholder="请输入用户名" />
|
|
13
|
+
</FormItem>
|
|
14
|
+
<FormItem label="密码" name="password1">
|
|
15
|
+
<Input type="password" placeholder="请输入密码" />
|
|
16
|
+
</FormItem>
|
|
17
|
+
</Form>
|
|
18
|
+
</div>
|
|
19
|
+
|
|
20
|
+
<div>
|
|
21
|
+
<h4 style={{ marginBottom: "12px", color: "#666" }}>右对齐</h4>
|
|
22
|
+
<Form labelAlign="right" labelWidth={100}>
|
|
23
|
+
<FormItem label="用户名" name="username2">
|
|
24
|
+
<Input placeholder="请输入用户名" />
|
|
25
|
+
</FormItem>
|
|
26
|
+
<FormItem label="密码" name="password2">
|
|
27
|
+
<Input type="password" placeholder="请输入密码" />
|
|
28
|
+
</FormItem>
|
|
29
|
+
</Form>
|
|
30
|
+
</div>
|
|
31
|
+
|
|
32
|
+
<div>
|
|
33
|
+
<h4 style={{ marginBottom: "12px", color: "#666" }}>顶部对齐</h4>
|
|
34
|
+
<Form labelAlign="top">
|
|
35
|
+
<FormItem label="用户名" name="username3">
|
|
36
|
+
<Input placeholder="请输入用户名" />
|
|
37
|
+
</FormItem>
|
|
38
|
+
<FormItem label="密码" name="password3">
|
|
39
|
+
<Input type="password" placeholder="请输入密码" />
|
|
40
|
+
</FormItem>
|
|
41
|
+
</Form>
|
|
42
|
+
</div>
|
|
43
|
+
</div>
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
export default LabelAlignForm;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Form, Input, Button, FormItem } from "@tendaui/react";
|
|
3
|
+
import { NotificationProvider, useNotification } from "@tendaui/react/notification";
|
|
4
|
+
|
|
5
|
+
const FormMethodsExample = () => {
|
|
6
|
+
const [form] = Form.useForm();
|
|
7
|
+
const { success } = useNotification();
|
|
8
|
+
|
|
9
|
+
const handleValidate = async () => {
|
|
10
|
+
const result = await form.validate();
|
|
11
|
+
console.log("验证结果:", result);
|
|
12
|
+
if (result === true) {
|
|
13
|
+
success({ title: "验证通过", message: "表单验证成功" });
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
const handleSetFields = () => {
|
|
18
|
+
form.setFieldsValue({
|
|
19
|
+
username: "testuser",
|
|
20
|
+
email: "test@example.com"
|
|
21
|
+
});
|
|
22
|
+
success({ title: "设置成功", message: "已填充表单数据" });
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const handleGetFields = () => {
|
|
26
|
+
const values = form.getFieldsValue(true);
|
|
27
|
+
console.log("当前表单值:", values);
|
|
28
|
+
success({ title: "获取成功", message: JSON.stringify(values) });
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const handleReset = () => {
|
|
32
|
+
form.reset();
|
|
33
|
+
success({ title: "重置成功", message: "表单已重置" });
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
return (
|
|
37
|
+
<div style={{ width: 500 }}>
|
|
38
|
+
<Form form={form} labelWidth={100} colon>
|
|
39
|
+
<FormItem label="用户名" name="username" rules={[{ required: true, message: "请输入用户名" }]}>
|
|
40
|
+
<Input placeholder="请输入用户名" />
|
|
41
|
+
</FormItem>
|
|
42
|
+
<FormItem label="邮箱" name="email" rules={[{ email: true, message: "请输入正确的邮箱" }]}>
|
|
43
|
+
<Input placeholder="请输入邮箱" />
|
|
44
|
+
</FormItem>
|
|
45
|
+
<FormItem style={{ marginInlineStart: 100 }}>
|
|
46
|
+
<div style={{ display: "flex", gap: "8px", flexWrap: "wrap" }}>
|
|
47
|
+
<Button theme="primary" onClick={handleValidate}>
|
|
48
|
+
验证表单
|
|
49
|
+
</Button>
|
|
50
|
+
<Button onClick={handleSetFields}>填充数据</Button>
|
|
51
|
+
<Button onClick={handleGetFields}>获取数据</Button>
|
|
52
|
+
<Button onClick={handleReset}>重置表单</Button>
|
|
53
|
+
</div>
|
|
54
|
+
</FormItem>
|
|
55
|
+
</Form>
|
|
56
|
+
</div>
|
|
57
|
+
);
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
const FormExample = () => (
|
|
61
|
+
<NotificationProvider>
|
|
62
|
+
<FormMethodsExample />
|
|
63
|
+
</NotificationProvider>
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
export default FormExample;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Form, Input, Button } from "@tendaui/react";
|
|
3
|
+
import { NotificationProvider, useNotification } from "@tendaui/react/notification";
|
|
4
|
+
|
|
5
|
+
const { FormItem } = Form;
|
|
6
|
+
|
|
7
|
+
const ValidationForm = () => {
|
|
8
|
+
const [form] = Form.useForm();
|
|
9
|
+
const { success, error } = useNotification();
|
|
10
|
+
|
|
11
|
+
const onSubmit = (e: any) => {
|
|
12
|
+
if (e.validateResult === true) {
|
|
13
|
+
success({ title: "验证通过", message: "表单提交成功" });
|
|
14
|
+
} else {
|
|
15
|
+
error({ title: "验证失败", message: "请检查表单输入" });
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
return (
|
|
20
|
+
<div style={{ width: 500 }}>
|
|
21
|
+
<Form form={form} onSubmit={onSubmit} colon labelWidth={100}>
|
|
22
|
+
<FormItem
|
|
23
|
+
label="用户名"
|
|
24
|
+
name="username"
|
|
25
|
+
requiredMark
|
|
26
|
+
rules={[
|
|
27
|
+
{ required: true, message: "请输入用户名" },
|
|
28
|
+
{ min: 3, message: "用户名至少3个字符" },
|
|
29
|
+
{ max: 20, message: "用户名最多20个字符" }
|
|
30
|
+
]}
|
|
31
|
+
>
|
|
32
|
+
<Input placeholder="请输入用户名" />
|
|
33
|
+
</FormItem>
|
|
34
|
+
|
|
35
|
+
<FormItem
|
|
36
|
+
label="邮箱"
|
|
37
|
+
name="email"
|
|
38
|
+
requiredMark
|
|
39
|
+
rules={[
|
|
40
|
+
{ required: true, message: "请输入邮箱" },
|
|
41
|
+
{ email: true, message: "请输入正确的邮箱格式" }
|
|
42
|
+
]}
|
|
43
|
+
>
|
|
44
|
+
<Input placeholder="请输入邮箱" />
|
|
45
|
+
</FormItem>
|
|
46
|
+
|
|
47
|
+
<FormItem label="手机号" name="phone" rules={[{ telnumber: true, message: "请输入正确的手机号" }]}>
|
|
48
|
+
<Input placeholder="请输入手机号" />
|
|
49
|
+
</FormItem>
|
|
50
|
+
|
|
51
|
+
<FormItem label="网址" name="url" rules={[{ url: true, message: "请输入正确的网址" }]}>
|
|
52
|
+
<Input placeholder="请输入网址" />
|
|
53
|
+
</FormItem>
|
|
54
|
+
|
|
55
|
+
<FormItem style={{ marginInlineStart: 100 }}>
|
|
56
|
+
<Button type="submit" theme="primary">
|
|
57
|
+
提交
|
|
58
|
+
</Button>
|
|
59
|
+
</FormItem>
|
|
60
|
+
</Form>
|
|
61
|
+
</div>
|
|
62
|
+
);
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
const FormExample = () => (
|
|
66
|
+
<NotificationProvider>
|
|
67
|
+
<ValidationForm />
|
|
68
|
+
</NotificationProvider>
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
export default FormExample;
|
|
@@ -5,7 +5,7 @@ import parseTNode from "../../utils/parseTNode";
|
|
|
5
5
|
import { ValidateStatus } from "../const";
|
|
6
6
|
|
|
7
7
|
export default function useFormItemStyle(props) {
|
|
8
|
-
const { classPrefix } = useConfig();
|
|
8
|
+
const { classPrefix, direction } = useConfig();
|
|
9
9
|
|
|
10
10
|
const {
|
|
11
11
|
className,
|
|
@@ -70,13 +70,22 @@ export default function useFormItemStyle(props) {
|
|
|
70
70
|
[`${classPrefix}-form__item-with-help`]: helpNode,
|
|
71
71
|
[`${classPrefix}-form__item-with-extra`]: extraNode
|
|
72
72
|
});
|
|
73
|
+
// todo form item label 也需要 RTL 处理
|
|
74
|
+
const isRtl = direction === "rtl";
|
|
75
|
+
const resolvedLabelAlign = isRtl
|
|
76
|
+
? labelAlign === "left"
|
|
77
|
+
? "right"
|
|
78
|
+
: labelAlign === "right"
|
|
79
|
+
? "left"
|
|
80
|
+
: labelAlign
|
|
81
|
+
: labelAlign;
|
|
73
82
|
|
|
74
83
|
const formItemLabelClass = classNames(`${classPrefix}-form__label`, {
|
|
75
84
|
[`${classPrefix}-form__label--required`]: needRequiredMark,
|
|
76
85
|
[`${classPrefix}-form__label--required-right`]: needRequiredMark && requiredMarkPosition === "right",
|
|
77
|
-
[`${classPrefix}-form__label--top`]:
|
|
78
|
-
[`${classPrefix}-form__label--left`]:
|
|
79
|
-
[`${classPrefix}-form__label--right`]:
|
|
86
|
+
[`${classPrefix}-form__label--top`]: resolvedLabelAlign === "top" || !labelWidth,
|
|
87
|
+
[`${classPrefix}-form__label--left`]: resolvedLabelAlign === "left" && labelWidth,
|
|
88
|
+
[`${classPrefix}-form__label--right`]: resolvedLabelAlign === "right" && labelWidth
|
|
80
89
|
});
|
|
81
90
|
|
|
82
91
|
const contentClass = () => {
|
|
@@ -100,15 +109,18 @@ export default function useFormItemStyle(props) {
|
|
|
100
109
|
|
|
101
110
|
let labelStyle = {};
|
|
102
111
|
let contentStyle = {};
|
|
103
|
-
if (label && labelWidth &&
|
|
112
|
+
if (label && labelWidth && resolvedLabelAlign !== "top") {
|
|
104
113
|
if (typeof labelWidth === "number") {
|
|
105
114
|
labelStyle = { width: `${labelWidth}px` };
|
|
106
|
-
contentStyle = {
|
|
115
|
+
contentStyle = { marginInlineStart: layout !== "inline" ? `${labelWidth}px` : "" };
|
|
107
116
|
} else {
|
|
108
117
|
labelStyle = { width: labelWidth };
|
|
109
|
-
contentStyle = {
|
|
118
|
+
contentStyle = { marginInlineStart: layout !== "inline" ? labelWidth : "" };
|
|
110
119
|
}
|
|
111
120
|
}
|
|
121
|
+
if (isRtl && label && labelWidth && resolvedLabelAlign !== "top") {
|
|
122
|
+
labelStyle = { ...labelStyle, float: "right" };
|
|
123
|
+
}
|
|
112
124
|
|
|
113
125
|
return {
|
|
114
126
|
formItemClass,
|
package/form/index.ts
CHANGED
|
@@ -1,11 +1,29 @@
|
|
|
1
1
|
import _Form from "./Form";
|
|
2
|
-
|
|
2
|
+
import FormList from "./FormList";
|
|
3
|
+
import useForm from "./hooks/useForm";
|
|
4
|
+
import useWatch from "./hooks/useWatch";
|
|
5
|
+
import FormItem from "./FormItem";
|
|
3
6
|
import "./style/index.js";
|
|
4
7
|
|
|
5
8
|
export type { FormProps } from "./Form";
|
|
6
9
|
export type { FormItemProps } from "./FormItem";
|
|
7
10
|
export * from "./type";
|
|
8
11
|
export * from "./hooks/interface";
|
|
12
|
+
export { FormItem, FormList, useForm, useWatch };
|
|
13
|
+
|
|
14
|
+
// 扩展 Form 组件类型,添加静态方法
|
|
15
|
+
interface FormStatic {
|
|
16
|
+
useForm: typeof useForm;
|
|
17
|
+
useWatch: typeof useWatch;
|
|
18
|
+
FormItem: typeof FormItem;
|
|
19
|
+
FormList: typeof FormList;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// 确保 Form 组件包含所有必要的静态属性
|
|
23
|
+
export const Form = _Form as typeof _Form & FormStatic;
|
|
24
|
+
Form.useForm = useForm;
|
|
25
|
+
Form.useWatch = useWatch;
|
|
26
|
+
Form.FormItem = FormItem;
|
|
27
|
+
Form.FormList = FormList;
|
|
9
28
|
|
|
10
|
-
export const Form = _Form;
|
|
11
29
|
export default Form;
|
|
@@ -1,39 +1,39 @@
|
|
|
1
|
-
export type AnimationType =
|
|
1
|
+
export type AnimationType = "ripple" | "expand" | "fade";
|
|
2
2
|
|
|
3
3
|
export default {
|
|
4
|
-
classPrefix:
|
|
4
|
+
classPrefix: "t",
|
|
5
5
|
animation: {
|
|
6
|
-
include: [
|
|
7
|
-
exclude: []
|
|
8
|
-
} as Record<
|
|
6
|
+
include: ["ripple", "expand", "fade"],
|
|
7
|
+
exclude: []
|
|
8
|
+
} as Record<"include" | "exclude", Array<AnimationType>>,
|
|
9
9
|
attach: null,
|
|
10
10
|
calendar: {
|
|
11
11
|
firstDayOfWeek: 1,
|
|
12
12
|
fillWithZero: true,
|
|
13
|
-
controllerConfig: undefined
|
|
13
|
+
controllerConfig: undefined
|
|
14
14
|
},
|
|
15
15
|
icon: {},
|
|
16
16
|
input: {
|
|
17
|
-
autocomplete:
|
|
17
|
+
autocomplete: ""
|
|
18
18
|
},
|
|
19
19
|
dialog: {
|
|
20
20
|
closeOnEscKeydown: true,
|
|
21
21
|
closeOnOverlayClick: true,
|
|
22
22
|
confirmBtnTheme: {
|
|
23
|
-
default:
|
|
24
|
-
info:
|
|
25
|
-
warning:
|
|
26
|
-
danger:
|
|
27
|
-
success:
|
|
28
|
-
}
|
|
23
|
+
default: "primary",
|
|
24
|
+
info: "primary",
|
|
25
|
+
warning: "primary",
|
|
26
|
+
danger: "primary",
|
|
27
|
+
success: "primary"
|
|
28
|
+
}
|
|
29
29
|
},
|
|
30
30
|
message: {},
|
|
31
31
|
popconfirm: {
|
|
32
32
|
confirmBtnTheme: {
|
|
33
|
-
default:
|
|
34
|
-
warning:
|
|
35
|
-
danger:
|
|
36
|
-
}
|
|
33
|
+
default: "primary",
|
|
34
|
+
warning: "primary",
|
|
35
|
+
danger: "primary"
|
|
36
|
+
}
|
|
37
37
|
},
|
|
38
38
|
table: {
|
|
39
39
|
// 展开和收起图标(使用收起图标)
|
|
@@ -47,34 +47,34 @@ export default {
|
|
|
47
47
|
// 是否隐藏排序图标的文本提示
|
|
48
48
|
hideSortTips: false,
|
|
49
49
|
// 全局表格尺寸配置
|
|
50
|
-
size:
|
|
50
|
+
size: "medium"
|
|
51
51
|
},
|
|
52
52
|
select: {
|
|
53
53
|
// 清除按钮
|
|
54
54
|
clearIcon: undefined,
|
|
55
|
-
filterable: false
|
|
55
|
+
filterable: false
|
|
56
56
|
},
|
|
57
57
|
drawer: {
|
|
58
58
|
closeOnEscKeydown: true,
|
|
59
59
|
closeOnOverlayClick: true,
|
|
60
|
-
size:
|
|
60
|
+
size: "small"
|
|
61
61
|
},
|
|
62
62
|
tree: {
|
|
63
63
|
// 目录层级图标
|
|
64
|
-
folderIcon: undefined
|
|
64
|
+
folderIcon: undefined
|
|
65
65
|
},
|
|
66
66
|
datePicker: {
|
|
67
|
-
firstDayOfWeek: 1
|
|
67
|
+
firstDayOfWeek: 1
|
|
68
68
|
},
|
|
69
69
|
steps: {
|
|
70
70
|
checkIcon: undefined,
|
|
71
|
-
errorIcon: undefined
|
|
71
|
+
errorIcon: undefined
|
|
72
72
|
},
|
|
73
73
|
tag: {
|
|
74
|
-
closeIcon: undefined
|
|
74
|
+
closeIcon: undefined
|
|
75
75
|
},
|
|
76
76
|
form: {
|
|
77
|
-
requiredMark: undefined
|
|
77
|
+
requiredMark: undefined
|
|
78
78
|
},
|
|
79
79
|
empty: {
|
|
80
80
|
titleText: {
|
|
@@ -82,14 +82,14 @@ export default {
|
|
|
82
82
|
success: undefined,
|
|
83
83
|
fail: undefined,
|
|
84
84
|
empty: undefined,
|
|
85
|
-
networkError: undefined
|
|
85
|
+
networkError: undefined
|
|
86
86
|
},
|
|
87
87
|
image: {
|
|
88
88
|
maintenance: undefined,
|
|
89
89
|
success: undefined,
|
|
90
90
|
fail: undefined,
|
|
91
91
|
empty: undefined,
|
|
92
|
-
networkError: undefined
|
|
92
|
+
networkError: undefined
|
|
93
93
|
}
|
|
94
|
-
}
|
|
94
|
+
}
|
|
95
95
|
} as const;
|