forked from WordPress/gutenberg
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
94 lines (88 loc) · 2.6 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/**
* External dependencies
*/
import classnames from 'classnames';
import { map } from 'lodash';
/**
* WordPress dependencies
*/
import { __, sprintf } from '@wordpress/i18n';
/**
* Internal dependencies
*/
import Button from '../button';
import Dropdown from '../dropdown';
import Tooltip from '../tooltip';
import ColorPicker from '../color-picker';
export default function ColorPalette( { colors, disableCustomColors = false, value, onChange, className } ) {
function applyOrUnset( color ) {
return () => onChange( value === color ? undefined : color );
}
const customColorPickerLabel = __( 'Custom color picker' );
const classes = classnames( 'components-color-palette', className );
return (
<div className={ classes }>
{ map( colors, ( { color, name } ) => {
const style = { color: color };
const itemClasses = classnames( 'components-color-palette__item', { 'is-active': value === color } );
return (
<div key={ color } className="components-color-palette__item-wrapper">
<Tooltip
text={ name ||
// translators: %s: color hex code e.g: "#f00".
sprintf( __( 'Color code: %s' ), color )
}>
<button
type="button"
className={ itemClasses }
style={ style }
onClick={ applyOrUnset( color ) }
aria-label={ name ?
// translators: %s: The name of the color e.g: "vivid red".
sprintf( __( 'Color: %s' ), name ) :
// translators: %s: color hex code e.g: "#f00".
sprintf( __( 'Color code: %s' ), color ) }
aria-pressed={ value === color }
/>
</Tooltip>
</div>
);
} ) }
{ ! disableCustomColors &&
<Dropdown
className="components-color-palette__item-wrapper components-color-palette__custom-color"
contentClassName="components-color-palette__picker"
renderToggle={ ( { isOpen, onToggle } ) => (
<Tooltip text={ customColorPickerLabel }>
<button
type="button"
aria-expanded={ isOpen }
className="components-color-palette__item"
onClick={ onToggle }
aria-label={ customColorPickerLabel }
>
<span className="components-color-palette__custom-color-gradient" />
</button>
</Tooltip>
) }
renderContent={ () => (
<ColorPicker
color={ value }
onChangeComplete={ ( color ) => onChange( color.hex ) }
disableAlpha
/>
) }
/>
}
<Button
className="components-color-palette__clear"
type="button"
onClick={ () => onChange( undefined ) }
isSmall
isDefault
>
{ __( 'Clear' ) }
</Button>
</div>
);
}