@wordpress/block-editor 9.4.0 → 9.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/README.md +1 -8
- package/build/components/block-list/block-invalid-warning.native.js +54 -6
- package/build/components/block-list/block-invalid-warning.native.js.map +1 -1
- package/build/components/block-list/block.js +14 -4
- package/build/components/block-list/block.js.map +1 -1
- package/build/components/block-list/block.native.js +2 -1
- package/build/components/block-list/block.native.js.map +1 -1
- package/build/components/block-list/index.native.js +5 -4
- package/build/components/block-list/index.native.js.map +1 -1
- package/build/components/block-list/layout.js +20 -5
- package/build/components/block-list/layout.js.map +1 -1
- package/build/components/block-list/use-block-props/use-block-class-names.js +5 -2
- package/build/components/block-list/use-block-props/use-block-class-names.js.map +1 -1
- package/build/components/block-lock/modal.js +37 -7
- package/build/components/block-lock/modal.js.map +1 -1
- package/build/components/block-mobile-toolbar/block-actions-menu.native.js +1 -1
- package/build/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
- package/build/components/block-mover/mover-description.js +95 -32
- package/build/components/block-mover/mover-description.js.map +1 -1
- package/build/components/block-pattern-setup/index.js +5 -17
- package/build/components/block-pattern-setup/index.js.map +1 -1
- package/build/components/block-popover/inbetween.js +2 -2
- package/build/components/block-popover/inbetween.js.map +1 -1
- package/build/components/block-popover/index.js +1 -1
- package/build/components/block-popover/index.js.map +1 -1
- package/build/components/block-settings-menu/block-mode-toggle.js +1 -1
- package/build/components/block-settings-menu/block-mode-toggle.js.map +1 -1
- package/build/components/block-settings-menu/block-settings-dropdown.js +4 -1
- package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
- package/build/components/block-settings-menu-controls/index.js +1 -1
- package/build/components/block-settings-menu-controls/index.js.map +1 -1
- package/build/components/block-styles/index.js +3 -6
- package/build/components/block-styles/index.js.map +1 -1
- package/build/components/block-styles/preview.native.js.map +1 -1
- package/build/components/block-switcher/index.js +7 -1
- package/build/components/block-switcher/index.js.map +1 -1
- package/build/components/block-title/index.js +8 -2
- package/build/components/block-title/index.js.map +1 -1
- package/build/components/block-title/use-block-display-title.js +12 -5
- package/build/components/block-title/use-block-display-title.js.map +1 -1
- package/build/components/block-tools/block-contextual-toolbar.js +1 -1
- package/build/components/block-tools/block-contextual-toolbar.js.map +1 -1
- package/build/components/block-tools/block-selection-button.js +1 -7
- package/build/components/block-tools/block-selection-button.js.map +1 -1
- package/build/components/block-tools/index.js +4 -1
- package/build/components/block-tools/index.js.map +1 -1
- package/build/components/block-types-list/index.js +1 -1
- package/build/components/block-types-list/index.js.map +1 -1
- package/build/components/block-types-list/index.native.js +65 -23
- package/build/components/block-types-list/index.native.js.map +1 -1
- package/build/components/border-radius-control/index.js +5 -1
- package/build/components/border-radius-control/index.js.map +1 -1
- package/build/components/colors/utils.js +6 -2
- package/build/components/colors/utils.js.map +1 -1
- package/build/components/colors/with-colors.js +1 -1
- package/build/components/colors/with-colors.js.map +1 -1
- package/build/components/colors-gradients/control.js +49 -39
- package/build/components/colors-gradients/control.js.map +1 -1
- package/build/components/colors-gradients/dropdown.js +9 -3
- package/build/components/colors-gradients/dropdown.js.map +1 -1
- package/build/components/date-format-picker/index.js +1 -1
- package/build/components/date-format-picker/index.js.map +1 -1
- package/build/components/font-appearance-control/index.js +10 -4
- package/build/components/font-appearance-control/index.js.map +1 -1
- package/build/components/iframe/index.js +19 -6
- package/build/components/iframe/index.js.map +1 -1
- package/build/components/image-editor/cropper.js +4 -3
- package/build/components/image-editor/cropper.js.map +1 -1
- package/build/components/image-editor/index.js +3 -1
- package/build/components/image-editor/index.js.map +1 -1
- package/build/components/image-size-control/index.js +3 -1
- package/build/components/image-size-control/index.js.map +1 -1
- package/build/components/index.js +13 -6
- package/build/components/index.js.map +1 -1
- package/build/components/index.native.js +11 -4
- package/build/components/index.native.js.map +1 -1
- package/build/components/inserter/block-types-tab.native.js +30 -16
- package/build/components/inserter/block-types-tab.native.js.map +1 -1
- package/build/components/inserter/index.native.js +8 -3
- package/build/components/inserter/index.native.js.map +1 -1
- package/build/components/inserter/preview-panel.js +8 -8
- package/build/components/inserter/preview-panel.js.map +1 -1
- package/build/components/inserter/reusable-blocks-tab.native.js +5 -1
- package/build/components/inserter/reusable-blocks-tab.native.js.map +1 -1
- package/build/components/inserter/search-results.native.js +5 -2
- package/build/components/inserter/search-results.native.js.map +1 -1
- package/build/components/inserter/utils.native.js +21 -0
- package/build/components/inserter/utils.native.js.map +1 -1
- package/build/components/inserter-list-item/index.js +7 -20
- package/build/components/inserter-list-item/index.js.map +1 -1
- package/build/components/letter-spacing-control/index.js +6 -3
- package/build/components/letter-spacing-control/index.js.map +1 -1
- package/build/components/line-height-control/index.js +6 -3
- package/build/components/line-height-control/index.js.map +1 -1
- package/build/components/link-control/index.js +1 -1
- package/build/components/link-control/index.js.map +1 -1
- package/build/components/link-control/is-url-like.js +1 -7
- package/build/components/link-control/is-url-like.js.map +1 -1
- package/build/components/link-control/use-search-handler.js +1 -7
- package/build/components/link-control/use-search-handler.js.map +1 -1
- package/build/components/list-view/block-select-button.js +15 -7
- package/build/components/list-view/block-select-button.js.map +1 -1
- package/build/components/list-view/branch.js +1 -7
- package/build/components/list-view/branch.js.map +1 -1
- package/build/components/list-view/drop-indicator.js +1 -1
- package/build/components/list-view/drop-indicator.js.map +1 -1
- package/build/components/list-view/expander.js +3 -1
- package/build/components/list-view/expander.js.map +1 -1
- package/build/components/media-placeholder/index.js +13 -2
- package/build/components/media-placeholder/index.js.map +1 -1
- package/build/components/media-replace-flow/index.js +3 -6
- package/build/components/media-replace-flow/index.js.map +1 -1
- package/build/components/media-upload/index.native.js +8 -3
- package/build/components/media-upload/index.native.js.map +1 -1
- package/build/components/observe-typing/index.js +22 -8
- package/build/components/observe-typing/index.js.map +1 -1
- package/build/components/preview-options/index.js +2 -2
- package/build/components/preview-options/index.js.map +1 -1
- package/build/components/{use-no-recursive-renders → recursion-provider}/index.js +40 -18
- package/build/components/recursion-provider/index.js.map +1 -0
- package/build/components/rich-text/format-toolbar-container.js +61 -12
- package/build/components/rich-text/format-toolbar-container.js.map +1 -1
- package/build/components/rich-text/index.js +8 -2
- package/build/components/rich-text/index.js.map +1 -1
- package/build/components/rich-text/index.native.js +3 -1
- package/build/components/rich-text/index.native.js.map +1 -1
- package/build/components/rich-text/use-before-input-rules.js +110 -0
- package/build/components/rich-text/use-before-input-rules.js.map +1 -0
- package/build/components/rich-text/use-format-types.js +36 -16
- package/build/components/rich-text/use-format-types.js.map +1 -1
- package/build/components/text-decoration-control/index.js +3 -1
- package/build/components/text-decoration-control/index.js.map +1 -1
- package/build/components/text-transform-control/index.js +3 -1
- package/build/components/text-transform-control/index.js.map +1 -1
- package/build/components/url-popover/image-url-input-ui.js +4 -1
- package/build/components/url-popover/image-url-input-ui.js.map +1 -1
- package/build/components/url-popover/index.js +2 -1
- package/build/components/url-popover/index.js.map +1 -1
- package/build/components/writing-flow/use-arrow-nav.js +38 -27
- package/build/components/writing-flow/use-arrow-nav.js.map +1 -1
- package/build/components/writing-flow/use-drag-selection.js +9 -2
- package/build/components/writing-flow/use-drag-selection.js.map +1 -1
- package/build/components/writing-flow/use-multi-selection.js +3 -47
- package/build/components/writing-flow/use-multi-selection.js.map +1 -1
- package/build/components/writing-flow/use-select-all.js +3 -1
- package/build/components/writing-flow/use-select-all.js.map +1 -1
- package/build/components/writing-flow/use-selection-observer.js +1 -3
- package/build/components/writing-flow/use-selection-observer.js.map +1 -1
- package/build/components/writing-flow/use-tab-nav.js +1 -1
- package/build/components/writing-flow/use-tab-nav.js.map +1 -1
- package/build/hooks/color.js +2 -4
- package/build/hooks/color.js.map +1 -1
- package/build/hooks/index.js +8 -0
- package/build/hooks/index.js.map +1 -1
- package/build/hooks/layout.js +61 -15
- package/build/hooks/layout.js.map +1 -1
- package/build/hooks/style.js +41 -31
- package/build/hooks/style.js.map +1 -1
- package/build/hooks/utils.js +5 -3
- package/build/hooks/utils.js.map +1 -1
- package/build/index.js +7 -0
- package/build/index.js.map +1 -1
- package/build/layouts/flex.js +40 -36
- package/build/layouts/flex.js.map +1 -1
- package/build/layouts/flow.js +35 -37
- package/build/layouts/flow.js.map +1 -1
- package/build/layouts/utils.js +35 -3
- package/build/layouts/utils.js.map +1 -1
- package/build/store/actions.js +15 -18
- package/build/store/actions.js.map +1 -1
- package/build/store/index.js +0 -4
- package/build/store/index.js.map +1 -1
- package/build/store/reducer.js +5 -3
- package/build/store/reducer.js.map +1 -1
- package/build/store/selectors.js +3 -3
- package/build/store/selectors.js.map +1 -1
- package/build/utils/block-variation-transforms.js +15 -9
- package/build/utils/block-variation-transforms.js.map +1 -1
- package/build/utils/pasting.js +9 -1
- package/build/utils/pasting.js.map +1 -1
- package/build-module/components/block-list/block-invalid-warning.native.js +50 -6
- package/build-module/components/block-list/block-invalid-warning.native.js.map +1 -1
- package/build-module/components/block-list/block.js +15 -5
- package/build-module/components/block-list/block.js.map +1 -1
- package/build-module/components/block-list/block.native.js +2 -1
- package/build-module/components/block-list/block.native.js.map +1 -1
- package/build-module/components/block-list/index.native.js +4 -2
- package/build-module/components/block-list/index.native.js.map +1 -1
- package/build-module/components/block-list/layout.js +19 -4
- package/build-module/components/block-list/layout.js.map +1 -1
- package/build-module/components/block-list/use-block-props/use-block-class-names.js +5 -2
- package/build-module/components/block-list/use-block-props/use-block-class-names.js.map +1 -1
- package/build-module/components/block-lock/modal.js +39 -8
- package/build-module/components/block-lock/modal.js.map +1 -1
- package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js +2 -2
- package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
- package/build-module/components/block-mover/mover-description.js +97 -33
- package/build-module/components/block-mover/mover-description.js.map +1 -1
- package/build-module/components/block-pattern-setup/index.js +6 -18
- package/build-module/components/block-pattern-setup/index.js.map +1 -1
- package/build-module/components/block-popover/inbetween.js +2 -2
- package/build-module/components/block-popover/inbetween.js.map +1 -1
- package/build-module/components/block-popover/index.js +1 -1
- package/build-module/components/block-popover/index.js.map +1 -1
- package/build-module/components/block-settings-menu/block-mode-toggle.js +1 -1
- package/build-module/components/block-settings-menu/block-mode-toggle.js.map +1 -1
- package/build-module/components/block-settings-menu/block-settings-dropdown.js +4 -1
- package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
- package/build-module/components/block-settings-menu-controls/index.js +2 -2
- package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
- package/build-module/components/block-styles/index.js +4 -7
- package/build-module/components/block-styles/index.js.map +1 -1
- package/build-module/components/block-styles/preview.native.js.map +1 -1
- package/build-module/components/block-switcher/index.js +7 -1
- package/build-module/components/block-switcher/index.js.map +1 -1
- package/build-module/components/block-title/index.js +8 -2
- package/build-module/components/block-title/index.js.map +1 -1
- package/build-module/components/block-title/use-block-display-title.js +12 -5
- package/build-module/components/block-title/use-block-display-title.js.map +1 -1
- package/build-module/components/block-tools/block-contextual-toolbar.js +1 -1
- package/build-module/components/block-tools/block-contextual-toolbar.js.map +1 -1
- package/build-module/components/block-tools/block-selection-button.js +1 -7
- package/build-module/components/block-tools/block-selection-button.js.map +1 -1
- package/build-module/components/block-tools/index.js +4 -1
- package/build-module/components/block-tools/index.js.map +1 -1
- package/build-module/components/block-types-list/index.js +1 -1
- package/build-module/components/block-types-list/index.js.map +1 -1
- package/build-module/components/block-types-list/index.native.js +67 -25
- package/build-module/components/block-types-list/index.native.js.map +1 -1
- package/build-module/components/border-radius-control/index.js +6 -2
- package/build-module/components/border-radius-control/index.js.map +1 -1
- package/build-module/components/colors/utils.js +7 -3
- package/build-module/components/colors/utils.js.map +1 -1
- package/build-module/components/colors/with-colors.js +2 -2
- package/build-module/components/colors/with-colors.js.map +1 -1
- package/build-module/components/colors-gradients/control.js +50 -40
- package/build-module/components/colors-gradients/control.js.map +1 -1
- package/build-module/components/colors-gradients/dropdown.js +10 -4
- package/build-module/components/colors-gradients/dropdown.js.map +1 -1
- package/build-module/components/date-format-picker/index.js +1 -1
- package/build-module/components/date-format-picker/index.js.map +1 -1
- package/build-module/components/font-appearance-control/index.js +7 -4
- package/build-module/components/font-appearance-control/index.js.map +1 -1
- package/build-module/components/iframe/index.js +19 -6
- package/build-module/components/iframe/index.js.map +1 -1
- package/build-module/components/image-editor/cropper.js +4 -3
- package/build-module/components/image-editor/cropper.js.map +1 -1
- package/build-module/components/image-editor/index.js +3 -1
- package/build-module/components/image-editor/index.js.map +1 -1
- package/build-module/components/image-size-control/index.js +3 -1
- package/build-module/components/image-size-control/index.js.map +1 -1
- package/build-module/components/index.js +1 -1
- package/build-module/components/index.js.map +1 -1
- package/build-module/components/index.native.js +1 -1
- package/build-module/components/index.native.js.map +1 -1
- package/build-module/components/inserter/block-types-tab.native.js +31 -15
- package/build-module/components/inserter/block-types-tab.native.js.map +1 -1
- package/build-module/components/inserter/index.native.js +9 -2
- package/build-module/components/inserter/index.native.js.map +1 -1
- package/build-module/components/inserter/preview-panel.js +9 -9
- package/build-module/components/inserter/preview-panel.js.map +1 -1
- package/build-module/components/inserter/reusable-blocks-tab.native.js +6 -2
- package/build-module/components/inserter/reusable-blocks-tab.native.js.map +1 -1
- package/build-module/components/inserter/search-results.native.js +6 -3
- package/build-module/components/inserter/search-results.native.js.map +1 -1
- package/build-module/components/inserter/utils.native.js +19 -0
- package/build-module/components/inserter/utils.native.js.map +1 -1
- package/build-module/components/inserter-list-item/index.js +5 -18
- package/build-module/components/inserter-list-item/index.js.map +1 -1
- package/build-module/components/letter-spacing-control/index.js +5 -3
- package/build-module/components/letter-spacing-control/index.js.map +1 -1
- package/build-module/components/line-height-control/index.js +5 -3
- package/build-module/components/line-height-control/index.js.map +1 -1
- package/build-module/components/link-control/index.js +1 -1
- package/build-module/components/link-control/index.js.map +1 -1
- package/build-module/components/link-control/is-url-like.js +1 -6
- package/build-module/components/link-control/is-url-like.js.map +1 -1
- package/build-module/components/link-control/use-search-handler.js +1 -6
- package/build-module/components/link-control/use-search-handler.js.map +1 -1
- package/build-module/components/list-view/block-select-button.js +16 -8
- package/build-module/components/list-view/block-select-button.js.map +1 -1
- package/build-module/components/list-view/branch.js +1 -6
- package/build-module/components/list-view/branch.js.map +1 -1
- package/build-module/components/list-view/drop-indicator.js +1 -1
- package/build-module/components/list-view/drop-indicator.js.map +1 -1
- package/build-module/components/list-view/expander.js +3 -2
- package/build-module/components/list-view/expander.js.map +1 -1
- package/build-module/components/media-placeholder/index.js +13 -2
- package/build-module/components/media-placeholder/index.js.map +1 -1
- package/build-module/components/media-replace-flow/index.js +4 -7
- package/build-module/components/media-replace-flow/index.js.map +1 -1
- package/build-module/components/media-upload/index.native.js +9 -2
- package/build-module/components/media-upload/index.native.js.map +1 -1
- package/build-module/components/observe-typing/index.js +22 -8
- package/build-module/components/observe-typing/index.js.map +1 -1
- package/build-module/components/preview-options/index.js +2 -2
- package/build-module/components/preview-options/index.js.map +1 -1
- package/build-module/components/{use-no-recursive-renders → recursion-provider}/index.js +39 -19
- package/build-module/components/recursion-provider/index.js.map +1 -0
- package/build-module/components/rich-text/format-toolbar-container.js +58 -12
- package/build-module/components/rich-text/format-toolbar-container.js.map +1 -1
- package/build-module/components/rich-text/index.js +7 -2
- package/build-module/components/rich-text/index.js.map +1 -1
- package/build-module/components/rich-text/index.native.js +3 -1
- package/build-module/components/rich-text/index.native.js.map +1 -1
- package/build-module/components/rich-text/use-before-input-rules.js +96 -0
- package/build-module/components/rich-text/use-before-input-rules.js.map +1 -0
- package/build-module/components/rich-text/use-format-types.js +37 -18
- package/build-module/components/rich-text/use-format-types.js.map +1 -1
- package/build-module/components/text-decoration-control/index.js +4 -2
- package/build-module/components/text-decoration-control/index.js.map +1 -1
- package/build-module/components/text-transform-control/index.js +4 -2
- package/build-module/components/text-transform-control/index.js.map +1 -1
- package/build-module/components/url-popover/image-url-input-ui.js +4 -1
- package/build-module/components/url-popover/image-url-input-ui.js.map +1 -1
- package/build-module/components/url-popover/index.js +2 -1
- package/build-module/components/url-popover/index.js.map +1 -1
- package/build-module/components/writing-flow/use-arrow-nav.js +40 -29
- package/build-module/components/writing-flow/use-arrow-nav.js.map +1 -1
- package/build-module/components/writing-flow/use-drag-selection.js +9 -2
- package/build-module/components/writing-flow/use-drag-selection.js.map +1 -1
- package/build-module/components/writing-flow/use-multi-selection.js +3 -45
- package/build-module/components/writing-flow/use-multi-selection.js.map +1 -1
- package/build-module/components/writing-flow/use-select-all.js +3 -1
- package/build-module/components/writing-flow/use-select-all.js.map +1 -1
- package/build-module/components/writing-flow/use-selection-observer.js +1 -3
- package/build-module/components/writing-flow/use-selection-observer.js.map +1 -1
- package/build-module/components/writing-flow/use-tab-nav.js +1 -1
- package/build-module/components/writing-flow/use-tab-nav.js.map +1 -1
- package/build-module/hooks/color.js +2 -3
- package/build-module/hooks/color.js.map +1 -1
- package/build-module/hooks/index.js +1 -0
- package/build-module/hooks/index.js.map +1 -1
- package/build-module/hooks/layout.js +62 -16
- package/build-module/hooks/layout.js.map +1 -1
- package/build-module/hooks/style.js +44 -35
- package/build-module/hooks/style.js.map +1 -1
- package/build-module/hooks/utils.js +5 -2
- package/build-module/hooks/utils.js.map +1 -1
- package/build-module/index.js +1 -1
- package/build-module/index.js.map +1 -1
- package/build-module/layouts/flex.js +41 -33
- package/build-module/layouts/flex.js.map +1 -1
- package/build-module/layouts/flow.js +35 -38
- package/build-module/layouts/flow.js.map +1 -1
- package/build-module/layouts/utils.js +33 -3
- package/build-module/layouts/utils.js.map +1 -1
- package/build-module/store/actions.js +9 -10
- package/build-module/store/actions.js.map +1 -1
- package/build-module/store/index.js +0 -4
- package/build-module/store/index.js.map +1 -1
- package/build-module/store/reducer.js +5 -2
- package/build-module/store/reducer.js.map +1 -1
- package/build-module/store/selectors.js +4 -4
- package/build-module/store/selectors.js.map +1 -1
- package/build-module/utils/block-variation-transforms.js +14 -7
- package/build-module/utils/block-variation-transforms.js.map +1 -1
- package/build-module/utils/pasting.js +9 -1
- package/build-module/utils/pasting.js.map +1 -1
- package/build-style/style-rtl.css +72 -14
- package/build-style/style.css +72 -14
- package/package.json +28 -28
- package/src/components/block-list/block-invalid-warning.native.js +42 -7
- package/src/components/block-list/block.js +15 -4
- package/src/components/block-list/block.native.js +1 -0
- package/src/components/block-list/index.native.js +2 -2
- package/src/components/block-list/layout.js +15 -3
- package/src/components/block-list/style.scss +1 -1
- package/src/components/block-list/use-block-props/use-block-class-names.js +5 -1
- package/src/components/block-lock/modal.js +47 -9
- package/src/components/block-lock/style.scss +10 -0
- package/src/components/block-mobile-toolbar/block-actions-menu.native.js +3 -3
- package/src/components/block-mover/mover-description.js +131 -48
- package/src/components/block-mover/test/mover-description.js +55 -3
- package/src/components/block-pattern-setup/index.js +3 -15
- package/src/components/block-pattern-setup/style.scss +4 -2
- package/src/components/block-popover/inbetween.js +2 -1
- package/src/components/block-popover/index.js +1 -1
- package/src/components/block-popover/style.scss +25 -2
- package/src/components/block-settings-menu/block-mode-toggle.js +1 -0
- package/src/components/block-settings-menu/block-settings-dropdown.js +4 -1
- package/src/components/block-settings-menu-controls/index.js +2 -2
- package/src/components/block-styles/index.js +4 -7
- package/src/components/block-styles/preview.native.js +1 -0
- package/src/components/block-styles/style.scss +10 -0
- package/src/components/block-switcher/index.js +7 -1
- package/src/components/block-title/index.js +3 -2
- package/src/components/block-title/use-block-display-title.js +11 -5
- package/src/components/block-tools/block-contextual-toolbar.js +3 -1
- package/src/components/block-tools/block-selection-button.js +0 -5
- package/src/components/block-tools/index.js +4 -1
- package/src/components/block-types-list/index.js +1 -1
- package/src/components/block-types-list/index.native.js +76 -24
- package/src/components/block-types-list/style.native.scss +18 -0
- package/src/components/border-radius-control/index.js +6 -1
- package/src/components/color-palette/test/__snapshots__/control.js.snap +91 -79
- package/src/components/colors/test/__snapshots__/with-colors.js.snap +1 -1
- package/src/components/colors/test/with-colors.js +1 -1
- package/src/components/colors/utils.js +5 -2
- package/src/components/colors/with-colors.js +2 -2
- package/src/components/colors-gradients/control.js +82 -65
- package/src/components/colors-gradients/dropdown.js +14 -3
- package/src/components/colors-gradients/style.scss +34 -9
- package/src/components/colors-gradients/test/control.js +16 -23
- package/src/components/date-format-picker/index.js +1 -0
- package/src/components/font-appearance-control/index.js +3 -0
- package/src/components/iframe/index.js +25 -6
- package/src/components/image-editor/cropper.js +9 -3
- package/src/components/image-editor/index.js +2 -0
- package/src/components/image-size-control/README.md +7 -0
- package/src/components/image-size-control/index.js +2 -0
- package/src/components/index.js +4 -1
- package/src/components/index.native.js +4 -1
- package/src/components/inserter/block-types-tab.native.js +42 -21
- package/src/components/inserter/index.native.js +7 -2
- package/src/components/inserter/preview-panel.js +6 -14
- package/src/components/inserter/reusable-blocks-tab.native.js +4 -2
- package/src/components/inserter/search-results.native.js +4 -2
- package/src/components/inserter/style.scss +1 -1
- package/src/components/inserter/test/block-types-tab.native.js +2 -0
- package/src/components/inserter/test/utils.native.js +37 -0
- package/src/components/inserter/utils.native.js +11 -0
- package/src/components/inserter-list-item/index.js +5 -18
- package/src/components/letter-spacing-control/index.js +2 -0
- package/src/components/line-height-control/index.js +2 -0
- package/src/components/link-control/index.js +1 -0
- package/src/components/link-control/is-url-like.js +1 -6
- package/src/components/link-control/test/index.js +6 -4
- package/src/components/link-control/use-search-handler.js +1 -6
- package/src/components/list-view/block-select-button.js +29 -14
- package/src/components/list-view/branch.js +1 -6
- package/src/components/list-view/drop-indicator.js +1 -1
- package/src/components/list-view/expander.js +4 -2
- package/src/components/list-view/style.scss +18 -4
- package/src/components/media-placeholder/index.js +19 -0
- package/src/components/media-replace-flow/index.js +3 -6
- package/src/components/media-replace-flow/test/index.js +14 -4
- package/src/components/media-upload/index.native.js +7 -3
- package/src/components/observe-typing/index.js +17 -14
- package/src/components/preview-options/index.js +2 -2
- package/src/components/{use-no-recursive-renders → recursion-provider}/index.js +39 -28
- package/src/components/{use-no-recursive-renders/test/use-no-recursive-renders.js → recursion-provider/test/index.js} +5 -6
- package/src/components/rich-text/README.md +13 -1
- package/src/components/rich-text/format-toolbar-container.js +63 -14
- package/src/components/rich-text/index.js +3 -0
- package/src/components/rich-text/index.native.js +2 -0
- package/src/components/rich-text/use-before-input-rules.js +91 -0
- package/src/components/rich-text/use-format-types.js +38 -17
- package/src/components/text-decoration-control/index.js +4 -2
- package/src/components/text-transform-control/index.js +4 -2
- package/src/components/url-popover/image-url-input-ui.js +3 -0
- package/src/components/url-popover/index.js +1 -0
- package/src/components/url-popover/test/__snapshots__/index.js.snap +3 -0
- package/src/components/writing-flow/use-arrow-nav.js +36 -34
- package/src/components/writing-flow/use-drag-selection.js +7 -1
- package/src/components/writing-flow/use-multi-selection.js +1 -48
- package/src/components/writing-flow/use-select-all.js +2 -1
- package/src/components/writing-flow/use-selection-observer.js +2 -3
- package/src/components/writing-flow/use-tab-nav.js +1 -1
- package/src/hooks/color.js +10 -3
- package/src/hooks/index.js +1 -0
- package/src/hooks/layout.js +66 -23
- package/src/hooks/style.js +46 -39
- package/src/hooks/utils.js +7 -3
- package/src/index.js +1 -0
- package/src/layouts/flex.js +47 -41
- package/src/layouts/flow.js +35 -34
- package/src/layouts/test/flex.js +21 -0
- package/src/layouts/test/flow.js +21 -0
- package/src/layouts/test/utils.js +138 -0
- package/src/layouts/utils.js +44 -3
- package/src/store/actions.js +10 -11
- package/src/store/index.js +0 -4
- package/src/store/reducer.js +3 -2
- package/src/store/selectors.js +3 -4
- package/src/utils/block-variation-transforms.js +13 -6
- package/src/utils/pasting.js +10 -1
- package/src/utils/test/block-variation-transforms.js +24 -0
- package/src/utils/test/pasting.js +10 -0
- package/tsconfig.json +2 -1
- package/build/components/use-no-recursive-renders/index.js.map +0 -1
- package/build-module/components/use-no-recursive-renders/index.js.map +0 -1
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { appendSelectors, getBlockGapCSS } from '../utils';
|
|
5
|
+
|
|
6
|
+
const layoutDefinitions = {
|
|
7
|
+
default: {
|
|
8
|
+
spacingStyles: [
|
|
9
|
+
{
|
|
10
|
+
selector: ' > *',
|
|
11
|
+
rules: {
|
|
12
|
+
'margin-block-start': '0',
|
|
13
|
+
'margin-block-end': '0',
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
selector: ' > * + *',
|
|
18
|
+
rules: {
|
|
19
|
+
'margin-block-start': null,
|
|
20
|
+
'margin-block-end': '0',
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
],
|
|
24
|
+
},
|
|
25
|
+
flex: {
|
|
26
|
+
spacingStyles: [
|
|
27
|
+
{
|
|
28
|
+
selector: '',
|
|
29
|
+
rules: {
|
|
30
|
+
gap: null,
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
],
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
describe( 'getBlockGapCSS', () => {
|
|
38
|
+
it( 'should output default blockGap rules', () => {
|
|
39
|
+
const expected =
|
|
40
|
+
'.editor-styles-wrapper .my-container > * { margin-block-start: 0; margin-block-end: 0; }.editor-styles-wrapper .my-container > * + * { margin-block-start: 3em; margin-block-end: 0; }';
|
|
41
|
+
|
|
42
|
+
const result = getBlockGapCSS(
|
|
43
|
+
'.my-container',
|
|
44
|
+
layoutDefinitions,
|
|
45
|
+
'default',
|
|
46
|
+
'3em'
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
expect( result ).toBe( expected );
|
|
50
|
+
} );
|
|
51
|
+
|
|
52
|
+
it( 'should output flex blockGap rules', () => {
|
|
53
|
+
const expected = '.editor-styles-wrapper .my-container { gap: 3em; }';
|
|
54
|
+
|
|
55
|
+
const result = getBlockGapCSS(
|
|
56
|
+
'.my-container',
|
|
57
|
+
layoutDefinitions,
|
|
58
|
+
'flex',
|
|
59
|
+
'3em'
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
expect( result ).toBe( expected );
|
|
63
|
+
} );
|
|
64
|
+
|
|
65
|
+
it( 'should return an empty string if layout type cannot be found', () => {
|
|
66
|
+
const expected = '';
|
|
67
|
+
|
|
68
|
+
const result = getBlockGapCSS(
|
|
69
|
+
'.my-container',
|
|
70
|
+
layoutDefinitions,
|
|
71
|
+
'aTypeThatDoesNotExist',
|
|
72
|
+
'3em'
|
|
73
|
+
);
|
|
74
|
+
|
|
75
|
+
expect( result ).toBe( expected );
|
|
76
|
+
} );
|
|
77
|
+
|
|
78
|
+
it( 'should return an empty string if layout definitions cannot be found', () => {
|
|
79
|
+
const expected = '';
|
|
80
|
+
|
|
81
|
+
const result = getBlockGapCSS(
|
|
82
|
+
'.my-container',
|
|
83
|
+
undefined,
|
|
84
|
+
'flex',
|
|
85
|
+
'3em'
|
|
86
|
+
);
|
|
87
|
+
|
|
88
|
+
expect( result ).toBe( expected );
|
|
89
|
+
} );
|
|
90
|
+
|
|
91
|
+
it( 'should return an empty string if blockGap is empty', () => {
|
|
92
|
+
const expected = '';
|
|
93
|
+
|
|
94
|
+
const result = getBlockGapCSS(
|
|
95
|
+
'.my-container',
|
|
96
|
+
layoutDefinitions,
|
|
97
|
+
'flex',
|
|
98
|
+
null
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
expect( result ).toBe( expected );
|
|
102
|
+
} );
|
|
103
|
+
|
|
104
|
+
it( 'should treat a blockGap string containing 0 as a valid value', () => {
|
|
105
|
+
const expected = '.editor-styles-wrapper .my-container { gap: 0; }';
|
|
106
|
+
|
|
107
|
+
const result = getBlockGapCSS(
|
|
108
|
+
'.my-container',
|
|
109
|
+
layoutDefinitions,
|
|
110
|
+
'flex',
|
|
111
|
+
'0'
|
|
112
|
+
);
|
|
113
|
+
|
|
114
|
+
expect( result ).toBe( expected );
|
|
115
|
+
} );
|
|
116
|
+
} );
|
|
117
|
+
|
|
118
|
+
describe( 'appendSelectors', () => {
|
|
119
|
+
it( 'should append a subselector without an appended selector', () => {
|
|
120
|
+
expect( appendSelectors( '.original-selector' ) ).toBe(
|
|
121
|
+
'.editor-styles-wrapper .original-selector'
|
|
122
|
+
);
|
|
123
|
+
} );
|
|
124
|
+
|
|
125
|
+
it( 'should append a subselector to a single selector', () => {
|
|
126
|
+
expect( appendSelectors( '.original-selector', '.appended' ) ).toBe(
|
|
127
|
+
'.editor-styles-wrapper .original-selector .appended'
|
|
128
|
+
);
|
|
129
|
+
} );
|
|
130
|
+
|
|
131
|
+
it( 'should append a subselector to multiple selectors', () => {
|
|
132
|
+
expect(
|
|
133
|
+
appendSelectors( '.first-selector,.second-selector', '.appended' )
|
|
134
|
+
).toBe(
|
|
135
|
+
'.editor-styles-wrapper .first-selector .appended,.editor-styles-wrapper .second-selector .appended'
|
|
136
|
+
);
|
|
137
|
+
} );
|
|
138
|
+
} );
|
package/src/layouts/utils.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Utility to generate the proper CSS selector for layout styles.
|
|
3
3
|
*
|
|
4
|
-
* @param {string
|
|
5
|
-
* @param {
|
|
4
|
+
* @param {string} selectors CSS selector, also supports multiple comma-separated selectors.
|
|
5
|
+
* @param {string} append The string to append.
|
|
6
6
|
*
|
|
7
7
|
* @return {string} - CSS selector.
|
|
8
8
|
*/
|
|
@@ -17,7 +17,48 @@ export function appendSelectors( selectors, append = '' ) {
|
|
|
17
17
|
.split( ',' )
|
|
18
18
|
.map(
|
|
19
19
|
( subselector ) =>
|
|
20
|
-
`.editor-styles-wrapper ${ subselector }
|
|
20
|
+
`.editor-styles-wrapper ${ subselector }${
|
|
21
|
+
append ? ` ${ append }` : ''
|
|
22
|
+
}`
|
|
21
23
|
)
|
|
22
24
|
.join( ',' );
|
|
23
25
|
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Get generated blockGap CSS rules based on layout definitions provided in theme.json
|
|
29
|
+
* Falsy values in the layout definition's spacingStyles rules will be swapped out
|
|
30
|
+
* with the provided `blockGapValue`.
|
|
31
|
+
*
|
|
32
|
+
* @param {string} selector The CSS selector to target for the generated rules.
|
|
33
|
+
* @param {Object} layoutDefinitions Layout definitions object from theme.json.
|
|
34
|
+
* @param {string} layoutType The layout type (e.g. `default` or `flex`).
|
|
35
|
+
* @param {string} blockGapValue The current blockGap value to be applied.
|
|
36
|
+
* @return {string} The generated CSS rules.
|
|
37
|
+
*/
|
|
38
|
+
export function getBlockGapCSS(
|
|
39
|
+
selector,
|
|
40
|
+
layoutDefinitions,
|
|
41
|
+
layoutType,
|
|
42
|
+
blockGapValue
|
|
43
|
+
) {
|
|
44
|
+
let output = '';
|
|
45
|
+
if (
|
|
46
|
+
layoutDefinitions?.[ layoutType ]?.spacingStyles?.length &&
|
|
47
|
+
blockGapValue
|
|
48
|
+
) {
|
|
49
|
+
layoutDefinitions[ layoutType ].spacingStyles.forEach( ( gapStyle ) => {
|
|
50
|
+
output += `${ appendSelectors(
|
|
51
|
+
selector,
|
|
52
|
+
gapStyle.selector.trim()
|
|
53
|
+
) } { `;
|
|
54
|
+
output += Object.entries( gapStyle.rules )
|
|
55
|
+
.map(
|
|
56
|
+
( [ cssProperty, value ] ) =>
|
|
57
|
+
`${ cssProperty }: ${ value ? value : blockGapValue }`
|
|
58
|
+
)
|
|
59
|
+
.join( '; ' );
|
|
60
|
+
output += '; }';
|
|
61
|
+
} );
|
|
62
|
+
}
|
|
63
|
+
return output;
|
|
64
|
+
}
|
package/src/store/actions.js
CHANGED
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* External dependencies
|
|
3
|
-
*/
|
|
4
|
-
import { castArray, first, isObject, last, some } from 'lodash';
|
|
5
|
-
|
|
6
1
|
/**
|
|
7
2
|
* WordPress dependencies
|
|
8
3
|
*/
|
|
@@ -31,6 +26,9 @@ import {
|
|
|
31
26
|
START_OF_SELECTED_AREA,
|
|
32
27
|
} from '../utils/selection';
|
|
33
28
|
|
|
29
|
+
const castArray = ( maybeArray ) =>
|
|
30
|
+
Array.isArray( maybeArray ) ? maybeArray : [ maybeArray ];
|
|
31
|
+
|
|
34
32
|
/**
|
|
35
33
|
* Action which will insert a default block insert action if there
|
|
36
34
|
* are no other blocks at the root of the editor. This action should be used
|
|
@@ -396,7 +394,7 @@ export const replaceBlocks =
|
|
|
396
394
|
castArray( blocks ),
|
|
397
395
|
select.getSettings()
|
|
398
396
|
);
|
|
399
|
-
const rootClientId = select.getBlockRootClientId(
|
|
397
|
+
const rootClientId = select.getBlockRootClientId( clientIds[ 0 ] );
|
|
400
398
|
// Replace is valid if the new blocks can be inserted in the root block.
|
|
401
399
|
for ( let index = 0; index < blocks.length; index++ ) {
|
|
402
400
|
const block = blocks[ index ];
|
|
@@ -583,7 +581,7 @@ export const insertBlocks =
|
|
|
583
581
|
) =>
|
|
584
582
|
( { select, dispatch } ) => {
|
|
585
583
|
/* eslint-enable jsdoc/valid-types */
|
|
586
|
-
if (
|
|
584
|
+
if ( initialPosition !== null && typeof initialPosition === 'object' ) {
|
|
587
585
|
meta = initialPosition;
|
|
588
586
|
initialPosition = 0;
|
|
589
587
|
deprecated(
|
|
@@ -1504,7 +1502,7 @@ export const duplicateBlocks =
|
|
|
1504
1502
|
|
|
1505
1503
|
// Return early if blocks don't exist.
|
|
1506
1504
|
const blocks = select.getBlocksByClientId( clientIds );
|
|
1507
|
-
if ( some(
|
|
1505
|
+
if ( blocks.some( ( block ) => ! block ) ) {
|
|
1508
1506
|
return;
|
|
1509
1507
|
}
|
|
1510
1508
|
|
|
@@ -1520,8 +1518,9 @@ export const duplicateBlocks =
|
|
|
1520
1518
|
}
|
|
1521
1519
|
|
|
1522
1520
|
const rootClientId = select.getBlockRootClientId( clientIds[ 0 ] );
|
|
1521
|
+
const clientIdsArray = castArray( clientIds );
|
|
1523
1522
|
const lastSelectedIndex = select.getBlockIndex(
|
|
1524
|
-
|
|
1523
|
+
clientIdsArray[ clientIdsArray.length - 1 ]
|
|
1525
1524
|
);
|
|
1526
1525
|
const clonedBlocks = blocks.map( ( block ) =>
|
|
1527
1526
|
__experimentalCloneSanitizedBlock( block )
|
|
@@ -1534,8 +1533,8 @@ export const duplicateBlocks =
|
|
|
1534
1533
|
);
|
|
1535
1534
|
if ( clonedBlocks.length > 1 && updateSelection ) {
|
|
1536
1535
|
dispatch.multiSelect(
|
|
1537
|
-
|
|
1538
|
-
|
|
1536
|
+
clonedBlocks[ 0 ].clientId,
|
|
1537
|
+
clonedBlocks[ clonedBlocks.length - 1 ].clientId
|
|
1539
1538
|
);
|
|
1540
1539
|
}
|
|
1541
1540
|
return clonedBlocks.map( ( block ) => block.clientId );
|
package/src/store/index.js
CHANGED
|
@@ -15,8 +15,6 @@ import { STORE_NAME } from './constants';
|
|
|
15
15
|
* Block editor data store configuration.
|
|
16
16
|
*
|
|
17
17
|
* @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/data/README.md#registerStore
|
|
18
|
-
*
|
|
19
|
-
* @type {Object}
|
|
20
18
|
*/
|
|
21
19
|
export const storeConfig = {
|
|
22
20
|
reducer,
|
|
@@ -28,8 +26,6 @@ export const storeConfig = {
|
|
|
28
26
|
* Store definition for the block editor namespace.
|
|
29
27
|
*
|
|
30
28
|
* @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/data/README.md#createReduxStore
|
|
31
|
-
*
|
|
32
|
-
* @type {Object}
|
|
33
29
|
*/
|
|
34
30
|
export const store = createReduxStore( STORE_NAME, {
|
|
35
31
|
...storeConfig,
|
package/src/store/reducer.js
CHANGED
|
@@ -11,7 +11,6 @@ import {
|
|
|
11
11
|
mapValues,
|
|
12
12
|
isEqual,
|
|
13
13
|
isEmpty,
|
|
14
|
-
identity,
|
|
15
14
|
omitBy,
|
|
16
15
|
} from 'lodash';
|
|
17
16
|
|
|
@@ -26,6 +25,8 @@ import { store as blocksStore } from '@wordpress/blocks';
|
|
|
26
25
|
import { PREFERENCES_DEFAULTS, SETTINGS_DEFAULTS } from './defaults';
|
|
27
26
|
import { insertAt, moveTo } from './array';
|
|
28
27
|
|
|
28
|
+
const identity = ( x ) => x;
|
|
29
|
+
|
|
29
30
|
/**
|
|
30
31
|
* Given an array of blocks, returns an object where each key is a nesting
|
|
31
32
|
* context, the value of which is an array of block client IDs existing within
|
|
@@ -1690,7 +1691,7 @@ export function lastBlockAttributesChange( state, action ) {
|
|
|
1690
1691
|
/**
|
|
1691
1692
|
* Reducer returning automatic change state.
|
|
1692
1693
|
*
|
|
1693
|
-
* @param {
|
|
1694
|
+
* @param {?string} state Current state.
|
|
1694
1695
|
* @param {Object} action Dispatched action.
|
|
1695
1696
|
*
|
|
1696
1697
|
* @return {string} Updated state.
|
package/src/store/selectors.js
CHANGED
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
import {
|
|
5
5
|
castArray,
|
|
6
6
|
first,
|
|
7
|
-
isBoolean,
|
|
8
7
|
last,
|
|
9
8
|
map,
|
|
10
9
|
reduce,
|
|
@@ -1382,7 +1381,7 @@ export function getBlockInsertionPoint( state ) {
|
|
|
1382
1381
|
|
|
1383
1382
|
if ( clientId ) {
|
|
1384
1383
|
rootClientId = getBlockRootClientId( state, clientId ) || undefined;
|
|
1385
|
-
index = getBlockIndex( state, selectionEnd.clientId
|
|
1384
|
+
index = getBlockIndex( state, selectionEnd.clientId ) + 1;
|
|
1386
1385
|
} else {
|
|
1387
1386
|
index = getBlockOrder( state ).length;
|
|
1388
1387
|
}
|
|
@@ -1445,7 +1444,7 @@ export function getTemplateLock( state, rootClientId ) {
|
|
|
1445
1444
|
}
|
|
1446
1445
|
|
|
1447
1446
|
const checkAllowList = ( list, item, defaultResult = null ) => {
|
|
1448
|
-
if (
|
|
1447
|
+
if ( typeof list === 'boolean' ) {
|
|
1449
1448
|
return list;
|
|
1450
1449
|
}
|
|
1451
1450
|
if ( Array.isArray( list ) ) {
|
|
@@ -2218,7 +2217,7 @@ export const __experimentalGetDirectInsertBlock = createSelector(
|
|
|
2218
2217
|
);
|
|
2219
2218
|
|
|
2220
2219
|
const checkAllowListRecursive = ( blocks, allowedBlockTypes ) => {
|
|
2221
|
-
if (
|
|
2220
|
+
if ( typeof allowedBlockTypes === 'boolean' ) {
|
|
2222
2221
|
return allowedBlockTypes;
|
|
2223
2222
|
}
|
|
2224
2223
|
|
|
@@ -1,10 +1,17 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* External dependencies
|
|
3
|
-
*/
|
|
4
|
-
import { isMatch } from 'lodash';
|
|
5
|
-
|
|
6
1
|
/** @typedef {import('@wordpress/blocks').WPBlockVariation} WPBlockVariation */
|
|
7
2
|
|
|
3
|
+
function matchesAttributes( blockAttributes, variation ) {
|
|
4
|
+
return Object.entries( variation ).every( ( [ key, value ] ) => {
|
|
5
|
+
if (
|
|
6
|
+
typeof value === 'object' &&
|
|
7
|
+
typeof blockAttributes[ key ] === 'object'
|
|
8
|
+
) {
|
|
9
|
+
return matchesAttributes( blockAttributes[ key ], value );
|
|
10
|
+
}
|
|
11
|
+
return blockAttributes[ key ] === value;
|
|
12
|
+
} );
|
|
13
|
+
}
|
|
14
|
+
|
|
8
15
|
/**
|
|
9
16
|
* Matches the provided block variations with a block's attributes. If no match
|
|
10
17
|
* or more than one matches are found it returns `undefined`. If a single match is
|
|
@@ -24,7 +31,7 @@ export const __experimentalGetMatchingVariation = (
|
|
|
24
31
|
if ( ! variations || ! blockAttributes ) return;
|
|
25
32
|
const matches = variations.filter( ( { attributes } ) => {
|
|
26
33
|
if ( ! attributes || ! Object.keys( attributes ).length ) return false;
|
|
27
|
-
return
|
|
34
|
+
return matchesAttributes( blockAttributes, attributes );
|
|
28
35
|
} );
|
|
29
36
|
if ( matches.length !== 1 ) return;
|
|
30
37
|
return matches[ 0 ];
|
package/src/utils/pasting.js
CHANGED
|
@@ -70,7 +70,16 @@ export function shouldDismissPastedFiles( files, html /*, plainText */ ) {
|
|
|
70
70
|
// other elements found, like <figure>, but we assume that the user's
|
|
71
71
|
// intention is to paste the actual image file.
|
|
72
72
|
const IMAGE_TAG = /<\s*img\b/gi;
|
|
73
|
-
|
|
73
|
+
if ( html.match( IMAGE_TAG )?.length !== 1 ) return true;
|
|
74
|
+
|
|
75
|
+
// Even when there is exactly one <img> tag in the HTML payload, we
|
|
76
|
+
// choose to weed out local images, i.e. those whose source starts with
|
|
77
|
+
// "file://". These payloads occur in specific configurations, such as
|
|
78
|
+
// when copying an entire document from Microsoft Word, that contains
|
|
79
|
+
// text and exactly one image, and pasting that content using Google
|
|
80
|
+
// Chrome.
|
|
81
|
+
const IMG_WITH_LOCAL_SRC = /<\s*img\b[^>]*\bsrc="file:\/\//i;
|
|
82
|
+
if ( html.match( IMG_WITH_LOCAL_SRC ) ) return true;
|
|
74
83
|
}
|
|
75
84
|
|
|
76
85
|
return false;
|
|
@@ -40,6 +40,18 @@ describe( 'getMatchingVariation', () => {
|
|
|
40
40
|
getMatchingVariation( { level: 1, other: 'prop' }, variations )
|
|
41
41
|
).toBeUndefined();
|
|
42
42
|
} );
|
|
43
|
+
it( 'when variation has a nested attribute', () => {
|
|
44
|
+
const variations = [
|
|
45
|
+
{ name: 'one', attributes: { query: { author: 'somebody' } } },
|
|
46
|
+
{ name: 'two', attributes: { query: { author: 'nobody' } } },
|
|
47
|
+
];
|
|
48
|
+
expect(
|
|
49
|
+
getMatchingVariation(
|
|
50
|
+
{ query: { author: 'foobar' }, other: 'prop' },
|
|
51
|
+
variations
|
|
52
|
+
)
|
|
53
|
+
).toBeUndefined();
|
|
54
|
+
} );
|
|
43
55
|
} );
|
|
44
56
|
describe( 'should find a match', () => {
|
|
45
57
|
it( 'when variation has one attribute', () => {
|
|
@@ -66,5 +78,17 @@ describe( 'getMatchingVariation', () => {
|
|
|
66
78
|
).name
|
|
67
79
|
).toEqual( 'one' );
|
|
68
80
|
} );
|
|
81
|
+
it( 'when variation has a nested attribute', () => {
|
|
82
|
+
const variations = [
|
|
83
|
+
{ name: 'one', attributes: { query: { author: 'somebody' } } },
|
|
84
|
+
{ name: 'two', attributes: { query: { author: 'nobody' } } },
|
|
85
|
+
];
|
|
86
|
+
expect(
|
|
87
|
+
getMatchingVariation(
|
|
88
|
+
{ query: { author: 'somebody' }, other: 'prop' },
|
|
89
|
+
variations
|
|
90
|
+
).name
|
|
91
|
+
).toEqual( 'one' );
|
|
92
|
+
} );
|
|
69
93
|
} );
|
|
70
94
|
} );
|
|
@@ -81,4 +81,14 @@ describe( 'shouldDismissPastedFiles', () => {
|
|
|
81
81
|
)
|
|
82
82
|
).toBe( true );
|
|
83
83
|
} );
|
|
84
|
+
|
|
85
|
+
it( 'should return true when pasting an image-containing MS Word document via Chrome', () => {
|
|
86
|
+
expect(
|
|
87
|
+
shouldDismissPastedFiles(
|
|
88
|
+
[ mocks.pngImageFile ],
|
|
89
|
+
'<p>A</p><img src="file:////.../clip_image001.png" alt="..."><p>B</p>',
|
|
90
|
+
'A\nB'
|
|
91
|
+
)
|
|
92
|
+
).toBe( true );
|
|
93
|
+
} );
|
|
84
94
|
} );
|
package/tsconfig.json
CHANGED
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
"references": [
|
|
8
8
|
{ "path": "../deprecated" },
|
|
9
9
|
{ "path": "../element" },
|
|
10
|
-
{ "path": "../hooks" }
|
|
10
|
+
{ "path": "../hooks" },
|
|
11
|
+
{ "path": "../data" }
|
|
11
12
|
],
|
|
12
13
|
// NOTE: This package is being progressively typed. You are encouraged to
|
|
13
14
|
// expand this array with files which can be type-checked. At some point in
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/block-editor/src/components/use-no-recursive-renders/index.js"],"names":["RenderedRefsContext","addToBlockType","renderedBlocks","blockName","uniqueId","result","Set","add","useNoRecursiveRenders","previouslyRenderedBlocks","name","hasAlreadyRendered","Boolean","has","newRenderedBlocks","Provider","children"],"mappings":";;;;;;;AAGA;;AAUA;;AAbA;AACA;AACA;;AAQA;AACA;AACA;AAGA,MAAMA,mBAAmB,GAAG,4BAAe,EAAf,CAA5B;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAASC,cAAT,CAAyBC,cAAzB,EAAyCC,SAAzC,EAAoDC,QAApD,EAA+D;AAC9D,QAAMC,MAAM,GAAG,EACd,GAAGH,cADW;AAEd,KAAEC,SAAF,GAAeD,cAAc,CAAEC,SAAF,CAAd,GACZ,IAAIG,GAAJ,CAASJ,cAAc,CAAEC,SAAF,CAAvB,CADY,GAEZ,IAAIG,GAAJ;AAJW,GAAf;AAMAD,EAAAA,MAAM,CAAEF,SAAF,CAAN,CAAoBI,GAApB,CAAyBH,QAAzB;AAEA,SAAOC,MAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACe,SAASG,qBAAT,CAAgCJ,QAAhC,EAA2D;AAAA;;AAAA,MAAjBD,SAAiB,uEAAL,EAAK;AACzE,QAAMM,wBAAwB,GAAG,yBAAYT,mBAAZ,CAAjC;AACA,QAAM;AAAEU,IAAAA;AAAF,MAAW,mCAAjB;AACAP,EAAAA,SAAS,GAAGA,SAAS,IAAIO,IAAzB;AACA,QAAMC,kBAAkB,GAAGC,OAAO,0BACjCH,wBAAwB,CAAEN,SAAF,CADS,0DACjC,sBAAuCU,GAAvC,CAA4CT,QAA5C,CADiC,CAAlC;AAGA,QAAMU,iBAAiB,GAAG,sBACzB,MAAMb,cAAc,CAAEQ,wBAAF,EAA4BN,SAA5B,EAAuCC,QAAvC,CADK,EAEzB,CAAEK,wBAAF,EAA4BN,SAA5B,EAAuCC,QAAvC,CAFyB,CAA1B;AAIA,QAAMW,QAAQ,GAAG,0BAChB;AAAA,QAAE;AAAEC,MAAAA;AAAF,KAAF;AAAA,WACC,4BAAC,mBAAD,CAAqB,QAArB;AAA8B,MAAA,KAAK,EAAGF;AAAtC,OACGE,QADH,CADD;AAAA,GADgB,EAMhB,CAAEF,iBAAF,CANgB,CAAjB;AAQA,SAAO,CAAEH,kBAAF,EAAsBI,QAAtB,CAAP;AACA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tcreateContext,\n\tuseCallback,\n\tuseContext,\n\tuseMemo,\n} from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { useBlockEditContext } from '../block-edit/context';\n\nconst RenderedRefsContext = createContext( {} );\n\n/**\n * Immutably adds an unique identifier to a set scoped for a given block type.\n *\n * @param {Object} renderedBlocks Rendered blocks grouped by block name\n * @param {string} blockName Name of the block.\n * @param {*} uniqueId Any value that acts as a unique identifier for a block instance.\n *\n * @return {Object} The list of rendered blocks grouped by block name.\n */\nfunction addToBlockType( renderedBlocks, blockName, uniqueId ) {\n\tconst result = {\n\t\t...renderedBlocks,\n\t\t[ blockName ]: renderedBlocks[ blockName ]\n\t\t\t? new Set( renderedBlocks[ blockName ] )\n\t\t\t: new Set(),\n\t};\n\tresult[ blockName ].add( uniqueId );\n\n\treturn result;\n}\n\n/**\n * A React hook for keeping track of blocks previously rendered up in the block\n * tree. Blocks susceptible to recursion can use this hook in their `Edit`\n * function to prevent said recursion.\n *\n * @param {*} uniqueId Any value that acts as a unique identifier for a block instance.\n * @param {string} blockName Optional block name.\n *\n * @return {[boolean, Function]} A tuple of:\n * - a boolean describing whether the provided id\n * has already been rendered;\n * - a React context provider to be used to wrap\n * other elements.\n */\nexport default function useNoRecursiveRenders( uniqueId, blockName = '' ) {\n\tconst previouslyRenderedBlocks = useContext( RenderedRefsContext );\n\tconst { name } = useBlockEditContext();\n\tblockName = blockName || name;\n\tconst hasAlreadyRendered = Boolean(\n\t\tpreviouslyRenderedBlocks[ blockName ]?.has( uniqueId )\n\t);\n\tconst newRenderedBlocks = useMemo(\n\t\t() => addToBlockType( previouslyRenderedBlocks, blockName, uniqueId ),\n\t\t[ previouslyRenderedBlocks, blockName, uniqueId ]\n\t);\n\tconst Provider = useCallback(\n\t\t( { children } ) => (\n\t\t\t<RenderedRefsContext.Provider value={ newRenderedBlocks }>\n\t\t\t\t{ children }\n\t\t\t</RenderedRefsContext.Provider>\n\t\t),\n\t\t[ newRenderedBlocks ]\n\t);\n\treturn [ hasAlreadyRendered, Provider ];\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/block-editor/src/components/use-no-recursive-renders/index.js"],"names":["createContext","useCallback","useContext","useMemo","useBlockEditContext","RenderedRefsContext","addToBlockType","renderedBlocks","blockName","uniqueId","result","Set","add","useNoRecursiveRenders","previouslyRenderedBlocks","name","hasAlreadyRendered","Boolean","has","newRenderedBlocks","Provider","children"],"mappings":";;AAAA;AACA;AACA;AACA,SACCA,aADD,EAECC,WAFD,EAGCC,UAHD,EAICC,OAJD,QAKO,oBALP;AAOA;AACA;AACA;;AACA,SAASC,mBAAT,QAAoC,uBAApC;AAEA,MAAMC,mBAAmB,GAAGL,aAAa,CAAE,EAAF,CAAzC;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAASM,cAAT,CAAyBC,cAAzB,EAAyCC,SAAzC,EAAoDC,QAApD,EAA+D;AAC9D,QAAMC,MAAM,GAAG,EACd,GAAGH,cADW;AAEd,KAAEC,SAAF,GAAeD,cAAc,CAAEC,SAAF,CAAd,GACZ,IAAIG,GAAJ,CAASJ,cAAc,CAAEC,SAAF,CAAvB,CADY,GAEZ,IAAIG,GAAJ;AAJW,GAAf;AAMAD,EAAAA,MAAM,CAAEF,SAAF,CAAN,CAAoBI,GAApB,CAAyBH,QAAzB;AAEA,SAAOC,MAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,eAAe,SAASG,qBAAT,CAAgCJ,QAAhC,EAA2D;AAAA;;AAAA,MAAjBD,SAAiB,uEAAL,EAAK;AACzE,QAAMM,wBAAwB,GAAGZ,UAAU,CAAEG,mBAAF,CAA3C;AACA,QAAM;AAAEU,IAAAA;AAAF,MAAWX,mBAAmB,EAApC;AACAI,EAAAA,SAAS,GAAGA,SAAS,IAAIO,IAAzB;AACA,QAAMC,kBAAkB,GAAGC,OAAO,0BACjCH,wBAAwB,CAAEN,SAAF,CADS,0DACjC,sBAAuCU,GAAvC,CAA4CT,QAA5C,CADiC,CAAlC;AAGA,QAAMU,iBAAiB,GAAGhB,OAAO,CAChC,MAAMG,cAAc,CAAEQ,wBAAF,EAA4BN,SAA5B,EAAuCC,QAAvC,CADY,EAEhC,CAAEK,wBAAF,EAA4BN,SAA5B,EAAuCC,QAAvC,CAFgC,CAAjC;AAIA,QAAMW,QAAQ,GAAGnB,WAAW,CAC3B;AAAA,QAAE;AAAEoB,MAAAA;AAAF,KAAF;AAAA,WACC,cAAC,mBAAD,CAAqB,QAArB;AAA8B,MAAA,KAAK,EAAGF;AAAtC,OACGE,QADH,CADD;AAAA,GAD2B,EAM3B,CAAEF,iBAAF,CAN2B,CAA5B;AAQA,SAAO,CAAEH,kBAAF,EAAsBI,QAAtB,CAAP;AACA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tcreateContext,\n\tuseCallback,\n\tuseContext,\n\tuseMemo,\n} from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { useBlockEditContext } from '../block-edit/context';\n\nconst RenderedRefsContext = createContext( {} );\n\n/**\n * Immutably adds an unique identifier to a set scoped for a given block type.\n *\n * @param {Object} renderedBlocks Rendered blocks grouped by block name\n * @param {string} blockName Name of the block.\n * @param {*} uniqueId Any value that acts as a unique identifier for a block instance.\n *\n * @return {Object} The list of rendered blocks grouped by block name.\n */\nfunction addToBlockType( renderedBlocks, blockName, uniqueId ) {\n\tconst result = {\n\t\t...renderedBlocks,\n\t\t[ blockName ]: renderedBlocks[ blockName ]\n\t\t\t? new Set( renderedBlocks[ blockName ] )\n\t\t\t: new Set(),\n\t};\n\tresult[ blockName ].add( uniqueId );\n\n\treturn result;\n}\n\n/**\n * A React hook for keeping track of blocks previously rendered up in the block\n * tree. Blocks susceptible to recursion can use this hook in their `Edit`\n * function to prevent said recursion.\n *\n * @param {*} uniqueId Any value that acts as a unique identifier for a block instance.\n * @param {string} blockName Optional block name.\n *\n * @return {[boolean, Function]} A tuple of:\n * - a boolean describing whether the provided id\n * has already been rendered;\n * - a React context provider to be used to wrap\n * other elements.\n */\nexport default function useNoRecursiveRenders( uniqueId, blockName = '' ) {\n\tconst previouslyRenderedBlocks = useContext( RenderedRefsContext );\n\tconst { name } = useBlockEditContext();\n\tblockName = blockName || name;\n\tconst hasAlreadyRendered = Boolean(\n\t\tpreviouslyRenderedBlocks[ blockName ]?.has( uniqueId )\n\t);\n\tconst newRenderedBlocks = useMemo(\n\t\t() => addToBlockType( previouslyRenderedBlocks, blockName, uniqueId ),\n\t\t[ previouslyRenderedBlocks, blockName, uniqueId ]\n\t);\n\tconst Provider = useCallback(\n\t\t( { children } ) => (\n\t\t\t<RenderedRefsContext.Provider value={ newRenderedBlocks }>\n\t\t\t\t{ children }\n\t\t\t</RenderedRefsContext.Provider>\n\t\t),\n\t\t[ newRenderedBlocks ]\n\t);\n\treturn [ hasAlreadyRendered, Provider ];\n}\n"]}
|