@wordpress/block-editor 11.6.0 → 11.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/README.md +46 -55
- package/build/components/block-list/block-html.js +1 -3
- package/build/components/block-list/block-html.js.map +1 -1
- package/build/components/block-list/block.native.js +4 -3
- package/build/components/block-list/block.native.js.map +1 -1
- package/build/components/block-list/index.native.js +11 -21
- package/build/components/block-list/index.native.js.map +1 -1
- package/build/components/block-list/use-in-between-inserter.js +3 -1
- package/build/components/block-list/use-in-between-inserter.js.map +1 -1
- package/build/components/block-popover/inbetween.js +2 -9
- package/build/components/block-popover/inbetween.js.map +1 -1
- package/build/components/block-preview/auto.js +6 -23
- package/build/components/block-preview/auto.js.map +1 -1
- package/build/components/block-settings-menu/block-settings-dropdown.js +1 -10
- package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
- package/build/components/caption/index.native.js +0 -1
- package/build/components/caption/index.native.js.map +1 -1
- package/build/components/date-format-picker/index.js +1 -1
- package/build/components/date-format-picker/index.js.map +1 -1
- package/build/components/editor-styles/index.js +20 -2
- package/build/components/editor-styles/index.js.map +1 -1
- package/build/components/global-styles/border-panel.js +15 -29
- package/build/components/global-styles/border-panel.js.map +1 -1
- package/build/components/global-styles/color-panel.js +583 -0
- package/build/components/global-styles/color-panel.js.map +1 -0
- package/build/components/global-styles/dimensions-panel.js +23 -44
- package/build/components/global-styles/dimensions-panel.js.map +1 -1
- package/build/components/global-styles/effects-panel.js +244 -0
- package/build/components/global-styles/effects-panel.js.map +1 -0
- package/build/components/global-styles/filters-panel.js +151 -0
- package/build/components/global-styles/filters-panel.js.map +1 -0
- package/build/components/global-styles/get-block-css-selector.js +118 -0
- package/build/components/global-styles/get-block-css-selector.js.map +1 -0
- package/build/components/global-styles/hooks.js +60 -1
- package/build/components/global-styles/hooks.js.map +1 -1
- package/build/components/global-styles/index.js +46 -2
- package/build/components/global-styles/index.js.map +1 -1
- package/build/components/global-styles/typography-panel.js +9 -35
- package/build/components/global-styles/typography-panel.js.map +1 -1
- package/build/components/global-styles/use-global-styles-output.js +173 -91
- package/build/components/global-styles/use-global-styles-output.js.map +1 -1
- package/build/components/global-styles/utils.js +2 -1
- package/build/components/global-styles/utils.js.map +1 -1
- package/build/components/iframe/index.js +1 -1
- package/build/components/iframe/index.js.map +1 -1
- package/build/components/image-size-control/index.js +8 -5
- package/build/components/image-size-control/index.js.map +1 -1
- package/build/components/image-size-control/use-dimension-handler.js +5 -3
- package/build/components/image-size-control/use-dimension-handler.js.map +1 -1
- package/build/components/index.js +16 -0
- package/build/components/index.js.map +1 -1
- package/build/components/inserter/block-patterns-tab.js +4 -2
- package/build/components/inserter/block-patterns-tab.js.map +1 -1
- package/build/components/inspector-controls-tabs/position-controls-panel.js +43 -7
- package/build/components/inspector-controls-tabs/position-controls-panel.js.map +1 -1
- package/build/components/inspector-controls-tabs/utils.js +5 -3
- package/build/components/inspector-controls-tabs/utils.js.map +1 -1
- package/build/components/line-height-control/index.js +15 -1
- package/build/components/line-height-control/index.js.map +1 -1
- package/build/components/list-view/appender.js +105 -0
- package/build/components/list-view/appender.js.map +1 -0
- package/build/components/list-view/block.js +6 -5
- package/build/components/list-view/block.js.map +1 -1
- package/build/components/list-view/branch.js +25 -5
- package/build/components/list-view/branch.js.map +1 -1
- package/build/components/list-view/index.js +56 -14
- package/build/components/list-view/index.js.map +1 -1
- package/build/components/list-view/use-list-view-client-ids.js +7 -3
- package/build/components/list-view/use-list-view-client-ids.js.map +1 -1
- package/build/components/list-view/use-list-view-drop-zone.js +8 -2
- package/build/components/list-view/use-list-view-drop-zone.js.map +1 -1
- package/build/components/media-replace-flow/index.js +13 -4
- package/build/components/media-replace-flow/index.js.map +1 -1
- package/build/components/off-canvas-editor/block-contents.js +6 -1
- package/build/components/off-canvas-editor/block-contents.js.map +1 -1
- package/build/components/off-canvas-editor/index.js +17 -14
- package/build/components/off-canvas-editor/index.js.map +1 -1
- package/build/components/resizable-box-popover/index.js +38 -0
- package/build/components/resizable-box-popover/index.js.map +1 -0
- package/build/components/rich-text/format-edit.js +2 -30
- package/build/components/rich-text/format-edit.js.map +1 -1
- package/build/components/rich-text/index.js +0 -1
- package/build/components/rich-text/index.js.map +1 -1
- package/build/components/rich-text/index.native.js +7 -11
- package/build/components/rich-text/index.native.js.map +1 -1
- package/build/components/spacing-sizes-control/spacing-input-control.js +8 -0
- package/build/components/spacing-sizes-control/spacing-input-control.js.map +1 -1
- package/build/components/writing-flow/use-input.js +4 -8
- package/build/components/writing-flow/use-input.js.map +1 -1
- package/build/hooks/anchor.js +1 -1
- package/build/hooks/anchor.js.map +1 -1
- package/build/hooks/border.js +1 -2
- package/build/hooks/border.js.map +1 -1
- package/build/hooks/color.js +92 -229
- package/build/hooks/color.js.map +1 -1
- package/build/hooks/content-lock-ui.js +4 -2
- package/build/hooks/content-lock-ui.js.map +1 -1
- package/build/hooks/{color-panel.js → contrast-checker.js} +11 -49
- package/build/hooks/contrast-checker.js.map +1 -0
- package/build/hooks/dimensions.js +0 -1
- package/build/hooks/dimensions.js.map +1 -1
- package/build/hooks/duotone.js +92 -64
- package/build/hooks/duotone.js.map +1 -1
- package/build/hooks/margin.js +27 -17
- package/build/hooks/margin.js.map +1 -1
- package/build/hooks/padding.js +19 -9
- package/build/hooks/padding.js.map +1 -1
- package/build/hooks/position.js +2 -2
- package/build/hooks/position.js.map +1 -1
- package/build/hooks/style.js +23 -26
- package/build/hooks/style.js.map +1 -1
- package/build/hooks/typography.js +0 -1
- package/build/hooks/typography.js.map +1 -1
- package/build/hooks/utils.js +28 -76
- package/build/hooks/utils.js.map +1 -1
- package/build/layouts/grid.js +165 -0
- package/build/layouts/grid.js.map +1 -0
- package/build/layouts/index.js +3 -1
- package/build/layouts/index.js.map +1 -1
- package/build/layouts/utils.js +3 -2
- package/build/layouts/utils.js.map +1 -1
- package/build/private-apis.js +7 -1
- package/build/private-apis.js.map +1 -1
- package/build/store/actions.js +1 -1
- package/build/store/actions.js.map +1 -1
- package/build/utils/object.js +76 -0
- package/build/utils/object.js.map +1 -0
- package/build-module/components/block-list/block-html.js +1 -3
- package/build-module/components/block-list/block-html.js.map +1 -1
- package/build-module/components/block-list/block.native.js +4 -3
- package/build-module/components/block-list/block.native.js.map +1 -1
- package/build-module/components/block-list/index.native.js +11 -19
- package/build-module/components/block-list/index.native.js.map +1 -1
- package/build-module/components/block-list/use-in-between-inserter.js +2 -1
- package/build-module/components/block-list/use-in-between-inserter.js.map +1 -1
- package/build-module/components/block-popover/inbetween.js +2 -9
- package/build-module/components/block-popover/inbetween.js.map +1 -1
- package/build-module/components/block-preview/auto.js +6 -22
- package/build-module/components/block-preview/auto.js.map +1 -1
- package/build-module/components/block-settings-menu/block-settings-dropdown.js +1 -9
- package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
- package/build-module/components/caption/index.native.js +0 -1
- package/build-module/components/caption/index.native.js.map +1 -1
- package/build-module/components/date-format-picker/index.js +1 -1
- package/build-module/components/date-format-picker/index.js.map +1 -1
- package/build-module/components/editor-styles/index.js +19 -2
- package/build-module/components/editor-styles/index.js.map +1 -1
- package/build-module/components/global-styles/border-panel.js +15 -29
- package/build-module/components/global-styles/border-panel.js.map +1 -1
- package/build-module/components/global-styles/color-panel.js +554 -0
- package/build-module/components/global-styles/color-panel.js.map +1 -0
- package/build-module/components/global-styles/dimensions-panel.js +22 -44
- package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
- package/build-module/components/global-styles/effects-panel.js +228 -0
- package/build-module/components/global-styles/effects-panel.js.map +1 -0
- package/build-module/components/global-styles/filters-panel.js +139 -0
- package/build-module/components/global-styles/filters-panel.js.map +1 -0
- package/build-module/components/global-styles/get-block-css-selector.js +109 -0
- package/build-module/components/global-styles/get-block-css-selector.js.map +1 -0
- package/build-module/components/global-styles/hooks.js +58 -1
- package/build-module/components/global-styles/hooks.js.map +1 -1
- package/build-module/components/global-styles/index.js +5 -1
- package/build-module/components/global-styles/index.js.map +1 -1
- package/build-module/components/global-styles/typography-panel.js +8 -35
- package/build-module/components/global-styles/typography-panel.js.map +1 -1
- package/build-module/components/global-styles/use-global-styles-output.js +175 -93
- package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
- package/build-module/components/global-styles/utils.js +2 -1
- package/build-module/components/global-styles/utils.js.map +1 -1
- package/build-module/components/iframe/index.js +1 -1
- package/build-module/components/iframe/index.js.map +1 -1
- package/build-module/components/image-size-control/index.js +8 -5
- package/build-module/components/image-size-control/index.js.map +1 -1
- package/build-module/components/image-size-control/use-dimension-handler.js +5 -3
- package/build-module/components/image-size-control/use-dimension-handler.js.map +1 -1
- package/build-module/components/index.js +1 -0
- package/build-module/components/index.js.map +1 -1
- package/build-module/components/inserter/block-patterns-tab.js +5 -2
- package/build-module/components/inserter/block-patterns-tab.js.map +1 -1
- package/build-module/components/inspector-controls-tabs/position-controls-panel.js +42 -7
- package/build-module/components/inspector-controls-tabs/position-controls-panel.js.map +1 -1
- package/build-module/components/inspector-controls-tabs/utils.js +4 -3
- package/build-module/components/inspector-controls-tabs/utils.js.map +1 -1
- package/build-module/components/line-height-control/index.js +15 -1
- package/build-module/components/line-height-control/index.js.map +1 -1
- package/build-module/components/list-view/appender.js +88 -0
- package/build-module/components/list-view/appender.js.map +1 -0
- package/build-module/components/list-view/block.js +6 -4
- package/build-module/components/list-view/block.js.map +1 -1
- package/build-module/components/list-view/branch.js +22 -5
- package/build-module/components/list-view/branch.js.map +1 -1
- package/build-module/components/list-view/index.js +50 -13
- package/build-module/components/list-view/index.js.map +1 -1
- package/build-module/components/list-view/use-list-view-client-ids.js +7 -3
- package/build-module/components/list-view/use-list-view-client-ids.js.map +1 -1
- package/build-module/components/list-view/use-list-view-drop-zone.js +8 -4
- package/build-module/components/list-view/use-list-view-drop-zone.js.map +1 -1
- package/build-module/components/media-replace-flow/index.js +12 -4
- package/build-module/components/media-replace-flow/index.js.map +1 -1
- package/build-module/components/off-canvas-editor/block-contents.js +5 -1
- package/build-module/components/off-canvas-editor/block-contents.js.map +1 -1
- package/build-module/components/off-canvas-editor/index.js +17 -14
- package/build-module/components/off-canvas-editor/index.js.map +1 -1
- package/build-module/components/resizable-box-popover/index.js +26 -0
- package/build-module/components/resizable-box-popover/index.js.map +1 -0
- package/build-module/components/rich-text/format-edit.js +3 -31
- package/build-module/components/rich-text/format-edit.js.map +1 -1
- package/build-module/components/rich-text/index.js +0 -1
- package/build-module/components/rich-text/index.js.map +1 -1
- package/build-module/components/rich-text/index.native.js +7 -10
- package/build-module/components/rich-text/index.native.js.map +1 -1
- package/build-module/components/spacing-sizes-control/spacing-input-control.js +7 -0
- package/build-module/components/spacing-sizes-control/spacing-input-control.js.map +1 -1
- package/build-module/components/writing-flow/use-input.js +4 -8
- package/build-module/components/writing-flow/use-input.js.map +1 -1
- package/build-module/hooks/anchor.js +1 -1
- package/build-module/hooks/anchor.js.map +1 -1
- package/build-module/hooks/border.js +1 -2
- package/build-module/hooks/border.js.map +1 -1
- package/build-module/hooks/color.js +90 -232
- package/build-module/hooks/color.js.map +1 -1
- package/build-module/hooks/content-lock-ui.js +4 -2
- package/build-module/hooks/content-lock-ui.js.map +1 -1
- package/build-module/hooks/{color-panel.js → contrast-checker.js} +10 -44
- package/build-module/hooks/contrast-checker.js.map +1 -0
- package/build-module/hooks/dimensions.js +0 -1
- package/build-module/hooks/dimensions.js.map +1 -1
- package/build-module/hooks/duotone.js +91 -65
- package/build-module/hooks/duotone.js.map +1 -1
- package/build-module/hooks/margin.js +29 -18
- package/build-module/hooks/margin.js.map +1 -1
- package/build-module/hooks/padding.js +21 -10
- package/build-module/hooks/padding.js.map +1 -1
- package/build-module/hooks/position.js +3 -3
- package/build-module/hooks/position.js.map +1 -1
- package/build-module/hooks/style.js +23 -26
- package/build-module/hooks/style.js.map +1 -1
- package/build-module/hooks/typography.js +0 -1
- package/build-module/hooks/typography.js.map +1 -1
- package/build-module/hooks/utils.js +27 -74
- package/build-module/hooks/utils.js.map +1 -1
- package/build-module/layouts/grid.js +151 -0
- package/build-module/layouts/grid.js.map +1 -0
- package/build-module/layouts/index.js +2 -1
- package/build-module/layouts/index.js.map +1 -1
- package/build-module/layouts/utils.js +3 -2
- package/build-module/layouts/utils.js.map +1 -1
- package/build-module/private-apis.js +5 -1
- package/build-module/private-apis.js.map +1 -1
- package/build-module/store/actions.js +1 -1
- package/build-module/store/actions.js.map +1 -1
- package/build-module/utils/object.js +69 -0
- package/build-module/utils/object.js.map +1 -0
- package/build-style/style-rtl.css +77 -16
- package/build-style/style.css +77 -16
- package/package.json +31 -31
- package/src/components/block-draggable/content.scss +1 -1
- package/src/components/block-inspector/style.scss +6 -4
- package/src/components/block-list/block-html.js +1 -1
- package/src/components/block-list/block.native.js +3 -2
- package/src/components/block-list/index.native.js +19 -38
- package/src/components/block-list/use-in-between-inserter.js +4 -1
- package/src/components/block-popover/inbetween.js +2 -13
- package/src/components/block-preview/auto.js +2 -17
- package/src/components/block-settings-menu/block-settings-dropdown.js +2 -12
- package/src/components/caption/index.native.js +0 -1
- package/src/components/colors-gradients/style.scss +8 -8
- package/src/components/date-format-picker/index.js +1 -1
- package/src/components/editor-styles/index.js +29 -1
- package/src/components/global-styles/README.md +129 -16
- package/src/components/global-styles/border-panel.js +13 -32
- package/src/components/global-styles/color-panel.js +706 -0
- package/src/components/global-styles/dimensions-panel.js +43 -55
- package/src/components/global-styles/effects-panel.js +228 -0
- package/src/components/global-styles/filters-panel.js +157 -0
- package/src/components/global-styles/get-block-css-selector.js +118 -0
- package/src/components/global-styles/hooks.js +90 -0
- package/src/components/global-styles/index.js +4 -1
- package/src/components/global-styles/style.scss +42 -0
- package/src/components/global-styles/test/use-global-styles-output.js +34 -5
- package/src/components/global-styles/typography-panel.js +26 -51
- package/src/components/global-styles/use-global-styles-output.js +188 -89
- package/src/components/global-styles/utils.js +3 -0
- package/src/components/iframe/index.js +1 -1
- package/src/components/image-size-control/index.js +4 -3
- package/src/components/image-size-control/test/index.js +2 -2
- package/src/components/image-size-control/use-dimension-handler.js +4 -3
- package/src/components/index.js +4 -1
- package/src/components/inner-blocks/README.md +1 -1
- package/src/components/inserter/block-patterns-tab.js +3 -1
- package/src/components/inspector-controls-tabs/position-controls-panel.js +40 -9
- package/src/components/inspector-controls-tabs/utils.js +4 -3
- package/src/components/line-height-control/index.js +10 -1
- package/src/components/list-view/README.md +2 -0
- package/src/components/list-view/appender.js +101 -0
- package/src/components/list-view/block.js +6 -4
- package/src/components/list-view/branch.js +30 -1
- package/src/components/list-view/index.js +60 -11
- package/src/components/list-view/style.scss +22 -1
- package/src/components/list-view/test/use-list-view-drop-zone.js +188 -0
- package/src/components/list-view/use-list-view-client-ids.js +5 -3
- package/src/components/list-view/use-list-view-drop-zone.js +9 -3
- package/src/components/media-replace-flow/index.js +36 -24
- package/src/components/media-replace-flow/style.scss +5 -2
- package/src/components/off-canvas-editor/block-contents.js +4 -0
- package/src/components/off-canvas-editor/index.js +15 -11
- package/src/components/resizable-box-popover/index.js +27 -0
- package/src/components/rich-text/format-edit.js +2 -32
- package/src/components/rich-text/index.js +0 -1
- package/src/components/rich-text/index.native.js +2 -5
- package/src/components/spacing-sizes-control/spacing-input-control.js +10 -0
- package/src/components/spacing-sizes-control/style.scss +7 -7
- package/src/components/writing-flow/use-input.js +4 -5
- package/src/hooks/anchor.js +1 -1
- package/src/hooks/border.js +1 -2
- package/src/hooks/color.js +120 -296
- package/src/hooks/content-lock-ui.js +6 -2
- package/src/hooks/{color-panel.js → contrast-checker.js} +10 -46
- package/src/hooks/dimensions.js +0 -1
- package/src/hooks/duotone.js +121 -76
- package/src/hooks/margin.js +31 -26
- package/src/hooks/padding.js +24 -18
- package/src/hooks/position.js +3 -3
- package/src/hooks/style.js +29 -28
- package/src/hooks/test/utils.js +0 -104
- package/src/hooks/typography.js +0 -1
- package/src/hooks/utils.js +31 -74
- package/src/layouts/grid.js +172 -0
- package/src/layouts/index.js +2 -1
- package/src/layouts/test/grid.js +21 -0
- package/src/layouts/utils.js +2 -2
- package/src/private-apis.js +4 -0
- package/src/store/actions.js +1 -1
- package/src/style.scss +1 -0
- package/src/utils/object.js +69 -0
- package/src/utils/test/object.js +145 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/build/components/rich-text/use-native-props.js +0 -11
- package/build/components/rich-text/use-native-props.js.map +0 -1
- package/build/components/rich-text/use-native-props.native.js +0 -24
- package/build/components/rich-text/use-native-props.native.js.map +0 -1
- package/build/hooks/color-panel.js.map +0 -1
- package/build-module/components/rich-text/use-native-props.js +0 -4
- package/build-module/components/rich-text/use-native-props.js.map +0 -1
- package/build-module/components/rich-text/use-native-props.native.js +0 -15
- package/build-module/components/rich-text/use-native-props.native.js.map +0 -1
- package/build-module/hooks/color-panel.js.map +0 -1
- package/src/components/rich-text/use-native-props.js +0 -3
- package/src/components/rich-text/use-native-props.native.js +0 -17
|
@@ -28,6 +28,7 @@ import SpacingSizesControl from '../spacing-sizes-control';
|
|
|
28
28
|
import HeightControl from '../height-control';
|
|
29
29
|
import ChildLayoutControl from '../child-layout-control';
|
|
30
30
|
import { cleanEmptyObject } from '../../hooks/utils';
|
|
31
|
+
import { immutableSet } from '../../utils/object';
|
|
31
32
|
|
|
32
33
|
const AXIAL_SIDES = [ 'horizontal', 'vertical' ];
|
|
33
34
|
|
|
@@ -183,12 +184,13 @@ function DimensionsToolsPanel( {
|
|
|
183
184
|
}
|
|
184
185
|
|
|
185
186
|
const DEFAULT_CONTROLS = {
|
|
186
|
-
contentSize:
|
|
187
|
-
wideSize:
|
|
188
|
-
padding:
|
|
189
|
-
margin:
|
|
190
|
-
blockGap:
|
|
191
|
-
minHeight:
|
|
187
|
+
contentSize: false,
|
|
188
|
+
wideSize: false,
|
|
189
|
+
padding: false,
|
|
190
|
+
margin: false,
|
|
191
|
+
blockGap: false,
|
|
192
|
+
minHeight: false,
|
|
193
|
+
childLayout: true,
|
|
192
194
|
};
|
|
193
195
|
|
|
194
196
|
export default function DimensionsPanel( {
|
|
@@ -223,13 +225,9 @@ export default function DimensionsPanel( {
|
|
|
223
225
|
useHasContentSize( settings ) && includeLayoutControls;
|
|
224
226
|
const contentSizeValue = decodeValue( inheritedValue?.layout?.contentSize );
|
|
225
227
|
const setContentSizeValue = ( newValue ) => {
|
|
226
|
-
onChange(
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
...value?.layout,
|
|
230
|
-
contentSize: newValue,
|
|
231
|
-
},
|
|
232
|
-
} );
|
|
228
|
+
onChange(
|
|
229
|
+
immutableSet( value, [ 'layout', 'contentSize' ], newValue )
|
|
230
|
+
);
|
|
233
231
|
};
|
|
234
232
|
const hasUserSetContentSizeValue = () => !! value?.layout?.contentSize;
|
|
235
233
|
const resetContentSizeValue = () => setContentSizeValue( undefined );
|
|
@@ -239,13 +237,7 @@ export default function DimensionsPanel( {
|
|
|
239
237
|
useHasWideSize( settings ) && includeLayoutControls;
|
|
240
238
|
const wideSizeValue = decodeValue( inheritedValue?.layout?.wideSize );
|
|
241
239
|
const setWideSizeValue = ( newValue ) => {
|
|
242
|
-
onChange(
|
|
243
|
-
...value,
|
|
244
|
-
layout: {
|
|
245
|
-
...value?.layout,
|
|
246
|
-
wideSize: newValue,
|
|
247
|
-
},
|
|
248
|
-
} );
|
|
240
|
+
onChange( immutableSet( value, [ 'layout', 'wideSize' ], newValue ) );
|
|
249
241
|
};
|
|
250
242
|
const hasUserSetWideSizeValue = () => !! value?.layout?.wideSize;
|
|
251
243
|
const resetWideSizeValue = () => setWideSizeValue( undefined );
|
|
@@ -262,13 +254,7 @@ export default function DimensionsPanel( {
|
|
|
262
254
|
paddingSides.some( ( side ) => AXIAL_SIDES.includes( side ) );
|
|
263
255
|
const setPaddingValues = ( newPaddingValues ) => {
|
|
264
256
|
const padding = filterValuesBySides( newPaddingValues, paddingSides );
|
|
265
|
-
onChange(
|
|
266
|
-
...value,
|
|
267
|
-
spacing: {
|
|
268
|
-
...value?.spacing,
|
|
269
|
-
padding,
|
|
270
|
-
},
|
|
271
|
-
} );
|
|
257
|
+
onChange( immutableSet( value, [ 'spacing', 'padding' ], padding ) );
|
|
272
258
|
};
|
|
273
259
|
const hasPaddingValue = () =>
|
|
274
260
|
!! value?.spacing?.padding &&
|
|
@@ -288,13 +274,7 @@ export default function DimensionsPanel( {
|
|
|
288
274
|
marginSides.some( ( side ) => AXIAL_SIDES.includes( side ) );
|
|
289
275
|
const setMarginValues = ( newMarginValues ) => {
|
|
290
276
|
const margin = filterValuesBySides( newMarginValues, marginSides );
|
|
291
|
-
onChange(
|
|
292
|
-
...value,
|
|
293
|
-
spacing: {
|
|
294
|
-
...value?.spacing,
|
|
295
|
-
margin,
|
|
296
|
-
},
|
|
297
|
-
} );
|
|
277
|
+
onChange( immutableSet( value, [ 'spacing', 'margin' ], margin ) );
|
|
298
278
|
};
|
|
299
279
|
const hasMarginValue = () =>
|
|
300
280
|
!! value?.spacing?.margin &&
|
|
@@ -312,13 +292,9 @@ export default function DimensionsPanel( {
|
|
|
312
292
|
const isAxialGap =
|
|
313
293
|
gapSides && gapSides.some( ( side ) => AXIAL_SIDES.includes( side ) );
|
|
314
294
|
const setGapValue = ( newGapValue ) => {
|
|
315
|
-
onChange(
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
...value?.spacing,
|
|
319
|
-
blockGap: newGapValue,
|
|
320
|
-
},
|
|
321
|
-
} );
|
|
295
|
+
onChange(
|
|
296
|
+
immutableSet( value, [ 'spacing', 'blockGap' ], newGapValue )
|
|
297
|
+
);
|
|
322
298
|
};
|
|
323
299
|
const setGapValues = ( nextBoxGapValue ) => {
|
|
324
300
|
if ( ! nextBoxGapValue ) {
|
|
@@ -341,13 +317,9 @@ export default function DimensionsPanel( {
|
|
|
341
317
|
const showMinHeightControl = useHasMinHeight( settings );
|
|
342
318
|
const minHeightValue = decodeValue( inheritedValue?.dimensions?.minHeight );
|
|
343
319
|
const setMinHeightValue = ( newValue ) => {
|
|
344
|
-
onChange(
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
...value?.dimensions,
|
|
348
|
-
minHeight: newValue,
|
|
349
|
-
},
|
|
350
|
-
} );
|
|
320
|
+
onChange(
|
|
321
|
+
immutableSet( value, [ 'dimensions', 'minHeight' ], newValue )
|
|
322
|
+
);
|
|
351
323
|
};
|
|
352
324
|
const resetMinHeightValue = () => {
|
|
353
325
|
setMinHeightValue( undefined );
|
|
@@ -420,7 +392,10 @@ export default function DimensionsPanel( {
|
|
|
420
392
|
label={ __( 'Content size' ) }
|
|
421
393
|
hasValue={ hasUserSetContentSizeValue }
|
|
422
394
|
onDeselect={ resetContentSizeValue }
|
|
423
|
-
isShownByDefault={
|
|
395
|
+
isShownByDefault={
|
|
396
|
+
defaultControls.contentSize ??
|
|
397
|
+
DEFAULT_CONTROLS.contentSize
|
|
398
|
+
}
|
|
424
399
|
panelId={ panelId }
|
|
425
400
|
>
|
|
426
401
|
<HStack alignment="flex-end" justify="flex-start">
|
|
@@ -446,7 +421,9 @@ export default function DimensionsPanel( {
|
|
|
446
421
|
label={ __( 'Wide size' ) }
|
|
447
422
|
hasValue={ hasUserSetWideSizeValue }
|
|
448
423
|
onDeselect={ resetWideSizeValue }
|
|
449
|
-
isShownByDefault={
|
|
424
|
+
isShownByDefault={
|
|
425
|
+
defaultControls.wideSize ?? DEFAULT_CONTROLS.wideSize
|
|
426
|
+
}
|
|
450
427
|
panelId={ panelId }
|
|
451
428
|
>
|
|
452
429
|
<HStack alignment="flex-end" justify="flex-start">
|
|
@@ -471,7 +448,9 @@ export default function DimensionsPanel( {
|
|
|
471
448
|
hasValue={ hasPaddingValue }
|
|
472
449
|
label={ __( 'Padding' ) }
|
|
473
450
|
onDeselect={ resetPaddingValue }
|
|
474
|
-
isShownByDefault={
|
|
451
|
+
isShownByDefault={
|
|
452
|
+
defaultControls.padding ?? DEFAULT_CONTROLS.padding
|
|
453
|
+
}
|
|
475
454
|
className={ classnames( {
|
|
476
455
|
'tools-panel-item-spacing': showSpacingPresetsControl,
|
|
477
456
|
} ) }
|
|
@@ -510,7 +489,9 @@ export default function DimensionsPanel( {
|
|
|
510
489
|
hasValue={ hasMarginValue }
|
|
511
490
|
label={ __( 'Margin' ) }
|
|
512
491
|
onDeselect={ resetMarginValue }
|
|
513
|
-
isShownByDefault={
|
|
492
|
+
isShownByDefault={
|
|
493
|
+
defaultControls.margin ?? DEFAULT_CONTROLS.margin
|
|
494
|
+
}
|
|
514
495
|
className={ classnames( {
|
|
515
496
|
'tools-panel-item-spacing': showSpacingPresetsControl,
|
|
516
497
|
} ) }
|
|
@@ -549,7 +530,9 @@ export default function DimensionsPanel( {
|
|
|
549
530
|
hasValue={ hasGapValue }
|
|
550
531
|
label={ __( 'Block spacing' ) }
|
|
551
532
|
onDeselect={ resetGapValue }
|
|
552
|
-
isShownByDefault={
|
|
533
|
+
isShownByDefault={
|
|
534
|
+
defaultControls.blockGap ?? DEFAULT_CONTROLS.blockGap
|
|
535
|
+
}
|
|
553
536
|
className={ classnames( {
|
|
554
537
|
'tools-panel-item-spacing': showSpacingPresetsControl,
|
|
555
538
|
} ) }
|
|
@@ -595,7 +578,9 @@ export default function DimensionsPanel( {
|
|
|
595
578
|
hasValue={ hasMinHeightValue }
|
|
596
579
|
label={ __( 'Min. height' ) }
|
|
597
580
|
onDeselect={ resetMinHeightValue }
|
|
598
|
-
isShownByDefault={
|
|
581
|
+
isShownByDefault={
|
|
582
|
+
defaultControls.minHeight ?? DEFAULT_CONTROLS.minHeight
|
|
583
|
+
}
|
|
599
584
|
panelId={ panelId }
|
|
600
585
|
>
|
|
601
586
|
<HeightControl
|
|
@@ -612,7 +597,10 @@ export default function DimensionsPanel( {
|
|
|
612
597
|
hasValue={ hasChildLayoutValue }
|
|
613
598
|
label={ childLayoutOrientationLabel }
|
|
614
599
|
onDeselect={ resetChildLayoutValue }
|
|
615
|
-
isShownByDefault={
|
|
600
|
+
isShownByDefault={
|
|
601
|
+
defaultControls.childLayout ??
|
|
602
|
+
DEFAULT_CONTROLS.childLayout
|
|
603
|
+
}
|
|
616
604
|
panelId={ panelId }
|
|
617
605
|
>
|
|
618
606
|
<ChildLayoutControl
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
4
|
+
import classnames from 'classnames';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* WordPress dependencies
|
|
8
|
+
*/
|
|
9
|
+
import {
|
|
10
|
+
__experimentalToolsPanel as ToolsPanel,
|
|
11
|
+
__experimentalToolsPanelItem as ToolsPanelItem,
|
|
12
|
+
__experimentalItemGroup as ItemGroup,
|
|
13
|
+
__experimentalHStack as HStack,
|
|
14
|
+
__experimentalVStack as VStack,
|
|
15
|
+
__experimentalGrid as Grid,
|
|
16
|
+
__experimentalHeading as Heading,
|
|
17
|
+
FlexItem,
|
|
18
|
+
Dropdown,
|
|
19
|
+
__experimentalDropdownContentWrapper as DropdownContentWrapper,
|
|
20
|
+
Button,
|
|
21
|
+
} from '@wordpress/components';
|
|
22
|
+
import { __ } from '@wordpress/i18n';
|
|
23
|
+
import { useCallback } from '@wordpress/element';
|
|
24
|
+
import { shadow as shadowIcon, Icon, check } from '@wordpress/icons';
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Internal dependencies
|
|
28
|
+
*/
|
|
29
|
+
import { getValueFromVariable } from './utils';
|
|
30
|
+
import { immutableSet } from '../../utils/object';
|
|
31
|
+
|
|
32
|
+
export function useHasEffectsPanel( settings ) {
|
|
33
|
+
const hasShadowControl = useHasShadowControl( settings );
|
|
34
|
+
return hasShadowControl;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function useHasShadowControl( settings ) {
|
|
38
|
+
return !! settings?.shadow;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function EffectsToolsPanel( {
|
|
42
|
+
resetAllFilter,
|
|
43
|
+
onChange,
|
|
44
|
+
value,
|
|
45
|
+
panelId,
|
|
46
|
+
children,
|
|
47
|
+
} ) {
|
|
48
|
+
const resetAll = () => {
|
|
49
|
+
const updatedValue = resetAllFilter( value );
|
|
50
|
+
onChange( updatedValue );
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
return (
|
|
54
|
+
<ToolsPanel
|
|
55
|
+
label={ __( 'Effects' ) }
|
|
56
|
+
resetAll={ resetAll }
|
|
57
|
+
panelId={ panelId }
|
|
58
|
+
>
|
|
59
|
+
{ children }
|
|
60
|
+
</ToolsPanel>
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const DEFAULT_CONTROLS = {
|
|
65
|
+
shadow: true,
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
export default function EffectsPanel( {
|
|
69
|
+
as: Wrapper = EffectsToolsPanel,
|
|
70
|
+
value,
|
|
71
|
+
onChange,
|
|
72
|
+
inheritedValue = value,
|
|
73
|
+
settings,
|
|
74
|
+
panelId,
|
|
75
|
+
defaultControls = DEFAULT_CONTROLS,
|
|
76
|
+
} ) {
|
|
77
|
+
const decodeValue = ( rawValue ) =>
|
|
78
|
+
getValueFromVariable( { settings }, '', rawValue );
|
|
79
|
+
|
|
80
|
+
// Shadow
|
|
81
|
+
const hasShadowEnabled = useHasShadowControl( settings );
|
|
82
|
+
const shadow = decodeValue( inheritedValue?.shadow );
|
|
83
|
+
const setShadow = ( newValue ) => {
|
|
84
|
+
onChange( immutableSet( value, [ 'shadow' ], newValue ) );
|
|
85
|
+
};
|
|
86
|
+
const hasShadow = () => !! value?.shadow;
|
|
87
|
+
const resetShadow = () => setShadow( undefined );
|
|
88
|
+
|
|
89
|
+
const resetAllFilter = useCallback( ( previousValue ) => {
|
|
90
|
+
return {
|
|
91
|
+
...previousValue,
|
|
92
|
+
shadow: undefined,
|
|
93
|
+
};
|
|
94
|
+
}, [] );
|
|
95
|
+
|
|
96
|
+
return (
|
|
97
|
+
<Wrapper
|
|
98
|
+
resetAllFilter={ resetAllFilter }
|
|
99
|
+
value={ value }
|
|
100
|
+
onChange={ onChange }
|
|
101
|
+
panelId={ panelId }
|
|
102
|
+
>
|
|
103
|
+
{ hasShadowEnabled && (
|
|
104
|
+
<ToolsPanelItem
|
|
105
|
+
label={ __( 'Shadow' ) }
|
|
106
|
+
hasValue={ hasShadow }
|
|
107
|
+
onDeselect={ resetShadow }
|
|
108
|
+
isShownByDefault={ defaultControls.shadow }
|
|
109
|
+
panelId={ panelId }
|
|
110
|
+
>
|
|
111
|
+
<ItemGroup isBordered isSeparated>
|
|
112
|
+
<ShadowPopover
|
|
113
|
+
shadow={ shadow }
|
|
114
|
+
onShadowChange={ setShadow }
|
|
115
|
+
settings={ settings }
|
|
116
|
+
/>
|
|
117
|
+
</ItemGroup>
|
|
118
|
+
</ToolsPanelItem>
|
|
119
|
+
) }
|
|
120
|
+
</Wrapper>
|
|
121
|
+
);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
const ShadowPopover = ( { shadow, onShadowChange, settings } ) => {
|
|
125
|
+
const popoverProps = {
|
|
126
|
+
placement: 'left-start',
|
|
127
|
+
offset: 36,
|
|
128
|
+
shift: true,
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
return (
|
|
132
|
+
<Dropdown
|
|
133
|
+
popoverProps={ popoverProps }
|
|
134
|
+
className="block-editor-global-styles-effects-panel__shadow-dropdown"
|
|
135
|
+
renderToggle={ renderShadowToggle() }
|
|
136
|
+
renderContent={ () => (
|
|
137
|
+
<DropdownContentWrapper paddingSize="medium">
|
|
138
|
+
<ShadowPopoverContainer
|
|
139
|
+
shadow={ shadow }
|
|
140
|
+
onShadowChange={ onShadowChange }
|
|
141
|
+
settings={ settings }
|
|
142
|
+
/>
|
|
143
|
+
</DropdownContentWrapper>
|
|
144
|
+
) }
|
|
145
|
+
/>
|
|
146
|
+
);
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
function renderShadowToggle() {
|
|
150
|
+
return ( { onToggle, isOpen } ) => {
|
|
151
|
+
const toggleProps = {
|
|
152
|
+
onClick: onToggle,
|
|
153
|
+
className: classnames( { 'is-open': isOpen } ),
|
|
154
|
+
'aria-expanded': isOpen,
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
return (
|
|
158
|
+
<Button { ...toggleProps }>
|
|
159
|
+
<HStack justify="flex-start">
|
|
160
|
+
<Icon
|
|
161
|
+
className="block-editor-global-styles-effects-panel__toggle-icon"
|
|
162
|
+
icon={ shadowIcon }
|
|
163
|
+
size={ 24 }
|
|
164
|
+
/>
|
|
165
|
+
<FlexItem>{ __( 'Shadow' ) }</FlexItem>
|
|
166
|
+
</HStack>
|
|
167
|
+
</Button>
|
|
168
|
+
);
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
function ShadowPopoverContainer( { shadow, onShadowChange, settings } ) {
|
|
173
|
+
const defaultShadows = settings?.shadow?.presets?.default;
|
|
174
|
+
const themeShadows = settings?.shadow?.presets?.theme;
|
|
175
|
+
const defaultPresetsEnabled = settings?.shadow?.defaultPresets;
|
|
176
|
+
|
|
177
|
+
const shadows = [
|
|
178
|
+
...( defaultPresetsEnabled ? defaultShadows : [] ),
|
|
179
|
+
...( themeShadows || [] ),
|
|
180
|
+
];
|
|
181
|
+
|
|
182
|
+
return (
|
|
183
|
+
<div className="block-editor-global-styles-effects-panel__shadow-popover-container">
|
|
184
|
+
<VStack spacing={ 4 }>
|
|
185
|
+
<Heading level={ 5 }>{ __( 'Shadow' ) }</Heading>
|
|
186
|
+
<ShadowPresets
|
|
187
|
+
presets={ shadows }
|
|
188
|
+
activeShadow={ shadow }
|
|
189
|
+
onSelect={ onShadowChange }
|
|
190
|
+
/>
|
|
191
|
+
</VStack>
|
|
192
|
+
</div>
|
|
193
|
+
);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
function ShadowPresets( { presets, activeShadow, onSelect } ) {
|
|
197
|
+
return ! presets ? null : (
|
|
198
|
+
<Grid columns={ 6 } gap={ 0 } align="center" justify="center">
|
|
199
|
+
{ presets.map( ( { name, slug, shadow } ) => (
|
|
200
|
+
<ShadowIndicator
|
|
201
|
+
key={ slug }
|
|
202
|
+
label={ name }
|
|
203
|
+
isActive={ shadow === activeShadow }
|
|
204
|
+
onSelect={ () =>
|
|
205
|
+
onSelect( shadow === activeShadow ? undefined : shadow )
|
|
206
|
+
}
|
|
207
|
+
shadow={ shadow }
|
|
208
|
+
/>
|
|
209
|
+
) ) }
|
|
210
|
+
</Grid>
|
|
211
|
+
);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
function ShadowIndicator( { label, isActive, onSelect, shadow } ) {
|
|
215
|
+
return (
|
|
216
|
+
<div className="block-editor-global-styles-effects-panel__shadow-indicator-wrapper">
|
|
217
|
+
<Button
|
|
218
|
+
className="block-editor-global-styles-effects-panel__shadow-indicator"
|
|
219
|
+
onClick={ onSelect }
|
|
220
|
+
label={ label }
|
|
221
|
+
style={ { boxShadow: shadow } }
|
|
222
|
+
showTooltip
|
|
223
|
+
>
|
|
224
|
+
{ isActive && <Icon icon={ check } /> }
|
|
225
|
+
</Button>
|
|
226
|
+
</div>
|
|
227
|
+
);
|
|
228
|
+
}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import {
|
|
5
|
+
__experimentalToolsPanel as ToolsPanel,
|
|
6
|
+
__experimentalToolsPanelItem as ToolsPanelItem,
|
|
7
|
+
__experimentalVStack as VStack,
|
|
8
|
+
DuotonePicker,
|
|
9
|
+
} from '@wordpress/components';
|
|
10
|
+
import { __ } from '@wordpress/i18n';
|
|
11
|
+
import { useCallback, useMemo } from '@wordpress/element';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Internal dependencies
|
|
15
|
+
*/
|
|
16
|
+
import { getValueFromVariable } from './utils';
|
|
17
|
+
import { immutableSet } from '../../utils/object';
|
|
18
|
+
|
|
19
|
+
const EMPTY_ARRAY = [];
|
|
20
|
+
function useMultiOriginColorPresets(
|
|
21
|
+
settings,
|
|
22
|
+
{ presetSetting, defaultSetting }
|
|
23
|
+
) {
|
|
24
|
+
const disableDefault = ! settings?.color?.[ defaultSetting ];
|
|
25
|
+
const userPresets =
|
|
26
|
+
settings?.color?.[ presetSetting ]?.custom || EMPTY_ARRAY;
|
|
27
|
+
const themePresets =
|
|
28
|
+
settings?.color?.[ presetSetting ]?.theme || EMPTY_ARRAY;
|
|
29
|
+
const defaultPresets =
|
|
30
|
+
settings?.color?.[ presetSetting ]?.default || EMPTY_ARRAY;
|
|
31
|
+
return useMemo(
|
|
32
|
+
() => [
|
|
33
|
+
...userPresets,
|
|
34
|
+
...themePresets,
|
|
35
|
+
...( disableDefault ? EMPTY_ARRAY : defaultPresets ),
|
|
36
|
+
],
|
|
37
|
+
[ disableDefault, userPresets, themePresets, defaultPresets ]
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export function useHasFiltersPanel( settings ) {
|
|
42
|
+
const hasDuotone = useHasDuotoneControl( settings );
|
|
43
|
+
|
|
44
|
+
return hasDuotone;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function useHasDuotoneControl( settings ) {
|
|
48
|
+
return settings.color.customDuotone || settings.color.defaultDuotone;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function FiltersToolsPanel( {
|
|
52
|
+
resetAllFilter,
|
|
53
|
+
onChange,
|
|
54
|
+
value,
|
|
55
|
+
panelId,
|
|
56
|
+
children,
|
|
57
|
+
} ) {
|
|
58
|
+
const resetAll = () => {
|
|
59
|
+
const updatedValue = resetAllFilter( value );
|
|
60
|
+
onChange( updatedValue );
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
return (
|
|
64
|
+
<ToolsPanel
|
|
65
|
+
label={ __( 'Filters' ) }
|
|
66
|
+
resetAll={ resetAll }
|
|
67
|
+
panelId={ panelId }
|
|
68
|
+
>
|
|
69
|
+
{ children }
|
|
70
|
+
</ToolsPanel>
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const DEFAULT_CONTROLS = {
|
|
75
|
+
duotone: true,
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
export default function FiltersPanel( {
|
|
79
|
+
as: Wrapper = FiltersToolsPanel,
|
|
80
|
+
value,
|
|
81
|
+
onChange,
|
|
82
|
+
inheritedValue = value,
|
|
83
|
+
settings,
|
|
84
|
+
panelId,
|
|
85
|
+
defaultControls = DEFAULT_CONTROLS,
|
|
86
|
+
} ) {
|
|
87
|
+
const decodeValue = ( rawValue ) =>
|
|
88
|
+
getValueFromVariable( { settings }, '', rawValue );
|
|
89
|
+
|
|
90
|
+
// Duotone
|
|
91
|
+
const hasDuotoneEnabled = useHasDuotoneControl( settings );
|
|
92
|
+
const duotonePalette = useMultiOriginColorPresets( settings, {
|
|
93
|
+
presetSetting: 'duotone',
|
|
94
|
+
defaultSetting: 'defaultDuotone',
|
|
95
|
+
} );
|
|
96
|
+
const colorPalette = useMultiOriginColorPresets( settings, {
|
|
97
|
+
presetSetting: 'palette',
|
|
98
|
+
defaultSetting: 'defaultPalette',
|
|
99
|
+
} );
|
|
100
|
+
const duotone = decodeValue( inheritedValue?.filter?.duotone );
|
|
101
|
+
const setDuotone = ( newValue ) => {
|
|
102
|
+
const duotonePreset = duotonePalette.find( ( { colors } ) => {
|
|
103
|
+
return colors === newValue;
|
|
104
|
+
} );
|
|
105
|
+
const settedValue = duotonePreset
|
|
106
|
+
? `var:preset|duotone|${ duotonePreset.slug }`
|
|
107
|
+
: newValue;
|
|
108
|
+
onChange( immutableSet( value, [ 'filter', 'duotone' ], settedValue ) );
|
|
109
|
+
};
|
|
110
|
+
const hasDuotone = () => !! value?.filter?.duotone;
|
|
111
|
+
const resetDuotone = () => setDuotone( undefined );
|
|
112
|
+
|
|
113
|
+
const resetAllFilter = useCallback( ( previousValue ) => {
|
|
114
|
+
return {
|
|
115
|
+
...previousValue,
|
|
116
|
+
filter: {
|
|
117
|
+
...previousValue.filter,
|
|
118
|
+
duotone: undefined,
|
|
119
|
+
},
|
|
120
|
+
};
|
|
121
|
+
}, [] );
|
|
122
|
+
|
|
123
|
+
return (
|
|
124
|
+
<Wrapper
|
|
125
|
+
resetAllFilter={ resetAllFilter }
|
|
126
|
+
value={ value }
|
|
127
|
+
onChange={ onChange }
|
|
128
|
+
panelId={ panelId }
|
|
129
|
+
>
|
|
130
|
+
{ hasDuotoneEnabled && (
|
|
131
|
+
<ToolsPanelItem
|
|
132
|
+
label={ __( 'Duotone' ) }
|
|
133
|
+
hasValue={ hasDuotone }
|
|
134
|
+
onDeselect={ resetDuotone }
|
|
135
|
+
isShownByDefault={ defaultControls.duotone }
|
|
136
|
+
panelId={ panelId }
|
|
137
|
+
>
|
|
138
|
+
<VStack>
|
|
139
|
+
<p>
|
|
140
|
+
{ __(
|
|
141
|
+
'Create a two-tone color effect without losing your original image.'
|
|
142
|
+
) }
|
|
143
|
+
</p>
|
|
144
|
+
<DuotonePicker
|
|
145
|
+
colorPalette={ colorPalette }
|
|
146
|
+
duotonePalette={ duotonePalette }
|
|
147
|
+
disableCustomColors={ true }
|
|
148
|
+
disableCustomDuotone={ true }
|
|
149
|
+
value={ duotone }
|
|
150
|
+
onChange={ setDuotone }
|
|
151
|
+
/>
|
|
152
|
+
</VStack>
|
|
153
|
+
</ToolsPanelItem>
|
|
154
|
+
) }
|
|
155
|
+
</Wrapper>
|
|
156
|
+
);
|
|
157
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { get, isEmpty } from 'lodash';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Internal dependencies
|
|
8
|
+
*/
|
|
9
|
+
import { scopeSelector } from './utils';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Determine the CSS selector for the block type and target provided, returning
|
|
13
|
+
* it if available.
|
|
14
|
+
*
|
|
15
|
+
* @param {import('@wordpress/blocks').Block} blockType The block's type.
|
|
16
|
+
* @param {string|string[]} target The desired selector's target e.g. `root`, delimited string, or array path.
|
|
17
|
+
* @param {Object} options Options object.
|
|
18
|
+
* @param {boolean} options.fallback Whether or not to fallback to broader selector.
|
|
19
|
+
*
|
|
20
|
+
* @return {?string} The CSS selector or `null` if no selector available.
|
|
21
|
+
*/
|
|
22
|
+
export function getBlockCSSSelector(
|
|
23
|
+
blockType,
|
|
24
|
+
target = 'root',
|
|
25
|
+
options = {}
|
|
26
|
+
) {
|
|
27
|
+
if ( ! target ) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const { fallback = false } = options;
|
|
32
|
+
const { name, selectors, supports } = blockType;
|
|
33
|
+
|
|
34
|
+
const hasSelectors = ! isEmpty( selectors );
|
|
35
|
+
const path = Array.isArray( target ) ? target.join( '.' ) : target;
|
|
36
|
+
|
|
37
|
+
// Root selector.
|
|
38
|
+
|
|
39
|
+
// Calculated before returning as it can be used as a fallback for feature
|
|
40
|
+
// selectors later on.
|
|
41
|
+
let rootSelector = null;
|
|
42
|
+
|
|
43
|
+
if ( hasSelectors && selectors.root ) {
|
|
44
|
+
// Use the selectors API if available.
|
|
45
|
+
rootSelector = selectors?.root;
|
|
46
|
+
} else if ( supports?.__experimentalSelector ) {
|
|
47
|
+
// Use the old experimental selector supports property if set.
|
|
48
|
+
rootSelector = supports.__experimentalSelector;
|
|
49
|
+
} else {
|
|
50
|
+
// If no root selector found, generate default block class selector.
|
|
51
|
+
rootSelector =
|
|
52
|
+
'.wp-block-' + name.replace( 'core/', '' ).replace( '/', '-' );
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Return selector if it's the root target we are looking for.
|
|
56
|
+
if ( path === 'root' ) {
|
|
57
|
+
return rootSelector;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// If target is not `root` or `duotone` we have a feature or subfeature
|
|
61
|
+
// as the target. If the target is a string convert to an array.
|
|
62
|
+
const pathArray = Array.isArray( target ) ? target : target.split( '.' );
|
|
63
|
+
|
|
64
|
+
// Feature selectors ( may fallback to root selector );
|
|
65
|
+
if ( pathArray.length === 1 ) {
|
|
66
|
+
const fallbackSelector = fallback ? rootSelector : null;
|
|
67
|
+
|
|
68
|
+
// Prefer the selectors API if available.
|
|
69
|
+
if ( hasSelectors ) {
|
|
70
|
+
// Get selector from either `feature.root` or shorthand path.
|
|
71
|
+
const featureSelector =
|
|
72
|
+
get( selectors, `${ path }.root`, null ) ||
|
|
73
|
+
get( selectors, path, null );
|
|
74
|
+
|
|
75
|
+
// Return feature selector if found or any available fallback.
|
|
76
|
+
return featureSelector || fallbackSelector;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Try getting old experimental supports selector value.
|
|
80
|
+
const featureSelector = get(
|
|
81
|
+
supports,
|
|
82
|
+
`${ path }.__experimentalSelector`,
|
|
83
|
+
null
|
|
84
|
+
);
|
|
85
|
+
|
|
86
|
+
// If nothing to work with, provide fallback selector if available.
|
|
87
|
+
if ( ! featureSelector ) {
|
|
88
|
+
return fallbackSelector;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// Scope the feature selector by the block's root selector.
|
|
92
|
+
return scopeSelector( rootSelector, featureSelector );
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Subfeature selector.
|
|
96
|
+
// This may fallback either to parent feature or root selector.
|
|
97
|
+
let subfeatureSelector;
|
|
98
|
+
|
|
99
|
+
// Use selectors API if available.
|
|
100
|
+
if ( hasSelectors ) {
|
|
101
|
+
subfeatureSelector = get( selectors, path, null );
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Only return if we have a subfeature selector.
|
|
105
|
+
if ( subfeatureSelector ) {
|
|
106
|
+
return subfeatureSelector;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// To this point we don't have a subfeature selector. If a fallback has been
|
|
110
|
+
// requested, remove subfeature from target path and return results of a
|
|
111
|
+
// call for the parent feature's selector.
|
|
112
|
+
if ( fallback ) {
|
|
113
|
+
return getBlockCSSSelector( blockType, pathArray[ 0 ], options );
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// We tried.
|
|
117
|
+
return null;
|
|
118
|
+
}
|