/** * WordPress dependencies */ import React from "react"; import { useBlockEditContext, __experimentalBorderRadiusControl as BorderRadiusControl, } from "@wordpress/block-editor"; import { useSelect, useDispatch } from "@wordpress/data"; import { BaseControl, __experimentalBorderBoxControl as BorderBoxControl, __experimentalToolsPanelItem as ToolsPanelItem, } from "@wordpress/components"; /** * Internal dependencies */ import { BorderControlWithToolsPanelProps } from "./types"; import { splitBorderRadius } from "./utils/styling-helpers"; /** * Border control component with ToolsPanel integration * Each sub-control (border + border radius) is wrapped in its own ToolsPanelItem */ const BorderControlWithToolsPanel: React.FC< BorderControlWithToolsPanelProps > = ({ borderLabel, attrBorderKey, borderRadiusLabel, attrBorderRadiusKey, isShowBorder = true, isShowBorderRadius = true, showDefaultBorder = false, showDefaultBorderRadius = false, }) => { const { clientId } = useBlockEditContext(); const attributes = useSelect((select) => select("core/block-editor").getBlockAttributes(clientId), ) as Record; const { updateBlockAttributes } = useDispatch("core/block-editor") as any; const setAttributes = (newAttributes: Record) => { updateBlockAttributes(clientId, newAttributes); }; const { defaultColors } = useSelect((select) => { return { defaultColors: select("core/block-editor")?.getSettings()?.__experimentalFeatures ?.color?.palette?.default, }; }) as { defaultColors: any }; return ( <> {isShowBorder && ( attributes[attrBorderKey] != null && Object.keys(attributes[attrBorderKey] || {}).length > 0 } onDeselect={() => setAttributes({ [attrBorderKey]: {} })} resetAllFilter={() => setAttributes({ [attrBorderKey]: {} })} > { setAttributes({ [attrBorderKey]: newBorder }); }} value={attributes[attrBorderKey]} /> )} {isShowBorderRadius && ( attributes[attrBorderRadiusKey] != null && Object.keys(attributes[attrBorderRadiusKey] || {}).length > 0 } onDeselect={() => setAttributes({ [attrBorderRadiusKey]: {} })} resetAllFilter={() => setAttributes({ [attrBorderRadiusKey]: {} })} > {borderRadiusLabel}
{ const splitted = splitBorderRadius(newBorderRadius); setAttributes({ [attrBorderRadiusKey]: splitted }); }} />
)} ); }; export default BorderControlWithToolsPanel;