@@ -18,11 +18,30 @@ import {
18
18
import Swatch , { PresetColor } from './Swatch' ;
19
19
import { useEffect } from 'react' ;
20
20
21
+ const PRESET_COLORS = [
22
+ '#D0021B' ,
23
+ '#F5A623' ,
24
+ '#f8e61b' ,
25
+ '#8B572A' ,
26
+ '#7ED321' ,
27
+ '#417505' ,
28
+ '#BD10E0' ,
29
+ '#9013FE' ,
30
+ '#4A90E2' ,
31
+ '#50E3C2' ,
32
+ '#B8E986' ,
33
+ '#000000' ,
34
+ '#4A4A4A' ,
35
+ '#9B9B9B' ,
36
+ '#FFFFFF' ,
37
+ ] ;
38
+
21
39
export interface SketchProps extends Omit < React . HTMLAttributes < HTMLDivElement > , 'onChange' | 'color' > {
22
40
prefixCls ?: string ;
23
41
width ?: number ;
24
42
color ?: string | HsvaColor ;
25
- presetColors ?: PresetColor [ ] ;
43
+ presetColors ?: false | PresetColor [ ] ;
44
+ editableDisable ?: boolean ;
26
45
onChange ?: ( newShade : ColorResult ) => void ;
27
46
}
28
47
@@ -42,7 +61,17 @@ const Bar = (props: PointerProps) => (
42
61
) ;
43
62
44
63
export default React . forwardRef < HTMLDivElement , SketchProps > ( ( props , ref ) => {
45
- const { prefixCls = 'w-color-sketch' , className, onChange, width = 218 , presetColors, color, style, ...other } = props ;
64
+ const {
65
+ prefixCls = 'w-color-sketch' ,
66
+ className,
67
+ onChange,
68
+ width = 218 ,
69
+ presetColors = PRESET_COLORS ,
70
+ color,
71
+ editableDisable = true ,
72
+ style,
73
+ ...other
74
+ } = props ;
46
75
const [ hsva , setHsva ] = useState ( { h : 209 , s : 36 , v : 90 , a : 1 } ) ;
47
76
useEffect ( ( ) => {
48
77
if ( typeof color === 'string' && validHex ( color ) ) {
@@ -165,69 +194,73 @@ export default React.forwardRef<HTMLDivElement, SketchProps>((props, ref) => {
165
194
/>
166
195
</ div >
167
196
</ div >
168
- < div style = { { display : 'flex' , margin : '0 10px 3px 10px' } } >
169
- < EditableInput
170
- label = "Hex"
171
- value = { hsvaToHex ( hsva ) . replace ( / ^ # / , '' ) . toLocaleUpperCase ( ) }
172
- onChange = { ( evn , val ) => handleRGBA ( val , 'hex' , evn ) }
173
- style = { {
174
- flexDirection : 'column' ,
175
- flex : '2 1 0%' ,
176
- } }
177
- />
178
- < EditableInput
179
- label = "R"
180
- value = { rgba . r }
181
- onBlur = { handleBlur }
182
- onChange = { ( evn , val ) => handleRGBA ( val , 'r' , evn ) }
183
- style = { {
184
- flexDirection : 'column' ,
185
- flex : '1 1 0%' ,
186
- marginLeft : 6 ,
187
- } }
188
- />
189
- < EditableInput
190
- label = "G"
191
- value = { rgba . g }
192
- onBlur = { handleBlur }
193
- onChange = { ( evn , val ) => handleRGBA ( val , 'g' , evn ) }
194
- style = { {
195
- flexDirection : 'column' ,
196
- flex : '1 1 0%' ,
197
- marginLeft : 6 ,
198
- } }
199
- />
200
- < EditableInput
201
- label = "B"
202
- value = { rgba . b }
203
- onBlur = { handleBlur }
204
- onChange = { ( evn , val ) => handleRGBA ( val , 'b' , evn ) }
205
- style = { {
206
- flexDirection : 'column' ,
207
- flex : '1 1 0%' ,
208
- marginLeft : 6 ,
209
- } }
210
- />
211
- < EditableInput
212
- label = "A"
213
- value = { parseInt ( String ( rgba . a * 100 ) , 10 ) }
214
- onBlur = { ( evn ) => {
215
- if ( Number ( evn . target . value ) > 100 ) {
216
- evn . target . value = '100' ;
217
- }
218
- if ( Number ( evn . target . value ) < 1 ) {
219
- evn . target . value = '0' ;
220
- }
221
- } }
222
- onChange = { ( evn , val ) => handleRGBA ( val , 'a' , evn ) }
223
- style = { {
224
- flexDirection : 'column' ,
225
- flex : '1 1 0%' ,
226
- marginLeft : 6 ,
227
- } }
228
- />
229
- </ div >
230
- < Swatch colors = { presetColors } color = { hsvaToHex ( hsva ) } onClick = { ( hsva ) => handleChange ( hsva ) } />
197
+ { editableDisable && (
198
+ < div style = { { display : 'flex' , margin : '0 10px 3px 10px' } } >
199
+ < EditableInput
200
+ label = "Hex"
201
+ value = { hsvaToHex ( hsva ) . replace ( / ^ # / , '' ) . toLocaleUpperCase ( ) }
202
+ onChange = { ( evn , val ) => handleRGBA ( val , 'hex' , evn ) }
203
+ style = { {
204
+ flexDirection : 'column' ,
205
+ flex : '2 1 0%' ,
206
+ } }
207
+ />
208
+ < EditableInput
209
+ label = "R"
210
+ value = { rgba . r }
211
+ onBlur = { handleBlur }
212
+ onChange = { ( evn , val ) => handleRGBA ( val , 'r' , evn ) }
213
+ style = { {
214
+ flexDirection : 'column' ,
215
+ flex : '1 1 0%' ,
216
+ marginLeft : 6 ,
217
+ } }
218
+ />
219
+ < EditableInput
220
+ label = "G"
221
+ value = { rgba . g }
222
+ onBlur = { handleBlur }
223
+ onChange = { ( evn , val ) => handleRGBA ( val , 'g' , evn ) }
224
+ style = { {
225
+ flexDirection : 'column' ,
226
+ flex : '1 1 0%' ,
227
+ marginLeft : 6 ,
228
+ } }
229
+ />
230
+ < EditableInput
231
+ label = "B"
232
+ value = { rgba . b }
233
+ onBlur = { handleBlur }
234
+ onChange = { ( evn , val ) => handleRGBA ( val , 'b' , evn ) }
235
+ style = { {
236
+ flexDirection : 'column' ,
237
+ flex : '1 1 0%' ,
238
+ marginLeft : 6 ,
239
+ } }
240
+ />
241
+ < EditableInput
242
+ label = "A"
243
+ value = { parseInt ( String ( rgba . a * 100 ) , 10 ) }
244
+ onBlur = { ( evn ) => {
245
+ if ( Number ( evn . target . value ) > 100 ) {
246
+ evn . target . value = '100' ;
247
+ }
248
+ if ( Number ( evn . target . value ) < 1 ) {
249
+ evn . target . value = '0' ;
250
+ }
251
+ } }
252
+ onChange = { ( evn , val ) => handleRGBA ( val , 'a' , evn ) }
253
+ style = { {
254
+ flexDirection : 'column' ,
255
+ flex : '1 1 0%' ,
256
+ marginLeft : 6 ,
257
+ } }
258
+ />
259
+ </ div >
260
+ ) }
261
+ { presetColors && presetColors . length > 0 && (
262
+ < Swatch colors = { presetColors } color = { hsvaToHex ( hsva ) } onClick = { ( hsva ) => handleChange ( hsva ) } />
263
+ ) }
231
264
</ div >
232
265
) ;
233
266
} ) ;
0 commit comments