@wordpress/block-editor 15.19.1-next.v.202605131032.0 → 15.20.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 +15 -1
- package/build/components/block-card/index.cjs +51 -41
- package/build/components/block-card/index.cjs.map +3 -3
- package/build/components/block-heading-level-dropdown/heading-level-icon.cjs.map +3 -3
- package/build/components/block-icon/index.cjs +7 -1
- package/build/components/block-icon/index.cjs.map +3 -3
- package/build/components/block-inspector/index.cjs +156 -11
- package/build/components/block-inspector/index.cjs.map +3 -3
- package/build/components/block-inspector/inspector-pre-tabs-slot-fill.cjs +38 -0
- package/build/components/block-inspector/inspector-pre-tabs-slot-fill.cjs.map +7 -0
- package/build/components/block-list/use-block-props/index.cjs +1 -1
- package/build/components/block-list/use-block-props/index.cjs.map +2 -2
- package/build/components/block-list/use-block-props/use-focus-handler.cjs +3 -4
- package/build/components/block-list/use-block-props/use-focus-handler.cjs.map +3 -3
- package/build/components/block-list/use-block-props/use-is-hovered.cjs +24 -14
- package/build/components/block-list/use-block-props/use-is-hovered.cjs.map +3 -3
- package/build/components/block-lock/modal.cjs.map +3 -3
- package/build/components/block-patterns-list/index.cjs +13 -2
- package/build/components/block-patterns-list/index.cjs.map +2 -2
- package/build/components/block-popover/index.cjs +13 -3
- package/build/components/block-popover/index.cjs.map +2 -2
- package/build/components/block-toolbar/switch-section-style.cjs.map +3 -3
- package/build/components/block-visibility/modal.cjs.map +3 -3
- package/build/components/block-visibility/viewport-visibility-info.cjs.map +3 -3
- package/build/components/colors-gradients/control.cjs +7 -4
- package/build/components/colors-gradients/control.cjs.map +2 -2
- package/build/components/global-styles/advanced-panel.cjs +24 -22
- package/build/components/global-styles/advanced-panel.cjs.map +3 -3
- package/build/components/global-styles/color-panel.cjs +95 -58
- package/build/components/global-styles/color-panel.cjs.map +2 -2
- package/build/components/global-styles/dimensions-panel.cjs +11 -5
- package/build/components/global-styles/dimensions-panel.cjs.map +2 -2
- package/build/components/global-styles/index.cjs +3 -0
- package/build/components/global-styles/index.cjs.map +2 -2
- package/build/components/global-styles/shadow-panel-components.cjs +38 -26
- package/build/components/global-styles/shadow-panel-components.cjs.map +2 -2
- package/build/components/global-styles/state-control-badges.cjs +69 -0
- package/build/components/global-styles/state-control-badges.cjs.map +7 -0
- package/build/components/global-styles/state-control.cjs +54 -63
- package/build/components/global-styles/state-control.cjs.map +3 -3
- package/build/components/iframe/index.cjs +0 -3
- package/build/components/iframe/index.cjs.map +2 -2
- package/build/components/iframe/use-scale-canvas.cjs +4 -1
- package/build/components/iframe/use-scale-canvas.cjs.map +2 -2
- package/build/components/inserter/hooks/use-patterns-state.cjs +4 -6
- package/build/components/inserter/hooks/use-patterns-state.cjs.map +2 -2
- package/build/components/inserter/index.cjs +1 -0
- package/build/components/inserter/index.cjs.map +2 -2
- package/build/components/inserter/media-tab/media-preview.cjs +27 -18
- package/build/components/inserter/media-tab/media-preview.cjs.map +2 -2
- package/build/components/inserter/media-tab/utils.cjs +1 -1
- package/build/components/inserter/media-tab/utils.cjs.map +2 -2
- package/build/components/inserter/panel.cjs.map +3 -3
- package/build/components/inspector-controls/block-support-tools-panel.cjs +10 -2
- package/build/components/inspector-controls/block-support-tools-panel.cjs.map +2 -2
- package/build/components/inspector-controls/fill.cjs +14 -4
- package/build/components/inspector-controls/fill.cjs.map +2 -2
- package/build/components/inspector-controls/groups.cjs +2 -0
- package/build/components/inspector-controls/groups.cjs.map +2 -2
- package/build/components/inspector-controls-tabs/index.cjs +13 -8
- package/build/components/inspector-controls-tabs/index.cjs.map +3 -3
- package/build/components/inspector-controls-tabs/settings-tab.cjs +1 -4
- package/build/components/inspector-controls-tabs/settings-tab.cjs.map +3 -3
- package/build/components/inspector-controls-tabs/styles-tab.cjs +9 -0
- package/build/components/inspector-controls-tabs/styles-tab.cjs.map +3 -3
- package/build/components/inspector-controls-tabs/use-inspector-controls-tabs.cjs +11 -5
- package/build/components/inspector-controls-tabs/use-inspector-controls-tabs.cjs.map +2 -2
- package/build/components/list-view/block-select-button.cjs +20 -8
- package/build/components/list-view/block-select-button.cjs.map +2 -2
- package/build/components/list-view/block.cjs +2 -1
- package/build/components/list-view/block.cjs.map +2 -2
- package/build/components/preset-input-control/custom-value-controls.cjs +10 -1
- package/build/components/preset-input-control/custom-value-controls.cjs.map +2 -2
- package/build/components/preset-input-control/index.cjs.map +3 -3
- package/build/components/provider/use-media-upload-settings.cjs +1 -0
- package/build/components/provider/use-media-upload-settings.cjs.map +2 -2
- package/build/components/rich-text/event-listeners/enter.cjs +9 -2
- package/build/components/rich-text/event-listeners/enter.cjs.map +3 -3
- package/build/components/rich-text/event-listeners/paste-handler.cjs +4 -4
- package/build/components/rich-text/event-listeners/paste-handler.cjs.map +3 -3
- package/build/hooks/background.cjs +13 -3
- package/build/hooks/background.cjs.map +2 -2
- package/build/hooks/block-fields/link/index.cjs.map +3 -3
- package/build/hooks/block-fields/media/index.cjs.map +3 -3
- package/build/hooks/block-style-state.cjs +112 -0
- package/build/hooks/block-style-state.cjs.map +7 -0
- package/build/hooks/border.cjs +13 -3
- package/build/hooks/border.cjs.map +2 -2
- package/build/hooks/color.cjs +28 -9
- package/build/hooks/color.cjs.map +2 -2
- package/build/hooks/dimensions.cjs +15 -6
- package/build/hooks/dimensions.cjs.map +2 -2
- package/build/hooks/layout-child.cjs +147 -61
- package/build/hooks/layout-child.cjs.map +2 -2
- package/build/hooks/layout.cjs +263 -56
- package/build/hooks/layout.cjs.map +3 -3
- package/build/hooks/state-utils.cjs +94 -0
- package/build/hooks/state-utils.cjs.map +7 -0
- package/build/hooks/states.cjs +124 -0
- package/build/hooks/states.cjs.map +7 -0
- package/build/hooks/style.cjs +304 -17
- package/build/hooks/style.cjs.map +3 -3
- package/build/hooks/typography.cjs +14 -5
- package/build/hooks/typography.cjs.map +2 -2
- package/build/layouts/constrained.cjs +128 -55
- package/build/layouts/constrained.cjs.map +3 -3
- package/build/layouts/flex.cjs +119 -31
- package/build/layouts/flex.cjs.map +3 -3
- package/build/layouts/grid.cjs +103 -40
- package/build/layouts/grid.cjs.map +3 -3
- package/build/private-apis.cjs +2 -0
- package/build/private-apis.cjs.map +2 -2
- package/build/store/private-actions.cjs +18 -0
- package/build/store/private-actions.cjs.map +2 -2
- package/build/store/private-keys.cjs +10 -2
- package/build/store/private-keys.cjs.map +2 -2
- package/build/store/private-selectors.cjs +26 -2
- package/build/store/private-selectors.cjs.map +2 -2
- package/build/store/reducer.cjs +70 -1
- package/build/store/reducer.cjs.map +2 -2
- package/build/store/utils.cjs +1 -1
- package/build/store/utils.cjs.map +2 -2
- package/build/utils/color-values.cjs +44 -0
- package/build/utils/color-values.cjs.map +7 -0
- package/build-module/components/block-card/index.mjs +52 -45
- package/build-module/components/block-card/index.mjs.map +2 -2
- package/build-module/components/block-heading-level-dropdown/heading-level-icon.mjs +2 -2
- package/build-module/components/block-heading-level-dropdown/heading-level-icon.mjs.map +2 -2
- package/build-module/components/block-icon/index.mjs +8 -2
- package/build-module/components/block-icon/index.mjs.map +2 -2
- package/build-module/components/block-inspector/index.mjs +166 -13
- package/build-module/components/block-inspector/index.mjs.map +2 -2
- package/build-module/components/block-inspector/inspector-pre-tabs-slot-fill.mjs +12 -0
- package/build-module/components/block-inspector/inspector-pre-tabs-slot-fill.mjs.map +7 -0
- package/build-module/components/block-list/use-block-props/index.mjs +1 -1
- package/build-module/components/block-list/use-block-props/index.mjs.map +2 -2
- package/build-module/components/block-list/use-block-props/use-focus-handler.mjs +7 -5
- package/build-module/components/block-list/use-block-props/use-focus-handler.mjs.map +2 -2
- package/build-module/components/block-list/use-block-props/use-is-hovered.mjs +28 -15
- package/build-module/components/block-list/use-block-props/use-is-hovered.mjs.map +2 -2
- package/build-module/components/block-lock/modal.mjs +4 -4
- package/build-module/components/block-lock/modal.mjs.map +2 -2
- package/build-module/components/block-patterns-list/index.mjs +14 -4
- package/build-module/components/block-patterns-list/index.mjs.map +2 -2
- package/build-module/components/block-popover/index.mjs +13 -3
- package/build-module/components/block-popover/index.mjs.map +2 -2
- package/build-module/components/block-toolbar/switch-section-style.mjs +2 -2
- package/build-module/components/block-toolbar/switch-section-style.mjs.map +2 -2
- package/build-module/components/block-visibility/modal.mjs +2 -2
- package/build-module/components/block-visibility/modal.mjs.map +2 -2
- package/build-module/components/block-visibility/viewport-visibility-info.mjs +2 -2
- package/build-module/components/block-visibility/viewport-visibility-info.mjs.map +2 -2
- package/build-module/components/colors-gradients/control.mjs +7 -4
- package/build-module/components/colors-gradients/control.mjs.map +2 -2
- package/build-module/components/global-styles/advanced-panel.mjs +25 -27
- package/build-module/components/global-styles/advanced-panel.mjs.map +2 -2
- package/build-module/components/global-styles/color-panel.mjs +96 -59
- package/build-module/components/global-styles/color-panel.mjs.map +2 -2
- package/build-module/components/global-styles/dimensions-panel.mjs +14 -5
- package/build-module/components/global-styles/dimensions-panel.mjs.map +2 -2
- package/build-module/components/global-styles/index.mjs +2 -0
- package/build-module/components/global-styles/index.mjs.map +2 -2
- package/build-module/components/global-styles/shadow-panel-components.mjs +39 -28
- package/build-module/components/global-styles/shadow-panel-components.mjs.map +2 -2
- package/build-module/components/global-styles/state-control-badges.mjs +48 -0
- package/build-module/components/global-styles/state-control-badges.mjs.map +7 -0
- package/build-module/components/global-styles/state-control.mjs +57 -71
- package/build-module/components/global-styles/state-control.mjs.map +2 -2
- package/build-module/components/iframe/index.mjs +0 -3
- package/build-module/components/iframe/index.mjs.map +2 -2
- package/build-module/components/iframe/use-scale-canvas.mjs +4 -1
- package/build-module/components/iframe/use-scale-canvas.mjs.map +2 -2
- package/build-module/components/inserter/hooks/use-patterns-state.mjs +8 -7
- package/build-module/components/inserter/hooks/use-patterns-state.mjs.map +2 -2
- package/build-module/components/inserter/index.mjs +1 -0
- package/build-module/components/inserter/index.mjs.map +2 -2
- package/build-module/components/inserter/media-tab/media-preview.mjs +27 -19
- package/build-module/components/inserter/media-tab/media-preview.mjs.map +2 -2
- package/build-module/components/inserter/media-tab/utils.mjs +1 -1
- package/build-module/components/inserter/media-tab/utils.mjs.map +2 -2
- package/build-module/components/inserter/panel.mjs +2 -2
- package/build-module/components/inserter/panel.mjs.map +2 -2
- package/build-module/components/inspector-controls/block-support-tools-panel.mjs +10 -2
- package/build-module/components/inspector-controls/block-support-tools-panel.mjs.map +2 -2
- package/build-module/components/inspector-controls/fill.mjs +18 -5
- package/build-module/components/inspector-controls/fill.mjs.map +2 -2
- package/build-module/components/inspector-controls/groups.mjs +2 -0
- package/build-module/components/inspector-controls/groups.mjs.map +2 -2
- package/build-module/components/inspector-controls-tabs/index.mjs +14 -10
- package/build-module/components/inspector-controls-tabs/index.mjs.map +2 -2
- package/build-module/components/inspector-controls-tabs/settings-tab.mjs +1 -4
- package/build-module/components/inspector-controls-tabs/settings-tab.mjs.map +2 -2
- package/build-module/components/inspector-controls-tabs/styles-tab.mjs +9 -0
- package/build-module/components/inspector-controls-tabs/styles-tab.mjs.map +2 -2
- package/build-module/components/inspector-controls-tabs/use-inspector-controls-tabs.mjs +11 -5
- package/build-module/components/inspector-controls-tabs/use-inspector-controls-tabs.mjs.map +2 -2
- package/build-module/components/list-view/block-select-button.mjs +20 -9
- package/build-module/components/list-view/block-select-button.mjs.map +2 -2
- package/build-module/components/list-view/block.mjs +2 -1
- package/build-module/components/list-view/block.mjs.map +2 -2
- package/build-module/components/preset-input-control/custom-value-controls.mjs +10 -2
- package/build-module/components/preset-input-control/custom-value-controls.mjs.map +2 -2
- package/build-module/components/preset-input-control/index.mjs +2 -2
- package/build-module/components/preset-input-control/index.mjs.map +2 -2
- package/build-module/components/provider/use-media-upload-settings.mjs +1 -0
- package/build-module/components/provider/use-media-upload-settings.mjs.map +2 -2
- package/build-module/components/rich-text/event-listeners/enter.mjs +9 -2
- package/build-module/components/rich-text/event-listeners/enter.mjs.map +2 -2
- package/build-module/components/rich-text/event-listeners/paste-handler.mjs +4 -4
- package/build-module/components/rich-text/event-listeners/paste-handler.mjs.map +2 -2
- package/build-module/hooks/background.mjs +18 -3
- package/build-module/hooks/background.mjs.map +2 -2
- package/build-module/hooks/block-fields/link/index.mjs +3 -3
- package/build-module/hooks/block-fields/link/index.mjs.map +2 -2
- package/build-module/hooks/block-fields/media/index.mjs +3 -3
- package/build-module/hooks/block-fields/media/index.mjs.map +2 -2
- package/build-module/hooks/block-style-state.mjs +79 -0
- package/build-module/hooks/block-style-state.mjs.map +7 -0
- package/build-module/hooks/border.mjs +18 -3
- package/build-module/hooks/border.mjs.map +2 -2
- package/build-module/hooks/color.mjs +33 -9
- package/build-module/hooks/color.mjs.map +2 -2
- package/build-module/hooks/dimensions.mjs +20 -6
- package/build-module/hooks/dimensions.mjs.map +2 -2
- package/build-module/hooks/layout-child.mjs +141 -61
- package/build-module/hooks/layout-child.mjs.map +2 -2
- package/build-module/hooks/layout.mjs +270 -58
- package/build-module/hooks/layout.mjs.map +2 -2
- package/build-module/hooks/state-utils.mjs +64 -0
- package/build-module/hooks/state-utils.mjs.map +7 -0
- package/build-module/hooks/states.mjs +85 -0
- package/build-module/hooks/states.mjs.map +7 -0
- package/build-module/hooks/style.mjs +309 -18
- package/build-module/hooks/style.mjs.map +2 -2
- package/build-module/hooks/typography.mjs +19 -5
- package/build-module/hooks/typography.mjs.map +2 -2
- package/build-module/layouts/constrained.mjs +130 -57
- package/build-module/layouts/constrained.mjs.map +2 -2
- package/build-module/layouts/flex.mjs +123 -35
- package/build-module/layouts/flex.mjs.map +2 -2
- package/build-module/layouts/grid.mjs +105 -42
- package/build-module/layouts/grid.mjs.map +2 -2
- package/build-module/private-apis.mjs +4 -0
- package/build-module/private-apis.mjs.map +2 -2
- package/build-module/store/private-actions.mjs +16 -0
- package/build-module/store/private-actions.mjs.map +2 -2
- package/build-module/store/private-keys.mjs +7 -1
- package/build-module/store/private-keys.mjs.map +2 -2
- package/build-module/store/private-selectors.mjs +25 -2
- package/build-module/store/private-selectors.mjs.map +2 -2
- package/build-module/store/reducer.mjs +69 -1
- package/build-module/store/reducer.mjs.map +2 -2
- package/build-module/store/utils.mjs +5 -2
- package/build-module/store/utils.mjs.map +2 -2
- package/build-module/utils/color-values.mjs +19 -0
- package/build-module/utils/color-values.mjs.map +7 -0
- package/build-style/content-rtl.css +18 -3
- package/build-style/content.css +18 -3
- package/build-style/style-rtl.css +14 -17
- package/build-style/style.css +14 -17
- package/package.json +41 -41
- package/src/components/audio-player/index.native.js +7 -3
- package/src/components/block-card/index.js +67 -60
- package/src/components/block-heading-level-dropdown/heading-level-icon.js +2 -2
- package/src/components/block-icon/index.js +5 -2
- package/src/components/block-icon/index.native.js +2 -2
- package/src/components/block-inspector/index.js +153 -7
- package/src/components/block-inspector/inspector-pre-tabs-slot-fill.js +11 -0
- package/src/components/block-list/block-selection-button.native.js +3 -3
- package/src/components/block-list/content.scss +0 -6
- package/src/components/block-list/use-block-props/index.js +1 -1
- package/src/components/block-list/use-block-props/use-focus-handler.js +8 -6
- package/src/components/block-list/use-block-props/use-is-hovered.js +32 -15
- package/src/components/block-lock/modal.js +4 -4
- package/src/components/block-patterns-list/index.js +14 -5
- package/src/components/block-patterns-list/stories/index.story.jsx +2 -0
- package/src/components/block-patterns-list/style.scss +0 -1
- package/src/components/block-popover/index.js +20 -10
- package/src/components/block-toolbar/switch-section-style.js +2 -2
- package/src/components/block-visibility/modal.js +2 -2
- package/src/components/block-visibility/viewport-visibility-info.js +2 -2
- package/src/components/colors/test/with-colors.js +1 -1
- package/src/components/colors-gradients/control.js +10 -8
- package/src/components/colors-gradients/test/control.js +98 -1
- package/src/components/global-styles/advanced-panel.js +44 -39
- package/src/components/global-styles/color-panel.js +133 -60
- package/src/components/global-styles/dimensions-panel.js +17 -4
- package/src/components/global-styles/index.js +1 -0
- package/src/components/global-styles/shadow-panel-components.js +29 -19
- package/src/components/global-styles/state-control-badges.js +58 -0
- package/src/components/global-styles/state-control.js +28 -36
- package/src/components/global-styles/test/color-panel.js +135 -0
- package/src/components/iframe/index.js +0 -3
- package/src/components/iframe/use-scale-canvas.js +8 -2
- package/src/components/inserter/hooks/use-patterns-state.js +12 -7
- package/src/components/inserter/index.js +1 -0
- package/src/components/inserter/media-tab/media-preview.js +29 -20
- package/src/components/inserter/media-tab/utils.js +1 -1
- package/src/components/inserter/panel.js +2 -2
- package/src/components/inserter/style.scss +1 -0
- package/src/components/inserter-button/index.native.js +5 -2
- package/src/components/inspector-controls/block-support-tools-panel.js +10 -2
- package/src/components/inspector-controls/fill.js +18 -5
- package/src/components/inspector-controls/groups.js +2 -0
- package/src/components/inspector-controls-tabs/index.js +9 -5
- package/src/components/inspector-controls-tabs/settings-tab.js +1 -7
- package/src/components/inspector-controls-tabs/styles-tab.js +6 -0
- package/src/components/inspector-controls-tabs/use-inspector-controls-tabs.js +13 -7
- package/src/components/list-view/block-select-button.js +19 -9
- package/src/components/list-view/block.js +6 -1
- package/src/components/media-replace-flow/style.scss +0 -18
- package/src/components/preset-input-control/custom-value-controls.js +13 -6
- package/src/components/preset-input-control/index.js +2 -2
- package/src/components/provider/use-media-upload-settings.js +1 -0
- package/src/components/rich-text/event-listeners/enter.js +14 -2
- package/src/components/rich-text/event-listeners/paste-handler.js +5 -4
- package/src/components/unsupported-block-details/index.native.js +6 -2
- package/src/components/video-player/index.native.js +2 -2
- package/src/components/warning/index.native.js +2 -2
- package/src/hooks/background.js +59 -37
- package/src/hooks/block-fields/link/index.js +3 -3
- package/src/hooks/block-fields/media/index.js +3 -3
- package/src/hooks/block-style-state.js +127 -0
- package/src/hooks/border.js +25 -6
- package/src/hooks/color.js +40 -18
- package/src/hooks/dimensions.js +32 -11
- package/src/hooks/layout-child.js +179 -62
- package/src/hooks/layout.js +349 -75
- package/src/hooks/layout.scss +6 -0
- package/src/hooks/state-utils.js +158 -0
- package/src/hooks/states.js +109 -0
- package/src/hooks/style.js +456 -19
- package/src/hooks/test/block-style-state.js +270 -0
- package/src/hooks/test/layout.js +185 -0
- package/src/hooks/test/state-utils.js +193 -0
- package/src/hooks/test/style.js +301 -1
- package/src/hooks/typography.js +33 -14
- package/src/layouts/constrained.js +182 -95
- package/src/layouts/flex.js +141 -36
- package/src/layouts/grid.js +122 -32
- package/src/layouts/test/flex.js +57 -20
- package/src/private-apis.js +4 -0
- package/src/store/private-actions.js +32 -0
- package/src/store/private-keys.js +4 -0
- package/src/store/private-selectors.js +44 -2
- package/src/store/reducer.js +105 -1
- package/src/store/test/private-actions.js +26 -0
- package/src/store/test/private-selectors.js +90 -0
- package/src/store/test/reducer.js +363 -0
- package/src/store/utils.js +6 -2
- package/src/utils/color-values.js +28 -0
- package/src/utils/test/color-values.js +78 -0
package/src/layouts/grid.js
CHANGED
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
__experimentalToggleGroupControlOption as ToggleGroupControlOption,
|
|
14
14
|
__experimentalUnitControl as UnitControl,
|
|
15
15
|
__experimentalParseQuantityAndUnitFromRawValue as parseQuantityAndUnitFromRawValue,
|
|
16
|
-
|
|
16
|
+
__experimentalToolsPanelItem as ToolsPanelItem,
|
|
17
17
|
} from '@wordpress/components';
|
|
18
18
|
import { useState } from '@wordpress/element';
|
|
19
19
|
|
|
@@ -23,7 +23,7 @@ import { useState } from '@wordpress/element';
|
|
|
23
23
|
import { appendSelectors, getBlockGapCSS } from './utils';
|
|
24
24
|
import { getGapCSSValue, getGapBoxControlValueFromStyle } from '../hooks/gap';
|
|
25
25
|
import { getSpacingPresetCssVar } from '../components/spacing-sizes-control/utils';
|
|
26
|
-
import { shouldSkipSerialization } from '../hooks/utils';
|
|
26
|
+
import { cleanEmptyObject, shouldSkipSerialization } from '../hooks/utils';
|
|
27
27
|
import { LAYOUT_DEFINITIONS } from './definitions';
|
|
28
28
|
|
|
29
29
|
const RANGE_CONTROL_MAX_VALUES = {
|
|
@@ -70,6 +70,8 @@ export default {
|
|
|
70
70
|
layout = {},
|
|
71
71
|
onChange,
|
|
72
72
|
layoutBlockSupport = {},
|
|
73
|
+
resetLayout = {},
|
|
74
|
+
clientId,
|
|
73
75
|
} ) {
|
|
74
76
|
const { allowSizingOnChildren = false } = layoutBlockSupport;
|
|
75
77
|
|
|
@@ -79,29 +81,87 @@ export default {
|
|
|
79
81
|
const showMinWidthControl =
|
|
80
82
|
! layout?.isManualPlacement ||
|
|
81
83
|
window.__experimentalEnableGridInteractivity;
|
|
84
|
+
const defaultColumnCount = layout.isManualPlacement ? 3 : undefined;
|
|
85
|
+
const hasLayoutValue = ( key, defaultValue ) =>
|
|
86
|
+
( layout?.[ key ] ?? defaultValue ) !==
|
|
87
|
+
( resetLayout?.[ key ] ?? defaultValue );
|
|
88
|
+
const hasGridTypeValue = () =>
|
|
89
|
+
hasLayoutValue( 'isManualPlacement', false );
|
|
90
|
+
const hasColumnsAndRowsValue = () =>
|
|
91
|
+
hasLayoutValue( 'columnCount', defaultColumnCount ) ||
|
|
92
|
+
hasLayoutValue( 'rowCount' );
|
|
93
|
+
const hasMinimumColumnWidthValue = () =>
|
|
94
|
+
hasLayoutValue( 'minimumColumnWidth' );
|
|
95
|
+
const resetGridType = () =>
|
|
96
|
+
onChange(
|
|
97
|
+
cleanEmptyObject( {
|
|
98
|
+
...layout,
|
|
99
|
+
isManualPlacement: resetLayout?.isManualPlacement,
|
|
100
|
+
rowCount: resetLayout?.rowCount,
|
|
101
|
+
minimumColumnWidth: resetLayout?.minimumColumnWidth,
|
|
102
|
+
} )
|
|
103
|
+
);
|
|
104
|
+
const resetColumnsAndRows = () =>
|
|
105
|
+
onChange(
|
|
106
|
+
cleanEmptyObject( {
|
|
107
|
+
...layout,
|
|
108
|
+
columnCount: resetLayout?.columnCount ?? defaultColumnCount,
|
|
109
|
+
rowCount: resetLayout?.rowCount,
|
|
110
|
+
} )
|
|
111
|
+
);
|
|
112
|
+
const resetMinimumColumnWidth = () =>
|
|
113
|
+
onChange(
|
|
114
|
+
cleanEmptyObject( {
|
|
115
|
+
...layout,
|
|
116
|
+
minimumColumnWidth: resetLayout?.minimumColumnWidth,
|
|
117
|
+
} )
|
|
118
|
+
);
|
|
119
|
+
|
|
82
120
|
return (
|
|
83
121
|
<>
|
|
84
122
|
{ window.__experimentalEnableGridInteractivity && (
|
|
85
|
-
<
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
123
|
+
<ToolsPanelItem
|
|
124
|
+
label={ __( 'Grid item position' ) }
|
|
125
|
+
hasValue={ hasGridTypeValue }
|
|
126
|
+
onDeselect={ resetGridType }
|
|
127
|
+
isShownByDefault
|
|
128
|
+
panelId={ clientId }
|
|
129
|
+
>
|
|
130
|
+
<GridLayoutTypeControl
|
|
131
|
+
layout={ layout }
|
|
132
|
+
onChange={ onChange }
|
|
133
|
+
/>
|
|
134
|
+
</ToolsPanelItem>
|
|
89
135
|
) }
|
|
90
|
-
|
|
91
|
-
|
|
136
|
+
{ showColumnsControl && (
|
|
137
|
+
<ToolsPanelItem
|
|
138
|
+
label={ __( 'Columns and rows' ) }
|
|
139
|
+
hasValue={ hasColumnsAndRowsValue }
|
|
140
|
+
onDeselect={ resetColumnsAndRows }
|
|
141
|
+
isShownByDefault
|
|
142
|
+
panelId={ clientId }
|
|
143
|
+
>
|
|
92
144
|
<GridLayoutColumnsAndRowsControl
|
|
93
145
|
layout={ layout }
|
|
94
146
|
onChange={ onChange }
|
|
95
147
|
allowSizingOnChildren={ allowSizingOnChildren }
|
|
96
148
|
/>
|
|
97
|
-
|
|
98
|
-
|
|
149
|
+
</ToolsPanelItem>
|
|
150
|
+
) }
|
|
151
|
+
{ showMinWidthControl && (
|
|
152
|
+
<ToolsPanelItem
|
|
153
|
+
label={ __( 'Min. column width' ) }
|
|
154
|
+
hasValue={ hasMinimumColumnWidthValue }
|
|
155
|
+
onDeselect={ resetMinimumColumnWidth }
|
|
156
|
+
isShownByDefault
|
|
157
|
+
panelId={ clientId }
|
|
158
|
+
>
|
|
99
159
|
<GridLayoutMinimumWidthControl
|
|
100
160
|
layout={ layout }
|
|
101
161
|
onChange={ onChange }
|
|
102
162
|
/>
|
|
103
|
-
|
|
104
|
-
|
|
163
|
+
</ToolsPanelItem>
|
|
164
|
+
) }
|
|
105
165
|
</>
|
|
106
166
|
);
|
|
107
167
|
},
|
|
@@ -110,18 +170,25 @@ export default {
|
|
|
110
170
|
},
|
|
111
171
|
getLayoutStyle: function getLayoutStyle( {
|
|
112
172
|
selector,
|
|
113
|
-
layout,
|
|
173
|
+
layout = {},
|
|
174
|
+
viewportOverrides,
|
|
114
175
|
style,
|
|
115
176
|
blockName,
|
|
116
177
|
hasBlockGapSupport,
|
|
117
178
|
globalBlockGapValue,
|
|
118
179
|
layoutDefinitions = LAYOUT_DEFINITIONS,
|
|
119
180
|
} ) {
|
|
181
|
+
const hasViewportOverrides = viewportOverrides !== undefined;
|
|
182
|
+
const effectiveLayout = hasViewportOverrides
|
|
183
|
+
? { ...layout, ...viewportOverrides }
|
|
184
|
+
: layout;
|
|
185
|
+
const hasViewportOverride = ( key ) =>
|
|
186
|
+
Object.hasOwn( viewportOverrides || {}, key );
|
|
120
187
|
const {
|
|
121
188
|
minimumColumnWidth = null,
|
|
122
189
|
columnCount = null,
|
|
123
190
|
rowCount = null,
|
|
124
|
-
} =
|
|
191
|
+
} = effectiveLayout;
|
|
125
192
|
|
|
126
193
|
// Check that the grid layout attributes are of the correct type, so that we don't accidentally
|
|
127
194
|
// write code that stores a string attribute instead of a number.
|
|
@@ -159,11 +226,27 @@ export default {
|
|
|
159
226
|
! shouldSkipSerialization( blockName, 'spacing', 'blockGap' )
|
|
160
227
|
? getGapCSSValue( style?.spacing?.blockGap, fallbackGapValue )
|
|
161
228
|
: undefined;
|
|
229
|
+
const hasBlockGapOverride =
|
|
230
|
+
! hasViewportOverrides ||
|
|
231
|
+
Object.hasOwn( style?.spacing || {}, 'blockGap' );
|
|
162
232
|
|
|
163
233
|
let output = '';
|
|
164
234
|
const rules = [];
|
|
235
|
+
const shouldOutputGridColumns =
|
|
236
|
+
! hasViewportOverrides ||
|
|
237
|
+
hasViewportOverride( 'minimumColumnWidth' ) ||
|
|
238
|
+
hasViewportOverride( 'columnCount' ) ||
|
|
239
|
+
( hasBlockGapOverride && minimumColumnWidth && columnCount > 0 );
|
|
240
|
+
const shouldOutputGridRows =
|
|
241
|
+
( ! hasViewportOverrides || hasViewportOverride( 'rowCount' ) ) &&
|
|
242
|
+
columnCount &&
|
|
243
|
+
rowCount;
|
|
165
244
|
|
|
166
|
-
if (
|
|
245
|
+
if (
|
|
246
|
+
shouldOutputGridColumns &&
|
|
247
|
+
minimumColumnWidth &&
|
|
248
|
+
columnCount > 0
|
|
249
|
+
) {
|
|
167
250
|
let blockGapToUse = blockGapValue || fallbackGapValue;
|
|
168
251
|
// Ensure 0 values have a unit so they work in calc().
|
|
169
252
|
if ( blockGapToUse === '0' || blockGapToUse === 0 ) {
|
|
@@ -173,29 +256,36 @@ export default {
|
|
|
173
256
|
columnCount - 1
|
|
174
257
|
}) ) / ${ columnCount })`;
|
|
175
258
|
rules.push(
|
|
176
|
-
`grid-template-columns: repeat(auto-fill, minmax(${ maxValue }, 1fr))
|
|
177
|
-
`container-type: inline-size`
|
|
259
|
+
`grid-template-columns: repeat(auto-fill, minmax(${ maxValue }, 1fr))`
|
|
178
260
|
);
|
|
179
|
-
|
|
180
|
-
rules.push(
|
|
181
|
-
`grid-template-rows: repeat(${ rowCount }, minmax(1rem, auto))`
|
|
182
|
-
);
|
|
183
|
-
}
|
|
184
|
-
} else if ( columnCount ) {
|
|
261
|
+
} else if ( shouldOutputGridColumns && columnCount ) {
|
|
185
262
|
rules.push(
|
|
186
263
|
`grid-template-columns: repeat(${ columnCount }, minmax(0, 1fr))`
|
|
187
264
|
);
|
|
188
|
-
|
|
189
|
-
rules.push(
|
|
190
|
-
`grid-template-rows: repeat(${ rowCount }, minmax(1rem, auto))`
|
|
191
|
-
);
|
|
192
|
-
}
|
|
193
|
-
} else {
|
|
265
|
+
} else if ( shouldOutputGridColumns ) {
|
|
194
266
|
rules.push(
|
|
195
267
|
`grid-template-columns: repeat(auto-fill, minmax(min(${
|
|
196
268
|
minimumColumnWidth || '12rem'
|
|
197
|
-
}, 100%), 1fr))
|
|
198
|
-
|
|
269
|
+
}, 100%), 1fr))`
|
|
270
|
+
);
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
if ( shouldOutputGridColumns ) {
|
|
274
|
+
const baseHasContainerType =
|
|
275
|
+
! layout?.columnCount ||
|
|
276
|
+
( layout?.columnCount && layout?.minimumColumnWidth );
|
|
277
|
+
const needsContainerType = ! columnCount || minimumColumnWidth;
|
|
278
|
+
if (
|
|
279
|
+
needsContainerType &&
|
|
280
|
+
( ! hasViewportOverrides || ! baseHasContainerType )
|
|
281
|
+
) {
|
|
282
|
+
rules.push( 'container-type: inline-size' );
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
if ( shouldOutputGridRows ) {
|
|
287
|
+
rules.push(
|
|
288
|
+
`grid-template-rows: repeat(${ rowCount }, minmax(1rem, auto))`
|
|
199
289
|
);
|
|
200
290
|
}
|
|
201
291
|
|
|
@@ -206,7 +296,7 @@ export default {
|
|
|
206
296
|
}
|
|
207
297
|
|
|
208
298
|
// Output blockGap styles based on rules contained in layout definitions in theme.json.
|
|
209
|
-
if ( hasBlockGapSupport && blockGapValue ) {
|
|
299
|
+
if ( hasBlockGapSupport && hasBlockGapOverride && blockGapValue ) {
|
|
210
300
|
output += getBlockGapCSS(
|
|
211
301
|
selector,
|
|
212
302
|
layoutDefinitions,
|
package/src/layouts/test/flex.js
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
* External dependencies
|
|
3
3
|
*/
|
|
4
4
|
import { render, screen } from '@testing-library/react';
|
|
5
|
+
import userEvent from '@testing-library/user-event';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* WordPress dependencies
|
|
9
|
+
*/
|
|
10
|
+
import { __experimentalToolsPanel as ToolsPanel } from '@wordpress/components';
|
|
5
11
|
|
|
6
12
|
/**
|
|
7
13
|
* Internal dependencies
|
|
@@ -9,6 +15,20 @@ import { render, screen } from '@testing-library/react';
|
|
|
9
15
|
import flex from '../flex';
|
|
10
16
|
|
|
11
17
|
const FlexLayoutInspectorControls = flex.inspectorControls;
|
|
18
|
+
const PANEL_ID = 'test-panel';
|
|
19
|
+
|
|
20
|
+
function renderInspectorControls( props = {} ) {
|
|
21
|
+
return render(
|
|
22
|
+
<ToolsPanel label="Layout" resetAll={ jest.fn() } panelId={ PANEL_ID }>
|
|
23
|
+
<FlexLayoutInspectorControls
|
|
24
|
+
clientId={ PANEL_ID }
|
|
25
|
+
layout={ {} }
|
|
26
|
+
onChange={ jest.fn() }
|
|
27
|
+
{ ...props }
|
|
28
|
+
/>
|
|
29
|
+
</ToolsPanel>
|
|
30
|
+
);
|
|
31
|
+
}
|
|
12
32
|
|
|
13
33
|
describe( 'getLayoutStyle', () => {
|
|
14
34
|
it( 'should return an empty string if no non-default params are provided', () => {
|
|
@@ -28,10 +48,20 @@ describe( 'getLayoutStyle', () => {
|
|
|
28
48
|
} );
|
|
29
49
|
|
|
30
50
|
describe( 'FlexLayoutInspectorControls', () => {
|
|
31
|
-
it( 'should render the wrap toggle by default', () => {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
51
|
+
it( 'should not render the wrap toggle by default', () => {
|
|
52
|
+
renderInspectorControls();
|
|
53
|
+
|
|
54
|
+
expect(
|
|
55
|
+
screen.queryByRole( 'checkbox', {
|
|
56
|
+
name: 'Allow to wrap to multiple lines',
|
|
57
|
+
} )
|
|
58
|
+
).not.toBeInTheDocument();
|
|
59
|
+
} );
|
|
60
|
+
|
|
61
|
+
it( 'should render the wrap toggle when it has a value', () => {
|
|
62
|
+
renderInspectorControls( {
|
|
63
|
+
layout: { flexWrap: 'nowrap' },
|
|
64
|
+
} );
|
|
35
65
|
|
|
36
66
|
expect(
|
|
37
67
|
screen.getByRole( 'checkbox', {
|
|
@@ -40,13 +70,19 @@ describe( 'FlexLayoutInspectorControls', () => {
|
|
|
40
70
|
).toBeInTheDocument();
|
|
41
71
|
} );
|
|
42
72
|
|
|
43
|
-
it( 'should
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
73
|
+
it( 'should allow the wrap toggle to be selected from the tools panel menu', async () => {
|
|
74
|
+
const user = userEvent.setup();
|
|
75
|
+
renderInspectorControls( {
|
|
76
|
+
layoutBlockSupport: { allowWrap: true },
|
|
77
|
+
} );
|
|
78
|
+
|
|
79
|
+
await user.click(
|
|
80
|
+
screen.getByRole( 'button', { name: /Layout options/i } )
|
|
81
|
+
);
|
|
82
|
+
await user.click(
|
|
83
|
+
screen.getByRole( 'menuitemcheckbox', {
|
|
84
|
+
name: 'Show Wrapping',
|
|
85
|
+
} )
|
|
50
86
|
);
|
|
51
87
|
|
|
52
88
|
expect(
|
|
@@ -56,18 +92,19 @@ describe( 'FlexLayoutInspectorControls', () => {
|
|
|
56
92
|
).toBeInTheDocument();
|
|
57
93
|
} );
|
|
58
94
|
|
|
59
|
-
it( 'should not
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
95
|
+
it( 'should not include the wrap toggle in the tools panel menu when allowWrap is false', async () => {
|
|
96
|
+
const user = userEvent.setup();
|
|
97
|
+
renderInspectorControls( {
|
|
98
|
+
layoutBlockSupport: { allowWrap: false },
|
|
99
|
+
} );
|
|
100
|
+
|
|
101
|
+
await user.click(
|
|
102
|
+
screen.getByRole( 'button', { name: /Layout options/i } )
|
|
66
103
|
);
|
|
67
104
|
|
|
68
105
|
expect(
|
|
69
|
-
screen.queryByRole( '
|
|
70
|
-
name: '
|
|
106
|
+
screen.queryByRole( 'menuitemcheckbox', {
|
|
107
|
+
name: 'Show Wrapping',
|
|
71
108
|
} )
|
|
72
109
|
).not.toBeInTheDocument();
|
|
73
110
|
} );
|
package/src/private-apis.js
CHANGED
|
@@ -40,12 +40,14 @@ import { useFlashEditableBlocks } from './components/use-flash-editable-blocks';
|
|
|
40
40
|
import {
|
|
41
41
|
selectBlockPatternsKey,
|
|
42
42
|
reusableBlocksSelectKey,
|
|
43
|
+
userPatternCategoriesSelectKey,
|
|
43
44
|
globalStylesDataKey,
|
|
44
45
|
globalStylesLinksDataKey,
|
|
45
46
|
sectionRootClientIdKey,
|
|
46
47
|
mediaEditKey,
|
|
47
48
|
getMediaSelectKey,
|
|
48
49
|
deviceTypeKey,
|
|
50
|
+
onViewportStateChangeKey,
|
|
49
51
|
isIsolatedEditorKey,
|
|
50
52
|
isNavigationOverlayContextKey,
|
|
51
53
|
isNavigationPostEditorKey,
|
|
@@ -118,6 +120,7 @@ lock( privateApis, {
|
|
|
118
120
|
PrivateRichText,
|
|
119
121
|
PrivateInserterLibrary,
|
|
120
122
|
reusableBlocksSelectKey,
|
|
123
|
+
userPatternCategoriesSelectKey,
|
|
121
124
|
PrivateBlockPopover,
|
|
122
125
|
PrivatePublishDateTimePicker,
|
|
123
126
|
useSpacingSizes,
|
|
@@ -130,6 +133,7 @@ lock( privateApis, {
|
|
|
130
133
|
mediaEditKey,
|
|
131
134
|
getMediaSelectKey,
|
|
132
135
|
deviceTypeKey,
|
|
136
|
+
onViewportStateChangeKey,
|
|
133
137
|
isIsolatedEditorKey,
|
|
134
138
|
isNavigationOverlayContextKey,
|
|
135
139
|
isNavigationPostEditorKey,
|
|
@@ -529,3 +529,35 @@ export function clearRequestedInspectorTab() {
|
|
|
529
529
|
type: 'CLEAR_REQUESTED_INSPECTOR_TAB',
|
|
530
530
|
};
|
|
531
531
|
}
|
|
532
|
+
|
|
533
|
+
/**
|
|
534
|
+
* Sets the selected style state for a block's style controls.
|
|
535
|
+
*
|
|
536
|
+
* @param {string} clientId The block client ID.
|
|
537
|
+
* @param {Object} value The selected state value.
|
|
538
|
+
*
|
|
539
|
+
* @return {Object} Action object.
|
|
540
|
+
*/
|
|
541
|
+
export function setSelectedBlockStyleState( clientId, value ) {
|
|
542
|
+
return {
|
|
543
|
+
type: 'SET_SELECTED_BLOCK_STYLE_STATE',
|
|
544
|
+
clientId,
|
|
545
|
+
value,
|
|
546
|
+
};
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
/**
|
|
550
|
+
* Sets whether the selected style state is shown on the canvas.
|
|
551
|
+
*
|
|
552
|
+
* @param {string} clientId The block client ID.
|
|
553
|
+
* @param {boolean} value Whether to show the selected state on the canvas.
|
|
554
|
+
*
|
|
555
|
+
* @return {Object} Action object.
|
|
556
|
+
*/
|
|
557
|
+
export function setSelectedBlockStyleStateCanvasPreview( clientId, value ) {
|
|
558
|
+
return {
|
|
559
|
+
type: 'SET_SELECTED_BLOCK_STYLE_STATE_CANVAS_PREVIEW',
|
|
560
|
+
clientId,
|
|
561
|
+
value,
|
|
562
|
+
};
|
|
563
|
+
}
|
|
@@ -2,11 +2,15 @@ export const globalStylesDataKey = Symbol( 'globalStylesDataKey' );
|
|
|
2
2
|
export const globalStylesLinksDataKey = Symbol( 'globalStylesLinks' );
|
|
3
3
|
export const selectBlockPatternsKey = Symbol( 'selectBlockPatternsKey' );
|
|
4
4
|
export const reusableBlocksSelectKey = Symbol( 'reusableBlocksSelect' );
|
|
5
|
+
export const userPatternCategoriesSelectKey = Symbol(
|
|
6
|
+
'userPatternCategoriesSelect'
|
|
7
|
+
);
|
|
5
8
|
export const sectionRootClientIdKey = Symbol( 'sectionRootClientIdKey' );
|
|
6
9
|
export const mediaEditKey = Symbol( 'mediaEditKey' );
|
|
7
10
|
export const getMediaSelectKey = Symbol( 'getMediaSelect' );
|
|
8
11
|
export const isIsolatedEditorKey = Symbol( 'isIsolatedEditor' );
|
|
9
12
|
export const deviceTypeKey = Symbol( 'deviceTypeKey' );
|
|
13
|
+
export const onViewportStateChangeKey = Symbol( 'onViewportStateChangeKey' );
|
|
10
14
|
export const isNavigationOverlayContextKey = Symbol(
|
|
11
15
|
'isNavigationOverlayContext'
|
|
12
16
|
);
|
|
@@ -34,6 +34,7 @@ import { unlock } from '../lock-unlock';
|
|
|
34
34
|
import {
|
|
35
35
|
selectBlockPatternsKey,
|
|
36
36
|
reusableBlocksSelectKey,
|
|
37
|
+
userPatternCategoriesSelectKey,
|
|
37
38
|
sectionRootClientIdKey,
|
|
38
39
|
isIsolatedEditorKey,
|
|
39
40
|
} from './private-keys';
|
|
@@ -361,7 +362,9 @@ export const getPatternBySlug = createRegistrySelector( ( select ) =>
|
|
|
361
362
|
|
|
362
363
|
return mapUserPattern(
|
|
363
364
|
block,
|
|
364
|
-
state.settings
|
|
365
|
+
state.settings[ userPatternCategoriesSelectKey ]?.(
|
|
366
|
+
select
|
|
367
|
+
) ?? state.settings.__experimentalUserPatternCategories
|
|
365
368
|
);
|
|
366
369
|
}
|
|
367
370
|
|
|
@@ -393,7 +396,9 @@ export const getAllPatterns = createRegistrySelector( ( select ) =>
|
|
|
393
396
|
.map( ( userPattern ) =>
|
|
394
397
|
mapUserPattern(
|
|
395
398
|
userPattern,
|
|
396
|
-
state.settings
|
|
399
|
+
state.settings[ userPatternCategoriesSelectKey ]?.(
|
|
400
|
+
select
|
|
401
|
+
) ?? state.settings.__experimentalUserPatternCategories
|
|
397
402
|
)
|
|
398
403
|
),
|
|
399
404
|
// This setting is left for back compat.
|
|
@@ -1052,3 +1057,40 @@ export function getViewportModalClientIds( state ) {
|
|
|
1052
1057
|
export function getRequestedInspectorTab( state ) {
|
|
1053
1058
|
return state.requestedInspectorTab;
|
|
1054
1059
|
}
|
|
1060
|
+
|
|
1061
|
+
const DEFAULT_BLOCK_STYLE_STATE = {
|
|
1062
|
+
viewport: 'default',
|
|
1063
|
+
pseudo: 'default',
|
|
1064
|
+
};
|
|
1065
|
+
|
|
1066
|
+
/**
|
|
1067
|
+
* Returns the selected style state for a block's style controls.
|
|
1068
|
+
*
|
|
1069
|
+
* @param {Object} state Global application state.
|
|
1070
|
+
* @param {string} clientId The block client ID.
|
|
1071
|
+
*
|
|
1072
|
+
* @return {Object} The selected block style state.
|
|
1073
|
+
*/
|
|
1074
|
+
export function getSelectedBlockStyleState( state, clientId ) {
|
|
1075
|
+
if ( state.selectedBlockStyleState?.clientId !== clientId ) {
|
|
1076
|
+
return DEFAULT_BLOCK_STYLE_STATE;
|
|
1077
|
+
}
|
|
1078
|
+
|
|
1079
|
+
return state.selectedBlockStyleState.value ?? DEFAULT_BLOCK_STYLE_STATE;
|
|
1080
|
+
}
|
|
1081
|
+
|
|
1082
|
+
/**
|
|
1083
|
+
* Returns whether the selected style state is shown on the canvas.
|
|
1084
|
+
*
|
|
1085
|
+
* @param {Object} state Global application state.
|
|
1086
|
+
* @param {string} clientId The block client ID.
|
|
1087
|
+
*
|
|
1088
|
+
* @return {boolean} Whether the selected style state is shown on the canvas.
|
|
1089
|
+
*/
|
|
1090
|
+
export function isSelectedBlockStyleStateShownOnCanvas( state, clientId ) {
|
|
1091
|
+
if ( state.selectedBlockStyleState?.clientId !== clientId ) {
|
|
1092
|
+
return true;
|
|
1093
|
+
}
|
|
1094
|
+
|
|
1095
|
+
return state.selectedBlockStyleState.showStateOnCanvas ?? true;
|
|
1096
|
+
}
|
package/src/store/reducer.js
CHANGED
|
@@ -2259,7 +2259,7 @@ export function listViewContentPanelOpen( state = false, action ) {
|
|
|
2259
2259
|
* @param {Object|null} state Current state.
|
|
2260
2260
|
* @param {Object} action Dispatched action.
|
|
2261
2261
|
*
|
|
2262
|
-
* @return {Object|
|
|
2262
|
+
* @return {Object|undefined} Updated state.
|
|
2263
2263
|
*/
|
|
2264
2264
|
export function requestedInspectorTab( state = null, action ) {
|
|
2265
2265
|
switch ( action.type ) {
|
|
@@ -2275,6 +2275,109 @@ export function requestedInspectorTab( state = null, action ) {
|
|
|
2275
2275
|
return state;
|
|
2276
2276
|
}
|
|
2277
2277
|
|
|
2278
|
+
/**
|
|
2279
|
+
* Reducer tracking the selected style state for block style controls.
|
|
2280
|
+
*
|
|
2281
|
+
* @param {Object} state Current state.
|
|
2282
|
+
* @param {Object} action Dispatched action.
|
|
2283
|
+
*
|
|
2284
|
+
* @return {Object|null} Updated state.
|
|
2285
|
+
*/
|
|
2286
|
+
export function selectedBlockStyleState( state = undefined, action ) {
|
|
2287
|
+
switch ( action.type ) {
|
|
2288
|
+
case 'SET_SELECTED_BLOCK_STYLE_STATE': {
|
|
2289
|
+
if ( ! action.clientId || ! action.value ) {
|
|
2290
|
+
return undefined;
|
|
2291
|
+
}
|
|
2292
|
+
const showStateOnCanvas =
|
|
2293
|
+
state?.clientId === action.clientId
|
|
2294
|
+
? state.showStateOnCanvas ?? true
|
|
2295
|
+
: true;
|
|
2296
|
+
const previousValue =
|
|
2297
|
+
state?.clientId === action.clientId ? state.value : {};
|
|
2298
|
+
|
|
2299
|
+
return {
|
|
2300
|
+
clientId: action.clientId,
|
|
2301
|
+
showStateOnCanvas,
|
|
2302
|
+
value: {
|
|
2303
|
+
viewport: 'default',
|
|
2304
|
+
pseudo: 'default',
|
|
2305
|
+
...previousValue,
|
|
2306
|
+
...action.value,
|
|
2307
|
+
},
|
|
2308
|
+
};
|
|
2309
|
+
}
|
|
2310
|
+
|
|
2311
|
+
case 'SET_SELECTED_BLOCK_STYLE_STATE_CANVAS_PREVIEW': {
|
|
2312
|
+
if ( ! action.clientId || typeof action.value !== 'boolean' ) {
|
|
2313
|
+
return state;
|
|
2314
|
+
}
|
|
2315
|
+
|
|
2316
|
+
const previousValue =
|
|
2317
|
+
state?.clientId === action.clientId ? state.value : {};
|
|
2318
|
+
|
|
2319
|
+
return {
|
|
2320
|
+
clientId: action.clientId,
|
|
2321
|
+
showStateOnCanvas: action.value,
|
|
2322
|
+
value: {
|
|
2323
|
+
viewport: 'default',
|
|
2324
|
+
pseudo: 'default',
|
|
2325
|
+
...previousValue,
|
|
2326
|
+
},
|
|
2327
|
+
};
|
|
2328
|
+
}
|
|
2329
|
+
|
|
2330
|
+
case 'SELECT_BLOCK':
|
|
2331
|
+
case 'SELECTION_CHANGE': {
|
|
2332
|
+
if ( state?.clientId && state.clientId !== action.clientId ) {
|
|
2333
|
+
return undefined;
|
|
2334
|
+
}
|
|
2335
|
+
|
|
2336
|
+
break;
|
|
2337
|
+
}
|
|
2338
|
+
|
|
2339
|
+
case 'RESET_SELECTION': {
|
|
2340
|
+
if (
|
|
2341
|
+
state?.clientId &&
|
|
2342
|
+
state.clientId !== action.selectionStart?.clientId
|
|
2343
|
+
) {
|
|
2344
|
+
return undefined;
|
|
2345
|
+
}
|
|
2346
|
+
|
|
2347
|
+
break;
|
|
2348
|
+
}
|
|
2349
|
+
|
|
2350
|
+
case 'CLEAR_SELECTED_BLOCK':
|
|
2351
|
+
case 'MULTI_SELECT':
|
|
2352
|
+
return undefined;
|
|
2353
|
+
|
|
2354
|
+
case 'REMOVE_BLOCKS':
|
|
2355
|
+
case 'REPLACE_BLOCKS': {
|
|
2356
|
+
if (
|
|
2357
|
+
state?.clientId &&
|
|
2358
|
+
action.clientIds?.includes( state.clientId )
|
|
2359
|
+
) {
|
|
2360
|
+
return undefined;
|
|
2361
|
+
}
|
|
2362
|
+
|
|
2363
|
+
break;
|
|
2364
|
+
}
|
|
2365
|
+
|
|
2366
|
+
case 'RESET_BLOCKS': {
|
|
2367
|
+
if (
|
|
2368
|
+
state?.clientId &&
|
|
2369
|
+
! getFlattenedClientIds( action.blocks )[ state.clientId ]
|
|
2370
|
+
) {
|
|
2371
|
+
return undefined;
|
|
2372
|
+
}
|
|
2373
|
+
|
|
2374
|
+
break;
|
|
2375
|
+
}
|
|
2376
|
+
}
|
|
2377
|
+
|
|
2378
|
+
return state;
|
|
2379
|
+
}
|
|
2380
|
+
|
|
2278
2381
|
const combinedReducers = combineReducers( {
|
|
2279
2382
|
blocks,
|
|
2280
2383
|
isDragging,
|
|
@@ -2310,6 +2413,7 @@ const combinedReducers = combineReducers( {
|
|
|
2310
2413
|
listViewExpandRevision,
|
|
2311
2414
|
listViewContentPanelOpen,
|
|
2312
2415
|
requestedInspectorTab,
|
|
2416
|
+
selectedBlockStyleState,
|
|
2313
2417
|
} );
|
|
2314
2418
|
|
|
2315
2419
|
/**
|
|
@@ -11,6 +11,8 @@ import {
|
|
|
11
11
|
stopDragging,
|
|
12
12
|
showViewportModal,
|
|
13
13
|
hideViewportModal,
|
|
14
|
+
setSelectedBlockStyleState,
|
|
15
|
+
setSelectedBlockStyleStateCanvasPreview,
|
|
14
16
|
} from '../private-actions';
|
|
15
17
|
|
|
16
18
|
describe( 'private actions', () => {
|
|
@@ -141,4 +143,28 @@ describe( 'private actions', () => {
|
|
|
141
143
|
} );
|
|
142
144
|
} );
|
|
143
145
|
} );
|
|
146
|
+
|
|
147
|
+
describe( 'setSelectedBlockStyleState', () => {
|
|
148
|
+
it( 'returns the SET_SELECTED_BLOCK_STYLE_STATE action', () => {
|
|
149
|
+
expect(
|
|
150
|
+
setSelectedBlockStyleState( 'client-1', { pseudo: ':hover' } )
|
|
151
|
+
).toEqual( {
|
|
152
|
+
type: 'SET_SELECTED_BLOCK_STYLE_STATE',
|
|
153
|
+
clientId: 'client-1',
|
|
154
|
+
value: { pseudo: ':hover' },
|
|
155
|
+
} );
|
|
156
|
+
} );
|
|
157
|
+
} );
|
|
158
|
+
|
|
159
|
+
describe( 'setSelectedBlockStyleStateCanvasPreview', () => {
|
|
160
|
+
it( 'returns the SET_SELECTED_BLOCK_STYLE_STATE_CANVAS_PREVIEW action', () => {
|
|
161
|
+
expect(
|
|
162
|
+
setSelectedBlockStyleStateCanvasPreview( 'client-1', false )
|
|
163
|
+
).toEqual( {
|
|
164
|
+
type: 'SET_SELECTED_BLOCK_STYLE_STATE_CANVAS_PREVIEW',
|
|
165
|
+
clientId: 'client-1',
|
|
166
|
+
value: false,
|
|
167
|
+
} );
|
|
168
|
+
} );
|
|
169
|
+
} );
|
|
144
170
|
} );
|