@tendaui/components 1.0.0 → 1.2.3

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.
Files changed (270) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +176 -176
  3. package/alert/Alert.tsx +3 -2
  4. package/button/_example/base.tsx +10 -0
  5. package/button/_example/icon.tsx +20 -0
  6. package/color-picker/ColorPickPanel.tsx +9 -0
  7. package/color-picker/ColorPicker.tsx +67 -0
  8. package/color-picker/components/panel/alpha.tsx +32 -0
  9. package/color-picker/components/panel/format/index.tsx +47 -0
  10. package/color-picker/components/panel/format/inputs.tsx +119 -0
  11. package/color-picker/components/panel/header.tsx +37 -0
  12. package/color-picker/components/panel/hue.tsx +20 -0
  13. package/color-picker/components/panel/index.tsx +191 -0
  14. package/color-picker/components/panel/saturation.tsx +81 -0
  15. package/color-picker/components/panel/slider.tsx +76 -0
  16. package/color-picker/components/panel/swatches.tsx +84 -0
  17. package/color-picker/components/trigger.tsx +49 -0
  18. package/color-picker/defaultProps.ts +7 -0
  19. package/color-picker/helpers.ts +53 -0
  20. package/color-picker/hooks/useClassNames.ts +9 -0
  21. package/color-picker/hooks/useStyles.ts +39 -0
  22. package/color-picker/index.ts +12 -0
  23. package/color-picker/style/css.js +1 -0
  24. package/color-picker/style/index.js +1 -0
  25. package/color-picker/type.ts +143 -0
  26. package/color-picker/utils/color-picker/cmyk.ts +89 -0
  27. package/color-picker/utils/color-picker/color.ts +467 -0
  28. package/color-picker/utils/color-picker/constants.ts +187 -0
  29. package/color-picker/utils/color-picker/draggable.ts +100 -0
  30. package/color-picker/utils/color-picker/format.ts +95 -0
  31. package/color-picker/utils/color-picker/gradient.ts +243 -0
  32. package/color-picker/utils/color-picker/index.ts +7 -0
  33. package/color-picker/utils/color-picker/types.ts +33 -0
  34. package/common/observe.ts +33 -0
  35. package/common.ts +20 -0
  36. package/config-provider/ConfigContext.tsx +4 -1
  37. package/config-provider/index.ts +1 -1
  38. package/dialog/DialogCard.tsx +4 -6
  39. package/dialog/hooks/useDialogPosition.ts +1 -2
  40. package/dialog/plugin.tsx +3 -2
  41. package/drawer/Drawer.tsx +264 -0
  42. package/drawer/defaultProps.ts +19 -0
  43. package/drawer/hooks/useDrag.ts +98 -0
  44. package/drawer/hooks/useLockStyle.ts +36 -0
  45. package/drawer/index.ts +5 -0
  46. package/drawer/style/css.js +1 -0
  47. package/drawer/style/index.js +1 -0
  48. package/drawer/type.ts +193 -0
  49. package/drawer/utils/index.ts +76 -0
  50. package/fireworks/Fireworks.tsx +138 -0
  51. package/fireworks/index.ts +10 -0
  52. package/fireworks/style/css.js +0 -0
  53. package/fireworks/style/index.js +0 -0
  54. package/fireworks/type.ts +72 -0
  55. package/form/FormItem.tsx +5 -5
  56. package/form/easing.ts +10 -0
  57. package/form/scroll.ts +124 -0
  58. package/form/type.ts +519 -519
  59. package/global-config/default-config.ts +95 -0
  60. package/global-config/locale/ar_KW.ts +270 -0
  61. package/global-config/locale/en_US.ts +280 -0
  62. package/global-config/locale/it_IT.ts +287 -0
  63. package/global-config/locale/ja_JP.ts +279 -0
  64. package/global-config/locale/ko_KR.ts +279 -0
  65. package/global-config/locale/ru_RU.ts +288 -0
  66. package/global-config/locale/zh_CN.ts +279 -0
  67. package/global-config/locale/zh_TW.ts +279 -0
  68. package/global-config/mobile/default-config.ts +6 -0
  69. package/global-config/mobile/locale/ar_KW.ts +113 -0
  70. package/global-config/mobile/locale/en_US.ts +114 -0
  71. package/global-config/mobile/locale/it_IT.ts +114 -0
  72. package/global-config/mobile/locale/ja_JP.ts +101 -0
  73. package/global-config/mobile/locale/ko_KR.ts +101 -0
  74. package/global-config/mobile/locale/ru_RU.ts +113 -0
  75. package/global-config/mobile/locale/zh_CN.ts +101 -0
  76. package/global-config/mobile/locale/zh_TW.ts +101 -0
  77. package/global-config/t.ts +111 -0
  78. package/hooks/useControlled.ts +3 -3
  79. package/hooks/useDeepEffect.ts +32 -0
  80. package/hooks/useGlobalIcon.ts +10 -3
  81. package/hooks/useLastest.ts +2 -6
  82. package/hooks/useResizeObserve.ts +36 -0
  83. package/index.ts +10 -7
  84. package/input/Input.tsx +4 -1
  85. package/input/defaultProps.ts +0 -2
  86. package/input/type.ts +1 -6
  87. package/input-number/InputNumber.tsx +124 -0
  88. package/input-number/defaultProps.ts +17 -0
  89. package/input-number/index.ts +9 -0
  90. package/input-number/style/css.js +1 -0
  91. package/input-number/style/index.js +1 -0
  92. package/input-number/type.ts +147 -0
  93. package/input-number/useInputNumber.tsx +270 -0
  94. package/ip-input/IPInput.tsx +516 -0
  95. package/ip-input/defaultProps.ts +11 -0
  96. package/ip-input/index.ts +3 -0
  97. package/ip-input/style/css.js +1 -0
  98. package/ip-input/style/index.js +1 -0
  99. package/ip-input/type.ts +115 -0
  100. package/ip-input/utils.ts +112 -0
  101. package/layout/Aside.tsx +38 -0
  102. package/layout/Layout.tsx +104 -0
  103. package/layout/defaultProps.ts +9 -0
  104. package/layout/index.ts +9 -0
  105. package/layout/style/css.js +1 -0
  106. package/layout/style/index.js +1 -0
  107. package/layout/type.ts +43 -0
  108. package/list/List.tsx +144 -0
  109. package/list/ListItem.tsx +36 -0
  110. package/list/ListItemMeta.tsx +40 -0
  111. package/list/defaultProps.ts +11 -0
  112. package/list/hooks/useListVirtualScroll.ts +82 -0
  113. package/list/index.ts +11 -0
  114. package/list/style/css.js +1 -0
  115. package/list/style/index.js +1 -0
  116. package/list/type.ts +93 -0
  117. package/locale/LocalReceiver.ts +55 -0
  118. package/locale/ar_KW.ts +7 -0
  119. package/locale/en_US.ts +7 -0
  120. package/locale/it_IT.ts +6 -0
  121. package/locale/ja_JP.ts +6 -0
  122. package/locale/ko_KR.ts +6 -0
  123. package/locale/ru_RU.ts +6 -0
  124. package/locale/zh_CN.ts +5 -0
  125. package/locale/zh_TW.ts +7 -0
  126. package/notification/NotifyContainer.tsx +2 -2
  127. package/notification/NotifyContext.tsx +1 -0
  128. package/package.json +6 -3
  129. package/popup/Popup.tsx +34 -10
  130. package/radio/Radio.tsx +24 -0
  131. package/radio/RadioGroup.tsx +159 -0
  132. package/radio/defaultProps.ts +18 -0
  133. package/radio/index.ts +12 -0
  134. package/radio/style/css.js +0 -0
  135. package/radio/style/index.js +1 -0
  136. package/radio/type.ts +115 -0
  137. package/radio/useKeyboard.ts +36 -0
  138. package/select/hooks/useOptions.ts +10 -7
  139. package/select/hooks/usePanelVirtualScroll.ts +1 -1
  140. package/select/type.ts +382 -382
  141. package/select-input/type.ts +280 -280
  142. package/slider/Slider.tsx +270 -0
  143. package/slider/SliderHandleButton.tsx +50 -0
  144. package/slider/defaultProps.ts +15 -0
  145. package/slider/index.ts +9 -0
  146. package/slider/style/css.js +1 -0
  147. package/slider/style/index.js +1 -0
  148. package/slider/type.ts +77 -0
  149. package/style/all.js +26 -0
  150. package/styles/_global.scss +39 -39
  151. package/styles/_vars.scss +358 -386
  152. package/styles/components/alert/_index.scss +175 -175
  153. package/styles/components/alert/_vars.scss +39 -39
  154. package/styles/components/badge/_index.scss +70 -70
  155. package/styles/components/badge/_vars.scss +25 -25
  156. package/styles/components/button/_index.scss +499 -511
  157. package/styles/components/button/_mixins.scss +39 -39
  158. package/styles/components/button/_vars.scss +120 -122
  159. package/styles/components/checkbox/_index.scss +158 -158
  160. package/styles/components/checkbox/_var.scss +60 -60
  161. package/styles/components/color-picker/_index.scss +586 -0
  162. package/styles/components/color-picker/_mixins.scss +0 -0
  163. package/styles/components/color-picker/_vars.scss +84 -0
  164. package/styles/components/dialog/_animate.scss +135 -135
  165. package/styles/components/dialog/_index.scss +311 -311
  166. package/styles/components/dialog/_vars.scss +59 -59
  167. package/styles/components/drawer/_index.scss +205 -0
  168. package/styles/components/drawer/_mixins.scss +1 -0
  169. package/styles/components/drawer/_var.scss +53 -0
  170. package/styles/components/fireworks/_index.scss +86 -0
  171. package/styles/components/fireworks/_vars.scss +4 -0
  172. package/styles/components/form/_index.scss +174 -174
  173. package/styles/components/form/_mixins.scss +76 -76
  174. package/styles/components/form/_vars.scss +100 -100
  175. package/styles/components/input/_index.scss +349 -349
  176. package/styles/components/input/_mixins.scss +116 -116
  177. package/styles/components/input/_vars.scss +134 -134
  178. package/styles/components/input-number/_index.scss +353 -0
  179. package/styles/components/input-number/_mixins.scss +0 -0
  180. package/styles/components/input-number/_vars.scss +65 -0
  181. package/styles/components/ip-input/_index.scss +280 -0
  182. package/styles/components/layout/_index.scss +47 -0
  183. package/styles/components/layout/_mixin.scss +0 -0
  184. package/styles/components/layout/_vars.scss +18 -0
  185. package/styles/components/layout/doc.scss +74 -0
  186. package/styles/components/list/_index.scss +172 -0
  187. package/styles/components/list/_mixins.scss +0 -0
  188. package/styles/components/list/_vars.scss +41 -0
  189. package/styles/components/loading/_index.scss +112 -112
  190. package/styles/components/loading/_vars.scss +39 -39
  191. package/styles/components/notification/_index.scss +160 -160
  192. package/styles/components/notification/_mixins.scss +12 -12
  193. package/styles/components/notification/_vars.scss +59 -59
  194. package/styles/components/popup/_index.scss +82 -82
  195. package/styles/components/popup/_mixin.scss +149 -149
  196. package/styles/components/popup/_var.scss +31 -31
  197. package/styles/components/radio/_index.scss +376 -0
  198. package/styles/components/radio/_mixins.scss +0 -0
  199. package/styles/components/radio/_var.scss +92 -0
  200. package/styles/components/select/_index.scss +290 -290
  201. package/styles/components/select/_var.scss +65 -65
  202. package/styles/components/select-input/_index.scss +5 -5
  203. package/styles/components/select-input/_var.scss +3 -3
  204. package/styles/components/slider/_index.scss +241 -0
  205. package/styles/components/slider/_mixins.scss +0 -0
  206. package/styles/components/slider/_vars.scss +50 -0
  207. package/styles/components/switch/_index.scss +279 -279
  208. package/styles/components/switch/_vars.scss +61 -61
  209. package/styles/components/table/_index.scss +193 -0
  210. package/styles/components/table/_var.scss +52 -0
  211. package/styles/components/tabs/_index.scss +165 -0
  212. package/styles/components/tabs/_mixins.scss +11 -0
  213. package/styles/components/tabs/_vars.scss +71 -0
  214. package/styles/components/tag/_index.scss +316 -316
  215. package/styles/components/tag/_var.scss +85 -85
  216. package/styles/components/tag-input/_index.scss +163 -163
  217. package/styles/components/tag-input/_vars.scss +16 -16
  218. package/styles/globals.css +250 -250
  219. package/styles/mixins/_focus.scss +7 -7
  220. package/styles/mixins/_layout.scss +32 -32
  221. package/styles/mixins/_reset.scss +10 -10
  222. package/styles/mixins/_scrollbar.scss +31 -31
  223. package/styles/mixins/_text.scss +48 -48
  224. package/styles/rillple.css +16 -16
  225. package/styles/scrollbar.css +41 -41
  226. package/styles/themes/_dark.scss +191 -191
  227. package/styles/themes/_font.scss +69 -79
  228. package/styles/themes/_index.scss +5 -5
  229. package/styles/themes/_light.scss +190 -190
  230. package/styles/themes/_radius.scss +9 -9
  231. package/styles/themes/_size.scss +68 -68
  232. package/styles/themes.css +66 -66
  233. package/styles/utilities/_animation.scss +57 -57
  234. package/styles/utilities/_tips.scss +9 -9
  235. package/tab/TabBar.tsx +85 -0
  236. package/tab/TabNav.tsx +103 -0
  237. package/tab/TabNavItem.tsx +80 -0
  238. package/tab/TabPanel.tsx +42 -0
  239. package/tab/Tabs.tsx +71 -0
  240. package/tab/defaultProps.ts +19 -0
  241. package/tab/index.ts +7 -0
  242. package/tab/style/index.js +1 -0
  243. package/tab/type.ts +125 -0
  244. package/tab/useTabClass.ts +20 -0
  245. package/table/Cell.tsx +109 -0
  246. package/table/TBody.tsx +77 -0
  247. package/table/THead.tsx +63 -0
  248. package/table/TR.tsx +78 -0
  249. package/table/Table.tsx +73 -0
  250. package/table/defaultProps.ts +14 -0
  251. package/table/hooks/index.ts +4 -0
  252. package/table/hooks/useTableClassName.ts +63 -0
  253. package/table/hooks/useTableStyle.ts +93 -0
  254. package/table/index.ts +7 -0
  255. package/table/style/css.js +1 -0
  256. package/table/style/index.js +1 -0
  257. package/table/type.ts +192 -0
  258. package/tag/Tag.tsx +1 -1
  259. package/tag-input/hooks/useTagList.tsx +1 -1
  260. package/utils/dom.ts +4 -0
  261. package/utils/forwardRefWithStatics.ts +1 -4
  262. package/utils/input-number/large-number.ts +423 -0
  263. package/utils/input-number/number.ts +257 -0
  264. package/utils/isFragment.ts +6 -6
  265. package/utils/log/index.ts +3 -0
  266. package/utils/log/log.ts +30 -0
  267. package/utils/log/types.ts +12 -0
  268. package/utils/number.ts +21 -0
  269. package/utils/scroll.ts +26 -0
  270. 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,9 @@
1
+ import useConfig from "../../hooks/useConfig";
2
+
3
+ const useClassNames = () => {
4
+ const { classPrefix } = useConfig();
5
+ const baseClassName = `${classPrefix}-color-picker`;
6
+ return baseClassName;
7
+ };
8
+
9
+ export default useClassNames;
@@ -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
+ };