ish-ui 1.3.7 → 1.3.9
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/dist/colorPicker/ColorPicker.js +89 -54
- package/package.json +1 -1
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
9
9
|
import ButtonBase from '@mui/material/ButtonBase';
|
|
10
10
|
import Popper from '@mui/material/Popper';
|
|
11
|
-
import { AlphaPicker, HuePicker } from 'react-color';
|
|
11
|
+
import { AlphaPicker, HuePicker, MaterialPicker } from 'react-color';
|
|
12
12
|
import { ClickAwayListener } from '@mui/material';
|
|
13
13
|
import Paper from '@mui/material/Paper';
|
|
14
14
|
import Grow from '@mui/material/Grow';
|
|
@@ -20,41 +20,7 @@ const useStyles = makeAppStyles()(({ spacing, palette, zIndex, transitions }, p,
|
|
|
20
20
|
width: 200,
|
|
21
21
|
padding: spacing(2),
|
|
22
22
|
position: 'relative',
|
|
23
|
-
|
|
24
|
-
background: palette.background.paper,
|
|
25
|
-
'&:after': {
|
|
26
|
-
bottom: '0px',
|
|
27
|
-
left: '50%',
|
|
28
|
-
width: '22px',
|
|
29
|
-
height: '10px',
|
|
30
|
-
position: 'absolute',
|
|
31
|
-
transform: 'translateX(-50%)',
|
|
32
|
-
background: palette.background.paper,
|
|
33
|
-
content: '\'\'',
|
|
34
|
-
zIndex: 1
|
|
35
|
-
},
|
|
36
|
-
'&:before': {
|
|
37
|
-
content: '\'\'',
|
|
38
|
-
bottom: '-6px',
|
|
39
|
-
left: '50%',
|
|
40
|
-
width: '12px',
|
|
41
|
-
height: '12px',
|
|
42
|
-
position: 'absolute',
|
|
43
|
-
transform: 'translateX(-50%) rotate(45deg)',
|
|
44
|
-
background: palette.background.paper,
|
|
45
|
-
boxShadow: '1px 1px 2px 0px rgba(0,0,0,0.2), 2px 1px 2px -1px rgba(0,0,0,0.12), 1px 1px 1px 0px rgba(0,0,0,0.12);'
|
|
46
|
-
}
|
|
47
|
-
},
|
|
48
|
-
paperPlaceBottom: {
|
|
49
|
-
marginTop: spacing(3),
|
|
50
|
-
'&:after': {
|
|
51
|
-
bottom: 'unset',
|
|
52
|
-
top: '0px'
|
|
53
|
-
},
|
|
54
|
-
'&:before': {
|
|
55
|
-
bottom: 'unset',
|
|
56
|
-
top: '-6px',
|
|
57
|
-
}
|
|
23
|
+
background: palette.background.paper
|
|
58
24
|
},
|
|
59
25
|
colorPickerButton: {
|
|
60
26
|
width: '14px',
|
|
@@ -71,7 +37,59 @@ const useStyles = makeAppStyles()(({ spacing, palette, zIndex, transitions }, p,
|
|
|
71
37
|
}
|
|
72
38
|
},
|
|
73
39
|
popper: {
|
|
74
|
-
zIndex: zIndex.tooltip
|
|
40
|
+
zIndex: zIndex.tooltip,
|
|
41
|
+
[`&[data-popper-placement*="bottom"] .${classes.arrow}`]: {
|
|
42
|
+
top: 0,
|
|
43
|
+
marginTop: '-0.71em',
|
|
44
|
+
'&::before': {
|
|
45
|
+
transformOrigin: '0 100%'
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
[`&[data-popper-placement*="top"] .${classes.arrow}`]: {
|
|
49
|
+
bottom: 0,
|
|
50
|
+
marginBottom: '-0.71em',
|
|
51
|
+
'&::before': {
|
|
52
|
+
transformOrigin: '100% 0'
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
[`&[data-popper-placement*="right"] .${classes.arrow}`]: {
|
|
56
|
+
left: 0,
|
|
57
|
+
marginLeft: '-0.71em',
|
|
58
|
+
width: '0.71em',
|
|
59
|
+
height: '1em',
|
|
60
|
+
'&::before': {
|
|
61
|
+
transformOrigin: '100% 100%'
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
[`&[data-popper-placement*="left"] .${classes.arrow}`]: {
|
|
65
|
+
right: 0,
|
|
66
|
+
marginRight: '-0.71em',
|
|
67
|
+
width: '0.71em',
|
|
68
|
+
height: '1em',
|
|
69
|
+
'&::before': {
|
|
70
|
+
transformOrigin: '0 0'
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
// Positioned by Popper's `arrow` modifier; a rotated square clipped to a
|
|
75
|
+
// triangle by the overflow, so it follows the paper on every placement.
|
|
76
|
+
arrow: {
|
|
77
|
+
position: 'absolute',
|
|
78
|
+
overflow: 'hidden',
|
|
79
|
+
boxSizing: 'border-box',
|
|
80
|
+
fontSize: 12,
|
|
81
|
+
width: '1em',
|
|
82
|
+
height: '0.71em', // = width / sqrt(2)
|
|
83
|
+
color: palette.background.paper,
|
|
84
|
+
'&::before': {
|
|
85
|
+
content: '""',
|
|
86
|
+
display: 'block',
|
|
87
|
+
margin: 'auto',
|
|
88
|
+
width: '100%',
|
|
89
|
+
height: '100%',
|
|
90
|
+
backgroundColor: 'currentColor',
|
|
91
|
+
transform: 'rotate(45deg)'
|
|
92
|
+
}
|
|
75
93
|
},
|
|
76
94
|
bottomOffset: {
|
|
77
95
|
marginBottom: spacing(1.25)
|
|
@@ -81,23 +99,33 @@ const useStyles = makeAppStyles()(({ spacing, palette, zIndex, transitions }, p,
|
|
|
81
99
|
background: 'none !important'
|
|
82
100
|
}
|
|
83
101
|
},
|
|
84
|
-
opened: {}
|
|
102
|
+
opened: {},
|
|
103
|
+
material: {
|
|
104
|
+
'& > div > div': {
|
|
105
|
+
boxShadow: 'none !important'
|
|
106
|
+
}
|
|
107
|
+
}
|
|
85
108
|
}));
|
|
86
|
-
|
|
87
|
-
|
|
109
|
+
// Gap between the anchor and the paper, leaving room for the arrow.
|
|
110
|
+
const popperModifiers = [{ name: 'offset', options: { offset: [0, 12] } }];
|
|
111
|
+
const ColorPickerBase = React.memo(({ color, input: { value, onChange }, TransitionProps, setAnchorEl }) => {
|
|
112
|
+
const { classes } = useStyles();
|
|
88
113
|
const [hueColor, setHueColor] = useState(color);
|
|
89
114
|
const [alfaColor, setAlfaColor] = useState(color);
|
|
90
115
|
const hueRef = useRef(undefined);
|
|
91
|
-
const
|
|
92
|
-
setHueColor(color.hsv);
|
|
93
|
-
setAlfaColor(color.hsv);
|
|
94
|
-
}, []);
|
|
95
|
-
const onAlfaChange = useCallback(color => {
|
|
116
|
+
const onColorChange = useCallback(color => {
|
|
96
117
|
setHueColor({
|
|
97
118
|
h: color.hsv.h, s: color.hsv.a, v: color.hsv.v, a: 1
|
|
98
119
|
});
|
|
99
120
|
setAlfaColor(color.hsv);
|
|
100
121
|
}, []);
|
|
122
|
+
const onChangeComplete = (color) => {
|
|
123
|
+
var _a, _b;
|
|
124
|
+
const hex = ((_b = (_a = hueRef.current) === null || _a === void 0 ? void 0 : _a.state) === null || _b === void 0 ? void 0 : _b.hex) || (color === null || color === void 0 ? void 0 : color.hex);
|
|
125
|
+
if (hex) {
|
|
126
|
+
onChange(hex.replace('#', ''));
|
|
127
|
+
}
|
|
128
|
+
};
|
|
101
129
|
const handleClickAway = useCallback(() => {
|
|
102
130
|
setAnchorEl(null);
|
|
103
131
|
}, []);
|
|
@@ -107,20 +135,27 @@ const ColorPickerBase = React.memo(({ color, input: { value, onChange }, Transit
|
|
|
107
135
|
}
|
|
108
136
|
}, [value, hueColor]);
|
|
109
137
|
useEffect(() => {
|
|
110
|
-
|
|
138
|
+
var _a, _b;
|
|
139
|
+
const hueHsv = (_b = (_a = hueRef.current) === null || _a === void 0 ? void 0 : _a.state) === null || _b === void 0 ? void 0 : _b.hsv;
|
|
140
|
+
if (!hueHsv) {
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
111
143
|
setAlfaColor({
|
|
112
144
|
h: hueHsv.h, s: 1, v: hueHsv.v, a: hueHsv.s
|
|
113
145
|
});
|
|
114
146
|
}, [hueRef.current]);
|
|
115
|
-
const onChangeComplete = () => {
|
|
116
|
-
onChange(hueRef.current.state.hex.replace('#', ''));
|
|
117
|
-
};
|
|
118
147
|
return (React.createElement(ClickAwayListener, { onClickAway: handleClickAway },
|
|
119
148
|
React.createElement(Grow, Object.assign({}, TransitionProps, { timeout: 200 }),
|
|
120
|
-
React.createElement(
|
|
121
|
-
React.createElement(
|
|
122
|
-
|
|
123
|
-
|
|
149
|
+
React.createElement(Paper, { className: classes.paper },
|
|
150
|
+
React.createElement("span", { className: classes.arrow, "data-popper-arrow": true }),
|
|
151
|
+
React.createElement(HuePicker, { ref: hueRef, color: hueColor, onChange: onColorChange, onChangeComplete: onChangeComplete, width: "168", className: classes.bottomOffset }),
|
|
152
|
+
React.createElement(AlphaPicker, { className: classes.customAlfa, color: alfaColor, width: "168", onChange: onColorChange, onChangeComplete: onChangeComplete }),
|
|
153
|
+
React.createElement("div", { className: classes.material },
|
|
154
|
+
React.createElement(MaterialPicker, { styles: {
|
|
155
|
+
default: {
|
|
156
|
+
material: { width: '100%', height: 'unset', padding: 0, fontFamily: 'inherit' }
|
|
157
|
+
}
|
|
158
|
+
}, color: hueColor, onChange: onColorChange, onChangeComplete: onChangeComplete }))))));
|
|
124
159
|
});
|
|
125
160
|
const ColorPickerWrapper = React.memo(({ input, placement = 'top', width }) => {
|
|
126
161
|
const { classes, cx } = useStyles();
|
|
@@ -132,6 +167,6 @@ const ColorPickerWrapper = React.memo(({ input, placement = 'top', width }) => {
|
|
|
132
167
|
const color = useMemo(() => (input.value ? '#' + input.value : theme.palette.primary.main), [theme, input.value]);
|
|
133
168
|
return (React.createElement("div", { className: "d-flex", onClick: stopEventPropagation },
|
|
134
169
|
React.createElement(ButtonBase, { onClick: handleClick, className: cx(classes.colorPickerButton, anchorEl && classes.opened), style: { backgroundColor: color, width, height: width } }),
|
|
135
|
-
React.createElement(Popper, { open: Boolean(anchorEl), anchorEl: anchorEl, placement: placement, className: classes.popper, transition: true }, ({ TransitionProps }) =>
|
|
170
|
+
React.createElement(Popper, { open: Boolean(anchorEl), anchorEl: anchorEl, placement: placement, className: classes.popper, modifiers: popperModifiers, transition: true }, ({ TransitionProps }) => React.createElement(ColorPickerBase, { color: color, input: input, TransitionProps: TransitionProps, setAnchorEl: setAnchorEl }))));
|
|
136
171
|
});
|
|
137
172
|
export default ColorPickerWrapper;
|