@wordpress/block-editor 12.24.0 → 12.25.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 +2 -0
- package/README.md +1 -1
- package/build/components/alignment-control/ui.js +3 -1
- package/build/components/alignment-control/ui.js.map +1 -1
- package/build/components/block-inspector/index.js +1 -1
- package/build/components/block-inspector/index.js.map +1 -1
- package/build/components/block-list/block.js +0 -9
- package/build/components/block-list/block.js.map +1 -1
- package/build/components/block-list/index.js +4 -3
- package/build/components/block-list/index.js.map +1 -1
- package/build/components/block-list/index.native.js +1 -9
- package/build/components/block-list/index.native.js.map +1 -1
- package/build/components/block-list/use-block-props/index.js +6 -6
- package/build/components/block-list/use-block-props/index.js.map +1 -1
- package/build/components/block-list/use-block-props/use-block-refs.js +17 -46
- package/build/components/block-list/use-block-props/use-block-refs.js.map +1 -1
- package/build/components/block-list/use-block-props/use-is-hovered.js +10 -14
- package/build/components/block-list/use-block-props/use-is-hovered.js.map +1 -1
- package/build/components/block-mover/index.native.js +3 -1
- package/build/components/block-mover/index.native.js.map +1 -1
- package/build/components/block-settings-menu/block-settings-dropdown.js +0 -25
- package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
- package/build/components/block-switcher/pattern-transformations-menu.js +3 -1
- package/build/components/block-switcher/pattern-transformations-menu.js.map +1 -1
- package/build/components/block-switcher/use-transformed-patterns.js +6 -2
- package/build/components/block-switcher/use-transformed-patterns.js.map +1 -1
- package/build/components/block-switcher/utils.js +15 -5
- package/build/components/block-switcher/utils.js.map +1 -1
- package/build/components/block-toolbar/use-has-block-toolbar.js +14 -9
- package/build/components/block-toolbar/use-has-block-toolbar.js.map +1 -1
- package/build/components/block-tools/index.js +3 -1
- package/build/components/block-tools/index.js.map +1 -1
- package/build/components/block-tools/use-show-block-tools.js +2 -5
- package/build/components/block-tools/use-show-block-tools.js.map +1 -1
- package/build/components/block-tools/zoom-out-mode-inserters.js +5 -1
- package/build/components/block-tools/zoom-out-mode-inserters.js.map +1 -1
- package/build/components/block-variation-picker/index.js +3 -2
- package/build/components/block-variation-picker/index.js.map +1 -1
- package/build/components/block-variation-transforms/index.js +3 -1
- package/build/components/block-variation-transforms/index.js.map +1 -1
- package/build/components/floating-toolbar/index.native.js +9 -5
- package/build/components/floating-toolbar/index.native.js.map +1 -1
- package/build/components/global-styles/background-panel.js +1 -1
- package/build/components/global-styles/background-panel.js.map +1 -1
- package/build/components/global-styles/color-panel.js +3 -1
- package/build/components/global-styles/color-panel.js.map +1 -1
- package/build/components/global-styles/dimensions-panel.js +16 -0
- package/build/components/global-styles/dimensions-panel.js.map +1 -1
- package/build/components/global-styles/hooks.js +3 -2
- package/build/components/global-styles/hooks.js.map +1 -1
- package/build/components/global-styles/typography-panel.js +23 -23
- package/build/components/global-styles/typography-panel.js.map +1 -1
- package/build/components/global-styles/use-global-styles-output.js +149 -132
- package/build/components/global-styles/use-global-styles-output.js.map +1 -1
- package/build/components/global-styles/utils.js +45 -0
- package/build/components/global-styles/utils.js.map +1 -1
- package/build/components/inner-blocks/index.js +16 -2
- package/build/components/inner-blocks/index.js.map +1 -1
- package/build/components/inserter/block-patterns-tab/index.js +12 -31
- package/build/components/inserter/block-patterns-tab/index.js.map +1 -1
- package/build/components/inserter/block-types-tab.js +4 -0
- package/build/components/inserter/block-types-tab.js.map +1 -1
- package/build/components/inserter/category-tabs/index.js +56 -0
- package/build/components/inserter/category-tabs/index.js.map +1 -0
- package/build/components/inserter/media-tab/index.js +2 -2
- package/build/components/inserter/media-tab/index.js.map +1 -1
- package/build/components/inserter/media-tab/media-panel.js +0 -25
- package/build/components/inserter/media-tab/media-panel.js.map +1 -1
- package/build/components/inserter/media-tab/media-preview.js +13 -3
- package/build/components/inserter/media-tab/media-preview.js.map +1 -1
- package/build/components/inserter/media-tab/media-tab.js +15 -29
- package/build/components/inserter/media-tab/media-tab.js.map +1 -1
- package/build/components/inserter/menu.js +59 -69
- package/build/components/inserter/menu.js.map +1 -1
- package/build/components/inserter/tabs.js +6 -6
- package/build/components/inserter/tabs.js.map +1 -1
- package/build/components/line-height-control/index.js +6 -2
- package/build/components/line-height-control/index.js.map +1 -1
- package/build/components/link-control/search-item.js +9 -3
- package/build/components/link-control/search-item.js.map +1 -1
- package/build/components/list-view/block-select-button.js +5 -170
- package/build/components/list-view/block-select-button.js.map +1 -1
- package/build/components/list-view/block.js +166 -14
- package/build/components/list-view/block.js.map +1 -1
- package/build/components/list-view/index.js +1 -1
- package/build/components/list-view/index.js.map +1 -1
- package/build/components/list-view/use-list-view-drop-zone.js +1 -1
- package/build/components/list-view/use-list-view-drop-zone.js.map +1 -1
- package/build/components/list-view/utils.js +3 -1
- package/build/components/list-view/utils.js.map +1 -1
- package/build/components/media-placeholder/index.js +3 -3
- package/build/components/media-placeholder/index.js.map +1 -1
- package/build/components/navigable-toolbar/index.js +3 -1
- package/build/components/navigable-toolbar/index.js.map +1 -1
- package/build/components/provider/block-refs-provider.js +3 -4
- package/build/components/provider/block-refs-provider.js.map +1 -1
- package/build/components/provider/use-block-sync.js +3 -12
- package/build/components/provider/use-block-sync.js.map +1 -1
- package/build/components/rich-text/event-listeners/before-input-rules.js +93 -0
- package/build/components/rich-text/event-listeners/before-input-rules.js.map +1 -0
- package/build/components/rich-text/event-listeners/delete.js +58 -0
- package/build/components/rich-text/event-listeners/delete.js.map +1 -0
- package/build/components/rich-text/event-listeners/enter.js +98 -0
- package/build/components/rich-text/event-listeners/enter.js.map +1 -0
- package/build/components/rich-text/event-listeners/firefox-compat.js +36 -0
- package/build/components/rich-text/event-listeners/firefox-compat.js.map +1 -0
- package/build/components/rich-text/event-listeners/index.js +44 -0
- package/build/components/rich-text/event-listeners/index.js.map +1 -0
- package/build/components/rich-text/event-listeners/input-events.js +22 -0
- package/build/components/rich-text/event-listeners/input-events.js.map +1 -0
- package/build/components/rich-text/event-listeners/input-rules.js +135 -0
- package/build/components/rich-text/event-listeners/input-rules.js.map +1 -0
- package/build/components/rich-text/event-listeners/insert-replacement-text.js +33 -0
- package/build/components/rich-text/event-listeners/insert-replacement-text.js.map +1 -0
- package/build/components/rich-text/event-listeners/paste-handler.js +146 -0
- package/build/components/rich-text/event-listeners/paste-handler.js.map +1 -0
- package/build/components/rich-text/event-listeners/remove-browser-shortcuts.js +27 -0
- package/build/components/rich-text/event-listeners/remove-browser-shortcuts.js.map +1 -0
- package/build/components/rich-text/event-listeners/shortcuts.js +22 -0
- package/build/components/rich-text/event-listeners/shortcuts.js.map +1 -0
- package/build/components/rich-text/event-listeners/undo-automatic-change.js +51 -0
- package/build/components/rich-text/event-listeners/undo-automatic-change.js.map +1 -0
- package/build/components/rich-text/index.js +11 -31
- package/build/components/rich-text/index.js.map +1 -1
- package/build/components/rich-text/index.native.js +13 -3
- package/build/components/rich-text/index.native.js.map +1 -1
- package/build/components/rich-text/multiline.js +6 -2
- package/build/components/rich-text/multiline.js.map +1 -1
- package/build/components/rich-text/native/index.native.js +12 -0
- package/build/components/rich-text/native/index.native.js.map +1 -1
- package/build/components/rich-text/use-format-types.js +8 -4
- package/build/components/rich-text/use-format-types.js.map +1 -1
- package/build/components/segmented-text-control/index.js +62 -0
- package/build/components/segmented-text-control/index.js.map +1 -0
- package/build/components/spacing-sizes-control/input-controls/spacing-input-control.js +16 -2
- package/build/components/spacing-sizes-control/input-controls/spacing-input-control.js.map +1 -1
- package/build/components/text-alignment-control/index.js +76 -0
- package/build/components/text-alignment-control/index.js.map +1 -0
- package/build/components/text-decoration-control/index.js +21 -25
- package/build/components/text-decoration-control/index.js.map +1 -1
- package/build/components/text-transform-control/index.js +18 -22
- package/build/components/text-transform-control/index.js.map +1 -1
- package/build/components/use-block-display-information/index.js +9 -3
- package/build/components/use-block-display-information/index.js.map +1 -1
- package/build/components/use-on-block-drop/index.js +3 -1
- package/build/components/use-on-block-drop/index.js.map +1 -1
- package/build/components/writing-flow/use-drag-selection.js +3 -1
- package/build/components/writing-flow/use-drag-selection.js.map +1 -1
- package/build/components/writing-flow/use-tab-nav.js +3 -1
- package/build/components/writing-flow/use-tab-nav.js.map +1 -1
- package/build/components/writing-mode-control/index.js +16 -20
- package/build/components/writing-mode-control/index.js.map +1 -1
- package/build/hooks/duotone.js +3 -1
- package/build/hooks/duotone.js.map +1 -1
- package/build/hooks/utils.js +11 -6
- package/build/hooks/utils.js.map +1 -1
- package/build/private-apis.js +4 -2
- package/build/private-apis.js.map +1 -1
- package/build/store/actions.js +32 -8
- package/build/store/actions.js.map +1 -1
- package/build/store/private-selectors.js +27 -6
- package/build/store/private-selectors.js.map +1 -1
- package/build/store/reducer.js +11 -8
- package/build/store/reducer.js.map +1 -1
- package/build/store/selectors.js +21 -7
- package/build/store/selectors.js.map +1 -1
- package/build/utils/object.js +17 -0
- package/build/utils/object.js.map +1 -1
- package/build/utils/order-inserter-block-items.js +6 -2
- package/build/utils/order-inserter-block-items.js.map +1 -1
- package/build/utils/pasting.js +6 -2
- package/build/utils/pasting.js.map +1 -1
- package/build-module/components/alignment-control/ui.js +3 -1
- package/build-module/components/alignment-control/ui.js.map +1 -1
- package/build-module/components/block-inspector/index.js +1 -1
- package/build-module/components/block-inspector/index.js.map +1 -1
- package/build-module/components/block-list/block.js +0 -9
- package/build-module/components/block-list/block.js.map +1 -1
- package/build-module/components/block-list/index.js +4 -3
- package/build-module/components/block-list/index.js.map +1 -1
- package/build-module/components/block-list/index.native.js +1 -9
- package/build-module/components/block-list/index.native.js.map +1 -1
- package/build-module/components/block-list/use-block-props/index.js +6 -6
- package/build-module/components/block-list/use-block-props/index.js.map +1 -1
- package/build-module/components/block-list/use-block-props/use-block-refs.js +19 -48
- package/build-module/components/block-list/use-block-props/use-block-refs.js.map +1 -1
- package/build-module/components/block-list/use-block-props/use-is-hovered.js +10 -14
- package/build-module/components/block-list/use-block-props/use-is-hovered.js.map +1 -1
- package/build-module/components/block-mover/index.native.js +3 -1
- package/build-module/components/block-mover/index.native.js.map +1 -1
- package/build-module/components/block-settings-menu/block-settings-dropdown.js +1 -26
- package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
- package/build-module/components/block-switcher/pattern-transformations-menu.js +3 -1
- package/build-module/components/block-switcher/pattern-transformations-menu.js.map +1 -1
- package/build-module/components/block-switcher/use-transformed-patterns.js +6 -2
- package/build-module/components/block-switcher/use-transformed-patterns.js.map +1 -1
- package/build-module/components/block-switcher/utils.js +15 -5
- package/build-module/components/block-switcher/utils.js.map +1 -1
- package/build-module/components/block-toolbar/use-has-block-toolbar.js +14 -9
- package/build-module/components/block-toolbar/use-has-block-toolbar.js.map +1 -1
- package/build-module/components/block-tools/index.js +3 -1
- package/build-module/components/block-tools/index.js.map +1 -1
- package/build-module/components/block-tools/use-show-block-tools.js +2 -5
- package/build-module/components/block-tools/use-show-block-tools.js.map +1 -1
- package/build-module/components/block-tools/zoom-out-mode-inserters.js +5 -1
- package/build-module/components/block-tools/zoom-out-mode-inserters.js.map +1 -1
- package/build-module/components/block-variation-picker/index.js +3 -2
- package/build-module/components/block-variation-picker/index.js.map +1 -1
- package/build-module/components/block-variation-transforms/index.js +3 -1
- package/build-module/components/block-variation-transforms/index.js.map +1 -1
- package/build-module/components/floating-toolbar/index.native.js +9 -5
- package/build-module/components/floating-toolbar/index.native.js.map +1 -1
- package/build-module/components/global-styles/background-panel.js +1 -1
- package/build-module/components/global-styles/background-panel.js.map +1 -1
- package/build-module/components/global-styles/color-panel.js +3 -1
- package/build-module/components/global-styles/color-panel.js.map +1 -1
- package/build-module/components/global-styles/dimensions-panel.js +17 -1
- package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
- package/build-module/components/global-styles/hooks.js +3 -2
- package/build-module/components/global-styles/hooks.js.map +1 -1
- package/build-module/components/global-styles/typography-panel.js +24 -24
- package/build-module/components/global-styles/typography-panel.js.map +1 -1
- package/build-module/components/global-styles/use-global-styles-output.js +149 -132
- package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
- package/build-module/components/global-styles/utils.js +44 -0
- package/build-module/components/global-styles/utils.js.map +1 -1
- package/build-module/components/inner-blocks/index.js +16 -2
- package/build-module/components/inner-blocks/index.js.map +1 -1
- package/build-module/components/inserter/block-patterns-tab/index.js +13 -32
- package/build-module/components/inserter/block-patterns-tab/index.js.map +1 -1
- package/build-module/components/inserter/block-types-tab.js +4 -0
- package/build-module/components/inserter/block-types-tab.js.map +1 -1
- package/build-module/components/inserter/category-tabs/index.js +49 -0
- package/build-module/components/inserter/category-tabs/index.js.map +1 -0
- package/build-module/components/inserter/media-tab/index.js +1 -1
- package/build-module/components/inserter/media-tab/index.js.map +1 -1
- package/build-module/components/inserter/media-tab/media-panel.js +0 -24
- package/build-module/components/inserter/media-tab/media-panel.js.map +1 -1
- package/build-module/components/inserter/media-tab/media-preview.js +13 -3
- package/build-module/components/inserter/media-tab/media-preview.js.map +1 -1
- package/build-module/components/inserter/media-tab/media-tab.js +17 -31
- package/build-module/components/inserter/media-tab/media-tab.js.map +1 -1
- package/build-module/components/inserter/menu.js +61 -71
- package/build-module/components/inserter/menu.js.map +1 -1
- package/build-module/components/inserter/tabs.js +6 -6
- package/build-module/components/inserter/tabs.js.map +1 -1
- package/build-module/components/line-height-control/index.js +6 -2
- package/build-module/components/line-height-control/index.js.map +1 -1
- package/build-module/components/link-control/search-item.js +9 -3
- package/build-module/components/link-control/search-item.js.map +1 -1
- package/build-module/components/list-view/block-select-button.js +7 -172
- package/build-module/components/list-view/block-select-button.js.map +1 -1
- package/build-module/components/list-view/block.js +167 -15
- package/build-module/components/list-view/block.js.map +1 -1
- package/build-module/components/list-view/index.js +1 -1
- package/build-module/components/list-view/index.js.map +1 -1
- package/build-module/components/list-view/use-list-view-drop-zone.js +1 -1
- package/build-module/components/list-view/use-list-view-drop-zone.js.map +1 -1
- package/build-module/components/list-view/utils.js +3 -1
- package/build-module/components/list-view/utils.js.map +1 -1
- package/build-module/components/media-placeholder/index.js +3 -3
- package/build-module/components/media-placeholder/index.js.map +1 -1
- package/build-module/components/navigable-toolbar/index.js +3 -1
- package/build-module/components/navigable-toolbar/index.js.map +1 -1
- package/build-module/components/provider/block-refs-provider.js +3 -4
- package/build-module/components/provider/block-refs-provider.js.map +1 -1
- package/build-module/components/provider/use-block-sync.js +4 -13
- package/build-module/components/provider/use-block-sync.js.map +1 -1
- package/build-module/components/rich-text/event-listeners/before-input-rules.js +86 -0
- package/build-module/components/rich-text/event-listeners/before-input-rules.js.map +1 -0
- package/build-module/components/rich-text/event-listeners/delete.js +51 -0
- package/build-module/components/rich-text/event-listeners/delete.js.map +1 -0
- package/build-module/components/rich-text/event-listeners/enter.js +92 -0
- package/build-module/components/rich-text/event-listeners/enter.js.map +1 -0
- package/build-module/components/rich-text/event-listeners/firefox-compat.js +29 -0
- package/build-module/components/rich-text/event-listeners/firefox-compat.js.map +1 -0
- package/build-module/components/rich-text/event-listeners/index.js +36 -0
- package/build-module/components/rich-text/event-listeners/index.js.map +1 -0
- package/build-module/components/rich-text/event-listeners/input-events.js +15 -0
- package/build-module/components/rich-text/event-listeners/input-events.js.map +1 -0
- package/build-module/components/rich-text/event-listeners/input-rules.js +127 -0
- package/build-module/components/rich-text/event-listeners/input-rules.js.map +1 -0
- package/build-module/components/rich-text/event-listeners/insert-replacement-text.js +27 -0
- package/build-module/components/rich-text/event-listeners/insert-replacement-text.js.map +1 -0
- package/build-module/components/rich-text/event-listeners/paste-handler.js +142 -0
- package/build-module/components/rich-text/event-listeners/paste-handler.js.map +1 -0
- package/build-module/components/rich-text/event-listeners/remove-browser-shortcuts.js +21 -0
- package/build-module/components/rich-text/event-listeners/remove-browser-shortcuts.js.map +1 -0
- package/build-module/components/rich-text/event-listeners/shortcuts.js +15 -0
- package/build-module/components/rich-text/event-listeners/shortcuts.js.map +1 -0
- package/build-module/components/rich-text/event-listeners/undo-automatic-change.js +45 -0
- package/build-module/components/rich-text/event-listeners/undo-automatic-change.js.map +1 -0
- package/build-module/components/rich-text/index.js +12 -32
- package/build-module/components/rich-text/index.js.map +1 -1
- package/build-module/components/rich-text/index.native.js +13 -3
- package/build-module/components/rich-text/index.native.js.map +1 -1
- package/build-module/components/rich-text/multiline.js +6 -2
- package/build-module/components/rich-text/multiline.js.map +1 -1
- package/build-module/components/rich-text/native/index.native.js +12 -0
- package/build-module/components/rich-text/native/index.native.js.map +1 -1
- package/build-module/components/rich-text/use-format-types.js +8 -4
- package/build-module/components/rich-text/use-format-types.js.map +1 -1
- package/build-module/components/segmented-text-control/index.js +55 -0
- package/build-module/components/segmented-text-control/index.js.map +1 -0
- package/build-module/components/spacing-sizes-control/input-controls/spacing-input-control.js +16 -2
- package/build-module/components/spacing-sizes-control/input-controls/spacing-input-control.js.map +1 -1
- package/build-module/components/text-alignment-control/index.js +68 -0
- package/build-module/components/text-alignment-control/index.js.map +1 -0
- package/build-module/components/text-decoration-control/index.js +21 -25
- package/build-module/components/text-decoration-control/index.js.map +1 -1
- package/build-module/components/text-transform-control/index.js +18 -22
- package/build-module/components/text-transform-control/index.js.map +1 -1
- package/build-module/components/use-block-display-information/index.js +9 -3
- package/build-module/components/use-block-display-information/index.js.map +1 -1
- package/build-module/components/use-on-block-drop/index.js +3 -1
- package/build-module/components/use-on-block-drop/index.js.map +1 -1
- package/build-module/components/writing-flow/use-drag-selection.js +3 -1
- package/build-module/components/writing-flow/use-drag-selection.js.map +1 -1
- package/build-module/components/writing-flow/use-tab-nav.js +3 -1
- package/build-module/components/writing-flow/use-tab-nav.js.map +1 -1
- package/build-module/components/writing-mode-control/index.js +16 -20
- package/build-module/components/writing-mode-control/index.js.map +1 -1
- package/build-module/hooks/duotone.js +3 -1
- package/build-module/hooks/duotone.js.map +1 -1
- package/build-module/hooks/utils.js +11 -6
- package/build-module/hooks/utils.js.map +1 -1
- package/build-module/private-apis.js +4 -2
- package/build-module/private-apis.js.map +1 -1
- package/build-module/store/actions.js +32 -8
- package/build-module/store/actions.js.map +1 -1
- package/build-module/store/private-selectors.js +27 -5
- package/build-module/store/private-selectors.js.map +1 -1
- package/build-module/store/reducer.js +11 -8
- package/build-module/store/reducer.js.map +1 -1
- package/build-module/store/selectors.js +21 -7
- package/build-module/store/selectors.js.map +1 -1
- package/build-module/utils/object.js +16 -0
- package/build-module/utils/object.js.map +1 -1
- package/build-module/utils/order-inserter-block-items.js +6 -2
- package/build-module/utils/order-inserter-block-items.js.map +1 -1
- package/build-module/utils/pasting.js +6 -2
- package/build-module/utils/pasting.js.map +1 -1
- package/build-style/content-rtl.css +41 -68
- package/build-style/content.css +41 -68
- package/build-style/style-rtl.css +100 -199
- package/build-style/style.css +100 -199
- package/package.json +31 -31
- package/src/components/alignment-control/ui.js +3 -1
- package/src/components/block-bindings-toolbar-indicator/style.scss +1 -4
- package/src/components/block-canvas/style.scss +1 -3
- package/src/components/block-draggable/test/helpers.native.js +8 -8
- package/src/components/block-inspector/index.js +1 -2
- package/src/components/block-list/block.js +2 -13
- package/src/components/block-list/content.scss +9 -1
- package/src/components/block-list/index.js +4 -4
- package/src/components/block-list/index.native.js +1 -6
- package/src/components/block-list/use-block-props/index.js +12 -4
- package/src/components/block-list/use-block-props/use-block-refs.js +17 -57
- package/src/components/block-list/use-block-props/use-is-hovered.js +11 -16
- package/src/components/block-mover/index.native.js +3 -1
- package/src/components/block-patterns-list/style.scss +1 -3
- package/src/components/block-preview/style.scss +13 -15
- package/src/components/block-settings-menu/block-settings-dropdown.js +1 -51
- package/src/components/block-switcher/pattern-transformations-menu.js +3 -1
- package/src/components/block-switcher/use-transformed-patterns.js +6 -2
- package/src/components/block-switcher/utils.js +14 -5
- package/src/components/block-toolbar/style.scss +8 -11
- package/src/components/block-toolbar/use-has-block-toolbar.js +21 -16
- package/src/components/block-tools/index.js +3 -1
- package/src/components/block-tools/use-show-block-tools.js +36 -48
- package/src/components/block-tools/zoom-out-mode-inserters.js +5 -1
- package/src/components/block-variation-picker/content.scss +22 -72
- package/src/components/block-variation-picker/index.js +3 -2
- package/src/components/block-variation-transforms/index.js +3 -1
- package/src/components/floating-toolbar/index.native.js +5 -2
- package/src/components/global-styles/background-panel.js +1 -3
- package/src/components/global-styles/color-panel.js +3 -1
- package/src/components/global-styles/dimensions-panel.js +18 -1
- package/src/components/global-styles/hooks.js +2 -0
- package/src/components/global-styles/test/utils.js +21 -0
- package/src/components/global-styles/typography-panel.js +27 -23
- package/src/components/global-styles/use-global-styles-output.js +211 -187
- package/src/components/global-styles/utils.js +55 -0
- package/src/components/inner-blocks/index.js +14 -1
- package/src/components/inserter/block-patterns-tab/index.js +15 -65
- package/src/components/inserter/block-types-tab.js +5 -0
- package/src/components/inserter/category-tabs/index.js +74 -0
- package/src/components/inserter/media-tab/index.js +1 -1
- package/src/components/inserter/media-tab/media-panel.js +0 -22
- package/src/components/inserter/media-tab/media-preview.js +15 -7
- package/src/components/inserter/media-tab/media-tab.js +44 -83
- package/src/components/inserter/menu.js +139 -117
- package/src/components/inserter/style.scss +90 -170
- package/src/components/inserter/tabs.js +5 -13
- package/src/components/line-height-control/index.js +6 -2
- package/src/components/link-control/search-item.js +9 -3
- package/src/components/list-view/block-select-button.js +73 -266
- package/src/components/list-view/block.js +218 -28
- package/src/components/list-view/index.js +1 -1
- package/src/components/list-view/style.scss +20 -28
- package/src/components/list-view/use-list-view-drop-zone.js +1 -1
- package/src/components/list-view/utils.js +3 -1
- package/src/components/media-placeholder/content.scss +0 -11
- package/src/components/media-placeholder/index.js +3 -3
- package/src/components/navigable-toolbar/index.js +3 -1
- package/src/components/provider/block-refs-provider.js +3 -8
- package/src/components/provider/test/use-block-sync.js +7 -0
- package/src/components/provider/use-block-sync.js +3 -20
- package/src/components/rich-text/event-listeners/before-input-rules.js +92 -0
- package/src/components/rich-text/event-listeners/delete.js +53 -0
- package/src/components/rich-text/event-listeners/enter.js +104 -0
- package/src/components/rich-text/event-listeners/firefox-compat.js +31 -0
- package/src/components/rich-text/event-listeners/index.js +56 -0
- package/src/components/rich-text/event-listeners/input-events.js +13 -0
- package/src/components/rich-text/event-listeners/input-rules.js +146 -0
- package/src/components/rich-text/event-listeners/insert-replacement-text.js +28 -0
- package/src/components/rich-text/event-listeners/paste-handler.js +169 -0
- package/src/components/rich-text/event-listeners/remove-browser-shortcuts.js +24 -0
- package/src/components/rich-text/event-listeners/shortcuts.js +13 -0
- package/src/components/rich-text/event-listeners/undo-automatic-change.js +45 -0
- package/src/components/rich-text/index.js +7 -34
- package/src/components/rich-text/index.native.js +11 -0
- package/src/components/rich-text/multiline.js +6 -2
- package/src/components/rich-text/native/index.native.js +11 -0
- package/src/components/rich-text/use-format-types.js +6 -2
- package/src/components/segmented-text-control/index.js +63 -0
- package/src/components/{writing-mode-control → segmented-text-control}/style.scss +2 -5
- package/src/components/spacing-sizes-control/input-controls/spacing-input-control.js +16 -1
- package/src/components/text-alignment-control/index.js +91 -0
- package/src/components/text-alignment-control/stories/index.story.js +39 -0
- package/src/components/text-decoration-control/index.js +20 -33
- package/src/components/text-transform-control/index.js +17 -30
- package/src/components/use-block-display-information/index.js +9 -3
- package/src/components/use-on-block-drop/index.js +3 -1
- package/src/components/writing-flow/use-drag-selection.js +3 -1
- package/src/components/writing-flow/use-tab-nav.js +3 -1
- package/src/components/writing-mode-control/index.js +15 -28
- package/src/hooks/duotone.js +3 -1
- package/src/hooks/utils.js +16 -2
- package/src/private-apis.js +4 -2
- package/src/store/actions.js +36 -12
- package/src/store/private-selectors.js +28 -4
- package/src/store/reducer.js +13 -23
- package/src/store/selectors.js +20 -7
- package/src/style.scss +1 -2
- package/src/utils/object.js +16 -0
- package/src/utils/order-inserter-block-items.js +6 -2
- package/src/utils/pasting.js +6 -2
- package/build/components/block-list/use-block-props/use-block-moving-mode-class-names.js +0 -54
- package/build/components/block-list/use-block-props/use-block-moving-mode-class-names.js.map +0 -1
- package/build/components/rich-text/use-before-input-rules.js +0 -98
- package/build/components/rich-text/use-before-input-rules.js.map +0 -1
- package/build/components/rich-text/use-delete.js +0 -64
- package/build/components/rich-text/use-delete.js.map +0 -1
- package/build/components/rich-text/use-enter.js +0 -109
- package/build/components/rich-text/use-enter.js.map +0 -1
- package/build/components/rich-text/use-firefox-compat.js +0 -44
- package/build/components/rich-text/use-firefox-compat.js.map +0 -1
- package/build/components/rich-text/use-input-events.js +0 -25
- package/build/components/rich-text/use-input-events.js.map +0 -1
- package/build/components/rich-text/use-input-rules.js +0 -139
- package/build/components/rich-text/use-input-rules.js.map +0 -1
- package/build/components/rich-text/use-insert-replacement-text.js +0 -38
- package/build/components/rich-text/use-insert-replacement-text.js.map +0 -1
- package/build/components/rich-text/use-paste-handler.js +0 -158
- package/build/components/rich-text/use-paste-handler.js.map +0 -1
- package/build/components/rich-text/use-remove-browser-shortcuts.js +0 -32
- package/build/components/rich-text/use-remove-browser-shortcuts.js.map +0 -1
- package/build/components/rich-text/use-shortcuts.js +0 -25
- package/build/components/rich-text/use-shortcuts.js.map +0 -1
- package/build/components/rich-text/use-undo-automatic-change.js +0 -53
- package/build/components/rich-text/use-undo-automatic-change.js.map +0 -1
- package/build-module/components/block-list/use-block-props/use-block-moving-mode-class-names.js +0 -47
- package/build-module/components/block-list/use-block-props/use-block-moving-mode-class-names.js.map +0 -1
- package/build-module/components/rich-text/use-before-input-rules.js +0 -92
- package/build-module/components/rich-text/use-before-input-rules.js.map +0 -1
- package/build-module/components/rich-text/use-delete.js +0 -57
- package/build-module/components/rich-text/use-delete.js.map +0 -1
- package/build-module/components/rich-text/use-enter.js +0 -102
- package/build-module/components/rich-text/use-enter.js.map +0 -1
- package/build-module/components/rich-text/use-firefox-compat.js +0 -37
- package/build-module/components/rich-text/use-firefox-compat.js.map +0 -1
- package/build-module/components/rich-text/use-input-events.js +0 -18
- package/build-module/components/rich-text/use-input-events.js.map +0 -1
- package/build-module/components/rich-text/use-input-rules.js +0 -132
- package/build-module/components/rich-text/use-input-rules.js.map +0 -1
- package/build-module/components/rich-text/use-insert-replacement-text.js +0 -32
- package/build-module/components/rich-text/use-insert-replacement-text.js.map +0 -1
- package/build-module/components/rich-text/use-paste-handler.js +0 -152
- package/build-module/components/rich-text/use-paste-handler.js.map +0 -1
- package/build-module/components/rich-text/use-remove-browser-shortcuts.js +0 -26
- package/build-module/components/rich-text/use-remove-browser-shortcuts.js.map +0 -1
- package/build-module/components/rich-text/use-shortcuts.js +0 -18
- package/build-module/components/rich-text/use-shortcuts.js.map +0 -1
- package/build-module/components/rich-text/use-undo-automatic-change.js +0 -46
- package/build-module/components/rich-text/use-undo-automatic-change.js.map +0 -1
- package/src/components/block-list/use-block-props/use-block-moving-mode-class-names.js +0 -55
- package/src/components/rich-text/use-before-input-rules.js +0 -99
- package/src/components/rich-text/use-delete.js +0 -59
- package/src/components/rich-text/use-enter.js +0 -110
- package/src/components/rich-text/use-firefox-compat.js +0 -39
- package/src/components/rich-text/use-input-events.js +0 -19
- package/src/components/rich-text/use-input-rules.js +0 -150
- package/src/components/rich-text/use-insert-replacement-text.js +0 -31
- package/src/components/rich-text/use-paste-handler.js +0 -180
- package/src/components/rich-text/use-remove-browser-shortcuts.js +0 -29
- package/src/components/rich-text/use-shortcuts.js +0 -19
- package/src/components/rich-text/use-undo-automatic-change.js +0 -46
- package/src/components/text-decoration-control/style.scss +0 -18
- package/src/components/text-transform-control/style.scss +0 -18
|
@@ -156,13 +156,13 @@
|
|
|
156
156
|
|
|
157
157
|
&.is-displacement-up {
|
|
158
158
|
transition: transform 0.2s;
|
|
159
|
-
transform: translateY(-
|
|
159
|
+
transform: translateY(-32px);
|
|
160
160
|
@include reduce-motion("transition");
|
|
161
161
|
}
|
|
162
162
|
|
|
163
163
|
&.is-displacement-down {
|
|
164
164
|
transition: transform 0.2s;
|
|
165
|
-
transform: translateY(
|
|
165
|
+
transform: translateY(32px);
|
|
166
166
|
@include reduce-motion("transition");
|
|
167
167
|
}
|
|
168
168
|
|
|
@@ -172,20 +172,20 @@
|
|
|
172
172
|
// worth of space for the visual indicator of where a block will be placed when dropped.
|
|
173
173
|
&.is-after-dragged-blocks {
|
|
174
174
|
transition: transform 0.2s;
|
|
175
|
-
transform: translateY(calc(var(--wp-admin--list-view-dragged-items-height,
|
|
175
|
+
transform: translateY(calc(var(--wp-admin--list-view-dragged-items-height, 32px) * -1));
|
|
176
176
|
@include reduce-motion("transition");
|
|
177
177
|
}
|
|
178
178
|
|
|
179
179
|
&.is-after-dragged-blocks.is-displacement-up {
|
|
180
180
|
transition: transform 0.2s;
|
|
181
|
-
transform: translateY(calc(-
|
|
181
|
+
transform: translateY(calc(-32px + var(--wp-admin--list-view-dragged-items-height, 32px) * -1));
|
|
182
182
|
@include reduce-motion("transition");
|
|
183
183
|
}
|
|
184
184
|
|
|
185
185
|
&.is-after-dragged-blocks.is-displacement-down {
|
|
186
186
|
transition: transform 0.2s;
|
|
187
187
|
transform:
|
|
188
|
-
translateY(calc(
|
|
188
|
+
translateY(calc(32px + var(--wp-admin--list-view-dragged-items-height, 32px) *
|
|
189
189
|
-1));
|
|
190
190
|
@include reduce-motion("transition");
|
|
191
191
|
}
|
|
@@ -204,15 +204,15 @@
|
|
|
204
204
|
z-index: -9999;
|
|
205
205
|
}
|
|
206
206
|
|
|
207
|
-
// List View renders a fixed number of items and relies on each item having a fixed height of
|
|
207
|
+
// List View renders a fixed number of items and relies on each item having a fixed height of 32px.
|
|
208
208
|
// If this value changes, we should also change the itemHeight value set in useFixedWindowList.
|
|
209
209
|
// See: https://github.com/WordPress/gutenberg/pull/35230 for additional context.
|
|
210
210
|
.block-editor-list-view-block-contents {
|
|
211
211
|
display: flex;
|
|
212
212
|
align-items: center;
|
|
213
213
|
width: 100%;
|
|
214
|
-
height:
|
|
215
|
-
padding: ($grid-unit-15 * 0.5)
|
|
214
|
+
height: $grid-unit-40;
|
|
215
|
+
padding: ($grid-unit-15 * 0.5) $grid-unit-05 ($grid-unit-15 * 0.5) 0;
|
|
216
216
|
text-align: left;
|
|
217
217
|
border-radius: $radius-block-ui;
|
|
218
218
|
position: relative;
|
|
@@ -277,15 +277,14 @@
|
|
|
277
277
|
}
|
|
278
278
|
|
|
279
279
|
.block-editor-block-icon {
|
|
280
|
-
margin-right: $grid-unit-10;
|
|
280
|
+
margin-right: $grid-unit-10 * 0.5; // 6px.
|
|
281
281
|
flex: 0 0 $icon-size;
|
|
282
282
|
}
|
|
283
283
|
|
|
284
284
|
.block-editor-list-view-block__menu-cell,
|
|
285
285
|
.block-editor-list-view-block__mover-cell,
|
|
286
286
|
.block-editor-list-view-block__contents-cell {
|
|
287
|
-
padding
|
|
288
|
-
padding-bottom: 0;
|
|
287
|
+
padding: 0;
|
|
289
288
|
}
|
|
290
289
|
|
|
291
290
|
.block-editor-list-view-block__menu-cell,
|
|
@@ -316,7 +315,7 @@
|
|
|
316
315
|
}
|
|
317
316
|
|
|
318
317
|
.block-editor-list-view-block__menu-cell {
|
|
319
|
-
padding-right: $grid-unit-
|
|
318
|
+
padding-right: $grid-unit-05;
|
|
320
319
|
|
|
321
320
|
.components-button.has-icon {
|
|
322
321
|
height: 24px;
|
|
@@ -379,8 +378,10 @@
|
|
|
379
378
|
}
|
|
380
379
|
}
|
|
381
380
|
|
|
382
|
-
.
|
|
383
|
-
|
|
381
|
+
// Style lock and position icons in line with image previews.
|
|
382
|
+
.block-editor-list-view-block-select-button__label-wrapper svg {
|
|
383
|
+
left: $grid-unit-05 * 0.5; // 2px.
|
|
384
|
+
position: relative;
|
|
384
385
|
}
|
|
385
386
|
|
|
386
387
|
.block-editor-list-view-block-select-button__title {
|
|
@@ -464,21 +465,12 @@ $block-navigation-max-indent: 8;
|
|
|
464
465
|
// Chevron container metrics.
|
|
465
466
|
.block-editor-list-view__expander {
|
|
466
467
|
height: $icon-size;
|
|
467
|
-
margin-left: $grid-unit-05;
|
|
468
468
|
width: $icon-size;
|
|
469
469
|
cursor: pointer;
|
|
470
470
|
}
|
|
471
471
|
|
|
472
472
|
.block-editor-list-view-leaf[aria-level] .block-editor-list-view__expander {
|
|
473
|
-
margin-left:
|
|
474
|
-
($icon-size) * $block-navigation-max-indent + 4 *
|
|
475
|
-
($block-navigation-max-indent - 1);
|
|
476
|
-
}
|
|
477
|
-
|
|
478
|
-
.block-editor-list-view-leaf:not([aria-level="1"]) {
|
|
479
|
-
.block-editor-list-view__expander {
|
|
480
|
-
margin-right: 4px;
|
|
481
|
-
}
|
|
473
|
+
margin-left: ($grid-unit-30 * $block-navigation-max-indent);
|
|
482
474
|
}
|
|
483
475
|
|
|
484
476
|
// When updating the margin for each indentation level, the corresponding
|
|
@@ -488,9 +480,9 @@ $block-navigation-max-indent: 8;
|
|
|
488
480
|
.block-editor-list-view-leaf[aria-level="#{ $i + 1 }"]
|
|
489
481
|
.block-editor-list-view__expander {
|
|
490
482
|
@if $i - 1 >= 0 {
|
|
491
|
-
margin-left: ($
|
|
483
|
+
margin-left: ($grid-unit-30 * $i); // Effectivly centers the expander below the parent's icon.
|
|
492
484
|
} @else {
|
|
493
|
-
margin-left:
|
|
485
|
+
margin-left: 0;
|
|
494
486
|
}
|
|
495
487
|
}
|
|
496
488
|
}
|
|
@@ -540,7 +532,7 @@ svg {
|
|
|
540
532
|
|
|
541
533
|
.block-editor-list-view-drop-indicator__line {
|
|
542
534
|
background: rgba(var(--wp-admin-theme-color--rgb), 0.04);
|
|
543
|
-
height:
|
|
535
|
+
height: 32px;
|
|
544
536
|
border-radius: 4px;
|
|
545
537
|
overflow: hidden;
|
|
546
538
|
}
|
|
@@ -553,7 +545,7 @@ svg {
|
|
|
553
545
|
.block-editor-list-view-placeholder {
|
|
554
546
|
padding: 0;
|
|
555
547
|
margin: 0;
|
|
556
|
-
height:
|
|
548
|
+
height: 32px;
|
|
557
549
|
}
|
|
558
550
|
|
|
559
551
|
.list-view-appender .block-editor-inserter__toggle {
|
|
@@ -62,7 +62,7 @@ import { store as blockEditorStore } from '../../store';
|
|
|
62
62
|
|
|
63
63
|
// When the indentation level, the corresponding left margin in `style.scss`
|
|
64
64
|
// must be updated as well to ensure the drop zone is aligned with the indentation.
|
|
65
|
-
export const NESTING_LEVEL_INDENTATION =
|
|
65
|
+
export const NESTING_LEVEL_INDENTATION = 24;
|
|
66
66
|
|
|
67
67
|
/**
|
|
68
68
|
* Determines whether the user is positioning the dragged block to be
|
|
@@ -74,7 +74,9 @@ export function focusListItem( focusClientId, treeGridElement ) {
|
|
|
74
74
|
const row = treeGridElement?.querySelector(
|
|
75
75
|
`[role=row][data-block="${ focusClientId }"]`
|
|
76
76
|
);
|
|
77
|
-
if ( ! row )
|
|
77
|
+
if ( ! row ) {
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
78
80
|
// Focus the first focusable in the row, which is the ListViewBlockSelectButton.
|
|
79
81
|
return focus.focusable.find( row )[ 0 ];
|
|
80
82
|
};
|
|
@@ -1,10 +1,3 @@
|
|
|
1
|
-
.block-editor-media-placeholder__url-input-container {
|
|
2
|
-
// Reset the margin to ensure the url popover is adjacent to the button.
|
|
3
|
-
.block-editor-media-placeholder__button {
|
|
4
|
-
margin-bottom: 0;
|
|
5
|
-
}
|
|
6
|
-
}
|
|
7
|
-
|
|
8
1
|
.block-editor-media-placeholder__url-input-form {
|
|
9
2
|
display: flex;
|
|
10
3
|
|
|
@@ -29,10 +22,6 @@
|
|
|
29
22
|
flex-shrink: 1;
|
|
30
23
|
}
|
|
31
24
|
|
|
32
|
-
.block-editor-media-placeholder__button {
|
|
33
|
-
margin-bottom: 0.5rem;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
25
|
.block-editor-media-placeholder__cancel-button.is-link {
|
|
37
26
|
margin: 1em;
|
|
38
27
|
display: block;
|
|
@@ -81,7 +81,7 @@ const URLSelectionUI = ( {
|
|
|
81
81
|
className="block-editor-media-placeholder__button"
|
|
82
82
|
onClick={ openURLInput }
|
|
83
83
|
isPressed={ isURLInputVisible }
|
|
84
|
-
variant="
|
|
84
|
+
variant="secondary"
|
|
85
85
|
>
|
|
86
86
|
{ __( 'Insert from URL' ) }
|
|
87
87
|
</Button>
|
|
@@ -422,7 +422,7 @@ export function MediaPlaceholder( {
|
|
|
422
422
|
<Button
|
|
423
423
|
className="block-editor-media-placeholder__button"
|
|
424
424
|
onClick={ onToggleFeaturedImage }
|
|
425
|
-
variant="
|
|
425
|
+
variant="secondary"
|
|
426
426
|
>
|
|
427
427
|
{ __( 'Use featured image' ) }
|
|
428
428
|
</Button>
|
|
@@ -435,7 +435,7 @@ export function MediaPlaceholder( {
|
|
|
435
435
|
const defaultButton = ( { open } ) => {
|
|
436
436
|
return (
|
|
437
437
|
<Button
|
|
438
|
-
variant="
|
|
438
|
+
variant="secondary"
|
|
439
439
|
onClick={ () => {
|
|
440
440
|
open();
|
|
441
441
|
} }
|
|
@@ -165,7 +165,9 @@ function useToolbarFocus( {
|
|
|
165
165
|
}
|
|
166
166
|
return () => {
|
|
167
167
|
window.cancelAnimationFrame( raf );
|
|
168
|
-
if ( ! onIndexChange || ! navigableToolbarRef )
|
|
168
|
+
if ( ! onIndexChange || ! navigableToolbarRef ) {
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
169
171
|
// When the toolbar element is unmounted and onIndexChange is passed, we
|
|
170
172
|
// pass the focused toolbar item index so it can be hydrated later.
|
|
171
173
|
const items = getAllFocusableToolbarItemsIn( navigableToolbarRef );
|
|
@@ -2,17 +2,12 @@
|
|
|
2
2
|
* WordPress dependencies
|
|
3
3
|
*/
|
|
4
4
|
import { createContext, useMemo } from '@wordpress/element';
|
|
5
|
+
import { observableMap } from '@wordpress/compose';
|
|
5
6
|
|
|
6
|
-
export const BlockRefs = createContext( {
|
|
7
|
-
refs: new Map(),
|
|
8
|
-
callbacks: new Map(),
|
|
9
|
-
} );
|
|
7
|
+
export const BlockRefs = createContext( { refsMap: observableMap() } );
|
|
10
8
|
|
|
11
9
|
export function BlockRefsProvider( { children } ) {
|
|
12
|
-
const value = useMemo(
|
|
13
|
-
() => ( { refs: new Map(), callbacks: new Map() } ),
|
|
14
|
-
[]
|
|
15
|
-
);
|
|
10
|
+
const value = useMemo( () => ( { refsMap: observableMap() } ), [] );
|
|
16
11
|
return (
|
|
17
12
|
<BlockRefs.Provider value={ value }>{ children }</BlockRefs.Provider>
|
|
18
13
|
);
|
|
@@ -71,6 +71,7 @@ describe( 'useBlockSync hook', () => {
|
|
|
71
71
|
expect( onInput ).not.toHaveBeenCalled();
|
|
72
72
|
expect( replaceInnerBlocks ).not.toHaveBeenCalled();
|
|
73
73
|
expect( resetBlocks ).toHaveBeenCalledWith( fakeBlocks );
|
|
74
|
+
expect( resetBlocks ).toHaveBeenCalledTimes( 1 );
|
|
74
75
|
|
|
75
76
|
const testBlocks = [
|
|
76
77
|
{ clientId: 'a', innerBlocks: [], attributes: { foo: 1 } },
|
|
@@ -88,6 +89,7 @@ describe( 'useBlockSync hook', () => {
|
|
|
88
89
|
expect( onInput ).not.toHaveBeenCalled();
|
|
89
90
|
expect( replaceInnerBlocks ).not.toHaveBeenCalled();
|
|
90
91
|
expect( resetBlocks ).toHaveBeenCalledWith( testBlocks );
|
|
92
|
+
expect( resetBlocks ).toHaveBeenCalledTimes( 2 );
|
|
91
93
|
|
|
92
94
|
unmount();
|
|
93
95
|
|
|
@@ -95,6 +97,7 @@ describe( 'useBlockSync hook', () => {
|
|
|
95
97
|
expect( onInput ).not.toHaveBeenCalled();
|
|
96
98
|
expect( replaceInnerBlocks ).not.toHaveBeenCalled();
|
|
97
99
|
expect( resetBlocks ).toHaveBeenCalledWith( [] );
|
|
100
|
+
expect( resetBlocks ).toHaveBeenCalledTimes( 3 );
|
|
98
101
|
} );
|
|
99
102
|
|
|
100
103
|
it( 'replaces the inner blocks of a block when the controlled value changes if a clientId is passed', async () => {
|
|
@@ -123,6 +126,7 @@ describe( 'useBlockSync hook', () => {
|
|
|
123
126
|
'test', // It should use the given client ID.
|
|
124
127
|
fakeBlocks // It should use the controlled blocks value.
|
|
125
128
|
);
|
|
129
|
+
expect( replaceInnerBlocks ).toHaveBeenCalledTimes( 1 );
|
|
126
130
|
|
|
127
131
|
const testBlocks = [
|
|
128
132
|
{
|
|
@@ -148,6 +152,7 @@ describe( 'useBlockSync hook', () => {
|
|
|
148
152
|
expect( replaceInnerBlocks ).toHaveBeenCalledWith( 'test', [
|
|
149
153
|
expect.objectContaining( { name: 'test/test-block' } ),
|
|
150
154
|
] );
|
|
155
|
+
expect( replaceInnerBlocks ).toHaveBeenCalledTimes( 2 );
|
|
151
156
|
|
|
152
157
|
unmount();
|
|
153
158
|
|
|
@@ -155,6 +160,7 @@ describe( 'useBlockSync hook', () => {
|
|
|
155
160
|
expect( onInput ).not.toHaveBeenCalled();
|
|
156
161
|
expect( resetBlocks ).not.toHaveBeenCalled();
|
|
157
162
|
expect( replaceInnerBlocks ).toHaveBeenCalledWith( 'test', [] );
|
|
163
|
+
expect( replaceInnerBlocks ).toHaveBeenCalledTimes( 3 );
|
|
158
164
|
} );
|
|
159
165
|
|
|
160
166
|
it( 'does not add the controlled blocks to the block-editor store if the store already contains them', async () => {
|
|
@@ -354,6 +360,7 @@ describe( 'useBlockSync hook', () => {
|
|
|
354
360
|
);
|
|
355
361
|
|
|
356
362
|
expect( replaceInnerBlocks ).toHaveBeenCalledWith( 'test', [] );
|
|
363
|
+
expect( replaceInnerBlocks ).toHaveBeenCalledTimes( 1 );
|
|
357
364
|
expect( onChange ).not.toHaveBeenCalled();
|
|
358
365
|
expect( onInput ).not.toHaveBeenCalled();
|
|
359
366
|
} );
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* WordPress dependencies
|
|
3
3
|
*/
|
|
4
4
|
import { useEffect, useRef } from '@wordpress/element';
|
|
5
|
-
import { useRegistry
|
|
5
|
+
import { useRegistry } from '@wordpress/data';
|
|
6
6
|
import { cloneBlock } from '@wordpress/blocks';
|
|
7
7
|
|
|
8
8
|
/**
|
|
@@ -82,15 +82,6 @@ export default function useBlockSync( {
|
|
|
82
82
|
} = registry.dispatch( blockEditorStore );
|
|
83
83
|
const { getBlockName, getBlocks, getSelectionStart, getSelectionEnd } =
|
|
84
84
|
registry.select( blockEditorStore );
|
|
85
|
-
const isControlled = useSelect(
|
|
86
|
-
( select ) => {
|
|
87
|
-
return (
|
|
88
|
-
! clientId ||
|
|
89
|
-
select( blockEditorStore ).areInnerBlocksControlled( clientId )
|
|
90
|
-
);
|
|
91
|
-
},
|
|
92
|
-
[ clientId ]
|
|
93
|
-
);
|
|
94
85
|
|
|
95
86
|
const pendingChanges = useRef( { incoming: null, outgoing: [] } );
|
|
96
87
|
const subscribed = useRef( false );
|
|
@@ -186,15 +177,6 @@ export default function useBlockSync( {
|
|
|
186
177
|
}
|
|
187
178
|
}, [ controlledBlocks, clientId ] );
|
|
188
179
|
|
|
189
|
-
useEffect( () => {
|
|
190
|
-
// When the block becomes uncontrolled, it means its inner state has been reset
|
|
191
|
-
// we need to take the blocks again from the external value property.
|
|
192
|
-
if ( ! isControlled ) {
|
|
193
|
-
pendingChanges.current.outgoing = [];
|
|
194
|
-
setControlledBlocks();
|
|
195
|
-
}
|
|
196
|
-
}, [ isControlled ] );
|
|
197
|
-
|
|
198
180
|
useEffect( () => {
|
|
199
181
|
const {
|
|
200
182
|
getSelectedBlocksInitialCaretPosition,
|
|
@@ -216,8 +198,9 @@ export default function useBlockSync( {
|
|
|
216
198
|
// the subscription is triggering for a block (`clientId !== null`)
|
|
217
199
|
// and its block name can't be found because it's not on the list.
|
|
218
200
|
// (`getBlockName( clientId ) === null`).
|
|
219
|
-
if ( clientId !== null && getBlockName( clientId ) === null )
|
|
201
|
+
if ( clientId !== null && getBlockName( clientId ) === null ) {
|
|
220
202
|
return;
|
|
203
|
+
}
|
|
221
204
|
|
|
222
205
|
// When RESET_BLOCKS on parent blocks get called, the controlled blocks
|
|
223
206
|
// can reset to uncontrolled, in these situations, it means we need to populate
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { insert, isCollapsed } from '@wordpress/rich-text';
|
|
5
|
+
import { applyFilters } from '@wordpress/hooks';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Internal dependencies
|
|
9
|
+
*/
|
|
10
|
+
import { store as blockEditorStore } from '../../../store';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* When typing over a selection, the selection will we wrapped by a matching
|
|
14
|
+
* character pair. The second character is optional, it defaults to the first
|
|
15
|
+
* character.
|
|
16
|
+
*
|
|
17
|
+
* @type {string[]} Array of character pairs.
|
|
18
|
+
*/
|
|
19
|
+
const wrapSelectionSettings = [ '`', '"', "'", '“”', '‘’' ];
|
|
20
|
+
|
|
21
|
+
export default ( props ) => ( element ) => {
|
|
22
|
+
function onInput( event ) {
|
|
23
|
+
const { inputType, data } = event;
|
|
24
|
+
const { value, onChange, registry } = props.current;
|
|
25
|
+
|
|
26
|
+
// Only run the rules when inserting text.
|
|
27
|
+
if ( inputType !== 'insertText' ) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if ( isCollapsed( value ) ) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const pair = applyFilters(
|
|
36
|
+
'blockEditor.wrapSelectionSettings',
|
|
37
|
+
wrapSelectionSettings
|
|
38
|
+
).find(
|
|
39
|
+
( [ startChar, endChar ] ) => startChar === data || endChar === data
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
if ( ! pair ) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const [ startChar, endChar = startChar ] = pair;
|
|
47
|
+
const start = value.start;
|
|
48
|
+
const end = value.end + startChar.length;
|
|
49
|
+
|
|
50
|
+
let newValue = insert( value, startChar, start, start );
|
|
51
|
+
newValue = insert( newValue, endChar, end, end );
|
|
52
|
+
|
|
53
|
+
const {
|
|
54
|
+
__unstableMarkLastChangeAsPersistent,
|
|
55
|
+
__unstableMarkAutomaticChange,
|
|
56
|
+
} = registry.dispatch( blockEditorStore );
|
|
57
|
+
|
|
58
|
+
__unstableMarkLastChangeAsPersistent();
|
|
59
|
+
onChange( newValue );
|
|
60
|
+
__unstableMarkAutomaticChange();
|
|
61
|
+
|
|
62
|
+
const init = {};
|
|
63
|
+
|
|
64
|
+
for ( const key in event ) {
|
|
65
|
+
init[ key ] = event[ key ];
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
init.data = endChar;
|
|
69
|
+
|
|
70
|
+
const { ownerDocument } = element;
|
|
71
|
+
const { defaultView } = ownerDocument;
|
|
72
|
+
const newEvent = new defaultView.InputEvent( 'input', init );
|
|
73
|
+
|
|
74
|
+
// Dispatch an `input` event with the new data. This will trigger the
|
|
75
|
+
// input rules.
|
|
76
|
+
// Postpone the `input` to the next event loop tick so that the dispatch
|
|
77
|
+
// doesn't happen synchronously in the middle of `beforeinput` dispatch.
|
|
78
|
+
// This is closer to how native `input` event would be timed, and also
|
|
79
|
+
// makes sure that the `input` event is dispatched only after the `onChange`
|
|
80
|
+
// call few lines above has fully updated the data store state and rerendered
|
|
81
|
+
// all affected components.
|
|
82
|
+
window.queueMicrotask( () => {
|
|
83
|
+
event.target.dispatchEvent( newEvent );
|
|
84
|
+
} );
|
|
85
|
+
event.preventDefault();
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
element.addEventListener( 'beforeinput', onInput );
|
|
89
|
+
return () => {
|
|
90
|
+
element.removeEventListener( 'beforeinput', onInput );
|
|
91
|
+
};
|
|
92
|
+
};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { DELETE, BACKSPACE } from '@wordpress/keycodes';
|
|
5
|
+
import { isCollapsed, isEmpty } from '@wordpress/rich-text';
|
|
6
|
+
|
|
7
|
+
export default ( props ) => ( element ) => {
|
|
8
|
+
function onKeyDown( event ) {
|
|
9
|
+
const { keyCode } = event;
|
|
10
|
+
|
|
11
|
+
if ( event.defaultPrevented ) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const { value, onMerge, onRemove } = props.current;
|
|
16
|
+
|
|
17
|
+
if ( keyCode === DELETE || keyCode === BACKSPACE ) {
|
|
18
|
+
const { start, end, text } = value;
|
|
19
|
+
const isReverse = keyCode === BACKSPACE;
|
|
20
|
+
const hasActiveFormats =
|
|
21
|
+
value.activeFormats && !! value.activeFormats.length;
|
|
22
|
+
|
|
23
|
+
// Only process delete if the key press occurs at an uncollapsed edge.
|
|
24
|
+
if (
|
|
25
|
+
! isCollapsed( value ) ||
|
|
26
|
+
hasActiveFormats ||
|
|
27
|
+
( isReverse && start !== 0 ) ||
|
|
28
|
+
( ! isReverse && end !== text.length )
|
|
29
|
+
) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
if ( onMerge ) {
|
|
34
|
+
onMerge( ! isReverse );
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Only handle remove on Backspace. This serves dual-purpose of being
|
|
38
|
+
// an intentional user interaction distinguishing between Backspace and
|
|
39
|
+
// Delete to remove the empty field, but also to avoid merge & remove
|
|
40
|
+
// causing destruction of two fields (merge, then removed merged).
|
|
41
|
+
else if ( onRemove && isEmpty( value ) && isReverse ) {
|
|
42
|
+
onRemove( ! isReverse );
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
event.preventDefault();
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
element.addEventListener( 'keydown', onKeyDown );
|
|
50
|
+
return () => {
|
|
51
|
+
element.removeEventListener( 'keydown', onKeyDown );
|
|
52
|
+
};
|
|
53
|
+
};
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { ENTER } from '@wordpress/keycodes';
|
|
5
|
+
import { insert, remove } from '@wordpress/rich-text';
|
|
6
|
+
import { getBlockTransforms, findTransform } from '@wordpress/blocks';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Internal dependencies
|
|
10
|
+
*/
|
|
11
|
+
import { store as blockEditorStore } from '../../../store';
|
|
12
|
+
import { splitValue } from '../split-value';
|
|
13
|
+
|
|
14
|
+
export default ( props ) => ( element ) => {
|
|
15
|
+
function onKeyDown( event ) {
|
|
16
|
+
if ( event.target.contentEditable !== 'true' ) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
if ( event.defaultPrevented ) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if ( event.keyCode !== ENTER ) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const {
|
|
29
|
+
removeEditorOnlyFormats,
|
|
30
|
+
value,
|
|
31
|
+
onReplace,
|
|
32
|
+
onSplit,
|
|
33
|
+
onChange,
|
|
34
|
+
disableLineBreaks,
|
|
35
|
+
onSplitAtEnd,
|
|
36
|
+
onSplitAtDoubleLineEnd,
|
|
37
|
+
registry,
|
|
38
|
+
} = props.current;
|
|
39
|
+
|
|
40
|
+
event.preventDefault();
|
|
41
|
+
|
|
42
|
+
const _value = { ...value };
|
|
43
|
+
_value.formats = removeEditorOnlyFormats( value );
|
|
44
|
+
const canSplit = onReplace && onSplit;
|
|
45
|
+
|
|
46
|
+
if ( onReplace ) {
|
|
47
|
+
const transforms = getBlockTransforms( 'from' ).filter(
|
|
48
|
+
( { type } ) => type === 'enter'
|
|
49
|
+
);
|
|
50
|
+
const transformation = findTransform( transforms, ( item ) => {
|
|
51
|
+
return item.regExp.test( _value.text );
|
|
52
|
+
} );
|
|
53
|
+
|
|
54
|
+
if ( transformation ) {
|
|
55
|
+
onReplace( [
|
|
56
|
+
transformation.transform( {
|
|
57
|
+
content: _value.text,
|
|
58
|
+
} ),
|
|
59
|
+
] );
|
|
60
|
+
registry
|
|
61
|
+
.dispatch( blockEditorStore )
|
|
62
|
+
.__unstableMarkAutomaticChange();
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const { text, start, end } = _value;
|
|
68
|
+
|
|
69
|
+
if ( event.shiftKey ) {
|
|
70
|
+
if ( ! disableLineBreaks ) {
|
|
71
|
+
onChange( insert( _value, '\n' ) );
|
|
72
|
+
}
|
|
73
|
+
} else if ( canSplit ) {
|
|
74
|
+
splitValue( {
|
|
75
|
+
value: _value,
|
|
76
|
+
onReplace,
|
|
77
|
+
onSplit,
|
|
78
|
+
} );
|
|
79
|
+
} else if ( onSplitAtEnd && start === end && end === text.length ) {
|
|
80
|
+
onSplitAtEnd();
|
|
81
|
+
} else if (
|
|
82
|
+
// For some blocks it's desirable to split at the end of the
|
|
83
|
+
// block when there are two line breaks at the end of the
|
|
84
|
+
// block, so triple Enter exits the block.
|
|
85
|
+
onSplitAtDoubleLineEnd &&
|
|
86
|
+
start === end &&
|
|
87
|
+
end === text.length &&
|
|
88
|
+
text.slice( -2 ) === '\n\n'
|
|
89
|
+
) {
|
|
90
|
+
registry.batch( () => {
|
|
91
|
+
_value.start = _value.end - 2;
|
|
92
|
+
onChange( remove( _value ) );
|
|
93
|
+
onSplitAtDoubleLineEnd();
|
|
94
|
+
} );
|
|
95
|
+
} else if ( ! disableLineBreaks ) {
|
|
96
|
+
onChange( insert( _value, '\n' ) );
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
element.addEventListener( 'keydown', onKeyDown );
|
|
101
|
+
return () => {
|
|
102
|
+
element.removeEventListener( 'keydown', onKeyDown );
|
|
103
|
+
};
|
|
104
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { store as blockEditorStore } from '../../../store';
|
|
5
|
+
|
|
6
|
+
export default ( props ) => ( element ) => {
|
|
7
|
+
function onFocus() {
|
|
8
|
+
const { registry } = props.current;
|
|
9
|
+
if ( ! registry.select( blockEditorStore ).isMultiSelecting() ) {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
// This is a little hack to work around focus issues with nested
|
|
14
|
+
// editable elements in Firefox. For some reason the editable child
|
|
15
|
+
// element sometimes regains focus, while it should not be focusable
|
|
16
|
+
// and focus should remain on the editable parent element.
|
|
17
|
+
// To do: try to find the cause of the shifting focus.
|
|
18
|
+
const parentEditable = element.parentElement.closest(
|
|
19
|
+
'[contenteditable="true"]'
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
if ( parentEditable ) {
|
|
23
|
+
parentEditable.focus();
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
element.addEventListener( 'focus', onFocus );
|
|
28
|
+
return () => {
|
|
29
|
+
element.removeEventListener( 'focus', onFocus );
|
|
30
|
+
};
|
|
31
|
+
};
|