From 4ef6042ed1ebbd2c0b6aa9fe9be2a63eb71a1268 Mon Sep 17 00:00:00 2001 From: chad1008 <13856531+chad1008@users.noreply.github.com> Date: Mon, 20 Nov 2023 17:26:22 -0500 Subject: [PATCH 1/7] implement `Tabs` --- .../components/colors-gradients/control.js | 74 +++++++++++-------- 1 file changed, 43 insertions(+), 31 deletions(-) diff --git a/packages/block-editor/src/components/colors-gradients/control.js b/packages/block-editor/src/components/colors-gradients/control.js index 51912e0a74e9d1..c826fd9256790f 100644 --- a/packages/block-editor/src/components/colors-gradients/control.js +++ b/packages/block-editor/src/components/colors-gradients/control.js @@ -10,15 +10,18 @@ import { __ } from '@wordpress/i18n'; import { BaseControl, __experimentalVStack as VStack, - TabPanel, ColorPalette, GradientPicker, + privateApis as componentsPrivateApis, } from '@wordpress/components'; /** * Internal dependencies */ import { useSettings } from '../use-settings'; +import { unlock } from '../../lock-unlock'; + +const { Tabs } = unlock( componentsPrivateApis ); const colorsAndGradientKeys = [ 'colors', @@ -27,19 +30,6 @@ const colorsAndGradientKeys = [ 'disableCustomGradients', ]; -const TAB_COLOR = { - name: 'color', - title: __( 'Solid' ), - value: 'color', -}; -const TAB_GRADIENT = { - name: 'gradient', - title: __( 'Gradient' ), - value: 'gradient', -}; - -const TABS_SETTINGS = [ TAB_COLOR, TAB_GRADIENT ]; - function ColorGradientControlInner( { colors, gradients, @@ -69,7 +59,7 @@ function ColorGradientControlInner( { } const tabPanels = { - [ TAB_COLOR.value ]: ( + color: ( ), - [ TAB_GRADIENT.value ]: ( + gradient: ( ) } { canChooseAColor && canChooseAGradient && ( - - { ( tab ) => renderPanelType( tab.value ) } - +
+ + + + { __( 'Solid' ) } + + + { __( 'Gradient' ) } + + + + { tabPanels.color } + + + { tabPanels.gradient } + + +
) } - { ! canChooseAGradient && - renderPanelType( TAB_COLOR.value ) } - { ! canChooseAColor && - renderPanelType( TAB_GRADIENT.value ) } + + { ! canChooseAGradient && renderPanelType( 'color' ) } + { ! canChooseAColor && renderPanelType( 'gradient' ) } From 39f0feb15df1be0bf4af3efffd4ba00a248b90fc Mon Sep 17 00:00:00 2001 From: chad1008 <13856531+chad1008@users.noreply.github.com> Date: Mon, 20 Nov 2023 20:45:41 -0500 Subject: [PATCH 2/7] focusable=false --- .../block-editor/src/components/colors-gradients/control.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/block-editor/src/components/colors-gradients/control.js b/packages/block-editor/src/components/colors-gradients/control.js index c826fd9256790f..5fbde806205c39 100644 --- a/packages/block-editor/src/components/colors-gradients/control.js +++ b/packages/block-editor/src/components/colors-gradients/control.js @@ -148,6 +148,7 @@ function ColorGradientControlInner( { className={ 'block-editor-color-gradient-control__panel' } + focusable={ false } > { tabPanels.color } @@ -156,6 +157,7 @@ function ColorGradientControlInner( { className={ 'block-editor-color-gradient-control__panel' } + focusable={ false } > { tabPanels.gradient } From b40b3b0ebb254b09d74c7e12ef0f0c33d5362f91 Mon Sep 17 00:00:00 2001 From: chad1008 <13856531+chad1008@users.noreply.github.com> Date: Mon, 27 Nov 2023 15:22:14 -0500 Subject: [PATCH 3/7] define tab IDs as constants --- .../src/components/colors-gradients/control.js | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/packages/block-editor/src/components/colors-gradients/control.js b/packages/block-editor/src/components/colors-gradients/control.js index 5fbde806205c39..699f0dd87f8b09 100644 --- a/packages/block-editor/src/components/colors-gradients/control.js +++ b/packages/block-editor/src/components/colors-gradients/control.js @@ -30,6 +30,8 @@ const colorsAndGradientKeys = [ 'disableCustomGradients', ]; +const TAB_IDS = { color: 'color', gradient: 'gradient' }; + function ColorGradientControlInner( { colors, gradients, @@ -131,20 +133,20 @@ function ColorGradientControlInner( { - + { __( 'Solid' ) } - + { __( 'Gradient' ) } ) } - { ! canChooseAGradient && renderPanelType( 'color' ) } - { ! canChooseAColor && renderPanelType( 'gradient' ) } + { ! canChooseAGradient && renderPanelType( TAB_IDS.color ) } + { ! canChooseAColor && renderPanelType( TAB_IDS.gradient ) } From 475743a0685061b34d8cae9ad9a943c2afce4c1b Mon Sep 17 00:00:00 2001 From: Chad Chadbourne <13856531+chad1008@users.noreply.github.com> Date: Wed, 29 Nov 2023 18:00:04 -0500 Subject: [PATCH 4/7] Apply suggestions from code review Co-authored-by: Marco Ciampini --- .../block-editor/src/components/colors-gradients/control.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/block-editor/src/components/colors-gradients/control.js b/packages/block-editor/src/components/colors-gradients/control.js index 699f0dd87f8b09..ab43291b8a2e1f 100644 --- a/packages/block-editor/src/components/colors-gradients/control.js +++ b/packages/block-editor/src/components/colors-gradients/control.js @@ -61,7 +61,7 @@ function ColorGradientControlInner( { } const tabPanels = { - color: ( + [ TAB_IDS.color ]: ( ), - gradient: ( + [ TAB_IDS.gradient ]: ( Date: Wed, 29 Nov 2023 18:16:12 -0500 Subject: [PATCH 5/7] remove unneeded div and style --- .../components/colors-gradients/control.js | 66 +++++++++---------- .../components/colors-gradients/style.scss | 6 -- 2 files changed, 32 insertions(+), 40 deletions(-) diff --git a/packages/block-editor/src/components/colors-gradients/control.js b/packages/block-editor/src/components/colors-gradients/control.js index ab43291b8a2e1f..9591b96838a120 100644 --- a/packages/block-editor/src/components/colors-gradients/control.js +++ b/packages/block-editor/src/components/colors-gradients/control.js @@ -129,42 +129,40 @@ function ColorGradientControlInner( { ) } { canChooseAColor && canChooseAGradient && ( -
- + + + { __( 'Solid' ) } + + + { __( 'Gradient' ) } + + + - - - { __( 'Solid' ) } - - - { __( 'Gradient' ) } - - - - { tabPanels.color } - - - { tabPanels.gradient } - - -
+ { tabPanels.color } +
+ + { tabPanels.gradient } + +
) } { ! canChooseAGradient && renderPanelType( TAB_IDS.color ) } diff --git a/packages/block-editor/src/components/colors-gradients/style.scss b/packages/block-editor/src/components/colors-gradients/style.scss index 6cade124b7fe46..fcae4a99189eed 100644 --- a/packages/block-editor/src/components/colors-gradients/style.scss +++ b/packages/block-editor/src/components/colors-gradients/style.scss @@ -15,12 +15,6 @@ $swatch-gap: 12px; min-width: 0; } -.block-editor-color-gradient-control__tabs { - .block-editor-color-gradient-control__panel { - padding: $grid-unit-20; - } -} - .block-editor-panel-color-gradient-settings.block-editor-panel-color-gradient-settings { &, & > div:not(:first-of-type) { From 4b48fe15d9eee34152cface56759534debb4544e Mon Sep 17 00:00:00 2001 From: chad1008 <13856531+chad1008@users.noreply.github.com> Date: Thu, 30 Nov 2023 09:17:53 -0500 Subject: [PATCH 6/7] replace the div --- .../components/colors-gradients/control.js | 66 ++++++++++--------- 1 file changed, 34 insertions(+), 32 deletions(-) diff --git a/packages/block-editor/src/components/colors-gradients/control.js b/packages/block-editor/src/components/colors-gradients/control.js index 9591b96838a120..9009c0411f465a 100644 --- a/packages/block-editor/src/components/colors-gradients/control.js +++ b/packages/block-editor/src/components/colors-gradients/control.js @@ -129,40 +129,42 @@ function ColorGradientControlInner( { ) } { canChooseAColor && canChooseAGradient && ( - - - - { __( 'Solid' ) } - - - { __( 'Gradient' ) } - - - + - { tabPanels.color } - - - { tabPanels.gradient } - - + + + { __( 'Solid' ) } + + + { __( 'Gradient' ) } + + + + { tabPanels.color } + + + { tabPanels.gradient } + + + ) } { ! canChooseAGradient && renderPanelType( TAB_IDS.color ) } From e0a7f53a44684019b8cba60ffd924f1b11e5d7b3 Mon Sep 17 00:00:00 2001 From: chad1008 <13856531+chad1008@users.noreply.github.com> Date: Tue, 5 Dec 2023 11:02:41 -0500 Subject: [PATCH 7/7] try waiting to unlock Tabs --- .../src/components/colors-gradients/control.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/block-editor/src/components/colors-gradients/control.js b/packages/block-editor/src/components/colors-gradients/control.js index 9009c0411f465a..0cb2fcdda44875 100644 --- a/packages/block-editor/src/components/colors-gradients/control.js +++ b/packages/block-editor/src/components/colors-gradients/control.js @@ -21,8 +21,6 @@ import { import { useSettings } from '../use-settings'; import { unlock } from '../../lock-unlock'; -const { Tabs } = unlock( componentsPrivateApis ); - const colorsAndGradientKeys = [ 'colors', 'disableCustomColors', @@ -109,6 +107,11 @@ function ColorGradientControlInner( { ); + // Unlocking `Tabs` too early causes the `unlock` method to receive an empty + // object, due to circular dependencies. + // See https://github.com/WordPress/gutenberg/issues/52692 + const { Tabs } = unlock( componentsPrivateApis ); + return (