@tendaui/components 1.2.4 → 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 -40
- package/styles/_vars.scss +374 -358
- package/styles/components/alert/_index.scss +175 -175
- package/styles/components/alert/_vars.scss +41 -41
- package/styles/components/badge/_index.scss +71 -71
- package/styles/components/badge/_vars.scss +26 -26
- package/styles/components/button/_index.scss +499 -499
- package/styles/components/button/_mixins.scss +40 -40
- package/styles/components/button/_vars.scss +121 -121
- package/styles/components/checkbox/_index.scss +158 -158
- package/styles/components/checkbox/_var.scss +59 -59
- package/styles/components/color-picker/_index.scss +586 -586
- package/styles/components/color-picker/_vars.scss +79 -79
- package/styles/components/dialog/_animate.scss +133 -133
- package/styles/components/dialog/_index.scss +310 -312
- package/styles/components/dialog/_vars.scss +60 -60
- package/styles/components/drawer/_index.scss +206 -205
- package/styles/components/drawer/_var.scss +55 -55
- package/styles/components/fireworks/_index.scss +86 -86
- package/styles/components/fireworks/_vars.scss +5 -5
- package/styles/components/form/_index.scss +175 -174
- package/styles/components/form/_mixins.scss +74 -74
- package/styles/components/form/_vars.scss +101 -101
- package/styles/components/input/_index.scss +350 -350
- package/styles/components/input/_mixins.scss +120 -118
- package/styles/components/input/_vars.scss +130 -130
- package/styles/components/input-number/_index.scss +340 -339
- package/styles/components/input-number/_vars.scss +56 -56
- package/styles/components/ip-input/_index.scss +277 -277
- package/styles/components/layout/_index.scss +47 -47
- package/styles/components/layout/_vars.scss +19 -19
- package/styles/components/layout/doc.scss +74 -74
- package/styles/components/list/_index.scss +172 -172
- package/styles/components/list/_vars.scss +42 -42
- package/styles/components/loading/_index.scss +113 -113
- package/styles/components/loading/_vars.scss +40 -40
- package/styles/components/notification/_index.scss +144 -144
- package/styles/components/notification/_mixins.scss +13 -13
- package/styles/components/notification/_vars.scss +60 -60
- package/styles/components/popup/_index.scss +78 -78
- package/styles/components/popup/_mixin.scss +149 -149
- package/styles/components/popup/_vars.scss +33 -33
- package/styles/components/radio/_index.scss +376 -376
- package/styles/components/radio/_vars.scss +89 -89
- package/styles/components/select/_index.scss +291 -291
- package/styles/components/select/_var.scss +64 -64
- package/styles/components/select-input/_index.scss +5 -5
- package/styles/components/select-input/_var.scss +4 -4
- package/styles/components/slider/_index.scss +241 -241
- package/styles/components/slider/_vars.scss +51 -51
- package/styles/components/switch/_index.scss +248 -165
- package/styles/components/switch/_vars.scss +63 -63
- package/styles/components/table/_index.scss +194 -186
- package/styles/components/table/_var.scss +52 -52
- package/styles/components/tabs/_index.scss +165 -166
- package/styles/components/tabs/_mixins.scss +11 -11
- package/styles/components/tabs/_vars.scss +72 -72
- package/styles/components/tag/_index.scss +317 -317
- package/styles/components/tag/_var.scss +86 -86
- package/styles/components/tag-input/_index.scss +164 -164
- package/styles/components/tag-input/_vars.scss +17 -17
- package/styles/components/tooltip/_index.scss +104 -0
- package/styles/components/tooltip/_vars.scss +23 -0
- package/styles/mixins/_focus.scss +8 -8
- package/styles/mixins/_layout.scss +32 -32
- package/styles/mixins/_reset.scss +11 -11
- package/styles/mixins/_scrollbar.scss +32 -32
- package/styles/mixins/_text.scss +50 -50
- package/styles/themes/_dark.scss +169 -169
- package/styles/themes/_font.scss +69 -69
- package/styles/themes/_index.scss +5 -5
- package/styles/themes/_light.scss +170 -170
- package/styles/themes/_radius.scss +9 -9
- package/styles/themes/_size.scss +68 -68
- package/styles/utilities/_animation.scss +58 -58
- package/styles/utilities/_tips.scss +10 -10
- 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
|
@@ -1,58 +1,58 @@
|
|
|
1
|
-
@use "../_vars.scss" as *;
|
|
2
|
-
@use "../_vars.scss" as *;
|
|
3
|
-
|
|
4
|
-
@keyframes t-fade-in {
|
|
5
|
-
from {
|
|
6
|
-
opacity: 0;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
to {
|
|
10
|
-
opacity: 1;
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
@keyframes t-fade-out {
|
|
15
|
-
from {
|
|
16
|
-
opacity: 1;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
to {
|
|
20
|
-
opacity: 0;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
@keyframes t-spin {
|
|
25
|
-
from {
|
|
26
|
-
transform: rotate(0deg);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
to {
|
|
30
|
-
transform: rotate(360deg);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
.#{$prefix}-icon-loading {
|
|
35
|
-
animation: t-spin 1s linear infinite;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
// 动态生成 keyframes 动画
|
|
39
|
-
@mixin anim-g-attr-change($name, $attr, $from, $to) {
|
|
40
|
-
@keyframes #{$name} {
|
|
41
|
-
from {
|
|
42
|
-
#{$attr}: #{$from};
|
|
43
|
-
}
|
|
44
|
-
to {
|
|
45
|
-
#{$attr}: #{$to};
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
@keyframes t-zoom-out {
|
|
51
|
-
from {
|
|
52
|
-
transform: scale(0.2);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
to {
|
|
56
|
-
transform: scale(1);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
1
|
+
@use "../_vars.scss" as *;
|
|
2
|
+
@use "../_vars.scss" as *;
|
|
3
|
+
|
|
4
|
+
@keyframes t-fade-in {
|
|
5
|
+
from {
|
|
6
|
+
opacity: 0;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
to {
|
|
10
|
+
opacity: 1;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
@keyframes t-fade-out {
|
|
15
|
+
from {
|
|
16
|
+
opacity: 1;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
to {
|
|
20
|
+
opacity: 0;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@keyframes t-spin {
|
|
25
|
+
from {
|
|
26
|
+
transform: rotate(0deg);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
to {
|
|
30
|
+
transform: rotate(360deg);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.#{$prefix}-icon-loading {
|
|
35
|
+
animation: t-spin 1s linear infinite;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// 动态生成 keyframes 动画
|
|
39
|
+
@mixin anim-g-attr-change($name, $attr, $from, $to) {
|
|
40
|
+
@keyframes #{$name} {
|
|
41
|
+
from {
|
|
42
|
+
#{$attr}: #{$from};
|
|
43
|
+
}
|
|
44
|
+
to {
|
|
45
|
+
#{$attr}: #{$to};
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
@keyframes t-zoom-out {
|
|
51
|
+
from {
|
|
52
|
+
transform: scale(0.2);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
to {
|
|
56
|
+
transform: scale(1);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
@use "../_vars.scss" as *;
|
|
2
|
-
@use "../mixins/_text.scss" as *;
|
|
3
|
-
.#{$prefix}-tips {
|
|
4
|
-
font-size: $font-size-s;
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
@include tips-text-status(default);
|
|
8
|
-
@include tips-text-status(error);
|
|
9
|
-
@include tips-text-status(warning);
|
|
10
|
-
@include tips-text-status(success);
|
|
1
|
+
@use "../_vars.scss" as *;
|
|
2
|
+
@use "../mixins/_text.scss" as *;
|
|
3
|
+
.#{$prefix}-tips {
|
|
4
|
+
font-size: $font-size-s;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
@include tips-text-status(default);
|
|
8
|
+
@include tips-text-status(error);
|
|
9
|
+
@include tips-text-status(warning);
|
|
10
|
+
@include tips-text-status(success);
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import React, { useState } from "react";
|
|
2
|
+
import { Switch } from "@tendaui/react";
|
|
3
|
+
|
|
4
|
+
const AsyncExample = () => {
|
|
5
|
+
const [checked, setChecked] = useState(false);
|
|
6
|
+
const [loading, setLoading] = useState(false);
|
|
7
|
+
|
|
8
|
+
const handleChange = (val: boolean) => {
|
|
9
|
+
setLoading(true);
|
|
10
|
+
// 模拟异步请求
|
|
11
|
+
setTimeout(() => {
|
|
12
|
+
setChecked(val);
|
|
13
|
+
setLoading(false);
|
|
14
|
+
}, 1000);
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
return (
|
|
18
|
+
<div>
|
|
19
|
+
<Switch value={checked} loading={loading} onChange={(val) => handleChange(val as boolean)} />
|
|
20
|
+
<div style={{ color: "#666", fontSize: "12px" }}>点击切换,模拟 1 秒异步请求</div>
|
|
21
|
+
</div>
|
|
22
|
+
);
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export default AsyncExample;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import React, { useState } from "react";
|
|
2
|
+
import { Switch } from "@tendaui/react";
|
|
3
|
+
|
|
4
|
+
const BeforeChangeExample = () => {
|
|
5
|
+
const [checked, setChecked] = useState(false);
|
|
6
|
+
|
|
7
|
+
const beforeChange = () => {
|
|
8
|
+
return new Promise<boolean>((resolve) => {
|
|
9
|
+
const confirmed = window.confirm("确定要切换状态吗?");
|
|
10
|
+
resolve(confirmed);
|
|
11
|
+
});
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
return (
|
|
15
|
+
<div>
|
|
16
|
+
<Switch value={checked} beforeChange={beforeChange} onChange={(val) => setChecked(val as boolean)} />
|
|
17
|
+
<div style={{ color: "#666", fontSize: "12px" }}>切换前会弹出确认框,确认后才会切换</div>
|
|
18
|
+
</div>
|
|
19
|
+
);
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export default BeforeChangeExample;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React, { useState } from "react";
|
|
2
|
+
import { Switch } from "@tendaui/react";
|
|
3
|
+
|
|
4
|
+
const ControlledExample = () => {
|
|
5
|
+
const [checked, setChecked] = useState(true);
|
|
6
|
+
return (
|
|
7
|
+
<div>
|
|
8
|
+
<Switch value={checked} onChange={(val) => setChecked(val as boolean)} />
|
|
9
|
+
<div style={{ color: "#666" }}>当前状态:{checked ? "开启" : "关闭"}</div>
|
|
10
|
+
</div>
|
|
11
|
+
);
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export default ControlledExample;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React, { useState } from "react";
|
|
2
|
+
import { Switch } from "@tendaui/react";
|
|
3
|
+
|
|
4
|
+
const CustomValueExample = () => {
|
|
5
|
+
const [value1, setValue1] = useState<string | number | boolean>(1);
|
|
6
|
+
const [value2, setValue2] = useState<string | number | boolean>("open");
|
|
7
|
+
return (
|
|
8
|
+
<div>
|
|
9
|
+
<div style={{ display: "flex", alignItems: "center", gap: "16px" }}>
|
|
10
|
+
<Switch customValue={[1, 0]} value={value1} onChange={(val) => setValue1(val)} />
|
|
11
|
+
<span style={{ color: "#666" }}>数字值: {String(value1)}</span>
|
|
12
|
+
</div>
|
|
13
|
+
<div style={{ display: "flex", alignItems: "center", gap: "16px" }}>
|
|
14
|
+
<Switch customValue={["open", "close"]} value={value2} onChange={(val) => setValue2(val)} />
|
|
15
|
+
<span style={{ color: "#666" }}>字符串值: {String(value2)}</span>
|
|
16
|
+
</div>
|
|
17
|
+
</div>
|
|
18
|
+
);
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export default CustomValueExample;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Switch } from "@tendaui/react";
|
|
3
|
+
|
|
4
|
+
const DisabledExample = () => (
|
|
5
|
+
<div style={{ display: "flex", gap: "24px" }}>
|
|
6
|
+
<div style={{ display: "flex", flexDirection: "column", alignItems: "center", gap: "8px" }}>
|
|
7
|
+
<Switch defaultValue={false} />
|
|
8
|
+
<span style={{ color: "#666", fontSize: "12px" }}>正常关闭</span>
|
|
9
|
+
</div>
|
|
10
|
+
<div style={{ display: "flex", flexDirection: "column", alignItems: "center", gap: "8px" }}>
|
|
11
|
+
<Switch defaultValue={true} />
|
|
12
|
+
<span style={{ color: "#666", fontSize: "12px" }}>正常开启</span>
|
|
13
|
+
</div>
|
|
14
|
+
<div style={{ display: "flex", flexDirection: "column", alignItems: "center", gap: "8px" }}>
|
|
15
|
+
<Switch disabled defaultValue={false} />
|
|
16
|
+
<span style={{ color: "#666", fontSize: "12px" }}>禁用关闭</span>
|
|
17
|
+
</div>
|
|
18
|
+
<div style={{ display: "flex", flexDirection: "column", alignItems: "center", gap: "8px" }}>
|
|
19
|
+
<Switch disabled defaultValue={true} />
|
|
20
|
+
<span style={{ color: "#666", fontSize: "12px" }}>禁用开启</span>
|
|
21
|
+
</div>
|
|
22
|
+
</div>
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
export default DisabledExample;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Switch } from "@tendaui/react";
|
|
3
|
+
|
|
4
|
+
const LoadingExample = () => (
|
|
5
|
+
<div style={{ display: "flex", gap: "24px" }}>
|
|
6
|
+
<div style={{ display: "flex", flexDirection: "column", alignItems: "center", gap: "8px" }}>
|
|
7
|
+
<Switch loading defaultValue={false} />
|
|
8
|
+
<span style={{ color: "#666", fontSize: "12px" }}>加载中(关)</span>
|
|
9
|
+
</div>
|
|
10
|
+
<div style={{ display: "flex", flexDirection: "column", alignItems: "center", gap: "8px" }}>
|
|
11
|
+
<Switch loading defaultValue={true} />
|
|
12
|
+
<span style={{ color: "#666", fontSize: "12px" }}>加载中(开)</span>
|
|
13
|
+
</div>
|
|
14
|
+
</div>
|
|
15
|
+
);
|
|
16
|
+
|
|
17
|
+
export default LoadingExample;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Switch } from "@tendaui/react";
|
|
3
|
+
|
|
4
|
+
const SizesExample = () => (
|
|
5
|
+
<div style={{ display: "flex", gap: "24px", alignItems: "center" }}>
|
|
6
|
+
<div style={{ display: "flex", flexDirection: "column", alignItems: "center", gap: "8px" }}>
|
|
7
|
+
<Switch size="small" defaultValue={true} />
|
|
8
|
+
<span style={{ color: "#666", fontSize: "12px" }}>小</span>
|
|
9
|
+
</div>
|
|
10
|
+
<div style={{ display: "flex", flexDirection: "column", alignItems: "center", gap: "8px" }}>
|
|
11
|
+
<Switch size="medium" defaultValue={true} />
|
|
12
|
+
<span style={{ color: "#666", fontSize: "12px" }}>中(默认)</span>
|
|
13
|
+
</div>
|
|
14
|
+
<div style={{ display: "flex", flexDirection: "column", alignItems: "center", gap: "8px" }}>
|
|
15
|
+
<Switch size="large" defaultValue={true} />
|
|
16
|
+
<span style={{ color: "#666", fontSize: "12px" }}>大</span>
|
|
17
|
+
</div>
|
|
18
|
+
</div>
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
export default SizesExample;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Switch } from "@tendaui/react";
|
|
3
|
+
|
|
4
|
+
const WithLabelExample = () => (
|
|
5
|
+
<div>
|
|
6
|
+
<div style={{ display: "flex", alignItems: "center", gap: "8px" }}>
|
|
7
|
+
<Switch label={["开", "关"]} defaultValue={true} />
|
|
8
|
+
<span style={{ color: "#666" }}>数组形式</span>
|
|
9
|
+
</div>
|
|
10
|
+
<div style={{ display: "flex", alignItems: "center", gap: "8px" }}>
|
|
11
|
+
<Switch label={["ON", "OFF"]} defaultValue={false} />
|
|
12
|
+
<span style={{ color: "#666" }}>英文标签</span>
|
|
13
|
+
</div>
|
|
14
|
+
<div style={{ display: "flex", alignItems: "center", gap: "8px" }}>
|
|
15
|
+
<Switch label={["1", "0"]} defaultValue={true} />
|
|
16
|
+
<span style={{ color: "#666" }}>数字标签</span>
|
|
17
|
+
</div>
|
|
18
|
+
</div>
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
export default WithLabelExample;
|
package/tab/TabPanel.tsx
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, {
|
|
1
|
+
import React, { useState, useEffect } from "react";
|
|
2
2
|
import classNames from "classnames";
|
|
3
3
|
import type { TdTabPanelProps } from "./type";
|
|
4
4
|
import { StyledProps } from "../common";
|
|
@@ -17,13 +17,16 @@ const TabPanel: React.FC<TabPanelProps> = (props) => {
|
|
|
17
17
|
tabPanelDefaultProps
|
|
18
18
|
);
|
|
19
19
|
const { tdTabPanelClassPrefix } = useTabClass();
|
|
20
|
-
const
|
|
20
|
+
const [shouldRender, setShouldRender] = useState(!lazy);
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
// 当标签激活且是延迟渲染时,设置为应该渲染
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
if (lazy && isActive) {
|
|
25
|
+
setShouldRender(true);
|
|
26
|
+
}
|
|
27
|
+
}, [lazy, isActive]);
|
|
25
28
|
|
|
26
|
-
if ((!isActive && destroyOnHide) ||
|
|
29
|
+
if ((!isActive && destroyOnHide) || !shouldRender) {
|
|
27
30
|
return null;
|
|
28
31
|
}
|
|
29
32
|
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import React, { useState } from "react";
|
|
2
|
+
import { Tabs, TabPanel } from "../index";
|
|
3
|
+
|
|
4
|
+
const AddableExample = () => {
|
|
5
|
+
const [activeTab, setActiveTab] = useState("tab1");
|
|
6
|
+
const [tabs, setTabs] = useState([
|
|
7
|
+
{ label: "选项卡一", value: "tab1" },
|
|
8
|
+
{ label: "选项卡二", value: "tab2" }
|
|
9
|
+
]);
|
|
10
|
+
const [tabCount, setTabCount] = useState(2);
|
|
11
|
+
|
|
12
|
+
const handleAdd = () => {
|
|
13
|
+
const newTabValue = `tab${tabCount + 1}`;
|
|
14
|
+
const newTab = { label: `选项卡${tabCount + 1}`, value: newTabValue };
|
|
15
|
+
setTabs([...tabs, newTab]);
|
|
16
|
+
setTabCount(tabCount + 1);
|
|
17
|
+
setActiveTab(newTabValue);
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
const handleRemove = (options: { value: string | number; index: number }) => {
|
|
21
|
+
const newTabs = tabs.filter((tab) => tab.value !== options.value);
|
|
22
|
+
setTabs(newTabs);
|
|
23
|
+
if (activeTab === options.value && newTabs.length > 0) {
|
|
24
|
+
setActiveTab(newTabs[0].value);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
return (
|
|
29
|
+
<Tabs
|
|
30
|
+
value={activeTab}
|
|
31
|
+
onChange={(val) => setActiveTab(val as string)}
|
|
32
|
+
addable
|
|
33
|
+
onAdd={handleAdd}
|
|
34
|
+
onRemove={handleRemove}
|
|
35
|
+
>
|
|
36
|
+
{tabs.map((tab) => (
|
|
37
|
+
<TabPanel key={tab.value} label={tab.label} value={tab.value} removable>
|
|
38
|
+
<div style={{ padding: "16px" }}>{tab.label} 的内容</div>
|
|
39
|
+
</TabPanel>
|
|
40
|
+
))}
|
|
41
|
+
</Tabs>
|
|
42
|
+
);
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export default AddableExample;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import React, { useState } from "react";
|
|
2
|
+
import { Tabs, TabPanel } from "../index";
|
|
3
|
+
|
|
4
|
+
const CardThemeExample = () => {
|
|
5
|
+
const [activeTab, setActiveTab] = useState("tab1");
|
|
6
|
+
|
|
7
|
+
return (
|
|
8
|
+
<Tabs value={activeTab} onChange={(val) => setActiveTab(val as string)} theme="card">
|
|
9
|
+
<TabPanel label="选项卡一" value="tab1">
|
|
10
|
+
<div style={{ padding: "16px" }}>卡片风格 - 选项卡一的内容</div>
|
|
11
|
+
</TabPanel>
|
|
12
|
+
<TabPanel label="选项卡二" value="tab2">
|
|
13
|
+
<div style={{ padding: "16px" }}>卡片风格 - 选项卡二的内容</div>
|
|
14
|
+
</TabPanel>
|
|
15
|
+
<TabPanel label="选项卡三" value="tab3">
|
|
16
|
+
<div style={{ padding: "16px" }}>卡片风格 - 选项卡三的内容</div>
|
|
17
|
+
</TabPanel>
|
|
18
|
+
</Tabs>
|
|
19
|
+
);
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export default CardThemeExample;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import React, { useState } from "react";
|
|
2
|
+
import { Tabs, TabPanel } from "../index";
|
|
3
|
+
|
|
4
|
+
const DefaultExample = () => {
|
|
5
|
+
const [activeTab, setActiveTab] = useState("tab1");
|
|
6
|
+
|
|
7
|
+
return (
|
|
8
|
+
<Tabs value={activeTab} onChange={(val) => setActiveTab(val as string)}>
|
|
9
|
+
<TabPanel label="选项卡一" value="tab1">
|
|
10
|
+
<div style={{ padding: "16px" }}>选项卡一的内容</div>
|
|
11
|
+
</TabPanel>
|
|
12
|
+
<TabPanel label="选项卡二" value="tab2">
|
|
13
|
+
<div style={{ padding: "16px" }}>选项卡二的内容</div>
|
|
14
|
+
</TabPanel>
|
|
15
|
+
<TabPanel label="选项卡三" value="tab3">
|
|
16
|
+
<div style={{ padding: "16px" }}>选项卡三的内容</div>
|
|
17
|
+
</TabPanel>
|
|
18
|
+
</Tabs>
|
|
19
|
+
);
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export default DefaultExample;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import React, { useState } from "react";
|
|
2
|
+
import { Tabs, TabPanel } from "../index";
|
|
3
|
+
|
|
4
|
+
const DisabledExample = () => {
|
|
5
|
+
const [activeTab, setActiveTab] = useState("tab1");
|
|
6
|
+
|
|
7
|
+
return (
|
|
8
|
+
<div style={{ display: "flex", flexDirection: "column", gap: "24px" }}>
|
|
9
|
+
<div>
|
|
10
|
+
<div style={{ marginBottom: "8px", color: "#666" }}>部分禁用</div>
|
|
11
|
+
<Tabs value={activeTab} onChange={(val) => setActiveTab(val as string)}>
|
|
12
|
+
<TabPanel label="选项卡一" value="tab1">
|
|
13
|
+
<div style={{ padding: "16px" }}>选项卡一的内容</div>
|
|
14
|
+
</TabPanel>
|
|
15
|
+
<TabPanel label="选项卡二(禁用)" value="tab2" disabled>
|
|
16
|
+
<div style={{ padding: "16px" }}>选项卡二的内容</div>
|
|
17
|
+
</TabPanel>
|
|
18
|
+
<TabPanel label="选项卡三" value="tab3">
|
|
19
|
+
<div style={{ padding: "16px" }}>选项卡三的内容</div>
|
|
20
|
+
</TabPanel>
|
|
21
|
+
</Tabs>
|
|
22
|
+
</div>
|
|
23
|
+
<div>
|
|
24
|
+
<div style={{ marginBottom: "8px", color: "#666" }}>全部禁用</div>
|
|
25
|
+
<Tabs value="tab1" disabled>
|
|
26
|
+
<TabPanel label="选项卡一" value="tab1">
|
|
27
|
+
<div style={{ padding: "16px" }}>选项卡一的内容</div>
|
|
28
|
+
</TabPanel>
|
|
29
|
+
<TabPanel label="选项卡二" value="tab2">
|
|
30
|
+
<div style={{ padding: "16px" }}>选项卡二的内容</div>
|
|
31
|
+
</TabPanel>
|
|
32
|
+
</Tabs>
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
);
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export default DisabledExample;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import React, { useState } from "react";
|
|
2
|
+
import { Tabs, TabPanel } from "../index";
|
|
3
|
+
|
|
4
|
+
const LazyExample = () => {
|
|
5
|
+
const [activeTab, setActiveTab] = useState("tab1");
|
|
6
|
+
|
|
7
|
+
return (
|
|
8
|
+
<div>
|
|
9
|
+
<div style={{ marginBottom: "8px", color: "#666" }}>懒加载模式下,只有在选项卡被激活时才会渲染内容</div>
|
|
10
|
+
<Tabs value={activeTab} onChange={(val) => setActiveTab(val as string)}>
|
|
11
|
+
<TabPanel label="选项卡一" value="tab1" lazy>
|
|
12
|
+
<div style={{ padding: "16px" }}>选项卡一的内容(懒加载)</div>
|
|
13
|
+
</TabPanel>
|
|
14
|
+
<TabPanel label="选项卡二" value="tab2" lazy>
|
|
15
|
+
<div style={{ padding: "16px" }}>选项卡二的内容(懒加载)</div>
|
|
16
|
+
</TabPanel>
|
|
17
|
+
<TabPanel label="选项卡三" value="tab3" lazy>
|
|
18
|
+
<div style={{ padding: "16px" }}>选项卡三的内容(懒加载)</div>
|
|
19
|
+
</TabPanel>
|
|
20
|
+
</Tabs>
|
|
21
|
+
</div>
|
|
22
|
+
);
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export default LazyExample;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import React, { useState } from "react";
|
|
2
|
+
import { Tabs, TabPanel } from "../index";
|
|
3
|
+
|
|
4
|
+
const PlacementExample = () => {
|
|
5
|
+
const [placement, setPlacement] = useState<"top" | "bottom" | "left" | "right">('top');
|
|
6
|
+
const [activeTab, setActiveTab] = useState("tab1");
|
|
7
|
+
|
|
8
|
+
return (
|
|
9
|
+
<div>
|
|
10
|
+
<div style={{ marginBottom: "16px" }}>
|
|
11
|
+
<span style={{ marginRight: "8px" }}>选项卡位置:</span>
|
|
12
|
+
<select value={placement} onChange={(e) => setPlacement(e.target.value as any)}>
|
|
13
|
+
<option value="top">顶部</option>
|
|
14
|
+
<option value="bottom">底部</option>
|
|
15
|
+
<option value="left">左侧</option>
|
|
16
|
+
<option value="right">右侧</option>
|
|
17
|
+
</select>
|
|
18
|
+
</div>
|
|
19
|
+
<div style={{ height: "200px", border: "1px solid #eee" }}>
|
|
20
|
+
<Tabs value={activeTab} onChange={(val) => setActiveTab(val as string)} placement={placement}>
|
|
21
|
+
<TabPanel label="选项卡一" value="tab1">
|
|
22
|
+
<div style={{ padding: "16px" }}>选项卡一的内容</div>
|
|
23
|
+
</TabPanel>
|
|
24
|
+
<TabPanel label="选项卡二" value="tab2">
|
|
25
|
+
<div style={{ padding: "16px" }}>选项卡二的内容</div>
|
|
26
|
+
</TabPanel>
|
|
27
|
+
<TabPanel label="选项卡三" value="tab3">
|
|
28
|
+
<div style={{ padding: "16px" }}>选项卡三的内容</div>
|
|
29
|
+
</TabPanel>
|
|
30
|
+
</Tabs>
|
|
31
|
+
</div>
|
|
32
|
+
</div>
|
|
33
|
+
);
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export default PlacementExample;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import React, { useState } from "react";
|
|
2
|
+
import { Tabs, TabPanel } from "../index";
|
|
3
|
+
|
|
4
|
+
const RemovableExample = () => {
|
|
5
|
+
const [activeTab, setActiveTab] = useState("tab1");
|
|
6
|
+
const [tabs, setTabs] = useState([
|
|
7
|
+
{ label: "选项卡一", value: "tab1" },
|
|
8
|
+
{ label: "选项卡二", value: "tab2" },
|
|
9
|
+
{ label: "选项卡三", value: "tab3" }
|
|
10
|
+
]);
|
|
11
|
+
|
|
12
|
+
const handleRemove = (options: { value: string | number; index: number }) => {
|
|
13
|
+
const newTabs = tabs.filter((tab) => tab.value !== options.value);
|
|
14
|
+
setTabs(newTabs);
|
|
15
|
+
if (activeTab === options.value && newTabs.length > 0) {
|
|
16
|
+
setActiveTab(newTabs[0].value);
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
return (
|
|
21
|
+
<Tabs value={activeTab} onChange={(val) => setActiveTab(val as string)} onRemove={handleRemove}>
|
|
22
|
+
{tabs.map((tab) => (
|
|
23
|
+
<TabPanel key={tab.value} label={tab.label} value={tab.value} removable>
|
|
24
|
+
<div style={{ padding: "16px" }}>{tab.label} 的内容</div>
|
|
25
|
+
</TabPanel>
|
|
26
|
+
))}
|
|
27
|
+
</Tabs>
|
|
28
|
+
);
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export default RemovableExample;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Tabs, TabPanel } from "../index";
|
|
3
|
+
|
|
4
|
+
const SizesExample = () => (
|
|
5
|
+
<div style={{ display: "flex", flexDirection: "column", gap: "24px" }}>
|
|
6
|
+
<div>
|
|
7
|
+
<div style={{ marginBottom: "8px", color: "#666" }}>中尺寸(默认)</div>
|
|
8
|
+
<Tabs defaultValue="tab1" size="medium">
|
|
9
|
+
<TabPanel label="选项卡一" value="tab1">
|
|
10
|
+
<div style={{ padding: "16px" }}>中尺寸内容</div>
|
|
11
|
+
</TabPanel>
|
|
12
|
+
<TabPanel label="选项卡二" value="tab2">
|
|
13
|
+
<div style={{ padding: "16px" }}>中尺寸内容</div>
|
|
14
|
+
</TabPanel>
|
|
15
|
+
</Tabs>
|
|
16
|
+
</div>
|
|
17
|
+
<div>
|
|
18
|
+
<div style={{ marginBottom: "8px", color: "#666" }}>大尺寸</div>
|
|
19
|
+
<Tabs defaultValue="tab1" size="large">
|
|
20
|
+
<TabPanel label="选项卡一" value="tab1">
|
|
21
|
+
<div style={{ padding: "16px" }}>大尺寸内容</div>
|
|
22
|
+
</TabPanel>
|
|
23
|
+
<TabPanel label="选项卡二" value="tab2">
|
|
24
|
+
<div style={{ padding: "16px" }}>大尺寸内容</div>
|
|
25
|
+
</TabPanel>
|
|
26
|
+
</Tabs>
|
|
27
|
+
</div>
|
|
28
|
+
</div>
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
export default SizesExample;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import React, { useState } from "react";
|
|
2
|
+
import { Tabs, TabPanel } from "../index";
|
|
3
|
+
|
|
4
|
+
const WithActionExample = () => {
|
|
5
|
+
const [activeTab, setActiveTab] = useState("tab1");
|
|
6
|
+
|
|
7
|
+
return (
|
|
8
|
+
<Tabs
|
|
9
|
+
value={activeTab}
|
|
10
|
+
onChange={(val) => setActiveTab(val as string)}
|
|
11
|
+
action={<button style={{ marginRight: "8px", cursor: "pointer" }}>操作按钮</button>}
|
|
12
|
+
>
|
|
13
|
+
<TabPanel label="选项卡一" value="tab1">
|
|
14
|
+
<div style={{ padding: "16px" }}>选项卡一的内容</div>
|
|
15
|
+
</TabPanel>
|
|
16
|
+
<TabPanel label="选项卡二" value="tab2">
|
|
17
|
+
<div style={{ padding: "16px" }}>选项卡二的内容</div>
|
|
18
|
+
</TabPanel>
|
|
19
|
+
<TabPanel label="选项卡三" value="tab3">
|
|
20
|
+
<div style={{ padding: "16px" }}>选项卡三的内容</div>
|
|
21
|
+
</TabPanel>
|
|
22
|
+
</Tabs>
|
|
23
|
+
);
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export default WithActionExample;
|
package/table/Cell.tsx
CHANGED
|
@@ -3,6 +3,7 @@ import classNames from "classnames";
|
|
|
3
3
|
import { isFunction, get } from "lodash-es";
|
|
4
4
|
import useConfig from "../hooks/useConfig";
|
|
5
5
|
import { BaseTableCellParams, TableRowData } from "./type";
|
|
6
|
+
import Ellipsis from "./Ellipsis";
|
|
6
7
|
|
|
7
8
|
export interface CellProps<T extends TableRowData = TableRowData> {
|
|
8
9
|
cellParams: BaseTableCellParams<T>;
|
|
@@ -58,13 +59,9 @@ const Cell = <T extends TableRowData = TableRowData>(props: CellProps<T>) => {
|
|
|
58
59
|
// 处理省略文本
|
|
59
60
|
const isEllipsis = Boolean(col.ellipsis);
|
|
60
61
|
const cellContent = isEllipsis ? (
|
|
61
|
-
<
|
|
62
|
-
className={`${classPrefix}-table__ellipsis`}
|
|
63
|
-
title={String(cellNode)}
|
|
64
|
-
style={{ width: "100%", overflow: "hidden" }}
|
|
65
|
-
>
|
|
62
|
+
<Ellipsis classPrefix={classPrefix}>
|
|
66
63
|
{cellNode}
|
|
67
|
-
</
|
|
64
|
+
</Ellipsis>
|
|
68
65
|
) : (
|
|
69
66
|
cellNode
|
|
70
67
|
);
|