@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
|
@@ -1,243 +1,237 @@
|
|
|
1
|
-
import { isString, isNull } from
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* 用于反解析渐变字符串为对象
|
|
5
|
-
* https://stackoverflow.com/questions/20215440/parse-css-gradient-rule-with-javascript-regex
|
|
6
|
-
*/
|
|
7
|
-
import tinyColor from
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Utility combine multiple regular expressions.
|
|
11
|
-
*
|
|
12
|
-
* @param {RegExp[]|string[]} regexpList List of regular expressions or strings.
|
|
13
|
-
* @param {string} flags Normal RegExp flags.
|
|
14
|
-
*/
|
|
15
|
-
const combineRegExp = (regexpList: (string | RegExp)[], flags: string): RegExp => {
|
|
16
|
-
let source =
|
|
17
|
-
for (let i = 0; i < regexpList.length; i++) {
|
|
18
|
-
if (isString(regexpList[i])) {
|
|
19
|
-
source += regexpList[i];
|
|
20
|
-
} else {
|
|
21
|
-
source += (regexpList[i] as RegExp).source;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
return new RegExp(source, flags);
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
interface RegExpLib {
|
|
28
|
-
gradientSearch: RegExp;
|
|
29
|
-
colorStopSearch: RegExp;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
interface ColorStop {
|
|
33
|
-
color: string;
|
|
34
|
-
position?: string;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
interface ParseGradientResult {
|
|
38
|
-
original: string;
|
|
39
|
-
colorStopList?: ColorStop[];
|
|
40
|
-
line?: string;
|
|
41
|
-
angle?: string;
|
|
42
|
-
sideCorner?: string;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Generate the required regular expressions once.
|
|
47
|
-
*
|
|
48
|
-
* Regular Expressions are easier to manage this way and can be well described.
|
|
49
|
-
*
|
|
50
|
-
* @result {object} Object containing regular expressions.
|
|
51
|
-
*/
|
|
52
|
-
const generateRegExp = (): RegExpLib => {
|
|
53
|
-
// Note any variables with "Capture" in name include capturing bracket set(s).
|
|
54
|
-
const searchFlags =
|
|
55
|
-
const rAngle = /(?:[+-]?\d*\.?\d+)(?:deg|grad|rad|turn)/; // Angle +ive, -ive and angle types
|
|
56
|
-
// optional 2nd part
|
|
57
|
-
const rSideCornerCapture = /to\s+((?:(?:left|right|top|bottom)(?:\s+(?:top|bottom|left|right))?))/;
|
|
58
|
-
const rComma = /\s*,\s*/; // Allow space around comma.
|
|
59
|
-
const rColorHex = /#(?:[a-f0-9]{6}|[a-f0-9]{3})/; // 3 or 6 character form
|
|
60
|
-
const rDigits3 = /\(\s*(?:\d{1,3}\s*,\s*){2}\d{1,3}\s*\)/;
|
|
61
|
-
const // "(1, 2, 3)"
|
|
62
|
-
rDigits4 = /\(\s*(?:\d{1,3}\s*,\s*){2}\d{1,3}\s*,\s*\d*\.?\d+\)/;
|
|
63
|
-
const // "(1, 2, 3, 4)"
|
|
64
|
-
rValue = /(?:[+-]?\d*\.?\d+)(?:%|[a-z]+)?/;
|
|
65
|
-
const // ".9", "-5px", "100%".
|
|
66
|
-
rKeyword = /[_a-z-][_a-z0-9-]*/;
|
|
67
|
-
const // "red", "transparent".
|
|
68
|
-
rColor = combineRegExp(
|
|
69
|
-
[
|
|
70
|
-
|
|
71
|
-
);
|
|
72
|
-
const rColorStop = combineRegExp([rColor,
|
|
73
|
-
const // Single Color Stop, optional %, optional length.
|
|
74
|
-
rColorStopList = combineRegExp([
|
|
75
|
-
const // List of color stops min 1.
|
|
76
|
-
rLineCapture = combineRegExp([
|
|
77
|
-
const // Angle or SideCorner
|
|
78
|
-
rGradientSearch = combineRegExp([
|
|
79
|
-
const // Capture 1:"line", 2:"angle" (optional), 3:"side corner" (optional) and 4:"stop list".
|
|
80
|
-
rColorStopSearch = combineRegExp(
|
|
81
|
-
[
|
|
82
|
-
searchFlags
|
|
83
|
-
); // Capture 1:"color" and 2:"position" (optional).
|
|
84
|
-
|
|
85
|
-
return {
|
|
86
|
-
gradientSearch: rGradientSearch,
|
|
87
|
-
colorStopSearch: rColorStopSearch
|
|
88
|
-
};
|
|
89
|
-
};
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* Actually parse the input gradient parameters string into an object for reusability.
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
* @note Really this only supports the standard syntax not historical versions, see MDN for details
|
|
96
|
-
* https://developer.mozilla.org/en-US/docs/Web/CSS/linear-gradient
|
|
97
|
-
*
|
|
98
|
-
* @param regExpLib
|
|
99
|
-
* @param {string} input
|
|
100
|
-
* @returns {object|undefined}
|
|
101
|
-
*/
|
|
102
|
-
const parseGradient = (regExpLib: RegExpLib, input: string) => {
|
|
103
|
-
let result: ParseGradientResult;
|
|
104
|
-
let matchColorStop: any;
|
|
105
|
-
let stopResult: ColorStop;
|
|
106
|
-
|
|
107
|
-
// reset search position, because we reuse regex.
|
|
108
|
-
regExpLib.gradientSearch.lastIndex = 0;
|
|
109
|
-
|
|
110
|
-
const matchGradient = regExpLib.gradientSearch.exec(input);
|
|
111
|
-
if (!isNull(matchGradient)) {
|
|
112
|
-
result = {
|
|
113
|
-
original: matchGradient[0],
|
|
114
|
-
colorStopList: []
|
|
115
|
-
};
|
|
116
|
-
|
|
117
|
-
// Line (Angle or Side-Corner).
|
|
118
|
-
if (matchGradient[1]) {
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
//
|
|
134
|
-
regExpLib.colorStopSearch.
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
top:
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
(
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
gradientColors.degree = degree;
|
|
239
|
-
|
|
240
|
-
return gradientColors;
|
|
241
|
-
};
|
|
242
|
-
|
|
243
|
-
export default parseGradientString;
|
|
1
|
+
import { isString, isNull } from "lodash-es";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* 用于反解析渐变字符串为对象
|
|
5
|
+
* https://stackoverflow.com/questions/20215440/parse-css-gradient-rule-with-javascript-regex
|
|
6
|
+
*/
|
|
7
|
+
import tinyColor from "tinycolor2";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Utility combine multiple regular expressions.
|
|
11
|
+
*
|
|
12
|
+
* @param {RegExp[]|string[]} regexpList List of regular expressions or strings.
|
|
13
|
+
* @param {string} flags Normal RegExp flags.
|
|
14
|
+
*/
|
|
15
|
+
const combineRegExp = (regexpList: (string | RegExp)[], flags: string): RegExp => {
|
|
16
|
+
let source = "";
|
|
17
|
+
for (let i = 0; i < regexpList.length; i++) {
|
|
18
|
+
if (isString(regexpList[i])) {
|
|
19
|
+
source += regexpList[i];
|
|
20
|
+
} else {
|
|
21
|
+
source += (regexpList[i] as RegExp).source;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return new RegExp(source, flags);
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
interface RegExpLib {
|
|
28
|
+
gradientSearch: RegExp;
|
|
29
|
+
colorStopSearch: RegExp;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
interface ColorStop {
|
|
33
|
+
color: string;
|
|
34
|
+
position?: string;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
interface ParseGradientResult {
|
|
38
|
+
original: string;
|
|
39
|
+
colorStopList?: ColorStop[];
|
|
40
|
+
line?: string;
|
|
41
|
+
angle?: string;
|
|
42
|
+
sideCorner?: string;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Generate the required regular expressions once.
|
|
47
|
+
*
|
|
48
|
+
* Regular Expressions are easier to manage this way and can be well described.
|
|
49
|
+
*
|
|
50
|
+
* @result {object} Object containing regular expressions.
|
|
51
|
+
*/
|
|
52
|
+
const generateRegExp = (): RegExpLib => {
|
|
53
|
+
// Note any variables with "Capture" in name include capturing bracket set(s).
|
|
54
|
+
const searchFlags = "gi"; // ignore case for angles, "rgb" etc
|
|
55
|
+
const rAngle = /(?:[+-]?\d*\.?\d+)(?:deg|grad|rad|turn)/; // Angle +ive, -ive and angle types
|
|
56
|
+
// optional 2nd part
|
|
57
|
+
const rSideCornerCapture = /to\s+((?:(?:left|right|top|bottom)(?:\s+(?:top|bottom|left|right))?))/;
|
|
58
|
+
const rComma = /\s*,\s*/; // Allow space around comma.
|
|
59
|
+
const rColorHex = /#(?:[a-f0-9]{6}|[a-f0-9]{3})/; // 3 or 6 character form
|
|
60
|
+
const rDigits3 = /\(\s*(?:\d{1,3}\s*,\s*){2}\d{1,3}\s*\)/;
|
|
61
|
+
const // "(1, 2, 3)"
|
|
62
|
+
rDigits4 = /\(\s*(?:\d{1,3}\s*,\s*){2}\d{1,3}\s*,\s*\d*\.?\d+\)/;
|
|
63
|
+
const // "(1, 2, 3, 4)"
|
|
64
|
+
rValue = /(?:[+-]?\d*\.?\d+)(?:%|[a-z]+)?/;
|
|
65
|
+
const // ".9", "-5px", "100%".
|
|
66
|
+
rKeyword = /[_a-z-][_a-z0-9-]*/;
|
|
67
|
+
const // "red", "transparent".
|
|
68
|
+
rColor = combineRegExp(
|
|
69
|
+
["(?:", rColorHex, "|", "(?:rgb|hsl)", rDigits3, "|", "(?:rgba|hsla)", rDigits4, "|", rKeyword, ")"],
|
|
70
|
+
""
|
|
71
|
+
);
|
|
72
|
+
const rColorStop = combineRegExp([rColor, "(?:\\s+", rValue, "(?:\\s+", rValue, ")?)?"], "");
|
|
73
|
+
const // Single Color Stop, optional %, optional length.
|
|
74
|
+
rColorStopList = combineRegExp(["(?:", rColorStop, rComma, ")*", rColorStop], "");
|
|
75
|
+
const // List of color stops min 1.
|
|
76
|
+
rLineCapture = combineRegExp(["(?:(", rAngle, ")|", rSideCornerCapture, ")"], "");
|
|
77
|
+
const // Angle or SideCorner
|
|
78
|
+
rGradientSearch = combineRegExp(["(?:(", rLineCapture, ")", rComma, ")?(", rColorStopList, ")"], searchFlags);
|
|
79
|
+
const // Capture 1:"line", 2:"angle" (optional), 3:"side corner" (optional) and 4:"stop list".
|
|
80
|
+
rColorStopSearch = combineRegExp(
|
|
81
|
+
["\\s*(", rColor, ")", "(?:\\s+", "(", rValue, "))?", "(?:", rComma, "\\s*)?"],
|
|
82
|
+
searchFlags
|
|
83
|
+
); // Capture 1:"color" and 2:"position" (optional).
|
|
84
|
+
|
|
85
|
+
return {
|
|
86
|
+
gradientSearch: rGradientSearch,
|
|
87
|
+
colorStopSearch: rColorStopSearch
|
|
88
|
+
};
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Actually parse the input gradient parameters string into an object for reusability.
|
|
93
|
+
*
|
|
94
|
+
*
|
|
95
|
+
* @note Really this only supports the standard syntax not historical versions, see MDN for details
|
|
96
|
+
* https://developer.mozilla.org/en-US/docs/Web/CSS/linear-gradient
|
|
97
|
+
*
|
|
98
|
+
* @param regExpLib
|
|
99
|
+
* @param {string} input
|
|
100
|
+
* @returns {object|undefined}
|
|
101
|
+
*/
|
|
102
|
+
const parseGradient = (regExpLib: RegExpLib, input: string) => {
|
|
103
|
+
let result: ParseGradientResult;
|
|
104
|
+
let matchColorStop: any;
|
|
105
|
+
let stopResult: ColorStop;
|
|
106
|
+
|
|
107
|
+
// reset search position, because we reuse regex.
|
|
108
|
+
regExpLib.gradientSearch.lastIndex = 0;
|
|
109
|
+
|
|
110
|
+
const matchGradient = regExpLib.gradientSearch.exec(input);
|
|
111
|
+
if (!isNull(matchGradient)) {
|
|
112
|
+
result = {
|
|
113
|
+
original: matchGradient[0],
|
|
114
|
+
colorStopList: []
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
// Line (Angle or Side-Corner).
|
|
118
|
+
if (matchGradient[1]) {
|
|
119
|
+
result.line = matchGradient[1];
|
|
120
|
+
}
|
|
121
|
+
// Angle or undefined if side-corner.
|
|
122
|
+
if (matchGradient[2]) {
|
|
123
|
+
result.angle = matchGradient[2];
|
|
124
|
+
}
|
|
125
|
+
// Side-corner or undefined if angle.
|
|
126
|
+
if (matchGradient[3]) {
|
|
127
|
+
result.sideCorner = matchGradient[3];
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// reset search position, because we reuse regex.
|
|
131
|
+
regExpLib.colorStopSearch.lastIndex = 0;
|
|
132
|
+
|
|
133
|
+
// Loop though all the color-stops.
|
|
134
|
+
matchColorStop = regExpLib.colorStopSearch.exec(matchGradient[4]);
|
|
135
|
+
while (!isNull(matchColorStop)) {
|
|
136
|
+
stopResult = {
|
|
137
|
+
color: matchColorStop[1]
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
// Position (optional).
|
|
141
|
+
if (matchColorStop[2]) {
|
|
142
|
+
stopResult.position = matchColorStop[2];
|
|
143
|
+
}
|
|
144
|
+
result.colorStopList.push(stopResult);
|
|
145
|
+
|
|
146
|
+
// Continue searching from previous position.
|
|
147
|
+
matchColorStop = regExpLib.colorStopSearch.exec(matchGradient[4]);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// Can be undefined if match not found.
|
|
152
|
+
return result;
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
export interface GradientColorPoint {
|
|
156
|
+
id?: string;
|
|
157
|
+
color?: string;
|
|
158
|
+
left?: number;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
export interface GradientColors {
|
|
162
|
+
points: GradientColorPoint[];
|
|
163
|
+
degree: number;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
const REGEXP_LIB = generateRegExp();
|
|
167
|
+
const REG_GRADIENT = /.*gradient\s*\(((?:\([^)]*\)|[^)(]*)*)\)/gim;
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* 验证是否是渐变字符串
|
|
171
|
+
* @param input
|
|
172
|
+
* @returns
|
|
173
|
+
*/
|
|
174
|
+
export const isGradientColor = (input: string): null | RegExpExecArray => {
|
|
175
|
+
REG_GRADIENT.lastIndex = 0;
|
|
176
|
+
return REG_GRADIENT.exec(input);
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
// 边界字符串和角度关系
|
|
180
|
+
const sideCornerDegreeMap = {
|
|
181
|
+
top: 0,
|
|
182
|
+
right: 90,
|
|
183
|
+
bottom: 180,
|
|
184
|
+
left: 270,
|
|
185
|
+
"top left": 315,
|
|
186
|
+
"left top": 315,
|
|
187
|
+
"top right": 45,
|
|
188
|
+
"right top": 45,
|
|
189
|
+
"bottom left": 225,
|
|
190
|
+
"left bottom": 225,
|
|
191
|
+
"bottom right": 135,
|
|
192
|
+
"right bottom": 135
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* 解析渐变字符串为 GradientColors 对象
|
|
197
|
+
* @param input
|
|
198
|
+
* @returns
|
|
199
|
+
*/
|
|
200
|
+
export const parseGradientString = (input: string): GradientColors | false => {
|
|
201
|
+
const match = isGradientColor(input);
|
|
202
|
+
if (!match) return false;
|
|
203
|
+
|
|
204
|
+
const gradientColors: GradientColors = {
|
|
205
|
+
points: [],
|
|
206
|
+
degree: 0
|
|
207
|
+
};
|
|
208
|
+
|
|
209
|
+
const result: ParseGradientResult = parseGradient(REGEXP_LIB, match[1]);
|
|
210
|
+
if (result.original.trim() !== match[1].trim()) return false;
|
|
211
|
+
|
|
212
|
+
const points: GradientColorPoint[] = result.colorStopList.map(({ color, position }, index, array) => {
|
|
213
|
+
const point = Object.create(null);
|
|
214
|
+
point.color = tinyColor(color).toRgbString();
|
|
215
|
+
|
|
216
|
+
let left = parseFloat(position);
|
|
217
|
+
if (Number.isNaN(left)) {
|
|
218
|
+
left = (index / (array.length - 1)) * 100;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
point.left = left;
|
|
222
|
+
return point;
|
|
223
|
+
});
|
|
224
|
+
gradientColors.points = points;
|
|
225
|
+
|
|
226
|
+
let degree = parseInt(result.angle, 10);
|
|
227
|
+
if (Number.isNaN(degree)) {
|
|
228
|
+
/* 如果角度不存在,使用 CSS 渐变的默认逻辑(180 deg)
|
|
229
|
+
https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_images/Using_CSS_gradients */
|
|
230
|
+
degree = sideCornerDegreeMap[result.sideCorner as keyof typeof sideCornerDegreeMap] || 180;
|
|
231
|
+
}
|
|
232
|
+
gradientColors.degree = degree;
|
|
233
|
+
|
|
234
|
+
return gradientColors;
|
|
235
|
+
};
|
|
236
|
+
|
|
237
|
+
export default parseGradientString;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export * from "./cmyk";
|
|
2
|
-
export * from "./color";
|
|
3
|
-
export * from "./constants";
|
|
4
|
-
export * from "./draggable";
|
|
5
|
-
export * from "./format";
|
|
6
|
-
export * from "./gradient";
|
|
7
|
-
export * from "./types";
|
|
1
|
+
export * from "./cmyk";
|
|
2
|
+
export * from "./color";
|
|
3
|
+
export * from "./constants";
|
|
4
|
+
export * from "./draggable";
|
|
5
|
+
export * from "./format";
|
|
6
|
+
export * from "./gradient";
|
|
7
|
+
export * from "./types";
|
|
@@ -1,33 +1,33 @@
|
|
|
1
|
-
import { ALPHA_FORMAT_MAP, FORMATS } from
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* 非透明色类型
|
|
5
|
-
*/
|
|
6
|
-
export type BasicColorFormat = typeof FORMATS[number];
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* 支持转为透明格式的非透明色类型
|
|
10
|
-
*/
|
|
11
|
-
export type AlphaConvertibleFormat = keyof typeof ALPHA_FORMAT_MAP;
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* 透明色类型
|
|
15
|
-
*/
|
|
16
|
-
export type AlphaColorFormat = typeof ALPHA_FORMAT_MAP[AlphaConvertibleFormat];
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* 完整的颜色格式类型
|
|
20
|
-
*/
|
|
21
|
-
export type ColorFormat = BasicColorFormat | AlphaColorFormat;
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* 不同颜色格式对应的输入框配置
|
|
25
|
-
*/
|
|
26
|
-
export interface ColorInputProp {
|
|
27
|
-
key: string;
|
|
28
|
-
min?: number;
|
|
29
|
-
max?: number;
|
|
30
|
-
type:
|
|
31
|
-
flex?: number;
|
|
32
|
-
format?: Function;
|
|
33
|
-
}
|
|
1
|
+
import { ALPHA_FORMAT_MAP, FORMATS } from "./constants";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* 非透明色类型
|
|
5
|
+
*/
|
|
6
|
+
export type BasicColorFormat = (typeof FORMATS)[number];
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* 支持转为透明格式的非透明色类型
|
|
10
|
+
*/
|
|
11
|
+
export type AlphaConvertibleFormat = keyof typeof ALPHA_FORMAT_MAP;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* 透明色类型
|
|
15
|
+
*/
|
|
16
|
+
export type AlphaColorFormat = (typeof ALPHA_FORMAT_MAP)[AlphaConvertibleFormat];
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* 完整的颜色格式类型
|
|
20
|
+
*/
|
|
21
|
+
export type ColorFormat = BasicColorFormat | AlphaColorFormat;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* 不同颜色格式对应的输入框配置
|
|
25
|
+
*/
|
|
26
|
+
export interface ColorInputProp {
|
|
27
|
+
key: string;
|
|
28
|
+
min?: number;
|
|
29
|
+
max?: number;
|
|
30
|
+
type: "input" | "inputNumber";
|
|
31
|
+
flex?: number;
|
|
32
|
+
format?: Function;
|
|
33
|
+
}
|
|
@@ -36,6 +36,7 @@ export const setGlobalConfig = (configInfo?: GlobalConfigProvider) => {
|
|
|
36
36
|
export default function ConfigProvider({ children, globalConfig, notSet }: ConfigProviderProps) {
|
|
37
37
|
const defaultData = cloneDeep(defaultGlobalConfig);
|
|
38
38
|
const mergedGlobalConfig = merge(defaultData, globalConfig);
|
|
39
|
+
const direction = mergedGlobalConfig.direction || "ltr";
|
|
39
40
|
|
|
40
41
|
useEffect(() => {
|
|
41
42
|
if (!notSet) {
|
|
@@ -44,7 +45,23 @@ export default function ConfigProvider({ children, globalConfig, notSet }: Confi
|
|
|
44
45
|
}
|
|
45
46
|
}, [mergedGlobalConfig, notSet]);
|
|
46
47
|
|
|
47
|
-
|
|
48
|
+
useEffect(() => {
|
|
49
|
+
if (notSet || typeof document === "undefined") return;
|
|
50
|
+
document.documentElement.setAttribute("dir", direction);
|
|
51
|
+
document.body.setAttribute("dir", direction);
|
|
52
|
+
}, [direction, notSet]);
|
|
53
|
+
|
|
54
|
+
return (
|
|
55
|
+
<ConfigContext.Provider value={{ globalConfig: mergedGlobalConfig }}>
|
|
56
|
+
<div
|
|
57
|
+
className={`${mergedGlobalConfig.classPrefix}-config-provider`}
|
|
58
|
+
dir={direction}
|
|
59
|
+
style={{ display: "contents" }}
|
|
60
|
+
>
|
|
61
|
+
{children}
|
|
62
|
+
</div>
|
|
63
|
+
</ConfigContext.Provider>
|
|
64
|
+
);
|
|
48
65
|
}
|
|
49
66
|
|
|
50
67
|
ConfigProvider.getGlobalConfig = getGlobalConfig;
|
package/config-provider/type.ts
CHANGED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import React, { useState } from "react";
|
|
2
|
+
import { Button, Dialog } from "@tendaui/react";
|
|
3
|
+
|
|
4
|
+
export default function Base() {
|
|
5
|
+
const [visible, setVisible] = useState(false);
|
|
6
|
+
|
|
7
|
+
const onConfirm = (context) => {
|
|
8
|
+
console.log("点击了确认按钮", context);
|
|
9
|
+
setVisible(false);
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
const onClose = (context) => {
|
|
13
|
+
console.log("关闭弹窗", context);
|
|
14
|
+
setVisible(false);
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
return (
|
|
18
|
+
<>
|
|
19
|
+
<Button theme="primary" onClick={() => setVisible(true)}>
|
|
20
|
+
打开对话框
|
|
21
|
+
</Button>
|
|
22
|
+
<Dialog header="基础对话框" visible={visible} onClose={onClose} onConfirm={onConfirm}>
|
|
23
|
+
<p>这是一个基础对话框示例。</p>
|
|
24
|
+
</Dialog>
|
|
25
|
+
</>
|
|
26
|
+
);
|
|
27
|
+
}
|