@tendaui/components 1.0.0 → 1.0.2
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/alert/Alert.tsx +3 -2
- package/button/_example/base.tsx +10 -0
- package/button/_example/icon.tsx +20 -0
- package/color-picker/ColorPickPanel.tsx +9 -0
- package/color-picker/ColorPicker.tsx +67 -0
- package/color-picker/components/panel/alpha.tsx +32 -0
- package/color-picker/components/panel/format/index.tsx +47 -0
- package/color-picker/components/panel/format/inputs.tsx +119 -0
- package/color-picker/components/panel/header.tsx +37 -0
- package/color-picker/components/panel/hue.tsx +20 -0
- package/color-picker/components/panel/index.tsx +191 -0
- package/color-picker/components/panel/saturation.tsx +81 -0
- package/color-picker/components/panel/slider.tsx +76 -0
- package/color-picker/components/panel/swatches.tsx +84 -0
- package/color-picker/components/trigger.tsx +49 -0
- package/color-picker/defaultProps.ts +7 -0
- package/color-picker/helpers.ts +53 -0
- package/color-picker/hooks/useClassNames.ts +9 -0
- package/color-picker/hooks/useStyles.ts +39 -0
- package/color-picker/index.ts +12 -0
- package/color-picker/style/css.js +1 -0
- package/color-picker/style/index.js +1 -0
- package/color-picker/type.ts +143 -0
- package/color-picker/utils/color-picker/cmyk.ts +89 -0
- package/color-picker/utils/color-picker/color.ts +467 -0
- package/color-picker/utils/color-picker/constants.ts +187 -0
- package/color-picker/utils/color-picker/draggable.ts +100 -0
- package/color-picker/utils/color-picker/format.ts +95 -0
- package/color-picker/utils/color-picker/gradient.ts +243 -0
- package/color-picker/utils/color-picker/index.ts +7 -0
- package/color-picker/utils/color-picker/types.ts +33 -0
- package/common/observe.ts +33 -0
- package/common.ts +20 -0
- package/config-provider/ConfigContext.tsx +4 -1
- package/config-provider/index.ts +1 -1
- package/dialog/DialogCard.tsx +4 -6
- package/dialog/hooks/useDialogPosition.ts +1 -2
- package/dialog/plugin.tsx +3 -2
- package/drawer/Drawer.tsx +264 -0
- package/drawer/defaultProps.ts +19 -0
- package/drawer/hooks/useDrag.ts +98 -0
- package/drawer/hooks/useLockStyle.ts +36 -0
- package/drawer/index.ts +5 -0
- package/drawer/style/css.js +1 -0
- package/drawer/style/index.js +1 -0
- package/drawer/type.ts +193 -0
- package/drawer/utils/index.ts +76 -0
- package/fireworks/Fireworks.tsx +138 -0
- package/fireworks/index.ts +10 -0
- package/fireworks/style/css.js +0 -0
- package/fireworks/style/index.js +0 -0
- package/fireworks/type.ts +72 -0
- package/form/FormItem.tsx +5 -5
- package/form/easing.ts +10 -0
- package/form/scroll.ts +124 -0
- package/form/type.ts +519 -519
- package/global-config/default-config.ts +95 -0
- package/global-config/locale/ar_KW.ts +270 -0
- package/global-config/locale/en_US.ts +280 -0
- package/global-config/locale/it_IT.ts +287 -0
- package/global-config/locale/ja_JP.ts +279 -0
- package/global-config/locale/ko_KR.ts +279 -0
- package/global-config/locale/ru_RU.ts +288 -0
- package/global-config/locale/zh_CN.ts +279 -0
- package/global-config/locale/zh_TW.ts +279 -0
- package/global-config/mobile/default-config.ts +6 -0
- package/global-config/mobile/locale/ar_KW.ts +113 -0
- package/global-config/mobile/locale/en_US.ts +114 -0
- package/global-config/mobile/locale/it_IT.ts +114 -0
- package/global-config/mobile/locale/ja_JP.ts +101 -0
- package/global-config/mobile/locale/ko_KR.ts +101 -0
- package/global-config/mobile/locale/ru_RU.ts +113 -0
- package/global-config/mobile/locale/zh_CN.ts +101 -0
- package/global-config/mobile/locale/zh_TW.ts +101 -0
- package/global-config/t.ts +111 -0
- package/hooks/useControlled.ts +3 -3
- package/hooks/useDeepEffect.ts +32 -0
- package/hooks/useGlobalIcon.ts +10 -3
- package/hooks/useLastest.ts +2 -6
- package/hooks/useResizeObserve.ts +36 -0
- package/index.ts +10 -7
- package/input/Input.tsx +4 -1
- package/input/defaultProps.ts +0 -2
- package/input/type.ts +1 -6
- package/input-number/InputNumber.tsx +124 -0
- package/input-number/defaultProps.ts +17 -0
- package/input-number/index.ts +9 -0
- package/input-number/style/css.js +1 -0
- package/input-number/style/index.js +1 -0
- package/input-number/type.ts +147 -0
- package/input-number/useInputNumber.tsx +270 -0
- package/ip-input/IPInput.tsx +516 -0
- package/ip-input/defaultProps.ts +11 -0
- package/ip-input/index.ts +3 -0
- package/ip-input/style/css.js +1 -0
- package/ip-input/style/index.js +1 -0
- package/ip-input/type.ts +115 -0
- package/ip-input/utils.ts +112 -0
- package/layout/Aside.tsx +38 -0
- package/layout/Layout.tsx +104 -0
- package/layout/defaultProps.ts +9 -0
- package/layout/index.ts +9 -0
- package/layout/style/css.js +1 -0
- package/layout/style/index.js +1 -0
- package/layout/type.ts +43 -0
- package/list/List.tsx +144 -0
- package/list/ListItem.tsx +36 -0
- package/list/ListItemMeta.tsx +40 -0
- package/list/defaultProps.ts +11 -0
- package/list/hooks/useListVirtualScroll.ts +82 -0
- package/list/index.ts +11 -0
- package/list/style/css.js +1 -0
- package/list/style/index.js +1 -0
- package/list/type.ts +93 -0
- package/locale/LocalReceiver.ts +55 -0
- package/locale/ar_KW.ts +7 -0
- package/locale/en_US.ts +7 -0
- package/locale/it_IT.ts +6 -0
- package/locale/ja_JP.ts +6 -0
- package/locale/ko_KR.ts +6 -0
- package/locale/ru_RU.ts +6 -0
- package/locale/zh_CN.ts +5 -0
- package/locale/zh_TW.ts +7 -0
- package/notification/NotifyContainer.tsx +2 -2
- package/notification/NotifyContext.tsx +1 -0
- package/package.json +6 -3
- package/popup/Popup.tsx +34 -10
- package/radio/Radio.tsx +24 -0
- package/radio/RadioGroup.tsx +159 -0
- package/radio/defaultProps.ts +18 -0
- package/radio/index.ts +12 -0
- package/radio/style/css.js +0 -0
- package/radio/style/index.js +1 -0
- package/radio/type.ts +115 -0
- package/radio/useKeyboard.ts +36 -0
- package/select/hooks/useOptions.ts +10 -7
- package/select/hooks/usePanelVirtualScroll.ts +1 -1
- package/select/type.ts +382 -382
- package/select-input/type.ts +280 -280
- package/slider/Slider.tsx +270 -0
- package/slider/SliderHandleButton.tsx +50 -0
- package/slider/defaultProps.ts +15 -0
- package/slider/index.ts +9 -0
- package/slider/style/css.js +1 -0
- package/slider/style/index.js +1 -0
- package/slider/type.ts +77 -0
- package/style/all.js +26 -0
- package/styles/_global.scss +39 -39
- package/styles/_vars.scss +358 -386
- package/styles/components/alert/_index.scss +175 -175
- package/styles/components/alert/_vars.scss +39 -39
- package/styles/components/badge/_index.scss +70 -70
- package/styles/components/badge/_vars.scss +25 -25
- package/styles/components/button/_index.scss +499 -511
- package/styles/components/button/_mixins.scss +39 -39
- package/styles/components/button/_vars.scss +120 -122
- package/styles/components/checkbox/_index.scss +158 -158
- package/styles/components/checkbox/_var.scss +60 -60
- package/styles/components/color-picker/_index.scss +586 -0
- package/styles/components/color-picker/_mixins.scss +0 -0
- package/styles/components/color-picker/_vars.scss +84 -0
- package/styles/components/dialog/_animate.scss +135 -135
- package/styles/components/dialog/_index.scss +311 -311
- package/styles/components/dialog/_vars.scss +59 -59
- package/styles/components/drawer/_index.scss +205 -0
- package/styles/components/drawer/_mixins.scss +1 -0
- package/styles/components/drawer/_var.scss +53 -0
- package/styles/components/fireworks/_index.scss +86 -0
- package/styles/components/fireworks/_vars.scss +4 -0
- package/styles/components/form/_index.scss +174 -174
- package/styles/components/form/_mixins.scss +76 -76
- package/styles/components/form/_vars.scss +100 -100
- package/styles/components/input/_index.scss +349 -349
- package/styles/components/input/_mixins.scss +116 -116
- package/styles/components/input/_vars.scss +134 -134
- package/styles/components/input-number/_index.scss +353 -0
- package/styles/components/input-number/_mixins.scss +0 -0
- package/styles/components/input-number/_vars.scss +65 -0
- package/styles/components/ip-input/_index.scss +280 -0
- package/styles/components/layout/_index.scss +47 -0
- package/styles/components/layout/_mixin.scss +0 -0
- package/styles/components/layout/_vars.scss +18 -0
- package/styles/components/layout/doc.scss +74 -0
- package/styles/components/list/_index.scss +172 -0
- package/styles/components/list/_mixins.scss +0 -0
- package/styles/components/list/_vars.scss +41 -0
- package/styles/components/loading/_index.scss +112 -112
- package/styles/components/loading/_vars.scss +39 -39
- package/styles/components/notification/_index.scss +160 -160
- package/styles/components/notification/_mixins.scss +12 -12
- package/styles/components/notification/_vars.scss +59 -59
- package/styles/components/popup/_index.scss +82 -82
- package/styles/components/popup/_mixin.scss +149 -149
- package/styles/components/popup/_var.scss +31 -31
- package/styles/components/radio/_index.scss +376 -0
- package/styles/components/radio/_mixins.scss +0 -0
- package/styles/components/radio/_var.scss +92 -0
- package/styles/components/select/_index.scss +290 -290
- package/styles/components/select/_var.scss +65 -65
- package/styles/components/select-input/_index.scss +5 -5
- package/styles/components/select-input/_var.scss +3 -3
- package/styles/components/slider/_index.scss +241 -0
- package/styles/components/slider/_mixins.scss +0 -0
- package/styles/components/slider/_vars.scss +50 -0
- package/styles/components/switch/_index.scss +279 -279
- package/styles/components/switch/_vars.scss +61 -61
- package/styles/components/table/_index.scss +193 -0
- package/styles/components/table/_var.scss +52 -0
- package/styles/components/tabs/_index.scss +165 -0
- package/styles/components/tabs/_mixins.scss +11 -0
- package/styles/components/tabs/_vars.scss +71 -0
- package/styles/components/tag/_index.scss +316 -316
- package/styles/components/tag/_var.scss +85 -85
- package/styles/components/tag-input/_index.scss +163 -163
- package/styles/components/tag-input/_vars.scss +16 -16
- package/styles/globals.css +250 -250
- package/styles/mixins/_focus.scss +7 -7
- package/styles/mixins/_layout.scss +32 -32
- package/styles/mixins/_reset.scss +10 -10
- package/styles/mixins/_scrollbar.scss +31 -31
- package/styles/mixins/_text.scss +48 -48
- package/styles/rillple.css +16 -16
- package/styles/scrollbar.css +41 -41
- package/styles/themes/_dark.scss +191 -191
- package/styles/themes/_font.scss +69 -79
- package/styles/themes/_index.scss +5 -5
- package/styles/themes/_light.scss +190 -190
- package/styles/themes/_radius.scss +9 -9
- package/styles/themes/_size.scss +68 -68
- package/styles/themes.css +66 -66
- package/styles/utilities/_animation.scss +57 -57
- package/styles/utilities/_tips.scss +9 -9
- package/tab/TabBar.tsx +85 -0
- package/tab/TabNav.tsx +103 -0
- package/tab/TabNavItem.tsx +80 -0
- package/tab/TabPanel.tsx +42 -0
- package/tab/Tabs.tsx +71 -0
- package/tab/defaultProps.ts +19 -0
- package/tab/index.ts +7 -0
- package/tab/style/index.js +1 -0
- package/tab/type.ts +125 -0
- package/tab/useTabClass.ts +20 -0
- package/table/Cell.tsx +109 -0
- package/table/TBody.tsx +77 -0
- package/table/THead.tsx +63 -0
- package/table/TR.tsx +78 -0
- package/table/Table.tsx +73 -0
- package/table/defaultProps.ts +14 -0
- package/table/hooks/index.ts +4 -0
- package/table/hooks/useTableClassName.ts +63 -0
- package/table/hooks/useTableStyle.ts +93 -0
- package/table/index.ts +7 -0
- package/table/style/css.js +1 -0
- package/table/style/index.js +1 -0
- package/table/type.ts +192 -0
- package/tag/Tag.tsx +1 -1
- package/tag-input/hooks/useTagList.tsx +1 -1
- package/utils/dom.ts +4 -0
- package/utils/forwardRefWithStatics.ts +1 -4
- package/utils/input-number/large-number.ts +423 -0
- package/utils/input-number/number.ts +257 -0
- package/utils/isFragment.ts +6 -6
- package/utils/log/index.ts +3 -0
- package/utils/log/log.ts +30 -0
- package/utils/log/types.ts +12 -0
- package/utils/number.ts +21 -0
- package/utils/scroll.ts +26 -0
- package/utils/style.ts +2 -4
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import tinycolor from "tinycolor2";
|
|
2
|
+
import { ColorObject, ColorPickerChangeTrigger, TdColorContext } from "./type";
|
|
3
|
+
|
|
4
|
+
export const DEFAULT_COLOR = "#0052D9";
|
|
5
|
+
|
|
6
|
+
export const normalizeColorValue = (value?: string | null): string => {
|
|
7
|
+
if (!value) return DEFAULT_COLOR;
|
|
8
|
+
const color = tinycolor(value);
|
|
9
|
+
if (!color.isValid()) {
|
|
10
|
+
return DEFAULT_COLOR;
|
|
11
|
+
}
|
|
12
|
+
return color.toHexString();
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export const buildColorObject = (value: string): ColorObject => {
|
|
16
|
+
const color = tinycolor(value || DEFAULT_COLOR);
|
|
17
|
+
const rgb = color.toRgb();
|
|
18
|
+
const hsv = color.toHsv();
|
|
19
|
+
const hsl = color.toHsl();
|
|
20
|
+
|
|
21
|
+
const rgbString = color.toRgbString();
|
|
22
|
+
const rgbaString = `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${Number(rgb.a.toFixed(2))})`;
|
|
23
|
+
const hslString = `hsl(${Math.round(hsl.h)}, ${Math.round(hsl.s * 100)}%, ${Math.round(hsl.l * 100)}%)`;
|
|
24
|
+
const hslaString = `hsla(${Math.round(hsl.h)}, ${Math.round(hsl.s * 100)}%, ${Math.round(hsl.l * 100)}%, ${Number(
|
|
25
|
+
rgb.a.toFixed(2)
|
|
26
|
+
)})`;
|
|
27
|
+
const hsvString = `hsv(${Math.round(hsv.h)}, ${Math.round(hsv.s * 100)}%, ${Math.round(hsv.v * 100)}%)`;
|
|
28
|
+
const hsvaString = `hsva(${Math.round(hsv.h)}, ${Math.round(hsv.s * 100)}%, ${Math.round(hsv.v * 100)}%, ${Number(
|
|
29
|
+
rgb.a.toFixed(2)
|
|
30
|
+
)})`;
|
|
31
|
+
|
|
32
|
+
return {
|
|
33
|
+
alpha: rgb.a,
|
|
34
|
+
css: rgbString,
|
|
35
|
+
hex: color.toHexString(),
|
|
36
|
+
hex8: color.toHex8String(),
|
|
37
|
+
hsl: hslString,
|
|
38
|
+
hsla: hslaString,
|
|
39
|
+
hsv: hsvString,
|
|
40
|
+
hsva: hsvaString,
|
|
41
|
+
rgb: rgbString,
|
|
42
|
+
rgba: rgbaString,
|
|
43
|
+
saturation: hsv.s,
|
|
44
|
+
value: hsv.v,
|
|
45
|
+
isGradient: false,
|
|
46
|
+
linearGradient: undefined
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
export const buildChangeContext = (value: string, trigger: ColorPickerChangeTrigger): TdColorContext => ({
|
|
51
|
+
color: buildColorObject(value),
|
|
52
|
+
trigger
|
|
53
|
+
});
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { CSSProperties, useEffect, useState, MutableRefObject } from "react";
|
|
2
|
+
import type { Color } from "../utils/color-picker/color";
|
|
3
|
+
|
|
4
|
+
export interface TdColorSliderStyleParams {
|
|
5
|
+
color: Color;
|
|
6
|
+
value: number;
|
|
7
|
+
maxValue: number;
|
|
8
|
+
type: "hue" | "alpha";
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const useStyles = (params: TdColorSliderStyleParams, panelRectRef: MutableRefObject<{ width: number }>) => {
|
|
12
|
+
const { color, value, maxValue, type } = params;
|
|
13
|
+
const [styles, setStyles] = useState<CSSProperties>({ left: "", color: "" });
|
|
14
|
+
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
const { width } = panelRectRef.current;
|
|
17
|
+
if (!width) return;
|
|
18
|
+
|
|
19
|
+
const left = Math.round((Number(value) / Number(maxValue)) * 100);
|
|
20
|
+
|
|
21
|
+
let thumbColor = "";
|
|
22
|
+
if (type === "hue") {
|
|
23
|
+
thumbColor = `hsl(${color.hue}, 100%, 50%)`;
|
|
24
|
+
} else if (type === "alpha") {
|
|
25
|
+
thumbColor = color.rgba;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
setStyles({
|
|
29
|
+
left: `${left}%`,
|
|
30
|
+
color: thumbColor
|
|
31
|
+
});
|
|
32
|
+
}, [color.hue, color.rgba, maxValue, type, value]);
|
|
33
|
+
|
|
34
|
+
return {
|
|
35
|
+
styles
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export default useStyles;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import _ColorPickPanel from "./ColorPickPanel";
|
|
2
|
+
import _ColorPicker from "./ColorPicker";
|
|
3
|
+
|
|
4
|
+
import "./style";
|
|
5
|
+
|
|
6
|
+
export type { ColorPickerProps } from "./type";
|
|
7
|
+
export * from "./type";
|
|
8
|
+
|
|
9
|
+
export const ColorPickerPanel = _ColorPickPanel;
|
|
10
|
+
export const ColorPicker = _ColorPicker;
|
|
11
|
+
|
|
12
|
+
export default ColorPicker;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import "./index.css";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import "../../styles/components/color-picker/_index.scss";
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { MouseEvent } from "react";
|
|
2
|
+
import { StyledProps } from "../common";
|
|
3
|
+
import { InputProps } from "../input";
|
|
4
|
+
import { PopupProps } from "../popup";
|
|
5
|
+
import { SelectInputProps } from "../select-input";
|
|
6
|
+
import type { Color } from "./utils/color-picker/color";
|
|
7
|
+
export interface TdColorPickerProps {
|
|
8
|
+
/**
|
|
9
|
+
* 无边框模式
|
|
10
|
+
* @default false
|
|
11
|
+
*/
|
|
12
|
+
borderless?: boolean;
|
|
13
|
+
/**
|
|
14
|
+
* 是否可清空
|
|
15
|
+
* @default false
|
|
16
|
+
*/
|
|
17
|
+
clearable?: boolean;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* 是否禁用组件
|
|
21
|
+
*/
|
|
22
|
+
disabled?: boolean;
|
|
23
|
+
/**
|
|
24
|
+
* 是否开启透明通道
|
|
25
|
+
* @default false
|
|
26
|
+
*/
|
|
27
|
+
enableAlpha?: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* 是否允许开启通过点击渐变轴增加渐变梯度,默认开启,关闭时只会存在起始和结束两个颜色
|
|
30
|
+
* @default true
|
|
31
|
+
*/
|
|
32
|
+
enableMultipleGradient?: boolean;
|
|
33
|
+
/**
|
|
34
|
+
* 格式化色值。`enableAlpha` 为真时,`HEX8/RGBA/HSLA/HSVA` 有效
|
|
35
|
+
* @default RGB
|
|
36
|
+
*/
|
|
37
|
+
format?: "HEX" | "HEX8" | "RGB" | "RGBA" | "HSL" | "HSLA" | "HSV" | "HSVA" | "CMYK" | "CSS";
|
|
38
|
+
/**
|
|
39
|
+
* 透传 Input 输入框组件全部属性
|
|
40
|
+
*/
|
|
41
|
+
inputProps?: InputProps;
|
|
42
|
+
/**
|
|
43
|
+
* 透传 Popup 组件全部属性,如 `placement` `overlayStyle` `overlayClassName` `trigger`等
|
|
44
|
+
*/
|
|
45
|
+
popupProps?: PopupProps;
|
|
46
|
+
/**
|
|
47
|
+
* 最近使用的颜色。值为 [] 表示以组件内部的“最近使用颜色”为准,值长度大于 0 则以该值为准显示“最近使用颜色”。值为 false 或 null 则完全不显示“最近使用颜色”
|
|
48
|
+
* @default []
|
|
49
|
+
*/
|
|
50
|
+
recentColors?: Array<string> | boolean | null;
|
|
51
|
+
/**
|
|
52
|
+
* 最近使用的颜色。值为 [] 表示以组件内部的“最近使用颜色”为准,值长度大于 0 则以该值为准显示“最近使用颜色”。值为 false 或 null 则完全不显示“最近使用颜色”,非受控属性
|
|
53
|
+
* @default []
|
|
54
|
+
*/
|
|
55
|
+
defaultRecentColors?: Array<string> | boolean | null;
|
|
56
|
+
/**
|
|
57
|
+
* 透传 SelectInputProps 筛选器输入框组件全部属性
|
|
58
|
+
*/
|
|
59
|
+
selectInputProps?: SelectInputProps;
|
|
60
|
+
/**
|
|
61
|
+
* 是否展示颜色选择条右侧的颜色预览区域
|
|
62
|
+
* @default true
|
|
63
|
+
*/
|
|
64
|
+
showPrimaryColorPreview?: boolean;
|
|
65
|
+
/**
|
|
66
|
+
* 系统预设的颜色样例,值为 `null` 或 `[]` 则不显示系统色,值为 `undefined` 会显示组件内置的系统默认色
|
|
67
|
+
*/
|
|
68
|
+
swatchColors?: Array<string> | null | undefined;
|
|
69
|
+
/**
|
|
70
|
+
* 色值
|
|
71
|
+
* @default ''
|
|
72
|
+
*/
|
|
73
|
+
value?: string;
|
|
74
|
+
/**
|
|
75
|
+
* 色值,非受控属性
|
|
76
|
+
* @default ''
|
|
77
|
+
*/
|
|
78
|
+
defaultValue?: string;
|
|
79
|
+
/**
|
|
80
|
+
* 选中的色值发生变化时触发,第一个参数 `value` 表示新色值,`context.color` 表示当前调色板控制器的色值,`context.trigger` 表示触发颜色变化的来源
|
|
81
|
+
*/
|
|
82
|
+
onChange?: (value: string, context: { color: ColorObject; trigger: ColorPickerChangeTrigger }) => void;
|
|
83
|
+
/**
|
|
84
|
+
* 清空按钮点击时触发
|
|
85
|
+
*/
|
|
86
|
+
onClear?: (context: { e: MouseEvent<SVGElement> }) => void;
|
|
87
|
+
/**
|
|
88
|
+
* 调色板控制器的值变化时触发,`context.color` 指调色板控制器的值
|
|
89
|
+
*/
|
|
90
|
+
onPaletteBarChange?: (context: { color: ColorObject }) => void;
|
|
91
|
+
/**
|
|
92
|
+
* 最近使用颜色发生变化时触发
|
|
93
|
+
*/
|
|
94
|
+
onRecentColorsChange?: (value: Array<string>) => void;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export type ColorPickerChangeTrigger =
|
|
98
|
+
| "palette-saturation-brightness"
|
|
99
|
+
| "palette-saturation"
|
|
100
|
+
| "palette-brightness"
|
|
101
|
+
| "palette-hue-bar"
|
|
102
|
+
| "palette-alpha-bar"
|
|
103
|
+
| "input"
|
|
104
|
+
| "preset"
|
|
105
|
+
| "recent";
|
|
106
|
+
|
|
107
|
+
export interface ColorObject {
|
|
108
|
+
alpha: number;
|
|
109
|
+
css: string;
|
|
110
|
+
hex: string;
|
|
111
|
+
hex8: string;
|
|
112
|
+
hsl: string;
|
|
113
|
+
hsla: string;
|
|
114
|
+
hsv: string;
|
|
115
|
+
hsva: string;
|
|
116
|
+
rgb: string;
|
|
117
|
+
rgba: string;
|
|
118
|
+
saturation: number;
|
|
119
|
+
value: number;
|
|
120
|
+
isGradient: boolean;
|
|
121
|
+
linearGradient?: string;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
export interface ColorPickerProps extends TdColorPickerProps, StyledProps {}
|
|
125
|
+
|
|
126
|
+
export interface TdColorContext {
|
|
127
|
+
color: ColorObject;
|
|
128
|
+
trigger: ColorPickerChangeTrigger;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export type TdColorSaturationData = {
|
|
132
|
+
saturation: number;
|
|
133
|
+
value: number;
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
export interface TdColorBaseProps {
|
|
137
|
+
disabled: boolean;
|
|
138
|
+
color: Color;
|
|
139
|
+
onChange?: (options?) => void;
|
|
140
|
+
baseClassName: string;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
export type TdColorModes = keyof typeof import("./utils/color-picker/constants").COLOR_MODES;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* rgb 转 cmyk
|
|
3
|
+
* @param red
|
|
4
|
+
* @param green
|
|
5
|
+
* @param blue
|
|
6
|
+
* @returns
|
|
7
|
+
*/
|
|
8
|
+
export const rgb2cmyk = (red: number, green: number, blue: number) => {
|
|
9
|
+
let computedC = 0;
|
|
10
|
+
let computedM = 0;
|
|
11
|
+
let computedY = 0;
|
|
12
|
+
let computedK = 0;
|
|
13
|
+
|
|
14
|
+
const r = parseInt(`${red}`.replace(/\s/g, ''), 10);
|
|
15
|
+
const g = parseInt(`${green}`.replace(/\s/g, ''), 10);
|
|
16
|
+
const b = parseInt(`${blue}`.replace(/\s/g, ''), 10);
|
|
17
|
+
|
|
18
|
+
if (r === 0 && g === 0 && b === 0) {
|
|
19
|
+
computedK = 1;
|
|
20
|
+
return [0, 0, 0, 1];
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
computedC = 1 - r / 255;
|
|
24
|
+
computedM = 1 - g / 255;
|
|
25
|
+
computedY = 1 - b / 255;
|
|
26
|
+
|
|
27
|
+
const minCMY = Math.min(computedC, Math.min(computedM, computedY));
|
|
28
|
+
computedC = (computedC - minCMY) / (1 - minCMY);
|
|
29
|
+
computedM = (computedM - minCMY) / (1 - minCMY);
|
|
30
|
+
computedY = (computedY - minCMY) / (1 - minCMY);
|
|
31
|
+
computedK = minCMY;
|
|
32
|
+
|
|
33
|
+
return [computedC, computedM, computedY, computedK];
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* cmyk 转 rgb
|
|
38
|
+
* @param cyan
|
|
39
|
+
* @param magenta
|
|
40
|
+
* @param yellow
|
|
41
|
+
* @param black
|
|
42
|
+
* @returns
|
|
43
|
+
*/
|
|
44
|
+
export const cmyk2rgb = (cyan: number, magenta: number, yellow: number, black: number) => {
|
|
45
|
+
let c = cyan / 100;
|
|
46
|
+
let m = magenta / 100;
|
|
47
|
+
let y = yellow / 100;
|
|
48
|
+
const k = black / 100;
|
|
49
|
+
|
|
50
|
+
c = c * (1 - k) + k;
|
|
51
|
+
m = m * (1 - k) + k;
|
|
52
|
+
y = y * (1 - k) + k;
|
|
53
|
+
|
|
54
|
+
let r = 1 - c;
|
|
55
|
+
let g = 1 - m;
|
|
56
|
+
let b = 1 - y;
|
|
57
|
+
|
|
58
|
+
r = Math.round(255 * r);
|
|
59
|
+
g = Math.round(255 * g);
|
|
60
|
+
b = Math.round(255 * b);
|
|
61
|
+
return {
|
|
62
|
+
r,
|
|
63
|
+
g,
|
|
64
|
+
b,
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
const REG_CMYK_STRING = /cmyk\((\d+%?),(\d+%?),(\d+%?),(\d+%?)\)/;
|
|
69
|
+
|
|
70
|
+
const toNumber = (str: string) => Math.max(0, Math.min(255, parseInt(str, 10)));
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* 输入色转rgb
|
|
74
|
+
* @param input
|
|
75
|
+
* @returns
|
|
76
|
+
*/
|
|
77
|
+
export const cmykInputToColor = (input: string) => {
|
|
78
|
+
if (/cmyk/i.test(input)) {
|
|
79
|
+
const str = input.replace(/\s/g, '');
|
|
80
|
+
const match = str.match(REG_CMYK_STRING);
|
|
81
|
+
const c = toNumber(match[1]);
|
|
82
|
+
const m = toNumber(match[2]);
|
|
83
|
+
const y = toNumber(match[3]);
|
|
84
|
+
const k = toNumber(match[4]);
|
|
85
|
+
const { r, g, b } = cmyk2rgb(c, m, y, k);
|
|
86
|
+
return `rgb(${r}, ${g}, ${b})`;
|
|
87
|
+
}
|
|
88
|
+
return input;
|
|
89
|
+
};
|