@wordpress/block-editor 9.3.0 → 9.6.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 +2 -2
- 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 +4 -3
- 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 +8 -26
- package/build/components/block-pattern-setup/index.js.map +1 -1
- package/build/components/block-pattern-setup/setup-toolbar.js +3 -8
- package/build/components/block-pattern-setup/setup-toolbar.js.map +1 -1
- package/build/components/block-popover/inbetween.js +1 -1
- 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-preview/auto.js +21 -5
- package/build/components/block-preview/auto.js.map +1 -1
- package/build/components/block-settings-menu/block-edit-visually-button.js +70 -0
- package/build/components/block-settings-menu/block-edit-visually-button.js.map +1 -0
- 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 +5 -2
- package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
- package/build/components/block-settings-menu/index.js +6 -2
- package/build/components/block-settings-menu/index.js.map +1 -1
- package/build/components/block-settings-menu-controls/index.js +5 -2
- package/build/components/block-settings-menu-controls/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 +15 -15
- 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.native.js +65 -23
- package/build/components/block-types-list/index.native.js.map +1 -1
- package/build/components/border-radius-control/index.js +2 -0
- package/build/components/border-radius-control/index.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 +46 -39
- package/build/components/colors-gradients/control.js.map +1 -1
- package/build/components/colors-gradients/dropdown.js +7 -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/duotone/components.js +145 -0
- package/build/components/duotone/components.js.map +1 -0
- package/build/components/duotone/index.js +40 -0
- package/build/components/duotone/index.js.map +1 -0
- package/build/components/duotone/utils.js +38 -0
- package/build/components/duotone/utils.js.map +1 -0
- package/build/components/duotone-control/index.js +17 -5
- package/build/components/duotone-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/index.js +14 -0
- package/build/components/index.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.js +3 -3
- package/build/components/inserter/index.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 +5 -1
- package/build/components/inserter-list-item/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/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/media-placeholder/index.js +14 -2
- package/build/components/media-placeholder/index.js.map +1 -1
- package/build/components/media-placeholder/index.native.js +4 -4
- package/build/components/media-placeholder/index.native.js.map +1 -1
- package/build/components/media-replace-flow/index.js +6 -13
- package/build/components/media-replace-flow/index.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/publish-date-time-picker/index.js +3 -0
- package/build/components/publish-date-time-picker/index.js.map +1 -1
- 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 +2 -1
- package/build/components/rich-text/index.js.map +1 -1
- 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/rich-text/use-input-rules.js +4 -13
- package/build/components/rich-text/use-input-rules.js.map +1 -1
- package/build/components/rich-text/use-paste-handler.js +20 -5
- package/build/components/rich-text/use-paste-handler.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 +34 -2
- package/build/components/writing-flow/use-arrow-nav.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-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/elements/index.js +11 -3
- package/build/elements/index.js.map +1 -1
- package/build/hooks/aria-label.js +71 -0
- package/build/hooks/aria-label.js.map +1 -0
- package/build/hooks/color.js +2 -4
- package/build/hooks/color.js.map +1 -1
- package/build/hooks/duotone.js +33 -160
- package/build/hooks/duotone.js.map +1 -1
- package/build/hooks/index.js +11 -7
- package/build/hooks/index.js.map +1 -1
- package/build/hooks/layout.js +59 -18
- 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 -7
- package/build/index.js.map +1 -1
- package/build/layouts/flex.js +42 -38
- 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 +24 -31
- 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 +23 -12
- 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/selection.js +34 -0
- package/build/utils/selection.js.map +1 -0
- 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 +2 -2
- 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 +3 -1
- 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 +9 -27
- package/build-module/components/block-pattern-setup/index.js.map +1 -1
- package/build-module/components/block-pattern-setup/setup-toolbar.js +3 -8
- package/build-module/components/block-pattern-setup/setup-toolbar.js.map +1 -1
- package/build-module/components/block-popover/inbetween.js +1 -1
- 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-preview/auto.js +20 -5
- package/build-module/components/block-preview/auto.js.map +1 -1
- package/build-module/components/block-settings-menu/block-edit-visually-button.js +56 -0
- package/build-module/components/block-settings-menu/block-edit-visually-button.js.map +1 -0
- 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 +6 -5
- package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
- package/build-module/components/block-settings-menu/index.js +6 -3
- package/build-module/components/block-settings-menu/index.js.map +1 -1
- package/build-module/components/block-settings-menu-controls/index.js +7 -4
- package/build-module/components/block-settings-menu-controls/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 +15 -14
- 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.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 +2 -0
- package/build-module/components/border-radius-control/index.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 +47 -40
- package/build-module/components/colors-gradients/control.js.map +1 -1
- package/build-module/components/colors-gradients/dropdown.js +8 -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/duotone/components.js +130 -0
- package/build-module/components/duotone/components.js.map +1 -0
- package/build-module/components/duotone/index.js +3 -0
- package/build-module/components/duotone/index.js.map +1 -0
- package/build-module/components/duotone/utils.js +30 -0
- package/build-module/components/duotone/utils.js.map +1 -0
- package/build-module/components/duotone-control/index.js +18 -6
- package/build-module/components/duotone-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/index.js +1 -0
- package/build-module/components/index.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.js +3 -2
- package/build-module/components/inserter/index.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 +4 -1
- package/build-module/components/inserter-list-item/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/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/media-placeholder/index.js +14 -2
- package/build-module/components/media-placeholder/index.js.map +1 -1
- package/build-module/components/media-placeholder/index.native.js +5 -3
- package/build-module/components/media-placeholder/index.native.js.map +1 -1
- package/build-module/components/media-replace-flow/index.js +7 -13
- package/build-module/components/media-replace-flow/index.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/publish-date-time-picker/index.js +2 -0
- package/build-module/components/publish-date-time-picker/index.js.map +1 -1
- 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 +2 -1
- package/build-module/components/rich-text/index.js.map +1 -1
- 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/rich-text/use-input-rules.js +3 -11
- package/build-module/components/rich-text/use-input-rules.js.map +1 -1
- package/build-module/components/rich-text/use-paste-handler.js +20 -5
- package/build-module/components/rich-text/use-paste-handler.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 +35 -3
- package/build-module/components/writing-flow/use-arrow-nav.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-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/elements/index.js +7 -1
- package/build-module/elements/index.js.map +1 -1
- package/build-module/hooks/aria-label.js +59 -0
- package/build-module/hooks/aria-label.js.map +1 -0
- package/build-module/hooks/color.js +2 -3
- package/build-module/hooks/color.js.map +1 -1
- package/build-module/hooks/duotone.js +22 -140
- package/build-module/hooks/duotone.js.map +1 -1
- package/build-module/hooks/index.js +2 -1
- package/build-module/hooks/index.js.map +1 -1
- package/build-module/hooks/layout.js +60 -19
- 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 +43 -35
- 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 +14 -20
- 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 +23 -11
- 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/selection.js +24 -0
- package/build-module/utils/selection.js.map +1 -0
- package/build-style/style-rtl.css +43 -13
- package/build-style/style.css +43 -13
- package/package.json +28 -28
- package/src/components/block-draggable/test/helpers.native.js +3 -3
- package/src/components/block-list/block-invalid-warning.native.js +42 -7
- package/src/components/block-list/block.js +2 -2
- package/src/components/block-list/block.native.js +1 -0
- package/src/components/block-list/index.native.js +1 -1
- package/src/components/block-list/layout.js +15 -3
- package/src/components/block-list/style.scss +2 -2
- 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 +5 -25
- package/src/components/block-pattern-setup/setup-toolbar.js +2 -9
- package/src/components/block-pattern-setup/style.scss +4 -2
- package/src/components/block-popover/inbetween.js +1 -1
- package/src/components/block-popover/index.js +1 -1
- package/src/components/block-preview/auto.js +17 -3
- package/src/components/block-settings-menu/block-edit-visually-button.js +52 -0
- package/src/components/block-settings-menu/block-mode-toggle.js +1 -0
- package/src/components/block-settings-menu/block-settings-dropdown.js +7 -3
- package/src/components/block-settings-menu/index.js +15 -11
- package/src/components/block-settings-menu-controls/index.js +5 -4
- package/src/components/block-styles/preview.native.js +1 -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 +20 -12
- 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.native.js +76 -24
- package/src/components/block-types-list/style.native.scss +18 -0
- package/src/components/border-radius-control/index.js +2 -0
- package/src/components/color-palette/test/__snapshots__/control.js.snap +0 -4
- 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/with-colors.js +2 -2
- package/src/components/colors-gradients/control.js +78 -65
- package/src/components/colors-gradients/dropdown.js +9 -2
- package/src/components/colors-gradients/style.scss +11 -8
- package/src/components/colors-gradients/test/control.js +16 -23
- package/src/components/date-format-picker/index.js +1 -0
- package/src/components/duotone/components.js +133 -0
- package/src/components/duotone/index.js +7 -0
- package/src/components/duotone/utils.js +25 -0
- package/src/components/duotone-control/index.js +12 -7
- package/src/components/duotone-control/style.scss +5 -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/index.js +1 -0
- package/src/components/inserter/block-types-tab.native.js +42 -21
- package/src/components/inserter/index.js +3 -5
- 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 +4 -1
- package/src/components/link-control/index.js +1 -0
- package/src/components/link-control/test/fixtures/index.js +3 -4
- package/src/components/link-control/test/index.js +64 -73
- 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/style.scss +18 -4
- package/src/components/media-placeholder/index.js +20 -0
- package/src/components/media-placeholder/index.native.js +9 -5
- package/src/components/media-replace-flow/index.js +5 -14
- package/src/components/media-replace-flow/test/index.js +14 -4
- package/src/components/media-upload/README.md +8 -0
- package/src/components/observe-typing/index.js +17 -14
- package/src/components/publish-date-time-picker/index.js +2 -0
- package/src/components/responsive-block-control/README.md +3 -1
- package/src/components/responsive-block-control/test/index.js +1 -2
- package/src/components/rich-text/format-toolbar-container.js +63 -14
- package/src/components/rich-text/index.js +1 -0
- package/src/components/rich-text/use-format-types.js +38 -17
- package/src/components/rich-text/use-input-rules.js +6 -15
- package/src/components/rich-text/use-paste-handler.js +17 -5
- 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 +32 -1
- package/src/components/writing-flow/use-multi-selection.js +1 -48
- package/src/components/writing-flow/use-selection-observer.js +2 -3
- package/src/components/writing-flow/use-tab-nav.js +1 -1
- package/src/elements/index.js +8 -1
- package/src/elements/test/index.js +18 -0
- package/src/hooks/aria-label.js +67 -0
- package/src/hooks/color.js +10 -3
- package/src/hooks/duotone.js +18 -139
- package/src/hooks/index.js +2 -1
- package/src/hooks/layout.js +77 -29
- package/src/hooks/style.js +46 -39
- package/src/hooks/utils.js +7 -3
- package/src/index.js +1 -1
- package/src/layouts/flex.js +49 -43
- 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 +17 -31
- package/src/store/index.js +0 -4
- package/src/store/reducer.js +24 -11
- package/src/store/selectors.js +3 -4
- package/src/store/test/reducer.js +138 -10
- package/src/store/test/selectors.js +3 -6
- package/src/utils/selection.js +26 -0
- package/src/utils/test/selection.js +39 -0
- package/tsconfig.json +2 -1
|
@@ -6,7 +6,11 @@ import classnames from 'classnames';
|
|
|
6
6
|
/**
|
|
7
7
|
* WordPress dependencies
|
|
8
8
|
*/
|
|
9
|
-
import {
|
|
9
|
+
import {
|
|
10
|
+
Button,
|
|
11
|
+
__experimentalHStack as HStack,
|
|
12
|
+
__experimentalTruncate as Truncate,
|
|
13
|
+
} from '@wordpress/components';
|
|
10
14
|
import { forwardRef } from '@wordpress/element';
|
|
11
15
|
import { Icon, lock } from '@wordpress/icons';
|
|
12
16
|
import { SPACE, ENTER } from '@wordpress/keycodes';
|
|
@@ -16,7 +20,7 @@ import { SPACE, ENTER } from '@wordpress/keycodes';
|
|
|
16
20
|
*/
|
|
17
21
|
import BlockIcon from '../block-icon';
|
|
18
22
|
import useBlockDisplayInformation from '../use-block-display-information';
|
|
19
|
-
import
|
|
23
|
+
import useBlockDisplayTitle from '../block-title/use-block-display-title';
|
|
20
24
|
import ListViewExpander from './expander';
|
|
21
25
|
import { useBlockLock } from '../block-lock';
|
|
22
26
|
|
|
@@ -35,6 +39,10 @@ function ListViewBlockSelectButton(
|
|
|
35
39
|
ref
|
|
36
40
|
) {
|
|
37
41
|
const blockInformation = useBlockDisplayInformation( clientId );
|
|
42
|
+
const blockTitle = useBlockDisplayTitle( {
|
|
43
|
+
clientId,
|
|
44
|
+
context: 'list-view',
|
|
45
|
+
} );
|
|
38
46
|
const { isLocked } = useBlockLock( clientId );
|
|
39
47
|
|
|
40
48
|
// The `href` attribute triggers the browser's native HTML drag operations.
|
|
@@ -72,19 +80,26 @@ function ListViewBlockSelectButton(
|
|
|
72
80
|
>
|
|
73
81
|
<ListViewExpander onClick={ onToggleExpanded } />
|
|
74
82
|
<BlockIcon icon={ blockInformation?.icon } showColors />
|
|
75
|
-
<
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
83
|
+
<HStack
|
|
84
|
+
alignment="center"
|
|
85
|
+
className="block-editor-list-view-block-select-button__label-wrapper"
|
|
86
|
+
justify="flex-start"
|
|
87
|
+
spacing={ 1 }
|
|
88
|
+
>
|
|
89
|
+
<span className="block-editor-list-view-block-select-button__title">
|
|
90
|
+
<Truncate ellipsizeMode="auto">{ blockTitle }</Truncate>
|
|
81
91
|
</span>
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
92
|
+
{ blockInformation?.anchor && (
|
|
93
|
+
<span className="block-editor-list-view-block-select-button__anchor">
|
|
94
|
+
{ blockInformation.anchor }
|
|
95
|
+
</span>
|
|
96
|
+
) }
|
|
97
|
+
{ isLocked && (
|
|
98
|
+
<span className="block-editor-list-view-block-select-button__lock">
|
|
99
|
+
<Icon icon={ lock } />
|
|
100
|
+
</span>
|
|
101
|
+
) }
|
|
102
|
+
</HStack>
|
|
88
103
|
</Button>
|
|
89
104
|
</>
|
|
90
105
|
);
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* External dependencies
|
|
3
|
-
*/
|
|
4
|
-
import { compact } from 'lodash';
|
|
5
|
-
|
|
6
1
|
/**
|
|
7
2
|
* WordPress dependencies
|
|
8
3
|
*/
|
|
@@ -95,7 +90,7 @@ function ListViewBranch( props ) {
|
|
|
95
90
|
|
|
96
91
|
const { expandedState, draggedClientIds } = useListViewContext();
|
|
97
92
|
|
|
98
|
-
const filteredBlocks =
|
|
93
|
+
const filteredBlocks = blocks.filter( Boolean );
|
|
99
94
|
const blockCount = filteredBlocks.length;
|
|
100
95
|
let nextPosition = listPosition;
|
|
101
96
|
|
|
@@ -97,7 +97,7 @@
|
|
|
97
97
|
align-items: center;
|
|
98
98
|
width: 100%;
|
|
99
99
|
height: auto;
|
|
100
|
-
padding: ($grid-unit-15 * 0.5) $grid-unit-
|
|
100
|
+
padding: ($grid-unit-15 * 0.5) $grid-unit-05 ($grid-unit-15 * 0.5) 0;
|
|
101
101
|
text-align: left;
|
|
102
102
|
color: $gray-900;
|
|
103
103
|
border-radius: $radius-block-ui;
|
|
@@ -207,7 +207,7 @@
|
|
|
207
207
|
}
|
|
208
208
|
|
|
209
209
|
.block-editor-list-view-block__menu-cell {
|
|
210
|
-
padding-right:
|
|
210
|
+
padding-right: $grid-unit-05;
|
|
211
211
|
|
|
212
212
|
.components-button.has-icon {
|
|
213
213
|
height: 24px;
|
|
@@ -297,13 +297,27 @@
|
|
|
297
297
|
}
|
|
298
298
|
}
|
|
299
299
|
|
|
300
|
+
.block-editor-list-view-block-select-button__label-wrapper {
|
|
301
|
+
min-width: 120px;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
.block-editor-list-view-block-select-button__title {
|
|
305
|
+
flex: 1;
|
|
306
|
+
position: relative;
|
|
307
|
+
|
|
308
|
+
.components-truncate {
|
|
309
|
+
position: absolute;
|
|
310
|
+
width: 100%;
|
|
311
|
+
transform: translateY(-50%);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
|
|
300
315
|
.block-editor-list-view-block-select-button__anchor {
|
|
301
316
|
background: rgba($black, 0.1);
|
|
302
317
|
border-radius: $radius-block-ui;
|
|
303
318
|
display: inline-block;
|
|
304
319
|
padding: 2px 6px;
|
|
305
|
-
|
|
306
|
-
max-width: 120px;
|
|
320
|
+
max-width: min(100px, 40%);
|
|
307
321
|
overflow: hidden;
|
|
308
322
|
text-overflow: ellipsis;
|
|
309
323
|
}
|
|
@@ -71,6 +71,7 @@ export function MediaPlaceholder( {
|
|
|
71
71
|
onSelect,
|
|
72
72
|
onCancel,
|
|
73
73
|
onSelectURL,
|
|
74
|
+
onToggleFeaturedImage,
|
|
74
75
|
onDoubleClick,
|
|
75
76
|
onFilesPreUpload = noop,
|
|
76
77
|
onHTMLDrop = noop,
|
|
@@ -307,6 +308,22 @@ export function MediaPlaceholder( {
|
|
|
307
308
|
);
|
|
308
309
|
};
|
|
309
310
|
|
|
311
|
+
const renderFeaturedImageToggle = () => {
|
|
312
|
+
return (
|
|
313
|
+
onToggleFeaturedImage && (
|
|
314
|
+
<div className="block-editor-media-placeholder__url-input-container">
|
|
315
|
+
<Button
|
|
316
|
+
className="block-editor-media-placeholder__button"
|
|
317
|
+
onClick={ onToggleFeaturedImage }
|
|
318
|
+
variant="tertiary"
|
|
319
|
+
>
|
|
320
|
+
{ __( 'Use featured image' ) }
|
|
321
|
+
</Button>
|
|
322
|
+
</div>
|
|
323
|
+
)
|
|
324
|
+
);
|
|
325
|
+
};
|
|
326
|
+
|
|
310
327
|
const renderMediaUploadChecked = () => {
|
|
311
328
|
const defaultButton = ( { open } ) => {
|
|
312
329
|
return (
|
|
@@ -328,6 +345,7 @@ export function MediaPlaceholder( {
|
|
|
328
345
|
multiple={ multiple }
|
|
329
346
|
onSelect={ onSelect }
|
|
330
347
|
allowedTypes={ allowedTypes }
|
|
348
|
+
mode={ 'browse' }
|
|
331
349
|
value={
|
|
332
350
|
Array.isArray( value )
|
|
333
351
|
? value.map( ( { id } ) => id )
|
|
@@ -360,6 +378,7 @@ export function MediaPlaceholder( {
|
|
|
360
378
|
</Button>
|
|
361
379
|
{ uploadMediaLibraryButton }
|
|
362
380
|
{ renderUrlSelectionUI() }
|
|
381
|
+
{ renderFeaturedImageToggle() }
|
|
363
382
|
{ renderCancelLink() }
|
|
364
383
|
</>
|
|
365
384
|
);
|
|
@@ -388,6 +407,7 @@ export function MediaPlaceholder( {
|
|
|
388
407
|
</FormFileUpload>
|
|
389
408
|
{ uploadMediaLibraryButton }
|
|
390
409
|
{ renderUrlSelectionUI() }
|
|
410
|
+
{ renderFeaturedImageToggle() }
|
|
391
411
|
{ renderCancelLink() }
|
|
392
412
|
</>
|
|
393
413
|
);
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
* External dependencies
|
|
3
3
|
*/
|
|
4
4
|
import { View, Text, TouchableWithoutFeedback } from 'react-native';
|
|
5
|
-
import { uniqWith } from 'lodash';
|
|
6
5
|
|
|
7
6
|
/**
|
|
8
7
|
* WordPress dependencies
|
|
@@ -23,12 +22,17 @@ import { Icon, plusCircleFilled } from '@wordpress/icons';
|
|
|
23
22
|
*/
|
|
24
23
|
import styles from './styles.scss';
|
|
25
24
|
|
|
25
|
+
const isMediaEqual = ( media1, media2 ) =>
|
|
26
|
+
media1.id === media2.id || media1.url === media2.url;
|
|
27
|
+
|
|
26
28
|
// Remove duplicates after gallery append.
|
|
27
29
|
const dedupMedia = ( media ) =>
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
media.reduce(
|
|
31
|
+
( dedupedMedia, mediaItem ) =>
|
|
32
|
+
dedupedMedia.some( ( item ) => isMediaEqual( item, mediaItem ) )
|
|
33
|
+
? dedupedMedia
|
|
34
|
+
: [ ...dedupedMedia, mediaItem ],
|
|
35
|
+
[]
|
|
32
36
|
);
|
|
33
37
|
|
|
34
38
|
function MediaPlaceholder( props ) {
|
|
@@ -1,12 +1,7 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* External dependencies
|
|
3
|
-
*/
|
|
4
|
-
import { uniqueId } from 'lodash';
|
|
5
|
-
|
|
6
1
|
/**
|
|
7
2
|
* WordPress dependencies
|
|
8
3
|
*/
|
|
9
|
-
import {
|
|
4
|
+
import { useRef } from '@wordpress/element';
|
|
10
5
|
import { __ } from '@wordpress/i18n';
|
|
11
6
|
import { speak } from '@wordpress/a11y';
|
|
12
7
|
import {
|
|
@@ -38,6 +33,7 @@ import LinkControl from '../link-control';
|
|
|
38
33
|
import { store as blockEditorStore } from '../../store';
|
|
39
34
|
|
|
40
35
|
const noop = () => {};
|
|
36
|
+
let uniqueId = 0;
|
|
41
37
|
|
|
42
38
|
const MediaReplaceFlow = ( {
|
|
43
39
|
mediaURL,
|
|
@@ -59,14 +55,11 @@ const MediaReplaceFlow = ( {
|
|
|
59
55
|
addToGallery,
|
|
60
56
|
handleUpload = true,
|
|
61
57
|
} ) => {
|
|
62
|
-
const [ mediaURLValue, setMediaURLValue ] = useState( mediaURL );
|
|
63
58
|
const mediaUpload = useSelect( ( select ) => {
|
|
64
59
|
return select( blockEditorStore ).getSettings().mediaUpload;
|
|
65
60
|
}, [] );
|
|
66
61
|
const editMediaButtonRef = useRef();
|
|
67
|
-
const errorNoticeID = uniqueId
|
|
68
|
-
'block-editor/media-replace-flow/error-notice/'
|
|
69
|
-
);
|
|
62
|
+
const errorNoticeID = `block-editor/media-replace-flow/error-notice/${ ++uniqueId }`;
|
|
70
63
|
|
|
71
64
|
const onUploadError = ( message ) => {
|
|
72
65
|
const safeMessage = stripHTML( message );
|
|
@@ -94,7 +87,6 @@ const MediaReplaceFlow = ( {
|
|
|
94
87
|
onToggleFeaturedImage();
|
|
95
88
|
}
|
|
96
89
|
closeMenu();
|
|
97
|
-
setMediaURLValue( media?.url );
|
|
98
90
|
// Calling `onSelect` after the state update since it might unmount the component.
|
|
99
91
|
onSelect( media );
|
|
100
92
|
speak( __( 'The media file has been replaced' ) );
|
|
@@ -219,14 +211,13 @@ const MediaReplaceFlow = ( {
|
|
|
219
211
|
{ __( 'Current media URL:' ) }
|
|
220
212
|
</span>
|
|
221
213
|
|
|
222
|
-
<Tooltip text={
|
|
214
|
+
<Tooltip text={ mediaURL } position="bottom">
|
|
223
215
|
<div>
|
|
224
216
|
<LinkControl
|
|
225
|
-
value={ { url:
|
|
217
|
+
value={ { url: mediaURL } }
|
|
226
218
|
settings={ [] }
|
|
227
219
|
showSuggestions={ false }
|
|
228
220
|
onChange={ ( { url } ) => {
|
|
229
|
-
setMediaURLValue( url );
|
|
230
221
|
onSelectURL( url );
|
|
231
222
|
editMediaButtonRef.current.focus();
|
|
232
223
|
} }
|
|
@@ -3,6 +3,11 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { render, fireEvent } from '@testing-library/react';
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* WordPress dependencies
|
|
8
|
+
*/
|
|
9
|
+
import { useState } from '@wordpress/element';
|
|
10
|
+
|
|
6
11
|
/**
|
|
7
12
|
* Internal dependencies
|
|
8
13
|
*/
|
|
@@ -10,19 +15,24 @@ import MediaReplaceFlow from '../';
|
|
|
10
15
|
|
|
11
16
|
const noop = () => {};
|
|
12
17
|
|
|
13
|
-
function
|
|
14
|
-
const
|
|
18
|
+
function TestWrapper() {
|
|
19
|
+
const [ mediaURL, setMediaURL ] = useState( 'https://example.media' );
|
|
20
|
+
return (
|
|
15
21
|
<MediaReplaceFlow
|
|
16
22
|
mediaId={ 1 }
|
|
17
|
-
mediaURL={
|
|
23
|
+
mediaURL={ mediaURL }
|
|
18
24
|
allowedTypes={ [ 'png' ] }
|
|
19
25
|
accept="image/*"
|
|
20
26
|
onSelect={ noop }
|
|
21
|
-
onSelectURL={
|
|
27
|
+
onSelectURL={ setMediaURL }
|
|
22
28
|
onError={ noop }
|
|
23
29
|
onCloseModal={ noop }
|
|
24
30
|
/>
|
|
25
31
|
);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function setUpMediaReplaceFlow() {
|
|
35
|
+
const { container } = render( <TestWrapper /> );
|
|
26
36
|
return container;
|
|
27
37
|
}
|
|
28
38
|
|
|
@@ -64,6 +64,14 @@ If allowedTypes is unset all mime types should be allowed.
|
|
|
64
64
|
- Required: No
|
|
65
65
|
- Platform: Web | Mobile
|
|
66
66
|
|
|
67
|
+
### mode
|
|
68
|
+
|
|
69
|
+
Value of Frame content default mode like 'browse', 'upload' etc.
|
|
70
|
+
|
|
71
|
+
- Type: `String`
|
|
72
|
+
- Required: No
|
|
73
|
+
- Default: false
|
|
74
|
+
- Platform: Web
|
|
67
75
|
### multiple
|
|
68
76
|
|
|
69
77
|
Whether to allow multiple selections or not.
|
|
@@ -115,9 +115,13 @@ export function useMouseMoveTypingReset() {
|
|
|
115
115
|
* field, presses ESC or TAB, or moves the mouse in the document.
|
|
116
116
|
*/
|
|
117
117
|
export function useTypingObserver() {
|
|
118
|
-
const isTyping = useSelect( ( select ) =>
|
|
119
|
-
select( blockEditorStore )
|
|
120
|
-
|
|
118
|
+
const { isTyping, hasInlineToolbar } = useSelect( ( select ) => {
|
|
119
|
+
const { isTyping: _isTyping, getSettings } = select( blockEditorStore );
|
|
120
|
+
return {
|
|
121
|
+
isTyping: _isTyping(),
|
|
122
|
+
hasInlineToolbar: getSettings().hasInlineToolbar,
|
|
123
|
+
};
|
|
124
|
+
}, [] );
|
|
121
125
|
const { startTyping, stopTyping } = useDispatch( blockEditorStore );
|
|
122
126
|
|
|
123
127
|
const ref1 = useMouseMoveTypingReset();
|
|
@@ -125,6 +129,7 @@ export function useTypingObserver() {
|
|
|
125
129
|
( node ) => {
|
|
126
130
|
const { ownerDocument } = node;
|
|
127
131
|
const { defaultView } = ownerDocument;
|
|
132
|
+
const selection = defaultView.getSelection();
|
|
128
133
|
|
|
129
134
|
// Listeners to stop typing should only be added when typing.
|
|
130
135
|
// Listeners to start typing should only be added when not typing.
|
|
@@ -170,22 +175,20 @@ export function useTypingObserver() {
|
|
|
170
175
|
* uncollapsed (shift) selection.
|
|
171
176
|
*/
|
|
172
177
|
function stopTypingOnSelectionUncollapse() {
|
|
173
|
-
|
|
174
|
-
const isCollapsed =
|
|
175
|
-
selection.rangeCount > 0 &&
|
|
176
|
-
selection.getRangeAt( 0 ).collapsed;
|
|
177
|
-
|
|
178
|
-
if ( ! isCollapsed ) {
|
|
178
|
+
if ( ! selection.isCollapsed ) {
|
|
179
179
|
stopTyping();
|
|
180
180
|
}
|
|
181
181
|
}
|
|
182
182
|
|
|
183
183
|
node.addEventListener( 'focus', stopTypingOnNonTextField );
|
|
184
184
|
node.addEventListener( 'keydown', stopTypingOnEscapeKey );
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
185
|
+
|
|
186
|
+
if ( ! hasInlineToolbar ) {
|
|
187
|
+
ownerDocument.addEventListener(
|
|
188
|
+
'selectionchange',
|
|
189
|
+
stopTypingOnSelectionUncollapse
|
|
190
|
+
);
|
|
191
|
+
}
|
|
189
192
|
|
|
190
193
|
return () => {
|
|
191
194
|
defaultView.clearTimeout( timerId );
|
|
@@ -242,7 +245,7 @@ export function useTypingObserver() {
|
|
|
242
245
|
node.removeEventListener( 'keydown', startTypingInTextField );
|
|
243
246
|
};
|
|
244
247
|
},
|
|
245
|
-
[ isTyping, startTyping, stopTyping ]
|
|
248
|
+
[ isTyping, hasInlineToolbar, startTyping, stopTyping ]
|
|
246
249
|
);
|
|
247
250
|
|
|
248
251
|
return useMergeRefs( [ ref1, ref2 ] );
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
import { DateTimePicker } from '@wordpress/components';
|
|
5
5
|
import { __ } from '@wordpress/i18n';
|
|
6
6
|
import { forwardRef } from '@wordpress/element';
|
|
7
|
+
import { __experimentalGetSettings as getSettings } from '@wordpress/date';
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* Internal dependencies
|
|
@@ -27,6 +28,7 @@ function PublishDateTimePicker(
|
|
|
27
28
|
onClose={ onClose }
|
|
28
29
|
/>
|
|
29
30
|
<DateTimePicker
|
|
31
|
+
startOfWeek={ getSettings().l10n.startOfWeek }
|
|
30
32
|
__nextRemoveHelpButton
|
|
31
33
|
__nextRemoveResetButton
|
|
32
34
|
onChange={ onChange }
|
|
@@ -171,8 +171,10 @@ const renderDefaultControl = ( labelComponent, viewport ) => {
|
|
|
171
171
|
An optional render function (prop) used to render the controls for the _responsive_ settings. If not provided, by default, responsive controls will be _automatically_ rendered using the component returned by the `renderDefaultControl` prop. For _complete_ control over the output of the responsive controls, you may return a component here and it will be rendered when the control group is in "responsive" mode.
|
|
172
172
|
|
|
173
173
|
```jsx
|
|
174
|
+
let uniqueId = 0;
|
|
175
|
+
|
|
174
176
|
const renderResponsiveControls = ( viewports ) => {
|
|
175
|
-
const inputId = uniqueId
|
|
177
|
+
const inputId = ++uniqueId;
|
|
176
178
|
|
|
177
179
|
return viewports.map( ( { id, label } ) => {
|
|
178
180
|
return (
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { render, unmountComponentAtNode } from 'react-dom';
|
|
5
5
|
import { act, Simulate } from 'react-dom/test-utils';
|
|
6
|
-
import { uniqueId } from 'lodash';
|
|
7
6
|
|
|
8
7
|
/**
|
|
9
8
|
* WordPress dependencies
|
|
@@ -31,7 +30,7 @@ afterEach( () => {
|
|
|
31
30
|
container = null;
|
|
32
31
|
} );
|
|
33
32
|
|
|
34
|
-
const inputId =
|
|
33
|
+
const inputId = 'input-12345678';
|
|
35
34
|
|
|
36
35
|
const sizeOptions = [
|
|
37
36
|
{
|
|
@@ -2,32 +2,81 @@
|
|
|
2
2
|
* WordPress dependencies
|
|
3
3
|
*/
|
|
4
4
|
import { Popover, ToolbarGroup } from '@wordpress/components';
|
|
5
|
+
import { useSelect } from '@wordpress/data';
|
|
6
|
+
import {
|
|
7
|
+
isCollapsed,
|
|
8
|
+
getActiveFormats,
|
|
9
|
+
useAnchorRef,
|
|
10
|
+
store as richTextStore,
|
|
11
|
+
} from '@wordpress/rich-text';
|
|
5
12
|
|
|
6
13
|
/**
|
|
7
14
|
* Internal dependencies
|
|
8
15
|
*/
|
|
9
16
|
import BlockControls from '../block-controls';
|
|
10
17
|
import FormatToolbar from './format-toolbar';
|
|
18
|
+
import { store as blockEditorStore } from '../../store';
|
|
19
|
+
|
|
20
|
+
function InlineSelectionToolbar( { value, anchorRef, activeFormats } ) {
|
|
21
|
+
const lastFormat = activeFormats[ activeFormats.length - 1 ];
|
|
22
|
+
const lastFormatType = lastFormat?.type;
|
|
23
|
+
const settings = useSelect(
|
|
24
|
+
( select ) => select( richTextStore ).getFormatType( lastFormatType ),
|
|
25
|
+
[ lastFormatType ]
|
|
26
|
+
);
|
|
27
|
+
const selectionRef = useAnchorRef( {
|
|
28
|
+
ref: anchorRef,
|
|
29
|
+
value,
|
|
30
|
+
settings,
|
|
31
|
+
} );
|
|
32
|
+
|
|
33
|
+
return <InlineToolbar anchorRef={ selectionRef } />;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function InlineToolbar( { anchorRef } ) {
|
|
37
|
+
return (
|
|
38
|
+
<Popover
|
|
39
|
+
position="top center"
|
|
40
|
+
focusOnMount={ false }
|
|
41
|
+
anchorRef={ anchorRef }
|
|
42
|
+
className="block-editor-rich-text__inline-format-toolbar"
|
|
43
|
+
__unstableSlotName="block-toolbar"
|
|
44
|
+
>
|
|
45
|
+
<div className="block-editor-rich-text__inline-format-toolbar-group">
|
|
46
|
+
<ToolbarGroup>
|
|
47
|
+
<FormatToolbar />
|
|
48
|
+
</ToolbarGroup>
|
|
49
|
+
</div>
|
|
50
|
+
</Popover>
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const FormatToolbarContainer = ( { inline, anchorRef, value } ) => {
|
|
55
|
+
const hasInlineToolbar = useSelect(
|
|
56
|
+
( select ) => select( blockEditorStore ).getSettings().hasInlineToolbar,
|
|
57
|
+
[]
|
|
58
|
+
);
|
|
11
59
|
|
|
12
|
-
const FormatToolbarContainer = ( { inline, anchorRef } ) => {
|
|
13
60
|
if ( inline ) {
|
|
14
|
-
|
|
61
|
+
return <InlineToolbar anchorRef={ anchorRef } />;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if ( hasInlineToolbar ) {
|
|
65
|
+
const activeFormats = getActiveFormats( value );
|
|
66
|
+
|
|
67
|
+
if ( isCollapsed( value ) && ! activeFormats.length ) {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
|
|
15
71
|
return (
|
|
16
|
-
<
|
|
17
|
-
position="top center"
|
|
18
|
-
focusOnMount={ false }
|
|
72
|
+
<InlineSelectionToolbar
|
|
19
73
|
anchorRef={ anchorRef }
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
<div className="block-editor-rich-text__inline-format-toolbar-group">
|
|
24
|
-
<ToolbarGroup>
|
|
25
|
-
<FormatToolbar />
|
|
26
|
-
</ToolbarGroup>
|
|
27
|
-
</div>
|
|
28
|
-
</Popover>
|
|
74
|
+
value={ value }
|
|
75
|
+
activeFormats={ activeFormats }
|
|
76
|
+
/>
|
|
29
77
|
);
|
|
30
78
|
}
|
|
79
|
+
|
|
31
80
|
// Render regular toolbar.
|
|
32
81
|
return (
|
|
33
82
|
<BlockControls group="inline">
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* External dependencies
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
5
|
-
import { useSelect, useDispatch } from '@wordpress/data';
|
|
4
|
+
import { mapKeys } from 'lodash';
|
|
6
5
|
|
|
7
6
|
/**
|
|
8
|
-
*
|
|
7
|
+
* WordPress dependencies
|
|
9
8
|
*/
|
|
9
|
+
import { useMemo } from '@wordpress/element';
|
|
10
|
+
import { useSelect, useDispatch } from '@wordpress/data';
|
|
10
11
|
import { store as richTextStore } from '@wordpress/rich-text';
|
|
11
12
|
|
|
12
13
|
function formatTypesSelector( select ) {
|
|
@@ -32,6 +33,21 @@ const interactiveContentTags = new Set( [
|
|
|
32
33
|
'video',
|
|
33
34
|
] );
|
|
34
35
|
|
|
36
|
+
function prefixSelectKeys( selected, prefix ) {
|
|
37
|
+
if ( typeof selected !== 'object' ) return { [ prefix ]: selected };
|
|
38
|
+
return mapKeys( selected, ( value, key ) => `${ prefix }.${ key }` );
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function getPrefixedSelectKeys( selected, prefix ) {
|
|
42
|
+
if ( selected[ prefix ] ) return selected[ prefix ];
|
|
43
|
+
return Object.keys( selected )
|
|
44
|
+
.filter( ( key ) => key.startsWith( prefix + '.' ) )
|
|
45
|
+
.reduce( ( accumulator, key ) => {
|
|
46
|
+
accumulator[ key.slice( prefix.length + 1 ) ] = selected[ key ];
|
|
47
|
+
return accumulator;
|
|
48
|
+
}, {} );
|
|
49
|
+
}
|
|
50
|
+
|
|
35
51
|
/**
|
|
36
52
|
* This hook provides RichText with the `formatTypes` and its derived props from
|
|
37
53
|
* experimental format type settings.
|
|
@@ -68,18 +84,23 @@ export function useFormatTypes( {
|
|
|
68
84
|
const keyedSelected = useSelect(
|
|
69
85
|
( select ) =>
|
|
70
86
|
formatTypes.reduce( ( accumulator, type ) => {
|
|
71
|
-
if ( type.__experimentalGetPropsForEditableTreePreparation ) {
|
|
72
|
-
accumulator
|
|
87
|
+
if ( ! type.__experimentalGetPropsForEditableTreePreparation ) {
|
|
88
|
+
return accumulator;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return {
|
|
92
|
+
...accumulator,
|
|
93
|
+
...prefixSelectKeys(
|
|
73
94
|
type.__experimentalGetPropsForEditableTreePreparation(
|
|
74
95
|
select,
|
|
75
96
|
{
|
|
76
97
|
richTextIdentifier: identifier,
|
|
77
98
|
blockClientId: clientId,
|
|
78
99
|
}
|
|
79
|
-
)
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
100
|
+
),
|
|
101
|
+
type.name
|
|
102
|
+
),
|
|
103
|
+
};
|
|
83
104
|
}, {} ),
|
|
84
105
|
[ formatTypes, clientId, identifier ]
|
|
85
106
|
);
|
|
@@ -89,11 +110,14 @@ export function useFormatTypes( {
|
|
|
89
110
|
const changeHandlers = [];
|
|
90
111
|
const dependencies = [];
|
|
91
112
|
|
|
113
|
+
for ( const key in keyedSelected ) {
|
|
114
|
+
dependencies.push( keyedSelected[ key ] );
|
|
115
|
+
}
|
|
116
|
+
|
|
92
117
|
formatTypes.forEach( ( type ) => {
|
|
93
118
|
if ( type.__experimentalCreatePrepareEditableTree ) {
|
|
94
|
-
const selected = keyedSelected[ type.name ];
|
|
95
119
|
const handler = type.__experimentalCreatePrepareEditableTree(
|
|
96
|
-
|
|
120
|
+
getPrefixedSelectKeys( keyedSelected, type.name ),
|
|
97
121
|
{
|
|
98
122
|
richTextIdentifier: identifier,
|
|
99
123
|
blockClientId: clientId,
|
|
@@ -105,10 +129,6 @@ export function useFormatTypes( {
|
|
|
105
129
|
} else {
|
|
106
130
|
prepareHandlers.push( handler );
|
|
107
131
|
}
|
|
108
|
-
|
|
109
|
-
for ( const key in selected ) {
|
|
110
|
-
dependencies.push( selected[ key ] );
|
|
111
|
-
}
|
|
112
132
|
}
|
|
113
133
|
|
|
114
134
|
if ( type.__experimentalCreateOnChangeEditableValue ) {
|
|
@@ -125,10 +145,11 @@ export function useFormatTypes( {
|
|
|
125
145
|
);
|
|
126
146
|
}
|
|
127
147
|
|
|
148
|
+
const selected = getPrefixedSelectKeys( keyedSelected, type.name );
|
|
128
149
|
changeHandlers.push(
|
|
129
150
|
type.__experimentalCreateOnChangeEditableValue(
|
|
130
151
|
{
|
|
131
|
-
...(
|
|
152
|
+
...( typeof selected === 'object' ? selected : {} ),
|
|
132
153
|
...dispatchers,
|
|
133
154
|
},
|
|
134
155
|
{
|