@wordpress/block-editor 15.22.1 → 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 +35 -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 +18 -36
- package/build/components/block-inspector/index.cjs.map +2 -2
- package/build/components/block-list/block-invalid-warning.cjs +8 -19
- package/build/components/block-list/block-invalid-warning.cjs.map +2 -2
- package/build/components/block-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/use-resize-canvas/index.cjs +16 -53
- package/build/components/use-resize-canvas/index.cjs.map +3 -3
- 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 +32 -23
- 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 -2
- 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-actions.cjs +16 -0
- package/build/store/private-actions.cjs.map +2 -2
- package/build/store/private-keys.cjs +3 -3
- package/build/store/private-keys.cjs.map +2 -2
- package/build/store/private-selectors.cjs +109 -12
- package/build/store/private-selectors.cjs.map +3 -3
- package/build/store/reducer.cjs +19 -3
- package/build/store/reducer.cjs.map +2 -2
- package/build/store/selectors.cjs +13 -0
- package/build/store/selectors.cjs.map +2 -2
- package/build/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 +18 -36
- package/build-module/components/block-inspector/index.mjs.map +2 -2
- package/build-module/components/block-list/block-invalid-warning.mjs +8 -19
- package/build-module/components/block-list/block-invalid-warning.mjs.map +2 -2
- package/build-module/components/block-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/use-resize-canvas/index.mjs +6 -53
- package/build-module/components/use-resize-canvas/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 +32 -23
- 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 -3
- 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-actions.mjs +14 -0
- package/build-module/store/private-actions.mjs.map +2 -2
- package/build-module/store/private-keys.mjs +2 -2
- package/build-module/store/private-keys.mjs.map +2 -2
- package/build-module/store/private-selectors.mjs +106 -12
- package/build-module/store/private-selectors.mjs.map +2 -2
- package/build-module/store/reducer.mjs +17 -3
- package/build-module/store/reducer.mjs.map +2 -2
- package/build-module/store/selectors.mjs +13 -0
- package/build-module/store/selectors.mjs.map +2 -2
- package/build-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 +25 -44
- 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/use-resize-canvas/index.js +10 -71
- 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 +55 -28
- 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 -2
- package/src/store/actions.js +43 -14
- package/src/store/private-actions.js +31 -0
- package/src/store/private-keys.js +1 -1
- package/src/store/private-selectors.js +209 -16
- package/src/store/reducer.js +37 -2
- package/src/store/selectors.js +41 -0
- package/src/store/test/actions.js +1 -1
- package/src/store/test/private-selectors.js +547 -10
- package/src/store/test/reducer.js +41 -13
- package/src/store/test/selectors.js +133 -0
- package/src/style.scss +1 -0
- package/src/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
- package/src/components/use-resize-canvas/README.md +0 -37
|
@@ -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
|
},
|
|
@@ -10,7 +10,11 @@ import { useRefEffect } from '@wordpress/compose';
|
|
|
10
10
|
* Internal dependencies
|
|
11
11
|
*/
|
|
12
12
|
import { store as blockEditorStore } from '../../store';
|
|
13
|
-
import {
|
|
13
|
+
import {
|
|
14
|
+
isInsideRootBlock,
|
|
15
|
+
getBlockClientId,
|
|
16
|
+
getSelectionEditableElement,
|
|
17
|
+
} from '../../utils/dom';
|
|
14
18
|
|
|
15
19
|
export default function useSelectAll() {
|
|
16
20
|
const { getBlockOrder, getSelectedBlockClientIds, getBlockRootClientId } =
|
|
@@ -25,17 +29,43 @@ export default function useSelectAll() {
|
|
|
25
29
|
}
|
|
26
30
|
|
|
27
31
|
const selectedClientIds = getSelectedBlockClientIds();
|
|
32
|
+
const { ownerDocument } = node;
|
|
33
|
+
const selection = ownerDocument.defaultView.getSelection();
|
|
34
|
+
// When the wrapper is contentEditable and holds focus (the
|
|
35
|
+
// selected block supports `editableRoot`), the event targets the
|
|
36
|
+
// wrapper; resolve the editable element containing the selection.
|
|
37
|
+
const editable =
|
|
38
|
+
( event.target === node &&
|
|
39
|
+
getSelectionEditableElement( selection, node ) ) ||
|
|
40
|
+
event.target;
|
|
28
41
|
|
|
29
42
|
if (
|
|
30
43
|
selectedClientIds.length < 2 &&
|
|
31
|
-
! isEntirelySelected(
|
|
44
|
+
! isEntirelySelected( editable )
|
|
32
45
|
) {
|
|
46
|
+
// While the wrapper is contentEditable, the browser default
|
|
47
|
+
// would select the entire canvas. Select the contents of the
|
|
48
|
+
// editable element instead, like the default does when the
|
|
49
|
+
// element itself holds focus.
|
|
50
|
+
if ( event.target === node && editable !== node ) {
|
|
51
|
+
event.preventDefault();
|
|
52
|
+
const range = ownerDocument.createRange();
|
|
53
|
+
range.selectNodeContents( editable );
|
|
54
|
+
selection.removeAllRanges();
|
|
55
|
+
selection.addRange( range );
|
|
56
|
+
// The native `selectionchange` event is asynchronous;
|
|
57
|
+
// dispatch it synchronously so that listeners depending
|
|
58
|
+
// on it (e.g. the rich text internal record sync) run
|
|
59
|
+
// before any event following this one.
|
|
60
|
+
ownerDocument.dispatchEvent(
|
|
61
|
+
new Event( 'selectionchange' )
|
|
62
|
+
);
|
|
63
|
+
}
|
|
33
64
|
return;
|
|
34
65
|
}
|
|
35
66
|
|
|
36
67
|
event.preventDefault();
|
|
37
68
|
|
|
38
|
-
const { ownerDocument } = event.target;
|
|
39
69
|
const [ firstSelectedClientId ] = selectedClientIds;
|
|
40
70
|
const activeClientId = getBlockClientId(
|
|
41
71
|
ownerDocument.activeElement
|
|
@@ -3,7 +3,10 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { useSelect, useDispatch } from '@wordpress/data';
|
|
5
5
|
import { useRefEffect } from '@wordpress/compose';
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
create,
|
|
8
|
+
privateApis as richTextPrivateApis,
|
|
9
|
+
} from '@wordpress/rich-text';
|
|
7
10
|
import { isSelectionForward } from '@wordpress/dom';
|
|
8
11
|
|
|
9
12
|
/**
|
|
@@ -11,6 +14,11 @@ import { isSelectionForward } from '@wordpress/dom';
|
|
|
11
14
|
*/
|
|
12
15
|
import { store as blockEditorStore } from '../../store';
|
|
13
16
|
import { getBlockClientId } from '../../utils/dom';
|
|
17
|
+
import { canHostEditableRoot } from './use-editable-root';
|
|
18
|
+
import { setContentEditableWrapper, setShiftClickInProgress } from './utils';
|
|
19
|
+
import { unlock } from '../../lock-unlock';
|
|
20
|
+
|
|
21
|
+
const { ownsSelection } = unlock( richTextPrivateApis );
|
|
14
22
|
|
|
15
23
|
/**
|
|
16
24
|
* Extract the selection start node from the selection. When the anchor node is
|
|
@@ -39,11 +47,13 @@ function extractSelectionStartNode( selection ) {
|
|
|
39
47
|
* a text node, the selection offset is the index of a child node. The selection
|
|
40
48
|
* reaches up to but excluding that child node.
|
|
41
49
|
*
|
|
42
|
-
* @param {Selection} selection
|
|
50
|
+
* @param {Selection} selection The selection.
|
|
51
|
+
* @param {boolean} isTripleClick Whether the selection comes from a triple
|
|
52
|
+
* click.
|
|
43
53
|
*
|
|
44
54
|
* @return {Element} The selection start node.
|
|
45
55
|
*/
|
|
46
|
-
function extractSelectionEndNode( selection ) {
|
|
56
|
+
function extractSelectionEndNode( selection, isTripleClick ) {
|
|
47
57
|
const { focusNode, focusOffset } = selection;
|
|
48
58
|
|
|
49
59
|
if ( focusNode.nodeType === focusNode.TEXT_NODE ) {
|
|
@@ -54,11 +64,18 @@ function extractSelectionEndNode( selection ) {
|
|
|
54
64
|
return focusNode;
|
|
55
65
|
}
|
|
56
66
|
|
|
57
|
-
//
|
|
58
|
-
//
|
|
59
|
-
//
|
|
60
|
-
//
|
|
61
|
-
|
|
67
|
+
// A triple click selects the paragraph, but the browser extends the
|
|
68
|
+
// forward selection into the next element at an offset of 0. This may
|
|
69
|
+
// trigger multi selection even though the selection does not visually end
|
|
70
|
+
// in the next block. Keyboard selections that legitimately extend to the
|
|
71
|
+
// same boundary (e.g. Shift+ArrowDown into a focusable block, where the
|
|
72
|
+
// browser reports the boundary at the element instead of its first text
|
|
73
|
+
// position) must not be corrected, so only do this for triple clicks.
|
|
74
|
+
if (
|
|
75
|
+
focusOffset === 0 &&
|
|
76
|
+
isSelectionForward( selection ) &&
|
|
77
|
+
isTripleClick
|
|
78
|
+
) {
|
|
62
79
|
return focusNode.previousSibling ?? focusNode.parentElement;
|
|
63
80
|
}
|
|
64
81
|
|
|
@@ -75,26 +92,6 @@ function findDepth( a, b ) {
|
|
|
75
92
|
return depth;
|
|
76
93
|
}
|
|
77
94
|
|
|
78
|
-
/**
|
|
79
|
-
* Sets the `contenteditable` wrapper element to `value`.
|
|
80
|
-
*
|
|
81
|
-
* @param {HTMLElement} node Block element.
|
|
82
|
-
* @param {boolean} value `contentEditable` value (true or false)
|
|
83
|
-
*/
|
|
84
|
-
function setContentEditableWrapper( node, value ) {
|
|
85
|
-
// Since we are calling this on every selection change, check if the value
|
|
86
|
-
// needs to be updated first because it trigger the browser to recalculate
|
|
87
|
-
// style.
|
|
88
|
-
if ( node.contentEditable !== String( value ) ) {
|
|
89
|
-
node.contentEditable = value;
|
|
90
|
-
|
|
91
|
-
// Firefox doesn't automatically move focus.
|
|
92
|
-
if ( value ) {
|
|
93
|
-
node.focus();
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
|
|
98
95
|
function getRichTextElement( node ) {
|
|
99
96
|
const element =
|
|
100
97
|
node.nodeType === node.ELEMENT_NODE ? node : node.parentElement;
|
|
@@ -107,13 +104,32 @@ function getRichTextElement( node ) {
|
|
|
107
104
|
export default function useSelectionObserver() {
|
|
108
105
|
const { multiSelect, selectBlock, selectionChange } =
|
|
109
106
|
useDispatch( blockEditorStore );
|
|
110
|
-
const
|
|
111
|
-
|
|
107
|
+
const blockEditorSelectors = useSelect( blockEditorStore );
|
|
108
|
+
const {
|
|
109
|
+
getBlockParents,
|
|
110
|
+
getBlockSelectionStart,
|
|
111
|
+
isMultiSelecting,
|
|
112
|
+
getSelectionStart,
|
|
113
|
+
getSelectionEnd,
|
|
114
|
+
getSelectedBlockClientId,
|
|
115
|
+
} = blockEditorSelectors;
|
|
112
116
|
return useRefEffect(
|
|
113
117
|
( node ) => {
|
|
114
118
|
const { ownerDocument } = node;
|
|
115
119
|
const { defaultView } = ownerDocument;
|
|
116
120
|
|
|
121
|
+
let isTripleClick = false;
|
|
122
|
+
|
|
123
|
+
function onMouseDown( event ) {
|
|
124
|
+
isTripleClick = event.detail === 3;
|
|
125
|
+
setShiftClickInProgress( event.shiftKey );
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
function onKeyDown() {
|
|
129
|
+
isTripleClick = false;
|
|
130
|
+
setShiftClickInProgress( false );
|
|
131
|
+
}
|
|
132
|
+
|
|
117
133
|
function onSelectionChange( event ) {
|
|
118
134
|
const selection = defaultView.getSelection();
|
|
119
135
|
|
|
@@ -122,7 +138,10 @@ export default function useSelectionObserver() {
|
|
|
122
138
|
}
|
|
123
139
|
|
|
124
140
|
const startNode = extractSelectionStartNode( selection );
|
|
125
|
-
const endNode = extractSelectionEndNode(
|
|
141
|
+
const endNode = extractSelectionEndNode(
|
|
142
|
+
selection,
|
|
143
|
+
isTripleClick
|
|
144
|
+
);
|
|
126
145
|
|
|
127
146
|
if (
|
|
128
147
|
! node.contains( startNode ) ||
|
|
@@ -139,6 +158,49 @@ export default function useSelectionObserver() {
|
|
|
139
158
|
// For now we check if the event is a `mouse` event.
|
|
140
159
|
const isClickShift = event.shiftKey && event.type === 'mouseup';
|
|
141
160
|
if ( selection.isCollapsed && ! isClickShift ) {
|
|
161
|
+
const collapsedClientId = getBlockClientId( startNode );
|
|
162
|
+
|
|
163
|
+
// If the block supports an editable root, keep (or make)
|
|
164
|
+
// the wrapper contentEditable so the native selection can
|
|
165
|
+
// extend across blocks. The wrapper holds focus, so rich
|
|
166
|
+
// text instances don't sync the selection; do it here.
|
|
167
|
+
if (
|
|
168
|
+
! isMultiSelecting() &&
|
|
169
|
+
collapsedClientId &&
|
|
170
|
+
// Only keep the wrapper editable when the collapsed
|
|
171
|
+
// selection is in the block that is actually selected.
|
|
172
|
+
// A stale native selection may linger in a previously
|
|
173
|
+
// selected editable root block (e.g. Firefox does not
|
|
174
|
+
// always move it), which must not re-enable the wrapper
|
|
175
|
+
// after another block has been selected.
|
|
176
|
+
collapsedClientId === getSelectedBlockClientId() &&
|
|
177
|
+
canHostEditableRoot(
|
|
178
|
+
blockEditorSelectors,
|
|
179
|
+
collapsedClientId
|
|
180
|
+
)
|
|
181
|
+
) {
|
|
182
|
+
setContentEditableWrapper( node, true );
|
|
183
|
+
|
|
184
|
+
// While the wrapper is editable it must hold focus: a
|
|
185
|
+
// nested editable element cannot retain it (the first
|
|
186
|
+
// DOM mutation moves focus to the host, inconsistently
|
|
187
|
+
// across browsers). Don't steal focus from UI elements
|
|
188
|
+
// (e.g. buttons) or editables outside the block (e.g.
|
|
189
|
+
// the post title). The rich text instance owning the
|
|
190
|
+
// selection syncs it to the store itself.
|
|
191
|
+
const { activeElement } = ownerDocument;
|
|
192
|
+
if (
|
|
193
|
+
activeElement !== node &&
|
|
194
|
+
activeElement?.isContentEditable &&
|
|
195
|
+
node.contains( activeElement ) &&
|
|
196
|
+
getBlockClientId( activeElement ) ===
|
|
197
|
+
collapsedClientId
|
|
198
|
+
) {
|
|
199
|
+
node.focus();
|
|
200
|
+
}
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
|
|
142
204
|
if (
|
|
143
205
|
node.contentEditable === 'true' &&
|
|
144
206
|
! isMultiSelecting()
|
|
@@ -210,7 +272,6 @@ export default function useSelectionObserver() {
|
|
|
210
272
|
return;
|
|
211
273
|
}
|
|
212
274
|
}
|
|
213
|
-
|
|
214
275
|
const isSingularSelection = startClientId === endClientId;
|
|
215
276
|
if ( isSingularSelection ) {
|
|
216
277
|
if ( ! isMultiSelecting() ) {
|
|
@@ -226,7 +287,16 @@ export default function useSelectionObserver() {
|
|
|
226
287
|
|
|
227
288
|
if (
|
|
228
289
|
richTextElement &&
|
|
229
|
-
|
|
290
|
+
// The rich text instance syncs the selection
|
|
291
|
+
// itself when its element is editable and owns the
|
|
292
|
+
// selection (also through a focused editing host).
|
|
293
|
+
// It may be temporarily non-editable while a drag
|
|
294
|
+
// that started outside it is in progress (see
|
|
295
|
+
// rich-text's preventFocusCapture).
|
|
296
|
+
( richTextElement.contentEditable !== 'true' ||
|
|
297
|
+
( ownerDocument.activeElement !==
|
|
298
|
+
richTextElement &&
|
|
299
|
+
! ownsSelection( richTextElement ) ) )
|
|
230
300
|
) {
|
|
231
301
|
const range = selection.getRangeAt( 0 );
|
|
232
302
|
const richTextData = create( {
|
|
@@ -234,7 +304,7 @@ export default function useSelectionObserver() {
|
|
|
234
304
|
range,
|
|
235
305
|
__unstableIsEditableTree: true,
|
|
236
306
|
} );
|
|
237
|
-
|
|
307
|
+
const selectionUpdate = {
|
|
238
308
|
start: {
|
|
239
309
|
clientId: startClientId,
|
|
240
310
|
attributeKey:
|
|
@@ -247,9 +317,34 @@ export default function useSelectionObserver() {
|
|
|
247
317
|
attributeKey:
|
|
248
318
|
richTextElement.dataset
|
|
249
319
|
.wpBlockAttributeKey,
|
|
250
|
-
offset
|
|
320
|
+
// Clamp the end offset to the element. A
|
|
321
|
+
// forward selection can overshoot past the
|
|
322
|
+
// rich text (e.g. a triple click extends
|
|
323
|
+
// into the next block at offset 0), leaving
|
|
324
|
+
// `end` undefined; that means the selection
|
|
325
|
+
// reaches through the end of this element's
|
|
326
|
+
// content.
|
|
327
|
+
offset:
|
|
328
|
+
richTextData.end ??
|
|
329
|
+
richTextData.text.length,
|
|
251
330
|
},
|
|
252
|
-
}
|
|
331
|
+
};
|
|
332
|
+
const { start, end } = selectionUpdate;
|
|
333
|
+
const selectionStart = getSelectionStart();
|
|
334
|
+
const selectionEnd = getSelectionEnd();
|
|
335
|
+
|
|
336
|
+
// Skip the dispatch when the store already holds
|
|
337
|
+
// the same selection.
|
|
338
|
+
if (
|
|
339
|
+
selectionStart.clientId !== start.clientId ||
|
|
340
|
+
selectionEnd.clientId !== end.clientId ||
|
|
341
|
+
selectionStart.attributeKey !==
|
|
342
|
+
start.attributeKey ||
|
|
343
|
+
selectionStart.offset !== start.offset ||
|
|
344
|
+
selectionEnd.offset !== end.offset
|
|
345
|
+
) {
|
|
346
|
+
selectionChange( selectionUpdate );
|
|
347
|
+
}
|
|
253
348
|
} else {
|
|
254
349
|
selectBlock( startClientId );
|
|
255
350
|
}
|
|
@@ -318,17 +413,81 @@ export default function useSelectionObserver() {
|
|
|
318
413
|
}
|
|
319
414
|
}
|
|
320
415
|
|
|
416
|
+
// Native `selectionchange` events are asynchronous: a clipboard
|
|
417
|
+
// event may fire before the store has been updated with a cross
|
|
418
|
+
// block selection that was just made. Sync it before the clipboard
|
|
419
|
+
// handlers (bubble phase) read the store.
|
|
420
|
+
function ensureMultiBlockSelectionSync( event ) {
|
|
421
|
+
const selection = defaultView.getSelection();
|
|
422
|
+
|
|
423
|
+
if ( ! selection.rangeCount || selection.isCollapsed ) {
|
|
424
|
+
return;
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
// Only a selection across different blocks needs to be synced
|
|
428
|
+
// here; rich text owns selections within a single block.
|
|
429
|
+
const startClientId = getBlockClientId(
|
|
430
|
+
extractSelectionStartNode( selection )
|
|
431
|
+
);
|
|
432
|
+
const endClientId = getBlockClientId(
|
|
433
|
+
extractSelectionEndNode( selection, isTripleClick )
|
|
434
|
+
);
|
|
435
|
+
|
|
436
|
+
if ( startClientId !== endClientId ) {
|
|
437
|
+
onSelectionChange( event );
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
|
|
321
441
|
ownerDocument.addEventListener(
|
|
322
442
|
'selectionchange',
|
|
323
443
|
onSelectionChange
|
|
324
444
|
);
|
|
325
|
-
|
|
445
|
+
function onMouseUp( event ) {
|
|
446
|
+
onSelectionChange( event );
|
|
447
|
+
setShiftClickInProgress( false );
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
defaultView.addEventListener( 'mouseup', onMouseUp );
|
|
451
|
+
node.addEventListener( 'mousedown', onMouseDown );
|
|
452
|
+
node.addEventListener( 'keydown', onKeyDown );
|
|
453
|
+
ownerDocument.addEventListener(
|
|
454
|
+
'copy',
|
|
455
|
+
ensureMultiBlockSelectionSync,
|
|
456
|
+
true
|
|
457
|
+
);
|
|
458
|
+
ownerDocument.addEventListener(
|
|
459
|
+
'cut',
|
|
460
|
+
ensureMultiBlockSelectionSync,
|
|
461
|
+
true
|
|
462
|
+
);
|
|
463
|
+
ownerDocument.addEventListener(
|
|
464
|
+
'paste',
|
|
465
|
+
ensureMultiBlockSelectionSync,
|
|
466
|
+
true
|
|
467
|
+
);
|
|
326
468
|
return () => {
|
|
327
469
|
ownerDocument.removeEventListener(
|
|
328
470
|
'selectionchange',
|
|
329
471
|
onSelectionChange
|
|
330
472
|
);
|
|
331
|
-
defaultView.removeEventListener( 'mouseup',
|
|
473
|
+
defaultView.removeEventListener( 'mouseup', onMouseUp );
|
|
474
|
+
node.removeEventListener( 'mousedown', onMouseDown );
|
|
475
|
+
node.removeEventListener( 'keydown', onKeyDown );
|
|
476
|
+
ownerDocument.removeEventListener(
|
|
477
|
+
'copy',
|
|
478
|
+
ensureMultiBlockSelectionSync,
|
|
479
|
+
true
|
|
480
|
+
);
|
|
481
|
+
ownerDocument.removeEventListener(
|
|
482
|
+
'cut',
|
|
483
|
+
ensureMultiBlockSelectionSync,
|
|
484
|
+
true
|
|
485
|
+
);
|
|
486
|
+
ownerDocument.removeEventListener(
|
|
487
|
+
'paste',
|
|
488
|
+
ensureMultiBlockSelectionSync,
|
|
489
|
+
true
|
|
490
|
+
);
|
|
332
491
|
};
|
|
333
492
|
},
|
|
334
493
|
[ multiSelect, selectBlock, selectionChange, getBlockParents ]
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* WordPress dependencies
|
|
3
3
|
*/
|
|
4
|
+
import { __ } from '@wordpress/i18n';
|
|
4
5
|
import { __unstableStripHTML as stripHTML } from '@wordpress/dom';
|
|
5
6
|
import {
|
|
6
7
|
serialize,
|
|
@@ -116,3 +117,85 @@ function toPlainText( html ) {
|
|
|
116
117
|
// Merge any consecutive line breaks
|
|
117
118
|
return plainText.replace( /\n\n+/g, '\n\n' );
|
|
118
119
|
}
|
|
120
|
+
|
|
121
|
+
let shiftClickInProgress = false;
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Tracks whether a shift+click gesture is in progress, from the shift held
|
|
125
|
+
* mousedown until its mouseup. Maintained by the selection observer; read by
|
|
126
|
+
* the block focus handler, since the focus event fired between the two
|
|
127
|
+
* carries no modifier keys.
|
|
128
|
+
*
|
|
129
|
+
* @param {boolean} value Whether a shift+click gesture is in progress.
|
|
130
|
+
*/
|
|
131
|
+
export function setShiftClickInProgress( value ) {
|
|
132
|
+
shiftClickInProgress = value;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Returns whether a shift+click gesture is in progress.
|
|
137
|
+
*
|
|
138
|
+
* @return {boolean} Whether a shift+click gesture is in progress.
|
|
139
|
+
*/
|
|
140
|
+
export function isShiftClickInProgress() {
|
|
141
|
+
return shiftClickInProgress;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Makes the wrapper element an editing host, or stops it from being one. The
|
|
146
|
+
* ARIA attributes travel with the editability: while the wrapper is the
|
|
147
|
+
* active editing host it must present as a named multiline textbox, per the
|
|
148
|
+
* WAI-ARIA textbox role, which requires an accessible name.
|
|
149
|
+
*
|
|
150
|
+
* @param {HTMLElement} node Wrapper element.
|
|
151
|
+
* @param {boolean} value Whether the wrapper should be an
|
|
152
|
+
* editing host.
|
|
153
|
+
* @param {Object} options
|
|
154
|
+
* @param {boolean} options.focus Move focus to the wrapper when it
|
|
155
|
+
* becomes an editing host (Firefox does
|
|
156
|
+
* not automatically move it). Default
|
|
157
|
+
* true.
|
|
158
|
+
*
|
|
159
|
+
* @return {boolean} Whether the wrapper is an editing host now.
|
|
160
|
+
*/
|
|
161
|
+
export function setContentEditableWrapper(
|
|
162
|
+
node,
|
|
163
|
+
value,
|
|
164
|
+
{ focus = true } = {}
|
|
165
|
+
) {
|
|
166
|
+
// Check first: this is called on every selection change, and setting
|
|
167
|
+
// contentEditable triggers a style recalculation.
|
|
168
|
+
if ( node.contentEditable === String( value ) ) {
|
|
169
|
+
return value;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
node.contentEditable = value;
|
|
173
|
+
|
|
174
|
+
if ( ! value ) {
|
|
175
|
+
node.removeAttribute( 'role' );
|
|
176
|
+
node.removeAttribute( 'aria-multiline' );
|
|
177
|
+
node.removeAttribute( 'aria-label' );
|
|
178
|
+
return false;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// Only act as an editing host if the environment supports it (JSDOM
|
|
182
|
+
// does not implement contentEditable): without editing host semantics
|
|
183
|
+
// the wrapper must not claim focus or textbox semantics.
|
|
184
|
+
if ( ! node.isContentEditable ) {
|
|
185
|
+
node.removeAttribute( 'contenteditable' );
|
|
186
|
+
return false;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// Expose the host as a named multiline textbox so it has a role and
|
|
190
|
+
// accessible name once it takes focus. The label is generic because the
|
|
191
|
+
// host can span several blocks.
|
|
192
|
+
node.setAttribute( 'role', 'textbox' );
|
|
193
|
+
node.setAttribute( 'aria-multiline', 'true' );
|
|
194
|
+
node.setAttribute( 'aria-label', __( 'Editor canvas' ) );
|
|
195
|
+
|
|
196
|
+
if ( focus ) {
|
|
197
|
+
node.focus();
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
return true;
|
|
201
|
+
}
|
|
@@ -40,7 +40,6 @@ export default function WritingModeControl( { className, value, onChange } ) {
|
|
|
40
40
|
return (
|
|
41
41
|
<ToggleGroupControl
|
|
42
42
|
isDeselectable
|
|
43
|
-
__next40pxDefaultSize
|
|
44
43
|
label={ __( 'Orientation' ) }
|
|
45
44
|
className={ clsx( 'block-editor-writing-mode-control', className ) }
|
|
46
45
|
value={ value }
|
package/src/hooks/background.js
CHANGED
|
@@ -234,13 +234,15 @@ export function BackgroundImagePanel( {
|
|
|
234
234
|
},
|
|
235
235
|
} ),
|
|
236
236
|
};
|
|
237
|
+
const value = isStateSelected
|
|
238
|
+
? getStyleForState( style, selectedState )
|
|
239
|
+
: styleValue;
|
|
237
240
|
|
|
238
241
|
// Skipped for gradients, which can't be reliably evaluated for contrast.
|
|
239
242
|
const enableContrastChecking =
|
|
240
|
-
!
|
|
241
|
-
!
|
|
242
|
-
|
|
243
|
-
!! styleValue?.color?.background &&
|
|
243
|
+
! value?.color?.gradient &&
|
|
244
|
+
! value?.background?.gradient &&
|
|
245
|
+
!! value?.color?.background &&
|
|
244
246
|
( settings?.color?.text || settings?.color?.link ) &&
|
|
245
247
|
false !== getBlockSupport( name, [ 'color', 'enableContrastChecker' ] );
|
|
246
248
|
|
|
@@ -386,11 +388,7 @@ export function BackgroundImagePanel( {
|
|
|
386
388
|
settings={ updatedSettings }
|
|
387
389
|
onChange={ onChange }
|
|
388
390
|
defaultControls={ defaultControls }
|
|
389
|
-
value={
|
|
390
|
-
isStateSelected
|
|
391
|
-
? getStyleForState( style, selectedState )
|
|
392
|
-
: styleValue
|
|
393
|
-
}
|
|
391
|
+
value={ value }
|
|
394
392
|
contrastWarning={ contrastWarning }
|
|
395
393
|
/>
|
|
396
394
|
);
|
|
@@ -3,12 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
.block-editor-content-only-controls__link {
|
|
5
5
|
width: 100%;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
&:focus:not(:disabled) {
|
|
9
|
-
// Allow smooth transition between focused and unfocused box-shadow states.
|
|
10
|
-
box-shadow: 0 0 0 currentColor inset, 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
|
|
11
|
-
}
|
|
6
|
+
border-color: $gray-400;
|
|
12
7
|
}
|
|
13
8
|
|
|
14
9
|
.block-editor-content-only-controls__link-row {
|
|
@@ -3,13 +3,8 @@
|
|
|
3
3
|
|
|
4
4
|
.block-editor-content-only-controls__media {
|
|
5
5
|
width: 100%;
|
|
6
|
-
|
|
6
|
+
border-color: $gray-400;
|
|
7
7
|
padding-right: $grid-unit-40;
|
|
8
|
-
|
|
9
|
-
&:focus:not(:disabled) {
|
|
10
|
-
// Allow smooth transition between focused and unfocused box-shadow states.
|
|
11
|
-
box-shadow: 0 0 0 currentColor inset, 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
|
|
12
|
-
}
|
|
13
8
|
}
|
|
14
9
|
|
|
15
10
|
.block-editor-content-only-controls__media-replace-flow {
|