UNPKG

@wordpress/block-library

Version:
122 lines (114 loc) 2.8 kB
/** * External dependencies */ import clsx from 'clsx'; /** * WordPress dependencies */ import { InnerBlocks, useBlockProps } from '@wordpress/block-editor'; /** * The specific handling by `className` below is needed because `itemsJustification` * was introduced in https://github.com/WordPress/gutenberg/pull/28980/files and wasn't * declared in block.json. * * @param {Object} attributes Block's attributes. */ const migrateWithLayout = ( attributes ) => { if ( !! attributes.layout ) { return attributes; } const { className } = attributes; // Matches classes with `items-justified-` prefix. const prefix = `items-justified-`; const justifiedItemsRegex = new RegExp( `\\b${ prefix }[^ ]*[ ]?\\b`, 'g' ); const newAttributes = { ...attributes, className: className?.replace( justifiedItemsRegex, '' ).trim(), }; /** * Add `layout` prop only if `justifyContent` is defined, for backwards * compatibility. In other cases the block's default layout will be used. * Also noting that due to the missing attribute, it's possible for a block * to have more than one of `justified` classes. */ const justifyContent = className ?.match( justifiedItemsRegex )?.[ 0 ] ?.trim(); if ( justifyContent ) { Object.assign( newAttributes, { layout: { type: 'flex', justifyContent: justifyContent.slice( prefix.length ), }, } ); } return newAttributes; }; // Social Links block deprecations. const deprecated = [ // V1. Remove CSS variable use for colors. { attributes: { iconColor: { type: 'string', }, customIconColor: { type: 'string', }, iconColorValue: { type: 'string', }, iconBackgroundColor: { type: 'string', }, customIconBackgroundColor: { type: 'string', }, iconBackgroundColorValue: { type: 'string', }, openInNewTab: { type: 'boolean', default: false, }, size: { type: 'string', }, }, providesContext: { openInNewTab: 'openInNewTab', }, supports: { align: [ 'left', 'center', 'right' ], anchor: true, }, migrate: migrateWithLayout, save: ( props ) => { const { attributes: { iconBackgroundColorValue, iconColorValue, itemsJustification, size, }, } = props; const className = clsx( size, { 'has-icon-color': iconColorValue, 'has-icon-background-color': iconBackgroundColorValue, [ `items-justified-${ itemsJustification }` ]: itemsJustification, } ); const style = { '--wp--social-links--icon-color': iconColorValue, '--wp--social-links--icon-background-color': iconBackgroundColorValue, }; return ( <ul { ...useBlockProps.save( { className, style } ) }> <InnerBlocks.Content /> </ul> ); }, }, ]; export default deprecated;