@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
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* WordPress dependencies
|
|
3
3
|
*/
|
|
4
|
-
import { chevronRightSmall, Icon } from '@wordpress/icons';
|
|
4
|
+
import { chevronRightSmall, chevronLeftSmall, Icon } from '@wordpress/icons';
|
|
5
|
+
import { isRTL } from '@wordpress/i18n';
|
|
6
|
+
|
|
5
7
|
export default function ListViewExpander( { onClick } ) {
|
|
6
8
|
return (
|
|
7
9
|
// Keyboard events are handled by TreeGrid see: components/src/tree-grid/index.js
|
|
@@ -18,7 +20,7 @@ export default function ListViewExpander( { onClick } ) {
|
|
|
18
20
|
onClick={ ( event ) => onClick( event, { forceToggle: true } ) }
|
|
19
21
|
aria-hidden="true"
|
|
20
22
|
>
|
|
21
|
-
<Icon icon={ chevronRightSmall } />
|
|
23
|
+
<Icon icon={ isRTL() ? chevronLeftSmall : chevronRightSmall } />
|
|
22
24
|
</span>
|
|
23
25
|
);
|
|
24
26
|
}
|
|
@@ -97,7 +97,7 @@
|
|
|
97
97
|
align-items: center;
|
|
98
98
|
width: 100%;
|
|
99
99
|
height: auto;
|
|
100
|
-
padding: ($grid-unit-15 * 0.5) $grid-unit-
|
|
100
|
+
padding: ($grid-unit-15 * 0.5) $grid-unit-05 ($grid-unit-15 * 0.5) 0;
|
|
101
101
|
text-align: left;
|
|
102
102
|
color: $gray-900;
|
|
103
103
|
border-radius: $radius-block-ui;
|
|
@@ -207,7 +207,7 @@
|
|
|
207
207
|
}
|
|
208
208
|
|
|
209
209
|
.block-editor-list-view-block__menu-cell {
|
|
210
|
-
padding-right:
|
|
210
|
+
padding-right: $grid-unit-05;
|
|
211
211
|
|
|
212
212
|
.components-button.has-icon {
|
|
213
213
|
height: 24px;
|
|
@@ -297,13 +297,27 @@
|
|
|
297
297
|
}
|
|
298
298
|
}
|
|
299
299
|
|
|
300
|
+
.block-editor-list-view-block-select-button__label-wrapper {
|
|
301
|
+
min-width: 120px;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
.block-editor-list-view-block-select-button__title {
|
|
305
|
+
flex: 1;
|
|
306
|
+
position: relative;
|
|
307
|
+
|
|
308
|
+
.components-truncate {
|
|
309
|
+
position: absolute;
|
|
310
|
+
width: 100%;
|
|
311
|
+
transform: translateY(-50%);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
|
|
300
315
|
.block-editor-list-view-block-select-button__anchor {
|
|
301
316
|
background: rgba($black, 0.1);
|
|
302
317
|
border-radius: $radius-block-ui;
|
|
303
318
|
display: inline-block;
|
|
304
319
|
padding: 2px 6px;
|
|
305
|
-
|
|
306
|
-
max-width: 120px;
|
|
320
|
+
max-width: min(100px, 40%);
|
|
307
321
|
overflow: hidden;
|
|
308
322
|
text-overflow: ellipsis;
|
|
309
323
|
}
|
|
@@ -71,6 +71,7 @@ export function MediaPlaceholder( {
|
|
|
71
71
|
onSelect,
|
|
72
72
|
onCancel,
|
|
73
73
|
onSelectURL,
|
|
74
|
+
onToggleFeaturedImage,
|
|
74
75
|
onDoubleClick,
|
|
75
76
|
onFilesPreUpload = noop,
|
|
76
77
|
onHTMLDrop = noop,
|
|
@@ -307,6 +308,22 @@ export function MediaPlaceholder( {
|
|
|
307
308
|
);
|
|
308
309
|
};
|
|
309
310
|
|
|
311
|
+
const renderFeaturedImageToggle = () => {
|
|
312
|
+
return (
|
|
313
|
+
onToggleFeaturedImage && (
|
|
314
|
+
<div className="block-editor-media-placeholder__url-input-container">
|
|
315
|
+
<Button
|
|
316
|
+
className="block-editor-media-placeholder__button"
|
|
317
|
+
onClick={ onToggleFeaturedImage }
|
|
318
|
+
variant="tertiary"
|
|
319
|
+
>
|
|
320
|
+
{ __( 'Use featured image' ) }
|
|
321
|
+
</Button>
|
|
322
|
+
</div>
|
|
323
|
+
)
|
|
324
|
+
);
|
|
325
|
+
};
|
|
326
|
+
|
|
310
327
|
const renderMediaUploadChecked = () => {
|
|
311
328
|
const defaultButton = ( { open } ) => {
|
|
312
329
|
return (
|
|
@@ -361,6 +378,7 @@ export function MediaPlaceholder( {
|
|
|
361
378
|
</Button>
|
|
362
379
|
{ uploadMediaLibraryButton }
|
|
363
380
|
{ renderUrlSelectionUI() }
|
|
381
|
+
{ renderFeaturedImageToggle() }
|
|
364
382
|
{ renderCancelLink() }
|
|
365
383
|
</>
|
|
366
384
|
);
|
|
@@ -389,6 +407,7 @@ export function MediaPlaceholder( {
|
|
|
389
407
|
</FormFileUpload>
|
|
390
408
|
{ uploadMediaLibraryButton }
|
|
391
409
|
{ renderUrlSelectionUI() }
|
|
410
|
+
{ renderFeaturedImageToggle() }
|
|
392
411
|
{ renderCancelLink() }
|
|
393
412
|
</>
|
|
394
413
|
);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* WordPress dependencies
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
4
|
+
import { useRef } from '@wordpress/element';
|
|
5
5
|
import { __ } from '@wordpress/i18n';
|
|
6
6
|
import { speak } from '@wordpress/a11y';
|
|
7
7
|
import {
|
|
@@ -55,7 +55,6 @@ const MediaReplaceFlow = ( {
|
|
|
55
55
|
addToGallery,
|
|
56
56
|
handleUpload = true,
|
|
57
57
|
} ) => {
|
|
58
|
-
const [ mediaURLValue, setMediaURLValue ] = useState( mediaURL );
|
|
59
58
|
const mediaUpload = useSelect( ( select ) => {
|
|
60
59
|
return select( blockEditorStore ).getSettings().mediaUpload;
|
|
61
60
|
}, [] );
|
|
@@ -88,7 +87,6 @@ const MediaReplaceFlow = ( {
|
|
|
88
87
|
onToggleFeaturedImage();
|
|
89
88
|
}
|
|
90
89
|
closeMenu();
|
|
91
|
-
setMediaURLValue( media?.url );
|
|
92
90
|
// Calling `onSelect` after the state update since it might unmount the component.
|
|
93
91
|
onSelect( media );
|
|
94
92
|
speak( __( 'The media file has been replaced' ) );
|
|
@@ -213,14 +211,13 @@ const MediaReplaceFlow = ( {
|
|
|
213
211
|
{ __( 'Current media URL:' ) }
|
|
214
212
|
</span>
|
|
215
213
|
|
|
216
|
-
<Tooltip text={
|
|
214
|
+
<Tooltip text={ mediaURL } position="bottom">
|
|
217
215
|
<div>
|
|
218
216
|
<LinkControl
|
|
219
|
-
value={ { url:
|
|
217
|
+
value={ { url: mediaURL } }
|
|
220
218
|
settings={ [] }
|
|
221
219
|
showSuggestions={ false }
|
|
222
220
|
onChange={ ( { url } ) => {
|
|
223
|
-
setMediaURLValue( url );
|
|
224
221
|
onSelectURL( url );
|
|
225
222
|
editMediaButtonRef.current.focus();
|
|
226
223
|
} }
|
|
@@ -3,6 +3,11 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { render, fireEvent } from '@testing-library/react';
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* WordPress dependencies
|
|
8
|
+
*/
|
|
9
|
+
import { useState } from '@wordpress/element';
|
|
10
|
+
|
|
6
11
|
/**
|
|
7
12
|
* Internal dependencies
|
|
8
13
|
*/
|
|
@@ -10,19 +15,24 @@ import MediaReplaceFlow from '../';
|
|
|
10
15
|
|
|
11
16
|
const noop = () => {};
|
|
12
17
|
|
|
13
|
-
function
|
|
14
|
-
const
|
|
18
|
+
function TestWrapper() {
|
|
19
|
+
const [ mediaURL, setMediaURL ] = useState( 'https://example.media' );
|
|
20
|
+
return (
|
|
15
21
|
<MediaReplaceFlow
|
|
16
22
|
mediaId={ 1 }
|
|
17
|
-
mediaURL={
|
|
23
|
+
mediaURL={ mediaURL }
|
|
18
24
|
allowedTypes={ [ 'png' ] }
|
|
19
25
|
accept="image/*"
|
|
20
26
|
onSelect={ noop }
|
|
21
|
-
onSelectURL={
|
|
27
|
+
onSelectURL={ setMediaURL }
|
|
22
28
|
onError={ noop }
|
|
23
29
|
onCloseModal={ noop }
|
|
24
30
|
/>
|
|
25
31
|
);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function setUpMediaReplaceFlow() {
|
|
35
|
+
const { container } = render( <TestWrapper /> );
|
|
26
36
|
return container;
|
|
27
37
|
}
|
|
28
38
|
|
|
@@ -3,8 +3,6 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { Platform } from 'react-native';
|
|
5
5
|
|
|
6
|
-
import { delay } from 'lodash';
|
|
7
|
-
|
|
8
6
|
import prompt from 'react-native-prompt-android';
|
|
9
7
|
|
|
10
8
|
/**
|
|
@@ -46,6 +44,8 @@ const URL_MEDIA_SOURCE = 'URL';
|
|
|
46
44
|
const PICKER_OPENING_DELAY = 200;
|
|
47
45
|
|
|
48
46
|
export class MediaUpload extends Component {
|
|
47
|
+
pickerTimeout;
|
|
48
|
+
|
|
49
49
|
constructor( props ) {
|
|
50
50
|
super( props );
|
|
51
51
|
this.onPickerPresent = this.onPickerPresent.bind( this );
|
|
@@ -78,6 +78,10 @@ export class MediaUpload extends Component {
|
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
80
|
|
|
81
|
+
componentWillUnmount() {
|
|
82
|
+
clearTimeout( this.pickerTimeout );
|
|
83
|
+
}
|
|
84
|
+
|
|
81
85
|
getAllSources() {
|
|
82
86
|
const { onSelectURL } = this.props;
|
|
83
87
|
|
|
@@ -189,7 +193,7 @@ export class MediaUpload extends Component {
|
|
|
189
193
|
// the delay below is required because on iOS this action sheet gets dismissed by the close event of the Inserter
|
|
190
194
|
// so this delay allows the Inserter to be closed fully before presenting action sheet.
|
|
191
195
|
if ( autoOpen && isIOS ) {
|
|
192
|
-
|
|
196
|
+
this.pickerTimeout = setTimeout(
|
|
193
197
|
() => this.picker.presentPicker(),
|
|
194
198
|
PICKER_OPENING_DELAY
|
|
195
199
|
);
|
|
@@ -115,9 +115,13 @@ export function useMouseMoveTypingReset() {
|
|
|
115
115
|
* field, presses ESC or TAB, or moves the mouse in the document.
|
|
116
116
|
*/
|
|
117
117
|
export function useTypingObserver() {
|
|
118
|
-
const isTyping = useSelect( ( select ) =>
|
|
119
|
-
select( blockEditorStore )
|
|
120
|
-
|
|
118
|
+
const { isTyping, hasInlineToolbar } = useSelect( ( select ) => {
|
|
119
|
+
const { isTyping: _isTyping, getSettings } = select( blockEditorStore );
|
|
120
|
+
return {
|
|
121
|
+
isTyping: _isTyping(),
|
|
122
|
+
hasInlineToolbar: getSettings().hasInlineToolbar,
|
|
123
|
+
};
|
|
124
|
+
}, [] );
|
|
121
125
|
const { startTyping, stopTyping } = useDispatch( blockEditorStore );
|
|
122
126
|
|
|
123
127
|
const ref1 = useMouseMoveTypingReset();
|
|
@@ -125,6 +129,7 @@ export function useTypingObserver() {
|
|
|
125
129
|
( node ) => {
|
|
126
130
|
const { ownerDocument } = node;
|
|
127
131
|
const { defaultView } = ownerDocument;
|
|
132
|
+
const selection = defaultView.getSelection();
|
|
128
133
|
|
|
129
134
|
// Listeners to stop typing should only be added when typing.
|
|
130
135
|
// Listeners to start typing should only be added when not typing.
|
|
@@ -170,22 +175,20 @@ export function useTypingObserver() {
|
|
|
170
175
|
* uncollapsed (shift) selection.
|
|
171
176
|
*/
|
|
172
177
|
function stopTypingOnSelectionUncollapse() {
|
|
173
|
-
|
|
174
|
-
const isCollapsed =
|
|
175
|
-
selection.rangeCount > 0 &&
|
|
176
|
-
selection.getRangeAt( 0 ).collapsed;
|
|
177
|
-
|
|
178
|
-
if ( ! isCollapsed ) {
|
|
178
|
+
if ( ! selection.isCollapsed ) {
|
|
179
179
|
stopTyping();
|
|
180
180
|
}
|
|
181
181
|
}
|
|
182
182
|
|
|
183
183
|
node.addEventListener( 'focus', stopTypingOnNonTextField );
|
|
184
184
|
node.addEventListener( 'keydown', stopTypingOnEscapeKey );
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
185
|
+
|
|
186
|
+
if ( ! hasInlineToolbar ) {
|
|
187
|
+
ownerDocument.addEventListener(
|
|
188
|
+
'selectionchange',
|
|
189
|
+
stopTypingOnSelectionUncollapse
|
|
190
|
+
);
|
|
191
|
+
}
|
|
189
192
|
|
|
190
193
|
return () => {
|
|
191
194
|
defaultView.clearTimeout( timerId );
|
|
@@ -242,7 +245,7 @@ export function useTypingObserver() {
|
|
|
242
245
|
node.removeEventListener( 'keydown', startTypingInTextField );
|
|
243
246
|
};
|
|
244
247
|
},
|
|
245
|
-
[ isTyping, startTyping, stopTyping ]
|
|
248
|
+
[ isTyping, hasInlineToolbar, startTyping, stopTyping ]
|
|
246
249
|
);
|
|
247
250
|
|
|
248
251
|
return useMergeRefs( [ ref1, ref2 ] );
|
|
@@ -33,10 +33,10 @@ export default function PreviewOptions( {
|
|
|
33
33
|
className: 'block-editor-post-preview__button-toggle',
|
|
34
34
|
disabled: ! isEnabled,
|
|
35
35
|
/* translators: button label text should, if possible, be under 16 characters. */
|
|
36
|
-
children: __( '
|
|
36
|
+
children: __( 'View' ),
|
|
37
37
|
};
|
|
38
38
|
const menuProps = {
|
|
39
|
-
'aria-label': __( '
|
|
39
|
+
'aria-label': __( 'View options' ),
|
|
40
40
|
};
|
|
41
41
|
return (
|
|
42
42
|
<DropdownMenu
|
|
@@ -1,12 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* WordPress dependencies
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
5
|
-
createContext,
|
|
6
|
-
useCallback,
|
|
7
|
-
useContext,
|
|
8
|
-
useMemo,
|
|
9
|
-
} from '@wordpress/element';
|
|
4
|
+
import { createContext, useContext, useMemo } from '@wordpress/element';
|
|
10
5
|
|
|
11
6
|
/**
|
|
12
7
|
* Internal dependencies
|
|
@@ -37,37 +32,53 @@ function addToBlockType( renderedBlocks, blockName, uniqueId ) {
|
|
|
37
32
|
}
|
|
38
33
|
|
|
39
34
|
/**
|
|
40
|
-
* A React
|
|
41
|
-
*
|
|
42
|
-
* function to prevent said recursion.
|
|
35
|
+
* A React context provider for use with the `useHasRecursion` hook to prevent recursive
|
|
36
|
+
* renders.
|
|
43
37
|
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
38
|
+
* Wrap block content with this provider and provide the same `uniqueId` prop as used
|
|
39
|
+
* with `useHasRecursion`.
|
|
40
|
+
*
|
|
41
|
+
* @param {Object} props
|
|
42
|
+
* @param {*} props.uniqueId Any value that acts as a unique identifier for a block instance.
|
|
43
|
+
* @param {string} props.blockName Optional block name.
|
|
44
|
+
* @param {JSX.Element} props.children React children.
|
|
46
45
|
*
|
|
47
|
-
* @return {
|
|
48
|
-
* - a boolean describing whether the provided id
|
|
49
|
-
* has already been rendered;
|
|
50
|
-
* - a React context provider to be used to wrap
|
|
51
|
-
* other elements.
|
|
46
|
+
* @return {JSX.Element} A React element.
|
|
52
47
|
*/
|
|
53
|
-
export
|
|
48
|
+
export function RecursionProvider( { children, uniqueId, blockName = '' } ) {
|
|
54
49
|
const previouslyRenderedBlocks = useContext( RenderedRefsContext );
|
|
55
50
|
const { name } = useBlockEditContext();
|
|
51
|
+
|
|
56
52
|
blockName = blockName || name;
|
|
57
|
-
|
|
58
|
-
previouslyRenderedBlocks[ blockName ]?.has( uniqueId )
|
|
59
|
-
);
|
|
53
|
+
|
|
60
54
|
const newRenderedBlocks = useMemo(
|
|
61
55
|
() => addToBlockType( previouslyRenderedBlocks, blockName, uniqueId ),
|
|
62
56
|
[ previouslyRenderedBlocks, blockName, uniqueId ]
|
|
63
57
|
);
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
),
|
|
70
|
-
[ newRenderedBlocks ]
|
|
58
|
+
|
|
59
|
+
return (
|
|
60
|
+
<RenderedRefsContext.Provider value={ newRenderedBlocks }>
|
|
61
|
+
{ children }
|
|
62
|
+
</RenderedRefsContext.Provider>
|
|
71
63
|
);
|
|
72
|
-
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* A React hook for keeping track of blocks previously rendered up in the block
|
|
68
|
+
* tree. Blocks susceptible to recursion can use this hook in their `Edit`
|
|
69
|
+
* function to prevent said recursion.
|
|
70
|
+
*
|
|
71
|
+
* Use this with the `RecursionProvider` component, using the same `uniqueId` value
|
|
72
|
+
* for both the hook and the provider.
|
|
73
|
+
*
|
|
74
|
+
* @param {*} uniqueId Any value that acts as a unique identifier for a block instance.
|
|
75
|
+
* @param {string} blockName Optional block name.
|
|
76
|
+
*
|
|
77
|
+
* @return {boolean} A boolean describing whether the provided id has already been rendered.
|
|
78
|
+
*/
|
|
79
|
+
export function useHasRecursion( uniqueId, blockName = '' ) {
|
|
80
|
+
const previouslyRenderedBlocks = useContext( RenderedRefsContext );
|
|
81
|
+
const { name } = useBlockEditContext();
|
|
82
|
+
blockName = blockName || name;
|
|
83
|
+
return Boolean( previouslyRenderedBlocks[ blockName ]?.has( uniqueId ) );
|
|
73
84
|
}
|
|
@@ -6,7 +6,7 @@ import { render } from '@testing-library/react';
|
|
|
6
6
|
/**
|
|
7
7
|
* Internal dependencies
|
|
8
8
|
*/
|
|
9
|
-
import
|
|
9
|
+
import { useHasRecursion, RecursionProvider } from '..';
|
|
10
10
|
import {
|
|
11
11
|
BlockEditContextProvider,
|
|
12
12
|
useBlockEditContext,
|
|
@@ -16,15 +16,14 @@ import {
|
|
|
16
16
|
// of calling itself depending on its `uniqueId` attribute.
|
|
17
17
|
function Edit( { attributes: { uniqueId } } ) {
|
|
18
18
|
const { name } = useBlockEditContext();
|
|
19
|
-
const
|
|
20
|
-
useNoRecursiveRenders( uniqueId );
|
|
19
|
+
const hasRecursion = useHasRecursion( uniqueId );
|
|
21
20
|
|
|
22
|
-
if (
|
|
21
|
+
if ( hasRecursion ) {
|
|
23
22
|
return <div className={ `wp-block__${ name }--halted` }>Halt</div>;
|
|
24
23
|
}
|
|
25
24
|
|
|
26
25
|
return (
|
|
27
|
-
<RecursionProvider>
|
|
26
|
+
<RecursionProvider uniqueId={ uniqueId }>
|
|
28
27
|
<div className={ `wp-block__${ name }` }>
|
|
29
28
|
{ uniqueId === 'SIMPLE' && <p>Done</p> }
|
|
30
29
|
{ uniqueId === 'SINGLY-RECURSIVE' && (
|
|
@@ -48,7 +47,7 @@ function Edit( { attributes: { uniqueId } } ) {
|
|
|
48
47
|
);
|
|
49
48
|
}
|
|
50
49
|
|
|
51
|
-
describe( '
|
|
50
|
+
describe( 'useHasRecursion/RecursionProvider', () => {
|
|
52
51
|
const context = { name: 'reusable-block' };
|
|
53
52
|
|
|
54
53
|
it( 'allows a single block to render', () => {
|
|
@@ -43,7 +43,19 @@ _Optional._ Called when the block can be removed. `forward` is true when the sel
|
|
|
43
43
|
|
|
44
44
|
### `allowedFormats: Array`
|
|
45
45
|
|
|
46
|
-
_Optional._ By default, all registered formats are allowed. This setting can be used to fine-tune the allowed formats. Example: `[ 'core/bold', 'core/link' ]`.
|
|
46
|
+
_Optional._ By default, all registered formats are allowed. This setting can be used to fine-tune the allowed formats. If you want to limit the formats allowed, you can specify using allowedFormats property in your code. If you want to allow only bold and italic settings, then you need to pass it in array. Example: `[ 'core/bold', 'core/link' ]`.
|
|
47
|
+
|
|
48
|
+
{% ESNext %}
|
|
49
|
+
|
|
50
|
+
```js
|
|
51
|
+
<RichText
|
|
52
|
+
tagName="h2"
|
|
53
|
+
value={ attributes.content }
|
|
54
|
+
allowedFormats={ [ 'core/bold', 'core/italic' ] } // Allow the content to be made bold or italic, but do not allow othe formatting options
|
|
55
|
+
onChange={ ( content ) => setAttributes( { content } ) }
|
|
56
|
+
placeholder={ __( 'Heading...' ) }
|
|
57
|
+
/>
|
|
58
|
+
```
|
|
47
59
|
|
|
48
60
|
### `withoutInteractiveFormatting: Boolean`
|
|
49
61
|
|
|
@@ -2,32 +2,81 @@
|
|
|
2
2
|
* WordPress dependencies
|
|
3
3
|
*/
|
|
4
4
|
import { Popover, ToolbarGroup } from '@wordpress/components';
|
|
5
|
+
import { useSelect } from '@wordpress/data';
|
|
6
|
+
import {
|
|
7
|
+
isCollapsed,
|
|
8
|
+
getActiveFormats,
|
|
9
|
+
useAnchorRef,
|
|
10
|
+
store as richTextStore,
|
|
11
|
+
} from '@wordpress/rich-text';
|
|
5
12
|
|
|
6
13
|
/**
|
|
7
14
|
* Internal dependencies
|
|
8
15
|
*/
|
|
9
16
|
import BlockControls from '../block-controls';
|
|
10
17
|
import FormatToolbar from './format-toolbar';
|
|
18
|
+
import { store as blockEditorStore } from '../../store';
|
|
19
|
+
|
|
20
|
+
function InlineSelectionToolbar( { value, anchorRef, activeFormats } ) {
|
|
21
|
+
const lastFormat = activeFormats[ activeFormats.length - 1 ];
|
|
22
|
+
const lastFormatType = lastFormat?.type;
|
|
23
|
+
const settings = useSelect(
|
|
24
|
+
( select ) => select( richTextStore ).getFormatType( lastFormatType ),
|
|
25
|
+
[ lastFormatType ]
|
|
26
|
+
);
|
|
27
|
+
const selectionRef = useAnchorRef( {
|
|
28
|
+
ref: anchorRef,
|
|
29
|
+
value,
|
|
30
|
+
settings,
|
|
31
|
+
} );
|
|
32
|
+
|
|
33
|
+
return <InlineToolbar anchorRef={ selectionRef } />;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function InlineToolbar( { anchorRef } ) {
|
|
37
|
+
return (
|
|
38
|
+
<Popover
|
|
39
|
+
position="top center"
|
|
40
|
+
focusOnMount={ false }
|
|
41
|
+
anchorRef={ anchorRef }
|
|
42
|
+
className="block-editor-rich-text__inline-format-toolbar"
|
|
43
|
+
__unstableSlotName="block-toolbar"
|
|
44
|
+
>
|
|
45
|
+
<div className="block-editor-rich-text__inline-format-toolbar-group">
|
|
46
|
+
<ToolbarGroup>
|
|
47
|
+
<FormatToolbar />
|
|
48
|
+
</ToolbarGroup>
|
|
49
|
+
</div>
|
|
50
|
+
</Popover>
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const FormatToolbarContainer = ( { inline, anchorRef, value } ) => {
|
|
55
|
+
const hasInlineToolbar = useSelect(
|
|
56
|
+
( select ) => select( blockEditorStore ).getSettings().hasInlineToolbar,
|
|
57
|
+
[]
|
|
58
|
+
);
|
|
11
59
|
|
|
12
|
-
const FormatToolbarContainer = ( { inline, anchorRef } ) => {
|
|
13
60
|
if ( inline ) {
|
|
14
|
-
|
|
61
|
+
return <InlineToolbar anchorRef={ anchorRef } />;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if ( hasInlineToolbar ) {
|
|
65
|
+
const activeFormats = getActiveFormats( value );
|
|
66
|
+
|
|
67
|
+
if ( isCollapsed( value ) && ! activeFormats.length ) {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
|
|
15
71
|
return (
|
|
16
|
-
<
|
|
17
|
-
position="top center"
|
|
18
|
-
focusOnMount={ false }
|
|
72
|
+
<InlineSelectionToolbar
|
|
19
73
|
anchorRef={ anchorRef }
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
<div className="block-editor-rich-text__inline-format-toolbar-group">
|
|
24
|
-
<ToolbarGroup>
|
|
25
|
-
<FormatToolbar />
|
|
26
|
-
</ToolbarGroup>
|
|
27
|
-
</div>
|
|
28
|
-
</Popover>
|
|
74
|
+
value={ value }
|
|
75
|
+
activeFormats={ activeFormats }
|
|
76
|
+
/>
|
|
29
77
|
);
|
|
30
78
|
}
|
|
79
|
+
|
|
31
80
|
// Render regular toolbar.
|
|
32
81
|
return (
|
|
33
82
|
<BlockControls group="inline">
|
|
@@ -38,6 +38,7 @@ import { store as blockEditorStore } from '../../store';
|
|
|
38
38
|
import { useUndoAutomaticChange } from './use-undo-automatic-change';
|
|
39
39
|
import { useMarkPersistent } from './use-mark-persistent';
|
|
40
40
|
import { usePasteHandler } from './use-paste-handler';
|
|
41
|
+
import { useBeforeInputRules } from './use-before-input-rules';
|
|
41
42
|
import { useInputRules } from './use-input-rules';
|
|
42
43
|
import { useEnter } from './use-enter';
|
|
43
44
|
import { useFormatTypes } from './use-format-types';
|
|
@@ -344,6 +345,7 @@ function RichTextWrapper(
|
|
|
344
345
|
<FormatToolbarContainer
|
|
345
346
|
inline={ inlineToolbar }
|
|
346
347
|
anchorRef={ anchorRef }
|
|
348
|
+
value={ value }
|
|
347
349
|
/>
|
|
348
350
|
) }
|
|
349
351
|
<TagName
|
|
@@ -358,6 +360,7 @@ function RichTextWrapper(
|
|
|
358
360
|
autocompleteProps.ref,
|
|
359
361
|
props.ref,
|
|
360
362
|
richTextRef,
|
|
363
|
+
useBeforeInputRules( { value, onChange } ),
|
|
361
364
|
useInputRules( {
|
|
362
365
|
value,
|
|
363
366
|
onChange,
|
|
@@ -113,6 +113,7 @@ function RichTextWrapper(
|
|
|
113
113
|
setRef,
|
|
114
114
|
disableSuggestions,
|
|
115
115
|
disableAutocorrection,
|
|
116
|
+
containerWidth,
|
|
116
117
|
...props
|
|
117
118
|
},
|
|
118
119
|
forwardedRef
|
|
@@ -639,6 +640,7 @@ function RichTextWrapper(
|
|
|
639
640
|
setRef={ setRef }
|
|
640
641
|
disableSuggestions={ disableSuggestions }
|
|
641
642
|
disableAutocorrection={ disableAutocorrection }
|
|
643
|
+
containerWidth={ containerWidth }
|
|
642
644
|
// Props to be set on the editable container are destructured on the
|
|
643
645
|
// element itself for web (see below), but passed through rich text
|
|
644
646
|
// for native.
|