@tendaui/components 1.2.3 → 1.3.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 -21
- package/README.md +176 -176
- 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 +24 -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 +89 -89
- package/color-picker/utils/color-picker/color.ts +467 -467
- package/color-picker/utils/color-picker/constants.ts +187 -187
- package/color-picker/utils/color-picker/draggable.ts +99 -100
- package/color-picker/utils/color-picker/format.ts +90 -95
- package/color-picker/utils/color-picker/gradient.ts +237 -243
- package/color-picker/utils/color-picker/index.ts +7 -7
- package/color-picker/utils/color-picker/types.ts +33 -33
- 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/dialog/hooks/useDialogPosition.ts +35 -35
- 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/form/type.ts +519 -519
- package/global-config/default-config.ts +95 -95
- package/global-config/locale/ar_KW.ts +259 -270
- package/global-config/locale/en_US.ts +265 -280
- package/global-config/locale/it_IT.ts +264 -287
- package/global-config/locale/ja_JP.ts +264 -279
- package/global-config/locale/ko_KR.ts +264 -279
- package/global-config/locale/ru_RU.ts +277 -288
- package/global-config/locale/zh_CN.ts +265 -279
- package/global-config/locale/zh_TW.ts +265 -279
- package/global-config/mobile/default-config.ts +6 -6
- package/global-config/mobile/locale/ar_KW.ts +112 -113
- package/global-config/mobile/locale/en_US.ts +113 -114
- package/global-config/mobile/locale/it_IT.ts +113 -114
- package/global-config/mobile/locale/ja_JP.ts +100 -101
- package/global-config/mobile/locale/ko_KR.ts +100 -101
- package/global-config/mobile/locale/ru_RU.ts +112 -113
- package/global-config/mobile/locale/zh_CN.ts +100 -101
- package/global-config/mobile/locale/zh_TW.ts +100 -101
- package/global-config/t.ts +111 -111
- 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/InputNumber.tsx +124 -124
- 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/input-number/defaultProps.ts +17 -17
- package/input-number/index.ts +9 -9
- package/input-number/style/css.js +1 -1
- package/input-number/style/index.js +1 -1
- package/input-number/useInputNumber.tsx +270 -270
- 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/ListItem.tsx +36 -36
- package/list/ListItemMeta.tsx +40 -40
- 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/list/defaultProps.ts +11 -11
- package/list/hooks/useListVirtualScroll.ts +82 -82
- package/list/style/css.js +1 -1
- package/list/style/index.js +1 -1
- 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/locale/LocalReceiver.ts +55 -55
- package/locale/ar_KW.ts +7 -7
- package/locale/en_US.ts +7 -7
- package/locale/it_IT.ts +6 -6
- package/locale/ja_JP.ts +6 -6
- package/locale/ko_KR.ts +6 -6
- package/locale/ru_RU.ts +6 -6
- package/locale/zh_CN.ts +5 -5
- package/locale/zh_TW.ts +7 -7
- 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/select/type.ts +382 -382
- package/select-input/type.ts +280 -280
- package/slider/Slider.tsx +13 -5
- package/slider/SliderHandleButton.tsx +50 -50
- 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/defaultProps.ts +15 -15
- package/slider/style/css.js +1 -1
- package/slider/style/index.js +1 -1
- package/slider/type.ts +1 -1
- package/styles/_global.scss +40 -39
- package/styles/_vars.scss +374 -358
- package/styles/components/alert/_index.scss +175 -175
- package/styles/components/alert/_vars.scss +41 -39
- package/styles/components/badge/_index.scss +71 -70
- package/styles/components/badge/_vars.scss +26 -25
- package/styles/components/button/_index.scss +499 -499
- package/styles/components/button/_mixins.scss +40 -39
- package/styles/components/button/_vars.scss +121 -120
- package/styles/components/checkbox/_index.scss +158 -158
- package/styles/components/checkbox/_var.scss +59 -60
- package/styles/components/color-picker/_index.scss +586 -586
- package/styles/components/color-picker/_vars.scss +79 -84
- package/styles/components/dialog/_animate.scss +133 -135
- package/styles/components/dialog/_index.scss +310 -311
- package/styles/components/dialog/_vars.scss +60 -59
- package/styles/components/drawer/_index.scss +206 -205
- package/styles/components/drawer/_var.scss +55 -53
- package/styles/components/fireworks/_index.scss +86 -86
- package/styles/components/fireworks/_vars.scss +5 -4
- package/styles/components/form/_index.scss +175 -173
- package/styles/components/form/_mixins.scss +74 -76
- package/styles/components/form/_vars.scss +101 -100
- package/styles/components/input/_index.scss +350 -349
- package/styles/components/input/_mixins.scss +120 -116
- package/styles/components/input/_vars.scss +130 -134
- package/styles/components/input-number/_index.scss +342 -343
- package/styles/components/input-number/_vars.scss +56 -65
- package/styles/components/ip-input/_index.scss +277 -280
- package/styles/components/layout/_index.scss +47 -47
- package/styles/components/layout/_vars.scss +19 -18
- package/styles/components/layout/doc.scss +74 -74
- package/styles/components/list/_index.scss +172 -172
- package/styles/components/list/_vars.scss +42 -41
- package/styles/components/loading/_index.scss +113 -112
- package/styles/components/loading/_vars.scss +40 -39
- package/styles/components/notification/_index.scss +144 -143
- package/styles/components/notification/_mixins.scss +13 -12
- package/styles/components/notification/_vars.scss +60 -59
- package/styles/components/popup/_index.scss +78 -82
- package/styles/components/popup/_mixin.scss +149 -149
- package/styles/components/popup/{_var.scss → _vars.scss} +33 -31
- package/styles/components/radio/_index.scss +376 -376
- package/styles/components/radio/{_var.scss → _vars.scss} +89 -92
- package/styles/components/select/_index.scss +291 -290
- package/styles/components/select/_var.scss +64 -65
- package/styles/components/select-input/_index.scss +5 -5
- package/styles/components/select-input/_var.scss +4 -3
- package/styles/components/slider/_index.scss +241 -241
- package/styles/components/slider/_vars.scss +51 -50
- package/styles/components/switch/_index.scss +248 -164
- package/styles/components/switch/_vars.scss +63 -61
- package/styles/components/table/_index.scss +194 -193
- package/styles/components/table/_var.scss +52 -52
- package/styles/components/tabs/_index.scss +165 -165
- package/styles/components/tabs/_mixins.scss +11 -11
- package/styles/components/tabs/_vars.scss +72 -71
- package/styles/components/tag/_index.scss +317 -316
- package/styles/components/tag/_var.scss +86 -85
- package/styles/components/tag-input/_index.scss +164 -163
- package/styles/components/tag-input/_vars.scss +17 -16
- package/styles/components/tooltip/_index.scss +104 -0
- package/styles/components/tooltip/_vars.scss +23 -0
- package/styles/mixins/_focus.scss +8 -7
- package/styles/mixins/_layout.scss +32 -32
- package/styles/mixins/_reset.scss +11 -10
- package/styles/mixins/_scrollbar.scss +32 -31
- package/styles/mixins/_text.scss +50 -48
- package/styles/themes/_dark.scss +169 -191
- package/styles/themes/_font.scss +69 -69
- package/styles/themes/_index.scss +5 -5
- package/styles/themes/_light.scss +170 -190
- package/styles/themes/_radius.scss +9 -9
- package/styles/themes/_size.scss +68 -68
- package/styles/utilities/_animation.scss +58 -57
- package/styles/utilities/_tips.scss +10 -9
- 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/input-number/large-number.ts +423 -423
- package/utils/input-number/number.ts +257 -257
- package/utils/log/index.ts +3 -3
- package/utils/log/log.ts +29 -30
- package/utils/log/types.ts +9 -12
- package/utils/style.ts +58 -58
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import React, { useState } from "react";
|
|
2
|
+
import Drawer from "../index";
|
|
3
|
+
import { Button } from "../../button";
|
|
4
|
+
|
|
5
|
+
const SizeDrawer = () => {
|
|
6
|
+
const [visible, setVisible] = useState(false);
|
|
7
|
+
const [size, setSize] = useState("small");
|
|
8
|
+
|
|
9
|
+
const openDrawer = (s: string) => {
|
|
10
|
+
setSize(s);
|
|
11
|
+
setVisible(true);
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
return (
|
|
15
|
+
<>
|
|
16
|
+
<div style={{ display: "flex", gap: "12px", flexWrap: "wrap" }}>
|
|
17
|
+
<Button theme="primary" onClick={() => openDrawer("small")}>
|
|
18
|
+
小尺寸
|
|
19
|
+
</Button>
|
|
20
|
+
<Button theme="primary" onClick={() => openDrawer("medium")}>
|
|
21
|
+
中尺寸
|
|
22
|
+
</Button>
|
|
23
|
+
<Button theme="primary" onClick={() => openDrawer("large")}>
|
|
24
|
+
大尺寸
|
|
25
|
+
</Button>
|
|
26
|
+
<Button theme="primary" onClick={() => openDrawer("60%")}>
|
|
27
|
+
60% 宽度
|
|
28
|
+
</Button>
|
|
29
|
+
<Button theme="primary" onClick={() => openDrawer("500px")}>
|
|
30
|
+
500px 宽度
|
|
31
|
+
</Button>
|
|
32
|
+
</div>
|
|
33
|
+
<Drawer header={`尺寸: ${size}`} size={size} visible={visible} onClose={() => setVisible(false)}>
|
|
34
|
+
<p>当前抽屉尺寸: {size}</p>
|
|
35
|
+
</Drawer>
|
|
36
|
+
</>
|
|
37
|
+
);
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
export default SizeDrawer;
|
package/drawer/defaultProps.ts
CHANGED
package/fireworks/Fireworks.tsx
CHANGED
|
@@ -1,12 +1,4 @@
|
|
|
1
|
-
import React, {
|
|
2
|
-
CSSProperties,
|
|
3
|
-
forwardRef,
|
|
4
|
-
useCallback,
|
|
5
|
-
useEffect,
|
|
6
|
-
useMemo,
|
|
7
|
-
useRef,
|
|
8
|
-
useState
|
|
9
|
-
} from "react";
|
|
1
|
+
import React, { CSSProperties, forwardRef, useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
10
2
|
import classNames from "classnames";
|
|
11
3
|
|
|
12
4
|
import useConfig from "../hooks/useConfig";
|
|
@@ -135,4 +127,3 @@ const Fireworks = forwardRef<HTMLDivElement, FireworksProps>((props, ref) => {
|
|
|
135
127
|
Fireworks.displayName = "Fireworks";
|
|
136
128
|
|
|
137
129
|
export default Fireworks;
|
|
138
|
-
|
package/fireworks/index.ts
CHANGED
package/fireworks/type.ts
CHANGED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Form, Input, Switch, Checkbox, Button, Select, Radio, FormItem } from "@tendaui/react";
|
|
3
|
+
import { NotificationProvider, useNotification } from "@tendaui/react/notification";
|
|
4
|
+
|
|
5
|
+
const { useForm } = Form;
|
|
6
|
+
const {} = Form;
|
|
7
|
+
const ComplexFormExample = () => {
|
|
8
|
+
const [form] = useForm();
|
|
9
|
+
const { success } = useNotification();
|
|
10
|
+
|
|
11
|
+
const onSubmit = (e: any) => {
|
|
12
|
+
if (e.validateResult === true) {
|
|
13
|
+
success({ title: "成功", message: "表单提交成功" });
|
|
14
|
+
console.log("表单数据:", e.fields);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
return (
|
|
19
|
+
<div style={{ width: 500 }}>
|
|
20
|
+
<Form form={form} onSubmit={onSubmit} labelWidth={100}>
|
|
21
|
+
<FormItem label="姓名" name="name" requiredMark rules={[{ required: true, message: "请输入姓名" }]}>
|
|
22
|
+
<Input placeholder="请输入姓名" />
|
|
23
|
+
</FormItem>
|
|
24
|
+
|
|
25
|
+
<FormItem label="性别" name="gender">
|
|
26
|
+
<Radio.Group>
|
|
27
|
+
<Radio value="male">男</Radio>
|
|
28
|
+
<Radio value="female">女</Radio>
|
|
29
|
+
</Radio.Group>
|
|
30
|
+
</FormItem>
|
|
31
|
+
|
|
32
|
+
<FormItem label="城市" name="city">
|
|
33
|
+
<Select
|
|
34
|
+
placeholder="请选择城市"
|
|
35
|
+
options={[
|
|
36
|
+
{ label: "北京", value: "beijing" },
|
|
37
|
+
{ label: "上海", value: "shanghai" },
|
|
38
|
+
{ label: "广州", value: "guangzhou" },
|
|
39
|
+
{ label: "深圳", value: "shenzhen" }
|
|
40
|
+
]}
|
|
41
|
+
/>
|
|
42
|
+
</FormItem>
|
|
43
|
+
|
|
44
|
+
<FormItem label="爱好" name="hobbies">
|
|
45
|
+
<Checkbox.Group>
|
|
46
|
+
<Checkbox value="reading">阅读</Checkbox>
|
|
47
|
+
<Checkbox value="music">音乐</Checkbox>
|
|
48
|
+
<Checkbox value="sports">运动</Checkbox>
|
|
49
|
+
<Checkbox value="travel">旅游</Checkbox>
|
|
50
|
+
</Checkbox.Group>
|
|
51
|
+
</FormItem>
|
|
52
|
+
|
|
53
|
+
<FormItem label="订阅通知" name="subscribe">
|
|
54
|
+
<Switch />
|
|
55
|
+
</FormItem>
|
|
56
|
+
|
|
57
|
+
<FormItem style={{ marginInlineStart: 100 }}>
|
|
58
|
+
<div style={{ display: "flex", gap: "8px" }}>
|
|
59
|
+
<Button type="submit" theme="primary">
|
|
60
|
+
提交
|
|
61
|
+
</Button>
|
|
62
|
+
<Button type="reset">重置</Button>
|
|
63
|
+
</div>
|
|
64
|
+
</FormItem>
|
|
65
|
+
</Form>
|
|
66
|
+
</div>
|
|
67
|
+
);
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
const FormExample = () => (
|
|
71
|
+
<NotificationProvider>
|
|
72
|
+
<ComplexFormExample />
|
|
73
|
+
</NotificationProvider>
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
export default FormExample;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Form, Input, Switch, InputNumber, Button, FormItem } from "@tendaui/react";
|
|
3
|
+
import { NotificationProvider, useNotification } from "@tendaui/react/notification";
|
|
4
|
+
|
|
5
|
+
const BaseForm = () => {
|
|
6
|
+
const [form] = Form.useForm();
|
|
7
|
+
const { success } = useNotification();
|
|
8
|
+
|
|
9
|
+
const onSubmit = (e: any) => {
|
|
10
|
+
if (e.validateResult === true) {
|
|
11
|
+
success({ title: "成功提示", message: "提交成功" });
|
|
12
|
+
console.log("表单数据:", e.fields);
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
const onReset = () => {
|
|
17
|
+
success({ title: "成功提示", message: "重置成功" });
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
return (
|
|
21
|
+
<div style={{ width: 500 }}>
|
|
22
|
+
<Form form={form} onSubmit={onSubmit} onReset={onReset} colon labelWidth={100}>
|
|
23
|
+
<FormItem label="姓名" name="name" requiredMark rules={[{ required: true, message: "请输入姓名" }]}>
|
|
24
|
+
<Input placeholder="请输入姓名" />
|
|
25
|
+
</FormItem>
|
|
26
|
+
|
|
27
|
+
<FormItem label="邮箱" name="email" rules={[{ email: true, message: "请输入正确的邮箱" }]}>
|
|
28
|
+
<Input placeholder="请输入邮箱" />
|
|
29
|
+
</FormItem>
|
|
30
|
+
|
|
31
|
+
<FormItem label="年龄" name="age">
|
|
32
|
+
<InputNumber placeholder="请输入年龄" min={1} max={120} />
|
|
33
|
+
</FormItem>
|
|
34
|
+
|
|
35
|
+
<FormItem label="是否启用" name="enabled">
|
|
36
|
+
<Switch />
|
|
37
|
+
</FormItem>
|
|
38
|
+
|
|
39
|
+
<FormItem style={{ marginInlineStart: 100 }}>
|
|
40
|
+
<div style={{ display: "flex", gap: "8px" }}>
|
|
41
|
+
<Button type="submit" theme="primary">
|
|
42
|
+
提交
|
|
43
|
+
</Button>
|
|
44
|
+
<Button type="reset">重置</Button>
|
|
45
|
+
</div>
|
|
46
|
+
</FormItem>
|
|
47
|
+
</Form>
|
|
48
|
+
</div>
|
|
49
|
+
);
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
const FormExample = () => (
|
|
53
|
+
<NotificationProvider>
|
|
54
|
+
<BaseForm />
|
|
55
|
+
</NotificationProvider>
|
|
56
|
+
);
|
|
57
|
+
|
|
58
|
+
export default FormExample;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Form, Input, Switch, Select, FormItem } from "@tendaui/react";
|
|
3
|
+
|
|
4
|
+
const DisabledForm = () => (
|
|
5
|
+
<div style={{ width: 500 }}>
|
|
6
|
+
<Form disabled labelWidth={100} colon>
|
|
7
|
+
<FormItem label="用户名" name="username">
|
|
8
|
+
<Input placeholder="请输入用户名" defaultValue="admin" />
|
|
9
|
+
</FormItem>
|
|
10
|
+
<FormItem label="角色" name="role">
|
|
11
|
+
<Select
|
|
12
|
+
defaultValue="admin"
|
|
13
|
+
options={[
|
|
14
|
+
{ label: "管理员", value: "admin" },
|
|
15
|
+
{ label: "用户", value: "user" }
|
|
16
|
+
]}
|
|
17
|
+
/>
|
|
18
|
+
</FormItem>
|
|
19
|
+
<FormItem label="启用" name="enabled">
|
|
20
|
+
<Switch defaultValue={true} />
|
|
21
|
+
</FormItem>
|
|
22
|
+
</Form>
|
|
23
|
+
</div>
|
|
24
|
+
);
|
|
25
|
+
|
|
26
|
+
export default DisabledForm;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Form, Input, Button, Select, FormItem, FormList } from "@tendaui/react";
|
|
3
|
+
|
|
4
|
+
const FormListExample = () => {
|
|
5
|
+
const [form] = Form.useForm();
|
|
6
|
+
|
|
7
|
+
const onSubmit = () => {
|
|
8
|
+
const allFields = form.getFieldsValue(true);
|
|
9
|
+
console.log("表单数据:", allFields);
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
const cityOptions = [
|
|
13
|
+
{ label: "北京", value: "bj" },
|
|
14
|
+
{ label: "上海", value: "sh" },
|
|
15
|
+
{ label: "广州", value: "gz" },
|
|
16
|
+
{ label: "深圳", value: "sz" }
|
|
17
|
+
];
|
|
18
|
+
|
|
19
|
+
return (
|
|
20
|
+
<Form
|
|
21
|
+
form={form}
|
|
22
|
+
colon
|
|
23
|
+
onSubmit={onSubmit}
|
|
24
|
+
labelWidth={100}
|
|
25
|
+
initialData={{
|
|
26
|
+
address: [
|
|
27
|
+
{ city: "bj", area: "海淀" },
|
|
28
|
+
{ city: "sh", area: "浦东" }
|
|
29
|
+
]
|
|
30
|
+
}}
|
|
31
|
+
>
|
|
32
|
+
<FormList name="address">
|
|
33
|
+
{(fields, { add, remove }) => (
|
|
34
|
+
<>
|
|
35
|
+
{fields.map(({ key, name, ...restField }, index) => (
|
|
36
|
+
<FormItem key={key} label={`地址 ${index + 1}`}>
|
|
37
|
+
<div style={{ display: "flex", gap: "8px", alignItems: "center" }}>
|
|
38
|
+
<FormItem
|
|
39
|
+
name={[name, "city"]}
|
|
40
|
+
rules={[{ required: true, message: "请选择城市" }]}
|
|
41
|
+
{...restField}
|
|
42
|
+
style={{ marginBottom: 0 }}
|
|
43
|
+
>
|
|
44
|
+
<Select options={cityOptions} placeholder="选择城市" style={{ width: "120px" }} />
|
|
45
|
+
</FormItem>
|
|
46
|
+
<FormItem name={[name, "area"]} {...restField} style={{ marginBottom: 0 }}>
|
|
47
|
+
<Input placeholder="详细地址" style={{ width: "200px" }} />
|
|
48
|
+
</FormItem>
|
|
49
|
+
{fields.length > 1 && (
|
|
50
|
+
<Button variant="text" theme="danger" onClick={() => remove(index)}>
|
|
51
|
+
删除
|
|
52
|
+
</Button>
|
|
53
|
+
)}
|
|
54
|
+
</div>
|
|
55
|
+
</FormItem>
|
|
56
|
+
))}
|
|
57
|
+
<FormItem style={{ marginLeft: 100 }}>
|
|
58
|
+
<Button variant="dashed" onClick={() => add({ city: "", area: "" })}>
|
|
59
|
+
+ 添加地址
|
|
60
|
+
</Button>
|
|
61
|
+
</FormItem>
|
|
62
|
+
</>
|
|
63
|
+
)}
|
|
64
|
+
</FormList>
|
|
65
|
+
<FormItem style={{ marginLeft: 100 }}>
|
|
66
|
+
<Button type="submit" theme="primary">
|
|
67
|
+
提交
|
|
68
|
+
</Button>
|
|
69
|
+
</FormItem>
|
|
70
|
+
</Form>
|
|
71
|
+
);
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
export default FormListExample;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Form, Input, Button, FormItem } from "@tendaui/react";
|
|
3
|
+
|
|
4
|
+
const InlineLayoutForm = () => (
|
|
5
|
+
<Form layout="inline" labelWidth={60}>
|
|
6
|
+
<FormItem label="用户名" name="username">
|
|
7
|
+
<Input placeholder="用户名" style={{ width: "150px" }} />
|
|
8
|
+
</FormItem>
|
|
9
|
+
<FormItem label="密码" name="password">
|
|
10
|
+
<Input type="password" placeholder="密码" style={{ width: "150px" }} />
|
|
11
|
+
</FormItem>
|
|
12
|
+
<FormItem>
|
|
13
|
+
<Button theme="primary" type="submit">
|
|
14
|
+
登录
|
|
15
|
+
</Button>
|
|
16
|
+
</FormItem>
|
|
17
|
+
</Form>
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
export default InlineLayoutForm;
|
|
@@ -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;
|