import { FontSizePicker, InspectorControls, useBlockEditContext, } from "@wordpress/block-editor"; import { __ } from "@wordpress/i18n"; import { ColorControl, SpacingControl } from "@tableberg/components"; import { BaseControl, PanelBody, __experimentalToolsPanel as ToolsPanel, } from "@wordpress/components"; import { textAttributeDefaults, TextElementAttributes } from "./element"; import { useTableStore } from "../../store"; import { ElementBindings } from "../../dynamic-data/types"; const hasSides = (sides: { top: string; right: string; bottom: string; left: string; }) => !!sides.top || !!sides.right || !!sides.bottom || !!sides.left; export function TextElementControls({ attributes, bindings, updateStyles: updateStylesProp, }: { attributes: TextElementAttributes; bindings?: ElementBindings; // Native block edits inject a setAttributes-based updater; store-backed // element renderers use the table-store fallback. updateStyles?: (styles: Partial) => void; }) { const storeUpdateStyles = useTableStore( state => state.updateSelectedElementStyles ); const updateStyles = updateStylesProp ?? storeUpdateStyles; const { clientId } = useBlockEditContext(); const textColorIsBound = !!bindings?.["styles.textColor"]; const linkColorIsBound = !!bindings?.["styles.linkColor"]; const backgroundColorIsBound = !!bindings?.["styles.backgroundColor"]; const fontSizeIsBound = !!bindings?.["styles.fontSize"]; return ( <> updateStyles({ textColor })} onDeselect={() => updateStyles({ textColor: textAttributeDefaults.styles.textColor, }) } /> updateStyles({ linkColor })} onDeselect={() => updateStyles({ linkColor: textAttributeDefaults.styles.linkColor, }) } /> updateStyles({ backgroundColor }) } onDeselect={() => updateStyles({ backgroundColor: textAttributeDefaults.styles.backgroundColor, }) } /> updateStyles({ fontSize: fontSize ? String(fontSize) : textAttributeDefaults.styles.fontSize, }) } /> updateStyles({ padding: { ...textAttributeDefaults.styles.padding, }, margin: { ...textAttributeDefaults.styles.margin, }, }) } > hasSides(attributes.styles.padding)} onChange={padding => updateStyles({ padding })} onDeselect={() => updateStyles({ padding: { ...textAttributeDefaults.styles.padding, }, }) } /> hasSides(attributes.styles.margin)} onChange={margin => updateStyles({ margin })} onDeselect={() => updateStyles({ margin: { ...textAttributeDefaults.styles.margin, }, }) } /> ); }