@douyinfe/semi-foundation 2.63.2-alpha.0 → 2.64.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/calendar/foundation.ts +20 -0
- package/colorPicker/AlphaSliderFoundation.ts +62 -0
- package/colorPicker/ColorChooseAreaFoundation.ts +86 -0
- package/colorPicker/ColorSliderFoundation.ts +61 -0
- package/colorPicker/DataPartFoundation.ts +113 -0
- package/colorPicker/colorPicker.scss +113 -0
- package/colorPicker/constants.ts +11 -0
- package/colorPicker/foundation.ts +206 -0
- package/colorPicker/interface.ts +51 -0
- package/colorPicker/utils/convert.ts +228 -0
- package/colorPicker/utils/round.ts +3 -0
- package/colorPicker/utils/split.ts +40 -0
- package/colorPicker/variables.scss +28 -0
- package/image/previewImageFoundation.ts +22 -17
- package/lib/cjs/calendar/foundation.js +18 -0
- package/lib/cjs/colorPicker/AlphaSliderFoundation.d.ts +27 -0
- package/lib/cjs/colorPicker/AlphaSliderFoundation.js +40 -0
- package/lib/cjs/colorPicker/ColorChooseAreaFoundation.d.ts +42 -0
- package/lib/cjs/colorPicker/ColorChooseAreaFoundation.js +62 -0
- package/lib/cjs/colorPicker/ColorSliderFoundation.d.ts +26 -0
- package/lib/cjs/colorPicker/ColorSliderFoundation.js +40 -0
- package/lib/cjs/colorPicker/DataPartFoundation.d.ts +28 -0
- package/lib/cjs/colorPicker/DataPartFoundation.js +115 -0
- package/lib/cjs/colorPicker/colorPicker.css +84 -0
- package/lib/cjs/colorPicker/colorPicker.scss +113 -0
- package/lib/cjs/colorPicker/constants.d.ts +4 -0
- package/lib/cjs/colorPicker/constants.js +11 -0
- package/lib/cjs/colorPicker/foundation.d.ts +66 -0
- package/lib/cjs/colorPicker/foundation.js +150 -0
- package/lib/cjs/colorPicker/interface.d.ts +40 -0
- package/lib/cjs/colorPicker/interface.js +5 -0
- package/lib/cjs/colorPicker/utils/convert.d.ts +28 -0
- package/lib/cjs/colorPicker/utils/convert.js +306 -0
- package/lib/cjs/colorPicker/utils/round.d.ts +1 -0
- package/lib/cjs/colorPicker/utils/round.js +12 -0
- package/lib/cjs/colorPicker/utils/split.d.ts +18 -0
- package/lib/cjs/colorPicker/utils/split.js +40 -0
- package/lib/cjs/colorPicker/variables.scss +28 -0
- package/lib/cjs/image/previewImageFoundation.js +22 -18
- package/lib/cjs/slider/foundation.d.ts +1 -0
- package/lib/cjs/slider/foundation.js +15 -0
- package/lib/cjs/tabs/constants.d.ts +0 -1
- package/lib/cjs/tabs/constants.js +1 -2
- package/lib/cjs/tabs/tabs.css +199 -28
- package/lib/cjs/tabs/tabs.scss +297 -336
- package/lib/cjs/tabs/variables.scss +2 -21
- package/lib/cjs/tooltip/foundation.js +2 -1
- package/lib/cjs/tree/treeUtil.d.ts +1 -1
- package/lib/cjs/upload/constants.d.ts +1 -1
- package/lib/cjs/upload/foundation.d.ts +1 -0
- package/lib/cjs/upload/foundation.js +30 -14
- package/lib/es/calendar/foundation.js +18 -0
- package/lib/es/colorPicker/AlphaSliderFoundation.d.ts +27 -0
- package/lib/es/colorPicker/AlphaSliderFoundation.js +33 -0
- package/lib/es/colorPicker/ColorChooseAreaFoundation.d.ts +42 -0
- package/lib/es/colorPicker/ColorChooseAreaFoundation.js +55 -0
- package/lib/es/colorPicker/ColorSliderFoundation.d.ts +26 -0
- package/lib/es/colorPicker/ColorSliderFoundation.js +33 -0
- package/lib/es/colorPicker/DataPartFoundation.d.ts +28 -0
- package/lib/es/colorPicker/DataPartFoundation.js +108 -0
- package/lib/es/colorPicker/colorPicker.css +84 -0
- package/lib/es/colorPicker/colorPicker.scss +113 -0
- package/lib/es/colorPicker/constants.d.ts +4 -0
- package/lib/es/colorPicker/constants.js +6 -0
- package/lib/es/colorPicker/foundation.d.ts +66 -0
- package/lib/es/colorPicker/foundation.js +143 -0
- package/lib/es/colorPicker/interface.d.ts +40 -0
- package/lib/es/colorPicker/interface.js +1 -0
- package/lib/es/colorPicker/utils/convert.d.ts +28 -0
- package/lib/es/colorPicker/utils/convert.js +277 -0
- package/lib/es/colorPicker/utils/round.d.ts +1 -0
- package/lib/es/colorPicker/utils/round.js +5 -0
- package/lib/es/colorPicker/utils/split.d.ts +18 -0
- package/lib/es/colorPicker/utils/split.js +34 -0
- package/lib/es/colorPicker/variables.scss +28 -0
- package/lib/es/image/previewImageFoundation.js +22 -18
- package/lib/es/slider/foundation.d.ts +1 -0
- package/lib/es/slider/foundation.js +15 -0
- package/lib/es/tabs/constants.d.ts +0 -1
- package/lib/es/tabs/constants.js +1 -2
- package/lib/es/tabs/tabs.css +199 -28
- package/lib/es/tabs/tabs.scss +297 -336
- package/lib/es/tabs/variables.scss +2 -21
- package/lib/es/tooltip/foundation.js +2 -1
- package/lib/es/tree/treeUtil.d.ts +1 -1
- package/lib/es/upload/constants.d.ts +1 -1
- package/lib/es/upload/foundation.d.ts +1 -0
- package/lib/es/upload/foundation.js +30 -14
- package/package.json +3 -3
- package/slider/foundation.ts +13 -0
- package/tabs/constants.ts +1 -2
- package/tabs/tabs.scss +297 -336
- package/tabs/variables.scss +2 -21
- package/tooltip/foundation.ts +1 -1
- package/upload/foundation.ts +19 -3
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
@import "./variables.scss";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
$module: #{$prefix}-colorPicker;
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
.#{$module} {
|
|
8
|
+
|
|
9
|
+
&-colorChooseArea{
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Referrer from https://github.com/web-padawan/vanilla-colorful/blob/5d219ee360ae2f29534864b28ca9e6074233b9ce/src/lib/styles/saturation.css
|
|
13
|
+
*/
|
|
14
|
+
box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.05);
|
|
15
|
+
position: relative;
|
|
16
|
+
flex-grow: 1;
|
|
17
|
+
border-color: transparent;
|
|
18
|
+
border-radius: $radius-colorPicker-topLeft $radius-colorPicker-topRight $radius-colorPicker-bottomLeft $radius-colorPicker-bottomRight;
|
|
19
|
+
background-image: linear-gradient(to top, #000, rgba(0, 0, 0, 0)), linear-gradient(to right, #fff, rgba(255, 255, 255, 0));
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
&-handle{
|
|
24
|
+
border-radius: $radius-colorPicker-handle;
|
|
25
|
+
border: $width-colorPicker_handle-border solid $color-colorPicker_handle-border;
|
|
26
|
+
position: absolute;
|
|
27
|
+
box-sizing: border-box;
|
|
28
|
+
cursor: grab;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
&-alphaSlider{
|
|
35
|
+
position: relative;
|
|
36
|
+
cursor: pointer;
|
|
37
|
+
margin-top: $spacing-colorPicker_slider-marginTop;
|
|
38
|
+
border-radius: $radius-colorPicker-handle;
|
|
39
|
+
background: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill-opacity=".05"><rect x="8" width="8" height="8"/><rect y="8" width="8" height="8"/></svg>');
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
.#{$module}-alphaSliderInner{
|
|
43
|
+
width: 100%;
|
|
44
|
+
height: 100%;
|
|
45
|
+
border-radius: $radius-colorPicker-alphaSliderInner;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.#{$module}-alphaHandle{
|
|
49
|
+
background: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill-opacity=".05"><rect x="8" width="8" height="8"/><rect y="8" width="8" height="8"/></svg>');
|
|
50
|
+
border-radius: $radius-colorPicker-handle;
|
|
51
|
+
border: $width-colorPicker_handle-border solid $color-colorPicker_handle-border;
|
|
52
|
+
position: absolute;
|
|
53
|
+
box-sizing: border-box;
|
|
54
|
+
cursor: grab;
|
|
55
|
+
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
&-colorSlider{
|
|
61
|
+
position: relative;
|
|
62
|
+
cursor: pointer;
|
|
63
|
+
margin-top: $spacing-colorPicker_slider-marginTop;
|
|
64
|
+
border-radius: $radius-colorPicker-handle;
|
|
65
|
+
background: linear-gradient(to right, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
&-dataPart{
|
|
71
|
+
margin-top: $spacing-colorPicker_dataPart-marginTop;
|
|
72
|
+
display: flex;
|
|
73
|
+
align-items: center;
|
|
74
|
+
.#{$module}-colorDemoBlock{
|
|
75
|
+
border-radius: $radius-colorPicker-demoBlock;
|
|
76
|
+
}
|
|
77
|
+
.#{$module}-inputGroup{
|
|
78
|
+
margin-left: $spacing-colorPicker_inputGroup-marginLeft;
|
|
79
|
+
width: 100%;
|
|
80
|
+
flex:1;
|
|
81
|
+
flex-wrap: nowrap;
|
|
82
|
+
.#{$module}-colorPickerInput{
|
|
83
|
+
flex: 1;
|
|
84
|
+
}
|
|
85
|
+
.#{$module}-colorPickerInputNumber{
|
|
86
|
+
width: $width-colorPicker-colorPickerInputNumber;
|
|
87
|
+
.#{$module}-inputNumberSuffix{
|
|
88
|
+
font-size: $font-colorPicker_inputNumberSuffix-fontSize;
|
|
89
|
+
padding: $spacing-colorPicker_inputNumberSuffix-vertical $spacing-colorPicker_inputNumberSuffix-horizontal;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
.#{$module}-formatSelect{
|
|
94
|
+
width: $width-colorPicker-formatSelect;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
&-popover{
|
|
100
|
+
padding: $spacing-colorPicker_popover-padding;
|
|
101
|
+
|
|
102
|
+
&-defaultChildren{
|
|
103
|
+
width:$width-colorPicker-defaultTrigger;
|
|
104
|
+
height: $width-colorPicker-defaultTrigger;
|
|
105
|
+
border-radius: $radius-colorPicker-defaultTrigger;
|
|
106
|
+
cursor: pointer;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { HsvaColor, RgbaColor } from './interface';
|
|
2
|
+
import BaseFoundation, { DefaultAdapter } from '../base/foundation';
|
|
3
|
+
export type ColorValue = {
|
|
4
|
+
hsva: HsvaColor;
|
|
5
|
+
rgba: RgbaColor;
|
|
6
|
+
hex: string;
|
|
7
|
+
};
|
|
8
|
+
export interface ColorPickerProps {
|
|
9
|
+
eyeDropper?: boolean;
|
|
10
|
+
defaultValue?: ColorValue;
|
|
11
|
+
value?: ColorValue;
|
|
12
|
+
onChange: (value: ColorValue) => void;
|
|
13
|
+
alpha: boolean;
|
|
14
|
+
width?: number;
|
|
15
|
+
height?: number;
|
|
16
|
+
defaultFormat: 'hex' | 'rgba' | 'hsva';
|
|
17
|
+
}
|
|
18
|
+
export interface ColorPickerState {
|
|
19
|
+
currentColor: ColorValue;
|
|
20
|
+
}
|
|
21
|
+
export interface ColorPickerAdapter<P = Record<string, any>, S = Record<string, any>> extends DefaultAdapter<P, S> {
|
|
22
|
+
notifyChange: (value: ColorValue) => void;
|
|
23
|
+
}
|
|
24
|
+
declare class ColorPickerFoundation extends BaseFoundation<ColorPickerAdapter<ColorPickerProps, ColorPickerState>, ColorPickerProps, ColorPickerState> {
|
|
25
|
+
constructor(adapter: ColorPickerAdapter<ColorPickerProps, ColorPickerState>);
|
|
26
|
+
static hsvaToRgba: ({ h, s, v, a }: HsvaColor) => RgbaColor;
|
|
27
|
+
static rgbaToHsva: ({ r, g, b, a }: RgbaColor) => HsvaColor;
|
|
28
|
+
static rgbaToHex: ({ r, g, b, a }: RgbaColor) => string;
|
|
29
|
+
static hsvaToHex: (hsva: HsvaColor) => string;
|
|
30
|
+
static hexToRgba: (hex: string) => RgbaColor;
|
|
31
|
+
static hexToHsva: (hex: string) => HsvaColor;
|
|
32
|
+
static hsvaToHslaString: (hsva: HsvaColor) => string;
|
|
33
|
+
static hsvaToHslString: (hsva: HsvaColor) => string;
|
|
34
|
+
static rgbaStringToHsva: (rgbaString: string) => HsvaColor;
|
|
35
|
+
static rgbaStringToRgba: (rgbaString: string) => RgbaColor;
|
|
36
|
+
handleChangeH: (currentColor: ColorValue, newH: number) => void;
|
|
37
|
+
handleChangeA: (currentColor: ColorValue, newAlpha: number) => void;
|
|
38
|
+
getCurrentColor: () => any;
|
|
39
|
+
handleChange: (color: HsvaColor | RgbaColor | string, format: 'hex' | 'rgba' | 'hsva') => void;
|
|
40
|
+
handleAlphaChangeByHandle: (newAlpha: {
|
|
41
|
+
a: number;
|
|
42
|
+
}) => void;
|
|
43
|
+
handleColorChangeByHandle: (newHue: {
|
|
44
|
+
h: number;
|
|
45
|
+
}) => void;
|
|
46
|
+
getHandlePositionByHSVA: (hsva: HsvaColor, { width, height }: {
|
|
47
|
+
width: number;
|
|
48
|
+
height: number;
|
|
49
|
+
}, handleSize: number) => {
|
|
50
|
+
x: number;
|
|
51
|
+
y: number;
|
|
52
|
+
};
|
|
53
|
+
getHandlePositionByMousePosition: (mousePosition: {
|
|
54
|
+
x: number;
|
|
55
|
+
y: number;
|
|
56
|
+
}, { width, height }: {
|
|
57
|
+
width: number;
|
|
58
|
+
height: number;
|
|
59
|
+
}, handleSize: number) => {
|
|
60
|
+
x: number;
|
|
61
|
+
y: number;
|
|
62
|
+
};
|
|
63
|
+
getAlphaHandlePositionByMousePosition: (mousePosition: number, width: number, handleSize: number) => number;
|
|
64
|
+
getColorHandlePositionByMousePosition: (mousePosition: number, width: number, handleSize: number) => number;
|
|
65
|
+
}
|
|
66
|
+
export default ColorPickerFoundation;
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import BaseFoundation from '../base/foundation';
|
|
2
|
+
import { hexToHsva, hexToRgba, hsvaToHex, hsvaToHslaString, hsvaToHslString, hsvaToRgba, rgbaStringToHsva, rgbaStringToRgba, rgbaToHex, rgbaToHsva } from './utils/convert';
|
|
3
|
+
class ColorPickerFoundation extends BaseFoundation {
|
|
4
|
+
constructor(adapter) {
|
|
5
|
+
super(Object.assign({}, adapter));
|
|
6
|
+
this.handleChangeH = (currentColor, newH) => {
|
|
7
|
+
const hsva = Object.assign(Object.assign({}, currentColor.hsva), {
|
|
8
|
+
h: newH
|
|
9
|
+
});
|
|
10
|
+
const rgba = hsvaToRgba(hsva);
|
|
11
|
+
const hex = hsvaToHex(hsva);
|
|
12
|
+
const newCurrentColor = {
|
|
13
|
+
rgba,
|
|
14
|
+
hsva,
|
|
15
|
+
hex
|
|
16
|
+
};
|
|
17
|
+
this._adapter.notifyChange(newCurrentColor);
|
|
18
|
+
if (!this.getProp("value")) {
|
|
19
|
+
this._adapter.setState({
|
|
20
|
+
currentColor: newCurrentColor
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
this.handleChangeA = (currentColor, newAlpha) => {
|
|
25
|
+
let alpha = this._adapter.getProp('alpha');
|
|
26
|
+
if (!alpha) {
|
|
27
|
+
newAlpha = 1;
|
|
28
|
+
}
|
|
29
|
+
const rgba = Object.assign(Object.assign({}, currentColor.rgba), {
|
|
30
|
+
a: newAlpha
|
|
31
|
+
});
|
|
32
|
+
const hex = rgbaToHex(rgba);
|
|
33
|
+
currentColor = {
|
|
34
|
+
rgba,
|
|
35
|
+
hex: alpha ? hex : hex.slice(0, 7),
|
|
36
|
+
hsva: Object.assign(Object.assign({}, currentColor.hsva), {
|
|
37
|
+
a: newAlpha
|
|
38
|
+
})
|
|
39
|
+
};
|
|
40
|
+
this._adapter.notifyChange(currentColor);
|
|
41
|
+
if (!this.getProp("value")) {
|
|
42
|
+
this._adapter.setState({
|
|
43
|
+
currentColor: currentColor
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
this.getCurrentColor = () => {
|
|
48
|
+
const value = this.getProp("value");
|
|
49
|
+
const currentColor = this.getState("currentColor");
|
|
50
|
+
return value || currentColor;
|
|
51
|
+
};
|
|
52
|
+
this.handleChange = (color, format) => {
|
|
53
|
+
let currentColor;
|
|
54
|
+
if (format === 'hsva') {
|
|
55
|
+
currentColor = {
|
|
56
|
+
hsva: color,
|
|
57
|
+
rgba: ColorPickerFoundation.hsvaToRgba(color),
|
|
58
|
+
hex: ColorPickerFoundation.hsvaToHex(color)
|
|
59
|
+
};
|
|
60
|
+
} else if (format === 'rgba') {
|
|
61
|
+
currentColor = {
|
|
62
|
+
rgba: color,
|
|
63
|
+
hsva: ColorPickerFoundation.rgbaToHsva(color),
|
|
64
|
+
hex: ColorPickerFoundation.rgbaToHex(color)
|
|
65
|
+
};
|
|
66
|
+
} else if (format === 'hex') {
|
|
67
|
+
currentColor = {
|
|
68
|
+
hex: color,
|
|
69
|
+
hsva: ColorPickerFoundation.hexToHsva(color),
|
|
70
|
+
rgba: ColorPickerFoundation.hexToRgba(color)
|
|
71
|
+
};
|
|
72
|
+
} else {
|
|
73
|
+
throw new Error('format error');
|
|
74
|
+
}
|
|
75
|
+
this._adapter.notifyChange(currentColor);
|
|
76
|
+
if (!this.getProp("value")) {
|
|
77
|
+
this._adapter.setState({
|
|
78
|
+
currentColor: currentColor
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
this.handleAlphaChangeByHandle = newAlpha => {
|
|
83
|
+
this.handleChangeA(this.getCurrentColor(), newAlpha.a);
|
|
84
|
+
};
|
|
85
|
+
this.handleColorChangeByHandle = newHue => {
|
|
86
|
+
this.handleChangeH(this.getCurrentColor(), newHue.h);
|
|
87
|
+
};
|
|
88
|
+
this.getHandlePositionByHSVA = (hsva, _ref, handleSize) => {
|
|
89
|
+
let {
|
|
90
|
+
width,
|
|
91
|
+
height
|
|
92
|
+
} = _ref;
|
|
93
|
+
const defaultColorPosition = {
|
|
94
|
+
x: hsva.s / 100 * width,
|
|
95
|
+
y: (1 - hsva.v / 100) * height
|
|
96
|
+
};
|
|
97
|
+
return {
|
|
98
|
+
x: defaultColorPosition.x - handleSize / 2,
|
|
99
|
+
y: defaultColorPosition.y - handleSize / 2
|
|
100
|
+
};
|
|
101
|
+
};
|
|
102
|
+
this.getHandlePositionByMousePosition = (mousePosition, _ref2, handleSize) => {
|
|
103
|
+
let {
|
|
104
|
+
width,
|
|
105
|
+
height
|
|
106
|
+
} = _ref2;
|
|
107
|
+
if (mousePosition.x > width || mousePosition.x < 0) {
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
if (mousePosition.y > height || mousePosition.y < 0) {
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
const handlePosition = {
|
|
114
|
+
x: mousePosition.x - handleSize / 2,
|
|
115
|
+
y: mousePosition.y - handleSize / 2
|
|
116
|
+
};
|
|
117
|
+
return handlePosition;
|
|
118
|
+
};
|
|
119
|
+
this.getAlphaHandlePositionByMousePosition = (mousePosition, width, handleSize) => {
|
|
120
|
+
if (mousePosition < 0 || mousePosition > width) {
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
return mousePosition - handleSize / 2;
|
|
124
|
+
};
|
|
125
|
+
this.getColorHandlePositionByMousePosition = (mousePosition, width, handleSize) => {
|
|
126
|
+
if (mousePosition < 0 || mousePosition > width) {
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
return mousePosition - handleSize / 2;
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
ColorPickerFoundation.hsvaToRgba = hsvaToRgba;
|
|
134
|
+
ColorPickerFoundation.rgbaToHsva = rgbaToHsva;
|
|
135
|
+
ColorPickerFoundation.rgbaToHex = rgbaToHex;
|
|
136
|
+
ColorPickerFoundation.hsvaToHex = hsvaToHex;
|
|
137
|
+
ColorPickerFoundation.hexToRgba = hexToRgba;
|
|
138
|
+
ColorPickerFoundation.hexToHsva = hexToHsva;
|
|
139
|
+
ColorPickerFoundation.hsvaToHslaString = hsvaToHslaString;
|
|
140
|
+
ColorPickerFoundation.hsvaToHslString = hsvaToHslString;
|
|
141
|
+
ColorPickerFoundation.rgbaStringToHsva = rgbaStringToHsva;
|
|
142
|
+
ColorPickerFoundation.rgbaStringToRgba = rgbaStringToRgba;
|
|
143
|
+
export default ColorPickerFoundation;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export interface HsvColor {
|
|
2
|
+
h: number;
|
|
3
|
+
s: number;
|
|
4
|
+
v: number;
|
|
5
|
+
}
|
|
6
|
+
export interface HsvaColor extends HsvColor {
|
|
7
|
+
a: number;
|
|
8
|
+
}
|
|
9
|
+
export interface RgbColor {
|
|
10
|
+
r: number;
|
|
11
|
+
g: number;
|
|
12
|
+
b: number;
|
|
13
|
+
}
|
|
14
|
+
export interface RgbaColor extends RgbColor {
|
|
15
|
+
a: number;
|
|
16
|
+
}
|
|
17
|
+
export interface HslColor {
|
|
18
|
+
h: number;
|
|
19
|
+
s: number;
|
|
20
|
+
l: number;
|
|
21
|
+
}
|
|
22
|
+
export interface HslaColor extends HslColor {
|
|
23
|
+
a: number;
|
|
24
|
+
}
|
|
25
|
+
export interface HsvColor {
|
|
26
|
+
h: number;
|
|
27
|
+
s: number;
|
|
28
|
+
v: number;
|
|
29
|
+
}
|
|
30
|
+
export interface HsvaColor extends HsvColor {
|
|
31
|
+
a: number;
|
|
32
|
+
}
|
|
33
|
+
export type ObjectColor = RgbColor | HslColor | HsvColor | RgbaColor | HslaColor | HsvaColor;
|
|
34
|
+
export type AnyColor = string | ObjectColor;
|
|
35
|
+
export interface ColorModel<T extends AnyColor> {
|
|
36
|
+
defaultColor: T;
|
|
37
|
+
toHsva: (defaultColor: T) => HsvaColor;
|
|
38
|
+
fromHsva: (hsva: HsvaColor) => T;
|
|
39
|
+
equal: (first: T, second: T) => boolean;
|
|
40
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { RgbaColor, RgbColor, HslaColor, HslColor, HsvaColor, HsvColor } from "../interface";
|
|
2
|
+
export declare const hexToHsva: (hex: string) => HsvaColor;
|
|
3
|
+
export declare const hexToRgba: (hex: string) => RgbaColor;
|
|
4
|
+
export declare const parseHue: (value: string, unit?: string) => number;
|
|
5
|
+
export declare const hslaStringToHsva: (hslString: string) => HsvaColor;
|
|
6
|
+
export declare const hslStringToHsva: (hslString: string) => HsvaColor;
|
|
7
|
+
export declare const hslaToHsva: ({ h, s, l, a }: HslaColor) => HsvaColor;
|
|
8
|
+
export declare const hsvaToHex: (hsva: HsvaColor) => string;
|
|
9
|
+
export declare const hsvaToHsla: ({ h, s, v, a }: HsvaColor) => HslaColor;
|
|
10
|
+
export declare const hsvaToHslString: (hsva: HsvaColor) => string;
|
|
11
|
+
export declare const hsvaToHsvString: (hsva: HsvaColor) => string;
|
|
12
|
+
export declare const hsvaToHsvaString: (hsva: HsvaColor) => string;
|
|
13
|
+
export declare const hsvaToHslaString: (hsva: HsvaColor) => string;
|
|
14
|
+
export declare const hsvaToRgba: ({ h, s, v, a }: HsvaColor) => RgbaColor;
|
|
15
|
+
export declare const hsvaToRgbString: (hsva: HsvaColor) => string;
|
|
16
|
+
export declare const hsvaToRgbaString: (hsva: HsvaColor) => string;
|
|
17
|
+
export declare const hsvaStringToHsva: (hsvString: string) => HsvaColor;
|
|
18
|
+
export declare const hsvStringToHsva: (hsvString: string) => HsvaColor;
|
|
19
|
+
export declare const rgbaStringToHsva: (rgbaString: string) => HsvaColor;
|
|
20
|
+
export declare const rgbaStringToRgba: (rgbaString: string) => RgbaColor;
|
|
21
|
+
export declare const rgbStringToRgba: (rgbaString: string) => RgbaColor;
|
|
22
|
+
export declare const rgbStringToHsva: (rgbaString: string) => HsvaColor;
|
|
23
|
+
export declare const rgbaToHex: ({ r, g, b, a }: RgbaColor) => string;
|
|
24
|
+
export declare const rgbaToHsva: ({ r, g, b, a }: RgbaColor) => HsvaColor;
|
|
25
|
+
export declare const roundHsva: (hsva: HsvaColor) => HsvaColor;
|
|
26
|
+
export declare const rgbaToRgb: ({ r, g, b }: RgbaColor) => RgbColor;
|
|
27
|
+
export declare const hslaToHsl: ({ h, s, l }: HslaColor) => HslColor;
|
|
28
|
+
export declare const hsvaToHsv: (hsva: HsvaColor) => HsvColor;
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
import { round } from "./round";
|
|
2
|
+
/**
|
|
3
|
+
* Valid CSS <angle> units.
|
|
4
|
+
* https://developer.mozilla.org/en-US/docs/Web/CSS/angle
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Referrer from https://github.com/web-padawan/vanilla-colorful/blob/master/src/lib/utils/convert.ts
|
|
8
|
+
*/
|
|
9
|
+
const angleUnits = {
|
|
10
|
+
grad: 360 / 400,
|
|
11
|
+
turn: 360,
|
|
12
|
+
rad: 360 / (Math.PI * 2)
|
|
13
|
+
};
|
|
14
|
+
export const hexToHsva = hex => rgbaToHsva(hexToRgba(hex));
|
|
15
|
+
export const hexToRgba = hex => {
|
|
16
|
+
if (hex[0] === "#") hex = hex.substring(1);
|
|
17
|
+
const hexToPercent = str => {
|
|
18
|
+
const decimal = parseInt(str, 16);
|
|
19
|
+
if (!isNaN(decimal)) {
|
|
20
|
+
const percent = decimal / 255;
|
|
21
|
+
return percent;
|
|
22
|
+
}
|
|
23
|
+
return 1;
|
|
24
|
+
};
|
|
25
|
+
return {
|
|
26
|
+
r: parseInt(hex.substring(0, 2), 16),
|
|
27
|
+
g: parseInt(hex.substring(2, 4), 16),
|
|
28
|
+
b: parseInt(hex.substring(4, 6), 16),
|
|
29
|
+
a: hexToPercent(hex.substring(6, 8))
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
export const parseHue = function (value) {
|
|
33
|
+
let unit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "deg";
|
|
34
|
+
return Number(value) * (angleUnits[unit] || 1);
|
|
35
|
+
};
|
|
36
|
+
export const hslaStringToHsva = hslString => {
|
|
37
|
+
const matcher = /hsla?\(?\s*(-?\d*\.?\d+)(deg|rad|grad|turn)?[,\s]+(-?\d*\.?\d+)%?[,\s]+(-?\d*\.?\d+)%?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i;
|
|
38
|
+
const match = matcher.exec(hslString);
|
|
39
|
+
if (!match) return {
|
|
40
|
+
h: 0,
|
|
41
|
+
s: 0,
|
|
42
|
+
v: 0,
|
|
43
|
+
a: 1
|
|
44
|
+
};
|
|
45
|
+
return hslaToHsva({
|
|
46
|
+
h: parseHue(match[1], match[2]),
|
|
47
|
+
s: Number(match[3]),
|
|
48
|
+
l: Number(match[4]),
|
|
49
|
+
a: match[5] === undefined ? 1 : Number(match[5]) / (match[6] ? 100 : 1)
|
|
50
|
+
});
|
|
51
|
+
};
|
|
52
|
+
export const hslStringToHsva = hslaStringToHsva;
|
|
53
|
+
export const hslaToHsva = _ref => {
|
|
54
|
+
let {
|
|
55
|
+
h,
|
|
56
|
+
s,
|
|
57
|
+
l,
|
|
58
|
+
a
|
|
59
|
+
} = _ref;
|
|
60
|
+
s *= (l < 50 ? l : 100 - l) / 100;
|
|
61
|
+
return {
|
|
62
|
+
h: h,
|
|
63
|
+
s: s > 0 ? 2 * s / (l + s) * 100 : 0,
|
|
64
|
+
v: l + s,
|
|
65
|
+
a
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
export const hsvaToHex = hsva => rgbaToHex(hsvaToRgba(hsva));
|
|
69
|
+
export const hsvaToHsla = _ref2 => {
|
|
70
|
+
let {
|
|
71
|
+
h,
|
|
72
|
+
s,
|
|
73
|
+
v,
|
|
74
|
+
a
|
|
75
|
+
} = _ref2;
|
|
76
|
+
const hh = (200 - s) * v / 100;
|
|
77
|
+
return {
|
|
78
|
+
h: round(h),
|
|
79
|
+
s: round(hh > 0 && hh < 200 ? s * v / 100 / (hh <= 100 ? hh : 200 - hh) * 100 : 0),
|
|
80
|
+
l: round(hh / 2),
|
|
81
|
+
a: round(a, 2)
|
|
82
|
+
};
|
|
83
|
+
};
|
|
84
|
+
export const hsvaToHslString = hsva => {
|
|
85
|
+
const {
|
|
86
|
+
h,
|
|
87
|
+
s,
|
|
88
|
+
l
|
|
89
|
+
} = hsvaToHsla(hsva);
|
|
90
|
+
return `hsl(${h}, ${s}%, ${l}%)`;
|
|
91
|
+
};
|
|
92
|
+
export const hsvaToHsvString = hsva => {
|
|
93
|
+
const {
|
|
94
|
+
h,
|
|
95
|
+
s,
|
|
96
|
+
v
|
|
97
|
+
} = roundHsva(hsva);
|
|
98
|
+
return `hsv(${h}, ${s}%, ${v}%)`;
|
|
99
|
+
};
|
|
100
|
+
export const hsvaToHsvaString = hsva => {
|
|
101
|
+
const {
|
|
102
|
+
h,
|
|
103
|
+
s,
|
|
104
|
+
v,
|
|
105
|
+
a
|
|
106
|
+
} = roundHsva(hsva);
|
|
107
|
+
return `hsva(${h}, ${s}%, ${v}%, ${a})`;
|
|
108
|
+
};
|
|
109
|
+
export const hsvaToHslaString = hsva => {
|
|
110
|
+
const {
|
|
111
|
+
h,
|
|
112
|
+
s,
|
|
113
|
+
l,
|
|
114
|
+
a
|
|
115
|
+
} = hsvaToHsla(hsva);
|
|
116
|
+
return `hsla(${h}, ${s}%, ${l}%, ${a})`;
|
|
117
|
+
};
|
|
118
|
+
export const hsvaToRgba = _ref3 => {
|
|
119
|
+
let {
|
|
120
|
+
h,
|
|
121
|
+
s,
|
|
122
|
+
v,
|
|
123
|
+
a
|
|
124
|
+
} = _ref3;
|
|
125
|
+
h = h / 360 * 6;
|
|
126
|
+
s = s / 100;
|
|
127
|
+
v = v / 100;
|
|
128
|
+
const hh = Math.floor(h),
|
|
129
|
+
b = v * (1 - s),
|
|
130
|
+
c = v * (1 - (h - hh) * s),
|
|
131
|
+
d = v * (1 - (1 - h + hh) * s),
|
|
132
|
+
module = hh % 6;
|
|
133
|
+
return {
|
|
134
|
+
r: round([v, c, b, b, d, v][module] * 255),
|
|
135
|
+
g: round([d, v, v, c, b, b][module] * 255),
|
|
136
|
+
b: round([b, b, d, v, v, c][module] * 255),
|
|
137
|
+
a: round(a, 2)
|
|
138
|
+
};
|
|
139
|
+
};
|
|
140
|
+
export const hsvaToRgbString = hsva => {
|
|
141
|
+
const {
|
|
142
|
+
r,
|
|
143
|
+
g,
|
|
144
|
+
b
|
|
145
|
+
} = hsvaToRgba(hsva);
|
|
146
|
+
return `rgb(${r}, ${g}, ${b})`;
|
|
147
|
+
};
|
|
148
|
+
export const hsvaToRgbaString = hsva => {
|
|
149
|
+
const {
|
|
150
|
+
r,
|
|
151
|
+
g,
|
|
152
|
+
b,
|
|
153
|
+
a
|
|
154
|
+
} = hsvaToRgba(hsva);
|
|
155
|
+
return `rgba(${r}, ${g}, ${b}, ${a})`;
|
|
156
|
+
};
|
|
157
|
+
export const hsvaStringToHsva = hsvString => {
|
|
158
|
+
const matcher = /hsva?\(?\s*(-?\d*\.?\d+)(deg|rad|grad|turn)?[,\s]+(-?\d*\.?\d+)%?[,\s]+(-?\d*\.?\d+)%?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i;
|
|
159
|
+
const match = matcher.exec(hsvString);
|
|
160
|
+
if (!match) return {
|
|
161
|
+
h: 0,
|
|
162
|
+
s: 0,
|
|
163
|
+
v: 0,
|
|
164
|
+
a: 1
|
|
165
|
+
};
|
|
166
|
+
return roundHsva({
|
|
167
|
+
h: parseHue(match[1], match[2]),
|
|
168
|
+
s: Number(match[3]),
|
|
169
|
+
v: Number(match[4]),
|
|
170
|
+
a: match[5] === undefined ? 1 : Number(match[5]) / (match[6] ? 100 : 1)
|
|
171
|
+
});
|
|
172
|
+
};
|
|
173
|
+
export const hsvStringToHsva = hsvaStringToHsva;
|
|
174
|
+
export const rgbaStringToHsva = rgbaString => {
|
|
175
|
+
return rgbaToHsva(rgbaStringToRgba(rgbaString));
|
|
176
|
+
};
|
|
177
|
+
export const rgbaStringToRgba = rgbaString => {
|
|
178
|
+
const matcher = /rgba?\(?\s*(-?\d*\.?\d+)(%)?[,\s]+(-?\d*\.?\d+)(%)?[,\s]+(-?\d*\.?\d+)(%)?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i;
|
|
179
|
+
const match = matcher.exec(rgbaString);
|
|
180
|
+
if (!match) return {
|
|
181
|
+
r: 0,
|
|
182
|
+
g: 0,
|
|
183
|
+
b: 0,
|
|
184
|
+
a: 1
|
|
185
|
+
};
|
|
186
|
+
return {
|
|
187
|
+
r: Number(match[1]) / (match[2] ? 100 / 255 : 1),
|
|
188
|
+
g: Number(match[3]) / (match[4] ? 100 / 255 : 1),
|
|
189
|
+
b: Number(match[5]) / (match[6] ? 100 / 255 : 1),
|
|
190
|
+
a: match[7] === undefined ? 1 : Number(match[7]) / (match[8] ? 100 : 1)
|
|
191
|
+
};
|
|
192
|
+
};
|
|
193
|
+
export const rgbStringToRgba = rgbaStringToRgba;
|
|
194
|
+
export const rgbStringToHsva = rgbaStringToHsva;
|
|
195
|
+
const format = number => {
|
|
196
|
+
const hex = number.toString(16);
|
|
197
|
+
return hex.length < 2 ? "0" + hex : hex;
|
|
198
|
+
};
|
|
199
|
+
export const rgbaToHex = _ref4 => {
|
|
200
|
+
let {
|
|
201
|
+
r,
|
|
202
|
+
g,
|
|
203
|
+
b,
|
|
204
|
+
a
|
|
205
|
+
} = _ref4;
|
|
206
|
+
const percentToHex = p => {
|
|
207
|
+
//const percent = Math.max(0, Math.min(100, p)); // bound percent from 0 to 100
|
|
208
|
+
const intValue = Math.round(p / 100 * 255); // map percent to nearest integer (0 - 255)
|
|
209
|
+
const hexValue = intValue.toString(16); // get hexadecimal representation
|
|
210
|
+
return hexValue.padStart(2, '0').toLowerCase(); // format with leading 0 and upper case characters
|
|
211
|
+
};
|
|
212
|
+
if (a === undefined || a === 1) {
|
|
213
|
+
return "#" + format(r) + format(g) + format(b);
|
|
214
|
+
} else {
|
|
215
|
+
return "#" + format(r) + format(g) + format(b) + percentToHex(a * 100);
|
|
216
|
+
}
|
|
217
|
+
};
|
|
218
|
+
export const rgbaToHsva = _ref5 => {
|
|
219
|
+
let {
|
|
220
|
+
r,
|
|
221
|
+
g,
|
|
222
|
+
b,
|
|
223
|
+
a
|
|
224
|
+
} = _ref5;
|
|
225
|
+
const max = Math.max(r, g, b);
|
|
226
|
+
const delta = max - Math.min(r, g, b);
|
|
227
|
+
// prettier-ignore
|
|
228
|
+
const hh = delta ? max === r ? (g - b) / delta : max === g ? 2 + (b - r) / delta : 4 + (r - g) / delta : 0;
|
|
229
|
+
return {
|
|
230
|
+
h: round(60 * (hh < 0 ? hh + 6 : hh)),
|
|
231
|
+
s: round(max ? delta / max * 100 : 0),
|
|
232
|
+
v: round(max / 255 * 100),
|
|
233
|
+
a
|
|
234
|
+
};
|
|
235
|
+
};
|
|
236
|
+
export const roundHsva = hsva => ({
|
|
237
|
+
h: round(hsva.h),
|
|
238
|
+
s: round(hsva.s),
|
|
239
|
+
v: round(hsva.v),
|
|
240
|
+
a: round(hsva.a, 2)
|
|
241
|
+
});
|
|
242
|
+
export const rgbaToRgb = _ref6 => {
|
|
243
|
+
let {
|
|
244
|
+
r,
|
|
245
|
+
g,
|
|
246
|
+
b
|
|
247
|
+
} = _ref6;
|
|
248
|
+
return {
|
|
249
|
+
r,
|
|
250
|
+
g,
|
|
251
|
+
b
|
|
252
|
+
};
|
|
253
|
+
};
|
|
254
|
+
export const hslaToHsl = _ref7 => {
|
|
255
|
+
let {
|
|
256
|
+
h,
|
|
257
|
+
s,
|
|
258
|
+
l
|
|
259
|
+
} = _ref7;
|
|
260
|
+
return {
|
|
261
|
+
h,
|
|
262
|
+
s,
|
|
263
|
+
l
|
|
264
|
+
};
|
|
265
|
+
};
|
|
266
|
+
export const hsvaToHsv = hsva => {
|
|
267
|
+
const {
|
|
268
|
+
h,
|
|
269
|
+
s,
|
|
270
|
+
v
|
|
271
|
+
} = roundHsva(hsva);
|
|
272
|
+
return {
|
|
273
|
+
h,
|
|
274
|
+
s,
|
|
275
|
+
v
|
|
276
|
+
};
|
|
277
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const round: (number: number, digits?: number, base?: number) => number;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export const round = function (number) {
|
|
2
|
+
let digits = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
|
3
|
+
let base = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Math.pow(10, digits);
|
|
4
|
+
return Math.round(base * number) / base;
|
|
5
|
+
};
|