@@ -16,26 +16,39 @@ const PALETTES = {
1616
1717interface SubpaletteEditorProps {
1818 name : keyof PaletteOptions ;
19- manual : Array < string > ;
20- derived : Array < keyof SimplePaletteColorOptions > ;
19+ manual ? : Array < string > ;
20+ derived ? : Array < keyof SimplePaletteColorOptions > ;
2121}
2222
23- export const SubpaletteEditor = ( { name, manual, derived } : SubpaletteEditorProps ) => {
23+ export const SubpaletteEditor = ( { name, manual = [ ] , derived = [ ] } : SubpaletteEditorProps ) => {
2424 const { theme, themeOptions, mergeThemeOptions, deleteThemeOptionKey } = useInnerTheme ( ) ;
2525 const mode = theme . palette . mode ;
2626 const [ showDerived , setShowDerived ] = useState ( false ) ;
2727
28- return (
29- < FieldGroupContainer
30- title = { name }
31- actions = {
32- derived . length > 0 ? (
33- < Button size = "small" color = "secondary" sx = { { p : 0 } } onClick = { ( ) => setShowDerived ( ( prev ) => ! prev ) } >
34- { showDerived ? "Hide derived" : "See derived" }
35- </ Button >
36- ) : undefined
28+ const derivedToggleButton = (
29+ < Button size = "small" color = "secondary" sx = { { p : 0 } } onClick = { ( ) => setShowDerived ( ( prev ) => ! prev ) } >
30+ { showDerived ? "Hide derived" : "See derived" }
31+ </ Button >
32+ ) ;
33+
34+ // Removing this teranry would result in us calling `toStandardHex` on an object
35+ const keylessColorPicker = ! manual . length ? (
36+ < ColorPicker
37+ isDefault = { theme . palette [ name ] === PALETTES [ mode ] [ name ] }
38+ value = { toStandardHex ( theme . palette [ name ] ) }
39+ onChange = { ( hex ) =>
40+ mergeThemeOptions ( {
41+ palette : { [ name ] : hex } ,
42+ } )
3743 }
38- >
44+ onReset = { ( ) => {
45+ deleteThemeOptionKey ( [ "palette" , name ] ) ;
46+ } }
47+ />
48+ ) : undefined ;
49+
50+ return (
51+ < FieldGroupContainer title = { name } actions = { derived . length > 0 ? derivedToggleButton : keylessColorPicker } >
3952 { manual . map ( ( key ) => (
4053 < ColorPicker
4154 title = { key }
@@ -49,8 +62,8 @@ export const SubpaletteEditor = ({ name, manual, derived }: SubpaletteEditorProp
4962 }
5063 onReset = { ( ) => {
5164 const customColorsObject = themeOptions ?. palette ?. [ name ] ?? { } ;
52- // This might be a string, e.g. for "divider". Handle this later.
5365 if ( typeof customColorsObject !== "object" ) return ;
66+
5467 // If there are any custom derived colours, the manual color cannot be deleted
5568 if ( derived . some ( ( key ) => key in customColorsObject ) ) {
5669 mergeThemeOptions ( {
0 commit comments