用于设置方框边框颜色、样式和宽度的输入控件。边框可以整体自定义,也可以针对方框的每一侧单独自定义。

开发指南

BorderBoxControl 实际上有两种视图状态。第一种是“链接”视图,允许通过单个 BorderControl 配置扁平边框。第二种是“拆分”视图,为每一侧包含一个 BorderControl,以及一个用于显示当前选定边框的可视化器。每个视图还包含一个按钮,用于在这两种视图之间切换。

当从“拆分”视图切换到“链接”时,如果各个侧边的边框不一致,“链接”视图将显示一致的边框属性选择,而对于不一致的属性则显示混合状态。例如,如果所有边框的颜色和样式相同但宽度不同,那么“链接”视图中 BorderControl 的边框下拉菜单将显示一致的颜色和样式,而“链接”视图中的宽度输入框将显示“Mixed”占位符文本。

用法

import { useState } from 'react';
import { BorderBoxControl } from '@wordpress/components';
import { __ } from '@wordpress/i18n';

const colors = [
    { name: 'Blue 20', color: '#72aee6' },
    // ...
];

const MyBorderBoxControl = () => {
    const defaultBorder = {
        color: '#72aee6',
        style: 'dashed',
        width: '1px',
    };
    const [ borders, setBorders ] = useState( {
        top: defaultBorder,
        right: defaultBorder,
        bottom: defaultBorder,
        left: defaultBorder,
    } );
    const onChange = ( newBorders ) => setBorders( newBorders );

    return (
        <BorderBoxControl
            colors={ colors }
            label={ __( 'Borders' ) }
            onChange={ onChange }
            value={ borders }
        />
    );
};

如果您在编辑器外部使用此组件,可以通过在元素树更上层渲染 Popover.Slot 并在整体上位于 SlotFillProvider 内,来确保 BorderBoxControl 的颜色和样式选项的 Tooltip 定位。

Props

colors: ( PaletteObject | ColorObject )[]

颜色定义数组。这也可以是一个多维数组,其中颜色按多个来源组织。

每种颜色可以是包含 name 和 color 值的对象。

  • Required: No
  • Default: []

disableCustomColors: boolean

此属性切换选择自定义颜色的能力。

  • Required: No

enableAlpha: boolean

此属性控制在选择自定义颜色时是否提供 alpha 通道。

  • Required: No
  • Default: false

enableStyle: boolean

此属性控制是否支持边框样式选择。

  • Required: No
  • Default: true

hideLabelFromVision: boolean

控制标签是否仅对屏幕阅读器可见。

  • Required: No

label: string

如果提供,将使用此内容生成标签。可见标签与链接/未链接切换按钮在同一行呈现;当没有可见标签时,切换按钮将呈现在边框输入旁边。

它是否仅对屏幕阅读器可见由 hideLabelFromVision 控制。

  • Required: No

onChange: ( value?: Object ) => void

当任何边框值更改时调用的回调函数。接收到的值可能是“扁平”边框对象(即具有定义各个侧边边框属性的对象),或者是 undefined。

注意:如果用户清除所有边框,该值将为 undefined。

  • Required: Yes

popoverPlacement: string

颜色弹出窗口相对于控件包装器的位置。

默认情况下,弹出窗口相对于启动弹出窗口的按钮显示。通过提供弹出窗口位置,您可以强制弹出窗口在特定位置显示。

可用的基本位置包括 ‘top’、‘right’、‘bottom’、‘left’。这些基本位置每种都有 -start 和 -end 形式的对齐方式。例如,‘right-start’ 或 ‘bottom-end’。这允许您将工具提示对齐到按钮的边缘,而不是居中。

  • Required: No

popoverOffset: number | { mainAxis?: number; crossAxis?: number }

弹出窗口与控件包装器之间的间距。数字沿主轴位移弹出窗口;传递对象以同时沿交叉轴位移它。

  • Required: No

value: Object

表示当前边框配置的对象。

这可能是“扁平”边框,其中对象具有 color、style 和 width 属性;也可能是“拆分”边框,其中定义了上述属性,但针对每一侧:top、right、bottom 和 left。

示例:

const flatBorder = { color: '#72aee6', style: 'solid', width: '1px' };
const splitBorders = {
    top: { color: '#72aee6', style: 'solid', width: '1px' },
    right: { color: '#e65054', style: 'dashed', width: '2px' },
    bottom: { color: '#68de7c', style: 'solid', width: '1px' },
    left: { color: '#f2d675', style: 'dotted', width: '1em' },
};
  • Required: No