@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,18 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Tag } from "@tendaui/react";
|
|
3
|
+
|
|
4
|
+
const SizeExample = () => (
|
|
5
|
+
<div style={{ display: "flex", gap: "8px", alignItems: "center" }}>
|
|
6
|
+
<Tag size="small" theme="primary">
|
|
7
|
+
小标签
|
|
8
|
+
</Tag>
|
|
9
|
+
<Tag size="medium" theme="primary">
|
|
10
|
+
中标签
|
|
11
|
+
</Tag>
|
|
12
|
+
<Tag size="large" theme="primary">
|
|
13
|
+
大标签
|
|
14
|
+
</Tag>
|
|
15
|
+
</div>
|
|
16
|
+
);
|
|
17
|
+
|
|
18
|
+
export default SizeExample;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Tag } from "@tendaui/react";
|
|
3
|
+
|
|
4
|
+
const VariantExample = () => (
|
|
5
|
+
<div style={{ display: "flex", flexDirection: "column", gap: "12px" }}>
|
|
6
|
+
<div style={{ display: "flex", gap: "8px" }}>
|
|
7
|
+
<Tag theme="primary" variant="light">
|
|
8
|
+
浅色标签
|
|
9
|
+
</Tag>
|
|
10
|
+
<Tag theme="warning" variant="light">
|
|
11
|
+
浅色标签
|
|
12
|
+
</Tag>
|
|
13
|
+
<Tag theme="danger" variant="light">
|
|
14
|
+
浅色标签
|
|
15
|
+
</Tag>
|
|
16
|
+
<Tag theme="success" variant="light">
|
|
17
|
+
浅色标签
|
|
18
|
+
</Tag>
|
|
19
|
+
</div>
|
|
20
|
+
<div style={{ display: "flex", gap: "8px" }}>
|
|
21
|
+
<Tag theme="primary" variant="dark">
|
|
22
|
+
深色标签
|
|
23
|
+
</Tag>
|
|
24
|
+
<Tag theme="warning" variant="dark">
|
|
25
|
+
深色标签
|
|
26
|
+
</Tag>
|
|
27
|
+
<Tag theme="danger" variant="dark">
|
|
28
|
+
深色标签
|
|
29
|
+
</Tag>
|
|
30
|
+
<Tag theme="success" variant="dark">
|
|
31
|
+
深色标签
|
|
32
|
+
</Tag>
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
export default VariantExample;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { TagInput } from "@tendaui/react";
|
|
3
|
+
|
|
4
|
+
const CollapsedExample = () => (
|
|
5
|
+
<div style={{ display: "flex", flexDirection: "column", gap: "16px" }}>
|
|
6
|
+
<div>
|
|
7
|
+
<div style={{ marginBottom: "8px", color: "#666" }}>超过 2 个折叠</div>
|
|
8
|
+
<TagInput
|
|
9
|
+
defaultValue={["标签一", "标签二", "标签三", "标签四", "标签五"]}
|
|
10
|
+
minCollapsedNum={2}
|
|
11
|
+
placeholder="请输入"
|
|
12
|
+
style={{ width: "400px" }}
|
|
13
|
+
/>
|
|
14
|
+
</div>
|
|
15
|
+
<div>
|
|
16
|
+
<div style={{ marginBottom: "8px", color: "#666" }}>超过 3 个折叠</div>
|
|
17
|
+
<TagInput
|
|
18
|
+
defaultValue={["标签一", "标签二", "标签三", "标签四", "标签五"]}
|
|
19
|
+
minCollapsedNum={3}
|
|
20
|
+
placeholder="请输入"
|
|
21
|
+
style={{ width: "400px" }}
|
|
22
|
+
/>
|
|
23
|
+
</div>
|
|
24
|
+
</div>
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
export default CollapsedExample;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import React, { useState } from "react";
|
|
2
|
+
import { TagInput, TagInputValue } from "@tendaui/react";
|
|
3
|
+
|
|
4
|
+
const Example = () => {
|
|
5
|
+
const [controlledTags, setControlledTags] = useState<TagInputValue>(["Vue", "React"]);
|
|
6
|
+
return (
|
|
7
|
+
<div style={{ display: "flex", flexDirection: "column", gap: "16px" }}>
|
|
8
|
+
<div>
|
|
9
|
+
<div style={{ marginBottom: "8px", color: "#666" }}>受控模式</div>
|
|
10
|
+
<TagInput
|
|
11
|
+
value={controlledTags}
|
|
12
|
+
onChange={(val) => setControlledTags(val)}
|
|
13
|
+
placeholder="请输入"
|
|
14
|
+
clearable
|
|
15
|
+
style={{ width: "400px" }}
|
|
16
|
+
/>
|
|
17
|
+
</div>
|
|
18
|
+
<div>
|
|
19
|
+
<div style={{ marginBottom: "8px", color: "#666" }}>非受控模式</div>
|
|
20
|
+
<TagInput defaultValue={["Svelte", "Solid"]} placeholder="请输入" clearable style={{ width: "400px" }} />
|
|
21
|
+
</div>
|
|
22
|
+
</div>
|
|
23
|
+
);
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export default Example;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React, { useState } from "react";
|
|
2
|
+
import { TagInput, TagInputValue } from "@tendaui/react";
|
|
3
|
+
|
|
4
|
+
const DefaultExample = () => {
|
|
5
|
+
const [tags, setTags] = useState<TagInputValue>(["Vue", "React", "Angular"]);
|
|
6
|
+
|
|
7
|
+
return (
|
|
8
|
+
<div style={{ width: "400px" }}>
|
|
9
|
+
<TagInput value={tags} onChange={(val) => setTags(val)} clearable placeholder="请输入标签,按回车添加" />
|
|
10
|
+
<div style={{ marginTop: "8px", color: "#666", fontSize: "12px" }}>当前标签:{tags.join(", ")}</div>
|
|
11
|
+
</div>
|
|
12
|
+
);
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export default DefaultExample;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { TagInput } from "@tendaui/react";
|
|
3
|
+
|
|
4
|
+
const DisabledReadonlyExample = () => (
|
|
5
|
+
<div style={{ display: "flex", flexDirection: "column", gap: "16px" }}>
|
|
6
|
+
<div>
|
|
7
|
+
<div style={{ marginBottom: "8px", color: "#666" }}>正常</div>
|
|
8
|
+
<TagInput defaultValue={["Vue", "React"]} placeholder="正常" style={{ width: "400px" }} />
|
|
9
|
+
</div>
|
|
10
|
+
<div>
|
|
11
|
+
<div style={{ marginBottom: "8px", color: "#666" }}>禁用</div>
|
|
12
|
+
<TagInput defaultValue={["Vue", "React"]} disabled placeholder="禁用" style={{ width: "400px" }} />
|
|
13
|
+
</div>
|
|
14
|
+
<div>
|
|
15
|
+
<div style={{ marginBottom: "8px", color: "#666" }}>只读</div>
|
|
16
|
+
<TagInput defaultValue={["Vue", "React"]} readonly placeholder="只读" style={{ width: "400px" }} />
|
|
17
|
+
</div>
|
|
18
|
+
</div>
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
export default DisabledReadonlyExample;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import React, { useState } from "react";
|
|
2
|
+
import { TagInput, TagInputValue } from "@tendaui/react";
|
|
3
|
+
|
|
4
|
+
const EventsExample = () => {
|
|
5
|
+
const [tags, setTags] = useState<TagInputValue>(["Vue"]);
|
|
6
|
+
const [logs, setLogs] = useState<string[]>([]);
|
|
7
|
+
|
|
8
|
+
const addLog = (msg: string) => {
|
|
9
|
+
setLogs((prev) => [...prev.slice(-4), msg]);
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
return (
|
|
13
|
+
<div style={{ display: "flex", gap: "24px", flexDirection: "column" }}>
|
|
14
|
+
<div style={{ flex: 1 }}>
|
|
15
|
+
<TagInput
|
|
16
|
+
value={tags}
|
|
17
|
+
onChange={(val, context) => {
|
|
18
|
+
setTags(val);
|
|
19
|
+
addLog(`onChange: ${JSON.stringify(val)}, trigger: ${context.trigger}`);
|
|
20
|
+
}}
|
|
21
|
+
onEnter={(val, context) => {
|
|
22
|
+
addLog(`onEnter: inputValue=${context.inputValue}`);
|
|
23
|
+
}}
|
|
24
|
+
onRemove={(context) => {
|
|
25
|
+
addLog(`onRemove: removed=${context.item}, index=${context.index}`);
|
|
26
|
+
}}
|
|
27
|
+
onClear={() => {
|
|
28
|
+
addLog("onClear: 清空所有标签");
|
|
29
|
+
}}
|
|
30
|
+
onPaste={(context) => {
|
|
31
|
+
addLog(`onPaste: ${context.pasteValue}`);
|
|
32
|
+
}}
|
|
33
|
+
clearable
|
|
34
|
+
placeholder="请输入标签"
|
|
35
|
+
style={{ width: "350px" }}
|
|
36
|
+
/>
|
|
37
|
+
</div>
|
|
38
|
+
<div
|
|
39
|
+
style={{
|
|
40
|
+
flex: 1,
|
|
41
|
+
padding: "12px",
|
|
42
|
+
background: "var(--td-bg-color-2)",
|
|
43
|
+
borderRadius: "4px",
|
|
44
|
+
fontSize: "12px",
|
|
45
|
+
maxHeight: "150px",
|
|
46
|
+
overflow: "auto"
|
|
47
|
+
}}
|
|
48
|
+
>
|
|
49
|
+
<div style={{ fontWeight: "bold", marginBottom: "8px" }}>事件日志:</div>
|
|
50
|
+
{logs.length === 0 ? (
|
|
51
|
+
<div style={{ color: "#999" }}>暂无日志</div>
|
|
52
|
+
) : (
|
|
53
|
+
logs.map((log, index) => (
|
|
54
|
+
<div key={index} style={{ marginBottom: "4px", color: "#666" }}>
|
|
55
|
+
{log}
|
|
56
|
+
</div>
|
|
57
|
+
))
|
|
58
|
+
)}
|
|
59
|
+
</div>
|
|
60
|
+
</div>
|
|
61
|
+
);
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
export default EventsExample;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { TagInput } from "@tendaui/react";
|
|
3
|
+
|
|
4
|
+
const ExcessDisplayExample = () => (
|
|
5
|
+
<div style={{ display: "flex", flexDirection: "column", gap: "24px", width: "500px" }}>
|
|
6
|
+
<div>
|
|
7
|
+
<div style={{ marginBottom: "8px", color: "#666" }}>换行显示(默认)</div>
|
|
8
|
+
<TagInput
|
|
9
|
+
defaultValue={["标签一", "标签二", "标签三", "标签四", "标签五", "标签六"]}
|
|
10
|
+
excessTagsDisplayType="break-line"
|
|
11
|
+
placeholder="请输入"
|
|
12
|
+
style={{ width: "300px" }}
|
|
13
|
+
/>
|
|
14
|
+
</div>
|
|
15
|
+
<div>
|
|
16
|
+
<div style={{ marginBottom: "8px", color: "#666" }}>横向滚动</div>
|
|
17
|
+
<TagInput
|
|
18
|
+
defaultValue={["标签一", "标签二", "标签三", "标签四", "标签五", "标签六"]}
|
|
19
|
+
excessTagsDisplayType="scroll"
|
|
20
|
+
placeholder="请输入"
|
|
21
|
+
style={{ width: "300px" }}
|
|
22
|
+
/>
|
|
23
|
+
</div>
|
|
24
|
+
</div>
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
export default ExcessDisplayExample;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import React, { useState } from "react";
|
|
2
|
+
import { TagInput, TagInputValue } from "@tendaui/react";
|
|
3
|
+
|
|
4
|
+
const MaxTagsExample = () => {
|
|
5
|
+
const [tags, setTags] = useState<TagInputValue>(["Vue", "React"]);
|
|
6
|
+
|
|
7
|
+
return (
|
|
8
|
+
<div style={{ display: "flex", flexDirection: "column", gap: "8px" }}>
|
|
9
|
+
<TagInput
|
|
10
|
+
value={tags}
|
|
11
|
+
onChange={(val) => setTags(val)}
|
|
12
|
+
max={5}
|
|
13
|
+
placeholder="最多输入 5 个标签"
|
|
14
|
+
clearable
|
|
15
|
+
style={{ width: "400px" }}
|
|
16
|
+
/>
|
|
17
|
+
<div style={{ color: "#666", fontSize: "12px" }}>已输入 {tags.length}/5 个标签</div>
|
|
18
|
+
</div>
|
|
19
|
+
);
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export default MaxTagsExample;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { TagInput } from "@tendaui/react";
|
|
3
|
+
|
|
4
|
+
const SizesExample = () => (
|
|
5
|
+
<div style={{ display: "flex", flexDirection: "column", gap: "16px" }}>
|
|
6
|
+
<div>
|
|
7
|
+
<div style={{ marginBottom: "8px", color: "#666" }}>小尺寸</div>
|
|
8
|
+
<TagInput size="small" defaultValue={["标签一", "标签二"]} placeholder="小尺寸" style={{ width: "400px" }} />
|
|
9
|
+
</div>
|
|
10
|
+
<div>
|
|
11
|
+
<div style={{ marginBottom: "8px", color: "#666" }}>中尺寸(默认)</div>
|
|
12
|
+
<TagInput size="medium" defaultValue={["标签一", "标签二"]} placeholder="中尺寸" style={{ width: "400px" }} />
|
|
13
|
+
</div>
|
|
14
|
+
<div>
|
|
15
|
+
<div style={{ marginBottom: "8px", color: "#666" }}>大尺寸</div>
|
|
16
|
+
<TagInput size="large" defaultValue={["标签一", "标签二"]} placeholder="大尺寸" style={{ width: "400px" }} />
|
|
17
|
+
</div>
|
|
18
|
+
</div>
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
export default SizesExample;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { TagInput } from "@tendaui/react";
|
|
3
|
+
|
|
4
|
+
const StatusExample = () => (
|
|
5
|
+
<div style={{ display: "flex", flexDirection: "column", gap: "24px", width: "500px", margin: "8px 0" }}>
|
|
6
|
+
<TagInput
|
|
7
|
+
status="default"
|
|
8
|
+
defaultValue={["默认"]}
|
|
9
|
+
tips="这是提示信息"
|
|
10
|
+
placeholder="默认状态"
|
|
11
|
+
style={{ width: "400px" }}
|
|
12
|
+
/>
|
|
13
|
+
<TagInput
|
|
14
|
+
status="success"
|
|
15
|
+
defaultValue={["成功"]}
|
|
16
|
+
tips="校验通过"
|
|
17
|
+
placeholder="成功状态"
|
|
18
|
+
style={{ width: "400px" }}
|
|
19
|
+
/>
|
|
20
|
+
<TagInput
|
|
21
|
+
status="warning"
|
|
22
|
+
defaultValue={["警告"]}
|
|
23
|
+
tips="请注意"
|
|
24
|
+
placeholder="警告状态"
|
|
25
|
+
style={{ width: "400px" }}
|
|
26
|
+
/>
|
|
27
|
+
<TagInput
|
|
28
|
+
status="error"
|
|
29
|
+
defaultValue={["错误"]}
|
|
30
|
+
tips="输入有误"
|
|
31
|
+
placeholder="错误状态"
|
|
32
|
+
style={{ width: "400px" }}
|
|
33
|
+
/>
|
|
34
|
+
</div>
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
export default StatusExample;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { TagInput } from "@tendaui/react";
|
|
3
|
+
|
|
4
|
+
const WithLabelExample = () => (
|
|
5
|
+
<div style={{ display: "flex", flexDirection: "column", gap: "16px" }}>
|
|
6
|
+
<TagInput
|
|
7
|
+
label="技术栈:"
|
|
8
|
+
defaultValue={["React", "TypeScript"]}
|
|
9
|
+
placeholder="请输入"
|
|
10
|
+
clearable
|
|
11
|
+
style={{ width: "450px" }}
|
|
12
|
+
/>
|
|
13
|
+
<TagInput
|
|
14
|
+
label="城市:"
|
|
15
|
+
defaultValue={["北京", "上海"]}
|
|
16
|
+
placeholder="请输入"
|
|
17
|
+
clearable
|
|
18
|
+
style={{ width: "450px" }}
|
|
19
|
+
/>
|
|
20
|
+
</div>
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
export default WithLabelExample;
|
|
@@ -103,7 +103,7 @@ export default function useTagList(props: TagInputProps) {
|
|
|
103
103
|
value: tagValue,
|
|
104
104
|
count: tagValue.length - minCollapsedNum,
|
|
105
105
|
collapsedTags: tagValue.slice(minCollapsedNum, tagValue.length),
|
|
106
|
-
collapsedSelectedItems:
|
|
106
|
+
collapsedSelectedItems: options.slice(minCollapsedNum, tagValue.length) as TagInputValue,
|
|
107
107
|
onClose
|
|
108
108
|
};
|
|
109
109
|
const more = isFunction(collapsedItems) ? collapsedItems(params) : collapsedItems;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import React, { forwardRef, useState, useEffect, useRef, useImperativeHandle } from "react";
|
|
2
|
+
import classNames from "classnames";
|
|
3
|
+
import Popup, { PopupRef } from "../popup";
|
|
4
|
+
import useConfig from "../hooks/useConfig";
|
|
5
|
+
import type { TdTooltipProps } from "./type";
|
|
6
|
+
import { tooltipDefaultProps } from "./defaultProps";
|
|
7
|
+
import useDefaultProps from "../hooks/useDefaultProps";
|
|
8
|
+
|
|
9
|
+
export type TooltipProps = TdTooltipProps;
|
|
10
|
+
|
|
11
|
+
const Tooltip = forwardRef<Partial<PopupRef>, TdTooltipProps>((originalProps, ref) => {
|
|
12
|
+
const props = useDefaultProps<TdTooltipProps>(originalProps, tooltipDefaultProps);
|
|
13
|
+
const {
|
|
14
|
+
theme,
|
|
15
|
+
showArrow,
|
|
16
|
+
destroyOnClose,
|
|
17
|
+
overlayClassName,
|
|
18
|
+
children,
|
|
19
|
+
duration,
|
|
20
|
+
placement,
|
|
21
|
+
onVisibleChange,
|
|
22
|
+
...restProps
|
|
23
|
+
} = props;
|
|
24
|
+
|
|
25
|
+
const { classPrefix } = useConfig();
|
|
26
|
+
const [timeUp, setTimeUp] = useState(false);
|
|
27
|
+
const popupRef = useRef<PopupRef>(null);
|
|
28
|
+
const timerRef = useRef<number | null>(null);
|
|
29
|
+
const toolTipClass = classNames(
|
|
30
|
+
`${classPrefix}-tooltip`,
|
|
31
|
+
{
|
|
32
|
+
[`${classPrefix}-tooltip--${theme}`]: theme
|
|
33
|
+
},
|
|
34
|
+
overlayClassName
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
function handleVisibleChange(visible: boolean, context: any) {
|
|
38
|
+
setTimeUp(false);
|
|
39
|
+
onVisibleChange?.(visible, context);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
useEffect(() => {
|
|
43
|
+
if (duration !== 0 && !timeUp) {
|
|
44
|
+
popupRef.current?.setVisible?.(true);
|
|
45
|
+
timerRef.current = window.setTimeout(() => {
|
|
46
|
+
popupRef.current?.setVisible?.(false);
|
|
47
|
+
setTimeUp(true);
|
|
48
|
+
}, duration);
|
|
49
|
+
}
|
|
50
|
+
return () => {
|
|
51
|
+
window.clearTimeout(timerRef.current);
|
|
52
|
+
};
|
|
53
|
+
}, [duration, timeUp]);
|
|
54
|
+
|
|
55
|
+
useImperativeHandle(ref, () => ({
|
|
56
|
+
...(popupRef.current || {})
|
|
57
|
+
}));
|
|
58
|
+
|
|
59
|
+
return (
|
|
60
|
+
<Popup
|
|
61
|
+
ref={popupRef}
|
|
62
|
+
destroyOnClose={destroyOnClose}
|
|
63
|
+
showArrow={showArrow}
|
|
64
|
+
overlayClassName={toolTipClass}
|
|
65
|
+
onVisibleChange={handleVisibleChange}
|
|
66
|
+
placement={placement}
|
|
67
|
+
{...restProps}
|
|
68
|
+
>
|
|
69
|
+
{children}
|
|
70
|
+
</Popup>
|
|
71
|
+
);
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
Tooltip.displayName = "Tooltip";
|
|
75
|
+
|
|
76
|
+
export default Tooltip;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Tooltip, Button } from '@tendaui/react';
|
|
3
|
+
|
|
4
|
+
const BaseTooltipExample = () => {
|
|
5
|
+
return (
|
|
6
|
+
<div style={{ display: 'flex', gap: '16px', padding: '24px' }}>
|
|
7
|
+
<Tooltip content="这是一个默认提示">
|
|
8
|
+
<Button>默认提示</Button>
|
|
9
|
+
</Tooltip>
|
|
10
|
+
|
|
11
|
+
<Tooltip content="这是一个浅色主题提示" theme="light">
|
|
12
|
+
<Button variant="outline">浅色主题</Button>
|
|
13
|
+
</Tooltip>
|
|
14
|
+
|
|
15
|
+
<Tooltip content="点击查看提示" trigger="click">
|
|
16
|
+
<Button variant="dashed">点击触发</Button>
|
|
17
|
+
</Tooltip>
|
|
18
|
+
|
|
19
|
+
<Tooltip content="3秒后自动消失" duration={3000}>
|
|
20
|
+
<Button variant="text">自动消失</Button>
|
|
21
|
+
</Tooltip>
|
|
22
|
+
</div>
|
|
23
|
+
);
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export default BaseTooltipExample;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Tooltip, Button, Tag } from '@tendaui/react';
|
|
3
|
+
|
|
4
|
+
const CustomContentTooltipExample = () => {
|
|
5
|
+
return (
|
|
6
|
+
<div style={{ display: 'flex', gap: '16px', padding: '24px' }}>
|
|
7
|
+
<Tooltip
|
|
8
|
+
content={
|
|
9
|
+
<div style={{ padding: '8px' }}>
|
|
10
|
+
<div style={{ fontWeight: 'bold', marginBottom: '4px' }}>用户信息</div>
|
|
11
|
+
<div>姓名: 张三</div>
|
|
12
|
+
<div>年龄: 28</div>
|
|
13
|
+
<div>职位: 前端工程师</div>
|
|
14
|
+
</div>
|
|
15
|
+
}
|
|
16
|
+
>
|
|
17
|
+
<Button>用户信息</Button>
|
|
18
|
+
</Tooltip>
|
|
19
|
+
|
|
20
|
+
<Tooltip
|
|
21
|
+
content={
|
|
22
|
+
<div style={{ display: 'flex', gap: '4px', flexWrap: 'wrap' }}>
|
|
23
|
+
<Tag color="primary">React</Tag>
|
|
24
|
+
<Tag color="success">TypeScript</Tag>
|
|
25
|
+
<Tag color="warning">SCSS</Tag>
|
|
26
|
+
<Tag color="error">Node.js</Tag>
|
|
27
|
+
</div>
|
|
28
|
+
}
|
|
29
|
+
>
|
|
30
|
+
<Button variant="outline">技术栈</Button>
|
|
31
|
+
</Tooltip>
|
|
32
|
+
|
|
33
|
+
<Tooltip
|
|
34
|
+
content={
|
|
35
|
+
<div style={{ textAlign: 'center' }}>
|
|
36
|
+
<div style={{ fontSize: '14px', marginBottom: '4px' }}>提示标题</div>
|
|
37
|
+
<div style={{ fontSize: '12px', color: '#999' }}>这是一段详细的提示信息,可以包含多行文本和各种样式。</div>
|
|
38
|
+
</div>
|
|
39
|
+
}
|
|
40
|
+
>
|
|
41
|
+
<Button variant="dashed">详细提示</Button>
|
|
42
|
+
</Tooltip>
|
|
43
|
+
</div>
|
|
44
|
+
);
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export default CustomContentTooltipExample;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Tooltip, Button } from '@tendaui/react';
|
|
3
|
+
|
|
4
|
+
const PlacementTooltipExample = () => {
|
|
5
|
+
const placements = [
|
|
6
|
+
'top',
|
|
7
|
+
'left',
|
|
8
|
+
'right',
|
|
9
|
+
'bottom',
|
|
10
|
+
'top-left',
|
|
11
|
+
'top-right',
|
|
12
|
+
'bottom-left',
|
|
13
|
+
'bottom-right',
|
|
14
|
+
'left-top',
|
|
15
|
+
'left-bottom',
|
|
16
|
+
'right-top',
|
|
17
|
+
'right-bottom',
|
|
18
|
+
];
|
|
19
|
+
|
|
20
|
+
return (
|
|
21
|
+
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(4, 1fr)', gap: '16px', padding: '24px' }}>
|
|
22
|
+
{placements.map((placement) => (
|
|
23
|
+
<div key={placement} style={{ textAlign: 'center' }}>
|
|
24
|
+
<Tooltip content={`位置: ${placement}`} placement={placement}>
|
|
25
|
+
<Button style={{ width: '120px' }}>{placement}</Button>
|
|
26
|
+
</Tooltip>
|
|
27
|
+
</div>
|
|
28
|
+
))}
|
|
29
|
+
</div>
|
|
30
|
+
);
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export default PlacementTooltipExample;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Tooltip, Button } from '@tendaui/react';
|
|
3
|
+
|
|
4
|
+
const ThemeTooltipExample = () => {
|
|
5
|
+
return (
|
|
6
|
+
<div style={{ display: 'flex', gap: '16px', padding: '24px' }}>
|
|
7
|
+
<Tooltip content="这是一个默认深色主题" theme="dark">
|
|
8
|
+
<Button>默认深色</Button>
|
|
9
|
+
</Tooltip>
|
|
10
|
+
|
|
11
|
+
<Tooltip content="这是一个浅色主题" theme="light">
|
|
12
|
+
<Button variant="outline">浅色主题</Button>
|
|
13
|
+
</Tooltip>
|
|
14
|
+
|
|
15
|
+
<Tooltip content="这是一个主色主题" theme="primary">
|
|
16
|
+
<Button variant="dashed" color="primary">主色主题</Button>
|
|
17
|
+
</Tooltip>
|
|
18
|
+
|
|
19
|
+
<Tooltip content="这是一个成功主题" theme="success">
|
|
20
|
+
<Button variant="dashed" color="success">成功主题</Button>
|
|
21
|
+
</Tooltip>
|
|
22
|
+
|
|
23
|
+
<Tooltip content="这是一个错误主题" theme="error">
|
|
24
|
+
<Button variant="dashed" color="error">错误主题</Button>
|
|
25
|
+
</Tooltip>
|
|
26
|
+
|
|
27
|
+
<Tooltip content="这是一个警告主题" theme="warning">
|
|
28
|
+
<Button variant="dashed" color="warning">警告主题</Button>
|
|
29
|
+
</Tooltip>
|
|
30
|
+
</div>
|
|
31
|
+
);
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export default ThemeTooltipExample;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { TdTooltipProps } from './type';
|
|
2
|
+
|
|
3
|
+
export const tooltipDefaultProps: TdTooltipProps = {
|
|
4
|
+
theme: 'dark',
|
|
5
|
+
trigger: 'hover',
|
|
6
|
+
placement: 'top',
|
|
7
|
+
duration: 0,
|
|
8
|
+
showArrow: true,
|
|
9
|
+
destroyOnClose: true,
|
|
10
|
+
arrowPointAtCenter: true,
|
|
11
|
+
autoAdjustOverflow: true,
|
|
12
|
+
mouseEnterPopup: false,
|
|
13
|
+
disabled: false,
|
|
14
|
+
};
|
package/tooltip/index.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import '../../styles/components/tooltip/_index.scss';
|