import classnames from 'classnames/dedupe'; import { RichText, useBlockProps } from '@wordpress/block-editor'; import { applyFilters } from '@wordpress/hooks'; import IconPicker from '../../components/icon-picker'; import metadata from './block.json'; const { name } = metadata; export default [ // v2.23.2 { ...metadata, attributes: { tagName: { type: 'string', }, url: { type: 'string', source: 'attribute', selector: 'a.ghostkit-button', attribute: 'href', }, target: { type: 'string', source: 'attribute', selector: 'a.ghostkit-button', attribute: 'target', }, rel: { type: 'string', source: 'attribute', selector: 'a.ghostkit-button', attribute: 'rel', }, text: { type: 'string', source: 'html', selector: '.ghostkit-button .ghostkit-button-text', default: 'Button', }, hideText: { type: 'boolean', default: false, }, icon: { type: 'string', default: '', }, iconPosition: { type: 'string', default: 'left', }, size: { type: 'string', default: 'md', }, color: { type: 'string', }, textColor: { type: 'string', }, borderRadius: { type: 'number', }, borderWeight: { type: 'number', }, borderColor: { type: 'string', }, focusOutlineWeight: { type: 'number', }, hoverColor: { type: 'string', }, hoverTextColor: { type: 'string', }, hoverBorderColor: { type: 'string', }, focusOutlineColor: { type: 'string', default: 'rgba(3, 102, 214, 0.5)', }, }, save: function BlockSave(props) { const { tagName, text, icon, iconPosition, hideText, url, target, rel, size, focusOutlineWeight, focusOutlineColor, } = props.attributes; let className = classnames( 'ghostkit-button', size && `ghostkit-button-${size}`, hideText && 'ghostkit-button-icon-only' ); // focus outline if (focusOutlineWeight && focusOutlineColor) { className = classnames( className, 'ghostkit-button-with-outline' ); } className = applyFilters('ghostkit.blocks.className', className, { name, ...props, }); const result = []; if (!hideText) { result.push( ); } // add icon. if (icon) { result.unshift( ); } const Tag = tagName || (url ? 'a' : 'span'); const blockProps = useBlockProps.save({ className, ...(Tag === 'a' ? { href: url, target: target || false, rel: rel || false, } : {}), }); return {result}; }, }, ];