UNPKG

@wordpress/block-editor

Version:
113 lines (97 loc) 2.98 kB
export const isValuePreset = ( value, slug ) => { if ( ! value?.includes ) { return false; } return value === '0' || value.includes( `var:preset|${ slug }|` ); }; /** * Returns the slug section of the given preset string. * * @param {string} value Value to extract slug from. * @param {string} presetType Preset type slug. * * @return {string|undefined} The value slug from given preset. */ export function getPresetSlug( value, presetType ) { if ( ! value ) { return; } if ( value === '0' || value === 'default' ) { return value; } const slug = value.match( new RegExp( `var:preset\\|${ presetType }\\|(.+)` ) ); return slug ? slug[ 1 ] : undefined; } /** * Converts preset value into a Range component value . * * @param {string} presetValue Value to convert to Range value. * @param {Array} presets Array of current preset value objects. * @param {string} presetType Preset type slug. * * @return {number} The int value for use in Range control. */ export function getSliderValueFromPreset( presetValue, presets, presetType ) { if ( presetValue === undefined ) { return 0; } const slug = parseFloat( presetValue, 10 ) === 0 ? '0' : getPresetSlug( presetValue, presetType ); const sliderValue = presets.findIndex( ( size ) => { return String( size.slug ) === slug; } ); // Returning NaN rather than undefined as undefined makes range control thumb sit in center return sliderValue !== -1 ? sliderValue : NaN; } /** * Converts a preset into a custom value. * * @param {string} value Value to convert * @param {Array} presets Array of the current radius preset objects * @param {string} presetType Preset type slug e.g. border-radius * * @return {string} Mapping of the preset to its equivalent custom value. */ export function getCustomValueFromPreset( value, presets, presetType ) { if ( ! isValuePreset( value, presetType ) ) { return value; } const slug = parseFloat( value, 10 ) === 0 ? '0' : getPresetSlug( value, presetType ); const preset = presets.find( ( size ) => String( size.slug ) === slug ); return preset?.size; } /** * Converts a custom value to preset value if one can be found. * * Returns value as-is if no match is found. * * @param {string} value Value to convert * @param {Array} spacingSizes Array of the current spacing preset objects * @param {string} presetType Preset type slug e.g. border-radius * * @return {string} The preset value if it can be found. */ export function getPresetValueFromCustomValue( value, spacingSizes, presetType ) { // Return value as-is if it is undefined or is already a preset, or '0'; if ( ! value || isValuePreset( value, presetType ) || value === '0' ) { return value; } const spacingMatch = spacingSizes.find( ( size ) => String( size.size ) === String( value ) ); if ( spacingMatch?.slug ) { return `var:preset|${ presetType }|${ spacingMatch.slug }`; } return value; }