@wordpress/block-editor 12.20.0 → 12.21.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 +2 -0
- package/build/components/block-actions/index.js +45 -32
- package/build/components/block-actions/index.js.map +1 -1
- package/build/components/block-bindings-toolbar-indicator/index.js +25 -0
- package/build/components/block-bindings-toolbar-indicator/index.js.map +1 -0
- package/build/components/block-edit/context.js +2 -1
- package/build/components/block-edit/context.js.map +1 -1
- package/build/components/block-edit/index.js +8 -3
- package/build/components/block-edit/index.js.map +1 -1
- package/build/components/block-inspector/index.js +5 -4
- package/build/components/block-inspector/index.js.map +1 -1
- package/build/components/block-list/block-invalid-warning.native.js.map +1 -1
- package/build/components/block-list/block-list-item.native.js +1 -1
- package/build/components/block-list/block-list-item.native.js.map +1 -1
- package/build/components/block-list/block-outline.native.js +23 -7
- package/build/components/block-list/block-outline.native.js.map +1 -1
- package/build/components/block-list/block-selection-button.native.js.map +1 -1
- package/build/components/block-list/block.native.js +0 -3
- package/build/components/block-list/block.native.js.map +1 -1
- package/build/components/block-list/use-block-props/index.js +8 -1
- package/build/components/block-list/use-block-props/index.js.map +1 -1
- package/build/components/block-list/use-block-props/use-selected-block-event-handlers.js +3 -3
- package/build/components/block-list/use-block-props/use-selected-block-event-handlers.js.map +1 -1
- package/build/components/block-mover/index.native.js.map +1 -1
- package/build/components/block-popover/cover.js +68 -0
- package/build/components/block-popover/cover.js.map +1 -0
- package/build/components/block-popover/drop-zone.js +2 -3
- package/build/components/block-popover/drop-zone.js.map +1 -1
- package/build/components/block-popover/index.js +1 -19
- package/build/components/block-popover/index.js.map +1 -1
- package/build/components/block-preview/index.js +2 -1
- package/build/components/block-preview/index.js.map +1 -1
- package/build/components/block-removal-warning-modal/index.js +2 -4
- package/build/components/block-removal-warning-modal/index.js.map +1 -1
- package/build/components/block-rename/modal.js.map +1 -1
- package/build/components/block-settings-menu/block-settings-dropdown.js +12 -10
- package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
- package/build/components/block-switcher/block-transformations-menu.native.js.map +1 -1
- package/build/components/block-toolbar/block-toolbar-menu.native.js.map +1 -1
- package/build/components/block-toolbar/index.js +21 -10
- package/build/components/block-toolbar/index.js.map +1 -1
- package/build/components/block-toolbar/shuffle.js +89 -0
- package/build/components/block-toolbar/shuffle.js.map +1 -0
- package/build/components/block-toolbar/use-has-block-toolbar.js +43 -0
- package/build/components/block-toolbar/use-has-block-toolbar.js.map +1 -0
- package/build/components/block-tools/block-selection-button.js +5 -1
- package/build/components/block-tools/block-selection-button.js.map +1 -1
- package/build/components/block-tools/empty-block-inserter.js +2 -5
- package/build/components/block-tools/empty-block-inserter.js.map +1 -1
- package/build/components/block-tools/index.js +9 -26
- package/build/components/block-tools/index.js.map +1 -1
- package/build/components/block-tools/use-show-block-tools.js +60 -0
- package/build/components/block-tools/use-show-block-tools.js.map +1 -0
- package/build/components/caption/index.native.js.map +1 -1
- package/build/components/child-layout-control/index.js.map +1 -1
- package/build/components/color-palette/control.js.map +1 -1
- package/build/components/colors-gradients/control.js +1 -1
- package/build/components/colors-gradients/control.js.map +1 -1
- package/build/components/global-styles/border-panel.js +21 -8
- package/build/components/global-styles/border-panel.js.map +1 -1
- package/build/components/global-styles/color-panel.js +1 -1
- package/build/components/global-styles/color-panel.js.map +1 -1
- package/build/components/global-styles/image-settings-panel.js.map +1 -1
- package/build/components/global-styles/index.js +6 -0
- package/build/components/global-styles/index.js.map +1 -1
- package/build/components/global-styles/shadow-panel-components.js +80 -23
- package/build/components/global-styles/shadow-panel-components.js.map +1 -1
- package/build/components/global-styles/typography-utils.js +7 -5
- package/build/components/global-styles/typography-utils.js.map +1 -1
- package/build/components/global-styles/use-global-styles-output.js +15 -15
- package/build/components/global-styles/use-global-styles-output.js.map +1 -1
- package/build/components/global-styles/utils.js +1 -1
- package/build/components/global-styles/utils.js.map +1 -1
- package/build/components/grid-visualizer/grid-item-resizer.js +77 -0
- package/build/components/grid-visualizer/grid-item-resizer.js.map +1 -0
- package/build/components/grid-visualizer/grid-visualizer.js +81 -0
- package/build/components/grid-visualizer/grid-visualizer.js.map +1 -0
- package/build/components/grid-visualizer/index.js +20 -0
- package/build/components/grid-visualizer/index.js.map +1 -0
- package/build/components/grid-visualizer/utils.js +10 -0
- package/build/components/grid-visualizer/utils.js.map +1 -0
- package/build/components/iframe/index.js +61 -16
- package/build/components/iframe/index.js.map +1 -1
- package/build/components/index.native.js +7 -0
- package/build/components/index.native.js.map +1 -1
- package/build/components/inner-blocks/use-nested-settings-update.js +8 -2
- package/build/components/inner-blocks/use-nested-settings-update.js.map +1 -1
- package/build/components/inserter/media-tab/media-preview.js.map +1 -1
- package/build/components/inserter/menu.js +9 -3
- package/build/components/inserter/menu.js.map +1 -1
- package/build/components/inserter/menu.native.js.map +1 -1
- package/build/components/inserter/mobile-tab-navigation.js +1 -1
- package/build/components/inserter/mobile-tab-navigation.js.map +1 -1
- package/build/components/inserter/search-results.js +3 -2
- package/build/components/inserter/search-results.js.map +1 -1
- package/build/components/inserter/tabs.js +2 -1
- package/build/components/inserter/tabs.js.map +1 -1
- package/build/components/inspector-controls/block-support-tools-panel.js.map +1 -1
- package/build/components/inspector-controls-tabs/index.js +1 -1
- package/build/components/inspector-controls-tabs/index.js.map +1 -1
- package/build/components/inspector-controls-tabs/styles-tab.js +1 -1
- package/build/components/inspector-controls-tabs/styles-tab.js.map +1 -1
- package/build/components/link-control/link-preview.js +4 -1
- package/build/components/link-control/link-preview.js.map +1 -1
- package/build/components/link-control/search-input.js.map +1 -1
- package/build/components/list-view/block-select-button.js +10 -2
- package/build/components/list-view/block-select-button.js.map +1 -1
- package/build/components/list-view/branch.js.map +1 -1
- package/build/components/list-view/drop-indicator.js.map +1 -1
- package/build/components/list-view/index.js.map +1 -1
- package/build/components/list-view/use-clipboard-handler.js +2 -1
- package/build/components/list-view/use-clipboard-handler.js.map +1 -1
- package/build/components/panel-color-settings/index.js.map +1 -1
- package/build/components/provider/index.js.map +1 -1
- package/build/components/resizable-box-popover/index.js +3 -5
- package/build/components/resizable-box-popover/index.js.map +1 -1
- package/build/components/responsive-block-control/index.js +1 -1
- package/build/components/responsive-block-control/index.js.map +1 -1
- package/build/components/rich-text/index.js +46 -26
- package/build/components/rich-text/index.js.map +1 -1
- package/build/components/rich-text/use-enter.js +3 -0
- package/build/components/rich-text/use-enter.js.map +1 -1
- package/build/components/spacing-sizes-control/input-controls/spacing-input-control.js.map +1 -1
- package/build/components/url-popover/index.js +3 -3
- package/build/components/url-popover/index.js.map +1 -1
- package/build/components/writing-flow/use-clipboard-handler.js +2 -1
- package/build/components/writing-flow/use-clipboard-handler.js.map +1 -1
- package/build/components/writing-flow/utils.js +23 -6
- package/build/components/writing-flow/utils.js.map +1 -1
- package/build/hooks/background.js.map +1 -1
- package/build/hooks/block-hooks.js +34 -8
- package/build/hooks/block-hooks.js.map +1 -1
- package/build/hooks/border.js +6 -4
- package/build/hooks/border.js.map +1 -1
- package/build/hooks/dimensions.js +3 -4
- package/build/hooks/dimensions.js.map +1 -1
- package/build/hooks/font-size.js +6 -7
- package/build/hooks/font-size.js.map +1 -1
- package/build/hooks/index.js +1 -1
- package/build/hooks/index.js.map +1 -1
- package/build/hooks/layout-child.js +39 -0
- package/build/hooks/layout-child.js.map +1 -1
- package/build/hooks/layout.js +11 -4
- package/build/hooks/layout.js.map +1 -1
- package/build/hooks/line-height.js.map +1 -1
- package/build/hooks/spacing-visualizer.js +115 -0
- package/build/hooks/spacing-visualizer.js.map +1 -0
- package/build/hooks/use-bindings-attributes.js +171 -48
- package/build/hooks/use-bindings-attributes.js.map +1 -1
- package/build/hooks/use-typography-props.js +1 -2
- package/build/hooks/use-typography-props.js.map +1 -1
- package/build/layouts/grid.js +6 -2
- package/build/layouts/grid.js.map +1 -1
- package/build/private-apis.js +7 -3
- package/build/private-apis.js.map +1 -1
- package/build/store/actions.js +42 -12
- package/build/store/actions.js.map +1 -1
- package/build/store/private-actions.js +29 -55
- package/build/store/private-actions.js.map +1 -1
- package/build/store/private-selectors.js +0 -8
- package/build/store/private-selectors.js.map +1 -1
- package/build/store/reducer.js +3 -20
- package/build/store/reducer.js.map +1 -1
- package/build/store/selectors.js +27 -15
- package/build/store/selectors.js.map +1 -1
- package/build/utils/calculate-scale.js +17 -0
- package/build/utils/calculate-scale.js.map +1 -0
- package/build-module/components/block-actions/index.js +45 -32
- package/build-module/components/block-actions/index.js.map +1 -1
- package/build-module/components/block-bindings-toolbar-indicator/index.js +18 -0
- package/build-module/components/block-bindings-toolbar-indicator/index.js.map +1 -0
- package/build-module/components/block-edit/context.js +1 -0
- package/build-module/components/block-edit/context.js.map +1 -1
- package/build-module/components/block-edit/index.js +9 -4
- package/build-module/components/block-edit/index.js.map +1 -1
- package/build-module/components/block-inspector/index.js +6 -5
- package/build-module/components/block-inspector/index.js.map +1 -1
- package/build-module/components/block-list/block-invalid-warning.native.js.map +1 -1
- package/build-module/components/block-list/block-list-item.native.js +1 -1
- package/build-module/components/block-list/block-list-item.native.js.map +1 -1
- package/build-module/components/block-list/block-outline.native.js +23 -7
- package/build-module/components/block-list/block-outline.native.js.map +1 -1
- package/build-module/components/block-list/block-selection-button.native.js.map +1 -1
- package/build-module/components/block-list/block.native.js +0 -3
- package/build-module/components/block-list/block.native.js.map +1 -1
- package/build-module/components/block-list/use-block-props/index.js +9 -2
- package/build-module/components/block-list/use-block-props/index.js.map +1 -1
- package/build-module/components/block-list/use-block-props/use-selected-block-event-handlers.js +3 -3
- package/build-module/components/block-list/use-block-props/use-selected-block-event-handlers.js.map +1 -1
- package/build-module/components/block-mover/index.native.js.map +1 -1
- package/build-module/components/block-popover/cover.js +60 -0
- package/build-module/components/block-popover/cover.js.map +1 -0
- package/build-module/components/block-popover/drop-zone.js +2 -3
- package/build-module/components/block-popover/drop-zone.js.map +1 -1
- package/build-module/components/block-popover/index.js +1 -19
- package/build-module/components/block-popover/index.js.map +1 -1
- package/build-module/components/block-preview/index.js +2 -1
- package/build-module/components/block-preview/index.js.map +1 -1
- package/build-module/components/block-removal-warning-modal/index.js +3 -5
- package/build-module/components/block-removal-warning-modal/index.js.map +1 -1
- package/build-module/components/block-rename/modal.js.map +1 -1
- package/build-module/components/block-settings-menu/block-settings-dropdown.js +12 -10
- package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
- package/build-module/components/block-switcher/block-transformations-menu.native.js.map +1 -1
- package/build-module/components/block-toolbar/block-toolbar-menu.native.js.map +1 -1
- package/build-module/components/block-toolbar/index.js +21 -11
- package/build-module/components/block-toolbar/index.js.map +1 -1
- package/build-module/components/block-toolbar/shuffle.js +82 -0
- package/build-module/components/block-toolbar/shuffle.js.map +1 -0
- package/build-module/components/block-toolbar/use-has-block-toolbar.js +36 -0
- package/build-module/components/block-toolbar/use-has-block-toolbar.js.map +1 -0
- package/build-module/components/block-tools/block-selection-button.js +5 -1
- package/build-module/components/block-tools/block-selection-button.js.map +1 -1
- package/build-module/components/block-tools/empty-block-inserter.js +2 -5
- package/build-module/components/block-tools/empty-block-inserter.js.map +1 -1
- package/build-module/components/block-tools/index.js +9 -26
- package/build-module/components/block-tools/index.js.map +1 -1
- package/build-module/components/block-tools/use-show-block-tools.js +54 -0
- package/build-module/components/block-tools/use-show-block-tools.js.map +1 -0
- package/build-module/components/caption/index.native.js.map +1 -1
- package/build-module/components/child-layout-control/index.js.map +1 -1
- package/build-module/components/color-palette/control.js.map +1 -1
- package/build-module/components/colors-gradients/control.js +1 -1
- package/build-module/components/colors-gradients/control.js.map +1 -1
- package/build-module/components/global-styles/border-panel.js +22 -10
- package/build-module/components/global-styles/border-panel.js.map +1 -1
- package/build-module/components/global-styles/color-panel.js +1 -1
- package/build-module/components/global-styles/color-panel.js.map +1 -1
- package/build-module/components/global-styles/image-settings-panel.js.map +1 -1
- package/build-module/components/global-styles/index.js +1 -1
- package/build-module/components/global-styles/index.js.map +1 -1
- package/build-module/components/global-styles/shadow-panel-components.js +82 -24
- package/build-module/components/global-styles/shadow-panel-components.js.map +1 -1
- package/build-module/components/global-styles/typography-utils.js +7 -5
- package/build-module/components/global-styles/typography-utils.js.map +1 -1
- package/build-module/components/global-styles/use-global-styles-output.js +16 -16
- package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
- package/build-module/components/global-styles/utils.js +2 -2
- package/build-module/components/global-styles/utils.js.map +1 -1
- package/build-module/components/grid-visualizer/grid-item-resizer.js +69 -0
- package/build-module/components/grid-visualizer/grid-item-resizer.js.map +1 -0
- package/build-module/components/grid-visualizer/grid-visualizer.js +73 -0
- package/build-module/components/grid-visualizer/grid-visualizer.js.map +1 -0
- package/build-module/components/grid-visualizer/index.js +3 -0
- package/build-module/components/grid-visualizer/index.js.map +1 -0
- package/build-module/components/grid-visualizer/utils.js +4 -0
- package/build-module/components/grid-visualizer/utils.js.map +1 -0
- package/build-module/components/iframe/index.js +61 -16
- package/build-module/components/iframe/index.js.map +1 -1
- package/build-module/components/index.native.js +1 -1
- package/build-module/components/index.native.js.map +1 -1
- package/build-module/components/inner-blocks/use-nested-settings-update.js +8 -2
- package/build-module/components/inner-blocks/use-nested-settings-update.js.map +1 -1
- package/build-module/components/inserter/media-tab/media-preview.js.map +1 -1
- package/build-module/components/inserter/menu.js +9 -3
- package/build-module/components/inserter/menu.js.map +1 -1
- package/build-module/components/inserter/menu.native.js.map +1 -1
- package/build-module/components/inserter/mobile-tab-navigation.js +1 -1
- package/build-module/components/inserter/mobile-tab-navigation.js.map +1 -1
- package/build-module/components/inserter/search-results.js +3 -2
- package/build-module/components/inserter/search-results.js.map +1 -1
- package/build-module/components/inserter/tabs.js +2 -1
- package/build-module/components/inserter/tabs.js.map +1 -1
- package/build-module/components/inspector-controls/block-support-tools-panel.js.map +1 -1
- package/build-module/components/inspector-controls-tabs/index.js +1 -1
- package/build-module/components/inspector-controls-tabs/index.js.map +1 -1
- package/build-module/components/inspector-controls-tabs/styles-tab.js +2 -2
- package/build-module/components/inspector-controls-tabs/styles-tab.js.map +1 -1
- package/build-module/components/link-control/link-preview.js +5 -2
- package/build-module/components/link-control/link-preview.js.map +1 -1
- package/build-module/components/link-control/search-input.js.map +1 -1
- package/build-module/components/list-view/block-select-button.js +11 -3
- package/build-module/components/list-view/block-select-button.js.map +1 -1
- package/build-module/components/list-view/branch.js.map +1 -1
- package/build-module/components/list-view/drop-indicator.js.map +1 -1
- package/build-module/components/list-view/index.js.map +1 -1
- package/build-module/components/list-view/use-clipboard-handler.js +3 -2
- package/build-module/components/list-view/use-clipboard-handler.js.map +1 -1
- package/build-module/components/panel-color-settings/index.js.map +1 -1
- package/build-module/components/provider/index.js.map +1 -1
- package/build-module/components/resizable-box-popover/index.js +3 -5
- package/build-module/components/resizable-box-popover/index.js.map +1 -1
- package/build-module/components/responsive-block-control/index.js +1 -1
- package/build-module/components/responsive-block-control/index.js.map +1 -1
- package/build-module/components/rich-text/index.js +47 -28
- package/build-module/components/rich-text/index.js.map +1 -1
- package/build-module/components/rich-text/use-enter.js +3 -0
- package/build-module/components/rich-text/use-enter.js.map +1 -1
- package/build-module/components/spacing-sizes-control/input-controls/spacing-input-control.js.map +1 -1
- package/build-module/components/url-popover/index.js +3 -3
- package/build-module/components/url-popover/index.js.map +1 -1
- package/build-module/components/writing-flow/use-clipboard-handler.js +3 -2
- package/build-module/components/writing-flow/use-clipboard-handler.js.map +1 -1
- package/build-module/components/writing-flow/utils.js +22 -7
- package/build-module/components/writing-flow/utils.js.map +1 -1
- package/build-module/hooks/background.js.map +1 -1
- package/build-module/hooks/block-hooks.js +34 -8
- package/build-module/hooks/block-hooks.js.map +1 -1
- package/build-module/hooks/border.js +7 -5
- package/build-module/hooks/border.js.map +1 -1
- package/build-module/hooks/dimensions.js +1 -2
- package/build-module/hooks/dimensions.js.map +1 -1
- package/build-module/hooks/font-size.js +7 -8
- package/build-module/hooks/font-size.js.map +1 -1
- package/build-module/hooks/index.js +1 -1
- package/build-module/hooks/index.js.map +1 -1
- package/build-module/hooks/layout-child.js +39 -0
- package/build-module/hooks/layout-child.js.map +1 -1
- package/build-module/hooks/layout.js +11 -4
- package/build-module/hooks/layout.js.map +1 -1
- package/build-module/hooks/line-height.js.map +1 -1
- package/build-module/hooks/spacing-visualizer.js +106 -0
- package/build-module/hooks/spacing-visualizer.js.map +1 -0
- package/build-module/hooks/use-bindings-attributes.js +172 -49
- package/build-module/hooks/use-bindings-attributes.js.map +1 -1
- package/build-module/hooks/use-typography-props.js +2 -3
- package/build-module/hooks/use-typography-props.js.map +1 -1
- package/build-module/layouts/grid.js +6 -2
- package/build-module/layouts/grid.js.map +1 -1
- package/build-module/private-apis.js +7 -3
- package/build-module/private-apis.js.map +1 -1
- package/build-module/store/actions.js +42 -12
- package/build-module/store/actions.js.map +1 -1
- package/build-module/store/private-actions.js +29 -54
- package/build-module/store/private-actions.js.map +1 -1
- package/build-module/store/private-selectors.js +0 -6
- package/build-module/store/private-selectors.js.map +1 -1
- package/build-module/store/reducer.js +3 -20
- package/build-module/store/reducer.js.map +1 -1
- package/build-module/store/selectors.js +23 -13
- package/build-module/store/selectors.js.map +1 -1
- package/build-module/utils/calculate-scale.js +11 -0
- package/build-module/utils/calculate-scale.js.map +1 -0
- package/build-style/content-rtl.css +8 -2
- package/build-style/content.css +8 -2
- package/build-style/default-editor-styles-rtl.css +1 -0
- package/build-style/default-editor-styles.css +1 -0
- package/build-style/style-rtl.css +113 -22
- package/build-style/style.css +113 -22
- package/package.json +31 -31
- package/src/components/block-actions/index.js +57 -47
- package/src/components/block-bindings-toolbar-indicator/index.js +20 -0
- package/src/components/block-bindings-toolbar-indicator/style.scss +14 -0
- package/src/components/block-draggable/test/index.native.js +2 -2
- package/src/components/block-edit/context.js +1 -0
- package/src/components/block-edit/index.js +5 -1
- package/src/components/block-inspector/index.js +7 -5
- package/src/components/block-list/block-invalid-warning.native.js +1 -1
- package/src/components/block-list/block-list-item.native.js +1 -1
- package/src/components/block-list/block-outline.native.js +36 -21
- package/src/components/block-list/block-selection-button.native.js +1 -3
- package/src/components/block-list/block.native.js +0 -3
- package/src/components/block-list/content.scss +5 -1
- package/src/components/block-list/test/block-outline.native.js +255 -0
- package/src/components/block-list/use-block-props/index.js +12 -2
- package/src/components/block-list/use-block-props/use-selected-block-event-handlers.js +3 -7
- package/src/components/block-mover/index.native.js +1 -1
- package/src/components/block-popover/cover.js +63 -0
- package/src/components/block-popover/drop-zone.js +3 -4
- package/src/components/block-popover/index.js +1 -28
- package/src/components/block-preview/index.js +3 -1
- package/src/components/block-removal-warning-modal/index.js +5 -19
- package/src/components/block-rename/modal.js +1 -1
- package/src/components/block-settings-menu/block-settings-dropdown.js +12 -9
- package/src/components/block-switcher/block-transformations-menu.native.js +1 -1
- package/src/components/block-toolbar/block-toolbar-menu.native.js +2 -2
- package/src/components/block-toolbar/index.js +19 -15
- package/src/components/block-toolbar/shuffle.js +93 -0
- package/src/components/block-toolbar/use-has-block-toolbar.js +49 -0
- package/src/components/block-tools/block-selection-button.js +4 -0
- package/src/components/block-tools/empty-block-inserter.js +3 -6
- package/src/components/block-tools/index.js +13 -36
- package/src/components/block-tools/use-show-block-tools.js +73 -0
- package/src/components/caption/index.native.js +1 -1
- package/src/components/child-layout-control/index.js +1 -1
- package/src/components/color-palette/control.js +1 -1
- package/src/components/colors-gradients/control.js +1 -1
- package/src/components/colors-gradients/test/control.js +2 -2
- package/src/components/contrast-checker/test/index.js +10 -10
- package/src/components/default-block-appender/content.scss +5 -2
- package/src/components/global-styles/border-panel.js +35 -24
- package/src/components/global-styles/color-panel.js +1 -1
- package/src/components/global-styles/image-settings-panel.js +1 -1
- package/src/components/global-styles/index.js +5 -1
- package/src/components/global-styles/shadow-panel-components.js +92 -23
- package/src/components/global-styles/style.scss +33 -10
- package/src/components/global-styles/test/typography-utils.js +231 -81
- package/src/components/global-styles/typography-utils.js +10 -7
- package/src/components/global-styles/use-global-styles-output.js +14 -16
- package/src/components/global-styles/utils.js +2 -8
- package/src/components/grid-visualizer/grid-item-resizer.js +100 -0
- package/src/components/grid-visualizer/grid-visualizer.js +81 -0
- package/src/components/grid-visualizer/index.js +2 -0
- package/src/components/grid-visualizer/style.scss +33 -0
- package/src/components/grid-visualizer/utils.js +5 -0
- package/src/components/iframe/index.js +78 -31
- package/src/components/index.native.js +1 -0
- package/src/components/inner-blocks/use-nested-settings-update.js +12 -2
- package/src/components/inserter/media-tab/media-preview.js +1 -1
- package/src/components/inserter/menu.js +10 -4
- package/src/components/inserter/menu.native.js +3 -3
- package/src/components/inserter/mobile-tab-navigation.js +1 -1
- package/src/components/inserter/search-results.js +2 -1
- package/src/components/inserter/style.scss +10 -0
- package/src/components/inserter/tabs.js +2 -1
- package/src/components/inspector-controls/block-support-tools-panel.js +2 -2
- package/src/components/inspector-controls-tabs/index.js +1 -1
- package/src/components/inspector-controls-tabs/styles-tab.js +2 -2
- package/src/components/line-height-control/test/index.js +1 -1
- package/src/components/link-control/link-preview.js +9 -2
- package/src/components/link-control/search-input.js +1 -1
- package/src/components/link-control/style.scss +9 -0
- package/src/components/list-view/block-select-button.js +16 -2
- package/src/components/list-view/branch.js +1 -1
- package/src/components/list-view/drop-indicator.js +1 -1
- package/src/components/list-view/index.js +1 -1
- package/src/components/list-view/style.scss +8 -0
- package/src/components/list-view/use-clipboard-handler.js +3 -2
- package/src/components/panel-color-settings/index.js +1 -1
- package/src/components/panel-color-settings/test/index.js +3 -3
- package/src/components/provider/index.js +1 -4
- package/src/components/resizable-box-popover/index.js +4 -6
- package/src/components/responsive-block-control/README.md +4 -4
- package/src/components/responsive-block-control/index.js +1 -1
- package/src/components/responsive-block-control/test/index.js +5 -5
- package/src/components/rich-text/index.js +76 -53
- package/src/components/rich-text/use-enter.js +4 -0
- package/src/components/spacing-sizes-control/input-controls/spacing-input-control.js +4 -4
- package/src/components/url-popover/index.js +5 -5
- package/src/components/url-popover/style.scss +1 -0
- package/src/components/writing-flow/use-clipboard-handler.js +3 -2
- package/src/components/writing-flow/utils.js +31 -16
- package/src/hooks/background.js +1 -1
- package/src/hooks/block-hooks.js +47 -9
- package/src/hooks/block-hooks.scss +6 -0
- package/src/hooks/border.js +16 -4
- package/src/hooks/dimensions.js +1 -2
- package/src/hooks/font-size.js +7 -12
- package/src/hooks/index.js +1 -0
- package/src/hooks/layout-child.js +38 -0
- package/src/hooks/layout.js +12 -1
- package/src/hooks/line-height.js +1 -1
- package/src/hooks/spacing-visualizer.js +126 -0
- package/src/hooks/{padding.scss → spacing.scss} +1 -1
- package/src/hooks/use-bindings-attributes.js +215 -65
- package/src/hooks/use-typography-props.js +2 -8
- package/src/layouts/grid.js +8 -3
- package/src/private-apis.js +6 -2
- package/src/store/actions.js +56 -18
- package/src/store/private-actions.js +34 -79
- package/src/store/private-selectors.js +0 -8
- package/src/store/reducer.js +2 -23
- package/src/store/selectors.js +41 -46
- package/src/store/test/actions.js +0 -4
- package/src/style.scss +3 -1
- package/src/utils/calculate-scale.js +20 -0
- package/build/hooks/margin.js +0 -86
- package/build/hooks/margin.js.map +0 -1
- package/build/hooks/padding.js +0 -78
- package/build/hooks/padding.js.map +0 -1
- package/build/utils/use-can-block-toolbar-be-focused.js +0 -46
- package/build/utils/use-can-block-toolbar-be-focused.js.map +0 -1
- package/build-module/hooks/margin.js +0 -78
- package/build-module/hooks/margin.js.map +0 -1
- package/build-module/hooks/padding.js +0 -70
- package/build-module/hooks/padding.js.map +0 -1
- package/build-module/utils/use-can-block-toolbar-be-focused.js +0 -40
- package/build-module/utils/use-can-block-toolbar-be-focused.js.map +0 -1
- package/src/hooks/margin.js +0 -91
- package/src/hooks/padding.js +0 -82
- package/src/utils/use-can-block-toolbar-be-focused.js +0 -48
|
@@ -29,13 +29,14 @@ const mediaTab = {
|
|
|
29
29
|
};
|
|
30
30
|
|
|
31
31
|
function InserterTabs( {
|
|
32
|
+
showBlocks = true,
|
|
32
33
|
showPatterns = false,
|
|
33
34
|
showMedia = false,
|
|
34
35
|
onSelect,
|
|
35
36
|
tabsContents,
|
|
36
37
|
} ) {
|
|
37
38
|
const tabs = [
|
|
38
|
-
blocksTab,
|
|
39
|
+
showBlocks && blocksTab,
|
|
39
40
|
showPatterns && patternsTab,
|
|
40
41
|
showMedia && mediaTab,
|
|
41
42
|
].filter( Boolean );
|
|
@@ -68,8 +68,8 @@ export default function BlockSupportToolsPanel( { children, group, label } ) {
|
|
|
68
68
|
resetAll={ resetAll }
|
|
69
69
|
key={ panelId }
|
|
70
70
|
panelId={ panelId }
|
|
71
|
-
hasInnerWrapper
|
|
72
|
-
shouldRenderPlaceholderItems
|
|
71
|
+
hasInnerWrapper
|
|
72
|
+
shouldRenderPlaceholderItems // Required to maintain fills ordering.
|
|
73
73
|
__experimentalFirstVisibleItemClass="first"
|
|
74
74
|
__experimentalLastVisibleItemClass="last"
|
|
75
75
|
dropdownMenuProps={ TOOLSPANEL_DROPDOWNMENU_PROPS }
|
|
@@ -35,7 +35,7 @@ export default function InspectorControlsTabs( {
|
|
|
35
35
|
|
|
36
36
|
return (
|
|
37
37
|
<div className="block-editor-block-inspector__tabs">
|
|
38
|
-
<Tabs
|
|
38
|
+
<Tabs defaultTabId={ initialTabName } key={ clientId }>
|
|
39
39
|
<Tabs.TabList>
|
|
40
40
|
{ tabs.map( ( tab ) => (
|
|
41
41
|
<Tabs.Tab
|
|
@@ -9,10 +9,10 @@ import { __ } from '@wordpress/i18n';
|
|
|
9
9
|
*/
|
|
10
10
|
import BlockStyles from '../block-styles';
|
|
11
11
|
import InspectorControls from '../inspector-controls';
|
|
12
|
-
import {
|
|
12
|
+
import { useBorderPanelLabel } from '../../hooks/border';
|
|
13
13
|
|
|
14
14
|
const StylesTab = ( { blockName, clientId, hasBlockStyles } ) => {
|
|
15
|
-
const borderPanelLabel =
|
|
15
|
+
const borderPanelLabel = useBorderPanelLabel( { blockName } );
|
|
16
16
|
|
|
17
17
|
return (
|
|
18
18
|
<>
|
|
@@ -16,8 +16,9 @@ import { useCopyToClipboard } from '@wordpress/compose';
|
|
|
16
16
|
import { filterURLForDisplay, safeDecodeURI } from '@wordpress/url';
|
|
17
17
|
import { Icon, globe, info, linkOff, edit, copySmall } from '@wordpress/icons';
|
|
18
18
|
import { __unstableStripHTML as stripHTML } from '@wordpress/dom';
|
|
19
|
-
import { useDispatch } from '@wordpress/data';
|
|
19
|
+
import { useDispatch, useSelect } from '@wordpress/data';
|
|
20
20
|
import { store as noticesStore } from '@wordpress/notices';
|
|
21
|
+
import { store as preferencesStore } from '@wordpress/preferences';
|
|
21
22
|
|
|
22
23
|
/**
|
|
23
24
|
* Internal dependencies
|
|
@@ -33,6 +34,12 @@ export default function LinkPreview( {
|
|
|
33
34
|
hasUnlinkControl = false,
|
|
34
35
|
onRemove,
|
|
35
36
|
} ) {
|
|
37
|
+
const showIconLabels = useSelect(
|
|
38
|
+
( select ) =>
|
|
39
|
+
select( preferencesStore ).get( 'core', 'showIconLabels' ),
|
|
40
|
+
[]
|
|
41
|
+
);
|
|
42
|
+
|
|
36
43
|
// Avoid fetching if rich previews are not desired.
|
|
37
44
|
const showRichPreviews = hasRichPreviews ? value?.url : null;
|
|
38
45
|
|
|
@@ -139,7 +146,7 @@ export default function LinkPreview( {
|
|
|
139
146
|
label={ sprintf(
|
|
140
147
|
// Translators: %s is a placeholder for the link URL and an optional colon, (if a Link URL is present).
|
|
141
148
|
__( 'Copy link%s' ), // Ends up looking like "Copy link: https://example.com".
|
|
142
|
-
isEmptyURL ? '' : ': ' + value.url
|
|
149
|
+
isEmptyURL || showIconLabels ? '' : ': ' + value.url
|
|
143
150
|
) }
|
|
144
151
|
ref={ ref }
|
|
145
152
|
disabled={ isEmptyURL }
|
|
@@ -130,7 +130,7 @@ const LinkControlSearchInput = forwardRef(
|
|
|
130
130
|
showSuggestions ? handleRenderSuggestions : null
|
|
131
131
|
}
|
|
132
132
|
__experimentalFetchLinkSuggestions={ searchHandler }
|
|
133
|
-
__experimentalHandleURLSuggestions
|
|
133
|
+
__experimentalHandleURLSuggestions
|
|
134
134
|
__experimentalShowInitialSuggestions={
|
|
135
135
|
showInitialSuggestions
|
|
136
136
|
}
|
|
@@ -34,6 +34,15 @@ $block-editor-link-control-number-of-actions: 1;
|
|
|
34
34
|
content: attr(aria-label);
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
|
+
|
|
38
|
+
.block-editor-link-control__search-item-top {
|
|
39
|
+
gap: $grid-unit-10;
|
|
40
|
+
|
|
41
|
+
.components-button.has-icon {
|
|
42
|
+
min-width: inherit;
|
|
43
|
+
width: min-content;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
37
46
|
}
|
|
38
47
|
}
|
|
39
48
|
|
|
@@ -14,7 +14,12 @@ import {
|
|
|
14
14
|
Tooltip,
|
|
15
15
|
} from '@wordpress/components';
|
|
16
16
|
import { forwardRef } from '@wordpress/element';
|
|
17
|
-
import {
|
|
17
|
+
import {
|
|
18
|
+
Icon,
|
|
19
|
+
connection,
|
|
20
|
+
lockSmall as lock,
|
|
21
|
+
pinSmall,
|
|
22
|
+
} from '@wordpress/icons';
|
|
18
23
|
import { SPACE, ENTER, BACKSPACE, DELETE } from '@wordpress/keycodes';
|
|
19
24
|
import { useSelect, useDispatch } from '@wordpress/data';
|
|
20
25
|
import { __unstableUseShortcutEventMatch as useShortcutEventMatch } from '@wordpress/keyboard-shortcuts';
|
|
@@ -32,11 +37,12 @@ import { useBlockLock } from '../block-lock';
|
|
|
32
37
|
import { store as blockEditorStore } from '../../store';
|
|
33
38
|
import useListViewImages from './use-list-view-images';
|
|
34
39
|
import { useListViewContext } from './context';
|
|
40
|
+
import { canBindBlock } from '../../hooks/use-bindings-attributes';
|
|
35
41
|
|
|
36
42
|
function ListViewBlockSelectButton(
|
|
37
43
|
{
|
|
38
44
|
className,
|
|
39
|
-
block: { clientId },
|
|
45
|
+
block: { clientId, name: blockName },
|
|
40
46
|
onClick,
|
|
41
47
|
onContextMenu,
|
|
42
48
|
onMouseDown,
|
|
@@ -66,6 +72,7 @@ function ListViewBlockSelectButton(
|
|
|
66
72
|
getBlockRootClientId,
|
|
67
73
|
getBlockOrder,
|
|
68
74
|
getBlocksByClientId,
|
|
75
|
+
getBlockAttributes,
|
|
69
76
|
canRemoveBlocks,
|
|
70
77
|
} = useSelect( blockEditorStore );
|
|
71
78
|
const { duplicateBlocks, multiSelect, removeBlocks } =
|
|
@@ -75,6 +82,8 @@ function ListViewBlockSelectButton(
|
|
|
75
82
|
const images = useListViewImages( { clientId, isExpanded } );
|
|
76
83
|
const { rootClientId } = useListViewContext();
|
|
77
84
|
|
|
85
|
+
const isConnected = getBlockAttributes( clientId )?.metadata?.bindings;
|
|
86
|
+
|
|
78
87
|
const positionLabel = blockInformation?.positionLabel
|
|
79
88
|
? sprintf(
|
|
80
89
|
// translators: 1: Position of selected block, e.g. "Sticky" or "Fixed".
|
|
@@ -278,6 +287,11 @@ function ListViewBlockSelectButton(
|
|
|
278
287
|
</Truncate>
|
|
279
288
|
</span>
|
|
280
289
|
) }
|
|
290
|
+
{ isConnected && canBindBlock( blockName ) && (
|
|
291
|
+
<span className="block-editor-list-view-block-select-button__bindings">
|
|
292
|
+
<Icon icon={ connection } />
|
|
293
|
+
</span>
|
|
294
|
+
) }
|
|
281
295
|
{ positionLabel && isSticky && (
|
|
282
296
|
<Tooltip text={ positionLabel }>
|
|
283
297
|
<Icon icon={ pinSmall } />
|
|
@@ -336,7 +336,7 @@ function ListViewComponent(
|
|
|
336
336
|
description && `block-editor-list-view-description-${ instanceId }`;
|
|
337
337
|
|
|
338
338
|
return (
|
|
339
|
-
<AsyncModeProvider value
|
|
339
|
+
<AsyncModeProvider value>
|
|
340
340
|
<ListViewDropIndicatorPreview
|
|
341
341
|
draggedBlockClientId={ firstDraggedBlockClientId }
|
|
342
342
|
listViewRef={ elementRef }
|
|
@@ -557,3 +557,11 @@ $block-navigation-max-indent: 8;
|
|
|
557
557
|
.list-view-appender__description {
|
|
558
558
|
display: none;
|
|
559
559
|
}
|
|
560
|
+
|
|
561
|
+
.block-editor-list-view-block-select-button__bindings svg g {
|
|
562
|
+
stroke: var(--wp-bound-block-color);
|
|
563
|
+
fill: transparent;
|
|
564
|
+
stroke-width: 1.5;
|
|
565
|
+
stroke-linecap: round;
|
|
566
|
+
stroke-linejoin: round;
|
|
567
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* WordPress dependencies
|
|
3
3
|
*/
|
|
4
|
-
import { useDispatch, useSelect } from '@wordpress/data';
|
|
4
|
+
import { useDispatch, useRegistry, useSelect } from '@wordpress/data';
|
|
5
5
|
import { useRefEffect } from '@wordpress/compose';
|
|
6
6
|
|
|
7
7
|
/**
|
|
@@ -15,6 +15,7 @@ import { getPasteBlocks, setClipboardBlocks } from '../writing-flow/utils';
|
|
|
15
15
|
// This hook borrows from useClipboardHandler in ../writing-flow/use-clipboard-handler.js
|
|
16
16
|
// and adds behaviour for the list view, while skipping partial selection.
|
|
17
17
|
export default function useClipboardHandler( { selectBlock } ) {
|
|
18
|
+
const registry = useRegistry();
|
|
18
19
|
const {
|
|
19
20
|
getBlockOrder,
|
|
20
21
|
getBlockRootClientId,
|
|
@@ -106,7 +107,7 @@ export default function useClipboardHandler( { selectBlock } ) {
|
|
|
106
107
|
|
|
107
108
|
notifyCopy( event.type, selectedBlockClientIds );
|
|
108
109
|
const blocks = getBlocksByClientId( selectedBlockClientIds );
|
|
109
|
-
setClipboardBlocks( event, blocks );
|
|
110
|
+
setClipboardBlocks( event, blocks, registry );
|
|
110
111
|
}
|
|
111
112
|
|
|
112
113
|
if ( event.type === 'cut' ) {
|
|
@@ -16,7 +16,7 @@ describe( 'PanelColorSettings', () => {
|
|
|
16
16
|
<PanelColorSettings
|
|
17
17
|
title="Test Title"
|
|
18
18
|
colors={ [] }
|
|
19
|
-
disableCustomColors
|
|
19
|
+
disableCustomColors
|
|
20
20
|
colorSettings={ [
|
|
21
21
|
{
|
|
22
22
|
value: '#000',
|
|
@@ -39,7 +39,7 @@ describe( 'PanelColorSettings', () => {
|
|
|
39
39
|
<PanelColorSettings
|
|
40
40
|
title="Test Title"
|
|
41
41
|
colors={ [] }
|
|
42
|
-
disableCustomColors
|
|
42
|
+
disableCustomColors
|
|
43
43
|
colorSettings={ [
|
|
44
44
|
{
|
|
45
45
|
value: '#000',
|
|
@@ -63,7 +63,7 @@ describe( 'PanelColorSettings', () => {
|
|
|
63
63
|
<PanelColorSettings
|
|
64
64
|
title="Test Title"
|
|
65
65
|
colors={ [] }
|
|
66
|
-
disableCustomColors
|
|
66
|
+
disableCustomColors
|
|
67
67
|
colorSettings={ [
|
|
68
68
|
{
|
|
69
69
|
value: '#000',
|
|
@@ -57,10 +57,7 @@ export const ExperimentalBlockEditorProvider = withRegistryProvider(
|
|
|
57
57
|
|
|
58
58
|
export const BlockEditorProvider = ( props ) => {
|
|
59
59
|
return (
|
|
60
|
-
<ExperimentalBlockEditorProvider
|
|
61
|
-
{ ...props }
|
|
62
|
-
stripExperimentalSettings={ true }
|
|
63
|
-
>
|
|
60
|
+
<ExperimentalBlockEditorProvider { ...props } stripExperimentalSettings>
|
|
64
61
|
{ props.children }
|
|
65
62
|
</ExperimentalBlockEditorProvider>
|
|
66
63
|
);
|
|
@@ -6,7 +6,7 @@ import { ResizableBox } from '@wordpress/components';
|
|
|
6
6
|
/**
|
|
7
7
|
* Internal dependencies
|
|
8
8
|
*/
|
|
9
|
-
import
|
|
9
|
+
import BlockPopoverCover from '../block-popover/cover';
|
|
10
10
|
|
|
11
11
|
export default function ResizableBoxPopover( {
|
|
12
12
|
clientId,
|
|
@@ -14,14 +14,12 @@ export default function ResizableBoxPopover( {
|
|
|
14
14
|
...props
|
|
15
15
|
} ) {
|
|
16
16
|
return (
|
|
17
|
-
<
|
|
17
|
+
<BlockPopoverCover
|
|
18
18
|
clientId={ clientId }
|
|
19
|
-
|
|
20
|
-
__unstablePopoverSlot="__unstable-block-tools-after"
|
|
21
|
-
shift={ false }
|
|
19
|
+
__unstablePopoverSlot="block-toolbar"
|
|
22
20
|
{ ...props }
|
|
23
21
|
>
|
|
24
22
|
<ResizableBox { ...resizableBoxProps } />
|
|
25
|
-
</
|
|
23
|
+
</BlockPopoverCover>
|
|
26
24
|
);
|
|
27
25
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
`ResponsiveBlockControl` provides a standardised interface for the creation of Block controls that require **different settings per viewport** (ie: "responsive" settings).
|
|
4
4
|
|
|
5
|
-
For example, imagine your Block provides a control which affords the ability to change a "padding" value used in the Block display. Consider that whilst this setting may work well on "large" screens, the same value may not work well on smaller screens (it may be too large for example). As a result, you now need to provide a padding control _per viewport/
|
|
5
|
+
For example, imagine your Block provides a control which affords the ability to change a "padding" value used in the Block display. Consider that whilst this setting may work well on "large" screens, the same value may not work well on smaller screens (it may be too large for example). As a result, you now need to provide a padding control _per viewport/screen size_.
|
|
6
6
|
|
|
7
7
|
`ResponsiveBlockControl` provides a standardised component for the creation of such interfaces within Gutenberg.
|
|
8
8
|
|
|
@@ -25,7 +25,7 @@ import { useState } from 'react';
|
|
|
25
25
|
import { registerBlockType } from '@wordpress/blocks';
|
|
26
26
|
import {
|
|
27
27
|
InspectorControls,
|
|
28
|
-
ResponsiveBlockControl,
|
|
28
|
+
__experimentalResponsiveBlockControl as ResponsiveBlockControl,
|
|
29
29
|
} from '@wordpress/block-editor';
|
|
30
30
|
import {
|
|
31
31
|
DimensionControl,
|
|
@@ -194,7 +194,7 @@ const renderResponsiveControls = ( viewports ) => {
|
|
|
194
194
|
### `toggleLabel`
|
|
195
195
|
|
|
196
196
|
- **Type:** `String`
|
|
197
|
-
- **Default:** `Use the same %s on all
|
|
197
|
+
- **Default:** `Use the same %s on all screen sizes.` (where "%s" is the `property` prop - see above )
|
|
198
198
|
- **Required:** `false`
|
|
199
199
|
|
|
200
200
|
Optional label used for the toggle control which switches the interface between showing responsive controls or not.
|
|
@@ -213,7 +213,7 @@ Optional label used for the toggle control which switches the interface between
|
|
|
213
213
|
|
|
214
214
|
- **Required:** `false`
|
|
215
215
|
|
|
216
|
-
Optional object describing the attributes of the default value. By default this is `All` which indicates the control will affect "all viewports/
|
|
216
|
+
Optional object describing the attributes of the default value. By default this is `All` which indicates the control will affect "all viewports/screen sizes".
|
|
217
217
|
|
|
218
218
|
### `viewports`
|
|
219
219
|
|
|
@@ -52,7 +52,7 @@ function ResponsiveBlockControl( props ) {
|
|
|
52
52
|
toggleLabel ||
|
|
53
53
|
sprintf(
|
|
54
54
|
/* translators: %s: Property value for the control (eg: margin, padding, etc.). */
|
|
55
|
-
__( 'Use the same %s on all
|
|
55
|
+
__( 'Use the same %s on all screen sizes.' ),
|
|
56
56
|
property
|
|
57
57
|
);
|
|
58
58
|
|
|
@@ -81,7 +81,7 @@ describe( 'Basic rendering', () => {
|
|
|
81
81
|
} );
|
|
82
82
|
|
|
83
83
|
const toggleState = screen.getByRole( 'checkbox', {
|
|
84
|
-
name: 'Use the same padding on all
|
|
84
|
+
name: 'Use the same padding on all screen sizes.',
|
|
85
85
|
checked: true,
|
|
86
86
|
} );
|
|
87
87
|
|
|
@@ -177,7 +177,7 @@ describe( 'Default and Responsive modes', () => {
|
|
|
177
177
|
<ResponsiveBlockControl
|
|
178
178
|
title="Padding"
|
|
179
179
|
property="padding"
|
|
180
|
-
isResponsive
|
|
180
|
+
isResponsive
|
|
181
181
|
renderDefaultControl={ renderTestDefaultControlComponent }
|
|
182
182
|
/>
|
|
183
183
|
);
|
|
@@ -217,7 +217,7 @@ describe( 'Default and Responsive modes', () => {
|
|
|
217
217
|
<ResponsiveBlockControl
|
|
218
218
|
title="Padding"
|
|
219
219
|
property="padding"
|
|
220
|
-
isResponsive
|
|
220
|
+
isResponsive
|
|
221
221
|
renderDefaultControl={ mockRenderDefaultControl }
|
|
222
222
|
viewports={ customViewportSet }
|
|
223
223
|
/>
|
|
@@ -268,7 +268,7 @@ describe( 'Default and Responsive modes', () => {
|
|
|
268
268
|
|
|
269
269
|
// Select elements based on what the user can see.
|
|
270
270
|
const toggleInput = screen.getByRole( 'checkbox', {
|
|
271
|
-
name: 'Use the same padding on all
|
|
271
|
+
name: 'Use the same padding on all screen sizes.',
|
|
272
272
|
checked: true,
|
|
273
273
|
} );
|
|
274
274
|
|
|
@@ -319,7 +319,7 @@ describe( 'Default and Responsive modes', () => {
|
|
|
319
319
|
<ResponsiveBlockControl
|
|
320
320
|
title="Padding"
|
|
321
321
|
property="padding"
|
|
322
|
-
isResponsive
|
|
322
|
+
isResponsive
|
|
323
323
|
renderDefaultControl={ spyRenderDefaultControl }
|
|
324
324
|
renderResponsiveControls={ mockRenderResponsiveControls }
|
|
325
325
|
/>
|
|
@@ -19,13 +19,14 @@ import {
|
|
|
19
19
|
removeFormat,
|
|
20
20
|
} from '@wordpress/rich-text';
|
|
21
21
|
import { Popover } from '@wordpress/components';
|
|
22
|
-
import { getBlockType } from '@wordpress/blocks';
|
|
22
|
+
import { getBlockType, store as blocksStore } from '@wordpress/blocks';
|
|
23
23
|
|
|
24
24
|
/**
|
|
25
25
|
* Internal dependencies
|
|
26
26
|
*/
|
|
27
27
|
import { useBlockEditorAutocompleteProps } from '../autocomplete';
|
|
28
28
|
import { useBlockEditContext } from '../block-edit';
|
|
29
|
+
import { blockBindingsKey } from '../block-edit/context';
|
|
29
30
|
import FormatToolbarContainer from './format-toolbar-container';
|
|
30
31
|
import { store as blockEditorStore } from '../../store';
|
|
31
32
|
import { useUndoAutomaticChange } from './use-undo-automatic-change';
|
|
@@ -46,7 +47,7 @@ import { getAllowedFormats } from './utils';
|
|
|
46
47
|
import { Content } from './content';
|
|
47
48
|
import { withDeprecations } from './with-deprecations';
|
|
48
49
|
import { unlock } from '../../lock-unlock';
|
|
49
|
-
import {
|
|
50
|
+
import { canBindBlock } from '../../hooks/use-bindings-attributes';
|
|
50
51
|
|
|
51
52
|
export const keyboardShortcutContext = createContext();
|
|
52
53
|
export const inputEventContext = createContext();
|
|
@@ -109,6 +110,7 @@ export function RichTextWrapper(
|
|
|
109
110
|
__unstableDisableFormats: disableFormats,
|
|
110
111
|
disableLineBreaks,
|
|
111
112
|
__unstableAllowPrefixTransformations,
|
|
113
|
+
disableEditing,
|
|
112
114
|
...props
|
|
113
115
|
},
|
|
114
116
|
forwardedRef
|
|
@@ -116,11 +118,9 @@ export function RichTextWrapper(
|
|
|
116
118
|
props = removeNativeProps( props );
|
|
117
119
|
|
|
118
120
|
const anchorRef = useRef();
|
|
119
|
-
const
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
name: blockName,
|
|
123
|
-
} = useBlockEditContext();
|
|
121
|
+
const context = useBlockEditContext();
|
|
122
|
+
const { clientId, isSelected: isBlockSelected, name: blockName } = context;
|
|
123
|
+
const blockBindings = context[ blockBindingsKey ];
|
|
124
124
|
const selector = ( select ) => {
|
|
125
125
|
// Avoid subscribing to the block editor store if the block is not
|
|
126
126
|
// selected.
|
|
@@ -128,12 +128,10 @@ export function RichTextWrapper(
|
|
|
128
128
|
return { isSelected: false };
|
|
129
129
|
}
|
|
130
130
|
|
|
131
|
-
const { getSelectionStart, getSelectionEnd
|
|
131
|
+
const { getSelectionStart, getSelectionEnd } =
|
|
132
132
|
select( blockEditorStore );
|
|
133
133
|
const selectionStart = getSelectionStart();
|
|
134
134
|
const selectionEnd = getSelectionEnd();
|
|
135
|
-
const blockBindings =
|
|
136
|
-
getBlockAttributes( clientId )?.metadata?.bindings;
|
|
137
135
|
|
|
138
136
|
let isSelected;
|
|
139
137
|
|
|
@@ -146,50 +144,60 @@ export function RichTextWrapper(
|
|
|
146
144
|
isSelected = selectionStart.clientId === clientId;
|
|
147
145
|
}
|
|
148
146
|
|
|
149
|
-
// Disable Rich Text editing if block bindings specify that.
|
|
150
|
-
let shouldDisableEditing = false;
|
|
151
|
-
if ( blockBindings && blockName in BLOCK_BINDINGS_ALLOWED_BLOCKS ) {
|
|
152
|
-
const blockTypeAttributes = getBlockType( blockName ).attributes;
|
|
153
|
-
const { getBlockBindingsSource } = unlock(
|
|
154
|
-
select( blockEditorStore )
|
|
155
|
-
);
|
|
156
|
-
for ( const [ attribute, args ] of Object.entries(
|
|
157
|
-
blockBindings
|
|
158
|
-
) ) {
|
|
159
|
-
if (
|
|
160
|
-
blockTypeAttributes?.[ attribute ]?.source !== 'rich-text'
|
|
161
|
-
) {
|
|
162
|
-
break;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
// If the source is not defined, or if its value of `lockAttributesEditing` is `true`, disable it.
|
|
166
|
-
const blockBindingsSource = getBlockBindingsSource(
|
|
167
|
-
args.source
|
|
168
|
-
);
|
|
169
|
-
if (
|
|
170
|
-
! blockBindingsSource ||
|
|
171
|
-
blockBindingsSource.lockAttributesEditing
|
|
172
|
-
) {
|
|
173
|
-
shouldDisableEditing = true;
|
|
174
|
-
break;
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
|
|
179
147
|
return {
|
|
180
148
|
selectionStart: isSelected ? selectionStart.offset : undefined,
|
|
181
149
|
selectionEnd: isSelected ? selectionEnd.offset : undefined,
|
|
182
150
|
isSelected,
|
|
183
|
-
shouldDisableEditing,
|
|
184
151
|
};
|
|
185
152
|
};
|
|
186
|
-
const { selectionStart, selectionEnd, isSelected
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
153
|
+
const { selectionStart, selectionEnd, isSelected } = useSelect( selector, [
|
|
154
|
+
clientId,
|
|
155
|
+
identifier,
|
|
156
|
+
originalIsSelected,
|
|
157
|
+
isBlockSelected,
|
|
158
|
+
] );
|
|
159
|
+
|
|
160
|
+
const disableBoundBlocks = useSelect(
|
|
161
|
+
( select ) => {
|
|
162
|
+
// Disable Rich Text editing if block bindings specify that.
|
|
163
|
+
let _disableBoundBlocks = false;
|
|
164
|
+
if ( blockBindings && canBindBlock( blockName ) ) {
|
|
165
|
+
const blockTypeAttributes =
|
|
166
|
+
getBlockType( blockName ).attributes;
|
|
167
|
+
const { getBlockBindingsSource } = unlock(
|
|
168
|
+
select( blocksStore )
|
|
169
|
+
);
|
|
170
|
+
for ( const [ attribute, args ] of Object.entries(
|
|
171
|
+
blockBindings
|
|
172
|
+
) ) {
|
|
173
|
+
if (
|
|
174
|
+
blockTypeAttributes?.[ attribute ]?.source !==
|
|
175
|
+
'rich-text'
|
|
176
|
+
) {
|
|
177
|
+
break;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// If the source is not defined, or if its value of `lockAttributesEditing` is `true`, disable it.
|
|
181
|
+
const blockBindingsSource = getBlockBindingsSource(
|
|
182
|
+
args.source
|
|
183
|
+
);
|
|
184
|
+
if (
|
|
185
|
+
! blockBindingsSource ||
|
|
186
|
+
blockBindingsSource.lockAttributesEditing
|
|
187
|
+
) {
|
|
188
|
+
_disableBoundBlocks = true;
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
return _disableBoundBlocks;
|
|
195
|
+
},
|
|
196
|
+
[ blockBindings, blockName ]
|
|
197
|
+
);
|
|
198
|
+
|
|
199
|
+
const shouldDisableEditing = disableEditing || disableBoundBlocks;
|
|
200
|
+
|
|
193
201
|
const { getSelectionStart, getSelectionEnd, getBlockRootClientId } =
|
|
194
202
|
useSelect( blockEditorStore );
|
|
195
203
|
const { selectionChange } = useDispatch( blockEditorStore );
|
|
@@ -418,7 +426,7 @@ export function RichTextWrapper(
|
|
|
418
426
|
anchorRef,
|
|
419
427
|
] ) }
|
|
420
428
|
contentEditable={ ! shouldDisableEditing }
|
|
421
|
-
suppressContentEditableWarning
|
|
429
|
+
suppressContentEditableWarning
|
|
422
430
|
className={ classnames(
|
|
423
431
|
'block-editor-rich-text__editable',
|
|
424
432
|
props.className,
|
|
@@ -441,19 +449,34 @@ export function RichTextWrapper(
|
|
|
441
449
|
);
|
|
442
450
|
}
|
|
443
451
|
|
|
444
|
-
|
|
452
|
+
// This is the private API for the RichText component.
|
|
453
|
+
// It allows access to all props, not just the public ones.
|
|
454
|
+
export const PrivateRichText = withDeprecations(
|
|
445
455
|
forwardRef( RichTextWrapper )
|
|
446
456
|
);
|
|
447
457
|
|
|
448
|
-
|
|
449
|
-
|
|
458
|
+
PrivateRichText.Content = Content;
|
|
459
|
+
PrivateRichText.isEmpty = ( value ) => {
|
|
450
460
|
return ! value || value.length === 0;
|
|
451
461
|
};
|
|
452
462
|
|
|
463
|
+
// This is the public API for the RichText component.
|
|
464
|
+
// We wrap the PrivateRichText component to hide some props from the public API.
|
|
453
465
|
/**
|
|
454
466
|
* @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/rich-text/README.md
|
|
455
467
|
*/
|
|
456
|
-
|
|
468
|
+
const PublicForwardedRichTextContainer = forwardRef( ( props, ref ) => {
|
|
469
|
+
return (
|
|
470
|
+
<PrivateRichText ref={ ref } { ...props } disableEditing={ false } />
|
|
471
|
+
);
|
|
472
|
+
} );
|
|
473
|
+
|
|
474
|
+
PublicForwardedRichTextContainer.Content = Content;
|
|
475
|
+
PublicForwardedRichTextContainer.isEmpty = ( value ) => {
|
|
476
|
+
return ! value || value.length === 0;
|
|
477
|
+
};
|
|
478
|
+
|
|
479
|
+
export default PublicForwardedRichTextContainer;
|
|
457
480
|
export { RichTextShortcut } from './shortcut';
|
|
458
481
|
export { RichTextToolbarButton } from './toolbar-button';
|
|
459
482
|
export { __unstableRichTextInputEvent } from './input-event';
|
|
@@ -21,6 +21,10 @@ export function useEnter( props ) {
|
|
|
21
21
|
propsRef.current = props;
|
|
22
22
|
return useRefEffect( ( element ) => {
|
|
23
23
|
function onKeyDown( event ) {
|
|
24
|
+
if ( event.target.contentEditable !== 'true' ) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
|
|
24
28
|
if ( event.defaultPrevented ) {
|
|
25
29
|
return;
|
|
26
30
|
}
|