@wordpress/block-editor 9.4.0 → 9.7.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 +6 -0
- package/README.md +1 -8
- package/build/components/block-list/block-invalid-warning.native.js +54 -6
- package/build/components/block-list/block-invalid-warning.native.js.map +1 -1
- package/build/components/block-list/block.js +14 -4
- package/build/components/block-list/block.js.map +1 -1
- package/build/components/block-list/block.native.js +2 -1
- package/build/components/block-list/block.native.js.map +1 -1
- package/build/components/block-list/index.native.js +5 -4
- package/build/components/block-list/index.native.js.map +1 -1
- package/build/components/block-list/layout.js +20 -5
- package/build/components/block-list/layout.js.map +1 -1
- package/build/components/block-list/use-block-props/use-block-class-names.js +5 -2
- package/build/components/block-list/use-block-props/use-block-class-names.js.map +1 -1
- package/build/components/block-lock/modal.js +37 -7
- package/build/components/block-lock/modal.js.map +1 -1
- package/build/components/block-mobile-toolbar/block-actions-menu.native.js +1 -1
- package/build/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
- package/build/components/block-mover/mover-description.js +95 -32
- package/build/components/block-mover/mover-description.js.map +1 -1
- package/build/components/block-pattern-setup/index.js +5 -17
- package/build/components/block-pattern-setup/index.js.map +1 -1
- package/build/components/block-popover/inbetween.js +2 -2
- package/build/components/block-popover/inbetween.js.map +1 -1
- package/build/components/block-popover/index.js +1 -1
- package/build/components/block-popover/index.js.map +1 -1
- package/build/components/block-settings-menu/block-mode-toggle.js +1 -1
- package/build/components/block-settings-menu/block-mode-toggle.js.map +1 -1
- package/build/components/block-settings-menu/block-settings-dropdown.js +4 -1
- package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
- package/build/components/block-settings-menu-controls/index.js +1 -1
- package/build/components/block-settings-menu-controls/index.js.map +1 -1
- package/build/components/block-styles/index.js +3 -6
- package/build/components/block-styles/index.js.map +1 -1
- package/build/components/block-styles/preview.native.js.map +1 -1
- package/build/components/block-switcher/index.js +7 -1
- package/build/components/block-switcher/index.js.map +1 -1
- package/build/components/block-title/index.js +8 -2
- package/build/components/block-title/index.js.map +1 -1
- package/build/components/block-title/use-block-display-title.js +12 -5
- package/build/components/block-title/use-block-display-title.js.map +1 -1
- package/build/components/block-tools/block-contextual-toolbar.js +1 -1
- package/build/components/block-tools/block-contextual-toolbar.js.map +1 -1
- package/build/components/block-tools/block-selection-button.js +1 -7
- package/build/components/block-tools/block-selection-button.js.map +1 -1
- package/build/components/block-tools/index.js +4 -1
- package/build/components/block-tools/index.js.map +1 -1
- package/build/components/block-types-list/index.js +1 -1
- package/build/components/block-types-list/index.js.map +1 -1
- package/build/components/block-types-list/index.native.js +65 -23
- package/build/components/block-types-list/index.native.js.map +1 -1
- package/build/components/border-radius-control/index.js +5 -1
- package/build/components/border-radius-control/index.js.map +1 -1
- package/build/components/colors/utils.js +6 -2
- package/build/components/colors/utils.js.map +1 -1
- package/build/components/colors/with-colors.js +1 -1
- package/build/components/colors/with-colors.js.map +1 -1
- package/build/components/colors-gradients/control.js +49 -39
- package/build/components/colors-gradients/control.js.map +1 -1
- package/build/components/colors-gradients/dropdown.js +9 -3
- package/build/components/colors-gradients/dropdown.js.map +1 -1
- package/build/components/date-format-picker/index.js +1 -1
- package/build/components/date-format-picker/index.js.map +1 -1
- package/build/components/font-appearance-control/index.js +10 -4
- package/build/components/font-appearance-control/index.js.map +1 -1
- package/build/components/iframe/index.js +19 -6
- package/build/components/iframe/index.js.map +1 -1
- package/build/components/image-editor/cropper.js +4 -3
- package/build/components/image-editor/cropper.js.map +1 -1
- package/build/components/image-editor/index.js +3 -1
- package/build/components/image-editor/index.js.map +1 -1
- package/build/components/image-size-control/index.js +3 -1
- package/build/components/image-size-control/index.js.map +1 -1
- package/build/components/index.js +13 -6
- package/build/components/index.js.map +1 -1
- package/build/components/index.native.js +11 -4
- package/build/components/index.native.js.map +1 -1
- package/build/components/inserter/block-types-tab.native.js +30 -16
- package/build/components/inserter/block-types-tab.native.js.map +1 -1
- package/build/components/inserter/index.native.js +8 -3
- package/build/components/inserter/index.native.js.map +1 -1
- package/build/components/inserter/preview-panel.js +8 -8
- package/build/components/inserter/preview-panel.js.map +1 -1
- package/build/components/inserter/reusable-blocks-tab.native.js +5 -1
- package/build/components/inserter/reusable-blocks-tab.native.js.map +1 -1
- package/build/components/inserter/search-results.native.js +5 -2
- package/build/components/inserter/search-results.native.js.map +1 -1
- package/build/components/inserter/utils.native.js +21 -0
- package/build/components/inserter/utils.native.js.map +1 -1
- package/build/components/inserter-list-item/index.js +7 -20
- package/build/components/inserter-list-item/index.js.map +1 -1
- package/build/components/letter-spacing-control/index.js +6 -3
- package/build/components/letter-spacing-control/index.js.map +1 -1
- package/build/components/line-height-control/index.js +6 -3
- package/build/components/line-height-control/index.js.map +1 -1
- package/build/components/link-control/index.js +1 -1
- package/build/components/link-control/index.js.map +1 -1
- package/build/components/link-control/is-url-like.js +1 -7
- package/build/components/link-control/is-url-like.js.map +1 -1
- package/build/components/link-control/use-search-handler.js +1 -7
- package/build/components/link-control/use-search-handler.js.map +1 -1
- package/build/components/list-view/block-select-button.js +15 -7
- package/build/components/list-view/block-select-button.js.map +1 -1
- package/build/components/list-view/branch.js +1 -7
- package/build/components/list-view/branch.js.map +1 -1
- package/build/components/list-view/drop-indicator.js +1 -1
- package/build/components/list-view/drop-indicator.js.map +1 -1
- package/build/components/list-view/expander.js +3 -1
- package/build/components/list-view/expander.js.map +1 -1
- package/build/components/media-placeholder/index.js +13 -2
- package/build/components/media-placeholder/index.js.map +1 -1
- package/build/components/media-replace-flow/index.js +3 -6
- package/build/components/media-replace-flow/index.js.map +1 -1
- package/build/components/media-upload/index.native.js +8 -3
- package/build/components/media-upload/index.native.js.map +1 -1
- package/build/components/observe-typing/index.js +22 -8
- package/build/components/observe-typing/index.js.map +1 -1
- package/build/components/preview-options/index.js +2 -2
- package/build/components/preview-options/index.js.map +1 -1
- package/build/components/{use-no-recursive-renders → recursion-provider}/index.js +40 -18
- package/build/components/recursion-provider/index.js.map +1 -0
- package/build/components/rich-text/format-toolbar-container.js +61 -12
- package/build/components/rich-text/format-toolbar-container.js.map +1 -1
- package/build/components/rich-text/index.js +8 -2
- package/build/components/rich-text/index.js.map +1 -1
- package/build/components/rich-text/index.native.js +3 -1
- package/build/components/rich-text/index.native.js.map +1 -1
- package/build/components/rich-text/use-before-input-rules.js +110 -0
- package/build/components/rich-text/use-before-input-rules.js.map +1 -0
- package/build/components/rich-text/use-format-types.js +36 -16
- package/build/components/rich-text/use-format-types.js.map +1 -1
- package/build/components/text-decoration-control/index.js +3 -1
- package/build/components/text-decoration-control/index.js.map +1 -1
- package/build/components/text-transform-control/index.js +3 -1
- package/build/components/text-transform-control/index.js.map +1 -1
- package/build/components/url-popover/image-url-input-ui.js +4 -1
- package/build/components/url-popover/image-url-input-ui.js.map +1 -1
- package/build/components/url-popover/index.js +2 -1
- package/build/components/url-popover/index.js.map +1 -1
- package/build/components/writing-flow/use-arrow-nav.js +38 -27
- package/build/components/writing-flow/use-arrow-nav.js.map +1 -1
- package/build/components/writing-flow/use-drag-selection.js +9 -2
- package/build/components/writing-flow/use-drag-selection.js.map +1 -1
- package/build/components/writing-flow/use-multi-selection.js +3 -47
- package/build/components/writing-flow/use-multi-selection.js.map +1 -1
- package/build/components/writing-flow/use-select-all.js +3 -1
- package/build/components/writing-flow/use-select-all.js.map +1 -1
- package/build/components/writing-flow/use-selection-observer.js +1 -3
- package/build/components/writing-flow/use-selection-observer.js.map +1 -1
- package/build/components/writing-flow/use-tab-nav.js +1 -1
- package/build/components/writing-flow/use-tab-nav.js.map +1 -1
- package/build/hooks/color.js +2 -4
- package/build/hooks/color.js.map +1 -1
- package/build/hooks/index.js +8 -0
- package/build/hooks/index.js.map +1 -1
- package/build/hooks/layout.js +61 -15
- package/build/hooks/layout.js.map +1 -1
- package/build/hooks/style.js +41 -31
- package/build/hooks/style.js.map +1 -1
- package/build/hooks/utils.js +5 -3
- package/build/hooks/utils.js.map +1 -1
- package/build/index.js +7 -0
- package/build/index.js.map +1 -1
- package/build/layouts/flex.js +40 -36
- package/build/layouts/flex.js.map +1 -1
- package/build/layouts/flow.js +35 -37
- package/build/layouts/flow.js.map +1 -1
- package/build/layouts/utils.js +35 -3
- package/build/layouts/utils.js.map +1 -1
- package/build/store/actions.js +15 -18
- package/build/store/actions.js.map +1 -1
- package/build/store/index.js +0 -4
- package/build/store/index.js.map +1 -1
- package/build/store/reducer.js +5 -3
- package/build/store/reducer.js.map +1 -1
- package/build/store/selectors.js +3 -3
- package/build/store/selectors.js.map +1 -1
- package/build/utils/block-variation-transforms.js +15 -9
- package/build/utils/block-variation-transforms.js.map +1 -1
- package/build/utils/pasting.js +9 -1
- package/build/utils/pasting.js.map +1 -1
- package/build-module/components/block-list/block-invalid-warning.native.js +50 -6
- package/build-module/components/block-list/block-invalid-warning.native.js.map +1 -1
- package/build-module/components/block-list/block.js +15 -5
- package/build-module/components/block-list/block.js.map +1 -1
- package/build-module/components/block-list/block.native.js +2 -1
- package/build-module/components/block-list/block.native.js.map +1 -1
- package/build-module/components/block-list/index.native.js +4 -2
- package/build-module/components/block-list/index.native.js.map +1 -1
- package/build-module/components/block-list/layout.js +19 -4
- package/build-module/components/block-list/layout.js.map +1 -1
- package/build-module/components/block-list/use-block-props/use-block-class-names.js +5 -2
- package/build-module/components/block-list/use-block-props/use-block-class-names.js.map +1 -1
- package/build-module/components/block-lock/modal.js +39 -8
- package/build-module/components/block-lock/modal.js.map +1 -1
- package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js +2 -2
- package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
- package/build-module/components/block-mover/mover-description.js +97 -33
- package/build-module/components/block-mover/mover-description.js.map +1 -1
- package/build-module/components/block-pattern-setup/index.js +6 -18
- package/build-module/components/block-pattern-setup/index.js.map +1 -1
- package/build-module/components/block-popover/inbetween.js +2 -2
- package/build-module/components/block-popover/inbetween.js.map +1 -1
- package/build-module/components/block-popover/index.js +1 -1
- package/build-module/components/block-popover/index.js.map +1 -1
- package/build-module/components/block-settings-menu/block-mode-toggle.js +1 -1
- package/build-module/components/block-settings-menu/block-mode-toggle.js.map +1 -1
- package/build-module/components/block-settings-menu/block-settings-dropdown.js +4 -1
- package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
- package/build-module/components/block-settings-menu-controls/index.js +2 -2
- package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
- package/build-module/components/block-styles/index.js +4 -7
- package/build-module/components/block-styles/index.js.map +1 -1
- package/build-module/components/block-styles/preview.native.js.map +1 -1
- package/build-module/components/block-switcher/index.js +7 -1
- package/build-module/components/block-switcher/index.js.map +1 -1
- package/build-module/components/block-title/index.js +8 -2
- package/build-module/components/block-title/index.js.map +1 -1
- package/build-module/components/block-title/use-block-display-title.js +12 -5
- package/build-module/components/block-title/use-block-display-title.js.map +1 -1
- package/build-module/components/block-tools/block-contextual-toolbar.js +1 -1
- package/build-module/components/block-tools/block-contextual-toolbar.js.map +1 -1
- package/build-module/components/block-tools/block-selection-button.js +1 -7
- package/build-module/components/block-tools/block-selection-button.js.map +1 -1
- package/build-module/components/block-tools/index.js +4 -1
- package/build-module/components/block-tools/index.js.map +1 -1
- package/build-module/components/block-types-list/index.js +1 -1
- package/build-module/components/block-types-list/index.js.map +1 -1
- package/build-module/components/block-types-list/index.native.js +67 -25
- package/build-module/components/block-types-list/index.native.js.map +1 -1
- package/build-module/components/border-radius-control/index.js +6 -2
- package/build-module/components/border-radius-control/index.js.map +1 -1
- package/build-module/components/colors/utils.js +7 -3
- package/build-module/components/colors/utils.js.map +1 -1
- package/build-module/components/colors/with-colors.js +2 -2
- package/build-module/components/colors/with-colors.js.map +1 -1
- package/build-module/components/colors-gradients/control.js +50 -40
- package/build-module/components/colors-gradients/control.js.map +1 -1
- package/build-module/components/colors-gradients/dropdown.js +10 -4
- package/build-module/components/colors-gradients/dropdown.js.map +1 -1
- package/build-module/components/date-format-picker/index.js +1 -1
- package/build-module/components/date-format-picker/index.js.map +1 -1
- package/build-module/components/font-appearance-control/index.js +7 -4
- package/build-module/components/font-appearance-control/index.js.map +1 -1
- package/build-module/components/iframe/index.js +19 -6
- package/build-module/components/iframe/index.js.map +1 -1
- package/build-module/components/image-editor/cropper.js +4 -3
- package/build-module/components/image-editor/cropper.js.map +1 -1
- package/build-module/components/image-editor/index.js +3 -1
- package/build-module/components/image-editor/index.js.map +1 -1
- package/build-module/components/image-size-control/index.js +3 -1
- package/build-module/components/image-size-control/index.js.map +1 -1
- package/build-module/components/index.js +1 -1
- package/build-module/components/index.js.map +1 -1
- package/build-module/components/index.native.js +1 -1
- package/build-module/components/index.native.js.map +1 -1
- package/build-module/components/inserter/block-types-tab.native.js +31 -15
- package/build-module/components/inserter/block-types-tab.native.js.map +1 -1
- package/build-module/components/inserter/index.native.js +9 -2
- package/build-module/components/inserter/index.native.js.map +1 -1
- package/build-module/components/inserter/preview-panel.js +9 -9
- package/build-module/components/inserter/preview-panel.js.map +1 -1
- package/build-module/components/inserter/reusable-blocks-tab.native.js +6 -2
- package/build-module/components/inserter/reusable-blocks-tab.native.js.map +1 -1
- package/build-module/components/inserter/search-results.native.js +6 -3
- package/build-module/components/inserter/search-results.native.js.map +1 -1
- package/build-module/components/inserter/utils.native.js +19 -0
- package/build-module/components/inserter/utils.native.js.map +1 -1
- package/build-module/components/inserter-list-item/index.js +5 -18
- package/build-module/components/inserter-list-item/index.js.map +1 -1
- package/build-module/components/letter-spacing-control/index.js +5 -3
- package/build-module/components/letter-spacing-control/index.js.map +1 -1
- package/build-module/components/line-height-control/index.js +5 -3
- package/build-module/components/line-height-control/index.js.map +1 -1
- package/build-module/components/link-control/index.js +1 -1
- package/build-module/components/link-control/index.js.map +1 -1
- package/build-module/components/link-control/is-url-like.js +1 -6
- package/build-module/components/link-control/is-url-like.js.map +1 -1
- package/build-module/components/link-control/use-search-handler.js +1 -6
- package/build-module/components/link-control/use-search-handler.js.map +1 -1
- package/build-module/components/list-view/block-select-button.js +16 -8
- package/build-module/components/list-view/block-select-button.js.map +1 -1
- package/build-module/components/list-view/branch.js +1 -6
- package/build-module/components/list-view/branch.js.map +1 -1
- package/build-module/components/list-view/drop-indicator.js +1 -1
- package/build-module/components/list-view/drop-indicator.js.map +1 -1
- package/build-module/components/list-view/expander.js +3 -2
- package/build-module/components/list-view/expander.js.map +1 -1
- package/build-module/components/media-placeholder/index.js +13 -2
- package/build-module/components/media-placeholder/index.js.map +1 -1
- package/build-module/components/media-replace-flow/index.js +4 -7
- package/build-module/components/media-replace-flow/index.js.map +1 -1
- package/build-module/components/media-upload/index.native.js +9 -2
- package/build-module/components/media-upload/index.native.js.map +1 -1
- package/build-module/components/observe-typing/index.js +22 -8
- package/build-module/components/observe-typing/index.js.map +1 -1
- package/build-module/components/preview-options/index.js +2 -2
- package/build-module/components/preview-options/index.js.map +1 -1
- package/build-module/components/{use-no-recursive-renders → recursion-provider}/index.js +39 -19
- package/build-module/components/recursion-provider/index.js.map +1 -0
- package/build-module/components/rich-text/format-toolbar-container.js +58 -12
- package/build-module/components/rich-text/format-toolbar-container.js.map +1 -1
- package/build-module/components/rich-text/index.js +7 -2
- package/build-module/components/rich-text/index.js.map +1 -1
- package/build-module/components/rich-text/index.native.js +3 -1
- package/build-module/components/rich-text/index.native.js.map +1 -1
- package/build-module/components/rich-text/use-before-input-rules.js +96 -0
- package/build-module/components/rich-text/use-before-input-rules.js.map +1 -0
- package/build-module/components/rich-text/use-format-types.js +37 -18
- package/build-module/components/rich-text/use-format-types.js.map +1 -1
- package/build-module/components/text-decoration-control/index.js +4 -2
- package/build-module/components/text-decoration-control/index.js.map +1 -1
- package/build-module/components/text-transform-control/index.js +4 -2
- package/build-module/components/text-transform-control/index.js.map +1 -1
- package/build-module/components/url-popover/image-url-input-ui.js +4 -1
- package/build-module/components/url-popover/image-url-input-ui.js.map +1 -1
- package/build-module/components/url-popover/index.js +2 -1
- package/build-module/components/url-popover/index.js.map +1 -1
- package/build-module/components/writing-flow/use-arrow-nav.js +40 -29
- package/build-module/components/writing-flow/use-arrow-nav.js.map +1 -1
- package/build-module/components/writing-flow/use-drag-selection.js +9 -2
- package/build-module/components/writing-flow/use-drag-selection.js.map +1 -1
- package/build-module/components/writing-flow/use-multi-selection.js +3 -45
- package/build-module/components/writing-flow/use-multi-selection.js.map +1 -1
- package/build-module/components/writing-flow/use-select-all.js +3 -1
- package/build-module/components/writing-flow/use-select-all.js.map +1 -1
- package/build-module/components/writing-flow/use-selection-observer.js +1 -3
- package/build-module/components/writing-flow/use-selection-observer.js.map +1 -1
- package/build-module/components/writing-flow/use-tab-nav.js +1 -1
- package/build-module/components/writing-flow/use-tab-nav.js.map +1 -1
- package/build-module/hooks/color.js +2 -3
- package/build-module/hooks/color.js.map +1 -1
- package/build-module/hooks/index.js +1 -0
- package/build-module/hooks/index.js.map +1 -1
- package/build-module/hooks/layout.js +62 -16
- package/build-module/hooks/layout.js.map +1 -1
- package/build-module/hooks/style.js +44 -35
- package/build-module/hooks/style.js.map +1 -1
- package/build-module/hooks/utils.js +5 -2
- package/build-module/hooks/utils.js.map +1 -1
- package/build-module/index.js +1 -1
- package/build-module/index.js.map +1 -1
- package/build-module/layouts/flex.js +41 -33
- package/build-module/layouts/flex.js.map +1 -1
- package/build-module/layouts/flow.js +35 -38
- package/build-module/layouts/flow.js.map +1 -1
- package/build-module/layouts/utils.js +33 -3
- package/build-module/layouts/utils.js.map +1 -1
- package/build-module/store/actions.js +9 -10
- package/build-module/store/actions.js.map +1 -1
- package/build-module/store/index.js +0 -4
- package/build-module/store/index.js.map +1 -1
- package/build-module/store/reducer.js +5 -2
- package/build-module/store/reducer.js.map +1 -1
- package/build-module/store/selectors.js +4 -4
- package/build-module/store/selectors.js.map +1 -1
- package/build-module/utils/block-variation-transforms.js +14 -7
- package/build-module/utils/block-variation-transforms.js.map +1 -1
- package/build-module/utils/pasting.js +9 -1
- package/build-module/utils/pasting.js.map +1 -1
- package/build-style/style-rtl.css +72 -14
- package/build-style/style.css +72 -14
- package/package.json +28 -28
- package/src/components/block-list/block-invalid-warning.native.js +42 -7
- package/src/components/block-list/block.js +15 -4
- package/src/components/block-list/block.native.js +1 -0
- package/src/components/block-list/index.native.js +2 -2
- package/src/components/block-list/layout.js +15 -3
- package/src/components/block-list/style.scss +1 -1
- package/src/components/block-list/use-block-props/use-block-class-names.js +5 -1
- package/src/components/block-lock/modal.js +47 -9
- package/src/components/block-lock/style.scss +10 -0
- package/src/components/block-mobile-toolbar/block-actions-menu.native.js +3 -3
- package/src/components/block-mover/mover-description.js +131 -48
- package/src/components/block-mover/test/mover-description.js +55 -3
- package/src/components/block-pattern-setup/index.js +3 -15
- package/src/components/block-pattern-setup/style.scss +4 -2
- package/src/components/block-popover/inbetween.js +2 -1
- package/src/components/block-popover/index.js +1 -1
- package/src/components/block-popover/style.scss +25 -2
- package/src/components/block-settings-menu/block-mode-toggle.js +1 -0
- package/src/components/block-settings-menu/block-settings-dropdown.js +4 -1
- package/src/components/block-settings-menu-controls/index.js +2 -2
- package/src/components/block-styles/index.js +4 -7
- package/src/components/block-styles/preview.native.js +1 -0
- package/src/components/block-styles/style.scss +10 -0
- package/src/components/block-switcher/index.js +7 -1
- package/src/components/block-title/index.js +3 -2
- package/src/components/block-title/use-block-display-title.js +11 -5
- package/src/components/block-tools/block-contextual-toolbar.js +3 -1
- package/src/components/block-tools/block-selection-button.js +0 -5
- package/src/components/block-tools/index.js +4 -1
- package/src/components/block-types-list/index.js +1 -1
- package/src/components/block-types-list/index.native.js +76 -24
- package/src/components/block-types-list/style.native.scss +18 -0
- package/src/components/border-radius-control/index.js +6 -1
- package/src/components/color-palette/test/__snapshots__/control.js.snap +91 -79
- package/src/components/colors/test/__snapshots__/with-colors.js.snap +1 -1
- package/src/components/colors/test/with-colors.js +1 -1
- package/src/components/colors/utils.js +5 -2
- package/src/components/colors/with-colors.js +2 -2
- package/src/components/colors-gradients/control.js +82 -65
- package/src/components/colors-gradients/dropdown.js +14 -3
- package/src/components/colors-gradients/style.scss +34 -9
- package/src/components/colors-gradients/test/control.js +16 -23
- package/src/components/date-format-picker/index.js +1 -0
- package/src/components/font-appearance-control/index.js +3 -0
- package/src/components/iframe/index.js +25 -6
- package/src/components/image-editor/cropper.js +9 -3
- package/src/components/image-editor/index.js +2 -0
- package/src/components/image-size-control/README.md +7 -0
- package/src/components/image-size-control/index.js +2 -0
- package/src/components/index.js +4 -1
- package/src/components/index.native.js +4 -1
- package/src/components/inserter/block-types-tab.native.js +42 -21
- package/src/components/inserter/index.native.js +7 -2
- package/src/components/inserter/preview-panel.js +6 -14
- package/src/components/inserter/reusable-blocks-tab.native.js +4 -2
- package/src/components/inserter/search-results.native.js +4 -2
- package/src/components/inserter/style.scss +1 -1
- package/src/components/inserter/test/block-types-tab.native.js +2 -0
- package/src/components/inserter/test/utils.native.js +37 -0
- package/src/components/inserter/utils.native.js +11 -0
- package/src/components/inserter-list-item/index.js +5 -18
- package/src/components/letter-spacing-control/index.js +2 -0
- package/src/components/line-height-control/index.js +2 -0
- package/src/components/link-control/index.js +1 -0
- package/src/components/link-control/is-url-like.js +1 -6
- package/src/components/link-control/test/index.js +6 -4
- package/src/components/link-control/use-search-handler.js +1 -6
- package/src/components/list-view/block-select-button.js +29 -14
- package/src/components/list-view/branch.js +1 -6
- package/src/components/list-view/drop-indicator.js +1 -1
- package/src/components/list-view/expander.js +4 -2
- package/src/components/list-view/style.scss +18 -4
- package/src/components/media-placeholder/index.js +19 -0
- package/src/components/media-replace-flow/index.js +3 -6
- package/src/components/media-replace-flow/test/index.js +14 -4
- package/src/components/media-upload/index.native.js +7 -3
- package/src/components/observe-typing/index.js +17 -14
- package/src/components/preview-options/index.js +2 -2
- package/src/components/{use-no-recursive-renders → recursion-provider}/index.js +39 -28
- package/src/components/{use-no-recursive-renders/test/use-no-recursive-renders.js → recursion-provider/test/index.js} +5 -6
- package/src/components/rich-text/README.md +13 -1
- package/src/components/rich-text/format-toolbar-container.js +63 -14
- package/src/components/rich-text/index.js +3 -0
- package/src/components/rich-text/index.native.js +2 -0
- package/src/components/rich-text/use-before-input-rules.js +91 -0
- package/src/components/rich-text/use-format-types.js +38 -17
- package/src/components/text-decoration-control/index.js +4 -2
- package/src/components/text-transform-control/index.js +4 -2
- package/src/components/url-popover/image-url-input-ui.js +3 -0
- package/src/components/url-popover/index.js +1 -0
- package/src/components/url-popover/test/__snapshots__/index.js.snap +3 -0
- package/src/components/writing-flow/use-arrow-nav.js +36 -34
- package/src/components/writing-flow/use-drag-selection.js +7 -1
- package/src/components/writing-flow/use-multi-selection.js +1 -48
- package/src/components/writing-flow/use-select-all.js +2 -1
- package/src/components/writing-flow/use-selection-observer.js +2 -3
- package/src/components/writing-flow/use-tab-nav.js +1 -1
- package/src/hooks/color.js +10 -3
- package/src/hooks/index.js +1 -0
- package/src/hooks/layout.js +66 -23
- package/src/hooks/style.js +46 -39
- package/src/hooks/utils.js +7 -3
- package/src/index.js +1 -0
- package/src/layouts/flex.js +47 -41
- package/src/layouts/flow.js +35 -34
- package/src/layouts/test/flex.js +21 -0
- package/src/layouts/test/flow.js +21 -0
- package/src/layouts/test/utils.js +138 -0
- package/src/layouts/utils.js +44 -3
- package/src/store/actions.js +10 -11
- package/src/store/index.js +0 -4
- package/src/store/reducer.js +3 -2
- package/src/store/selectors.js +3 -4
- package/src/utils/block-variation-transforms.js +13 -6
- package/src/utils/pasting.js +10 -1
- package/src/utils/test/block-variation-transforms.js +24 -0
- package/src/utils/test/pasting.js +10 -0
- package/tsconfig.json +2 -1
- package/build/components/use-no-recursive-renders/index.js.map +0 -1
- package/build-module/components/use-no-recursive-renders/index.js.map +0 -1
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { useRef } from '@wordpress/element';
|
|
5
|
+
import { useRefEffect } from '@wordpress/compose';
|
|
6
|
+
import { insert, isCollapsed } from '@wordpress/rich-text';
|
|
7
|
+
import { useDispatch } from '@wordpress/data';
|
|
8
|
+
import { applyFilters } from '@wordpress/hooks';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Internal dependencies
|
|
12
|
+
*/
|
|
13
|
+
import { store as blockEditorStore } from '../../store';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* When typing over a selection, the selection will we wrapped by a matching
|
|
17
|
+
* character pair. The second character is optional, it defaults to the first
|
|
18
|
+
* character.
|
|
19
|
+
*
|
|
20
|
+
* @type {string[]} Array of character pairs.
|
|
21
|
+
*/
|
|
22
|
+
const wrapSelectionSettings = [ '`', '"', "'", '“”', '‘’' ];
|
|
23
|
+
|
|
24
|
+
export function useBeforeInputRules( props ) {
|
|
25
|
+
const {
|
|
26
|
+
__unstableMarkLastChangeAsPersistent,
|
|
27
|
+
__unstableMarkAutomaticChange,
|
|
28
|
+
} = useDispatch( blockEditorStore );
|
|
29
|
+
const propsRef = useRef( props );
|
|
30
|
+
propsRef.current = props;
|
|
31
|
+
return useRefEffect( ( element ) => {
|
|
32
|
+
function onInput( event ) {
|
|
33
|
+
const { inputType, data } = event;
|
|
34
|
+
const { value, onChange } = propsRef.current;
|
|
35
|
+
|
|
36
|
+
// Only run the rules when inserting text.
|
|
37
|
+
if ( inputType !== 'insertText' ) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
if ( isCollapsed( value ) ) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const pair = applyFilters(
|
|
46
|
+
'blockEditor.wrapSelectionSettings',
|
|
47
|
+
wrapSelectionSettings
|
|
48
|
+
).find(
|
|
49
|
+
( [ startChar, endChar ] ) =>
|
|
50
|
+
startChar === data || endChar === data
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
if ( ! pair ) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const [ startChar, endChar = startChar ] = pair;
|
|
58
|
+
const start = value.start;
|
|
59
|
+
const end = value.end + startChar.length;
|
|
60
|
+
|
|
61
|
+
let newValue = insert( value, startChar, start, start );
|
|
62
|
+
newValue = insert( newValue, endChar, end, end );
|
|
63
|
+
|
|
64
|
+
__unstableMarkLastChangeAsPersistent();
|
|
65
|
+
onChange( newValue );
|
|
66
|
+
__unstableMarkAutomaticChange();
|
|
67
|
+
|
|
68
|
+
const init = {};
|
|
69
|
+
|
|
70
|
+
for ( const key in event ) {
|
|
71
|
+
init[ key ] = event[ key ];
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
init.data = endChar;
|
|
75
|
+
|
|
76
|
+
const { ownerDocument } = element;
|
|
77
|
+
const { defaultView } = ownerDocument;
|
|
78
|
+
const newEvent = new defaultView.InputEvent( 'input', init );
|
|
79
|
+
|
|
80
|
+
// Dispatch an input event with the new data. This will trigger the
|
|
81
|
+
// input rules.
|
|
82
|
+
event.target.dispatchEvent( newEvent );
|
|
83
|
+
event.preventDefault();
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
element.addEventListener( 'beforeinput', onInput );
|
|
87
|
+
return () => {
|
|
88
|
+
element.removeEventListener( 'beforeinput', onInput );
|
|
89
|
+
};
|
|
90
|
+
}, [] );
|
|
91
|
+
}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* External dependencies
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
5
|
-
import { useSelect, useDispatch } from '@wordpress/data';
|
|
4
|
+
import { mapKeys } from 'lodash';
|
|
6
5
|
|
|
7
6
|
/**
|
|
8
|
-
*
|
|
7
|
+
* WordPress dependencies
|
|
9
8
|
*/
|
|
9
|
+
import { useMemo } from '@wordpress/element';
|
|
10
|
+
import { useSelect, useDispatch } from '@wordpress/data';
|
|
10
11
|
import { store as richTextStore } from '@wordpress/rich-text';
|
|
11
12
|
|
|
12
13
|
function formatTypesSelector( select ) {
|
|
@@ -32,6 +33,21 @@ const interactiveContentTags = new Set( [
|
|
|
32
33
|
'video',
|
|
33
34
|
] );
|
|
34
35
|
|
|
36
|
+
function prefixSelectKeys( selected, prefix ) {
|
|
37
|
+
if ( typeof selected !== 'object' ) return { [ prefix ]: selected };
|
|
38
|
+
return mapKeys( selected, ( value, key ) => `${ prefix }.${ key }` );
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function getPrefixedSelectKeys( selected, prefix ) {
|
|
42
|
+
if ( selected[ prefix ] ) return selected[ prefix ];
|
|
43
|
+
return Object.keys( selected )
|
|
44
|
+
.filter( ( key ) => key.startsWith( prefix + '.' ) )
|
|
45
|
+
.reduce( ( accumulator, key ) => {
|
|
46
|
+
accumulator[ key.slice( prefix.length + 1 ) ] = selected[ key ];
|
|
47
|
+
return accumulator;
|
|
48
|
+
}, {} );
|
|
49
|
+
}
|
|
50
|
+
|
|
35
51
|
/**
|
|
36
52
|
* This hook provides RichText with the `formatTypes` and its derived props from
|
|
37
53
|
* experimental format type settings.
|
|
@@ -68,18 +84,23 @@ export function useFormatTypes( {
|
|
|
68
84
|
const keyedSelected = useSelect(
|
|
69
85
|
( select ) =>
|
|
70
86
|
formatTypes.reduce( ( accumulator, type ) => {
|
|
71
|
-
if ( type.__experimentalGetPropsForEditableTreePreparation ) {
|
|
72
|
-
accumulator
|
|
87
|
+
if ( ! type.__experimentalGetPropsForEditableTreePreparation ) {
|
|
88
|
+
return accumulator;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return {
|
|
92
|
+
...accumulator,
|
|
93
|
+
...prefixSelectKeys(
|
|
73
94
|
type.__experimentalGetPropsForEditableTreePreparation(
|
|
74
95
|
select,
|
|
75
96
|
{
|
|
76
97
|
richTextIdentifier: identifier,
|
|
77
98
|
blockClientId: clientId,
|
|
78
99
|
}
|
|
79
|
-
)
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
100
|
+
),
|
|
101
|
+
type.name
|
|
102
|
+
),
|
|
103
|
+
};
|
|
83
104
|
}, {} ),
|
|
84
105
|
[ formatTypes, clientId, identifier ]
|
|
85
106
|
);
|
|
@@ -89,11 +110,14 @@ export function useFormatTypes( {
|
|
|
89
110
|
const changeHandlers = [];
|
|
90
111
|
const dependencies = [];
|
|
91
112
|
|
|
113
|
+
for ( const key in keyedSelected ) {
|
|
114
|
+
dependencies.push( keyedSelected[ key ] );
|
|
115
|
+
}
|
|
116
|
+
|
|
92
117
|
formatTypes.forEach( ( type ) => {
|
|
93
118
|
if ( type.__experimentalCreatePrepareEditableTree ) {
|
|
94
|
-
const selected = keyedSelected[ type.name ];
|
|
95
119
|
const handler = type.__experimentalCreatePrepareEditableTree(
|
|
96
|
-
|
|
120
|
+
getPrefixedSelectKeys( keyedSelected, type.name ),
|
|
97
121
|
{
|
|
98
122
|
richTextIdentifier: identifier,
|
|
99
123
|
blockClientId: clientId,
|
|
@@ -105,10 +129,6 @@ export function useFormatTypes( {
|
|
|
105
129
|
} else {
|
|
106
130
|
prepareHandlers.push( handler );
|
|
107
131
|
}
|
|
108
|
-
|
|
109
|
-
for ( const key in selected ) {
|
|
110
|
-
dependencies.push( selected[ key ] );
|
|
111
|
-
}
|
|
112
132
|
}
|
|
113
133
|
|
|
114
134
|
if ( type.__experimentalCreateOnChangeEditableValue ) {
|
|
@@ -125,10 +145,11 @@ export function useFormatTypes( {
|
|
|
125
145
|
);
|
|
126
146
|
}
|
|
127
147
|
|
|
148
|
+
const selected = getPrefixedSelectKeys( keyedSelected, type.name );
|
|
128
149
|
changeHandlers.push(
|
|
129
150
|
type.__experimentalCreateOnChangeEditableValue(
|
|
130
151
|
{
|
|
131
|
-
...(
|
|
152
|
+
...( typeof selected === 'object' ? selected : {} ),
|
|
132
153
|
...dispatchers,
|
|
133
154
|
},
|
|
134
155
|
{
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* WordPress dependencies
|
|
3
3
|
*/
|
|
4
|
-
import { Button } from '@wordpress/components';
|
|
4
|
+
import { BaseControl, Button } from '@wordpress/components';
|
|
5
5
|
import { formatStrikethrough, formatUnderline } from '@wordpress/icons';
|
|
6
6
|
import { __ } from '@wordpress/i18n';
|
|
7
7
|
|
|
@@ -30,7 +30,9 @@ const TEXT_DECORATIONS = [
|
|
|
30
30
|
export default function TextDecorationControl( { value, onChange } ) {
|
|
31
31
|
return (
|
|
32
32
|
<fieldset className="block-editor-text-decoration-control">
|
|
33
|
-
<
|
|
33
|
+
<BaseControl.VisualLabel as="legend">
|
|
34
|
+
{ __( 'Decoration' ) }
|
|
35
|
+
</BaseControl.VisualLabel>
|
|
34
36
|
<div className="block-editor-text-decoration-control__buttons">
|
|
35
37
|
{ TEXT_DECORATIONS.map( ( textDecoration ) => {
|
|
36
38
|
return (
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* WordPress dependencies
|
|
3
3
|
*/
|
|
4
|
-
import { Button } from '@wordpress/components';
|
|
4
|
+
import { BaseControl, Button } from '@wordpress/components';
|
|
5
5
|
import { __ } from '@wordpress/i18n';
|
|
6
6
|
import {
|
|
7
7
|
formatCapitalize,
|
|
@@ -39,7 +39,9 @@ const TEXT_TRANSFORMS = [
|
|
|
39
39
|
export default function TextTransformControl( { value, onChange } ) {
|
|
40
40
|
return (
|
|
41
41
|
<fieldset className="block-editor-text-transform-control">
|
|
42
|
-
<
|
|
42
|
+
<BaseControl.VisualLabel as="legend">
|
|
43
|
+
{ __( 'Letter case' ) }
|
|
44
|
+
</BaseControl.VisualLabel>
|
|
43
45
|
<div className="block-editor-text-transform-control__buttons">
|
|
44
46
|
{ TEXT_TRANSFORMS.map( ( textTransform ) => {
|
|
45
47
|
return (
|
|
@@ -51,6 +51,7 @@ const ImageURLInputUI = ( {
|
|
|
51
51
|
rel,
|
|
52
52
|
} ) => {
|
|
53
53
|
const [ isOpen, setIsOpen ] = useState( false );
|
|
54
|
+
const buttonRef = useRef( null );
|
|
54
55
|
const openLinkUI = useCallback( () => {
|
|
55
56
|
setIsOpen( true );
|
|
56
57
|
} );
|
|
@@ -245,9 +246,11 @@ const ImageURLInputUI = ( {
|
|
|
245
246
|
label={ url ? __( 'Edit link' ) : __( 'Insert link' ) }
|
|
246
247
|
aria-expanded={ isOpen }
|
|
247
248
|
onClick={ openLinkUI }
|
|
249
|
+
ref={ buttonRef }
|
|
248
250
|
/>
|
|
249
251
|
{ isOpen && (
|
|
250
252
|
<URLPopover
|
|
253
|
+
anchorRef={ buttonRef }
|
|
251
254
|
onFocusOutside={ onFocusOutside() }
|
|
252
255
|
onClose={ closeLinkUI }
|
|
253
256
|
renderSettings={ () => advancedOptions }
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
exports[`URLPopover matches the snapshot in its default state 1`] = `
|
|
4
4
|
<ForwardRef(Popover)
|
|
5
|
+
__unstableShift={true}
|
|
5
6
|
className="block-editor-url-popover"
|
|
6
7
|
focusOnMount="firstElement"
|
|
7
8
|
position="bottom center"
|
|
@@ -38,6 +39,7 @@ exports[`URLPopover matches the snapshot in its default state 1`] = `
|
|
|
38
39
|
|
|
39
40
|
exports[`URLPopover matches the snapshot when the settings are toggled open 1`] = `
|
|
40
41
|
<ForwardRef(Popover)
|
|
42
|
+
__unstableShift={true}
|
|
41
43
|
className="block-editor-url-popover"
|
|
42
44
|
focusOnMount="firstElement"
|
|
43
45
|
position="bottom center"
|
|
@@ -81,6 +83,7 @@ exports[`URLPopover matches the snapshot when the settings are toggled open 1`]
|
|
|
81
83
|
|
|
82
84
|
exports[`URLPopover matches the snapshot when there are no settings 1`] = `
|
|
83
85
|
<ForwardRef(Popover)
|
|
86
|
+
__unstableShift={true}
|
|
84
87
|
className="block-editor-url-popover"
|
|
85
88
|
focusOnMount="firstElement"
|
|
86
89
|
position="bottom center"
|
|
@@ -11,13 +11,13 @@ import {
|
|
|
11
11
|
isRTL,
|
|
12
12
|
} from '@wordpress/dom';
|
|
13
13
|
import { UP, DOWN, LEFT, RIGHT } from '@wordpress/keycodes';
|
|
14
|
-
import { useSelect } from '@wordpress/data';
|
|
14
|
+
import { useDispatch, useSelect } from '@wordpress/data';
|
|
15
15
|
import { useRefEffect } from '@wordpress/compose';
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
18
|
* Internal dependencies
|
|
19
19
|
*/
|
|
20
|
-
import {
|
|
20
|
+
import { getBlockClientId } from '../../utils/dom';
|
|
21
21
|
import { store as blockEditorStore } from '../../store';
|
|
22
22
|
|
|
23
23
|
/**
|
|
@@ -130,13 +130,13 @@ export function getClosestTabbable(
|
|
|
130
130
|
|
|
131
131
|
export default function useArrowNav() {
|
|
132
132
|
const {
|
|
133
|
-
|
|
133
|
+
getMultiSelectedBlocksStartClientId,
|
|
134
134
|
getMultiSelectedBlocksEndClientId,
|
|
135
|
-
getPreviousBlockClientId,
|
|
136
|
-
getNextBlockClientId,
|
|
137
135
|
getSettings,
|
|
138
136
|
hasMultiSelection,
|
|
137
|
+
__unstableIsFullySelected,
|
|
139
138
|
} = useSelect( blockEditorStore );
|
|
139
|
+
const { selectBlock } = useDispatch( blockEditorStore );
|
|
140
140
|
return useRefEffect( ( node ) => {
|
|
141
141
|
// Here a DOMRect is stored while moving the caret vertically so
|
|
142
142
|
// vertical position of the start position can be restored. This is to
|
|
@@ -147,26 +147,13 @@ export default function useArrowNav() {
|
|
|
147
147
|
verticalRect = null;
|
|
148
148
|
}
|
|
149
149
|
|
|
150
|
-
|
|
151
|
-
* Returns true if the given target field is the last in its block which
|
|
152
|
-
* can be considered for tab transition. For example, in a block with
|
|
153
|
-
* two text fields, this would return true when reversing from the first
|
|
154
|
-
* of the two fields, but false when reversing from the second.
|
|
155
|
-
*
|
|
156
|
-
* @param {Element} target Currently focused text field.
|
|
157
|
-
* @param {boolean} isReverse True if considering as the first field.
|
|
158
|
-
*
|
|
159
|
-
* @return {boolean} Whether field is at edge for tab transition.
|
|
160
|
-
*/
|
|
161
|
-
function isTabbableEdge( target, isReverse ) {
|
|
150
|
+
function isClosestTabbableABlock( target, isReverse ) {
|
|
162
151
|
const closestTabbable = getClosestTabbable(
|
|
163
152
|
target,
|
|
164
153
|
isReverse,
|
|
165
154
|
node
|
|
166
155
|
);
|
|
167
|
-
return (
|
|
168
|
-
! closestTabbable || ! isInSameBlock( target, closestTabbable )
|
|
169
|
-
);
|
|
156
|
+
return closestTabbable && getBlockClientId( closestTabbable );
|
|
170
157
|
}
|
|
171
158
|
|
|
172
159
|
function onKeyDown( event ) {
|
|
@@ -186,7 +173,35 @@ export default function useArrowNav() {
|
|
|
186
173
|
const { ownerDocument } = node;
|
|
187
174
|
const { defaultView } = ownerDocument;
|
|
188
175
|
|
|
176
|
+
// If there is a multi-selection, the arrow keys should collapse the
|
|
177
|
+
// selection to the start or end of the selection.
|
|
189
178
|
if ( hasMultiSelection() ) {
|
|
179
|
+
// Only handle if we have a full selection (not a native partial
|
|
180
|
+
// selection).
|
|
181
|
+
if ( ! __unstableIsFullySelected() ) {
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
if ( event.defaultPrevented ) {
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
if ( ! isNav ) {
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
if ( isShift ) {
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
event.preventDefault();
|
|
198
|
+
|
|
199
|
+
if ( isReverse ) {
|
|
200
|
+
selectBlock( getMultiSelectedBlocksStartClientId() );
|
|
201
|
+
} else {
|
|
202
|
+
selectBlock( getMultiSelectedBlocksEndClientId(), -1 );
|
|
203
|
+
}
|
|
204
|
+
|
|
190
205
|
return;
|
|
191
206
|
}
|
|
192
207
|
|
|
@@ -223,23 +238,10 @@ export default function useArrowNav() {
|
|
|
223
238
|
// next, which is the exact reverse of LTR.
|
|
224
239
|
const isReverseDir = isRTL( target ) ? ! isReverse : isReverse;
|
|
225
240
|
const { keepCaretInsideBlock } = getSettings();
|
|
226
|
-
const selectedBlockClientId = getSelectedBlockClientId();
|
|
227
241
|
|
|
228
242
|
if ( isShift ) {
|
|
229
|
-
const selectionEndClientId =
|
|
230
|
-
getMultiSelectedBlocksEndClientId();
|
|
231
|
-
const selectionBeforeEndClientId = getPreviousBlockClientId(
|
|
232
|
-
selectionEndClientId || selectedBlockClientId
|
|
233
|
-
);
|
|
234
|
-
const selectionAfterEndClientId = getNextBlockClientId(
|
|
235
|
-
selectionEndClientId || selectedBlockClientId
|
|
236
|
-
);
|
|
237
|
-
|
|
238
243
|
if (
|
|
239
|
-
|
|
240
|
-
( ( isReverse && selectionBeforeEndClientId ) ||
|
|
241
|
-
( ! isReverse && selectionAfterEndClientId ) ) &&
|
|
242
|
-
isTabbableEdge( target, isReverse ) &&
|
|
244
|
+
isClosestTabbableABlock( target, isReverse ) &&
|
|
243
245
|
isNavEdge( target, isReverse )
|
|
244
246
|
) {
|
|
245
247
|
node.contentEditable = true;
|
|
@@ -27,7 +27,7 @@ function setContentEditableWrapper( node, value ) {
|
|
|
27
27
|
export default function useDragSelection() {
|
|
28
28
|
const { startMultiSelect, stopMultiSelect } =
|
|
29
29
|
useDispatch( blockEditorStore );
|
|
30
|
-
const { isSelectionEnabled, hasMultiSelection } =
|
|
30
|
+
const { isSelectionEnabled, hasMultiSelection, isDraggingBlocks } =
|
|
31
31
|
useSelect( blockEditorStore );
|
|
32
32
|
return useRefEffect(
|
|
33
33
|
( node ) => {
|
|
@@ -72,6 +72,12 @@ export default function useDragSelection() {
|
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
function onMouseLeave( { buttons, target } ) {
|
|
75
|
+
// Avoid triggering a multi-selection if the user is already
|
|
76
|
+
// dragging blocks.
|
|
77
|
+
if ( isDraggingBlocks() ) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
|
|
75
81
|
// The primary button must be pressed to initiate selection.
|
|
76
82
|
// See https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons
|
|
77
83
|
if ( buttons !== 1 ) {
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* External dependencies
|
|
3
|
-
*/
|
|
4
|
-
import { first, last } from 'lodash';
|
|
5
|
-
|
|
6
1
|
/**
|
|
7
2
|
* WordPress dependencies
|
|
8
3
|
*/
|
|
@@ -13,7 +8,6 @@ import { useSelect } from '@wordpress/data';
|
|
|
13
8
|
* Internal dependencies
|
|
14
9
|
*/
|
|
15
10
|
import { store as blockEditorStore } from '../../store';
|
|
16
|
-
import { __unstableUseBlockRef as useBlockRef } from '../block-list/use-block-props/use-block-refs';
|
|
17
11
|
|
|
18
12
|
function selector( select ) {
|
|
19
13
|
const {
|
|
@@ -44,10 +38,6 @@ export default function useMultiSelection() {
|
|
|
44
38
|
selectedBlockClientId,
|
|
45
39
|
isFullSelection,
|
|
46
40
|
} = useSelect( selector, [] );
|
|
47
|
-
const selectedRef = useBlockRef( selectedBlockClientId );
|
|
48
|
-
// These must be in the right DOM order.
|
|
49
|
-
const startRef = useBlockRef( first( multiSelectedBlockClientIds ) );
|
|
50
|
-
const endRef = useBlockRef( last( multiSelectedBlockClientIds ) );
|
|
51
41
|
|
|
52
42
|
/**
|
|
53
43
|
* When the component updates, and there is multi selection, we need to
|
|
@@ -66,26 +56,6 @@ export default function useMultiSelection() {
|
|
|
66
56
|
}
|
|
67
57
|
|
|
68
58
|
if ( ! hasMultiSelection || isMultiSelecting ) {
|
|
69
|
-
if ( ! selectedBlockClientId || isMultiSelecting ) {
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
const selection = defaultView.getSelection();
|
|
74
|
-
|
|
75
|
-
if ( selection.rangeCount && ! selection.isCollapsed ) {
|
|
76
|
-
const blockNode = selectedRef.current;
|
|
77
|
-
const { startContainer, endContainer } =
|
|
78
|
-
selection.getRangeAt( 0 );
|
|
79
|
-
|
|
80
|
-
if (
|
|
81
|
-
!! blockNode &&
|
|
82
|
-
( ! blockNode.contains( startContainer ) ||
|
|
83
|
-
! blockNode.contains( endContainer ) )
|
|
84
|
-
) {
|
|
85
|
-
selection.removeAllRanges();
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
|
|
89
59
|
return;
|
|
90
60
|
}
|
|
91
61
|
|
|
@@ -105,25 +75,8 @@ export default function useMultiSelection() {
|
|
|
105
75
|
// able to select across instances immediately.
|
|
106
76
|
node.contentEditable = true;
|
|
107
77
|
|
|
108
|
-
|
|
109
|
-
// BEFORE selection.
|
|
78
|
+
defaultView.getSelection().removeAllRanges();
|
|
110
79
|
node.focus();
|
|
111
|
-
|
|
112
|
-
// The block refs might not be immediately available
|
|
113
|
-
// when dragging blocks into another block.
|
|
114
|
-
if ( ! startRef.current || ! endRef.current ) {
|
|
115
|
-
return;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
const selection = defaultView.getSelection();
|
|
119
|
-
const range = ownerDocument.createRange();
|
|
120
|
-
|
|
121
|
-
// These must be in the right DOM order.
|
|
122
|
-
range.setStartBefore( startRef.current );
|
|
123
|
-
range.setEndAfter( endRef.current );
|
|
124
|
-
|
|
125
|
-
selection.removeAllRanges();
|
|
126
|
-
selection.addRange( range );
|
|
127
80
|
},
|
|
128
81
|
[
|
|
129
82
|
hasMultiSelection,
|
|
@@ -19,7 +19,7 @@ import { store as blockEditorStore } from '../../store';
|
|
|
19
19
|
export default function useSelectAll() {
|
|
20
20
|
const { getBlockOrder, getSelectedBlockClientIds, getBlockRootClientId } =
|
|
21
21
|
useSelect( blockEditorStore );
|
|
22
|
-
const { multiSelect } = useDispatch( blockEditorStore );
|
|
22
|
+
const { multiSelect, selectBlock } = useDispatch( blockEditorStore );
|
|
23
23
|
const isMatch = useShortcutEventMatch();
|
|
24
24
|
|
|
25
25
|
return useRefEffect( ( node ) => {
|
|
@@ -53,6 +53,7 @@ export default function useSelectAll() {
|
|
|
53
53
|
const lastClientId = last( blockClientIds );
|
|
54
54
|
|
|
55
55
|
if ( firstClientId === lastClientId ) {
|
|
56
|
+
selectBlock( firstClientId );
|
|
56
57
|
return;
|
|
57
58
|
}
|
|
58
59
|
|
|
@@ -84,12 +84,11 @@ export default function useSelectionObserver() {
|
|
|
84
84
|
|
|
85
85
|
function onSelectionChange( event ) {
|
|
86
86
|
const selection = defaultView.getSelection();
|
|
87
|
-
|
|
88
|
-
// contentEditable wrapper.
|
|
87
|
+
|
|
89
88
|
if ( ! selection.rangeCount ) {
|
|
90
|
-
setContentEditableWrapper( node, false );
|
|
91
89
|
return;
|
|
92
90
|
}
|
|
91
|
+
|
|
93
92
|
// If selection is collapsed and we haven't used `shift+click`,
|
|
94
93
|
// end multi selection and disable the contentEditable wrapper.
|
|
95
94
|
// We have to check about `shift+click` case because elements
|
package/src/hooks/color.js
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
* External dependencies
|
|
3
3
|
*/
|
|
4
4
|
import classnames from 'classnames';
|
|
5
|
-
import { isObject } from 'lodash';
|
|
6
5
|
|
|
7
6
|
/**
|
|
8
7
|
* WordPress dependencies
|
|
@@ -55,13 +54,21 @@ const hasLinkColorSupport = ( blockType ) => {
|
|
|
55
54
|
|
|
56
55
|
const colorSupport = getBlockSupport( blockType, COLOR_SUPPORT_KEY );
|
|
57
56
|
|
|
58
|
-
return
|
|
57
|
+
return (
|
|
58
|
+
colorSupport !== null &&
|
|
59
|
+
typeof colorSupport === 'object' &&
|
|
60
|
+
!! colorSupport.link
|
|
61
|
+
);
|
|
59
62
|
};
|
|
60
63
|
|
|
61
64
|
const hasGradientSupport = ( blockType ) => {
|
|
62
65
|
const colorSupport = getBlockSupport( blockType, COLOR_SUPPORT_KEY );
|
|
63
66
|
|
|
64
|
-
return
|
|
67
|
+
return (
|
|
68
|
+
colorSupport !== null &&
|
|
69
|
+
typeof colorSupport === 'object' &&
|
|
70
|
+
!! colorSupport.gradients
|
|
71
|
+
);
|
|
65
72
|
};
|
|
66
73
|
|
|
67
74
|
const hasBackgroundColorSupport = ( blockType ) => {
|
package/src/hooks/index.js
CHANGED
|
@@ -20,4 +20,5 @@ export { useCustomSides } from './dimensions';
|
|
|
20
20
|
export { getBorderClassesAndStyles, useBorderProps } from './use-border-props';
|
|
21
21
|
export { getColorClassesAndStyles, useColorProps } from './use-color-props';
|
|
22
22
|
export { getSpacingClassesAndStyles } from './use-spacing-props';
|
|
23
|
+
export { getGapCSSValue } from './gap';
|
|
23
24
|
export { useCachedTruthy } from './use-cached-truthy';
|