@wordpress/block-editor 15.23.0 → 16.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +33 -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-canvas/index.cjs +6 -1
- package/build/components/block-canvas/index.cjs.map +2 -2
- package/build/components/block-controls/groups.cjs +3 -1
- package/build/components/block-controls/groups.cjs.map +2 -2
- package/build/components/block-edit/edit.cjs +10 -18
- package/build/components/block-edit/edit.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 +2 -3
- 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-list/block.cjs +9 -3
- package/build/components/block-list/block.cjs.map +3 -3
- package/build/components/block-list/index.cjs +1 -3
- package/build/components/block-list/index.cjs.map +2 -2
- package/build/components/block-list/use-block-props/index.cjs +3 -1
- package/build/components/block-list/use-block-props/index.cjs.map +2 -2
- package/build/components/block-list/use-block-props/use-focus-first-element.cjs +9 -4
- package/build/components/block-list/use-block-props/use-focus-first-element.cjs.map +2 -2
- package/build/components/block-list/use-block-props/use-focus-handler.cjs +12 -4
- package/build/components/block-list/use-block-props/use-focus-handler.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-toolbar/index.cjs +43 -24
- package/build/components/block-toolbar/index.cjs.map +2 -2
- package/build/components/block-tools/index.cjs +7 -2
- package/build/components/block-tools/index.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/block-visibility/modal.cjs +20 -6
- package/build/components/block-visibility/modal.cjs.map +2 -2
- package/build/components/block-visibility/use-block-visibility.cjs +16 -6
- package/build/components/block-visibility/use-block-visibility.cjs.map +3 -3
- package/build/components/block-visibility/utils.cjs +15 -2
- package/build/components/block-visibility/utils.cjs.map +3 -3
- package/build/components/block-visibility/viewport-menu-item.cjs +7 -1
- package/build/components/block-visibility/viewport-menu-item.cjs.map +2 -2
- package/build/components/block-visibility/viewport-toolbar.cjs +5 -0
- package/build/components/block-visibility/viewport-toolbar.cjs.map +2 -2
- package/build/components/block-visibility/viewport-visibility-info.cjs +5 -1
- package/build/components/block-visibility/viewport-visibility-info.cjs.map +2 -2
- package/build/components/child-layout-control/index.cjs +0 -6
- 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/state-control-badges.cjs +39 -3
- package/build/components/global-styles/state-control-badges.cjs.map +2 -2
- package/build/components/global-styles/typography-panel.cjs +4 -11
- 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 +3 -7
- 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 +67 -12
- 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 +287 -28
- 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/keyboard-shortcuts/index.cjs +19 -11
- package/build/components/keyboard-shortcuts/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 +6 -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 +61 -21
- 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/media-placeholder/index.cjs +0 -1
- package/build/components/media-placeholder/index.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/rich-text/event-listeners/before-input-rules.cjs +3 -4
- package/build/components/rich-text/event-listeners/before-input-rules.cjs.map +3 -3
- package/build/components/rich-text/event-listeners/delete.cjs +2 -3
- package/build/components/rich-text/event-listeners/delete.cjs.map +3 -3
- package/build/components/rich-text/event-listeners/enter.cjs +3 -2
- package/build/components/rich-text/event-listeners/enter.cjs.map +3 -3
- package/build/components/rich-text/event-listeners/input-events.cjs +3 -3
- package/build/components/rich-text/event-listeners/input-events.cjs.map +3 -3
- package/build/components/rich-text/event-listeners/input-rules.cjs +3 -4
- package/build/components/rich-text/event-listeners/input-rules.cjs.map +3 -3
- package/build/components/rich-text/event-listeners/insert-replacement-text.cjs +3 -3
- package/build/components/rich-text/event-listeners/insert-replacement-text.cjs.map +3 -3
- package/build/components/rich-text/event-listeners/paste-handler.cjs +2 -1
- package/build/components/rich-text/event-listeners/paste-handler.cjs.map +3 -3
- package/build/components/rich-text/event-listeners/remove-browser-shortcuts.cjs +3 -3
- package/build/components/rich-text/event-listeners/remove-browser-shortcuts.cjs.map +3 -3
- package/build/components/rich-text/event-listeners/shortcuts.cjs +3 -3
- package/build/components/rich-text/event-listeners/shortcuts.cjs.map +3 -3
- package/build/components/rich-text/event-listeners/undo-automatic-change.cjs +3 -3
- package/build/components/rich-text/event-listeners/undo-automatic-change.cjs.map +3 -3
- package/build/components/rich-text/index.cjs +66 -17
- package/build/components/rich-text/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/typewriter/index.cjs +129 -136
- package/build/components/typewriter/index.cjs.map +3 -3
- package/build/components/use-block-commands/index.cjs +21 -17
- package/build/components/use-block-commands/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/writing-flow/index.cjs +12 -1
- package/build/components/writing-flow/index.cjs.map +3 -3
- package/build/components/writing-flow/use-arrow-nav.cjs +18 -5
- package/build/components/writing-flow/use-arrow-nav.cjs.map +2 -2
- package/build/components/writing-flow/use-click-selection.cjs +2 -2
- package/build/components/writing-flow/use-click-selection.cjs.map +2 -2
- package/build/components/writing-flow/use-clipboard-handler.cjs +4 -1
- package/build/components/writing-flow/use-clipboard-handler.cjs.map +2 -2
- package/build/components/writing-flow/use-drag-selection.cjs +3 -8
- package/build/components/writing-flow/use-drag-selection.cjs.map +2 -2
- package/build/components/writing-flow/use-editable-root.cjs +112 -0
- package/build/components/writing-flow/use-editable-root.cjs.map +7 -0
- package/build/components/writing-flow/use-home-end.cjs +64 -0
- package/build/components/writing-flow/use-home-end.cjs.map +7 -0
- package/build/components/writing-flow/use-input.cjs +15 -5
- package/build/components/writing-flow/use-input.cjs.map +2 -2
- package/build/components/writing-flow/use-multi-selection.cjs +2 -2
- package/build/components/writing-flow/use-multi-selection.cjs.map +2 -2
- package/build/components/writing-flow/use-select-all.cjs +14 -2
- package/build/components/writing-flow/use-select-all.cjs.map +2 -2
- package/build/components/writing-flow/use-selection-observer.cjs +126 -20
- package/build/components/writing-flow/use-selection-observer.cjs.map +3 -3
- package/build/components/writing-flow/utils.cjs +39 -2
- package/build/components/writing-flow/utils.cjs.map +2 -2
- package/build/components/writing-mode-control/index.cjs +0 -1
- package/build/components/writing-mode-control/index.cjs.map +2 -2
- package/build/hooks/background.cjs +3 -2
- package/build/hooks/background.cjs.map +2 -2
- package/build/hooks/block-fields/rich-text/index.cjs +2 -3
- package/build/hooks/block-fields/rich-text/index.cjs.map +3 -3
- package/build/hooks/elements.cjs +1 -1
- package/build/hooks/elements.cjs.map +2 -2
- package/build/hooks/font-size.cjs +1 -2
- package/build/hooks/font-size.cjs.map +2 -2
- package/build/hooks/grid-visualizer.cjs +5 -3
- package/build/hooks/grid-visualizer.cjs.map +2 -2
- package/build/hooks/layout-child.cjs +22 -12
- package/build/hooks/layout-child.cjs.map +3 -3
- package/build/hooks/layout.cjs +33 -16
- package/build/hooks/layout.cjs.map +3 -3
- package/build/hooks/position.cjs +36 -16
- package/build/hooks/position.cjs.map +2 -2
- package/build/hooks/states.cjs +29 -12
- package/build/hooks/states.cjs.map +3 -3
- package/build/hooks/style.cjs +31 -9
- package/build/hooks/style.cjs.map +3 -3
- package/build/hooks/text-align.cjs +36 -6
- package/build/hooks/text-align.cjs.map +3 -3
- package/build/hooks/typography.cjs +1 -1
- package/build/hooks/typography.cjs.map +2 -2
- package/build/layouts/constrained.cjs +35 -27
- package/build/layouts/constrained.cjs.map +2 -2
- package/build/layouts/flex.cjs +27 -22
- package/build/layouts/flex.cjs.map +2 -2
- package/build/layouts/grid.cjs +51 -11
- package/build/layouts/grid.cjs.map +2 -2
- package/build/private-apis.cjs +4 -1
- package/build/private-apis.cjs.map +3 -3
- package/build/store/actions.cjs +2 -2
- package/build/store/actions.cjs.map +2 -2
- package/build/store/private-keys.cjs +3 -0
- package/build/store/private-keys.cjs.map +2 -2
- package/build/store/private-selectors.cjs +85 -6
- package/build/store/private-selectors.cjs.map +3 -3
- package/build/store/selectors.cjs +13 -0
- package/build/store/selectors.cjs.map +2 -2
- package/build/utils/block-bindings.cjs +29 -0
- package/build/utils/block-bindings.cjs.map +2 -2
- package/build/utils/dom.cjs +14 -0
- package/build/utils/dom.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-canvas/index.mjs +7 -2
- package/build-module/components/block-canvas/index.mjs.map +2 -2
- package/build-module/components/block-controls/groups.mjs +3 -1
- package/build-module/components/block-controls/groups.mjs.map +2 -2
- package/build-module/components/block-edit/edit.mjs +11 -18
- package/build-module/components/block-edit/edit.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 +2 -3
- 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-list/block.mjs +9 -3
- package/build-module/components/block-list/block.mjs.map +3 -3
- package/build-module/components/block-list/index.mjs +1 -3
- package/build-module/components/block-list/index.mjs.map +2 -2
- package/build-module/components/block-list/use-block-props/index.mjs +3 -1
- package/build-module/components/block-list/use-block-props/index.mjs.map +2 -2
- package/build-module/components/block-list/use-block-props/use-focus-first-element.mjs +9 -4
- package/build-module/components/block-list/use-block-props/use-focus-first-element.mjs.map +2 -2
- package/build-module/components/block-list/use-block-props/use-focus-handler.mjs +12 -4
- package/build-module/components/block-list/use-block-props/use-focus-handler.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-toolbar/index.mjs +43 -24
- package/build-module/components/block-toolbar/index.mjs.map +2 -2
- package/build-module/components/block-tools/index.mjs +7 -2
- package/build-module/components/block-tools/index.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/block-visibility/modal.mjs +22 -10
- package/build-module/components/block-visibility/modal.mjs.map +2 -2
- package/build-module/components/block-visibility/use-block-visibility.mjs +17 -7
- package/build-module/components/block-visibility/use-block-visibility.mjs.map +2 -2
- package/build-module/components/block-visibility/utils.mjs +18 -3
- package/build-module/components/block-visibility/utils.mjs.map +2 -2
- package/build-module/components/block-visibility/viewport-menu-item.mjs +7 -1
- package/build-module/components/block-visibility/viewport-menu-item.mjs.map +2 -2
- package/build-module/components/block-visibility/viewport-toolbar.mjs +5 -0
- package/build-module/components/block-visibility/viewport-toolbar.mjs.map +2 -2
- package/build-module/components/block-visibility/viewport-visibility-info.mjs +5 -1
- package/build-module/components/block-visibility/viewport-visibility-info.mjs.map +2 -2
- package/build-module/components/child-layout-control/index.mjs +0 -6
- 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/state-control-badges.mjs +41 -5
- package/build-module/components/global-styles/state-control-badges.mjs.map +2 -2
- package/build-module/components/global-styles/typography-panel.mjs +4 -11
- 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 +3 -7
- 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 +66 -12
- 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 +297 -32
- 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/keyboard-shortcuts/index.mjs +19 -11
- package/build-module/components/keyboard-shortcuts/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 +6 -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 +61 -21
- 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/media-placeholder/index.mjs +0 -1
- package/build-module/components/media-placeholder/index.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/rich-text/event-listeners/before-input-rules.mjs +8 -5
- package/build-module/components/rich-text/event-listeners/before-input-rules.mjs.map +2 -2
- package/build-module/components/rich-text/event-listeners/delete.mjs +7 -4
- package/build-module/components/rich-text/event-listeners/delete.mjs.map +2 -2
- package/build-module/components/rich-text/event-listeners/enter.mjs +8 -3
- package/build-module/components/rich-text/event-listeners/enter.mjs.map +2 -2
- package/build-module/components/rich-text/event-listeners/input-events.mjs +3 -3
- package/build-module/components/rich-text/event-listeners/input-events.mjs.map +2 -2
- package/build-module/components/rich-text/event-listeners/input-rules.mjs +8 -5
- package/build-module/components/rich-text/event-listeners/input-rules.mjs.map +2 -2
- package/build-module/components/rich-text/event-listeners/insert-replacement-text.mjs +3 -3
- package/build-module/components/rich-text/event-listeners/insert-replacement-text.mjs.map +2 -2
- package/build-module/components/rich-text/event-listeners/paste-handler.mjs +8 -2
- package/build-module/components/rich-text/event-listeners/paste-handler.mjs.map +2 -2
- package/build-module/components/rich-text/event-listeners/remove-browser-shortcuts.mjs +3 -3
- package/build-module/components/rich-text/event-listeners/remove-browser-shortcuts.mjs.map +2 -2
- package/build-module/components/rich-text/event-listeners/shortcuts.mjs +3 -3
- package/build-module/components/rich-text/event-listeners/shortcuts.mjs.map +2 -2
- package/build-module/components/rich-text/event-listeners/undo-automatic-change.mjs +3 -3
- package/build-module/components/rich-text/event-listeners/undo-automatic-change.mjs.map +2 -2
- package/build-module/components/rich-text/index.mjs +64 -13
- package/build-module/components/rich-text/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/typewriter/index.mjs +129 -136
- package/build-module/components/typewriter/index.mjs.map +2 -2
- package/build-module/components/use-block-commands/index.mjs +21 -17
- package/build-module/components/use-block-commands/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/writing-flow/index.mjs +12 -1
- package/build-module/components/writing-flow/index.mjs.map +2 -2
- package/build-module/components/writing-flow/use-arrow-nav.mjs +19 -6
- package/build-module/components/writing-flow/use-arrow-nav.mjs.map +2 -2
- package/build-module/components/writing-flow/use-click-selection.mjs +2 -2
- package/build-module/components/writing-flow/use-click-selection.mjs.map +2 -2
- package/build-module/components/writing-flow/use-clipboard-handler.mjs +5 -2
- package/build-module/components/writing-flow/use-clipboard-handler.mjs.map +2 -2
- package/build-module/components/writing-flow/use-drag-selection.mjs +1 -6
- package/build-module/components/writing-flow/use-drag-selection.mjs.map +2 -2
- package/build-module/components/writing-flow/use-editable-root.mjs +86 -0
- package/build-module/components/writing-flow/use-editable-root.mjs.map +7 -0
- package/build-module/components/writing-flow/use-home-end.mjs +43 -0
- package/build-module/components/writing-flow/use-home-end.mjs.map +7 -0
- package/build-module/components/writing-flow/use-input.mjs +15 -5
- package/build-module/components/writing-flow/use-input.mjs.map +2 -2
- package/build-module/components/writing-flow/use-multi-selection.mjs +2 -2
- package/build-module/components/writing-flow/use-multi-selection.mjs.map +2 -2
- package/build-module/components/writing-flow/use-select-all.mjs +19 -3
- package/build-module/components/writing-flow/use-select-all.mjs.map +2 -2
- package/build-module/components/writing-flow/use-selection-observer.mjs +128 -19
- package/build-module/components/writing-flow/use-selection-observer.mjs.map +2 -2
- package/build-module/components/writing-flow/utils.mjs +35 -1
- package/build-module/components/writing-flow/utils.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/background.mjs +3 -2
- package/build-module/hooks/background.mjs.map +2 -2
- package/build-module/hooks/block-fields/rich-text/index.mjs +2 -6
- package/build-module/hooks/block-fields/rich-text/index.mjs.map +2 -2
- package/build-module/hooks/elements.mjs +1 -1
- package/build-module/hooks/elements.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/grid-visualizer.mjs +5 -3
- package/build-module/hooks/grid-visualizer.mjs.map +2 -2
- package/build-module/hooks/layout-child.mjs +22 -12
- package/build-module/hooks/layout-child.mjs.map +2 -2
- package/build-module/hooks/layout.mjs +32 -16
- 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 +29 -12
- package/build-module/hooks/states.mjs.map +2 -2
- package/build-module/hooks/style.mjs +40 -11
- package/build-module/hooks/style.mjs.map +2 -2
- package/build-module/hooks/text-align.mjs +39 -10
- package/build-module/hooks/text-align.mjs.map +2 -2
- package/build-module/hooks/typography.mjs +1 -1
- package/build-module/hooks/typography.mjs.map +2 -2
- package/build-module/layouts/constrained.mjs +35 -27
- package/build-module/layouts/constrained.mjs.map +2 -2
- package/build-module/layouts/flex.mjs +27 -22
- package/build-module/layouts/flex.mjs.map +2 -2
- package/build-module/layouts/grid.mjs +52 -11
- package/build-module/layouts/grid.mjs.map +2 -2
- package/build-module/private-apis.mjs +5 -1
- package/build-module/private-apis.mjs.map +2 -2
- package/build-module/store/actions.mjs +3 -3
- package/build-module/store/actions.mjs.map +2 -2
- package/build-module/store/private-keys.mjs +2 -0
- package/build-module/store/private-keys.mjs.map +2 -2
- package/build-module/store/private-selectors.mjs +84 -6
- package/build-module/store/private-selectors.mjs.map +2 -2
- package/build-module/store/selectors.mjs +13 -0
- package/build-module/store/selectors.mjs.map +2 -2
- package/build-module/utils/block-bindings.mjs +28 -0
- package/build-module/utils/block-bindings.mjs.map +2 -2
- package/build-module/utils/dom.mjs +13 -0
- package/build-module/utils/dom.mjs.map +2 -2
- package/build-style/content-rtl.css +15 -14
- package/build-style/content.css +15 -14
- package/build-style/default-editor-styles-rtl.css +1 -1
- package/build-style/default-editor-styles.css +1 -1
- package/build-style/style-rtl.css +144 -47
- package/build-style/style.css +144 -47
- package/build-types/components/block-context/index.d.ts +7 -0
- package/build-types/components/block-context/index.d.ts.map +1 -1
- package/build-types/utils/block-bindings.d.ts +19 -0
- package/build-types/utils/block-bindings.d.ts.map +1 -1
- package/build-types/utils/dom.d.ts +11 -0
- package/build-types/utils/dom.d.ts.map +1 -1
- package/build-types/utils/get-px-from-css-unit.d.ts +2 -2
- package/build-types/utils/get-px-from-css-unit.d.ts.map +1 -1
- package/build-types/utils/pasting.d.ts +1 -1
- package/build-types/utils/pasting.d.ts.map +1 -1
- package/package.json +46 -44
- 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-canvas/index.js +9 -2
- package/src/components/block-card/style.scss +1 -1
- package/src/components/block-controls/groups.js +2 -0
- package/src/components/block-edit/edit.js +13 -31
- package/src/components/block-inspector/edit-contents.js +5 -1
- package/src/components/block-inspector/index.js +3 -2
- package/src/components/block-list/block-invalid-warning.js +8 -19
- package/src/components/block-list/block.js +6 -0
- package/src/components/block-list/index.js +0 -2
- package/src/components/block-list/use-block-props/index.js +2 -0
- package/src/components/block-list/use-block-props/use-focus-first-element.js +23 -4
- package/src/components/block-list/use-block-props/use-focus-handler.js +34 -9
- package/src/components/block-lock/style.scss +1 -1
- package/src/components/block-manager/style.scss +1 -1
- package/src/components/block-navigation/style.scss +1 -1
- package/src/components/block-patterns-list/stories/index.story.jsx +1 -1
- package/src/components/block-quick-navigation/style.scss +1 -3
- package/src/components/block-styles/style.scss +2 -2
- 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/index.js +41 -18
- package/src/components/block-toolbar/test/block-toolbar-icon.js +32 -9
- package/src/components/block-tools/index.js +7 -0
- package/src/components/block-types-list/style.scss +0 -1
- package/src/components/block-variation-transforms/index.js +0 -1
- package/src/components/block-visibility/modal.js +24 -10
- package/src/components/block-visibility/style.scss +1 -1
- package/src/components/block-visibility/test/use-block-visibility.js +128 -35
- package/src/components/block-visibility/test/utils.js +11 -0
- package/src/components/block-visibility/use-block-visibility.js +33 -11
- package/src/components/block-visibility/utils.js +31 -6
- package/src/components/block-visibility/viewport-menu-item.js +10 -1
- package/src/components/block-visibility/viewport-toolbar.js +6 -0
- package/src/components/block-visibility/viewport-visibility-info.js +5 -1
- package/src/components/button-block-appender/content.scss +1 -7
- package/src/components/child-layout-control/index.js +0 -6
- package/src/components/color-palette/test/__snapshots__/control.js.snap +13 -108
- 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 +1 -2
- 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/state-control-badges.js +45 -6
- package/src/components/global-styles/style.scss +5 -0
- package/src/components/global-styles/test/state-control-badges.js +65 -0
- package/src/components/global-styles/typography-panel.js +0 -7
- 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 -4
- 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 +114 -16
- package/src/components/inserter/media-tab/media-list.js +2 -0
- package/src/components/inserter/media-tab/media-panel.js +354 -19
- 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 +267 -0
- package/src/components/inserter/media-tab/test/media-panel.js +127 -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 +115 -3
- package/src/components/inserter-list-item/index.js +8 -2
- package/src/components/inserter-list-item/style.scss +0 -15
- package/src/components/keyboard-shortcuts/index.js +28 -11
- 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 +6 -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-control/style.scss +2 -2
- package/src/components/link-control/test/index.js +6 -6
- package/src/components/link-picker/style.scss +1 -2
- 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 +69 -23
- package/src/components/list-view/expander.js +5 -1
- package/src/components/list-view/style.scss +23 -5
- package/src/components/list-view/use-list-view-client-ids.js +2 -2
- package/src/components/media-placeholder/index.js +0 -1
- package/src/components/multi-selection-inspector/style.scss +1 -1
- 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/style.scss +1 -1
- package/src/components/responsive-block-control/test/index.js +1 -5
- package/src/components/rich-text/event-listeners/before-input-rules.js +8 -5
- package/src/components/rich-text/event-listeners/delete.js +7 -4
- package/src/components/rich-text/event-listeners/enter.js +10 -4
- package/src/components/rich-text/event-listeners/input-events.js +4 -3
- package/src/components/rich-text/event-listeners/input-rules.js +8 -5
- package/src/components/rich-text/event-listeners/insert-replacement-text.js +4 -3
- package/src/components/rich-text/event-listeners/paste-handler.js +15 -3
- package/src/components/rich-text/event-listeners/remove-browser-shortcuts.js +4 -3
- package/src/components/rich-text/event-listeners/shortcuts.js +4 -3
- package/src/components/rich-text/event-listeners/undo-automatic-change.js +4 -3
- package/src/components/rich-text/index.js +94 -25
- package/src/components/skip-to-selected-block/style.scss +1 -1
- 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/typewriter/index.js +228 -224
- package/src/components/use-block-commands/index.js +27 -17
- 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/writing-flow/index.js +15 -1
- package/src/components/writing-flow/use-arrow-nav.js +39 -12
- package/src/components/writing-flow/use-click-selection.js +2 -3
- package/src/components/writing-flow/use-clipboard-handler.js +5 -2
- package/src/components/writing-flow/use-drag-selection.js +1 -14
- package/src/components/writing-flow/use-editable-root.js +182 -0
- package/src/components/writing-flow/use-home-end.js +63 -0
- package/src/components/writing-flow/use-input.js +25 -8
- package/src/components/writing-flow/use-multi-selection.js +2 -3
- package/src/components/writing-flow/use-select-all.js +33 -3
- package/src/components/writing-flow/use-selection-observer.js +197 -38
- package/src/components/writing-flow/utils.js +83 -0
- package/src/components/writing-mode-control/index.js +0 -1
- package/src/hooks/background.js +7 -9
- package/src/hooks/block-fields/link/styles.scss +1 -6
- package/src/hooks/block-fields/media/styles.scss +1 -6
- package/src/hooks/block-fields/rich-text/index.js +6 -9
- package/src/hooks/block-hooks.scss +15 -0
- package/src/hooks/elements.js +0 -1
- package/src/hooks/font-size.js +0 -1
- package/src/hooks/grid-visualizer.js +40 -36
- package/src/hooks/layout-child.js +19 -9
- package/src/hooks/layout.js +53 -35
- package/src/hooks/position.js +44 -23
- package/src/hooks/states.js +36 -13
- package/src/hooks/style.js +67 -17
- package/src/hooks/test/cross-origin-isolation.js +0 -4
- package/src/hooks/test/layout.js +75 -1
- package/src/hooks/test/style.js +29 -0
- package/src/hooks/test/text-align.js +34 -1
- package/src/hooks/text-align.js +41 -10
- package/src/hooks/typography.js +0 -1
- package/src/layouts/constrained.js +56 -29
- package/src/layouts/flex.js +5 -4
- package/src/layouts/grid.js +59 -9
- package/src/layouts/test/constrained.js +91 -0
- package/src/layouts/test/grid.js +71 -0
- package/src/private-apis.js +4 -0
- package/src/store/actions.js +43 -14
- package/src/store/private-keys.js +1 -0
- package/src/store/private-selectors.js +166 -9
- package/src/store/selectors.js +41 -0
- package/src/store/test/actions.js +1 -1
- package/src/store/test/private-selectors.js +533 -0
- package/src/store/test/reducer.js +11 -11
- package/src/store/test/selectors.js +133 -0
- package/src/style.scss +1 -0
- package/src/utils/block-bindings.ts +50 -0
- package/src/utils/dom.ts +33 -0
- package/src/utils/test/block-bindings.js +181 -0
- package/build/components/rich-text/input-event.cjs +0 -50
- package/build/components/rich-text/input-event.cjs.map +0 -7
- package/build/components/rich-text/shortcut.cjs +0 -51
- package/build/components/rich-text/shortcut.cjs.map +0 -7
- package/build-module/components/rich-text/input-event.mjs +0 -25
- package/build-module/components/rich-text/input-event.mjs.map +0 -7
- package/build-module/components/rich-text/shortcut.mjs +0 -26
- package/build-module/components/rich-text/shortcut.mjs.map +0 -7
- package/src/components/rich-text/input-event.js +0 -31
- package/src/components/rich-text/shortcut.js +0 -32
|
@@ -14,7 +14,6 @@ import { symbol } from '@wordpress/icons';
|
|
|
14
14
|
* Internal dependencies
|
|
15
15
|
*/
|
|
16
16
|
import useBlockDisplayInformation from '../';
|
|
17
|
-
import { isIsolatedEditorKey } from '../../../store/private-keys';
|
|
18
17
|
|
|
19
18
|
jest.mock( '@wordpress/data/src/components/use-select', () => jest.fn() );
|
|
20
19
|
jest.mock( '../../../lock-unlock', () => ( {
|
|
@@ -26,6 +25,7 @@ jest.mock( '../../../lock-unlock', () => ( {
|
|
|
26
25
|
} ) );
|
|
27
26
|
|
|
28
27
|
const groupIcon = 'group-icon';
|
|
28
|
+
const templatePartIcon = 'template-part-icon';
|
|
29
29
|
|
|
30
30
|
function TestComponent( { onChange } ) {
|
|
31
31
|
const blockInformation = useBlockDisplayInformation( 'client-id' );
|
|
@@ -56,19 +56,17 @@ function setupUseSelect( {
|
|
|
56
56
|
description: 'Gather blocks in a layout container.',
|
|
57
57
|
},
|
|
58
58
|
getActiveBlockVariation = () => null,
|
|
59
|
-
|
|
60
|
-
isWithinEditedSection = false,
|
|
59
|
+
isSectionBlock = true,
|
|
61
60
|
} = {} ) {
|
|
62
61
|
useSelect.mockImplementation( ( mapSelect ) =>
|
|
63
62
|
mapSelect( () => ( {
|
|
64
63
|
getBlockName: () => blockName,
|
|
65
64
|
getBlockAttributes: () => attributes,
|
|
66
|
-
getSettings: () => settings,
|
|
67
65
|
__experimentalGetParsedPattern: () => ( {
|
|
68
66
|
title: 'Hero pattern',
|
|
69
67
|
description: 'Pattern description.',
|
|
70
68
|
} ),
|
|
71
|
-
|
|
69
|
+
isSectionBlock: () => isSectionBlock,
|
|
72
70
|
getBlockType: () => blockType,
|
|
73
71
|
getActiveBlockVariation,
|
|
74
72
|
} ) )
|
|
@@ -97,7 +95,7 @@ describe( 'useBlockDisplayInformation', () => {
|
|
|
97
95
|
} );
|
|
98
96
|
|
|
99
97
|
it( 'displays block information for a pattern section that is being edited', () => {
|
|
100
|
-
setupUseSelect( {
|
|
98
|
+
setupUseSelect( { isSectionBlock: false } );
|
|
101
99
|
const onChange = jest.fn();
|
|
102
100
|
|
|
103
101
|
render( <TestComponent onChange={ onChange } /> );
|
|
@@ -120,9 +118,7 @@ describe( 'useBlockDisplayInformation', () => {
|
|
|
120
118
|
patternName: 'theme/header-wrapper',
|
|
121
119
|
},
|
|
122
120
|
},
|
|
123
|
-
|
|
124
|
-
[ isIsolatedEditorKey ]: true,
|
|
125
|
-
},
|
|
121
|
+
isSectionBlock: false,
|
|
126
122
|
} );
|
|
127
123
|
const onChange = jest.fn();
|
|
128
124
|
|
|
@@ -137,4 +133,46 @@ describe( 'useBlockDisplayInformation', () => {
|
|
|
137
133
|
} )
|
|
138
134
|
);
|
|
139
135
|
} );
|
|
136
|
+
|
|
137
|
+
it( 'displays block information for a pattern wrapper when content-only editing is disabled', () => {
|
|
138
|
+
setupUseSelect( {
|
|
139
|
+
isSectionBlock: false,
|
|
140
|
+
} );
|
|
141
|
+
const onChange = jest.fn();
|
|
142
|
+
|
|
143
|
+
render( <TestComponent onChange={ onChange } /> );
|
|
144
|
+
|
|
145
|
+
expect( onChange ).toHaveBeenCalledWith(
|
|
146
|
+
expect.objectContaining( {
|
|
147
|
+
title: 'Group',
|
|
148
|
+
icon: groupIcon,
|
|
149
|
+
description: 'Gather blocks in a layout container.',
|
|
150
|
+
name: 'Hero pattern',
|
|
151
|
+
} )
|
|
152
|
+
);
|
|
153
|
+
} );
|
|
154
|
+
|
|
155
|
+
it( 'displays block information for section blocks without pattern metadata', () => {
|
|
156
|
+
setupUseSelect( {
|
|
157
|
+
attributes: {},
|
|
158
|
+
blockName: 'core/template-part',
|
|
159
|
+
blockType: {
|
|
160
|
+
name: 'core/template-part',
|
|
161
|
+
title: 'Template Part',
|
|
162
|
+
icon: templatePartIcon,
|
|
163
|
+
description: 'A template part.',
|
|
164
|
+
},
|
|
165
|
+
} );
|
|
166
|
+
const onChange = jest.fn();
|
|
167
|
+
|
|
168
|
+
render( <TestComponent onChange={ onChange } /> );
|
|
169
|
+
|
|
170
|
+
expect( onChange ).toHaveBeenCalledWith(
|
|
171
|
+
expect.objectContaining( {
|
|
172
|
+
title: 'Template Part',
|
|
173
|
+
icon: templatePartIcon,
|
|
174
|
+
description: 'A template part.',
|
|
175
|
+
} )
|
|
176
|
+
);
|
|
177
|
+
} );
|
|
140
178
|
} );
|
|
@@ -5,6 +5,7 @@ import { useCallback } from '@wordpress/element';
|
|
|
5
5
|
import {
|
|
6
6
|
cloneBlock,
|
|
7
7
|
createBlock,
|
|
8
|
+
cloneSanitizedBlock,
|
|
8
9
|
findTransform,
|
|
9
10
|
getBlockTransforms,
|
|
10
11
|
pasteHandler,
|
|
@@ -266,13 +267,9 @@ export default function useOnBlockDrop(
|
|
|
266
267
|
blocks.unshift( targetBlock );
|
|
267
268
|
}
|
|
268
269
|
|
|
269
|
-
const groupInnerBlocks = blocks.map( ( block ) =>
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
block.attributes,
|
|
273
|
-
block.innerBlocks
|
|
274
|
-
);
|
|
275
|
-
} );
|
|
270
|
+
const groupInnerBlocks = blocks.map( ( block ) =>
|
|
271
|
+
cloneSanitizedBlock( block )
|
|
272
|
+
);
|
|
276
273
|
|
|
277
274
|
const areAllImages = blocks.every( ( block ) => {
|
|
278
275
|
return block.name === 'core/image';
|
|
@@ -14,6 +14,8 @@ import { forwardRef } from '@wordpress/element';
|
|
|
14
14
|
/**
|
|
15
15
|
* Internal dependencies
|
|
16
16
|
*/
|
|
17
|
+
import useEditableRoot from './use-editable-root';
|
|
18
|
+
import useHomeEnd from './use-home-end';
|
|
17
19
|
import useMultiSelection from './use-multi-selection';
|
|
18
20
|
import useTabNav from './use-tab-nav';
|
|
19
21
|
import useArrowNav from './use-arrow-nav';
|
|
@@ -39,6 +41,8 @@ export function useWritingFlow() {
|
|
|
39
41
|
ref,
|
|
40
42
|
useClipboardHandler(),
|
|
41
43
|
useInput(),
|
|
44
|
+
useEditableRoot(),
|
|
45
|
+
useHomeEnd(),
|
|
42
46
|
useDragSelection(),
|
|
43
47
|
useSelectionObserver(),
|
|
44
48
|
useClickSelection(),
|
|
@@ -64,7 +68,17 @@ export function useWritingFlow() {
|
|
|
64
68
|
|
|
65
69
|
return () => {
|
|
66
70
|
delete node.dataset.hasMultiSelection;
|
|
67
|
-
|
|
71
|
+
// The wrapper may remain the editing host (the
|
|
72
|
+
// collapsed block supports `editableRoot`): keep it
|
|
73
|
+
// named, as the textbox role requires.
|
|
74
|
+
if ( node.contentEditable === 'true' ) {
|
|
75
|
+
node.setAttribute(
|
|
76
|
+
'aria-label',
|
|
77
|
+
__( 'Editor canvas' )
|
|
78
|
+
);
|
|
79
|
+
} else {
|
|
80
|
+
node.removeAttribute( 'aria-label' );
|
|
81
|
+
}
|
|
68
82
|
};
|
|
69
83
|
},
|
|
70
84
|
[ hasMultiSelection ]
|
|
@@ -18,8 +18,9 @@ import { useRefEffect } from '@wordpress/compose';
|
|
|
18
18
|
/**
|
|
19
19
|
* Internal dependencies
|
|
20
20
|
*/
|
|
21
|
-
import { getBlockClientId } from '../../utils/dom';
|
|
21
|
+
import { getBlockClientId, getSelectionEditableElement } from '../../utils/dom';
|
|
22
22
|
import { store as blockEditorStore } from '../../store';
|
|
23
|
+
import { setContentEditableWrapper } from './utils';
|
|
23
24
|
|
|
24
25
|
/**
|
|
25
26
|
* Returns true if the element should consider edge navigation upon a keyboard
|
|
@@ -141,8 +142,16 @@ export function getClosestTabbable(
|
|
|
141
142
|
return false;
|
|
142
143
|
}
|
|
143
144
|
|
|
144
|
-
// Skip focusable elements such as links within content editable
|
|
145
|
-
|
|
145
|
+
// Skip focusable elements such as links within content editable
|
|
146
|
+
// nodes: nodes whose closest editable host is an editable element
|
|
147
|
+
// within a block. When an editable root (e.g. the canvas wrapper)
|
|
148
|
+
// is the editing host, everything within it is content editable,
|
|
149
|
+
// but focusables like block wrappers are not text content.
|
|
150
|
+
if (
|
|
151
|
+
node.isContentEditable &&
|
|
152
|
+
node.contentEditable !== 'true' &&
|
|
153
|
+
getBlockClientId( node.closest( '[contenteditable="true"]' ) )
|
|
154
|
+
) {
|
|
146
155
|
return false;
|
|
147
156
|
}
|
|
148
157
|
|
|
@@ -198,8 +207,17 @@ export default function useArrowNav() {
|
|
|
198
207
|
return;
|
|
199
208
|
}
|
|
200
209
|
|
|
201
|
-
const { keyCode,
|
|
202
|
-
|
|
210
|
+
const { keyCode, shiftKey, ctrlKey, altKey, metaKey } = event;
|
|
211
|
+
// When the wrapper is contentEditable and holds focus (the
|
|
212
|
+
// selected block supports `editableRoot`), the event targets the
|
|
213
|
+
// wrapper; resolve the editable element containing the selection.
|
|
214
|
+
const target =
|
|
215
|
+
( event.target === node &&
|
|
216
|
+
getSelectionEditableElement(
|
|
217
|
+
node.ownerDocument.defaultView.getSelection(),
|
|
218
|
+
node
|
|
219
|
+
) ) ||
|
|
220
|
+
event.target;
|
|
203
221
|
const isUp = keyCode === UP;
|
|
204
222
|
const isDown = keyCode === DOWN;
|
|
205
223
|
const isLeft = keyCode === LEFT;
|
|
@@ -271,13 +289,22 @@ export default function useArrowNav() {
|
|
|
271
289
|
const { keepCaretInsideBlock } = getSettings();
|
|
272
290
|
|
|
273
291
|
if ( shiftKey ) {
|
|
274
|
-
if (
|
|
275
|
-
isClosestTabbableABlock( target, isReverse )
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
292
|
+
if ( isNavEdge( target, isReverse ) ) {
|
|
293
|
+
if ( isClosestTabbableABlock( target, isReverse ) ) {
|
|
294
|
+
setContentEditableWrapper( node, true );
|
|
295
|
+
} else if ( node.contentEditable === 'true' ) {
|
|
296
|
+
// There is no block to extend the selection into.
|
|
297
|
+
// Within an editable wrapper the selection could
|
|
298
|
+
// natively escape into surrounding editable elements
|
|
299
|
+
// (e.g. the post title), so keep it inside the block
|
|
300
|
+
// by extending it to the block's edge.
|
|
301
|
+
const selection = defaultView.getSelection();
|
|
302
|
+
selection.extend(
|
|
303
|
+
target,
|
|
304
|
+
isReverse ? 0 : target.childNodes.length
|
|
305
|
+
);
|
|
306
|
+
event.preventDefault();
|
|
307
|
+
}
|
|
281
308
|
}
|
|
282
309
|
} else if (
|
|
283
310
|
isVertical &&
|
|
@@ -8,6 +8,7 @@ import { useRefEffect } from '@wordpress/compose';
|
|
|
8
8
|
* Internal dependencies
|
|
9
9
|
*/
|
|
10
10
|
import { store as blockEditorStore } from '../../store';
|
|
11
|
+
import { setContentEditableWrapper } from './utils';
|
|
11
12
|
import { getBlockClientId } from '../../utils/dom';
|
|
12
13
|
|
|
13
14
|
export default function useClickSelection() {
|
|
@@ -30,9 +31,7 @@ export default function useClickSelection() {
|
|
|
30
31
|
// When selecting a single block in a document by holding the shift key,
|
|
31
32
|
// don't mark this action as multiselection.
|
|
32
33
|
if ( startClientId && startClientId !== clickedClientId ) {
|
|
33
|
-
node
|
|
34
|
-
// Firefox doesn't automatically move focus.
|
|
35
|
-
node.focus();
|
|
34
|
+
setContentEditableWrapper( node, true );
|
|
36
35
|
}
|
|
37
36
|
} else if ( hasMultiSelection() ) {
|
|
38
37
|
// Allow user to escape out of a multi-selection to a
|
|
@@ -20,7 +20,7 @@ import { useRefEffect } from '@wordpress/compose';
|
|
|
20
20
|
*/
|
|
21
21
|
import { store as blockEditorStore } from '../../store';
|
|
22
22
|
import { useNotifyCopy } from '../../utils/use-notify-copy';
|
|
23
|
-
import { setClipboardBlocks } from './utils';
|
|
23
|
+
import { setClipboardBlocks, setContentEditableWrapper } from './utils';
|
|
24
24
|
import { getPasteEventData } from '../../utils/pasting';
|
|
25
25
|
|
|
26
26
|
export default function useClipboardHandler() {
|
|
@@ -130,7 +130,10 @@ export default function useClipboardHandler() {
|
|
|
130
130
|
if ( shouldHandleWholeBlocks && ! expandSelectionIsNeeded ) {
|
|
131
131
|
removeBlocks( selectedBlockClientIds );
|
|
132
132
|
} else {
|
|
133
|
-
|
|
133
|
+
setContentEditableWrapper(
|
|
134
|
+
event.target.ownerDocument.activeElement,
|
|
135
|
+
false
|
|
136
|
+
);
|
|
134
137
|
__unstableDeleteSelection();
|
|
135
138
|
}
|
|
136
139
|
} else if ( event.type === 'paste' ) {
|
|
@@ -8,20 +8,7 @@ import { useRefEffect } from '@wordpress/compose';
|
|
|
8
8
|
* Internal dependencies
|
|
9
9
|
*/
|
|
10
10
|
import { store as blockEditorStore } from '../../store';
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Sets the `contenteditable` wrapper element to `value`.
|
|
14
|
-
*
|
|
15
|
-
* @param {HTMLElement} node Block element.
|
|
16
|
-
* @param {boolean} value `contentEditable` value (true or false)
|
|
17
|
-
*/
|
|
18
|
-
function setContentEditableWrapper( node, value ) {
|
|
19
|
-
node.contentEditable = value;
|
|
20
|
-
// Firefox doesn't automatically move focus.
|
|
21
|
-
if ( value ) {
|
|
22
|
-
node.focus();
|
|
23
|
-
}
|
|
24
|
-
}
|
|
11
|
+
import { setContentEditableWrapper } from './utils';
|
|
25
12
|
|
|
26
13
|
/**
|
|
27
14
|
* Sets a multi-selection based on the native selection across blocks.
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { useRegistry, useSelect } from '@wordpress/data';
|
|
5
|
+
import { useRefEffect } from '@wordpress/compose';
|
|
6
|
+
import { hasBlockSupport } from '@wordpress/blocks';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Internal dependencies
|
|
10
|
+
*/
|
|
11
|
+
import { store as blockEditorStore } from '../../store';
|
|
12
|
+
import { setContentEditableWrapper } from './utils';
|
|
13
|
+
import { getBlockClientId, getSelectionEditableElement } from '../../utils/dom';
|
|
14
|
+
import { unlock } from '../../lock-unlock';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Returns true when the writing flow wrapper can host editing for the given
|
|
18
|
+
* block: it supports `editableRoot`, is edited visually in the default
|
|
19
|
+
* editing mode, and has sibling blocks for a native selection to extend
|
|
20
|
+
* into, all of them editable.
|
|
21
|
+
*
|
|
22
|
+
* @param {Object} select Bound block editor store selectors.
|
|
23
|
+
* @param {string} clientId Block client ID.
|
|
24
|
+
*
|
|
25
|
+
* @return {boolean} Whether an editing host can host the block.
|
|
26
|
+
*/
|
|
27
|
+
export function canHostEditableRoot( select, clientId ) {
|
|
28
|
+
const {
|
|
29
|
+
getBlockName,
|
|
30
|
+
getBlockEditingMode,
|
|
31
|
+
getBlockMode,
|
|
32
|
+
getBlockRootClientId,
|
|
33
|
+
getBlockOrder,
|
|
34
|
+
} = select;
|
|
35
|
+
|
|
36
|
+
if (
|
|
37
|
+
! clientId ||
|
|
38
|
+
getBlockEditingMode( clientId ) !== 'default' ||
|
|
39
|
+
// Not when the block is edited as HTML: there is no rich text to
|
|
40
|
+
// host then, only a textarea, which the editing host would
|
|
41
|
+
// interfere with.
|
|
42
|
+
getBlockMode( clientId ) !== 'visual' ||
|
|
43
|
+
! hasBlockSupport( getBlockName( clientId ), 'editableRoot', false )
|
|
44
|
+
) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Only host when the block has sibling blocks for a native selection to
|
|
49
|
+
// extend into, all of them editable. A lone block (e.g. a single
|
|
50
|
+
// paragraph nested in an HTML block) is edited on its own element, and
|
|
51
|
+
// read-only siblings (e.g. pattern content without overrides enabled)
|
|
52
|
+
// must not become editable by inheriting from the host.
|
|
53
|
+
const siblings = getBlockOrder( getBlockRootClientId( clientId ) );
|
|
54
|
+
return (
|
|
55
|
+
siblings.length > 1 &&
|
|
56
|
+
siblings.every(
|
|
57
|
+
( siblingClientId ) =>
|
|
58
|
+
getBlockEditingMode( siblingClientId ) === 'default'
|
|
59
|
+
)
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Returns true when the writing flow wrapper should be contentEditable: the
|
|
65
|
+
* selected block supports `editableRoot`.
|
|
66
|
+
*
|
|
67
|
+
* @return {boolean} Whether the wrapper should be editable.
|
|
68
|
+
*/
|
|
69
|
+
export function useHasEditableRoot() {
|
|
70
|
+
return useSelect( ( select ) => {
|
|
71
|
+
const selectors = select( blockEditorStore );
|
|
72
|
+
return canHostEditableRoot(
|
|
73
|
+
selectors,
|
|
74
|
+
selectors.getSelectedBlockClientId()
|
|
75
|
+
);
|
|
76
|
+
}, [] );
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Keeps the writing flow wrapper contentEditable while the selected block
|
|
81
|
+
* supports `editableRoot`, so the native selection can extend across blocks.
|
|
82
|
+
* While the wrapper is editable it must also hold focus: a nested editable
|
|
83
|
+
* element cannot retain focus once an ancestor becomes an editing host (the
|
|
84
|
+
* first DOM mutation moves focus to the host, inconsistently across
|
|
85
|
+
* browsers).
|
|
86
|
+
*/
|
|
87
|
+
/**
|
|
88
|
+
* Keeps the writing flow wrapper contentEditable while the selected block
|
|
89
|
+
* supports `editableRoot`, so the native selection can extend across blocks.
|
|
90
|
+
* While the wrapper is editable it must also hold focus: a nested editable
|
|
91
|
+
* element cannot retain focus once an ancestor becomes an editing host (the
|
|
92
|
+
* first DOM mutation moves focus to the host, inconsistently across
|
|
93
|
+
* browsers).
|
|
94
|
+
*/
|
|
95
|
+
export default function useEditableRoot() {
|
|
96
|
+
const registry = useRegistry();
|
|
97
|
+
const isZoomOut = useSelect(
|
|
98
|
+
( select ) => unlock( select( blockEditorStore ) ).isZoomOut(),
|
|
99
|
+
[]
|
|
100
|
+
);
|
|
101
|
+
const enabled = useHasEditableRoot() && ! isZoomOut;
|
|
102
|
+
|
|
103
|
+
return useRefEffect(
|
|
104
|
+
( node ) => {
|
|
105
|
+
if ( ! enabled ) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
const {
|
|
110
|
+
getSelectedBlockClientId,
|
|
111
|
+
hasMultiSelection,
|
|
112
|
+
isMultiSelecting,
|
|
113
|
+
} = registry.select( blockEditorStore );
|
|
114
|
+
|
|
115
|
+
// Focus is moved separately below, only when an editable
|
|
116
|
+
// element belonging to the selected block holds it.
|
|
117
|
+
if ( ! setContentEditableWrapper( node, true, { focus: false } ) ) {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// Move focus from the block's editable element to the wrapper,
|
|
122
|
+
// but only when an editable element belonging to the selected
|
|
123
|
+
// block has focus. Never steal focus from other regions (e.g.
|
|
124
|
+
// List View), UI elements (e.g. buttons), or other editables
|
|
125
|
+
// within the wrapper (e.g. the post title). The selection is
|
|
126
|
+
// preserved. If the selection is still outside the focused
|
|
127
|
+
// element, a mousedown just focused it and the browser has not
|
|
128
|
+
// placed the caret yet; moving focus now would cancel the
|
|
129
|
+
// pending caret placement. The selection observer moves focus
|
|
130
|
+
// once the selection lands.
|
|
131
|
+
const { activeElement } = node.ownerDocument;
|
|
132
|
+
const selection = node.ownerDocument.defaultView.getSelection();
|
|
133
|
+
if (
|
|
134
|
+
activeElement !== node &&
|
|
135
|
+
activeElement?.isContentEditable &&
|
|
136
|
+
node.contains( activeElement ) &&
|
|
137
|
+
getBlockClientId( activeElement ) ===
|
|
138
|
+
getSelectedBlockClientId() &&
|
|
139
|
+
selection.anchorNode &&
|
|
140
|
+
activeElement.contains( selection.anchorNode )
|
|
141
|
+
) {
|
|
142
|
+
node.focus();
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
return () => {
|
|
146
|
+
// A multi-selection owns the wrapper as its editing host
|
|
147
|
+
// now: the host and its textbox semantics remain, and the
|
|
148
|
+
// selection observer disables both together when the
|
|
149
|
+
// selection collapses. Removing the attributes here would
|
|
150
|
+
// strip the accessible name off the focused editing host at
|
|
151
|
+
// the moment cross-block editing begins.
|
|
152
|
+
if ( hasMultiSelection() || isMultiSelecting() ) {
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
setContentEditableWrapper( node, false );
|
|
157
|
+
|
|
158
|
+
// If the wrapper held focus, return focus to the editable
|
|
159
|
+
// element containing the selection, which is focusable
|
|
160
|
+
// again now that the wrapper is no longer an editing host.
|
|
161
|
+
// Only do so if that element belongs to the selected block:
|
|
162
|
+
// when the selection moved to another block through the
|
|
163
|
+
// store, the stale DOM selection must not reclaim block
|
|
164
|
+
// selection through its focus handler.
|
|
165
|
+
if ( node.ownerDocument.activeElement === node ) {
|
|
166
|
+
const editable = getSelectionEditableElement(
|
|
167
|
+
node.ownerDocument.defaultView.getSelection(),
|
|
168
|
+
node
|
|
169
|
+
);
|
|
170
|
+
if (
|
|
171
|
+
editable &&
|
|
172
|
+
getBlockClientId( editable ) ===
|
|
173
|
+
getSelectedBlockClientId()
|
|
174
|
+
) {
|
|
175
|
+
editable.focus();
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
},
|
|
180
|
+
[ enabled, registry ]
|
|
181
|
+
);
|
|
182
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { HOME, END } from '@wordpress/keycodes';
|
|
5
|
+
import { useSelect } from '@wordpress/data';
|
|
6
|
+
import { useRefEffect } from '@wordpress/compose';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Internal dependencies
|
|
10
|
+
*/
|
|
11
|
+
import { getSelectionEditableElement } from '../../utils/dom';
|
|
12
|
+
import { store as blockEditorStore } from '../../store';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* While the wrapper is the contentEditable editing host (a selected block
|
|
16
|
+
* supports `editableRoot`), browsers don't perform the default caret
|
|
17
|
+
* movement for Home and End. Perform the equivalent movement with
|
|
18
|
+
* `Selection.modify()`.
|
|
19
|
+
*/
|
|
20
|
+
export default function useHomeEnd() {
|
|
21
|
+
const { hasMultiSelection } = useSelect( blockEditorStore );
|
|
22
|
+
return useRefEffect( ( node ) => {
|
|
23
|
+
function onKeyDown( event ) {
|
|
24
|
+
if ( event.defaultPrevented ) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
if ( event.keyCode !== HOME && event.keyCode !== END ) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
if ( event.metaKey || event.ctrlKey || event.altKey ) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (
|
|
37
|
+
node.contentEditable !== 'true' ||
|
|
38
|
+
node.ownerDocument.activeElement !== node ||
|
|
39
|
+
hasMultiSelection()
|
|
40
|
+
) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const selection = node.ownerDocument.defaultView.getSelection();
|
|
45
|
+
|
|
46
|
+
if ( ! getSelectionEditableElement( selection, node ) ) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
event.preventDefault();
|
|
51
|
+
selection.modify(
|
|
52
|
+
event.shiftKey ? 'extend' : 'move',
|
|
53
|
+
event.keyCode === HOME ? 'backward' : 'forward',
|
|
54
|
+
'lineboundary'
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
node.addEventListener( 'keydown', onKeyDown );
|
|
59
|
+
return () => {
|
|
60
|
+
node.removeEventListener( 'keydown', onKeyDown );
|
|
61
|
+
};
|
|
62
|
+
}, [] );
|
|
63
|
+
}
|
|
@@ -16,6 +16,8 @@ import {
|
|
|
16
16
|
* Internal dependencies
|
|
17
17
|
*/
|
|
18
18
|
import { store as blockEditorStore } from '../../store';
|
|
19
|
+
import { setContentEditableWrapper } from './utils';
|
|
20
|
+
import { getSelectionEditableElement } from '../../utils/dom';
|
|
19
21
|
|
|
20
22
|
/**
|
|
21
23
|
* Handles input for selections across blocks.
|
|
@@ -45,10 +47,25 @@ export default function useInput() {
|
|
|
45
47
|
|
|
46
48
|
return useRefEffect( ( node ) => {
|
|
47
49
|
function onBeforeInput( event ) {
|
|
48
|
-
// If writing flow is editable,
|
|
49
|
-
// DOM
|
|
50
|
-
//
|
|
51
|
-
|
|
50
|
+
// If writing flow is editable, never allow the browser to alter
|
|
51
|
+
// the DOM outside of an editable element within a block. This
|
|
52
|
+
// will cause React errors (and the DOM should only be altered in
|
|
53
|
+
// a controlled fashion). The wrapper can be contentEditable with
|
|
54
|
+
// a single selection when the selected block supports
|
|
55
|
+
// `editableRoot`; in that case edits within the block's editable
|
|
56
|
+
// element are handled by its rich text instance.
|
|
57
|
+
if ( node.contentEditable !== 'true' ) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if ( hasMultiSelection() ) {
|
|
62
|
+
event.preventDefault();
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const selection = node.ownerDocument.defaultView.getSelection();
|
|
67
|
+
|
|
68
|
+
if ( ! getSelectionEditableElement( selection, node ) ) {
|
|
52
69
|
event.preventDefault();
|
|
53
70
|
}
|
|
54
71
|
}
|
|
@@ -127,7 +144,7 @@ export default function useInput() {
|
|
|
127
144
|
}
|
|
128
145
|
|
|
129
146
|
if ( event.keyCode === ENTER ) {
|
|
130
|
-
node
|
|
147
|
+
setContentEditableWrapper( node, false );
|
|
131
148
|
event.preventDefault();
|
|
132
149
|
if ( __unstableIsFullySelected() ) {
|
|
133
150
|
replaceBlocks(
|
|
@@ -141,7 +158,7 @@ export default function useInput() {
|
|
|
141
158
|
event.keyCode === BACKSPACE ||
|
|
142
159
|
event.keyCode === DELETE
|
|
143
160
|
) {
|
|
144
|
-
node
|
|
161
|
+
setContentEditableWrapper( node, false );
|
|
145
162
|
event.preventDefault();
|
|
146
163
|
if ( __unstableIsFullySelected() ) {
|
|
147
164
|
removeBlocks( getSelectedBlockClientIds() );
|
|
@@ -156,7 +173,7 @@ export default function useInput() {
|
|
|
156
173
|
event.key.length === 1 &&
|
|
157
174
|
! ( event.metaKey || event.ctrlKey )
|
|
158
175
|
) {
|
|
159
|
-
node
|
|
176
|
+
setContentEditableWrapper( node, false );
|
|
160
177
|
if ( __unstableIsSelectionMergeable() ) {
|
|
161
178
|
__unstableDeleteSelection( event.keyCode === DELETE );
|
|
162
179
|
} else {
|
|
@@ -176,7 +193,7 @@ export default function useInput() {
|
|
|
176
193
|
return;
|
|
177
194
|
}
|
|
178
195
|
|
|
179
|
-
node
|
|
196
|
+
setContentEditableWrapper( node, false );
|
|
180
197
|
|
|
181
198
|
if ( __unstableIsSelectionMergeable() ) {
|
|
182
199
|
__unstableDeleteSelection();
|
|
@@ -8,6 +8,7 @@ import { useSelect } from '@wordpress/data';
|
|
|
8
8
|
* Internal dependencies
|
|
9
9
|
*/
|
|
10
10
|
import { store as blockEditorStore } from '../../store';
|
|
11
|
+
import { setContentEditableWrapper } from './utils';
|
|
11
12
|
|
|
12
13
|
function selector( select ) {
|
|
13
14
|
const {
|
|
@@ -73,11 +74,9 @@ export default function useMultiSelection() {
|
|
|
73
74
|
// all content editable. We can't rely on using the store and
|
|
74
75
|
// React because re-rending happens too slowly. We need to be
|
|
75
76
|
// able to select across instances immediately.
|
|
76
|
-
node.contentEditable = true;
|
|
77
|
-
|
|
78
77
|
// For some browsers, like Safari, it is important that focus
|
|
79
78
|
// happens BEFORE selection removal.
|
|
80
|
-
node
|
|
79
|
+
setContentEditableWrapper( node, true );
|
|
81
80
|
|
|
82
81
|
defaultView.getSelection().removeAllRanges();
|
|
83
82
|
},
|