@wordpress/block-editor 9.5.0 → 9.7.1-next.d6164808d3.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 +4 -0
- package/build/components/block-alignment-control/use-available-alignments.js +1 -1
- package/build/components/block-alignment-control/use-available-alignments.js.map +1 -1
- package/build/components/block-edit-visually-button/index.js +46 -0
- package/build/components/block-edit-visually-button/index.js.map +1 -0
- package/build/components/block-list/block.js +12 -2
- package/build/components/block-list/block.js.map +1 -1
- package/build/components/block-list/index.native.js +1 -1
- package/build/components/block-list/index.native.js.map +1 -1
- package/build/components/block-lock/modal.js +2 -2
- 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-popover/inbetween.js +5 -3
- package/build/components/block-popover/inbetween.js.map +1 -1
- package/build/components/block-settings-menu/index.js +2 -6
- package/build/components/block-settings-menu/index.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 +1 -3
- package/build/components/block-styles/preview.native.js.map +1 -1
- package/build/components/block-switcher/index.js +10 -16
- package/build/components/block-switcher/index.js.map +1 -1
- package/build/components/block-toolbar/index.js +5 -1
- package/build/components/block-toolbar/index.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/all-input-control.js +31 -3
- package/build/components/border-radius-control/all-input-control.js.map +1 -1
- package/build/components/border-radius-control/index.js +23 -7
- package/build/components/border-radius-control/index.js.map +1 -1
- package/build/components/border-radius-control/input-controls.js +21 -6
- package/build/components/border-radius-control/input-controls.js.map +1 -1
- package/build/components/border-radius-control/utils.js +13 -16
- package/build/components/border-radius-control/utils.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 +17 -4
- package/build/components/colors/with-colors.js.map +1 -1
- package/build/components/colors-gradients/control.js +8 -4
- 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/copy-handler/index.js +6 -0
- package/build/components/copy-handler/index.js.map +1 -1
- package/build/components/date-format-picker/index.js +2 -7
- package/build/components/date-format-picker/index.js.map +1 -1
- package/build/components/duotone/components.js +5 -5
- package/build/components/duotone/components.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/font-family/index.js +1 -1
- package/build/components/font-family/index.js.map +1 -1
- package/build/components/font-sizes/with-font-sizes.js +17 -4
- package/build/components/font-sizes/with-font-sizes.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 +22 -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-items.js +22 -4
- package/build/components/inserter/search-items.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/is-url-like.js +1 -7
- package/build/components/link-control/is-url-like.js.map +1 -1
- package/build/components/link-control/link-preview.js +0 -1
- package/build/components/link-control/link-preview.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 +5 -2
- 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/expander.js +3 -1
- package/build/components/list-view/expander.js.map +1 -1
- package/build/components/list-view/use-block-selection.js +1 -7
- package/build/components/list-view/use-block-selection.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-enter.js +0 -4
- package/build/components/rich-text/use-enter.js.map +1 -1
- package/build/components/rich-text/use-format-types.js +39 -22
- package/build/components/rich-text/use-format-types.js.map +1 -1
- package/build/components/spacing-sizes-control/all-input-control.js +53 -0
- package/build/components/spacing-sizes-control/all-input-control.js.map +1 -0
- package/build/components/spacing-sizes-control/axial-input-controls.js +69 -0
- package/build/components/spacing-sizes-control/axial-input-controls.js.map +1 -0
- package/build/components/spacing-sizes-control/index.js +100 -0
- package/build/components/spacing-sizes-control/index.js.map +1 -0
- package/build/components/spacing-sizes-control/input-controls.js +52 -0
- package/build/components/spacing-sizes-control/input-controls.js.map +1 -0
- package/build/components/spacing-sizes-control/linked-button.js +38 -0
- package/build/components/spacing-sizes-control/linked-button.js.map +1 -0
- package/build/components/spacing-sizes-control/spacing-input-control.js +208 -0
- package/build/components/spacing-sizes-control/spacing-input-control.js.map +1 -0
- package/build/components/spacing-sizes-control/utils.js +202 -0
- package/build/components/spacing-sizes-control/utils.js.map +1 -0
- 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-input/index.js +1 -1
- package/build/components/url-input/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/writing-flow/use-arrow-nav.js +4 -25
- 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 +4 -2
- 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 +10 -2
- 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/border-radius.js +2 -7
- package/build/hooks/border-radius.js.map +1 -1
- package/build/hooks/border.js +2 -2
- package/build/hooks/border.js.map +1 -1
- package/build/hooks/color.js +4 -1
- package/build/hooks/color.js.map +1 -1
- package/build/hooks/dimensions.js +15 -0
- package/build/hooks/dimensions.js.map +1 -1
- package/build/hooks/duotone.js +4 -4
- package/build/hooks/duotone.js.map +1 -1
- package/build/hooks/gap.js +6 -4
- package/build/hooks/gap.js.map +1 -1
- package/build/hooks/generated-class-name.js +1 -7
- package/build/hooks/generated-class-name.js.map +1 -1
- package/build/hooks/layout.js +42 -15
- package/build/hooks/layout.js.map +1 -1
- package/build/hooks/margin.js +28 -12
- package/build/hooks/margin.js.map +1 -1
- package/build/hooks/padding.js +19 -8
- package/build/hooks/padding.js.map +1 -1
- package/build/hooks/style.js +40 -76
- package/build/hooks/style.js.map +1 -1
- package/build/layouts/constrained.js +215 -0
- package/build/layouts/constrained.js.map +1 -0
- package/build/layouts/flex.js +1 -1
- package/build/layouts/flex.js.map +1 -1
- package/build/layouts/flow.js +6 -145
- package/build/layouts/flow.js.map +1 -1
- package/build/layouts/index.js +3 -1
- package/build/layouts/index.js.map +1 -1
- package/build/layouts/utils.js +43 -0
- package/build/layouts/utils.js.map +1 -1
- package/build/store/actions.js +25 -3
- package/build/store/actions.js.map +1 -1
- package/build/store/selectors.js +4 -6
- 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-alignment-control/use-available-alignments.js +1 -1
- package/build-module/components/block-alignment-control/use-available-alignments.js.map +1 -1
- package/build-module/components/block-edit-visually-button/index.js +35 -0
- package/build-module/components/block-edit-visually-button/index.js.map +1 -0
- package/build-module/components/block-list/block.js +13 -3
- package/build-module/components/block-list/block.js.map +1 -1
- package/build-module/components/block-list/index.native.js +1 -1
- package/build-module/components/block-list/index.native.js.map +1 -1
- package/build-module/components/block-lock/modal.js +2 -2
- 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-popover/inbetween.js +5 -3
- package/build-module/components/block-popover/inbetween.js.map +1 -1
- package/build-module/components/block-settings-menu/index.js +3 -6
- package/build-module/components/block-settings-menu/index.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 +2 -3
- package/build-module/components/block-styles/preview.native.js.map +1 -1
- package/build-module/components/block-switcher/index.js +10 -16
- package/build-module/components/block-switcher/index.js.map +1 -1
- package/build-module/components/block-toolbar/index.js +4 -1
- package/build-module/components/block-toolbar/index.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/all-input-control.js +32 -4
- package/build-module/components/border-radius-control/all-input-control.js.map +1 -1
- package/build-module/components/border-radius-control/index.js +24 -8
- package/build-module/components/border-radius-control/index.js.map +1 -1
- package/build-module/components/border-radius-control/input-controls.js +22 -7
- package/build-module/components/border-radius-control/input-controls.js.map +1 -1
- package/build-module/components/border-radius-control/utils.js +13 -16
- package/build-module/components/border-radius-control/utils.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 +16 -3
- package/build-module/components/colors/with-colors.js.map +1 -1
- package/build-module/components/colors-gradients/control.js +8 -4
- 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/copy-handler/index.js +7 -1
- package/build-module/components/copy-handler/index.js.map +1 -1
- package/build-module/components/date-format-picker/index.js +2 -6
- package/build-module/components/date-format-picker/index.js.map +1 -1
- package/build-module/components/duotone/components.js +5 -5
- package/build-module/components/duotone/components.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/font-family/index.js +1 -1
- package/build-module/components/font-family/index.js.map +1 -1
- package/build-module/components/font-sizes/with-font-sizes.js +16 -3
- package/build-module/components/font-sizes/with-font-sizes.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 +2 -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-items.js +19 -5
- package/build-module/components/inserter/search-items.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/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/link-preview.js +0 -1
- package/build-module/components/link-control/link-preview.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 +5 -2
- 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/expander.js +3 -2
- package/build-module/components/list-view/expander.js.map +1 -1
- package/build-module/components/list-view/use-block-selection.js +1 -6
- package/build-module/components/list-view/use-block-selection.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-enter.js +0 -4
- package/build-module/components/rich-text/use-enter.js.map +1 -1
- package/build-module/components/rich-text/use-format-types.js +39 -22
- package/build-module/components/rich-text/use-format-types.js.map +1 -1
- package/build-module/components/spacing-sizes-control/all-input-control.js +41 -0
- package/build-module/components/spacing-sizes-control/all-input-control.js.map +1 -0
- package/build-module/components/spacing-sizes-control/axial-input-controls.js +57 -0
- package/build-module/components/spacing-sizes-control/axial-input-controls.js.map +1 -0
- package/build-module/components/spacing-sizes-control/index.js +83 -0
- package/build-module/components/spacing-sizes-control/index.js.map +1 -0
- package/build-module/components/spacing-sizes-control/input-controls.js +41 -0
- package/build-module/components/spacing-sizes-control/input-controls.js.map +1 -0
- package/build-module/components/spacing-sizes-control/linked-button.js +28 -0
- package/build-module/components/spacing-sizes-control/linked-button.js.map +1 -0
- package/build-module/components/spacing-sizes-control/spacing-input-control.js +192 -0
- package/build-module/components/spacing-sizes-control/spacing-input-control.js.map +1 -0
- package/build-module/components/spacing-sizes-control/utils.js +174 -0
- package/build-module/components/spacing-sizes-control/utils.js.map +1 -0
- 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-input/index.js +1 -1
- package/build-module/components/url-input/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/writing-flow/use-arrow-nav.js +5 -26
- 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 +4 -2
- 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 +10 -2
- 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/border-radius.js +2 -7
- package/build-module/hooks/border-radius.js.map +1 -1
- package/build-module/hooks/border.js +2 -2
- package/build-module/hooks/border.js.map +1 -1
- package/build-module/hooks/color.js +4 -1
- package/build-module/hooks/color.js.map +1 -1
- package/build-module/hooks/dimensions.js +13 -0
- package/build-module/hooks/dimensions.js.map +1 -1
- package/build-module/hooks/duotone.js +4 -4
- package/build-module/hooks/duotone.js.map +1 -1
- package/build-module/hooks/gap.js +3 -2
- package/build-module/hooks/gap.js.map +1 -1
- package/build-module/hooks/generated-class-name.js +1 -6
- package/build-module/hooks/generated-class-name.js.map +1 -1
- package/build-module/hooks/layout.js +42 -15
- package/build-module/hooks/layout.js.map +1 -1
- package/build-module/hooks/margin.js +26 -12
- package/build-module/hooks/margin.js.map +1 -1
- package/build-module/hooks/padding.js +17 -8
- package/build-module/hooks/padding.js.map +1 -1
- package/build-module/hooks/style.js +44 -81
- package/build-module/hooks/style.js.map +1 -1
- package/build-module/layouts/constrained.js +197 -0
- package/build-module/layouts/constrained.js.map +1 -0
- package/build-module/layouts/flex.js +1 -1
- package/build-module/layouts/flex.js.map +1 -1
- package/build-module/layouts/flow.js +7 -140
- package/build-module/layouts/flow.js.map +1 -1
- package/build-module/layouts/index.js +2 -1
- package/build-module/layouts/index.js.map +1 -1
- package/build-module/layouts/utils.js +40 -0
- package/build-module/layouts/utils.js.map +1 -1
- package/build-module/store/actions.js +25 -3
- package/build-module/store/actions.js.map +1 -1
- package/build-module/store/selectors.js +5 -7
- 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 +154 -27
- package/build-style/style.css +154 -27
- package/package.json +30 -28
- package/src/components/block-alignment-control/use-available-alignments.js +1 -1
- package/src/components/block-edit-visually-button/index.js +39 -0
- package/src/components/block-list/block.js +13 -2
- package/src/components/block-list/index.native.js +1 -1
- package/src/components/block-lock/modal.js +5 -5
- 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-popover/inbetween.js +5 -1
- package/src/components/block-popover/style.scss +25 -2
- package/src/components/block-settings-menu/index.js +11 -15
- 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 +2 -2
- package/src/components/block-styles/style.scss +10 -0
- package/src/components/block-switcher/index.js +9 -13
- package/src/components/block-switcher/test/index.js +1 -0
- package/src/components/block-toolbar/index.js +2 -0
- 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/all-input-control.js +41 -4
- package/src/components/border-radius-control/index.js +29 -6
- package/src/components/border-radius-control/input-controls.js +40 -13
- package/src/components/border-radius-control/test/utils.js +22 -60
- package/src/components/border-radius-control/utils.js +12 -16
- 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 +11 -1
- package/src/components/colors-gradients/control.js +13 -8
- package/src/components/colors-gradients/dropdown.js +14 -3
- package/src/components/colors-gradients/style.scss +33 -12
- package/src/components/colors-gradients/test/control.js +3 -3
- package/src/components/copy-handler/index.js +18 -0
- package/src/components/date-format-picker/index.js +12 -14
- package/src/components/date-format-picker/style.scss +0 -4
- package/src/components/duotone/components.js +5 -5
- package/src/components/duotone-control/style.scss +0 -4
- package/src/components/font-appearance-control/index.js +3 -0
- package/src/components/font-appearance-control/style.scss +0 -2
- package/src/components/font-family/index.js +1 -1
- package/src/components/font-sizes/with-font-sizes.js +11 -1
- 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 +5 -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-items.js +17 -5
- package/src/components/inserter/search-results.native.js +4 -2
- 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/is-url-like.js +1 -6
- package/src/components/link-control/link-preview.js +0 -1
- package/src/components/link-control/test/index.js +540 -893
- package/src/components/link-control/use-search-handler.js +1 -6
- package/src/components/list-view/block-select-button.js +7 -2
- package/src/components/list-view/branch.js +1 -6
- package/src/components/list-view/expander.js +4 -2
- package/src/components/list-view/style.scss +11 -4
- package/src/components/list-view/use-block-selection.js +2 -8
- package/src/components/media-replace-flow/style.scss +1 -0
- 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-enter.js +0 -3
- package/src/components/rich-text/use-format-types.js +38 -17
- package/src/components/spacing-sizes-control/all-input-control.js +40 -0
- package/src/components/spacing-sizes-control/axial-input-controls.js +62 -0
- package/src/components/spacing-sizes-control/index.js +91 -0
- package/src/components/spacing-sizes-control/input-controls.js +46 -0
- package/src/components/spacing-sizes-control/linked-button.js +25 -0
- package/src/components/spacing-sizes-control/spacing-input-control.js +280 -0
- package/src/components/spacing-sizes-control/style.scss +122 -0
- package/src/components/spacing-sizes-control/test/utils.js +156 -0
- package/src/components/spacing-sizes-control/utils.js +195 -0
- package/src/components/text-decoration-control/index.js +4 -2
- package/src/components/text-transform-control/index.js +4 -2
- package/src/components/url-input/index.js +1 -1
- package/src/components/url-input/style.scss +2 -2
- package/src/components/url-popover/image-url-input-ui.js +3 -0
- package/src/components/url-popover/style.scss +0 -3
- package/src/components/writing-flow/use-arrow-nav.js +4 -33
- package/src/components/writing-flow/use-drag-selection.js +7 -1
- package/src/components/writing-flow/use-multi-selection.js +4 -1
- package/src/components/writing-flow/use-select-all.js +2 -1
- package/src/components/writing-flow/use-selection-observer.js +10 -2
- package/src/components/writing-flow/use-tab-nav.js +1 -1
- package/src/hooks/border-radius.js +2 -6
- package/src/hooks/border.js +2 -2
- package/src/hooks/color.js +13 -3
- package/src/hooks/dimensions.js +15 -0
- package/src/hooks/duotone.js +4 -4
- package/src/hooks/gap.js +7 -2
- package/src/hooks/generated-class-name.js +6 -9
- package/src/hooks/layout.js +66 -18
- package/src/hooks/margin.js +49 -17
- package/src/hooks/padding.js +41 -14
- package/src/hooks/style.js +42 -86
- package/src/hooks/test/gap.js +22 -0
- package/src/hooks/typography.scss +0 -1
- package/src/layouts/constrained.js +217 -0
- package/src/layouts/flex.js +1 -1
- package/src/layouts/flow.js +6 -151
- package/src/layouts/index.js +2 -1
- package/src/layouts/test/constrained.js +21 -0
- package/src/layouts/utils.js +34 -0
- package/src/store/actions.js +32 -4
- package/src/store/selectors.js +5 -4
- package/src/style.scss +1 -0
- 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/build/components/block-settings-menu/block-edit-visually-button.js +0 -70
- package/build/components/block-settings-menu/block-edit-visually-button.js.map +0 -1
- package/build/components/use-no-recursive-renders/index.js.map +0 -1
- package/build-module/components/block-settings-menu/block-edit-visually-button.js +0 -56
- package/build-module/components/block-settings-menu/block-edit-visually-button.js.map +0 -1
- package/build-module/components/use-no-recursive-renders/index.js.map +0 -1
- package/src/components/block-settings-menu/block-edit-visually-button.js +0 -52
|
@@ -5,11 +5,6 @@ import { getProtocol, prependHTTP } from '@wordpress/url';
|
|
|
5
5
|
import { useCallback } from '@wordpress/element';
|
|
6
6
|
import { useSelect } from '@wordpress/data';
|
|
7
7
|
|
|
8
|
-
/**
|
|
9
|
-
* External dependencies
|
|
10
|
-
*/
|
|
11
|
-
import { startsWith } from 'lodash';
|
|
12
|
-
|
|
13
8
|
/**
|
|
14
9
|
* Internal dependencies
|
|
15
10
|
*/
|
|
@@ -38,7 +33,7 @@ export const handleDirectEntry = ( val ) => {
|
|
|
38
33
|
type = TEL_TYPE;
|
|
39
34
|
}
|
|
40
35
|
|
|
41
|
-
if ( startsWith(
|
|
36
|
+
if ( val?.startsWith( '#' ) ) {
|
|
42
37
|
type = INTERNAL_TYPE;
|
|
43
38
|
}
|
|
44
39
|
|
|
@@ -90,8 +90,13 @@ function ListViewBlockSelectButton(
|
|
|
90
90
|
<Truncate ellipsizeMode="auto">{ blockTitle }</Truncate>
|
|
91
91
|
</span>
|
|
92
92
|
{ blockInformation?.anchor && (
|
|
93
|
-
<span className="block-editor-list-view-block-select-button__anchor">
|
|
94
|
-
|
|
93
|
+
<span className="block-editor-list-view-block-select-button__anchor-wrapper">
|
|
94
|
+
<Truncate
|
|
95
|
+
className="block-editor-list-view-block-select-button__anchor"
|
|
96
|
+
ellipsizeMode="auto"
|
|
97
|
+
>
|
|
98
|
+
{ blockInformation.anchor }
|
|
99
|
+
</Truncate>
|
|
95
100
|
</span>
|
|
96
101
|
) }
|
|
97
102
|
{ isLocked && (
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* External dependencies
|
|
3
|
-
*/
|
|
4
|
-
import { compact } from 'lodash';
|
|
5
|
-
|
|
6
1
|
/**
|
|
7
2
|
* WordPress dependencies
|
|
8
3
|
*/
|
|
@@ -95,7 +90,7 @@ function ListViewBranch( props ) {
|
|
|
95
90
|
|
|
96
91
|
const { expandedState, draggedClientIds } = useListViewContext();
|
|
97
92
|
|
|
98
|
-
const filteredBlocks =
|
|
93
|
+
const filteredBlocks = blocks.filter( Boolean );
|
|
99
94
|
const blockCount = filteredBlocks.length;
|
|
100
95
|
let nextPosition = listPosition;
|
|
101
96
|
|
|
@@ -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
|
}
|
|
@@ -312,14 +312,21 @@
|
|
|
312
312
|
}
|
|
313
313
|
}
|
|
314
314
|
|
|
315
|
+
.block-editor-list-view-block-select-button__anchor-wrapper {
|
|
316
|
+
position: relative;
|
|
317
|
+
max-width: min(110px, 40%);
|
|
318
|
+
width: 100%;
|
|
319
|
+
}
|
|
320
|
+
|
|
315
321
|
.block-editor-list-view-block-select-button__anchor {
|
|
322
|
+
position: absolute;
|
|
323
|
+
right: 0;
|
|
324
|
+
transform: translateY(-50%);
|
|
316
325
|
background: rgba($black, 0.1);
|
|
317
326
|
border-radius: $radius-block-ui;
|
|
318
|
-
display: inline-block;
|
|
319
327
|
padding: 2px 6px;
|
|
320
|
-
max-width:
|
|
321
|
-
|
|
322
|
-
text-overflow: ellipsis;
|
|
328
|
+
max-width: 100%;
|
|
329
|
+
box-sizing: border-box;
|
|
323
330
|
}
|
|
324
331
|
|
|
325
332
|
&.is-selected .block-editor-list-view-block-select-button__anchor {
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* External dependencies
|
|
3
|
-
*/
|
|
4
|
-
import { difference } from 'lodash';
|
|
5
|
-
|
|
6
1
|
/**
|
|
7
2
|
* WordPress dependencies
|
|
8
3
|
*/
|
|
@@ -126,9 +121,8 @@ export default function useBlockSelection() {
|
|
|
126
121
|
return;
|
|
127
122
|
}
|
|
128
123
|
|
|
129
|
-
const selectionDiff =
|
|
130
|
-
|
|
131
|
-
updatedSelectedBlocks
|
|
124
|
+
const selectionDiff = selectedBlocks.filter(
|
|
125
|
+
( blockId ) => ! updatedSelectedBlocks.includes( blockId )
|
|
132
126
|
);
|
|
133
127
|
|
|
134
128
|
let label;
|
|
@@ -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.
|
|
@@ -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
|
+
}
|