@wordpress/block-editor 8.3.1 → 8.5.1
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 +4 -0
- package/README.md +56 -18
- package/build/components/alignment-control/index.js +13 -6
- package/build/components/alignment-control/index.js.map +1 -1
- package/build/components/block-alignment-control/index.js +13 -6
- package/build/components/block-alignment-control/index.js.map +1 -1
- package/build/components/block-content-overlay/index.js +13 -4
- package/build/components/block-content-overlay/index.js.map +1 -1
- package/build/components/block-draggable/index.js +2 -3
- package/build/components/block-draggable/index.js.map +1 -1
- package/build/components/block-icon/index.js +4 -0
- package/build/components/block-icon/index.js.map +1 -1
- package/build/components/block-inspector/index.js +6 -1
- package/build/components/block-inspector/index.js.map +1 -1
- package/build/components/block-list/block-html.js +4 -1
- package/build/components/block-list/block-html.js.map +1 -1
- package/build/components/block-list/block.js +4 -1
- package/build/components/block-list/block.js.map +1 -1
- package/build/components/block-list/use-block-props/index.js +1 -6
- package/build/components/block-list/use-block-props/index.js.map +1 -1
- package/build/components/block-list/use-block-props/use-focus-first-element.js +22 -6
- package/build/components/block-list/use-block-props/use-focus-first-element.js.map +1 -1
- package/build/components/block-list/use-block-props/use-focus-handler.js +7 -1
- package/build/components/block-list/use-block-props/use-focus-handler.js.map +1 -1
- package/build/components/block-list-appender/index.js +6 -1
- package/build/components/block-list-appender/index.js.map +1 -1
- package/build/components/block-lock/index.js +40 -0
- package/build/components/block-lock/index.js.map +1 -0
- package/build/components/block-lock/menu-item.js +52 -0
- package/build/components/block-lock/menu-item.js.map +1 -0
- package/build/components/block-lock/modal.js +155 -0
- package/build/components/block-lock/modal.js.map +1 -0
- package/build/components/block-lock/toolbar.js +65 -0
- package/build/components/block-lock/toolbar.js.map +1 -0
- package/build/components/block-lock/use-block-lock.js +53 -0
- package/build/components/block-lock/use-block-lock.js.map +1 -0
- package/build/components/block-mover/index.js +4 -0
- package/build/components/block-mover/index.js.map +1 -1
- package/build/components/block-pattern-setup/index.js +37 -22
- package/build/components/block-pattern-setup/index.js.map +1 -1
- package/build/components/block-pattern-setup/setup-toolbar.js +1 -1
- package/build/components/block-pattern-setup/setup-toolbar.js.map +1 -1
- package/build/components/block-preview/auto.js +6 -3
- package/build/components/block-preview/auto.js.map +1 -1
- package/build/components/block-preview/index.js +4 -2
- package/build/components/block-preview/index.js.map +1 -1
- package/build/components/block-settings-menu/block-settings-dropdown.js +75 -10
- package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
- package/build/components/block-settings-menu-controls/index.js +19 -9
- package/build/components/block-settings-menu-controls/index.js.map +1 -1
- package/build/components/block-switcher/index.js +8 -3
- package/build/components/block-switcher/index.js.map +1 -1
- package/build/components/block-title/index.js +2 -2
- package/build/components/block-title/index.js.map +1 -1
- package/build/components/block-title/use-block-display-title.js +8 -6
- package/build/components/block-title/use-block-display-title.js.map +1 -1
- package/build/components/block-toolbar/block-name-context.js +17 -0
- package/build/components/block-toolbar/block-name-context.js.map +1 -0
- package/build/components/block-toolbar/block-toolbar-last-item.js +20 -0
- package/build/components/block-toolbar/block-toolbar-last-item.js.map +1 -0
- package/build/components/block-toolbar/index.js +24 -5
- package/build/components/block-toolbar/index.js.map +1 -1
- package/build/components/block-tools/index.js +0 -16
- package/build/components/block-tools/index.js.map +1 -1
- package/build/components/block-variation-transforms/index.js +92 -47
- package/build/components/block-variation-transforms/index.js.map +1 -1
- package/build/components/block-vertical-alignment-control/index.js +13 -6
- package/build/components/block-vertical-alignment-control/index.js.map +1 -1
- package/build/components/border-radius-control/index.js +0 -1
- package/build/components/border-radius-control/index.js.map +1 -1
- package/build/components/border-radius-control/utils.js +1 -1
- package/build/components/border-radius-control/utils.js.map +1 -1
- package/build/components/colors-gradients/control.js +3 -1
- package/build/components/colors-gradients/control.js.map +1 -1
- package/build/components/contrast-checker/index.js +4 -0
- package/build/components/contrast-checker/index.js.map +1 -1
- package/build/components/convert-to-group-buttons/index.js +8 -0
- package/build/components/convert-to-group-buttons/index.js.map +1 -1
- package/build/components/convert-to-group-buttons/toolbar.js +105 -0
- package/build/components/convert-to-group-buttons/toolbar.js.map +1 -0
- package/build/components/copy-handler/index.js +4 -0
- package/build/components/copy-handler/index.js.map +1 -1
- package/build/components/date-format-picker/index.js +132 -0
- package/build/components/date-format-picker/index.js.map +1 -0
- package/build/components/font-sizes/font-size-picker.js +4 -0
- package/build/components/font-sizes/font-size-picker.js.map +1 -1
- package/build/components/iframe/index.js +6 -9
- package/build/components/iframe/index.js.map +1 -1
- package/build/components/index.js +27 -0
- package/build/components/index.js.map +1 -1
- package/build/components/justify-content-control/index.js +13 -6
- package/build/components/justify-content-control/index.js.map +1 -1
- package/build/components/keyboard-shortcuts/index.js +1 -1
- package/build/components/keyboard-shortcuts/index.js.map +1 -1
- package/build/components/line-height-control/index.js +15 -6
- package/build/components/line-height-control/index.js.map +1 -1
- package/build/components/list-view/block-select-button.js +18 -23
- package/build/components/list-view/block-select-button.js.map +1 -1
- package/build/components/list-view/block.js +38 -13
- package/build/components/list-view/block.js.map +1 -1
- package/build/components/list-view/branch.js +16 -13
- package/build/components/list-view/branch.js.map +1 -1
- package/build/components/list-view/index.js +7 -1
- package/build/components/list-view/index.js.map +1 -1
- package/build/components/list-view/use-block-selection.js +9 -2
- package/build/components/list-view/use-block-selection.js.map +1 -1
- package/build/components/media-replace-flow/index.js +4 -0
- package/build/components/media-replace-flow/index.js.map +1 -1
- package/build/components/multi-selection-inspector/index.js +1 -1
- package/build/components/multi-selection-inspector/index.js.map +1 -1
- package/build/components/rich-text/index.js +27 -5
- package/build/components/rich-text/index.js.map +1 -1
- package/build/components/rich-text/index.native.js +13 -9
- package/build/components/rich-text/index.native.js.map +1 -1
- package/build/components/rich-text/split-value.js +12 -2
- package/build/components/rich-text/split-value.js.map +1 -1
- package/build/components/rich-text/use-firefox-compat.js +49 -0
- package/build/components/rich-text/use-firefox-compat.js.map +1 -0
- package/build/components/rich-text/use-input-rules.js +34 -2
- package/build/components/rich-text/use-input-rules.js.map +1 -1
- package/build/components/skip-to-selected-block/index.js +4 -0
- package/build/components/skip-to-selected-block/index.js.map +1 -1
- package/build/components/url-popover/image-url-input-ui.js +11 -27
- package/build/components/url-popover/image-url-input-ui.js.map +1 -1
- package/build/components/writing-flow/index.js +9 -1
- package/build/components/writing-flow/index.js.map +1 -1
- package/build/components/writing-flow/use-arrow-nav.js +3 -44
- package/build/components/writing-flow/use-arrow-nav.js.map +1 -1
- package/build/components/writing-flow/use-click-selection.js +68 -0
- package/build/components/writing-flow/use-click-selection.js.map +1 -0
- package/build/components/writing-flow/use-drag-selection.js +134 -0
- package/build/components/writing-flow/use-drag-selection.js.map +1 -0
- package/build/components/writing-flow/use-input.js +116 -0
- package/build/components/writing-flow/use-input.js.map +1 -0
- package/build/components/writing-flow/use-multi-selection.js +18 -38
- package/build/components/writing-flow/use-multi-selection.js.map +1 -1
- package/build/components/writing-flow/use-selection-observer.js +161 -0
- package/build/components/writing-flow/use-selection-observer.js.map +1 -0
- package/build/components/writing-flow/use-tab-nav.js +1 -8
- package/build/components/writing-flow/use-tab-nav.js.map +1 -1
- package/build/hooks/anchor.js +7 -6
- package/build/hooks/anchor.js.map +1 -1
- package/build/hooks/border-color.js +3 -3
- package/build/hooks/border-color.js.map +1 -1
- package/build/hooks/border.js +0 -14
- package/build/hooks/border.js.map +1 -1
- package/build/hooks/color.js +20 -17
- package/build/hooks/color.js.map +1 -1
- package/build/hooks/font-family.js +5 -1
- package/build/hooks/font-family.js.map +1 -1
- package/build/hooks/font-size.js +4 -2
- package/build/hooks/font-size.js.map +1 -1
- package/build/hooks/gap.js +77 -5
- package/build/hooks/gap.js.map +1 -1
- package/build/hooks/layout.js +7 -2
- package/build/hooks/layout.js.map +1 -1
- package/build/hooks/style.js +34 -3
- package/build/hooks/style.js.map +1 -1
- package/build/hooks/utils.js +29 -0
- package/build/hooks/utils.js.map +1 -1
- package/build/layouts/flex.js +82 -15
- package/build/layouts/flex.js.map +1 -1
- package/build/layouts/flow.js +22 -13
- package/build/layouts/flow.js.map +1 -1
- package/build/store/actions.js +297 -51
- package/build/store/actions.js.map +1 -1
- package/build/store/defaults.js +5 -1
- package/build/store/defaults.js.map +1 -1
- package/build/store/reducer.js +25 -13
- package/build/store/reducer.js.map +1 -1
- package/build/store/selectors.js +197 -23
- package/build/store/selectors.js.map +1 -1
- package/build/utils/dom.js +2 -1
- package/build/utils/dom.js.map +1 -1
- package/build-module/components/alignment-control/index.js +12 -4
- package/build-module/components/alignment-control/index.js.map +1 -1
- package/build-module/components/block-alignment-control/index.js +12 -4
- package/build-module/components/block-alignment-control/index.js.map +1 -1
- package/build-module/components/block-content-overlay/index.js +13 -4
- package/build-module/components/block-content-overlay/index.js.map +1 -1
- package/build-module/components/block-draggable/index.js +2 -3
- package/build-module/components/block-draggable/index.js.map +1 -1
- package/build-module/components/block-icon/index.js +4 -0
- package/build-module/components/block-icon/index.js.map +1 -1
- package/build-module/components/block-inspector/index.js +6 -1
- package/build-module/components/block-inspector/index.js.map +1 -1
- package/build-module/components/block-list/block-html.js +5 -2
- package/build-module/components/block-list/block-html.js.map +1 -1
- package/build-module/components/block-list/block.js +5 -2
- package/build-module/components/block-list/block.js.map +1 -1
- package/build-module/components/block-list/use-block-props/index.js +1 -4
- package/build-module/components/block-list/use-block-props/index.js.map +1 -1
- package/build-module/components/block-list/use-block-props/use-focus-first-element.js +22 -6
- package/build-module/components/block-list/use-block-props/use-focus-first-element.js.map +1 -1
- package/build-module/components/block-list/use-block-props/use-focus-handler.js +7 -1
- package/build-module/components/block-list/use-block-props/use-focus-handler.js.map +1 -1
- package/build-module/components/block-list-appender/index.js +6 -1
- package/build-module/components/block-list-appender/index.js.map +1 -1
- package/build-module/components/block-lock/index.js +5 -0
- package/build-module/components/block-lock/index.js.map +1 -0
- package/build-module/components/block-lock/menu-item.js +39 -0
- package/build-module/components/block-lock/menu-item.js.map +1 -0
- package/build-module/components/block-lock/modal.js +138 -0
- package/build-module/components/block-lock/modal.js.map +1 -0
- package/build-module/components/block-lock/toolbar.js +51 -0
- package/build-module/components/block-lock/toolbar.js.map +1 -0
- package/build-module/components/block-lock/use-block-lock.js +44 -0
- package/build-module/components/block-lock/use-block-lock.js.map +1 -0
- package/build-module/components/block-mover/index.js +4 -0
- package/build-module/components/block-mover/index.js.map +1 -1
- package/build-module/components/block-pattern-setup/index.js +39 -24
- package/build-module/components/block-pattern-setup/index.js.map +1 -1
- package/build-module/components/block-pattern-setup/setup-toolbar.js +1 -1
- package/build-module/components/block-pattern-setup/setup-toolbar.js.map +1 -1
- package/build-module/components/block-preview/auto.js +6 -3
- package/build-module/components/block-preview/auto.js.map +1 -1
- package/build-module/components/block-preview/index.js +4 -2
- package/build-module/components/block-preview/index.js.map +1 -1
- package/build-module/components/block-settings-menu/block-settings-dropdown.js +75 -12
- package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
- package/build-module/components/block-settings-menu-controls/index.js +18 -9
- package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
- package/build-module/components/block-switcher/index.js +9 -4
- package/build-module/components/block-switcher/index.js.map +1 -1
- package/build-module/components/block-title/index.js +2 -2
- package/build-module/components/block-title/index.js.map +1 -1
- package/build-module/components/block-title/use-block-display-title.js +8 -6
- package/build-module/components/block-title/use-block-display-title.js.map +1 -1
- package/build-module/components/block-toolbar/block-name-context.js +9 -0
- package/build-module/components/block-toolbar/block-name-context.js.map +1 -0
- package/build-module/components/block-toolbar/block-toolbar-last-item.js +11 -0
- package/build-module/components/block-toolbar/block-toolbar-last-item.js.map +1 -0
- package/build-module/components/block-toolbar/index.js +19 -4
- package/build-module/components/block-toolbar/index.js.map +1 -1
- package/build-module/components/block-tools/index.js +0 -16
- package/build-module/components/block-tools/index.js.map +1 -1
- package/build-module/components/block-variation-transforms/index.js +95 -49
- package/build-module/components/block-variation-transforms/index.js.map +1 -1
- package/build-module/components/block-vertical-alignment-control/index.js +12 -4
- package/build-module/components/block-vertical-alignment-control/index.js.map +1 -1
- package/build-module/components/border-radius-control/index.js +0 -1
- package/build-module/components/border-radius-control/index.js.map +1 -1
- package/build-module/components/border-radius-control/utils.js +1 -1
- package/build-module/components/border-radius-control/utils.js.map +1 -1
- package/build-module/components/colors-gradients/control.js +3 -1
- package/build-module/components/colors-gradients/control.js.map +1 -1
- package/build-module/components/contrast-checker/index.js +4 -0
- package/build-module/components/contrast-checker/index.js.map +1 -1
- package/build-module/components/convert-to-group-buttons/index.js +2 -1
- package/build-module/components/convert-to-group-buttons/index.js.map +1 -1
- package/build-module/components/convert-to-group-buttons/toolbar.js +90 -0
- package/build-module/components/convert-to-group-buttons/toolbar.js.map +1 -0
- package/build-module/components/copy-handler/index.js +4 -0
- package/build-module/components/copy-handler/index.js.map +1 -1
- package/build-module/components/date-format-picker/index.js +122 -0
- package/build-module/components/date-format-picker/index.js.map +1 -0
- package/build-module/components/font-sizes/font-size-picker.js +4 -0
- package/build-module/components/font-sizes/font-size-picker.js.map +1 -1
- package/build-module/components/iframe/index.js +6 -9
- package/build-module/components/iframe/index.js.map +1 -1
- package/build-module/components/index.js +3 -0
- package/build-module/components/index.js.map +1 -1
- package/build-module/components/justify-content-control/index.js +12 -4
- package/build-module/components/justify-content-control/index.js.map +1 -1
- package/build-module/components/keyboard-shortcuts/index.js +1 -1
- package/build-module/components/keyboard-shortcuts/index.js.map +1 -1
- package/build-module/components/line-height-control/index.js +14 -5
- package/build-module/components/line-height-control/index.js.map +1 -1
- package/build-module/components/list-view/block-select-button.js +19 -23
- package/build-module/components/list-view/block-select-button.js.map +1 -1
- package/build-module/components/list-view/block.js +36 -13
- package/build-module/components/list-view/block.js.map +1 -1
- package/build-module/components/list-view/branch.js +16 -13
- package/build-module/components/list-view/branch.js.map +1 -1
- package/build-module/components/list-view/index.js +7 -1
- package/build-module/components/list-view/index.js.map +1 -1
- package/build-module/components/list-view/use-block-selection.js +10 -3
- package/build-module/components/list-view/use-block-selection.js.map +1 -1
- package/build-module/components/media-replace-flow/index.js +4 -0
- package/build-module/components/media-replace-flow/index.js.map +1 -1
- package/build-module/components/multi-selection-inspector/index.js +2 -2
- package/build-module/components/multi-selection-inspector/index.js.map +1 -1
- package/build-module/components/rich-text/index.js +26 -5
- package/build-module/components/rich-text/index.js.map +1 -1
- package/build-module/components/rich-text/index.native.js +13 -9
- package/build-module/components/rich-text/index.native.js.map +1 -1
- package/build-module/components/rich-text/split-value.js +12 -2
- package/build-module/components/rich-text/split-value.js.map +1 -1
- package/build-module/components/rich-text/use-firefox-compat.js +39 -0
- package/build-module/components/rich-text/use-firefox-compat.js.map +1 -0
- package/build-module/components/rich-text/use-input-rules.js +35 -4
- package/build-module/components/rich-text/use-input-rules.js.map +1 -1
- package/build-module/components/skip-to-selected-block/index.js +4 -0
- package/build-module/components/skip-to-selected-block/index.js.map +1 -1
- package/build-module/components/url-popover/image-url-input-ui.js +12 -28
- package/build-module/components/url-popover/image-url-input-ui.js.map +1 -1
- package/build-module/components/writing-flow/index.js +5 -1
- package/build-module/components/writing-flow/index.js.map +1 -1
- package/build-module/components/writing-flow/use-arrow-nav.js +4 -45
- package/build-module/components/writing-flow/use-arrow-nav.js.map +1 -1
- package/build-module/components/writing-flow/use-click-selection.js +57 -0
- package/build-module/components/writing-flow/use-click-selection.js.map +1 -0
- package/build-module/components/writing-flow/use-drag-selection.js +124 -0
- package/build-module/components/writing-flow/use-drag-selection.js.map +1 -0
- package/build-module/components/writing-flow/use-input.js +104 -0
- package/build-module/components/writing-flow/use-input.js.map +1 -0
- package/build-module/components/writing-flow/use-multi-selection.js +18 -37
- package/build-module/components/writing-flow/use-multi-selection.js.map +1 -1
- package/build-module/components/writing-flow/use-selection-observer.js +150 -0
- package/build-module/components/writing-flow/use-selection-observer.js.map +1 -0
- package/build-module/components/writing-flow/use-tab-nav.js +1 -9
- package/build-module/components/writing-flow/use-tab-nav.js.map +1 -1
- package/build-module/hooks/anchor.js +7 -6
- package/build-module/hooks/anchor.js.map +1 -1
- package/build-module/hooks/border-color.js +5 -5
- package/build-module/hooks/border-color.js.map +1 -1
- package/build-module/hooks/border.js +0 -12
- package/build-module/hooks/border.js.map +1 -1
- package/build-module/hooks/color.js +19 -18
- package/build-module/hooks/color.js.map +1 -1
- package/build-module/hooks/font-family.js +3 -1
- package/build-module/hooks/font-family.js.map +1 -1
- package/build-module/hooks/font-size.js +4 -3
- package/build-module/hooks/font-size.js.map +1 -1
- package/build-module/hooks/gap.js +75 -7
- package/build-module/hooks/gap.js.map +1 -1
- package/build-module/hooks/layout.js +7 -2
- package/build-module/hooks/layout.js.map +1 -1
- package/build-module/hooks/style.js +33 -3
- package/build-module/hooks/style.js.map +1 -1
- package/build-module/hooks/utils.js +26 -0
- package/build-module/hooks/utils.js.map +1 -1
- package/build-module/layouts/flex.js +81 -16
- package/build-module/layouts/flex.js.map +1 -1
- package/build-module/layouts/flow.js +20 -13
- package/build-module/layouts/flow.js.map +1 -1
- package/build-module/store/actions.js +286 -49
- package/build-module/store/actions.js.map +1 -1
- package/build-module/store/defaults.js +5 -1
- package/build-module/store/defaults.js.map +1 -1
- package/build-module/store/reducer.js +25 -13
- package/build-module/store/reducer.js.map +1 -1
- package/build-module/store/selectors.js +186 -22
- package/build-module/store/selectors.js.map +1 -1
- package/build-module/utils/dom.js +2 -1
- package/build-module/utils/dom.js.map +1 -1
- package/build-style/style-rtl.css +248 -49
- package/build-style/style.css +248 -49
- package/build-types/utils/dom.d.ts.map +1 -1
- package/package.json +28 -27
- package/src/components/alignment-control/index.js +9 -4
- package/src/components/block-alignment-control/index.js +9 -4
- package/src/components/block-content-overlay/index.js +19 -2
- package/src/components/block-draggable/index.js +2 -5
- package/src/components/block-icon/index.js +3 -0
- package/src/components/block-inspector/index.js +4 -0
- package/src/components/block-list/block-html.js +8 -4
- package/src/components/block-list/block.js +5 -1
- package/src/components/block-list/style.scss +4 -5
- package/src/components/block-list/use-block-props/index.js +0 -5
- package/src/components/block-list/use-block-props/use-focus-first-element.js +27 -6
- package/src/components/block-list/use-block-props/use-focus-handler.js +8 -0
- package/src/components/block-list-appender/index.js +5 -0
- package/src/components/block-lock/index.js +4 -0
- package/src/components/block-lock/menu-item.js +39 -0
- package/src/components/block-lock/modal.js +194 -0
- package/src/components/block-lock/style.scss +70 -0
- package/src/components/block-lock/toolbar.js +51 -0
- package/src/components/block-lock/use-block-lock.js +49 -0
- package/src/components/block-mover/index.js +3 -0
- package/src/components/block-mover/style.scss +4 -0
- package/src/components/block-pattern-setup/index.js +84 -59
- package/src/components/block-pattern-setup/setup-toolbar.js +3 -1
- package/src/components/block-pattern-setup/style.scss +32 -26
- package/src/components/block-preview/auto.js +10 -1
- package/src/components/block-preview/index.js +2 -0
- package/src/components/block-settings-menu/block-settings-dropdown.js +109 -9
- package/src/components/block-settings-menu-controls/index.js +33 -12
- package/src/components/block-switcher/index.js +15 -3
- package/src/components/block-switcher/style.scss +15 -4
- package/src/components/block-switcher/test/__snapshots__/index.js.snap +15 -13
- package/src/components/block-switcher/test/index.js +2 -2
- package/src/components/block-title/README.md +6 -1
- package/src/components/block-title/index.js +2 -2
- package/src/components/block-title/test/index.js +43 -1
- package/src/components/block-title/use-block-display-title.js +10 -7
- package/src/components/block-toolbar/block-name-context.js +8 -0
- package/src/components/block-toolbar/block-toolbar-last-item.js +12 -0
- package/src/components/block-toolbar/index.js +24 -2
- package/src/components/block-toolbar/style.scss +10 -0
- package/src/components/block-tools/index.js +0 -19
- package/src/components/block-tools/style.scss +27 -0
- package/src/components/block-variation-transforms/index.js +105 -36
- package/src/components/block-variation-transforms/style.scss +1 -1
- package/src/components/block-vertical-alignment-control/index.js +9 -4
- package/src/components/border-radius-control/index.js +0 -1
- package/src/components/border-radius-control/test/utils.js +4 -0
- package/src/components/border-radius-control/utils.js +2 -1
- package/src/components/button-block-appender/style.scss +5 -1
- package/src/components/color-palette/test/__snapshots__/control.js.snap +70 -4
- package/src/components/colors-gradients/control.js +1 -1
- package/src/components/colors-gradients/style.scss +6 -0
- package/src/components/contrast-checker/index.js +3 -0
- package/src/components/convert-to-group-buttons/index.js +6 -1
- package/src/components/convert-to-group-buttons/toolbar.js +87 -0
- package/src/components/copy-handler/index.js +3 -0
- package/src/components/date-format-picker/README.md +58 -0
- package/src/components/date-format-picker/index.js +161 -0
- package/src/components/date-format-picker/style.scss +31 -0
- package/src/components/font-sizes/font-size-picker.js +3 -0
- package/src/components/iframe/index.js +5 -7
- package/src/components/index.js +3 -0
- package/src/components/justify-content-control/index.js +9 -4
- package/src/components/keyboard-shortcuts/index.js +1 -1
- package/src/components/line-height-control/index.js +11 -6
- package/src/components/link-control/README.md +1 -1
- package/src/components/list-view/block-select-button.js +14 -31
- package/src/components/list-view/block.js +55 -13
- package/src/components/list-view/branch.js +37 -15
- package/src/components/list-view/index.js +6 -0
- package/src/components/list-view/style.scss +56 -14
- package/src/components/list-view/use-block-selection.js +15 -2
- package/src/components/media-placeholder/README.md +8 -0
- package/src/components/media-replace-flow/index.js +3 -0
- package/src/components/multi-selection-inspector/index.js +2 -2
- package/src/components/rich-text/index.js +25 -2
- package/src/components/rich-text/index.native.js +24 -8
- package/src/components/rich-text/split-value.js +5 -1
- package/src/components/rich-text/use-firefox-compat.js +39 -0
- package/src/components/rich-text/use-input-rules.js +40 -3
- package/src/components/skip-to-selected-block/index.js +3 -0
- package/src/components/url-input/style.scss +3 -2
- package/src/components/url-popover/image-url-input-ui.js +16 -29
- package/src/components/writing-flow/index.js +8 -0
- package/src/components/writing-flow/readme.md +28 -0
- package/src/components/writing-flow/use-arrow-nav.js +4 -53
- package/src/components/writing-flow/use-click-selection.js +65 -0
- package/src/components/writing-flow/use-drag-selection.js +126 -0
- package/src/components/writing-flow/use-input.js +112 -0
- package/src/components/writing-flow/use-multi-selection.js +13 -36
- package/src/components/writing-flow/use-selection-observer.js +153 -0
- package/src/components/writing-flow/use-tab-nav.js +1 -11
- package/src/hooks/anchor.js +8 -6
- package/src/hooks/border-color.js +5 -5
- package/src/hooks/border.js +0 -13
- package/src/hooks/color.js +51 -24
- package/src/hooks/font-family.js +5 -2
- package/src/hooks/font-size.js +10 -7
- package/src/hooks/gap.js +91 -12
- package/src/hooks/layout.js +11 -1
- package/src/hooks/style.js +40 -4
- package/src/hooks/test/gap.js +66 -0
- package/src/hooks/test/style.js +94 -0
- package/src/hooks/test/utils.js +1 -1
- package/src/hooks/utils.js +26 -0
- package/src/layouts/flex.js +93 -6
- package/src/layouts/flow.js +28 -12
- package/src/store/actions.js +349 -32
- package/src/store/defaults.js +7 -1
- package/src/store/reducer.js +25 -10
- package/src/store/selectors.js +229 -27
- package/src/store/test/selectors.js +305 -5
- package/src/style.scss +2 -0
- package/src/utils/dom.js +2 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/build/components/block-list/use-block-props/use-multi-selection.js +0 -205
- package/build/components/block-list/use-block-props/use-multi-selection.js.map +0 -1
- package/build/components/block-list/use-block-props/use-scroll-into-view.js +0 -77
- package/build/components/block-list/use-block-props/use-scroll-into-view.js.map +0 -1
- package/build-module/components/block-list/use-block-props/use-multi-selection.js +0 -192
- package/build-module/components/block-list/use-block-props/use-multi-selection.js.map +0 -1
- package/build-module/components/block-list/use-block-props/use-scroll-into-view.js +0 -63
- package/build-module/components/block-list/use-block-props/use-scroll-into-view.js.map +0 -1
- package/src/components/block-list/use-block-props/use-multi-selection.js +0 -227
- package/src/components/block-list/use-block-props/use-scroll-into-view.js +0 -73
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { useSelect } from '@wordpress/data';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Internal dependencies
|
|
8
|
+
*/
|
|
9
|
+
import { store as blockEditorStore } from '../../store';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Return details about the block lock status.
|
|
13
|
+
*
|
|
14
|
+
* @param {string} clientId The block client Id.
|
|
15
|
+
* @param {boolean} checkParent Optional. The status is derived from the parent `templateLock`
|
|
16
|
+
* when the current block's lock state isn't defined.
|
|
17
|
+
*
|
|
18
|
+
* @return {Object} Block lock status
|
|
19
|
+
*/
|
|
20
|
+
export default function useBlockLock( clientId, checkParent = false ) {
|
|
21
|
+
return useSelect(
|
|
22
|
+
( select ) => {
|
|
23
|
+
const {
|
|
24
|
+
canEditBlock,
|
|
25
|
+
canMoveBlock,
|
|
26
|
+
canRemoveBlock,
|
|
27
|
+
canLockBlockType,
|
|
28
|
+
getBlockName,
|
|
29
|
+
getBlockRootClientId,
|
|
30
|
+
} = select( blockEditorStore );
|
|
31
|
+
const rootClientId = checkParent
|
|
32
|
+
? getBlockRootClientId( clientId )
|
|
33
|
+
: null;
|
|
34
|
+
|
|
35
|
+
const canEdit = canEditBlock( clientId );
|
|
36
|
+
const canMove = canMoveBlock( clientId, rootClientId );
|
|
37
|
+
const canRemove = canRemoveBlock( clientId, rootClientId );
|
|
38
|
+
|
|
39
|
+
return {
|
|
40
|
+
canEdit,
|
|
41
|
+
canMove,
|
|
42
|
+
canRemove,
|
|
43
|
+
canLock: canLockBlockType( getBlockName( clientId ) ),
|
|
44
|
+
isLocked: ! canEdit || ! canMove || ! canRemove,
|
|
45
|
+
};
|
|
46
|
+
},
|
|
47
|
+
[ clientId, checkParent ]
|
|
48
|
+
);
|
|
49
|
+
}
|
|
@@ -22,6 +22,10 @@
|
|
|
22
22
|
@include break-small() {
|
|
23
23
|
flex-direction: column;
|
|
24
24
|
}
|
|
25
|
+
|
|
26
|
+
// @todo: override toolbar group inherited paddings from components/block-tools/style.scss.
|
|
27
|
+
// This is best fixed by making the mover control area a proper single toolbar group.
|
|
28
|
+
padding: 0;
|
|
25
29
|
}
|
|
26
30
|
|
|
27
31
|
&.is-horizontal .block-editor-block-mover__move-button-container,
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
} from '@wordpress/components';
|
|
12
12
|
|
|
13
13
|
import { useState } from '@wordpress/element';
|
|
14
|
-
import { useInstanceId } from '@wordpress/compose';
|
|
14
|
+
import { useInstanceId, useResizeObserver } from '@wordpress/compose';
|
|
15
15
|
import { __ } from '@wordpress/i18n';
|
|
16
16
|
|
|
17
17
|
/**
|
|
@@ -28,6 +28,7 @@ const SetupContent = ( {
|
|
|
28
28
|
activeSlide,
|
|
29
29
|
patterns,
|
|
30
30
|
onBlockPatternSelect,
|
|
31
|
+
height,
|
|
31
32
|
} ) => {
|
|
32
33
|
const composite = useCompositeState();
|
|
33
34
|
const containerClass = 'block-editor-block-pattern-setup__container';
|
|
@@ -38,41 +39,52 @@ const SetupContent = ( {
|
|
|
38
39
|
[ activeSlide + 1, 'next-slide' ],
|
|
39
40
|
] );
|
|
40
41
|
return (
|
|
41
|
-
<div
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
42
|
+
<div
|
|
43
|
+
className="block-editor-block-pattern-setup__carousel"
|
|
44
|
+
style={ { height } }
|
|
45
|
+
>
|
|
46
|
+
<div className={ containerClass }>
|
|
47
|
+
<ul className="carousel-container">
|
|
48
|
+
{ patterns.map( ( pattern, index ) => (
|
|
49
|
+
<BlockPatternSlide
|
|
50
|
+
className={ slideClass.get( index ) || '' }
|
|
51
|
+
key={ pattern.name }
|
|
52
|
+
pattern={ pattern }
|
|
53
|
+
minHeight={ height }
|
|
54
|
+
/>
|
|
55
|
+
) ) }
|
|
56
|
+
</ul>
|
|
57
|
+
</div>
|
|
51
58
|
</div>
|
|
52
59
|
);
|
|
53
60
|
}
|
|
54
61
|
return (
|
|
55
|
-
<
|
|
56
|
-
{
|
|
57
|
-
|
|
58
|
-
className={ containerClass }
|
|
59
|
-
aria-label={ __( 'Patterns list' ) }
|
|
62
|
+
<div
|
|
63
|
+
style={ { height } }
|
|
64
|
+
className="block-editor-block-pattern-setup__grid"
|
|
60
65
|
>
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
66
|
+
<Composite
|
|
67
|
+
{ ...composite }
|
|
68
|
+
role="listbox"
|
|
69
|
+
className={ containerClass }
|
|
70
|
+
aria-label={ __( 'Patterns list' ) }
|
|
71
|
+
>
|
|
72
|
+
{ patterns.map( ( pattern ) => (
|
|
73
|
+
<BlockPattern
|
|
74
|
+
key={ pattern.name }
|
|
75
|
+
pattern={ pattern }
|
|
76
|
+
onSelect={ onBlockPatternSelect }
|
|
77
|
+
composite={ composite }
|
|
78
|
+
/>
|
|
79
|
+
) ) }
|
|
80
|
+
</Composite>
|
|
81
|
+
</div>
|
|
70
82
|
);
|
|
71
83
|
};
|
|
72
84
|
|
|
73
85
|
function BlockPattern( { pattern, onSelect, composite } ) {
|
|
74
86
|
const baseClassName = 'block-editor-block-pattern-setup-list';
|
|
75
|
-
const { blocks,
|
|
87
|
+
const { blocks, description, viewportWidth = 700 } = pattern;
|
|
76
88
|
const descriptionId = useInstanceId(
|
|
77
89
|
BlockPattern,
|
|
78
90
|
`${ baseClassName }__item-description`
|
|
@@ -94,9 +106,6 @@ function BlockPattern( { pattern, onSelect, composite } ) {
|
|
|
94
106
|
blocks={ blocks }
|
|
95
107
|
viewportWidth={ viewportWidth }
|
|
96
108
|
/>
|
|
97
|
-
<div className={ `${ baseClassName }__item-title` }>
|
|
98
|
-
{ title }
|
|
99
|
-
</div>
|
|
100
109
|
</CompositeItem>
|
|
101
110
|
{ !! description && (
|
|
102
111
|
<VisuallyHidden id={ descriptionId }>
|
|
@@ -107,7 +116,7 @@ function BlockPattern( { pattern, onSelect, composite } ) {
|
|
|
107
116
|
);
|
|
108
117
|
}
|
|
109
118
|
|
|
110
|
-
function BlockPatternSlide( { className, pattern } ) {
|
|
119
|
+
function BlockPatternSlide( { className, pattern, minHeight } ) {
|
|
111
120
|
const { blocks, title, description } = pattern;
|
|
112
121
|
const descriptionId = useInstanceId(
|
|
113
122
|
BlockPatternSlide,
|
|
@@ -119,7 +128,10 @@ function BlockPatternSlide( { className, pattern } ) {
|
|
|
119
128
|
aria-label={ title }
|
|
120
129
|
aria-describedby={ description ? descriptionId : undefined }
|
|
121
130
|
>
|
|
122
|
-
<BlockPreview
|
|
131
|
+
<BlockPreview
|
|
132
|
+
blocks={ blocks }
|
|
133
|
+
__experimentalMinHeight={ minHeight }
|
|
134
|
+
/>
|
|
123
135
|
{ !! description && (
|
|
124
136
|
<VisuallyHidden id={ descriptionId }>
|
|
125
137
|
{ description }
|
|
@@ -141,6 +153,10 @@ const BlockPatternSetup = ( {
|
|
|
141
153
|
const [ showBlank, setShowBlank ] = useState( false );
|
|
142
154
|
const { replaceBlock } = useDispatch( blockEditorStore );
|
|
143
155
|
const patterns = usePatternsSetup( clientId, blockName, filterPatternsFn );
|
|
156
|
+
const [
|
|
157
|
+
contentResizeListener,
|
|
158
|
+
{ height: contentHeight },
|
|
159
|
+
] = useResizeObserver();
|
|
144
160
|
|
|
145
161
|
if ( ! patterns?.length || showBlank ) {
|
|
146
162
|
return startBlankComponent;
|
|
@@ -152,35 +168,44 @@ const BlockPatternSetup = ( {
|
|
|
152
168
|
};
|
|
153
169
|
const onPatternSelectCallback =
|
|
154
170
|
onBlockPatternSelect || onBlockPatternSelectDefault;
|
|
171
|
+
const onStartBlank = startBlankComponent
|
|
172
|
+
? () => {
|
|
173
|
+
setShowBlank( true );
|
|
174
|
+
}
|
|
175
|
+
: undefined;
|
|
155
176
|
return (
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
177
|
+
<>
|
|
178
|
+
{ contentResizeListener }
|
|
179
|
+
<div
|
|
180
|
+
className={ `block-editor-block-pattern-setup view-mode-${ viewMode }` }
|
|
181
|
+
>
|
|
182
|
+
<SetupContent
|
|
183
|
+
viewMode={ viewMode }
|
|
184
|
+
activeSlide={ activeSlide }
|
|
185
|
+
patterns={ patterns }
|
|
186
|
+
onBlockPatternSelect={ onPatternSelectCallback }
|
|
187
|
+
height={ contentHeight - 2 * 60 }
|
|
188
|
+
/>
|
|
189
|
+
<SetupToolbar
|
|
190
|
+
viewMode={ viewMode }
|
|
191
|
+
setViewMode={ setViewMode }
|
|
192
|
+
activeSlide={ activeSlide }
|
|
193
|
+
totalSlides={ patterns.length }
|
|
194
|
+
handleNext={ () => {
|
|
195
|
+
setActiveSlide( ( active ) => active + 1 );
|
|
196
|
+
} }
|
|
197
|
+
handlePrevious={ () => {
|
|
198
|
+
setActiveSlide( ( active ) => active - 1 );
|
|
199
|
+
} }
|
|
200
|
+
onBlockPatternSelect={ () => {
|
|
201
|
+
onPatternSelectCallback(
|
|
202
|
+
patterns[ activeSlide ].blocks
|
|
203
|
+
);
|
|
204
|
+
} }
|
|
205
|
+
onStartBlank={ onStartBlank }
|
|
206
|
+
/>
|
|
207
|
+
</div>
|
|
208
|
+
</>
|
|
184
209
|
);
|
|
185
210
|
};
|
|
186
211
|
|
|
@@ -17,7 +17,9 @@ import { VIEWMODES } from './constants';
|
|
|
17
17
|
|
|
18
18
|
const Actions = ( { onStartBlank, onBlockPatternSelect } ) => (
|
|
19
19
|
<div className="block-editor-block-pattern-setup__actions">
|
|
20
|
-
|
|
20
|
+
{ onStartBlank && (
|
|
21
|
+
<Button onClick={ onStartBlank }>{ __( 'Start blank' ) }</Button>
|
|
22
|
+
) }
|
|
21
23
|
<Button variant="primary" onClick={ onBlockPatternSelect }>
|
|
22
24
|
{ __( 'Choose' ) }
|
|
23
25
|
</Button>
|
|
@@ -5,8 +5,6 @@
|
|
|
5
5
|
align-items: flex-start;
|
|
6
6
|
width: 100%;
|
|
7
7
|
border-radius: $radius-block-ui;
|
|
8
|
-
box-shadow: inset 0 0 0 $border-width $gray-900;
|
|
9
|
-
outline: 1px solid transparent; // Shown for Windows 10 High Contrast mode.
|
|
10
8
|
|
|
11
9
|
// TODO change to check parent.
|
|
12
10
|
&.view-mode-grid {
|
|
@@ -15,37 +13,41 @@
|
|
|
15
13
|
}
|
|
16
14
|
|
|
17
15
|
.block-editor-block-pattern-setup__container {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
padding: $grid-unit-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
16
|
+
column-gap: $grid-unit-30;
|
|
17
|
+
display: block;
|
|
18
|
+
width: 100%;
|
|
19
|
+
padding: $grid-unit-40;
|
|
20
|
+
column-count: 2;
|
|
21
|
+
|
|
22
|
+
@include break-huge() {
|
|
23
|
+
column-count: 3;
|
|
24
|
+
}
|
|
27
25
|
|
|
28
26
|
.block-editor-block-preview__container,
|
|
29
27
|
div[role="button"] {
|
|
30
28
|
cursor: pointer;
|
|
31
29
|
}
|
|
32
30
|
|
|
33
|
-
.block-editor-block-pattern-setup-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
31
|
+
.block-editor-block-pattern-setup-list__list-item {
|
|
32
|
+
break-inside: avoid-column;
|
|
33
|
+
margin-bottom: $grid-unit-30;
|
|
34
|
+
|
|
35
|
+
.block-editor-block-preview__container {
|
|
36
|
+
min-height: 100px;
|
|
37
|
+
border-radius: $radius-block-ui;
|
|
38
|
+
border: $border-width solid $gray-300;
|
|
39
|
+
}
|
|
38
40
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
41
|
+
.block-editor-block-preview__content {
|
|
42
|
+
width: 100%;
|
|
43
|
+
}
|
|
42
44
|
}
|
|
43
45
|
}
|
|
44
46
|
}
|
|
45
47
|
|
|
46
48
|
.block-editor-block-pattern-setup__toolbar {
|
|
49
|
+
height: $header-height;
|
|
47
50
|
box-sizing: border-box;
|
|
48
|
-
position: relative;
|
|
49
51
|
padding: $grid-unit-20;
|
|
50
52
|
width: 100%;
|
|
51
53
|
text-align: left;
|
|
@@ -54,13 +56,12 @@
|
|
|
54
56
|
// Block UI appearance.
|
|
55
57
|
border-radius: $radius-block-ui $radius-block-ui 0 0;
|
|
56
58
|
background-color: $white;
|
|
57
|
-
box-shadow: inset 0 0 0 $border-width $gray-900;
|
|
58
|
-
outline: 1px solid transparent; // Shown for Windows 10 High Contrast mode.
|
|
59
|
-
|
|
60
59
|
display: flex;
|
|
61
60
|
flex-direction: row;
|
|
62
61
|
align-items: center;
|
|
63
62
|
justify-content: space-between;
|
|
63
|
+
border-top: 1px solid $gray-300;
|
|
64
|
+
align-self: flex-end;
|
|
64
65
|
|
|
65
66
|
.block-editor-block-pattern-setup__display-controls {
|
|
66
67
|
display: flex;
|
|
@@ -93,13 +94,12 @@
|
|
|
93
94
|
box-sizing: border-box;
|
|
94
95
|
}
|
|
95
96
|
.pattern-slide {
|
|
96
|
-
opacity: 0;
|
|
97
97
|
position: absolute;
|
|
98
98
|
top: 0;
|
|
99
99
|
width: 100%;
|
|
100
100
|
margin: auto;
|
|
101
|
-
padding:
|
|
102
|
-
transition: transform 0.5s,
|
|
101
|
+
padding: 0;
|
|
102
|
+
transition: transform 0.5s, z-index 0.5s;
|
|
103
103
|
z-index: z-index(".block-editor-block-pattern-setup .pattern-slide");
|
|
104
104
|
|
|
105
105
|
&.active-slide {
|
|
@@ -125,3 +125,9 @@
|
|
|
125
125
|
}
|
|
126
126
|
}
|
|
127
127
|
}
|
|
128
|
+
|
|
129
|
+
.block-editor-block-pattern-setup__carousel,
|
|
130
|
+
.block-editor-block-pattern-setup__grid {
|
|
131
|
+
width: 100%;
|
|
132
|
+
overflow-y: auto;
|
|
133
|
+
}
|
|
@@ -19,7 +19,11 @@ let MemoizedBlockList;
|
|
|
19
19
|
|
|
20
20
|
const MAX_HEIGHT = 2000;
|
|
21
21
|
|
|
22
|
-
function AutoBlockPreview( {
|
|
22
|
+
function AutoBlockPreview( {
|
|
23
|
+
viewportWidth,
|
|
24
|
+
__experimentalPadding,
|
|
25
|
+
__experimentalMinHeight,
|
|
26
|
+
} ) {
|
|
23
27
|
const [
|
|
24
28
|
containerResizeListener,
|
|
25
29
|
{ width: containerWidth },
|
|
@@ -68,6 +72,7 @@ function AutoBlockPreview( { viewportWidth, __experimentalPadding } ) {
|
|
|
68
72
|
contentHeight > MAX_HEIGHT
|
|
69
73
|
? MAX_HEIGHT * scale
|
|
70
74
|
: undefined,
|
|
75
|
+
minHeight: __experimentalMinHeight,
|
|
71
76
|
} }
|
|
72
77
|
>
|
|
73
78
|
<Iframe
|
|
@@ -98,6 +103,10 @@ function AutoBlockPreview( { viewportWidth, __experimentalPadding } ) {
|
|
|
98
103
|
// This is a catch-all max-height for patterns.
|
|
99
104
|
// See: https://github.com/WordPress/gutenberg/pull/38175.
|
|
100
105
|
maxHeight: MAX_HEIGHT,
|
|
106
|
+
minHeight:
|
|
107
|
+
scale < 1 && __experimentalMinHeight
|
|
108
|
+
? __experimentalMinHeight / scale
|
|
109
|
+
: __experimentalMinHeight,
|
|
101
110
|
} }
|
|
102
111
|
>
|
|
103
112
|
{ contentResizeListener }
|
|
@@ -29,6 +29,7 @@ export function BlockPreview( {
|
|
|
29
29
|
viewportWidth = 1200,
|
|
30
30
|
__experimentalLive = false,
|
|
31
31
|
__experimentalOnClick,
|
|
32
|
+
__experimentalMinHeight,
|
|
32
33
|
} ) {
|
|
33
34
|
const originalSettings = useSelect(
|
|
34
35
|
( select ) => select( blockEditorStore ).getSettings(),
|
|
@@ -51,6 +52,7 @@ export function BlockPreview( {
|
|
|
51
52
|
<AutoHeightBlockPreview
|
|
52
53
|
viewportWidth={ viewportWidth }
|
|
53
54
|
__experimentalPadding={ __experimentalPadding }
|
|
55
|
+
__experimentalMinHeight={ __experimentalMinHeight }
|
|
54
56
|
/>
|
|
55
57
|
) }
|
|
56
58
|
</BlockEditorProvider>
|
|
@@ -6,12 +6,17 @@ import { castArray, flow, noop } from 'lodash';
|
|
|
6
6
|
/**
|
|
7
7
|
* WordPress dependencies
|
|
8
8
|
*/
|
|
9
|
-
import {
|
|
9
|
+
import { getBlockType, serialize } from '@wordpress/blocks';
|
|
10
10
|
import { DropdownMenu, MenuGroup, MenuItem } from '@wordpress/components';
|
|
11
|
-
import { useSelect } from '@wordpress/data';
|
|
11
|
+
import { useDispatch, useSelect } from '@wordpress/data';
|
|
12
12
|
import { moreVertical } from '@wordpress/icons';
|
|
13
|
-
import {
|
|
14
|
-
|
|
13
|
+
import {
|
|
14
|
+
Children,
|
|
15
|
+
cloneElement,
|
|
16
|
+
useCallback,
|
|
17
|
+
useRef,
|
|
18
|
+
} from '@wordpress/element';
|
|
19
|
+
import { __, sprintf } from '@wordpress/i18n';
|
|
15
20
|
import { store as keyboardShortcutsStore } from '@wordpress/keyboard-shortcuts';
|
|
16
21
|
import { useCopyToClipboard } from '@wordpress/compose';
|
|
17
22
|
|
|
@@ -19,12 +24,14 @@ import { useCopyToClipboard } from '@wordpress/compose';
|
|
|
19
24
|
* Internal dependencies
|
|
20
25
|
*/
|
|
21
26
|
import BlockActions from '../block-actions';
|
|
27
|
+
import BlockIcon from '../block-icon';
|
|
22
28
|
import BlockModeToggle from './block-mode-toggle';
|
|
23
29
|
import BlockHTMLConvertButton from './block-html-convert-button';
|
|
24
30
|
import __unstableBlockSettingsMenuFirstItem from './block-settings-menu-first-item';
|
|
25
31
|
import BlockSettingsMenuControls from '../block-settings-menu-controls';
|
|
26
32
|
import { store as blockEditorStore } from '../../store';
|
|
27
33
|
import useBlockDisplayTitle from '../block-title/use-block-display-title';
|
|
34
|
+
import { useShowMoversGestures } from '../block-toolbar/utils';
|
|
28
35
|
|
|
29
36
|
const POPOVER_PROPS = {
|
|
30
37
|
className: 'block-editor-block-settings-menu__popover',
|
|
@@ -46,11 +53,40 @@ export function BlockSettingsDropdown( {
|
|
|
46
53
|
const blockClientIds = castArray( clientIds );
|
|
47
54
|
const count = blockClientIds.length;
|
|
48
55
|
const firstBlockClientId = blockClientIds[ 0 ];
|
|
49
|
-
const {
|
|
56
|
+
const {
|
|
57
|
+
firstParentClientId,
|
|
58
|
+
hasReducedUI,
|
|
59
|
+
onlyBlock,
|
|
60
|
+
parentBlockType,
|
|
61
|
+
previousBlockClientId,
|
|
62
|
+
nextBlockClientId,
|
|
63
|
+
selectedBlockClientIds,
|
|
64
|
+
} = useSelect(
|
|
50
65
|
( select ) => {
|
|
51
|
-
const {
|
|
66
|
+
const {
|
|
67
|
+
getBlockCount,
|
|
68
|
+
getBlockName,
|
|
69
|
+
getBlockParents,
|
|
70
|
+
getPreviousBlockClientId,
|
|
71
|
+
getNextBlockClientId,
|
|
72
|
+
getSelectedBlockClientIds,
|
|
73
|
+
getSettings,
|
|
74
|
+
} = select( blockEditorStore );
|
|
75
|
+
|
|
76
|
+
const parents = getBlockParents( firstBlockClientId );
|
|
77
|
+
const _firstParentClientId = parents[ parents.length - 1 ];
|
|
78
|
+
const parentBlockName = getBlockName( _firstParentClientId );
|
|
79
|
+
|
|
52
80
|
return {
|
|
81
|
+
firstParentClientId: _firstParentClientId,
|
|
82
|
+
hasReducedUI: getSettings().hasReducedUI,
|
|
53
83
|
onlyBlock: 1 === getBlockCount(),
|
|
84
|
+
parentBlockType: getBlockType( parentBlockName ),
|
|
85
|
+
previousBlockClientId: getPreviousBlockClientId(
|
|
86
|
+
firstBlockClientId
|
|
87
|
+
),
|
|
88
|
+
nextBlockClientId: getNextBlockClientId( firstBlockClientId ),
|
|
89
|
+
selectedBlockClientIds: getSelectedBlockClientIds(),
|
|
54
90
|
};
|
|
55
91
|
},
|
|
56
92
|
[ firstBlockClientId ]
|
|
@@ -72,7 +108,11 @@ export function BlockSettingsDropdown( {
|
|
|
72
108
|
};
|
|
73
109
|
}, [] );
|
|
74
110
|
|
|
75
|
-
const
|
|
111
|
+
const { selectBlock, toggleBlockHighlight } = useDispatch(
|
|
112
|
+
blockEditorStore
|
|
113
|
+
);
|
|
114
|
+
|
|
115
|
+
const updateSelectionAfterDuplicate = useCallback(
|
|
76
116
|
__experimentalSelectBlock
|
|
77
117
|
? async ( clientIdsPromise ) => {
|
|
78
118
|
const ids = await clientIdsPromise;
|
|
@@ -86,6 +126,33 @@ export function BlockSettingsDropdown( {
|
|
|
86
126
|
|
|
87
127
|
const blockTitle = useBlockDisplayTitle( firstBlockClientId, 25 );
|
|
88
128
|
|
|
129
|
+
const updateSelectionAfterRemove = useCallback(
|
|
130
|
+
__experimentalSelectBlock
|
|
131
|
+
? () => {
|
|
132
|
+
const blockToSelect =
|
|
133
|
+
previousBlockClientId || nextBlockClientId;
|
|
134
|
+
|
|
135
|
+
if (
|
|
136
|
+
blockToSelect &&
|
|
137
|
+
// From the block options dropdown, it's possible to remove a block that is not selected,
|
|
138
|
+
// in this case, it's not necessary to update the selection since the selected block wasn't removed.
|
|
139
|
+
selectedBlockClientIds.includes( firstBlockClientId ) &&
|
|
140
|
+
// Don't update selection when next/prev block also is in the selection ( and gets removed ),
|
|
141
|
+
// In case someone selects all blocks and removes them at once.
|
|
142
|
+
! selectedBlockClientIds.includes( blockToSelect )
|
|
143
|
+
) {
|
|
144
|
+
__experimentalSelectBlock( blockToSelect );
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
: noop,
|
|
148
|
+
[
|
|
149
|
+
__experimentalSelectBlock,
|
|
150
|
+
previousBlockClientId,
|
|
151
|
+
nextBlockClientId,
|
|
152
|
+
selectedBlockClientIds,
|
|
153
|
+
]
|
|
154
|
+
);
|
|
155
|
+
|
|
89
156
|
const label = sprintf(
|
|
90
157
|
/* translators: %s: block name */
|
|
91
158
|
__( 'Remove %s' ),
|
|
@@ -93,6 +160,19 @@ export function BlockSettingsDropdown( {
|
|
|
93
160
|
);
|
|
94
161
|
const removeBlockLabel = count === 1 ? label : __( 'Remove blocks' );
|
|
95
162
|
|
|
163
|
+
// Allows highlighting the parent block outline when focusing or hovering
|
|
164
|
+
// the parent block selector within the child.
|
|
165
|
+
const selectParentButtonRef = useRef();
|
|
166
|
+
const { gestures: showParentOutlineGestures } = useShowMoversGestures( {
|
|
167
|
+
ref: selectParentButtonRef,
|
|
168
|
+
onChange( isFocused ) {
|
|
169
|
+
if ( isFocused && hasReducedUI ) {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
toggleBlockHighlight( firstParentClientId, isFocused );
|
|
173
|
+
},
|
|
174
|
+
} );
|
|
175
|
+
|
|
96
176
|
return (
|
|
97
177
|
<BlockActions
|
|
98
178
|
clientIds={ clientIds }
|
|
@@ -125,6 +205,26 @@ export function BlockSettingsDropdown( {
|
|
|
125
205
|
<__unstableBlockSettingsMenuFirstItem.Slot
|
|
126
206
|
fillProps={ { onClose } }
|
|
127
207
|
/>
|
|
208
|
+
{ firstParentClientId !== undefined && (
|
|
209
|
+
<MenuItem
|
|
210
|
+
{ ...showParentOutlineGestures }
|
|
211
|
+
ref={ selectParentButtonRef }
|
|
212
|
+
icon={
|
|
213
|
+
<BlockIcon
|
|
214
|
+
icon={ parentBlockType.icon }
|
|
215
|
+
/>
|
|
216
|
+
}
|
|
217
|
+
onClick={ () =>
|
|
218
|
+
selectBlock( firstParentClientId )
|
|
219
|
+
}
|
|
220
|
+
>
|
|
221
|
+
{ sprintf(
|
|
222
|
+
/* translators: %s: Name of the block's parent. */
|
|
223
|
+
__( 'Select parent block (%s)' ),
|
|
224
|
+
parentBlockType.title
|
|
225
|
+
) }
|
|
226
|
+
</MenuItem>
|
|
227
|
+
) }
|
|
128
228
|
{ count === 1 && (
|
|
129
229
|
<BlockHTMLConvertButton
|
|
130
230
|
clientId={ firstBlockClientId }
|
|
@@ -139,7 +239,7 @@ export function BlockSettingsDropdown( {
|
|
|
139
239
|
onClick={ flow(
|
|
140
240
|
onClose,
|
|
141
241
|
onDuplicate,
|
|
142
|
-
|
|
242
|
+
updateSelectionAfterDuplicate
|
|
143
243
|
) }
|
|
144
244
|
shortcut={ shortcuts.duplicate }
|
|
145
245
|
>
|
|
@@ -197,7 +297,7 @@ export function BlockSettingsDropdown( {
|
|
|
197
297
|
onClick={ flow(
|
|
198
298
|
onClose,
|
|
199
299
|
onRemove,
|
|
200
|
-
|
|
300
|
+
updateSelectionAfterRemove
|
|
201
301
|
) }
|
|
202
302
|
shortcut={ shortcuts.remove }
|
|
203
303
|
>
|