@wordpress/block-editor 15.22.1 → 16.0.1-next.v.202607070741.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 +27 -0
- package/build/autocompleters/block.cjs +10 -2
- package/build/autocompleters/block.cjs.map +2 -2
- package/build/components/background-image-control/index.cjs +0 -2
- package/build/components/background-image-control/index.cjs.map +2 -2
- package/build/components/block-inspector/edit-contents.cjs +3 -0
- package/build/components/block-inspector/edit-contents.cjs.map +3 -3
- package/build/components/block-inspector/index.cjs +18 -36
- package/build/components/block-inspector/index.cjs.map +2 -2
- package/build/components/block-list/block-invalid-warning.cjs +8 -19
- package/build/components/block-list/block-invalid-warning.cjs.map +2 -2
- package/build/components/block-styles/use-styles-for-block.cjs +2 -1
- package/build/components/block-styles/use-styles-for-block.cjs.map +2 -2
- package/build/components/block-title/use-block-display-title.cjs +7 -2
- package/build/components/block-title/use-block-display-title.cjs.map +2 -2
- package/build/components/block-toolbar/block-toolbar-icon.cjs +10 -14
- package/build/components/block-toolbar/block-toolbar-icon.cjs.map +2 -2
- package/build/components/block-variation-transforms/index.cjs +0 -1
- package/build/components/block-variation-transforms/index.cjs.map +2 -2
- package/build/components/child-layout-control/index.cjs +0 -2
- package/build/components/child-layout-control/index.cjs.map +2 -2
- package/build/components/colors-gradients/control.cjs +5 -5
- package/build/components/colors-gradients/control.cjs.map +2 -2
- package/build/components/date-format-picker/index.cjs +0 -1
- package/build/components/date-format-picker/index.cjs.map +2 -2
- package/build/components/dimensions-tool/aspect-ratio-tool.cjs +1 -2
- package/build/components/dimensions-tool/aspect-ratio-tool.cjs.map +2 -2
- package/build/components/dimensions-tool/scale-tool.cjs +0 -1
- package/build/components/dimensions-tool/scale-tool.cjs.map +2 -2
- package/build/components/dimensions-tool/width-height-tool.cjs +2 -4
- package/build/components/dimensions-tool/width-height-tool.cjs.map +2 -2
- package/build/components/font-appearance-control/index.cjs +6 -25
- package/build/components/font-appearance-control/index.cjs.map +3 -3
- package/build/components/font-family/index.cjs +6 -15
- package/build/components/font-family/index.cjs.map +3 -3
- package/build/components/font-sizes/font-size-picker.cjs +1 -2
- package/build/components/font-sizes/font-size-picker.cjs.map +2 -2
- package/build/components/global-styles/border-panel.cjs +0 -1
- package/build/components/global-styles/border-panel.cjs.map +2 -2
- package/build/components/global-styles/dimensions-panel.cjs +0 -3
- package/build/components/global-styles/dimensions-panel.cjs.map +2 -2
- package/build/components/global-styles/typography-panel.cjs +4 -10
- package/build/components/global-styles/typography-panel.cjs.map +2 -2
- package/build/components/height-control/index.cjs +0 -2
- package/build/components/height-control/index.cjs.map +2 -2
- package/build/components/html-element-control/index.cjs +0 -1
- package/build/components/html-element-control/index.cjs.map +2 -2
- package/build/components/image-editor/index.cjs +5 -0
- package/build/components/image-editor/index.cjs.map +3 -3
- package/build/components/image-editor/zoom-dropdown.cjs +0 -1
- package/build/components/image-editor/zoom-dropdown.cjs.map +2 -2
- package/build/components/image-size-control/index.cjs +1 -3
- package/build/components/image-size-control/index.cjs.map +2 -2
- package/build/components/inner-content/index.cjs +107 -0
- package/build/components/inner-content/index.cjs.map +7 -0
- package/build/components/inserter/hooks/use-block-types-state.cjs +10 -2
- package/build/components/inserter/hooks/use-block-types-state.cjs.map +2 -2
- package/build/components/inserter/media-tab/hooks.cjs +34 -6
- package/build/components/inserter/media-tab/hooks.cjs.map +2 -2
- package/build/components/inserter/media-tab/media-list.cjs +3 -1
- package/build/components/inserter/media-tab/media-list.cjs.map +2 -2
- package/build/components/inserter/media-tab/media-panel.cjs +224 -27
- package/build/components/inserter/media-tab/media-panel.cjs.map +3 -3
- package/build/components/inserter/media-tab/media-preview.cjs +32 -17
- package/build/components/inserter/media-tab/media-preview.cjs.map +2 -2
- package/build/components/inserter/media-tab/media-tab.cjs +26 -6
- package/build/components/inserter/media-tab/media-tab.cjs.map +2 -2
- package/build/components/inserter/mobile-tab-navigation.cjs +6 -1
- package/build/components/inserter/mobile-tab-navigation.cjs.map +2 -2
- package/build/components/inserter/no-results.cjs +2 -2
- package/build/components/inserter/no-results.cjs.map +2 -2
- package/build/components/inserter/preview-panel.cjs +2 -1
- package/build/components/inserter/preview-panel.cjs.map +2 -2
- package/build/components/inserter-list-item/index.cjs +8 -2
- package/build/components/inserter-list-item/index.cjs.map +2 -2
- package/build/components/letter-spacing-control/index.cjs +0 -24
- package/build/components/letter-spacing-control/index.cjs.map +3 -3
- package/build/components/line-height-control/index.cjs +7 -22
- package/build/components/line-height-control/index.cjs.map +3 -3
- package/build/components/list-view/block-select-button.cjs +90 -84
- package/build/components/list-view/block-select-button.cjs.map +2 -2
- package/build/components/list-view/block.cjs +51 -20
- package/build/components/list-view/block.cjs.map +2 -2
- package/build/components/list-view/expander.cjs +1 -1
- package/build/components/list-view/expander.cjs.map +2 -2
- package/build/components/list-view/use-list-view-client-ids.cjs +2 -2
- package/build/components/list-view/use-list-view-client-ids.cjs.map +2 -2
- package/build/components/observe-typing/index.cjs +4 -3
- package/build/components/observe-typing/index.cjs.map +2 -2
- package/build/components/preset-input-control/custom-value-controls.cjs +1 -3
- package/build/components/preset-input-control/custom-value-controls.cjs.map +2 -2
- package/build/components/preset-input-control/index.cjs +1 -3
- package/build/components/preset-input-control/index.cjs.map +2 -2
- package/build/components/resolution-tool/index.cjs +1 -2
- package/build/components/resolution-tool/index.cjs.map +2 -2
- package/build/components/text-alignment-control/index.cjs +0 -1
- package/build/components/text-alignment-control/index.cjs.map +2 -2
- package/build/components/text-decoration-control/index.cjs +0 -1
- package/build/components/text-decoration-control/index.cjs.map +2 -2
- package/build/components/text-indent-control/index.cjs +0 -8
- package/build/components/text-indent-control/index.cjs.map +2 -2
- package/build/components/text-transform-control/index.cjs +0 -1
- package/build/components/text-transform-control/index.cjs.map +2 -2
- package/build/components/use-block-display-information/index.cjs +10 -8
- package/build/components/use-block-display-information/index.cjs.map +2 -2
- package/build/components/use-on-block-drop/index.cjs +3 -7
- package/build/components/use-on-block-drop/index.cjs.map +2 -2
- package/build/components/use-resize-canvas/index.cjs +16 -53
- package/build/components/use-resize-canvas/index.cjs.map +3 -3
- package/build/components/writing-mode-control/index.cjs +0 -1
- package/build/components/writing-mode-control/index.cjs.map +2 -2
- package/build/hooks/font-size.cjs +1 -2
- package/build/hooks/font-size.cjs.map +2 -2
- package/build/hooks/layout.cjs +5 -3
- package/build/hooks/layout.cjs.map +2 -2
- package/build/hooks/position.cjs +36 -16
- package/build/hooks/position.cjs.map +2 -2
- package/build/hooks/states.cjs +10 -21
- package/build/hooks/states.cjs.map +2 -2
- package/build/layouts/constrained.cjs +21 -21
- package/build/layouts/constrained.cjs.map +2 -2
- package/build/layouts/flex.cjs +0 -3
- package/build/layouts/flex.cjs.map +2 -2
- package/build/layouts/grid.cjs +51 -9
- package/build/layouts/grid.cjs.map +2 -2
- package/build/private-apis.cjs +4 -2
- package/build/private-apis.cjs.map +3 -3
- package/build/store/actions.cjs.map +2 -2
- package/build/store/private-actions.cjs +16 -0
- package/build/store/private-actions.cjs.map +2 -2
- package/build/store/private-keys.cjs +3 -3
- package/build/store/private-keys.cjs.map +2 -2
- package/build/store/private-selectors.cjs +96 -10
- package/build/store/private-selectors.cjs.map +2 -2
- package/build/store/reducer.cjs +19 -3
- package/build/store/reducer.cjs.map +2 -2
- package/build/store/selectors.cjs +13 -0
- package/build/store/selectors.cjs.map +2 -2
- package/build-module/autocompleters/block.mjs +10 -2
- package/build-module/autocompleters/block.mjs.map +2 -2
- package/build-module/components/background-image-control/index.mjs +0 -2
- package/build-module/components/background-image-control/index.mjs.map +2 -2
- package/build-module/components/block-inspector/edit-contents.mjs +4 -1
- package/build-module/components/block-inspector/edit-contents.mjs.map +2 -2
- package/build-module/components/block-inspector/index.mjs +18 -36
- package/build-module/components/block-inspector/index.mjs.map +2 -2
- package/build-module/components/block-list/block-invalid-warning.mjs +8 -19
- package/build-module/components/block-list/block-invalid-warning.mjs.map +2 -2
- package/build-module/components/block-styles/use-styles-for-block.mjs +2 -1
- package/build-module/components/block-styles/use-styles-for-block.mjs.map +2 -2
- package/build-module/components/block-title/use-block-display-title.mjs +7 -2
- package/build-module/components/block-title/use-block-display-title.mjs.map +2 -2
- package/build-module/components/block-toolbar/block-toolbar-icon.mjs +10 -14
- package/build-module/components/block-toolbar/block-toolbar-icon.mjs.map +2 -2
- package/build-module/components/block-variation-transforms/index.mjs +0 -1
- package/build-module/components/block-variation-transforms/index.mjs.map +2 -2
- package/build-module/components/child-layout-control/index.mjs +0 -2
- package/build-module/components/child-layout-control/index.mjs.map +2 -2
- package/build-module/components/colors-gradients/control.mjs +5 -5
- package/build-module/components/colors-gradients/control.mjs.map +2 -2
- package/build-module/components/date-format-picker/index.mjs +0 -1
- package/build-module/components/date-format-picker/index.mjs.map +2 -2
- package/build-module/components/dimensions-tool/aspect-ratio-tool.mjs +1 -2
- package/build-module/components/dimensions-tool/aspect-ratio-tool.mjs.map +2 -2
- package/build-module/components/dimensions-tool/scale-tool.mjs +0 -1
- package/build-module/components/dimensions-tool/scale-tool.mjs.map +2 -2
- package/build-module/components/dimensions-tool/width-height-tool.mjs +2 -4
- package/build-module/components/dimensions-tool/width-height-tool.mjs.map +2 -2
- package/build-module/components/font-appearance-control/index.mjs +6 -15
- package/build-module/components/font-appearance-control/index.mjs.map +2 -2
- package/build-module/components/font-family/index.mjs +6 -15
- package/build-module/components/font-family/index.mjs.map +2 -2
- package/build-module/components/font-sizes/font-size-picker.mjs +1 -2
- package/build-module/components/font-sizes/font-size-picker.mjs.map +2 -2
- package/build-module/components/global-styles/border-panel.mjs +0 -1
- package/build-module/components/global-styles/border-panel.mjs.map +2 -2
- package/build-module/components/global-styles/dimensions-panel.mjs +0 -3
- package/build-module/components/global-styles/dimensions-panel.mjs.map +2 -2
- package/build-module/components/global-styles/typography-panel.mjs +4 -10
- package/build-module/components/global-styles/typography-panel.mjs.map +2 -2
- package/build-module/components/height-control/index.mjs +0 -2
- package/build-module/components/height-control/index.mjs.map +2 -2
- package/build-module/components/html-element-control/index.mjs +0 -1
- package/build-module/components/html-element-control/index.mjs.map +2 -2
- package/build-module/components/image-editor/index.mjs +5 -0
- package/build-module/components/image-editor/index.mjs.map +2 -2
- package/build-module/components/image-editor/zoom-dropdown.mjs +0 -1
- package/build-module/components/image-editor/zoom-dropdown.mjs.map +2 -2
- package/build-module/components/image-size-control/index.mjs +1 -3
- package/build-module/components/image-size-control/index.mjs.map +2 -2
- package/build-module/components/inner-content/index.mjs +82 -0
- package/build-module/components/inner-content/index.mjs.map +7 -0
- package/build-module/components/inserter/hooks/use-block-types-state.mjs +10 -2
- package/build-module/components/inserter/hooks/use-block-types-state.mjs.map +2 -2
- package/build-module/components/inserter/media-tab/hooks.mjs +33 -6
- package/build-module/components/inserter/media-tab/hooks.mjs.map +2 -2
- package/build-module/components/inserter/media-tab/media-list.mjs +3 -1
- package/build-module/components/inserter/media-tab/media-list.mjs.map +2 -2
- package/build-module/components/inserter/media-tab/media-panel.mjs +227 -30
- package/build-module/components/inserter/media-tab/media-panel.mjs.map +2 -2
- package/build-module/components/inserter/media-tab/media-preview.mjs +33 -18
- package/build-module/components/inserter/media-tab/media-preview.mjs.map +2 -2
- package/build-module/components/inserter/media-tab/media-tab.mjs +27 -7
- package/build-module/components/inserter/media-tab/media-tab.mjs.map +2 -2
- package/build-module/components/inserter/mobile-tab-navigation.mjs +6 -1
- package/build-module/components/inserter/mobile-tab-navigation.mjs.map +2 -2
- package/build-module/components/inserter/no-results.mjs +2 -2
- package/build-module/components/inserter/no-results.mjs.map +2 -2
- package/build-module/components/inserter/preview-panel.mjs +2 -1
- package/build-module/components/inserter/preview-panel.mjs.map +2 -2
- package/build-module/components/inserter-list-item/index.mjs +8 -2
- package/build-module/components/inserter-list-item/index.mjs.map +2 -2
- package/build-module/components/letter-spacing-control/index.mjs +0 -14
- package/build-module/components/letter-spacing-control/index.mjs.map +2 -2
- package/build-module/components/line-height-control/index.mjs +7 -12
- package/build-module/components/line-height-control/index.mjs.map +2 -2
- package/build-module/components/list-view/block-select-button.mjs +90 -84
- package/build-module/components/list-view/block-select-button.mjs.map +2 -2
- package/build-module/components/list-view/block.mjs +51 -20
- package/build-module/components/list-view/block.mjs.map +2 -2
- package/build-module/components/list-view/expander.mjs +1 -1
- package/build-module/components/list-view/expander.mjs.map +2 -2
- package/build-module/components/list-view/use-list-view-client-ids.mjs +2 -2
- package/build-module/components/list-view/use-list-view-client-ids.mjs.map +2 -2
- package/build-module/components/observe-typing/index.mjs +4 -3
- package/build-module/components/observe-typing/index.mjs.map +2 -2
- package/build-module/components/preset-input-control/custom-value-controls.mjs +1 -3
- package/build-module/components/preset-input-control/custom-value-controls.mjs.map +2 -2
- package/build-module/components/preset-input-control/index.mjs +1 -3
- package/build-module/components/preset-input-control/index.mjs.map +2 -2
- package/build-module/components/resolution-tool/index.mjs +1 -2
- package/build-module/components/resolution-tool/index.mjs.map +2 -2
- package/build-module/components/text-alignment-control/index.mjs +0 -1
- package/build-module/components/text-alignment-control/index.mjs.map +2 -2
- package/build-module/components/text-decoration-control/index.mjs +0 -1
- package/build-module/components/text-decoration-control/index.mjs.map +2 -2
- package/build-module/components/text-indent-control/index.mjs +0 -8
- package/build-module/components/text-indent-control/index.mjs.map +2 -2
- package/build-module/components/text-transform-control/index.mjs +0 -1
- package/build-module/components/text-transform-control/index.mjs.map +2 -2
- package/build-module/components/use-block-display-information/index.mjs +10 -8
- package/build-module/components/use-block-display-information/index.mjs.map +2 -2
- package/build-module/components/use-on-block-drop/index.mjs +4 -7
- package/build-module/components/use-on-block-drop/index.mjs.map +2 -2
- package/build-module/components/use-resize-canvas/index.mjs +6 -53
- package/build-module/components/use-resize-canvas/index.mjs.map +2 -2
- package/build-module/components/writing-mode-control/index.mjs +0 -1
- package/build-module/components/writing-mode-control/index.mjs.map +2 -2
- package/build-module/hooks/font-size.mjs +1 -2
- package/build-module/hooks/font-size.mjs.map +2 -2
- package/build-module/hooks/layout.mjs +4 -3
- package/build-module/hooks/layout.mjs.map +2 -2
- package/build-module/hooks/position.mjs +38 -18
- package/build-module/hooks/position.mjs.map +2 -2
- package/build-module/hooks/states.mjs +10 -21
- package/build-module/hooks/states.mjs.map +2 -2
- package/build-module/layouts/constrained.mjs +21 -21
- package/build-module/layouts/constrained.mjs.map +2 -2
- package/build-module/layouts/flex.mjs +0 -3
- package/build-module/layouts/flex.mjs.map +2 -2
- package/build-module/layouts/grid.mjs +52 -9
- package/build-module/layouts/grid.mjs.map +2 -2
- package/build-module/private-apis.mjs +5 -3
- package/build-module/private-apis.mjs.map +2 -2
- package/build-module/store/actions.mjs.map +2 -2
- package/build-module/store/private-actions.mjs +14 -0
- package/build-module/store/private-actions.mjs.map +2 -2
- package/build-module/store/private-keys.mjs +2 -2
- package/build-module/store/private-keys.mjs.map +2 -2
- package/build-module/store/private-selectors.mjs +93 -10
- package/build-module/store/private-selectors.mjs.map +2 -2
- package/build-module/store/reducer.mjs +17 -3
- package/build-module/store/reducer.mjs.map +2 -2
- package/build-module/store/selectors.mjs +13 -0
- package/build-module/store/selectors.mjs.map +2 -2
- package/build-style/content-rtl.css +11 -5
- package/build-style/content.css +11 -5
- package/build-style/style-rtl.css +113 -3
- package/build-style/style.css +113 -3
- package/package.json +43 -41
- package/src/autocompleters/block.js +10 -3
- package/src/autocompleters/test/block.js +53 -0
- package/src/components/background-image-control/index.js +0 -2
- package/src/components/block-inspector/edit-contents.js +5 -1
- package/src/components/block-inspector/index.js +25 -44
- package/src/components/block-list/block-invalid-warning.js +8 -19
- package/src/components/block-patterns-list/stories/index.story.jsx +1 -1
- package/src/components/block-styles/use-styles-for-block.js +1 -0
- package/src/components/block-title/use-block-display-title.js +7 -2
- package/src/components/block-toolbar/block-toolbar-icon.js +11 -16
- package/src/components/block-toolbar/test/block-toolbar-icon.js +32 -9
- package/src/components/block-variation-transforms/index.js +0 -1
- package/src/components/child-layout-control/index.js +0 -2
- package/src/components/color-palette/test/__snapshots__/control.js.snap +11 -106
- package/src/components/colors-gradients/control.js +4 -4
- package/src/components/colors-gradients/style.scss +2 -2
- package/src/components/date-format-picker/index.js +0 -1
- package/src/components/dimensions-tool/aspect-ratio-tool.js +0 -1
- package/src/components/dimensions-tool/scale-tool.js +0 -1
- package/src/components/dimensions-tool/width-height-tool.js +0 -2
- package/src/components/font-appearance-control/index.js +6 -19
- package/src/components/font-family/README.md +0 -9
- package/src/components/font-family/index.js +6 -19
- package/src/components/font-family/stories/index.story.jsx +0 -1
- package/src/components/font-sizes/font-size-picker.js +0 -1
- package/src/components/global-styles/border-panel.js +0 -1
- package/src/components/global-styles/dimensions-panel.js +0 -3
- package/src/components/global-styles/typography-panel.js +0 -6
- package/src/components/height-control/index.js +0 -2
- package/src/components/html-element-control/index.js +0 -1
- package/src/components/iframe/content.scss +3 -3
- package/src/components/image-editor/index.js +22 -0
- package/src/components/image-editor/zoom-dropdown.js +0 -1
- package/src/components/image-size-control/index.js +0 -2
- package/src/components/inner-content/index.js +119 -0
- package/src/components/inner-content/test/index.js +81 -0
- package/src/components/inserter/hooks/use-block-types-state.js +10 -2
- package/src/components/inserter/media-tab/hooks.js +59 -9
- package/src/components/inserter/media-tab/media-list.js +2 -0
- package/src/components/inserter/media-tab/media-panel.js +256 -17
- package/src/components/inserter/media-tab/media-preview.js +34 -17
- package/src/components/inserter/media-tab/media-tab.js +20 -2
- package/src/components/inserter/media-tab/test/hooks.js +204 -0
- package/src/components/inserter/mobile-tab-navigation.js +6 -1
- package/src/components/inserter/no-results.js +2 -2
- package/src/components/inserter/preview-panel.js +1 -0
- package/src/components/inserter/style.scss +110 -1
- package/src/components/inserter-list-item/index.js +8 -2
- package/src/components/letter-spacing-control/README.md +0 -8
- package/src/components/letter-spacing-control/index.js +5 -23
- package/src/components/letter-spacing-control/stories/index.story.jsx +0 -12
- package/src/components/line-height-control/README.md +0 -8
- package/src/components/line-height-control/index.js +7 -16
- package/src/components/line-height-control/stories/index.story.jsx +0 -1
- package/src/components/line-height-control/test/index.js +1 -7
- package/src/components/link-picker/test/index.js +3 -1
- package/src/components/list-view/block-select-button.js +5 -1
- package/src/components/list-view/block.js +57 -20
- package/src/components/list-view/expander.js +5 -1
- package/src/components/list-view/style.scss +19 -0
- package/src/components/list-view/use-list-view-client-ids.js +2 -2
- package/src/components/observe-typing/index.js +9 -4
- package/src/components/preset-input-control/custom-value-controls.js +0 -2
- package/src/components/preset-input-control/index.js +0 -2
- package/src/components/resolution-tool/index.js +0 -1
- package/src/components/responsive-block-control/test/index.js +1 -5
- package/src/components/text-alignment-control/index.js +0 -1
- package/src/components/text-decoration-control/index.js +0 -1
- package/src/components/text-indent-control/index.js +7 -16
- package/src/components/text-transform-control/index.js +0 -1
- package/src/components/use-block-display-information/index.js +9 -13
- package/src/components/use-block-display-information/test/index.js +47 -9
- package/src/components/use-on-block-drop/index.js +4 -7
- package/src/components/use-resize-canvas/index.js +10 -71
- package/src/components/writing-mode-control/index.js +0 -1
- package/src/hooks/block-hooks.scss +15 -0
- package/src/hooks/font-size.js +0 -1
- package/src/hooks/layout.js +5 -4
- package/src/hooks/position.js +44 -23
- package/src/hooks/states.js +24 -26
- package/src/hooks/test/cross-origin-isolation.js +0 -4
- package/src/hooks/test/layout.js +75 -1
- package/src/layouts/constrained.js +51 -28
- package/src/layouts/flex.js +0 -3
- package/src/layouts/grid.js +59 -7
- package/src/layouts/test/constrained.js +91 -0
- package/src/layouts/test/grid.js +71 -0
- package/src/private-apis.js +4 -2
- package/src/store/actions.js +1 -0
- package/src/store/private-actions.js +31 -0
- package/src/store/private-keys.js +1 -1
- package/src/store/private-selectors.js +184 -11
- package/src/store/reducer.js +37 -2
- package/src/store/selectors.js +41 -0
- package/src/store/test/private-selectors.js +436 -10
- package/src/store/test/reducer.js +41 -13
- package/src/store/test/selectors.js +133 -0
- package/src/style.scss +1 -0
- package/src/components/use-resize-canvas/README.md +0 -37
package/src/layouts/grid.js
CHANGED
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
Flex,
|
|
9
9
|
FlexItem,
|
|
10
10
|
RangeControl,
|
|
11
|
+
ToggleControl,
|
|
11
12
|
__experimentalNumberControl as NumberControl,
|
|
12
13
|
__experimentalToggleGroupControl as ToggleGroupControl,
|
|
13
14
|
__experimentalToggleGroupControlOption as ToggleGroupControlOption,
|
|
@@ -81,6 +82,9 @@ export default {
|
|
|
81
82
|
const showMinWidthControl =
|
|
82
83
|
! layout?.isManualPlacement ||
|
|
83
84
|
window.__experimentalEnableGridInteractivity;
|
|
85
|
+
// Auto-fit/auto-fill only applies when grid items are placed
|
|
86
|
+
// automatically, so the control is irrelevant in manual placement mode.
|
|
87
|
+
const showFillControl = ! layout?.isManualPlacement;
|
|
84
88
|
const defaultColumnCount = layout.isManualPlacement ? 3 : undefined;
|
|
85
89
|
const hasLayoutValue = ( key, defaultValue ) =>
|
|
86
90
|
( layout?.[ key ] ?? defaultValue ) !==
|
|
@@ -92,6 +96,7 @@ export default {
|
|
|
92
96
|
hasLayoutValue( 'rowCount' );
|
|
93
97
|
const hasMinimumColumnWidthValue = () =>
|
|
94
98
|
hasLayoutValue( 'minimumColumnWidth' );
|
|
99
|
+
const hasFillValue = () => hasLayoutValue( 'autoFit', false );
|
|
95
100
|
const resetGridType = () =>
|
|
96
101
|
onChange(
|
|
97
102
|
cleanEmptyObject( {
|
|
@@ -116,6 +121,13 @@ export default {
|
|
|
116
121
|
minimumColumnWidth: resetLayout?.minimumColumnWidth,
|
|
117
122
|
} )
|
|
118
123
|
);
|
|
124
|
+
const resetFill = () =>
|
|
125
|
+
onChange(
|
|
126
|
+
cleanEmptyObject( {
|
|
127
|
+
...layout,
|
|
128
|
+
autoFit: resetLayout?.autoFit,
|
|
129
|
+
} )
|
|
130
|
+
);
|
|
119
131
|
|
|
120
132
|
return (
|
|
121
133
|
<>
|
|
@@ -162,6 +174,19 @@ export default {
|
|
|
162
174
|
/>
|
|
163
175
|
</ToolsPanelItem>
|
|
164
176
|
) }
|
|
177
|
+
{ showFillControl && (
|
|
178
|
+
<ToolsPanelItem
|
|
179
|
+
label={ __( 'Fill available space' ) }
|
|
180
|
+
hasValue={ hasFillValue }
|
|
181
|
+
onDeselect={ resetFill }
|
|
182
|
+
panelId={ clientId }
|
|
183
|
+
>
|
|
184
|
+
<GridLayoutFillControl
|
|
185
|
+
layout={ layout }
|
|
186
|
+
onChange={ onChange }
|
|
187
|
+
/>
|
|
188
|
+
</ToolsPanelItem>
|
|
189
|
+
) }
|
|
165
190
|
</>
|
|
166
191
|
);
|
|
167
192
|
},
|
|
@@ -188,8 +213,13 @@ export default {
|
|
|
188
213
|
minimumColumnWidth = null,
|
|
189
214
|
columnCount = null,
|
|
190
215
|
rowCount = null,
|
|
216
|
+
autoFit = false,
|
|
191
217
|
} = effectiveLayout;
|
|
192
218
|
|
|
219
|
+
// When enabled, columns stretch to fill the available space using
|
|
220
|
+
// `auto-fit`; otherwise empty tracks are preserved with `auto-fill`.
|
|
221
|
+
const autoPlacement = autoFit ? 'auto-fit' : 'auto-fill';
|
|
222
|
+
|
|
193
223
|
// Check that the grid layout attributes are of the correct type, so that we don't accidentally
|
|
194
224
|
// write code that stores a string attribute instead of a number.
|
|
195
225
|
if ( process.env.NODE_ENV === 'development' ) {
|
|
@@ -205,6 +235,9 @@ export default {
|
|
|
205
235
|
if ( rowCount && typeof rowCount !== 'number' ) {
|
|
206
236
|
throw new Error( 'rowCount must be a number' );
|
|
207
237
|
}
|
|
238
|
+
if ( autoFit && typeof autoFit !== 'boolean' ) {
|
|
239
|
+
throw new Error( 'autoFit must be a boolean' );
|
|
240
|
+
}
|
|
208
241
|
}
|
|
209
242
|
|
|
210
243
|
// Use the global blockGap value as fallback when available.
|
|
@@ -236,6 +269,7 @@ export default {
|
|
|
236
269
|
! hasViewportOverrides ||
|
|
237
270
|
hasViewportOverride( 'minimumColumnWidth' ) ||
|
|
238
271
|
hasViewportOverride( 'columnCount' ) ||
|
|
272
|
+
hasViewportOverride( 'autoFit' ) ||
|
|
239
273
|
( hasBlockGapOverride && minimumColumnWidth && columnCount > 0 );
|
|
240
274
|
const shouldOutputGridRows =
|
|
241
275
|
( ! hasViewportOverrides || hasViewportOverride( 'rowCount' ) ) &&
|
|
@@ -256,7 +290,7 @@ export default {
|
|
|
256
290
|
columnCount - 1
|
|
257
291
|
}) ) / ${ columnCount })`;
|
|
258
292
|
rules.push(
|
|
259
|
-
`grid-template-columns: repeat(
|
|
293
|
+
`grid-template-columns: repeat(${ autoPlacement }, minmax(${ maxValue }, 1fr))`
|
|
260
294
|
);
|
|
261
295
|
} else if ( shouldOutputGridColumns && columnCount ) {
|
|
262
296
|
rules.push(
|
|
@@ -264,7 +298,7 @@ export default {
|
|
|
264
298
|
);
|
|
265
299
|
} else if ( shouldOutputGridColumns ) {
|
|
266
300
|
rules.push(
|
|
267
|
-
`grid-template-columns: repeat(
|
|
301
|
+
`grid-template-columns: repeat(${ autoPlacement }, minmax(min(${
|
|
268
302
|
minimumColumnWidth || '12rem'
|
|
269
303
|
}, 100%), 1fr))`
|
|
270
304
|
);
|
|
@@ -357,7 +391,6 @@ function GridLayoutMinimumWidthControl( { layout, onChange } ) {
|
|
|
357
391
|
<Flex gap={ 4 }>
|
|
358
392
|
<FlexItem isBlock>
|
|
359
393
|
<UnitControl
|
|
360
|
-
size="__unstable-large"
|
|
361
394
|
onChange={ ( newValue ) => {
|
|
362
395
|
onChange( {
|
|
363
396
|
...layout,
|
|
@@ -375,7 +408,6 @@ function GridLayoutMinimumWidthControl( { layout, onChange } ) {
|
|
|
375
408
|
</FlexItem>
|
|
376
409
|
<FlexItem isBlock>
|
|
377
410
|
<RangeControl
|
|
378
|
-
__next40pxDefaultSize
|
|
379
411
|
onChange={ handleSliderChange }
|
|
380
412
|
value={ quantity || 0 }
|
|
381
413
|
min={ 0 }
|
|
@@ -435,7 +467,7 @@ function GridLayoutColumnsAndRowsControl( {
|
|
|
435
467
|
columnCount: newColumnCount,
|
|
436
468
|
} );
|
|
437
469
|
} }
|
|
438
|
-
value={ columnCount }
|
|
470
|
+
value={ columnCount ?? '' }
|
|
439
471
|
min={ 1 }
|
|
440
472
|
label={ __( 'Columns' ) }
|
|
441
473
|
hideLabelFromVision={ ! isManualPlacement }
|
|
@@ -463,7 +495,6 @@ function GridLayoutColumnsAndRowsControl( {
|
|
|
463
495
|
/>
|
|
464
496
|
) : (
|
|
465
497
|
<RangeControl
|
|
466
|
-
__next40pxDefaultSize
|
|
467
498
|
value={ columnCount ?? 1 }
|
|
468
499
|
onChange={ ( value ) =>
|
|
469
500
|
onChange( {
|
|
@@ -488,6 +519,28 @@ function GridLayoutColumnsAndRowsControl( {
|
|
|
488
519
|
);
|
|
489
520
|
}
|
|
490
521
|
|
|
522
|
+
// Enables stretching grid columns to fill the available space (auto-fit)
|
|
523
|
+
// instead of leaving empty tracks at the end of a row (auto-fill).
|
|
524
|
+
function GridLayoutFillControl( { layout, onChange } ) {
|
|
525
|
+
const { autoFit = false } = layout;
|
|
526
|
+
|
|
527
|
+
return (
|
|
528
|
+
<ToggleControl
|
|
529
|
+
label={ __( 'Fill available space' ) }
|
|
530
|
+
help={ __(
|
|
531
|
+
'Stretch columns to fill the available space, instead of leaving gaps when there are too few items to fill a row.'
|
|
532
|
+
) }
|
|
533
|
+
checked={ autoFit }
|
|
534
|
+
onChange={ ( value ) =>
|
|
535
|
+
onChange( {
|
|
536
|
+
...layout,
|
|
537
|
+
autoFit: value,
|
|
538
|
+
} )
|
|
539
|
+
}
|
|
540
|
+
/>
|
|
541
|
+
);
|
|
542
|
+
}
|
|
543
|
+
|
|
491
544
|
// Enables switching between grid types
|
|
492
545
|
function GridLayoutTypeControl( { layout, onChange } ) {
|
|
493
546
|
const { columnCount, rowCount, minimumColumnWidth, isManualPlacement } =
|
|
@@ -535,7 +588,6 @@ function GridLayoutTypeControl( { layout, onChange } ) {
|
|
|
535
588
|
|
|
536
589
|
return (
|
|
537
590
|
<ToggleGroupControl
|
|
538
|
-
__next40pxDefaultSize
|
|
539
591
|
label={ __( 'Grid item position' ) }
|
|
540
592
|
value={ gridPlacement }
|
|
541
593
|
onChange={ onChangeType }
|
|
@@ -1,8 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
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';
|
|
11
|
+
|
|
1
12
|
/**
|
|
2
13
|
* Internal dependencies
|
|
3
14
|
*/
|
|
4
15
|
import constrained from '../constrained';
|
|
5
16
|
|
|
17
|
+
const ConstrainedLayoutInspectorControls = constrained.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
|
+
<ConstrainedLayoutInspectorControls
|
|
24
|
+
clientId={ PANEL_ID }
|
|
25
|
+
layout={ {} }
|
|
26
|
+
onChange={ jest.fn() }
|
|
27
|
+
{ ...props }
|
|
28
|
+
/>
|
|
29
|
+
</ToolsPanel>
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
|
|
6
33
|
describe( 'getLayoutStyle', () => {
|
|
7
34
|
it( 'should return an empty string if no non-default params are provided', () => {
|
|
8
35
|
const expected = '';
|
|
@@ -18,4 +45,68 @@ describe( 'getLayoutStyle', () => {
|
|
|
18
45
|
|
|
19
46
|
expect( result ).toBe( expected );
|
|
20
47
|
} );
|
|
48
|
+
|
|
49
|
+
it( 'should reset constrained sizes when content width is unset in a viewport', () => {
|
|
50
|
+
const result = constrained.getLayoutStyle( {
|
|
51
|
+
selector: '.my-container',
|
|
52
|
+
layout: { type: 'constrained', contentSize: '800px' },
|
|
53
|
+
viewportOverrides: { contentSize: null },
|
|
54
|
+
style: {},
|
|
55
|
+
blockName: 'test-block',
|
|
56
|
+
hasBlockGapSupport: false,
|
|
57
|
+
layoutDefinitions: undefined,
|
|
58
|
+
} );
|
|
59
|
+
|
|
60
|
+
expect( result ).toContain(
|
|
61
|
+
'max-width: var(--wp--style--global--content-size, none);'
|
|
62
|
+
);
|
|
63
|
+
expect( result ).toContain(
|
|
64
|
+
'max-width: var(--wp--style--global--wide-size, none);'
|
|
65
|
+
);
|
|
66
|
+
} );
|
|
67
|
+
} );
|
|
68
|
+
|
|
69
|
+
describe( 'ConstrainedLayoutInspectorControls', () => {
|
|
70
|
+
it( 'renders an unset content width as an empty control value', () => {
|
|
71
|
+
renderInspectorControls( {
|
|
72
|
+
layout: { type: 'constrained', contentSize: null },
|
|
73
|
+
resetLayout: { type: 'constrained', contentSize: '800px' },
|
|
74
|
+
} );
|
|
75
|
+
|
|
76
|
+
expect(
|
|
77
|
+
screen.getByRole( 'spinbutton', { name: 'Content width' } )
|
|
78
|
+
).toHaveDisplayValue( '' );
|
|
79
|
+
} );
|
|
80
|
+
|
|
81
|
+
it.each( [
|
|
82
|
+
[ 'Content width', 'contentSize' ],
|
|
83
|
+
[ 'Wide width', 'wideSize' ],
|
|
84
|
+
] )(
|
|
85
|
+
'preserves a cleared %s value for viewport layout overrides',
|
|
86
|
+
async ( label, layoutKey ) => {
|
|
87
|
+
const user = userEvent.setup();
|
|
88
|
+
const onChange = jest.fn();
|
|
89
|
+
renderInspectorControls( {
|
|
90
|
+
layout: { type: 'constrained', [ layoutKey ]: '800px' },
|
|
91
|
+
resetLayout: { type: 'constrained', [ layoutKey ]: '800px' },
|
|
92
|
+
onChange,
|
|
93
|
+
} );
|
|
94
|
+
|
|
95
|
+
await user.click(
|
|
96
|
+
screen.getByRole( 'button', { name: /Layout options/i } )
|
|
97
|
+
);
|
|
98
|
+
await user.click(
|
|
99
|
+
screen.getByRole( 'menuitemcheckbox', {
|
|
100
|
+
name: `Show ${ label }`,
|
|
101
|
+
} )
|
|
102
|
+
);
|
|
103
|
+
await user.clear(
|
|
104
|
+
screen.getByRole( 'spinbutton', { name: label } )
|
|
105
|
+
);
|
|
106
|
+
|
|
107
|
+
const nextLayout = onChange.mock.lastCall?.[ 0 ];
|
|
108
|
+
expect( Object.hasOwn( nextLayout, layoutKey ) ).toBe( true );
|
|
109
|
+
expect( nextLayout[ layoutKey ] ).toBeUndefined();
|
|
110
|
+
}
|
|
111
|
+
);
|
|
21
112
|
} );
|
package/src/layouts/test/grid.js
CHANGED
|
@@ -1,8 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { render, screen } from '@testing-library/react';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* WordPress dependencies
|
|
8
|
+
*/
|
|
9
|
+
import { __experimentalToolsPanel as ToolsPanel } from '@wordpress/components';
|
|
10
|
+
|
|
1
11
|
/**
|
|
2
12
|
* Internal dependencies
|
|
3
13
|
*/
|
|
4
14
|
import grid from '../grid';
|
|
5
15
|
|
|
16
|
+
const GridLayoutInspectorControls = grid.inspectorControls;
|
|
17
|
+
const PANEL_ID = 'test-panel';
|
|
18
|
+
|
|
19
|
+
function renderInspectorControls( props = {} ) {
|
|
20
|
+
return render(
|
|
21
|
+
<ToolsPanel label="Layout" resetAll={ jest.fn() } panelId={ PANEL_ID }>
|
|
22
|
+
<GridLayoutInspectorControls
|
|
23
|
+
clientId={ PANEL_ID }
|
|
24
|
+
layout={ {} }
|
|
25
|
+
onChange={ jest.fn() }
|
|
26
|
+
{ ...props }
|
|
27
|
+
/>
|
|
28
|
+
</ToolsPanel>
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
|
|
6
32
|
describe( 'getLayoutStyle', () => {
|
|
7
33
|
it( 'should return only `grid-template-columns` and `container-type` properties if no non-default params are provided', () => {
|
|
8
34
|
const expected = `.my-container { grid-template-columns: repeat(auto-fill, minmax(min(12rem, 100%), 1fr)); container-type: inline-size; }`;
|
|
@@ -46,4 +72,49 @@ describe( 'getLayoutStyle', () => {
|
|
|
46
72
|
|
|
47
73
|
expect( result ).toBe( expected );
|
|
48
74
|
} );
|
|
75
|
+
it( 'should use `auto-fit` instead of `auto-fill` when autoFit is enabled', () => {
|
|
76
|
+
const expected = `.my-container { grid-template-columns: repeat(auto-fit, minmax(min(12rem, 100%), 1fr)); container-type: inline-size; }`;
|
|
77
|
+
|
|
78
|
+
const result = grid.getLayoutStyle( {
|
|
79
|
+
selector: '.my-container',
|
|
80
|
+
layout: { autoFit: true },
|
|
81
|
+
style: {},
|
|
82
|
+
blockName: 'test-block',
|
|
83
|
+
hasBlockGapSupport: false,
|
|
84
|
+
layoutDefinitions: undefined,
|
|
85
|
+
} );
|
|
86
|
+
|
|
87
|
+
expect( result ).toBe( expected );
|
|
88
|
+
} );
|
|
89
|
+
it( 'should use `auto-fit` with max() function when autoFit is enabled and both minimumColumnWidth and columnCount are provided', () => {
|
|
90
|
+
const expected = `.my-container { grid-template-columns: repeat(auto-fit, minmax(max(min( 12rem, 100%), ( 100% - (1.2rem*2) ) / 3), 1fr)); container-type: inline-size; }`;
|
|
91
|
+
|
|
92
|
+
const result = grid.getLayoutStyle( {
|
|
93
|
+
selector: '.my-container',
|
|
94
|
+
layout: {
|
|
95
|
+
minimumColumnWidth: '12rem',
|
|
96
|
+
columnCount: 3,
|
|
97
|
+
autoFit: true,
|
|
98
|
+
},
|
|
99
|
+
style: {},
|
|
100
|
+
blockName: 'test-block',
|
|
101
|
+
hasBlockGapSupport: false,
|
|
102
|
+
layoutDefinitions: undefined,
|
|
103
|
+
} );
|
|
104
|
+
|
|
105
|
+
expect( result ).toBe( expected );
|
|
106
|
+
} );
|
|
107
|
+
} );
|
|
108
|
+
|
|
109
|
+
describe( 'GridLayoutInspectorControls', () => {
|
|
110
|
+
it( 'renders an unset column count as an empty control value', () => {
|
|
111
|
+
renderInspectorControls( {
|
|
112
|
+
layout: { type: 'grid', columnCount: null },
|
|
113
|
+
resetLayout: { type: 'grid', columnCount: 3 },
|
|
114
|
+
} );
|
|
115
|
+
|
|
116
|
+
expect(
|
|
117
|
+
screen.getByRole( 'spinbutton', { name: 'Columns' } )
|
|
118
|
+
).toHaveDisplayValue( '' );
|
|
119
|
+
} );
|
|
49
120
|
} );
|
package/src/private-apis.js
CHANGED
|
@@ -52,11 +52,11 @@ import {
|
|
|
52
52
|
mediaEditKey,
|
|
53
53
|
getMediaSelectKey,
|
|
54
54
|
deviceTypeKey,
|
|
55
|
-
onViewportStateChangeKey,
|
|
56
55
|
isIsolatedEditorKey,
|
|
57
56
|
isNavigationOverlayContextKey,
|
|
58
57
|
isNavigationPostEditorKey,
|
|
59
58
|
mediaUploadOnSuccessKey,
|
|
59
|
+
mediaSideloadFromUrlKey,
|
|
60
60
|
openMediaEditorModalKey,
|
|
61
61
|
} from './store/private-keys';
|
|
62
62
|
import { requiresWrapperOnCopy } from './components/writing-flow/utils';
|
|
@@ -78,6 +78,7 @@ import { LinkPicker } from './components/link-picker';
|
|
|
78
78
|
import useRemoteUrlData from './components/link-control/use-rich-url-data';
|
|
79
79
|
import { PrivateBlockContext } from './components/block-list/private-block-context';
|
|
80
80
|
import useListViewPanelState from './components/use-list-view-panel-state';
|
|
81
|
+
import InnerContent from './components/inner-content';
|
|
81
82
|
import {
|
|
82
83
|
isHashLink,
|
|
83
84
|
isRelativePath,
|
|
@@ -141,11 +142,11 @@ lock( privateApis, {
|
|
|
141
142
|
mediaEditKey,
|
|
142
143
|
getMediaSelectKey,
|
|
143
144
|
deviceTypeKey,
|
|
144
|
-
onViewportStateChangeKey,
|
|
145
145
|
isIsolatedEditorKey,
|
|
146
146
|
isNavigationOverlayContextKey,
|
|
147
147
|
isNavigationPostEditorKey,
|
|
148
148
|
mediaUploadOnSuccessKey,
|
|
149
|
+
mediaSideloadFromUrlKey,
|
|
149
150
|
openMediaEditorModalKey,
|
|
150
151
|
useBlockElement,
|
|
151
152
|
useBlockElementRef,
|
|
@@ -155,4 +156,5 @@ lock( privateApis, {
|
|
|
155
156
|
useListViewPanelState,
|
|
156
157
|
isHashLink,
|
|
157
158
|
isRelativePath,
|
|
159
|
+
InnerContent,
|
|
158
160
|
} );
|
package/src/store/actions.js
CHANGED
|
@@ -2051,6 +2051,7 @@ export function __unstableSetTemporarilyEditingAsBlocks( clientId ) {
|
|
|
2051
2051
|
* the report url for the media item. It accepts the `InserterMediaItem` as an argument.
|
|
2052
2052
|
* @property {boolean} [isExternalResource] If the media category is an external resource, this should be set to true.
|
|
2053
2053
|
* This is used to avoid making a request to the external resource when the user
|
|
2054
|
+
* @property {string} [emptyMessage] Optional message shown in place of the generic "No results found." when the source has no items and there is no active search. Providing it also keeps the source in the tab list while empty, so the message stays reachable.
|
|
2054
2055
|
*/
|
|
2055
2056
|
export const registerInserterMediaCategory =
|
|
2056
2057
|
( category ) =>
|
|
@@ -558,3 +558,34 @@ export function setSelectedBlockStyleStateCanvasPreview( clientId, value ) {
|
|
|
558
558
|
value,
|
|
559
559
|
};
|
|
560
560
|
}
|
|
561
|
+
|
|
562
|
+
/**
|
|
563
|
+
* Sets the globally selected viewport style state. When set to a value other
|
|
564
|
+
* than 'default', block style edits in the inspector apply to that viewport.
|
|
565
|
+
* Driven by the editor's device preview while Responsive editing is enabled.
|
|
566
|
+
*
|
|
567
|
+
* @param {string} viewport The selected viewport state (e.g. 'default', 'tablet', 'mobile').
|
|
568
|
+
*
|
|
569
|
+
* @return {Object} Action object.
|
|
570
|
+
*/
|
|
571
|
+
export function setStyleStateViewport( viewport ) {
|
|
572
|
+
return {
|
|
573
|
+
type: 'SET_STYLE_STATE_VIEWPORT',
|
|
574
|
+
viewport,
|
|
575
|
+
};
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
/**
|
|
579
|
+
* Sets whether Responsive editing is enabled. When enabled, the device preview
|
|
580
|
+
* also drives which viewport block style edits are applied to. Session-only.
|
|
581
|
+
*
|
|
582
|
+
* @param {boolean} enabled Whether Responsive editing is enabled.
|
|
583
|
+
*
|
|
584
|
+
* @return {Object} Action object.
|
|
585
|
+
*/
|
|
586
|
+
export function setResponsiveEditing( enabled ) {
|
|
587
|
+
return {
|
|
588
|
+
type: 'SET_RESPONSIVE_EDITING',
|
|
589
|
+
enabled,
|
|
590
|
+
};
|
|
591
|
+
}
|
|
@@ -10,10 +10,10 @@ export const mediaEditKey = Symbol( 'mediaEditKey' );
|
|
|
10
10
|
export const getMediaSelectKey = Symbol( 'getMediaSelect' );
|
|
11
11
|
export const isIsolatedEditorKey = Symbol( 'isIsolatedEditor' );
|
|
12
12
|
export const deviceTypeKey = Symbol( 'deviceTypeKey' );
|
|
13
|
-
export const onViewportStateChangeKey = Symbol( 'onViewportStateChangeKey' );
|
|
14
13
|
export const isNavigationOverlayContextKey = Symbol(
|
|
15
14
|
'isNavigationOverlayContext'
|
|
16
15
|
);
|
|
17
16
|
export const isNavigationPostEditorKey = Symbol( 'isNavigationPostEditor' );
|
|
18
17
|
export const mediaUploadOnSuccessKey = Symbol( 'mediaUploadOnSuccess' );
|
|
18
|
+
export const mediaSideloadFromUrlKey = Symbol( 'mediaSideloadFromUrl' );
|
|
19
19
|
export const openMediaEditorModalKey = Symbol( 'openMediaEditorModal' );
|
|
@@ -159,16 +159,31 @@ export const getClientIdsTree = createSelector(
|
|
|
159
159
|
( state ) => [ state.blocks.order ]
|
|
160
160
|
);
|
|
161
161
|
|
|
162
|
-
|
|
162
|
+
/**
|
|
163
|
+
* Returns a tree of block objects filtered by a block inclusion callback.
|
|
164
|
+
* Excluded blocks are replaced by any included descendants.
|
|
165
|
+
*
|
|
166
|
+
* @param {Object} state Global application state.
|
|
167
|
+
* @param {?string} rootClientId Optional root client ID of block list.
|
|
168
|
+
* @param {Function} includesBlock Callback that returns whether to include a block.
|
|
169
|
+
*
|
|
170
|
+
* @return {Object[]} Tree of block objects with only clientID and innerBlocks set.
|
|
171
|
+
*/
|
|
172
|
+
function getFilteredClientIdsTreeUnmemoized(
|
|
173
|
+
state,
|
|
174
|
+
rootClientId,
|
|
175
|
+
includesBlock
|
|
176
|
+
) {
|
|
163
177
|
const blockOrder = getBlockOrder( state, rootClientId );
|
|
164
178
|
const result = [];
|
|
165
179
|
|
|
166
180
|
for ( const clientId of blockOrder ) {
|
|
167
|
-
const innerBlocks =
|
|
181
|
+
const innerBlocks = getFilteredClientIdsTreeUnmemoized(
|
|
168
182
|
state,
|
|
169
|
-
clientId
|
|
183
|
+
clientId,
|
|
184
|
+
includesBlock
|
|
170
185
|
);
|
|
171
|
-
if (
|
|
186
|
+
if ( includesBlock( state, clientId ) ) {
|
|
172
187
|
result.push( { clientId, innerBlocks } );
|
|
173
188
|
} else {
|
|
174
189
|
result.push( ...innerBlocks );
|
|
@@ -178,6 +193,100 @@ function getEnabledClientIdsTreeUnmemoized( state, rootClientId ) {
|
|
|
178
193
|
return result;
|
|
179
194
|
}
|
|
180
195
|
|
|
196
|
+
function getEnabledClientIdsTreeUnmemoized( state, rootClientId ) {
|
|
197
|
+
return getFilteredClientIdsTreeUnmemoized(
|
|
198
|
+
state,
|
|
199
|
+
rootClientId,
|
|
200
|
+
( _state, clientId ) =>
|
|
201
|
+
getBlockEditingMode( _state, clientId ) !== 'disabled'
|
|
202
|
+
);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Returns whether the nearest explicit block editing mode in the block's
|
|
207
|
+
* ancestry is disabled.
|
|
208
|
+
*
|
|
209
|
+
* @param {Object} state Global application state.
|
|
210
|
+
* @param {string} clientId The block client ID.
|
|
211
|
+
*
|
|
212
|
+
* @return {boolean} Whether an explicit parent block editing mode disables this
|
|
213
|
+
* block.
|
|
214
|
+
*/
|
|
215
|
+
function hasExplicitDisabledParent( state, clientId ) {
|
|
216
|
+
let parent = state.blocks.parents.get( clientId );
|
|
217
|
+
|
|
218
|
+
while ( parent !== undefined ) {
|
|
219
|
+
const parentBlockEditingMode =
|
|
220
|
+
state.blocks.blockEditingModes.get( parent );
|
|
221
|
+
|
|
222
|
+
if ( parentBlockEditingMode ) {
|
|
223
|
+
return parentBlockEditingMode === 'disabled';
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
parent = state.blocks.parents.get( parent );
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
return false;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* Returns the block tree displayed by List View.
|
|
234
|
+
*
|
|
235
|
+
* @param {Object} state Global application state.
|
|
236
|
+
* @param {?string} rootClientId Optional root client ID of block list.
|
|
237
|
+
*
|
|
238
|
+
* @return {Object[]} Tree of block objects with only clientID and innerBlocks set.
|
|
239
|
+
*/
|
|
240
|
+
function getListViewClientIdsTreeUnmemoized( state, rootClientId ) {
|
|
241
|
+
return getFilteredClientIdsTreeUnmemoized(
|
|
242
|
+
state,
|
|
243
|
+
rootClientId,
|
|
244
|
+
( _state, clientId ) => {
|
|
245
|
+
// Non-disabled blocks are always shown in List view.
|
|
246
|
+
if ( getBlockEditingMode( _state, clientId ) !== 'disabled' ) {
|
|
247
|
+
return true;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
const explicitBlockEditingMode =
|
|
251
|
+
_state.blocks.blockEditingModes.get( clientId );
|
|
252
|
+
if ( explicitBlockEditingMode ) {
|
|
253
|
+
return explicitBlockEditingMode !== 'disabled';
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
if ( hasExplicitDisabledParent( _state, clientId ) ) {
|
|
257
|
+
return false;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
// When a contentOnly section is being edited, there's some special handling.
|
|
261
|
+
if ( _state.editedContentOnlySection ) {
|
|
262
|
+
// Blocks within the edited content only section generally have their block
|
|
263
|
+
// editing mode flipped from disabled to default for editing, any disabled
|
|
264
|
+
// blocks can still be excluded.
|
|
265
|
+
if ( isWithinEditedContentOnlySection( _state, clientId ) ) {
|
|
266
|
+
return false;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
// Blocks that are not in another section but are disabled are shown.
|
|
270
|
+
// These are blocks that would usually be visible.
|
|
271
|
+
const parentSectionBlock = getParentSectionBlock(
|
|
272
|
+
_state,
|
|
273
|
+
clientId
|
|
274
|
+
);
|
|
275
|
+
if ( ! parentSectionBlock ) {
|
|
276
|
+
return true;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
// If a block is in another section, then it is only visible if its a content block.
|
|
280
|
+
if ( isContentBlock( getBlockName( _state, clientId ) ) ) {
|
|
281
|
+
return true;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
return false;
|
|
286
|
+
}
|
|
287
|
+
);
|
|
288
|
+
}
|
|
289
|
+
|
|
181
290
|
/**
|
|
182
291
|
* Returns a tree of block objects with only clientID and innerBlocks set.
|
|
183
292
|
* Blocks with a 'disabled' editing mode are not included.
|
|
@@ -195,6 +304,34 @@ export const getEnabledClientIdsTree = createRegistrySelector( () =>
|
|
|
195
304
|
] )
|
|
196
305
|
);
|
|
197
306
|
|
|
307
|
+
/**
|
|
308
|
+
* Returns the block tree displayed by List View.
|
|
309
|
+
*
|
|
310
|
+
* Blocks with a 'disabled' editing mode are usually not included. When a
|
|
311
|
+
* content-only section is being edited, List View keeps visible outside-section
|
|
312
|
+
* context blocks in the tree so they can be faded. Blocks that were already
|
|
313
|
+
* hidden because they are non-content blocks inside another content-only section
|
|
314
|
+
* remain hidden.
|
|
315
|
+
*
|
|
316
|
+
* @param {Object} state Global application state.
|
|
317
|
+
* @param {?string} rootClientId Optional root client ID of block list.
|
|
318
|
+
*
|
|
319
|
+
* @return {Object[]} Tree of block objects with only clientID and innerBlocks set.
|
|
320
|
+
*/
|
|
321
|
+
export const getListViewClientIdsTree = createRegistrySelector( () =>
|
|
322
|
+
createSelector( getListViewClientIdsTreeUnmemoized, ( state ) => [
|
|
323
|
+
state.blocks.order,
|
|
324
|
+
state.derivedBlockEditingModes,
|
|
325
|
+
state.blocks.blockEditingModes,
|
|
326
|
+
state.blocks.parents,
|
|
327
|
+
state.blocks.byClientId,
|
|
328
|
+
state.blocks.attributes,
|
|
329
|
+
state.blockListSettings,
|
|
330
|
+
state.editedContentOnlySection,
|
|
331
|
+
state.settings,
|
|
332
|
+
] )
|
|
333
|
+
);
|
|
334
|
+
|
|
198
335
|
/**
|
|
199
336
|
* Returns a list of a given block's ancestors, from top to bottom. Blocks with
|
|
200
337
|
* a 'disabled' editing mode are excluded.
|
|
@@ -1152,6 +1289,30 @@ const DEFAULT_BLOCK_STYLE_STATE = {
|
|
|
1152
1289
|
pseudo: 'default',
|
|
1153
1290
|
};
|
|
1154
1291
|
|
|
1292
|
+
/**
|
|
1293
|
+
* Returns the globally selected viewport style state. When set to a value other
|
|
1294
|
+
* than 'default', block style edits in the inspector apply to that viewport.
|
|
1295
|
+
*
|
|
1296
|
+
* @param {Object} state Global application state.
|
|
1297
|
+
*
|
|
1298
|
+
* @return {string} The selected viewport style state.
|
|
1299
|
+
*/
|
|
1300
|
+
export function getStyleStateViewport( state ) {
|
|
1301
|
+
return state.styleStateViewport ?? DEFAULT_BLOCK_STYLE_STATE.viewport;
|
|
1302
|
+
}
|
|
1303
|
+
|
|
1304
|
+
/**
|
|
1305
|
+
* Returns whether Responsive editing is enabled. When enabled, the device
|
|
1306
|
+
* preview also drives which viewport block style edits are applied to.
|
|
1307
|
+
*
|
|
1308
|
+
* @param {Object} state Global application state.
|
|
1309
|
+
*
|
|
1310
|
+
* @return {boolean} Whether Responsive editing is enabled.
|
|
1311
|
+
*/
|
|
1312
|
+
export function isResponsiveEditing( state ) {
|
|
1313
|
+
return state.isResponsiveEditing;
|
|
1314
|
+
}
|
|
1315
|
+
|
|
1155
1316
|
/**
|
|
1156
1317
|
* Returns the selected style state for a block's style controls.
|
|
1157
1318
|
*
|
|
@@ -1160,13 +1321,25 @@ const DEFAULT_BLOCK_STYLE_STATE = {
|
|
|
1160
1321
|
*
|
|
1161
1322
|
* @return {Object} The selected block style state.
|
|
1162
1323
|
*/
|
|
1163
|
-
export
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1324
|
+
export const getSelectedBlockStyleState = createSelector(
|
|
1325
|
+
( state, clientId ) => {
|
|
1326
|
+
const perBlockState =
|
|
1327
|
+
state.selectedBlockStyleState?.clientId === clientId
|
|
1328
|
+
? state.selectedBlockStyleState.value ??
|
|
1329
|
+
DEFAULT_BLOCK_STYLE_STATE
|
|
1330
|
+
: DEFAULT_BLOCK_STYLE_STATE;
|
|
1331
|
+
|
|
1332
|
+
return {
|
|
1333
|
+
...perBlockState,
|
|
1334
|
+
// The viewport is tracked globally, so inject it here. This way
|
|
1335
|
+
// consumers receive a single combined state object instead of
|
|
1336
|
+
// merging the global viewport themselves, and selectors derived
|
|
1337
|
+
// from this stay consistent.
|
|
1338
|
+
viewport: getStyleStateViewport( state ),
|
|
1339
|
+
};
|
|
1340
|
+
},
|
|
1341
|
+
( state ) => [ state.styleStateViewport, state.selectedBlockStyleState ]
|
|
1342
|
+
);
|
|
1170
1343
|
|
|
1171
1344
|
/**
|
|
1172
1345
|
* Returns whether a non-default style state is selected for a block.
|