import { Button, RangeControl, ButtonGroup } from '@wordpress/components'; import {useState} from '@wordpress/element'; import React from "react"; const LineHeightControl = ({attributes, setAttributes}) => { const unitOptions = ['px', 'em']; const getLineHeightUnit = () => { const lineHeight = attributes.line_height; if (lineHeight) { const match = lineHeight.match(/[a-zA-Z%]+$/); return match ? match[0] : 'px'; } return 'px'; }; const [unit, setUnit] = useState(getLineHeightUnit()); const getLineHeightValue = () => { if (attributes.line_height) { return parseFloat(attributes.line_height); } return ""; }; const handleLineHeightChange = (newSize) => { if (!newSize) { setAttributes({line_height: ''}); return; } setAttributes({line_height: `${newSize}${unit}`}); }; const handleUnitChange = (newUnit) => { setUnit(newUnit); let newSize; const currentSize = parseFloat(attributes.line_height); if (unit === 'px' && newUnit !== 'px') { newSize = (currentSize / 16).toFixed(2); } else if (unit !== 'px' && newUnit === 'px') { newSize = Math.round(currentSize * 16); } else { newSize = currentSize; } setAttributes({line_height: `${newSize}${newUnit}`}); }; return ( <div className="line-height-control"> <div className="latepoint-block-header"> <label className="latepoint-control-label">Line Height</label> <div className="latepoint-block-header-actions"> <Button className="latepoint-block-reset" onClick={() => handleLineHeightChange("")} isSmall disabled={attributes.line_height === ''} icon="dashicon dashicons dashicons-image-rotate" /> <ButtonGroup className="latepoint-unit-selector"> {unitOptions.map((option) => ( <Button key={option} isPrimary={unit === option} onClick={() => handleUnitChange(option)}> {option} </Button> ))} </ButtonGroup> </div> </div> <RangeControl value={getLineHeightValue()} onChange={handleLineHeightChange} min={unit === 'px' ? 5 : 0.3125} max={unit === 'px' ? 80 : 8} step={unit === 'px' ? 1 : 0.1} /> </div> ) }; export default LineHeightControl;