開発ガイドライン

ToolsPanel は、ドロップダウンメニューを含むヘッダーを持つコンテナを作成します。メニューは、ToolsPanelItem コンポーネントタイプに一致するパネルの子要素から自動的に生成されます。各メニュー項目は、対応する子要素の表示をオンまたはオフに切り替えることができます。コントロールの onSelect および onDeselect コールバックが発火し、ブロックサポートコントロールがオフに切り替えられたときにブロック属性をリセットするなど、子要素に対するより大きな制御が可能になります。子コントロールが初めて表示されるかどうかは、以前に値が設定されていたか、isShownByDefault プロパティを通じてデフォルトで表示されるようにフラグが立てられているかに依存します。子要素に値があるかどうかを判断するのは、子のプロパティを通じて提供される hasValue 関数によって行われます。ToolsPanelItem でラップされていないコンポーネントはまだレンダリングされますが、ToolsPanel メニュー内で表現されたり制御されたりすることはありません。この利点があるシナリオの例としては、パネル内に紹介やヘルプテキストを表示することが挙げられます。

ツールパネルレイアウト

ToolsPanel は、2列のグリッドレイアウトを持っています。デフォルトでは、パネル内の ToolsPanelItem コンポーネントは両方の列にまたがるようにスタイリングされており、これは大多数のユースケースに適しています。ヘルプテキストなどのほとんどの非コントロール要素は、関連するコントロールの ToolsPanelItem の子としてレンダリングされ、追加のスタイリングは必要ありません。要素が複数のコントロール(例:コントラストチェッカー)またはパネル自体(例:パネルの説明)に関連している場合、これらはラッピング ToolsPanelItem なしでパネルにレンダリングされます。それらはデフォルトで単一の列にしかまたがりません。これが望ましくない場合、これらの要素には小さなスタイルの調整が必要になる可能性があります。例として grid-column: 1 / -1; を挙げます。以下の使用例では、非-ToolsPanelItem 説明段落、単一行に表示されるべきコントロール、および両方の列にまたがる他のコントロールを示します。

使用法

  1. /**
  2. * External dependencies
  3. */
  4. import styled from '@emotion/styled';
  5. /**
  6. * WordPress dependencies
  7. */
  8. import {
  9. BoxControl,
  10. __experimentalToolsPanel as ToolsPanel,
  11. __experimentalToolsPanelItem as ToolsPanelItem,
  12. __experimentalUnitControl as UnitControl,
  13. } from '@wordpress/components';
  14. import { __ } from '@wordpress/i18n';
  15. const PanelDescription = styled.div`
  16. grid-column: span 2;
  17. const SingleColumnItem = styled( ToolsPanelItem )`
  18. grid-column: span 1;
  19. export function DimensionPanel() {
  20. const [ height, setHeight ] = useState();
  21. const [ width, setWidth ] = useState();
  22. const [ padding, setPadding ] = useState();
  23. const [ margin, setMargin ] = useState();
  24. const resetAll = () => {
  25. setHeight( undefined );
  26. setWidth( undefined );
  27. setPadding( undefined );
  28. setMargin( undefined );
  29. };
  30. return (
  31. <ToolsPanel label={ __( 'Dimensions' ) } resetAll={ resetAll }>
  32. <PanelDescription>
  33. Select dimensions or spacing related settings from the menu for
  34. additional controls.
  35. </PanelDescription>
  36. <SingleColumnItem
  37. hasValue={ () => !! height }
  38. label={ __( 'Height' ) }
  39. onDeselect={ () => setHeight( undefined ) }
  40. isShownByDefault
  41. >
  42. <UnitControl
  43. label={ __( 'Height' ) }
  44. onChange={ setHeight }
  45. value={ height }
  46. />
  47. </SingleColumnItem>
  48. <SingleColumnItem
  49. hasValue={ () => !! width }
  50. label={ __( 'Width' ) }
  51. onDeselect={ () => setWidth( undefined ) }
  52. isShownByDefault
  53. >
  54. <UnitControl
  55. label={ __( 'Width' ) }
  56. onChange={ setWidth }
  57. value={ width }
  58. />
  59. </SingleColumnItem>
  60. <ToolsPanelItem
  61. hasValue={ () => !! padding }
  62. label={ __( 'Padding' ) }
  63. onDeselect={ () => setPadding( undefined ) }
  64. >
  65. <BoxControl
  66. label={ __( 'Padding' ) }
  67. onChange={ setPadding }
  68. values={ padding }
  69. allowReset={ false }
  70. />
  71. </ToolsPanelItem>
  72. <ToolsPanelItem
  73. hasValue={ () => !! margin }
  74. label={ __( 'Margin' ) }
  75. onDeselect={ () => setMargin( undefined ) }
  76. >
  77. <BoxControl
  78. label={ __( 'Margin' ) }
  79. onChange={ setMargin }
  80. values={ margin }
  81. allowReset={ false }
  82. />
  83. </ToolsPanelItem>
  84. </ToolsPanel>
  85. );
  86. }

プロパティ

hasInnerWrapper: boolean

このツールパネル内のアイテムが内部ラッパー要素内に含まれることを示します。これにより、パネルはそれらを適切にレイアウトできます。

  • 必須: いいえ
  • デフォルト: false

dropdownMenuProps: {}

パネルの DropdownMenu を構成するためのポップオーバープロパティ。

  • タイプ: DropdownMenuProps
  • 必須: いいえ

headingLevel: 1 | 2 | 3 | 4 | 5 | 6 | ‘1’ | ‘2’ | ‘3’ | ‘4’ | ‘5’ | ‘6’

パネルのヘッダーの見出しレベル。

  • 必須: いいえ
  • デフォルト: 2

label: string

パネルのヘッダー内に表示され、パネルのドロップダウンメニューの aria-label として表示されるテキスト。

  • 必須: はい

panelId: string | null

panelId が設定されている場合、それは ToolsPanelContext を通じて渡され、パネルアイテムを制限するために使用されます。panelId が設定されている場合、アイテムは panelId が明示的に null であるか、アイテムの panelId が正確に一致する場合にのみ登録できます。

  • 必須: いいえ

resetAll: ( filters?: ResetAllFilter[] ) => void

Reset all メニューオプションが選択されたときに呼び出される関数。引数として、すべての有効な登録された ToolsPanelItemsresetAllFilter コールバックを含む配列を受け取ります。

  • 必須: はい

shouldRenderPlaceholderItems: boolean

ToolsPanel に対して、すべての ToolsPanelItem 子要素がオフに切り替えられ隠されたときにプレースホルダーコンテンツ(null の代わりに)をレンダリングするべきであることを示します。プレースホルダーアイテムは、ToolsPanelItem を通じて通常表示される className を適用しないことに注意してください。

  • 必須: いいえ
  • デフォルト: false