/** * WordPress dependencies */ import React from "react"; import { useDispatch, useSelect } from "@wordpress/data"; import { __ } from "@wordpress/i18n"; import { useBlockEditContext, __experimentalColorGradientSettingsDropdown as ColorGradientSettingsDropdown, __experimentalUseMultipleOriginColorsAndGradients as useMultipleOriginColorsAndGradients, } from "@wordpress/block-editor"; /** * Internal dependencies */ import { ColorSettingsWithGradientProps } from "./types"; /** * Color settings with gradient component * Provides dual control for solid color AND gradient */ const ColorSettingsWithGradient: React.FC = ({ label, attrBackgroundKey, attrGradientKey, }) => { const { clientId } = useBlockEditContext(); const { updateBlockAttributes } = useDispatch("core/block-editor") as any; const attributes = useSelect((select) => { return select("core/block-editor").getBlockAttributes(clientId); }) as Record; const setAttributes = (newAttributes: Record) => updateBlockAttributes(clientId, newAttributes); const colorGradientSettings = useMultipleOriginColorsAndGradients(); const { defaultColors, defaultGradients } = useSelect((select) => { return { defaultColors: select("core/block-editor")?.getSettings()?.__experimentalFeatures ?.color?.palette?.default, defaultGradients: select("core/block-editor")?.getSettings()?.__experimentalFeatures ?.color?.gradients?.default, }; }) as { defaultColors: any; defaultGradients: any }; // Merge default colors with theme and custom colors const mergedColors = [ ...(colorGradientSettings.colors || []), ...(defaultColors ? [ { name: "Default", slug: "default", colors: defaultColors, }, ] : []), ]; // Merge default gradients with theme gradients const mergedGradients = [ ...(colorGradientSettings.gradients || []), ...(defaultGradients ? [ { name: "Default", slug: "default", gradients: defaultGradients, }, ] : []), ]; return ( setAttributes({ [attrBackgroundKey]: newValue, }), onGradientChange: (newValue: any) => setAttributes({ [attrGradientKey]: newValue, }), }, ]} /> ); }; export default ColorSettingsWithGradient;