@wordpress/block-editor 11.7.0 → 12.0.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 +8 -0
- package/README.md +56 -57
- package/build/components/block-info-slot-fill/index.js +47 -0
- package/build/components/block-info-slot-fill/index.js.map +1 -0
- package/build/components/block-inspector/index.js +4 -2
- package/build/components/block-inspector/index.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-settings-menu/block-settings-dropdown.js +1 -10
- package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
- package/build/components/block-toolbar/index.js +2 -1
- package/build/components/block-toolbar/index.js.map +1 -1
- package/build/components/block-tools/block-contextual-toolbar.js +83 -9
- package/build/components/block-tools/block-contextual-toolbar.js.map +1 -1
- package/build/components/block-tools/selected-block-popover.js +11 -28
- package/build/components/block-tools/selected-block-popover.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 +4 -3
- package/build/components/editor-styles/index.js.map +1 -1
- package/build/components/font-sizes/fluid-utils.js +21 -14
- package/build/components/font-sizes/fluid-utils.js.map +1 -1
- package/build/components/global-styles/border-panel.js +15 -59
- package/build/components/global-styles/border-panel.js.map +1 -1
- package/build/components/global-styles/color-panel.js +12 -12
- package/build/components/global-styles/color-panel.js.map +1 -1
- package/build/components/global-styles/color-panel.native.js +174 -0
- package/build/components/global-styles/color-panel.native.js.map +1 -0
- package/build/components/global-styles/dimensions-panel.js +21 -20
- 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 +215 -0
- package/build/components/global-styles/filters-panel.js.map +1 -0
- package/build/components/global-styles/get-block-css-selector.js +1 -12
- package/build/components/global-styles/get-block-css-selector.js.map +1 -1
- package/build/components/global-styles/hooks.js +7 -0
- package/build/components/global-styles/hooks.js.map +1 -1
- package/build/components/global-styles/index.js +28 -0
- package/build/components/global-styles/index.js.map +1 -1
- package/build/components/global-styles/typography-panel.js +9 -9
- package/build/components/global-styles/typography-panel.js.map +1 -1
- package/build/components/global-styles/use-global-styles-output.js +100 -82
- package/build/components/global-styles/use-global-styles-output.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/use-dimension-handler.js +5 -3
- package/build/components/image-size-control/use-dimension-handler.js.map +1 -1
- package/build/components/index.js +23 -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/inserter/block-types-tab.js +12 -7
- package/build/components/inserter/block-types-tab.js.map +1 -1
- package/build/components/inserter/index.js +2 -1
- package/build/components/inserter/index.js.map +1 -1
- package/build/components/inspector-controls/groups.js +2 -0
- package/build/components/inspector-controls/groups.js.map +1 -1
- package/build/components/inspector-controls-tabs/styles-tab.js +2 -0
- package/build/components/inspector-controls-tabs/styles-tab.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/list-view/block-select-button.js +7 -2
- package/build/components/list-view/block-select-button.js.map +1 -1
- package/build/components/list-view/block.js +13 -21
- package/build/components/list-view/block.js.map +1 -1
- package/build/components/list-view/drop-indicator.js +37 -10
- package/build/components/list-view/drop-indicator.js.map +1 -1
- package/build/components/list-view/index.js +31 -7
- package/build/components/list-view/index.js.map +1 -1
- package/build/components/list-view/leaf.js +2 -1
- package/build/components/list-view/leaf.js.map +1 -1
- package/build/components/list-view/use-block-selection.js +1 -1
- package/build/components/list-view/use-block-selection.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 +5 -5
- package/build/components/media-replace-flow/index.js.map +1 -1
- package/build/components/navigable-toolbar/index.js +12 -4
- package/build/components/navigable-toolbar/index.js.map +1 -1
- package/build/components/off-canvas-editor/appender.js +2 -7
- package/build/components/off-canvas-editor/appender.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/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/hooks/anchor.js +1 -1
- package/build/hooks/anchor.js.map +1 -1
- package/build/hooks/border.js +1 -1
- package/build/hooks/border.js.map +1 -1
- package/build/hooks/duotone.js +121 -70
- 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/utils.js +22 -7
- package/build/hooks/utils.js.map +1 -1
- package/build/layouts/utils.js +3 -2
- package/build/layouts/utils.js.map +1 -1
- package/build/private-apis.js +13 -1
- package/build/private-apis.js.map +1 -1
- package/build/store/actions.js +8 -1
- package/build/store/actions.js.map +1 -1
- package/build/utils/object.js +6 -6
- package/build/utils/object.js.map +1 -1
- package/build/utils/transform-styles/index.js +2 -2
- package/build/utils/transform-styles/index.js.map +1 -1
- package/build/utils/use-should-contextual-toolbar-show.js +68 -0
- package/build/utils/use-should-contextual-toolbar-show.js.map +1 -0
- package/build-module/components/block-info-slot-fill/index.js +34 -0
- package/build-module/components/block-info-slot-fill/index.js.map +1 -0
- package/build-module/components/block-inspector/index.js +3 -2
- package/build-module/components/block-inspector/index.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-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/block-toolbar/index.js +2 -1
- package/build-module/components/block-toolbar/index.js.map +1 -1
- package/build-module/components/block-tools/block-contextual-toolbar.js +79 -9
- package/build-module/components/block-tools/block-contextual-toolbar.js.map +1 -1
- package/build-module/components/block-tools/selected-block-popover.js +10 -27
- package/build-module/components/block-tools/selected-block-popover.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 +4 -3
- package/build-module/components/editor-styles/index.js.map +1 -1
- package/build-module/components/font-sizes/fluid-utils.js +21 -14
- package/build-module/components/font-sizes/fluid-utils.js.map +1 -1
- package/build-module/components/global-styles/border-panel.js +15 -59
- package/build-module/components/global-styles/border-panel.js.map +1 -1
- package/build-module/components/global-styles/color-panel.js +13 -13
- package/build-module/components/global-styles/color-panel.js.map +1 -1
- package/build-module/components/global-styles/color-panel.native.js +150 -0
- package/build-module/components/global-styles/color-panel.native.js.map +1 -0
- package/build-module/components/global-styles/dimensions-panel.js +22 -21
- 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 +201 -0
- package/build-module/components/global-styles/filters-panel.js.map +1 -0
- package/build-module/components/global-styles/get-block-css-selector.js +1 -12
- package/build-module/components/global-styles/get-block-css-selector.js.map +1 -1
- package/build-module/components/global-styles/hooks.js +7 -0
- package/build-module/components/global-styles/hooks.js.map +1 -1
- package/build-module/components/global-styles/index.js +2 -0
- package/build-module/components/global-styles/index.js.map +1 -1
- package/build-module/components/global-styles/typography-panel.js +10 -10
- package/build-module/components/global-styles/typography-panel.js.map +1 -1
- package/build-module/components/global-styles/use-global-styles-output.js +101 -83
- package/build-module/components/global-styles/use-global-styles-output.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/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/inserter/block-types-tab.js +12 -6
- package/build-module/components/inserter/block-types-tab.js.map +1 -1
- package/build-module/components/inserter/index.js +2 -1
- package/build-module/components/inserter/index.js.map +1 -1
- package/build-module/components/inspector-controls/groups.js +2 -0
- package/build-module/components/inspector-controls/groups.js.map +1 -1
- package/build-module/components/inspector-controls-tabs/styles-tab.js +2 -0
- package/build-module/components/inspector-controls-tabs/styles-tab.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/list-view/block-select-button.js +7 -2
- package/build-module/components/list-view/block-select-button.js.map +1 -1
- package/build-module/components/list-view/block.js +15 -22
- package/build-module/components/list-view/block.js.map +1 -1
- package/build-module/components/list-view/drop-indicator.js +36 -10
- package/build-module/components/list-view/drop-indicator.js.map +1 -1
- package/build-module/components/list-view/index.js +31 -8
- package/build-module/components/list-view/index.js.map +1 -1
- package/build-module/components/list-view/leaf.js +2 -1
- package/build-module/components/list-view/leaf.js.map +1 -1
- package/build-module/components/list-view/use-block-selection.js +1 -1
- package/build-module/components/list-view/use-block-selection.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 +5 -5
- package/build-module/components/media-replace-flow/index.js.map +1 -1
- package/build-module/components/navigable-toolbar/index.js +12 -4
- package/build-module/components/navigable-toolbar/index.js.map +1 -1
- package/build-module/components/off-canvas-editor/appender.js +1 -5
- package/build-module/components/off-canvas-editor/appender.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/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/hooks/anchor.js +1 -1
- package/build-module/hooks/anchor.js.map +1 -1
- package/build-module/hooks/border.js +1 -1
- package/build-module/hooks/border.js.map +1 -1
- package/build-module/hooks/duotone.js +118 -71
- 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/utils.js +24 -9
- package/build-module/hooks/utils.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 +9 -1
- package/build-module/private-apis.js.map +1 -1
- package/build-module/store/actions.js +8 -1
- package/build-module/store/actions.js.map +1 -1
- package/build-module/utils/object.js +5 -5
- package/build-module/utils/object.js.map +1 -1
- package/build-module/utils/transform-styles/index.js +2 -2
- package/build-module/utils/transform-styles/index.js.map +1 -1
- package/build-module/utils/use-should-contextual-toolbar-show.js +56 -0
- package/build-module/utils/use-should-contextual-toolbar-show.js.map +1 -0
- package/build-style/content-rtl.css +9 -6
- package/build-style/content.css +9 -6
- package/build-style/style-rtl.css +272 -54
- package/build-style/style.css +272 -54
- package/package.json +32 -32
- package/src/components/block-info-slot-fill/index.js +24 -0
- package/src/components/block-inspector/index.js +3 -0
- package/src/components/block-inspector/style.scss +6 -4
- package/src/components/block-list/content.scss +16 -15
- 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-mobile-toolbar/test/block-actions-menu.native.js +9 -9
- package/src/components/block-mover/style.scss +10 -4
- package/src/components/block-mover/test/index.native.js +4 -4
- package/src/components/block-popover/inbetween.js +2 -13
- package/src/components/block-settings-menu/block-settings-dropdown.js +2 -12
- package/src/components/block-toolbar/index.js +4 -3
- package/src/components/block-toolbar/style.scss +56 -33
- package/src/components/block-tools/block-contextual-toolbar.js +94 -11
- package/src/components/block-tools/selected-block-popover.js +11 -44
- package/src/components/block-tools/style.scss +157 -3
- package/src/components/caption/index.native.js +0 -1
- package/src/components/date-format-picker/index.js +1 -1
- package/src/components/editor-styles/index.js +9 -5
- package/src/components/font-sizes/fluid-utils.js +31 -14
- package/src/components/font-sizes/test/fluid-utils.js +5 -16
- package/src/components/global-styles/README.md +129 -16
- package/src/components/global-styles/border-panel.js +13 -61
- package/src/components/global-styles/color-panel.js +13 -13
- package/src/components/global-styles/color-panel.native.js +207 -0
- package/src/components/global-styles/dimensions-panel.js +47 -20
- package/src/components/global-styles/effects-panel.js +228 -0
- package/src/components/global-styles/filters-panel.js +230 -0
- package/src/components/global-styles/get-block-css-selector.js +0 -11
- package/src/components/global-styles/hooks.js +10 -0
- package/src/components/global-styles/index.js +2 -0
- package/src/components/global-styles/style.scss +43 -0
- package/src/components/global-styles/test/typography-utils.js +63 -22
- package/src/components/global-styles/test/use-global-styles-output.js +130 -8
- package/src/components/global-styles/typography-panel.js +37 -11
- package/src/components/global-styles/use-global-styles-output.js +88 -72
- package/src/components/iframe/index.js +1 -1
- package/src/components/image-size-control/use-dimension-handler.js +4 -3
- package/src/components/index.js +5 -1
- package/src/components/inserter/block-patterns-tab.js +3 -1
- package/src/components/inserter/block-types-tab.js +9 -6
- package/src/components/inserter/index.js +1 -1
- package/src/components/inspector-controls/groups.js +2 -0
- package/src/components/inspector-controls-tabs/styles-tab.js +1 -0
- package/src/components/inspector-controls-tabs/utils.js +4 -3
- package/src/components/list-view/README.md +2 -0
- package/src/components/list-view/block-select-button.js +6 -1
- package/src/components/list-view/block.js +24 -31
- package/src/components/list-view/drop-indicator.js +67 -22
- package/src/components/list-view/index.js +26 -3
- package/src/components/list-view/leaf.js +1 -0
- package/src/components/list-view/style.scss +18 -4
- package/src/components/list-view/test/use-list-view-drop-zone.js +188 -0
- package/src/components/list-view/use-block-selection.js +1 -1
- 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/README.md +3 -2
- package/src/components/media-replace-flow/index.js +4 -5
- package/src/components/navigable-toolbar/index.js +12 -3
- package/src/components/off-canvas-editor/appender.js +1 -4
- 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/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/url-popover/test/__snapshots__/index.js.snap +3 -3
- package/src/hooks/anchor.js +1 -1
- package/src/hooks/border.js +1 -1
- package/src/hooks/duotone.js +162 -99
- package/src/hooks/margin.js +31 -26
- package/src/hooks/padding.js +24 -18
- package/src/hooks/test/anchor.js +113 -0
- package/src/hooks/test/color.js +0 -9
- package/src/hooks/test/use-typography-props.js +2 -2
- package/src/hooks/test/utils.js +20 -101
- package/src/hooks/utils.js +23 -6
- package/src/layouts/utils.js +2 -2
- package/src/private-apis.js +8 -0
- package/src/store/actions.js +8 -1
- package/src/style.scss +1 -0
- package/src/utils/object.js +5 -5
- package/src/utils/test/object.js +53 -15
- package/src/utils/transform-styles/index.js +2 -2
- package/src/utils/use-should-contextual-toolbar-show.js +75 -0
- package/tsconfig.json +1 -0
- 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.native.js +0 -77
- package/build/hooks/color-panel.native.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.native.js +0 -62
- package/build-module/hooks/color-panel.native.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
- package/src/hooks/color-panel.native.js +0 -63
|
@@ -28,7 +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 {
|
|
31
|
+
import { setImmutably } from '../../utils/object';
|
|
32
32
|
|
|
33
33
|
const AXIAL_SIDES = [ 'horizontal', 'vertical' ];
|
|
34
34
|
|
|
@@ -184,12 +184,13 @@ function DimensionsToolsPanel( {
|
|
|
184
184
|
}
|
|
185
185
|
|
|
186
186
|
const DEFAULT_CONTROLS = {
|
|
187
|
-
contentSize:
|
|
188
|
-
wideSize:
|
|
189
|
-
padding:
|
|
190
|
-
margin:
|
|
191
|
-
blockGap:
|
|
192
|
-
minHeight:
|
|
187
|
+
contentSize: false,
|
|
188
|
+
wideSize: false,
|
|
189
|
+
padding: false,
|
|
190
|
+
margin: false,
|
|
191
|
+
blockGap: false,
|
|
192
|
+
minHeight: false,
|
|
193
|
+
childLayout: true,
|
|
193
194
|
};
|
|
194
195
|
|
|
195
196
|
export default function DimensionsPanel( {
|
|
@@ -225,7 +226,11 @@ export default function DimensionsPanel( {
|
|
|
225
226
|
const contentSizeValue = decodeValue( inheritedValue?.layout?.contentSize );
|
|
226
227
|
const setContentSizeValue = ( newValue ) => {
|
|
227
228
|
onChange(
|
|
228
|
-
|
|
229
|
+
setImmutably(
|
|
230
|
+
value,
|
|
231
|
+
[ 'layout', 'contentSize' ],
|
|
232
|
+
newValue || undefined
|
|
233
|
+
)
|
|
229
234
|
);
|
|
230
235
|
};
|
|
231
236
|
const hasUserSetContentSizeValue = () => !! value?.layout?.contentSize;
|
|
@@ -236,7 +241,13 @@ export default function DimensionsPanel( {
|
|
|
236
241
|
useHasWideSize( settings ) && includeLayoutControls;
|
|
237
242
|
const wideSizeValue = decodeValue( inheritedValue?.layout?.wideSize );
|
|
238
243
|
const setWideSizeValue = ( newValue ) => {
|
|
239
|
-
onChange(
|
|
244
|
+
onChange(
|
|
245
|
+
setImmutably(
|
|
246
|
+
value,
|
|
247
|
+
[ 'layout', 'wideSize' ],
|
|
248
|
+
newValue || undefined
|
|
249
|
+
)
|
|
250
|
+
);
|
|
240
251
|
};
|
|
241
252
|
const hasUserSetWideSizeValue = () => !! value?.layout?.wideSize;
|
|
242
253
|
const resetWideSizeValue = () => setWideSizeValue( undefined );
|
|
@@ -253,7 +264,7 @@ export default function DimensionsPanel( {
|
|
|
253
264
|
paddingSides.some( ( side ) => AXIAL_SIDES.includes( side ) );
|
|
254
265
|
const setPaddingValues = ( newPaddingValues ) => {
|
|
255
266
|
const padding = filterValuesBySides( newPaddingValues, paddingSides );
|
|
256
|
-
onChange(
|
|
267
|
+
onChange( setImmutably( value, [ 'spacing', 'padding' ], padding ) );
|
|
257
268
|
};
|
|
258
269
|
const hasPaddingValue = () =>
|
|
259
270
|
!! value?.spacing?.padding &&
|
|
@@ -273,7 +284,7 @@ export default function DimensionsPanel( {
|
|
|
273
284
|
marginSides.some( ( side ) => AXIAL_SIDES.includes( side ) );
|
|
274
285
|
const setMarginValues = ( newMarginValues ) => {
|
|
275
286
|
const margin = filterValuesBySides( newMarginValues, marginSides );
|
|
276
|
-
onChange(
|
|
287
|
+
onChange( setImmutably( value, [ 'spacing', 'margin' ], margin ) );
|
|
277
288
|
};
|
|
278
289
|
const hasMarginValue = () =>
|
|
279
290
|
!! value?.spacing?.margin &&
|
|
@@ -292,7 +303,7 @@ export default function DimensionsPanel( {
|
|
|
292
303
|
gapSides && gapSides.some( ( side ) => AXIAL_SIDES.includes( side ) );
|
|
293
304
|
const setGapValue = ( newGapValue ) => {
|
|
294
305
|
onChange(
|
|
295
|
-
|
|
306
|
+
setImmutably( value, [ 'spacing', 'blockGap' ], newGapValue )
|
|
296
307
|
);
|
|
297
308
|
};
|
|
298
309
|
const setGapValues = ( nextBoxGapValue ) => {
|
|
@@ -317,7 +328,7 @@ export default function DimensionsPanel( {
|
|
|
317
328
|
const minHeightValue = decodeValue( inheritedValue?.dimensions?.minHeight );
|
|
318
329
|
const setMinHeightValue = ( newValue ) => {
|
|
319
330
|
onChange(
|
|
320
|
-
|
|
331
|
+
setImmutably( value, [ 'dimensions', 'minHeight' ], newValue )
|
|
321
332
|
);
|
|
322
333
|
};
|
|
323
334
|
const resetMinHeightValue = () => {
|
|
@@ -391,7 +402,10 @@ export default function DimensionsPanel( {
|
|
|
391
402
|
label={ __( 'Content size' ) }
|
|
392
403
|
hasValue={ hasUserSetContentSizeValue }
|
|
393
404
|
onDeselect={ resetContentSizeValue }
|
|
394
|
-
isShownByDefault={
|
|
405
|
+
isShownByDefault={
|
|
406
|
+
defaultControls.contentSize ??
|
|
407
|
+
DEFAULT_CONTROLS.contentSize
|
|
408
|
+
}
|
|
395
409
|
panelId={ panelId }
|
|
396
410
|
>
|
|
397
411
|
<HStack alignment="flex-end" justify="flex-start">
|
|
@@ -417,7 +431,9 @@ export default function DimensionsPanel( {
|
|
|
417
431
|
label={ __( 'Wide size' ) }
|
|
418
432
|
hasValue={ hasUserSetWideSizeValue }
|
|
419
433
|
onDeselect={ resetWideSizeValue }
|
|
420
|
-
isShownByDefault={
|
|
434
|
+
isShownByDefault={
|
|
435
|
+
defaultControls.wideSize ?? DEFAULT_CONTROLS.wideSize
|
|
436
|
+
}
|
|
421
437
|
panelId={ panelId }
|
|
422
438
|
>
|
|
423
439
|
<HStack alignment="flex-end" justify="flex-start">
|
|
@@ -442,7 +458,9 @@ export default function DimensionsPanel( {
|
|
|
442
458
|
hasValue={ hasPaddingValue }
|
|
443
459
|
label={ __( 'Padding' ) }
|
|
444
460
|
onDeselect={ resetPaddingValue }
|
|
445
|
-
isShownByDefault={
|
|
461
|
+
isShownByDefault={
|
|
462
|
+
defaultControls.padding ?? DEFAULT_CONTROLS.padding
|
|
463
|
+
}
|
|
446
464
|
className={ classnames( {
|
|
447
465
|
'tools-panel-item-spacing': showSpacingPresetsControl,
|
|
448
466
|
} ) }
|
|
@@ -481,7 +499,9 @@ export default function DimensionsPanel( {
|
|
|
481
499
|
hasValue={ hasMarginValue }
|
|
482
500
|
label={ __( 'Margin' ) }
|
|
483
501
|
onDeselect={ resetMarginValue }
|
|
484
|
-
isShownByDefault={
|
|
502
|
+
isShownByDefault={
|
|
503
|
+
defaultControls.margin ?? DEFAULT_CONTROLS.margin
|
|
504
|
+
}
|
|
485
505
|
className={ classnames( {
|
|
486
506
|
'tools-panel-item-spacing': showSpacingPresetsControl,
|
|
487
507
|
} ) }
|
|
@@ -520,7 +540,9 @@ export default function DimensionsPanel( {
|
|
|
520
540
|
hasValue={ hasGapValue }
|
|
521
541
|
label={ __( 'Block spacing' ) }
|
|
522
542
|
onDeselect={ resetGapValue }
|
|
523
|
-
isShownByDefault={
|
|
543
|
+
isShownByDefault={
|
|
544
|
+
defaultControls.blockGap ?? DEFAULT_CONTROLS.blockGap
|
|
545
|
+
}
|
|
524
546
|
className={ classnames( {
|
|
525
547
|
'tools-panel-item-spacing': showSpacingPresetsControl,
|
|
526
548
|
} ) }
|
|
@@ -566,7 +588,9 @@ export default function DimensionsPanel( {
|
|
|
566
588
|
hasValue={ hasMinHeightValue }
|
|
567
589
|
label={ __( 'Min. height' ) }
|
|
568
590
|
onDeselect={ resetMinHeightValue }
|
|
569
|
-
isShownByDefault={
|
|
591
|
+
isShownByDefault={
|
|
592
|
+
defaultControls.minHeight ?? DEFAULT_CONTROLS.minHeight
|
|
593
|
+
}
|
|
570
594
|
panelId={ panelId }
|
|
571
595
|
>
|
|
572
596
|
<HeightControl
|
|
@@ -583,7 +607,10 @@ export default function DimensionsPanel( {
|
|
|
583
607
|
hasValue={ hasChildLayoutValue }
|
|
584
608
|
label={ childLayoutOrientationLabel }
|
|
585
609
|
onDeselect={ resetChildLayoutValue }
|
|
586
|
-
isShownByDefault={
|
|
610
|
+
isShownByDefault={
|
|
611
|
+
defaultControls.childLayout ??
|
|
612
|
+
DEFAULT_CONTROLS.childLayout
|
|
613
|
+
}
|
|
587
614
|
panelId={ panelId }
|
|
588
615
|
>
|
|
589
616
|
<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 { setImmutably } 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( setImmutably( 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,230 @@
|
|
|
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
|
+
__experimentalZStack as ZStack,
|
|
15
|
+
__experimentalVStack as VStack,
|
|
16
|
+
__experimentalDropdownContentWrapper as DropdownContentWrapper,
|
|
17
|
+
Button,
|
|
18
|
+
ColorIndicator,
|
|
19
|
+
DuotonePicker,
|
|
20
|
+
DuotoneSwatch,
|
|
21
|
+
Dropdown,
|
|
22
|
+
Flex,
|
|
23
|
+
FlexItem,
|
|
24
|
+
} from '@wordpress/components';
|
|
25
|
+
import { __ } from '@wordpress/i18n';
|
|
26
|
+
import { useCallback, useMemo } from '@wordpress/element';
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Internal dependencies
|
|
30
|
+
*/
|
|
31
|
+
import { getValueFromVariable } from './utils';
|
|
32
|
+
import { setImmutably } from '../../utils/object';
|
|
33
|
+
|
|
34
|
+
const EMPTY_ARRAY = [];
|
|
35
|
+
function useMultiOriginColorPresets(
|
|
36
|
+
settings,
|
|
37
|
+
{ presetSetting, defaultSetting }
|
|
38
|
+
) {
|
|
39
|
+
const disableDefault = ! settings?.color?.[ defaultSetting ];
|
|
40
|
+
const userPresets =
|
|
41
|
+
settings?.color?.[ presetSetting ]?.custom || EMPTY_ARRAY;
|
|
42
|
+
const themePresets =
|
|
43
|
+
settings?.color?.[ presetSetting ]?.theme || EMPTY_ARRAY;
|
|
44
|
+
const defaultPresets =
|
|
45
|
+
settings?.color?.[ presetSetting ]?.default || EMPTY_ARRAY;
|
|
46
|
+
return useMemo(
|
|
47
|
+
() => [
|
|
48
|
+
...userPresets,
|
|
49
|
+
...themePresets,
|
|
50
|
+
...( disableDefault ? EMPTY_ARRAY : defaultPresets ),
|
|
51
|
+
],
|
|
52
|
+
[ disableDefault, userPresets, themePresets, defaultPresets ]
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export function useHasFiltersPanel( settings ) {
|
|
57
|
+
const hasDuotone = useHasDuotoneControl( settings );
|
|
58
|
+
|
|
59
|
+
return hasDuotone;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function useHasDuotoneControl( settings ) {
|
|
63
|
+
return settings.color.customDuotone || settings.color.defaultDuotone;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function FiltersToolsPanel( {
|
|
67
|
+
resetAllFilter,
|
|
68
|
+
onChange,
|
|
69
|
+
value,
|
|
70
|
+
panelId,
|
|
71
|
+
children,
|
|
72
|
+
} ) {
|
|
73
|
+
const resetAll = () => {
|
|
74
|
+
const updatedValue = resetAllFilter( value );
|
|
75
|
+
onChange( updatedValue );
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
return (
|
|
79
|
+
<ToolsPanel
|
|
80
|
+
label={ __( 'Filters' ) }
|
|
81
|
+
resetAll={ resetAll }
|
|
82
|
+
panelId={ panelId }
|
|
83
|
+
>
|
|
84
|
+
{ children }
|
|
85
|
+
</ToolsPanel>
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
const DEFAULT_CONTROLS = {
|
|
90
|
+
duotone: true,
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
const popoverProps = {
|
|
94
|
+
placement: 'left-start',
|
|
95
|
+
offset: 36,
|
|
96
|
+
shift: true,
|
|
97
|
+
className: 'block-editor-duotone-control__popover',
|
|
98
|
+
headerTitle: __( 'Duotone' ),
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
const LabeledColorIndicator = ( { indicator, label } ) => (
|
|
102
|
+
<HStack justify="flex-start">
|
|
103
|
+
<ZStack isLayered={ false } offset={ -8 }>
|
|
104
|
+
<Flex expanded={ false }>
|
|
105
|
+
{ indicator === 'unset' || ! indicator ? (
|
|
106
|
+
<ColorIndicator className="block-editor-duotone-control__unset-indicator" />
|
|
107
|
+
) : (
|
|
108
|
+
<DuotoneSwatch values={ indicator } />
|
|
109
|
+
) }
|
|
110
|
+
</Flex>
|
|
111
|
+
</ZStack>
|
|
112
|
+
<FlexItem title={ label }>{ label }</FlexItem>
|
|
113
|
+
</HStack>
|
|
114
|
+
);
|
|
115
|
+
|
|
116
|
+
export default function FiltersPanel( {
|
|
117
|
+
as: Wrapper = FiltersToolsPanel,
|
|
118
|
+
value,
|
|
119
|
+
onChange,
|
|
120
|
+
inheritedValue = value,
|
|
121
|
+
settings,
|
|
122
|
+
panelId,
|
|
123
|
+
defaultControls = DEFAULT_CONTROLS,
|
|
124
|
+
} ) {
|
|
125
|
+
const decodeValue = ( rawValue ) =>
|
|
126
|
+
getValueFromVariable( { settings }, '', rawValue );
|
|
127
|
+
|
|
128
|
+
// Duotone
|
|
129
|
+
const hasDuotoneEnabled = useHasDuotoneControl( settings );
|
|
130
|
+
const duotonePalette = useMultiOriginColorPresets( settings, {
|
|
131
|
+
presetSetting: 'duotone',
|
|
132
|
+
defaultSetting: 'defaultDuotone',
|
|
133
|
+
} );
|
|
134
|
+
const colorPalette = useMultiOriginColorPresets( settings, {
|
|
135
|
+
presetSetting: 'palette',
|
|
136
|
+
defaultSetting: 'defaultPalette',
|
|
137
|
+
} );
|
|
138
|
+
const duotone = decodeValue( inheritedValue?.filter?.duotone );
|
|
139
|
+
const setDuotone = ( newValue ) => {
|
|
140
|
+
const duotonePreset = duotonePalette.find( ( { colors } ) => {
|
|
141
|
+
return colors === newValue;
|
|
142
|
+
} );
|
|
143
|
+
const settedValue = duotonePreset
|
|
144
|
+
? `var:preset|duotone|${ duotonePreset.slug }`
|
|
145
|
+
: newValue;
|
|
146
|
+
onChange( setImmutably( value, [ 'filter', 'duotone' ], settedValue ) );
|
|
147
|
+
};
|
|
148
|
+
const hasDuotone = () => !! value?.filter?.duotone;
|
|
149
|
+
const resetDuotone = () => setDuotone( undefined );
|
|
150
|
+
|
|
151
|
+
const disableCustomColors = ! settings?.color?.custom;
|
|
152
|
+
const disableCustomDuotone =
|
|
153
|
+
! settings?.color?.customDuotone ||
|
|
154
|
+
( colorPalette?.length === 0 && disableCustomColors );
|
|
155
|
+
|
|
156
|
+
const resetAllFilter = useCallback( ( previousValue ) => {
|
|
157
|
+
return {
|
|
158
|
+
...previousValue,
|
|
159
|
+
filter: {
|
|
160
|
+
...previousValue.filter,
|
|
161
|
+
duotone: undefined,
|
|
162
|
+
},
|
|
163
|
+
};
|
|
164
|
+
}, [] );
|
|
165
|
+
|
|
166
|
+
return (
|
|
167
|
+
<Wrapper
|
|
168
|
+
resetAllFilter={ resetAllFilter }
|
|
169
|
+
value={ value }
|
|
170
|
+
onChange={ onChange }
|
|
171
|
+
panelId={ panelId }
|
|
172
|
+
>
|
|
173
|
+
{ hasDuotoneEnabled && (
|
|
174
|
+
<ToolsPanelItem
|
|
175
|
+
label={ __( 'Duotone' ) }
|
|
176
|
+
hasValue={ hasDuotone }
|
|
177
|
+
onDeselect={ resetDuotone }
|
|
178
|
+
isShownByDefault={ defaultControls.duotone }
|
|
179
|
+
panelId={ panelId }
|
|
180
|
+
>
|
|
181
|
+
<Dropdown
|
|
182
|
+
popoverProps={ popoverProps }
|
|
183
|
+
className="block-editor-global-styles-filters-panel__dropdown"
|
|
184
|
+
renderToggle={ ( { onToggle, isOpen } ) => {
|
|
185
|
+
const toggleProps = {
|
|
186
|
+
onClick: onToggle,
|
|
187
|
+
className: classnames( { 'is-open': isOpen } ),
|
|
188
|
+
'aria-expanded': isOpen,
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
return (
|
|
192
|
+
<ItemGroup isBordered isSeparated>
|
|
193
|
+
<Button { ...toggleProps }>
|
|
194
|
+
<LabeledColorIndicator
|
|
195
|
+
indicator={ duotone }
|
|
196
|
+
label={ __( 'Duotone' ) }
|
|
197
|
+
/>
|
|
198
|
+
</Button>
|
|
199
|
+
</ItemGroup>
|
|
200
|
+
);
|
|
201
|
+
} }
|
|
202
|
+
renderContent={ () => (
|
|
203
|
+
<DropdownContentWrapper paddingSize="medium">
|
|
204
|
+
<VStack>
|
|
205
|
+
<p>
|
|
206
|
+
{ __(
|
|
207
|
+
'Create a two-tone color effect without losing your original image.'
|
|
208
|
+
) }
|
|
209
|
+
</p>
|
|
210
|
+
<DuotonePicker
|
|
211
|
+
colorPalette={ colorPalette }
|
|
212
|
+
duotonePalette={ duotonePalette }
|
|
213
|
+
disableCustomColors={
|
|
214
|
+
disableCustomColors
|
|
215
|
+
}
|
|
216
|
+
disableCustomDuotone={
|
|
217
|
+
disableCustomDuotone
|
|
218
|
+
}
|
|
219
|
+
value={ duotone }
|
|
220
|
+
onChange={ setDuotone }
|
|
221
|
+
/>
|
|
222
|
+
</VStack>
|
|
223
|
+
</DropdownContentWrapper>
|
|
224
|
+
) }
|
|
225
|
+
/>
|
|
226
|
+
</ToolsPanelItem>
|
|
227
|
+
) }
|
|
228
|
+
</Wrapper>
|
|
229
|
+
);
|
|
230
|
+
}
|
|
@@ -34,17 +34,6 @@ export function getBlockCSSSelector(
|
|
|
34
34
|
const hasSelectors = ! isEmpty( selectors );
|
|
35
35
|
const path = Array.isArray( target ) ? target.join( '.' ) : target;
|
|
36
36
|
|
|
37
|
-
// Duotone ( no fallback selectors for Duotone ).
|
|
38
|
-
if ( path === 'filter.duotone' ) {
|
|
39
|
-
// If selectors API in use, only use its value or null.
|
|
40
|
-
if ( hasSelectors ) {
|
|
41
|
-
return get( selectors, path, null );
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
// Selectors API, not available, check for old experimental selector.
|
|
45
|
-
return get( supports, 'color.__experimentalDuotone', null );
|
|
46
|
-
}
|
|
47
|
-
|
|
48
37
|
// Root selector.
|
|
49
38
|
|
|
50
39
|
// Calculated before returning as it can be used as a fallback for feature
|
|
@@ -283,6 +283,12 @@ export function useSettingsForBlockElement(
|
|
|
283
283
|
updatedSettings.color.customGradient = false;
|
|
284
284
|
}
|
|
285
285
|
|
|
286
|
+
// If filters are not supported by the block/element, disable duotone.
|
|
287
|
+
if ( ! supportedStyles.includes( 'filter' ) ) {
|
|
288
|
+
updatedSettings.color.defaultDuotone = false;
|
|
289
|
+
updatedSettings.color.customDuotone = false;
|
|
290
|
+
}
|
|
291
|
+
|
|
286
292
|
[
|
|
287
293
|
'lineHeight',
|
|
288
294
|
'fontStyle',
|
|
@@ -360,6 +366,10 @@ export function useSettingsForBlockElement(
|
|
|
360
366
|
}
|
|
361
367
|
} );
|
|
362
368
|
|
|
369
|
+
updatedSettings.shadow = supportedStyles.includes( 'shadow' )
|
|
370
|
+
? updatedSettings.shadow
|
|
371
|
+
: false;
|
|
372
|
+
|
|
363
373
|
return updatedSettings;
|
|
364
374
|
}, [ parentSettings, supportedStyles, supports ] );
|
|
365
375
|
}
|
|
@@ -17,3 +17,5 @@ export {
|
|
|
17
17
|
} from './dimensions-panel';
|
|
18
18
|
export { default as BorderPanel, useHasBorderPanel } from './border-panel';
|
|
19
19
|
export { default as ColorPanel, useHasColorPanel } from './color-panel';
|
|
20
|
+
export { default as EffectsPanel, useHasEffectsPanel } from './effects-panel';
|
|
21
|
+
export { default as FiltersPanel, useHasFiltersPanel } from './filters-panel';
|