是什么取代了古腾堡的wpColorPicker?

时间:2021-11-03 作者:philippe_b

具有wpColorPicker 在中可用color-picker.min.js, 我能够轻松创建颜色字段,只显示颜色:

Show color

单击该字段时,将显示颜色选择器:

Change color

现在我想对古腾堡组件做同样的事情。但是,我找不到wpColorPicker:

  • ColorPicker 从…起@wordpress/components 是选择器本身,邀请用户选择颜色。它似乎没有实现;“显示”;状态这不是一个完整的表单控件
  • ColorIndicator 从…起@wordpress/components 仅显示颜色
  • ColorPalette 从…起@wordpress/components 做得太多了。使用带有空颜色集的调色板也不起作用,它不是为这个用例设计的
  • PanelColorSettingswithColors 从…起@wordpress/block-editor 甚至更高级别ColorPalette 做了我想要的,但在WordPress 5.8.1中没有这样的表现

Latest ColorPalette

有一个显而易见的方法可以完成这项工作:写一个ColorControl 组件基于ColorIndicator, ColorPickerDropdown, 或者只是从最新的ColorPalette.

但我想知道是否已经有现成的组件可用。

1 个回复
SO网友:philippe_b

我最终实现了自己的ColorControl. 我对这个解决方案不满意,我不建议你盲目地走这条路。然而,如果你想完成这项工作,又不想花两个小时在可能不像我那样存在的事情上,那就来吧。

安装两个额外的软件包:

npm install styled-components colord
代码:

import React from \'react\'

const {
  BaseControl,
  Dropdown,
  ColorPicker,
  Button
} = wp.components;

import styled from\'styled-components\';
import { colord } from \'colord\';

const DropWrapper = styled.div`
  margin-top: 8px;
`;

const ColorButton = styled(Button)`
  background-color: ${props => props.value};
  color: ${props => colord(props.value).isLight() ? \'#1e1e1e\' : \'#fff\'};
  min-width: 150px;
`;

const ColorControl = (props) => (
  <BaseControl
    label={props.label}
  >
    <DropWrapper>
      <Dropdown
        renderContent={() => (
          <ColorPicker
            color={props.value}
            onChangeComplete={color => props.onChange(color.hex)}
          />
        )}
        renderToggle={ ( { isOpen, onToggle } ) => (
          <ColorButton
            aria-expanded={ isOpen }
            aria-haspopup="true"
            onClick={ onToggle }
            aria-label={ `${props.label} color picker` }
            value={ props.value }
          >
            { props.value }
          </ColorButton>
        ) }
      />
    </DropWrapper>
  </BaseControl>
);

export default ColorControl;
字段:

My color picker

单击时:

My color picked - clicked

相关推荐